mirror of
https://github.com/agentscope-ai/ReMe.git
synced 2026-08-28 05:25:04 +00:00
Some checks failed
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Tests ReMe / Unit Tests - py3.11 (push) Has been cancelled
Tests ReMe / Unit Tests - py3.12 (push) Has been cancelled
Tests ReMe / Unit Tests - py3.13 (push) Has been cancelled
Windows Smoke / CLI smoke - py3.11 (push) Has been cancelled
* feat(daily-paper): add daily paper cookbook workflow with schema and tests - Introduce daily paper schema types (DailyBriefOutput, PaperInfo, PaperNoteOutput, etc.) - Create daily paper cookbook module with analyze, collect, digest, rank, and select steps - Add cookbook entry point and integrate into main steps module - Replace job config export with daily brief output in schema exports - Add comprehensive unit tests covering pipeline, filtering, and output generation - Update dependencies including openai-codex and pypdf packages - Configure standalone daily paper cron job with proper scheduling and routing * test(daily_paper): update tests to use Claude Code wrapper exclusively - Add test to verify web search is disallowed by default in Claude Code - Update imports to include DailyBriefOutput, PaperNoteOutput, and PaperSelection schemas - Change test name from standalone_config_has_backend_split to reflect Claude Code only usage - Remove default agent wrapper and configure all steps to use Claude Code wrapper - Rename select_wrapper to cc_wrapper for clarity and consistency - Remove duplicate Claude Code wrapper initialization - Update test assertions to verify output schema usage matches expected sequence - Remove unused as_llm component from standalone configuration test * refactor(agent-wrapper): simplify skill resolution logic across all wrappers - Replace duplicate skill resolution code with centralized _resolve_project_skills method - Add project_path property with configurable relative path resolution - Introduce proper validation for skill names and directory existence - Change Codex wrapper to use project_path instead of workspace_path for skills - Add SKILL.md requirement validation for project skills - Remove redundant skill processing logic from individual wrappers * feat(daily_paper): add daily paper workflow with PDF analysis and brief generation - Implement shared state management and file helpers for daily-paper steps - Add PDF download and text extraction capabilities with arXiv integration - Create paper collection step with Hugging Face weekly/monthly rankings - Build ranking system using reciprocal-rank fusion with memory keyword scoring - Add Claude Code integration for paper analysis and detailed note generation - Implement digest step to create final five-minute brief from detailed notes - Add configuration for standalone daily cookbook application with cron scheduling - Create typed schema for paper information, selection, and output formats - Add atomic file writing with temporary file safety mechanisms - Implement exclusion logic for previously recommended papers and daily filters * feat(daily_paper): add DingTalk notification integration and enhance logging - Integrate DingTalk markdown send step to notify groups about daily paper briefs - Add comprehensive logging throughout daily paper workflow including start/finish events - Update daily paper analysis prompt to include code repository context requirement - Configure DingTalk notification in daily_cookbook.yaml with app credentials - Add dingtalk-stream dependency for proactive message API integration - Enhance daily paper README with DingTalk notification section and updated flow chart - Implement detailed logging for each step including paper processing and agent calls - Add test coverage for DingTalk markdown sending functionality and configuration - Update pre-commit config to exclude skills directory from checks - Add .claude/skills to gitignore for local development environment * refactor(dingtalk): move dingtalk_stream import to local scope and improve code safety - Moved global dingtalk_stream import to local scope in send.py to avoid eager loading - Added dynamic import with error handling for optional dependency cases - Updated test suite to verify lazy loading behavior works correctly - Fixed markdown title generation by using safe variable naming in wait.py - Enhanced test coverage for arxiv PDF download caching functionality - Updated application context initialization with proper resource directory configuration - Modified paper metadata to include source PDF path reference in output files * refactor(daily_paper): remove manifest system and store selection metadata in digest files - Remove JSON manifest creation and storage functionality - Store selection data directly in digest file frontmatter instead of separate manifest files - Add load_saved_selection method to rebuild selection from digest and paper-note metadata - Update README documentation to reflect new cookbook workflow architecture - Modify test cases to verify selection metadata in digest files instead of manifest JSON - Remove unused json import from multiple daily paper modules - Integrate PaperSelection schema for proper data validation in stored metadata * docs(daily_paper): add bilingual cookbook guides
71 lines
1.8 KiB
Python
71 lines
1.8 KiB
Python
"""Typed contracts for the daily-paper cookbook workflow."""
|
|
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class PaperInfo(BaseModel):
|
|
"""Normalized Hugging Face paper metadata plus local ranking fields."""
|
|
|
|
arxiv_id: str
|
|
title: str = ""
|
|
summary: str = ""
|
|
authors: list[str] = Field(default_factory=list)
|
|
published_at: str | None = None
|
|
submitted_on_daily_at: str | None = None
|
|
upvotes: int = 0
|
|
organization: str | None = None
|
|
github_repo: str | None = None
|
|
github_stars: int | None = None
|
|
project_page: str | None = None
|
|
thumbnail: str | None = None
|
|
monthly_rank: int | None = None
|
|
weekly_rank: int | None = None
|
|
fused_score: float = 0.0
|
|
|
|
@property
|
|
def hf_url(self) -> str:
|
|
"""Return the canonical Hugging Face paper-page URL."""
|
|
return f"https://huggingface.co/papers/{self.arxiv_id}"
|
|
|
|
@property
|
|
def arxiv_url(self) -> str:
|
|
"""Return the canonical arXiv abstract URL."""
|
|
return f"https://arxiv.org/abs/{self.arxiv_id}"
|
|
|
|
@property
|
|
def pdf_url(self) -> str:
|
|
"""Return the canonical arXiv PDF download URL."""
|
|
return f"https://arxiv.org/pdf/{self.arxiv_id}"
|
|
|
|
|
|
class SelectedPaper(BaseModel):
|
|
"""One agent-selected paper."""
|
|
|
|
arxiv_id: str
|
|
rank: int
|
|
reason: str
|
|
memory_relevance: Literal["high", "medium", "low"]
|
|
|
|
|
|
class PaperSelection(BaseModel):
|
|
"""Structured paper selection result."""
|
|
|
|
selection_reasoning: str
|
|
selected: list[SelectedPaper]
|
|
alternates: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class PaperNoteOutput(BaseModel):
|
|
"""Structured Claude Code output for one detailed paper note."""
|
|
|
|
description: str
|
|
body: str
|
|
|
|
|
|
class DailyBriefOutput(BaseModel):
|
|
"""Structured Claude Code output for the final five-minute brief."""
|
|
|
|
description: str
|
|
body: str
|