scientify 1.10.3 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -8
- package/README.zh.md +24 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/src/cli/research.d.ts +10 -0
- package/dist/src/cli/research.d.ts.map +1 -0
- package/dist/src/cli/research.js +283 -0
- package/dist/src/cli/research.js.map +1 -0
- package/dist/src/commands/metabolism-status.d.ts +6 -0
- package/dist/src/commands/metabolism-status.d.ts.map +1 -0
- package/dist/src/commands/metabolism-status.js +100 -0
- package/dist/src/commands/metabolism-status.js.map +1 -0
- package/dist/src/commands.d.ts.map +1 -1
- package/dist/src/commands.js +63 -0
- package/dist/src/commands.js.map +1 -1
- package/dist/src/hooks/cron-skill-inject.d.ts +21 -0
- package/dist/src/hooks/cron-skill-inject.d.ts.map +1 -0
- package/dist/src/hooks/cron-skill-inject.js +53 -0
- package/dist/src/hooks/cron-skill-inject.js.map +1 -0
- package/dist/src/hooks/research-mode.d.ts.map +1 -1
- package/dist/src/hooks/research-mode.js +6 -1
- package/dist/src/hooks/research-mode.js.map +1 -1
- package/dist/src/knowledge-state/project.d.ts +13 -0
- package/dist/src/knowledge-state/project.d.ts.map +1 -0
- package/dist/src/knowledge-state/project.js +88 -0
- package/dist/src/knowledge-state/project.js.map +1 -0
- package/dist/src/knowledge-state/render.d.ts +63 -0
- package/dist/src/knowledge-state/render.d.ts.map +1 -0
- package/dist/src/knowledge-state/render.js +368 -0
- package/dist/src/knowledge-state/render.js.map +1 -0
- package/dist/src/knowledge-state/store.d.ts +19 -0
- package/dist/src/knowledge-state/store.d.ts.map +1 -0
- package/dist/src/knowledge-state/store.js +978 -0
- package/dist/src/knowledge-state/store.js.map +1 -0
- package/dist/src/knowledge-state/types.d.ts +182 -0
- package/dist/src/knowledge-state/types.d.ts.map +1 -0
- package/dist/src/knowledge-state/types.js +2 -0
- package/dist/src/knowledge-state/types.js.map +1 -0
- package/dist/src/literature/subscription-state.d.ts +11 -0
- package/dist/src/literature/subscription-state.d.ts.map +1 -1
- package/dist/src/literature/subscription-state.js +38 -2
- package/dist/src/literature/subscription-state.js.map +1 -1
- package/dist/src/research-subscriptions/handlers.d.ts.map +1 -1
- package/dist/src/research-subscriptions/handlers.js +1 -0
- package/dist/src/research-subscriptions/handlers.js.map +1 -1
- package/dist/src/research-subscriptions/parse.d.ts.map +1 -1
- package/dist/src/research-subscriptions/parse.js +14 -0
- package/dist/src/research-subscriptions/parse.js.map +1 -1
- package/dist/src/research-subscriptions/prompt.d.ts +1 -1
- package/dist/src/research-subscriptions/prompt.d.ts.map +1 -1
- package/dist/src/research-subscriptions/prompt.js +178 -23
- package/dist/src/research-subscriptions/prompt.js.map +1 -1
- package/dist/src/research-subscriptions/types.d.ts +1 -0
- package/dist/src/research-subscriptions/types.d.ts.map +1 -1
- package/dist/src/templates/bootstrap.d.ts +8 -0
- package/dist/src/templates/bootstrap.d.ts.map +1 -0
- package/dist/src/templates/bootstrap.js +153 -0
- package/dist/src/templates/bootstrap.js.map +1 -0
- package/dist/src/tools/arxiv-download.d.ts +2 -2
- package/dist/src/tools/arxiv-download.d.ts.map +1 -1
- package/dist/src/tools/arxiv-download.js +9 -11
- package/dist/src/tools/arxiv-download.js.map +1 -1
- package/dist/src/tools/scientify-cron.d.ts +2 -0
- package/dist/src/tools/scientify-cron.d.ts.map +1 -1
- package/dist/src/tools/scientify-cron.js +7 -0
- package/dist/src/tools/scientify-cron.js.map +1 -1
- package/dist/src/tools/scientify-literature-state.d.ts +234 -0
- package/dist/src/tools/scientify-literature-state.d.ts.map +1 -1
- package/dist/src/tools/scientify-literature-state.js +638 -3
- package/dist/src/tools/scientify-literature-state.js.map +1 -1
- package/dist/src/tools/unpaywall-download.d.ts +2 -2
- package/dist/src/tools/unpaywall-download.js +4 -4
- package/dist/src/tools/unpaywall-download.js.map +1 -1
- package/openclaw.plugin.json +4 -2
- package/package.json +1 -1
- package/skills/idea-generation/SKILL.md +24 -29
- package/skills/metabolism/SKILL.md +118 -0
- package/skills/metabolism-init/SKILL.md +80 -0
- package/skills/{literature-survey → research-collect}/SKILL.md +23 -33
- package/skills/research-experiment/SKILL.md +1 -1
- package/skills/research-implement/SKILL.md +1 -1
- package/skills/research-pipeline/SKILL.md +6 -11
- package/skills/research-plan/SKILL.md +3 -3
- package/skills/research-review/SKILL.md +1 -1
- package/skills/research-subscription/SKILL.md +18 -3
- package/skills/research-survey/SKILL.md +6 -6
- package/skills/write-review-paper/SKILL.md +14 -14
- package/skills/_shared/workspace-spec.md +0 -152
- package/skills/install-scientify/SKILL.md +0 -106
package/README.md
CHANGED
|
@@ -275,7 +275,7 @@ Or invoke a specific skill directly with a slash command:
|
|
|
275
275
|
|
|
276
276
|
```
|
|
277
277
|
/research-pipeline
|
|
278
|
-
/
|
|
278
|
+
/research-collect
|
|
279
279
|
/idea-generation
|
|
280
280
|
```
|
|
281
281
|
|
|
@@ -310,7 +310,7 @@ You can also check status anytime with:
|
|
|
310
310
|
| Skill | Slash Command | Description |
|
|
311
311
|
|-------|---------------|-------------|
|
|
312
312
|
| **research-pipeline** | `/research-pipeline` | Orchestrator. Spawns sub-agents for each phase, verifies outputs between steps. |
|
|
313
|
-
| **
|
|
313
|
+
| **research-collect** | `/research-collect` | Search arXiv → filter → download .tex sources → cluster → generate survey report. |
|
|
314
314
|
| **research-survey** | `/research-survey` | Deep analysis of papers: extract formulas, map to code, produce method comparison table. |
|
|
315
315
|
| **research-plan** | `/research-plan` | Create 4-part implementation plan (Dataset/Model/Training/Testing) from survey results. |
|
|
316
316
|
| **research-implement** | `/research-implement` | Implement ML code from plan, run 2-epoch validation with `uv` venv isolation. |
|
|
@@ -336,8 +336,8 @@ You can also check status anytime with:
|
|
|
336
336
|
| `unpaywall_download` | Download open access PDFs by DOI via Unpaywall API. Non-OA papers are silently skipped (no failure). |
|
|
337
337
|
| `github_search` | Search GitHub repositories. Returns repo name, description, stars, URL. Supports language filtering and sorting. |
|
|
338
338
|
| `paper_browser` | Paginated browsing of large paper files (.tex/.md) to avoid loading thousands of lines into context. Returns specified line range with navigation info. |
|
|
339
|
-
| `scientify_cron_job` | Manage scheduled Scientify jobs from the model (`upsert`/`list`/`remove`). Main fields: `action`, `scope`, `schedule`, `topic`, `message`, `max_papers`, `recency_days`, `candidate_pool`, `score_weights`, `sources`, `channel`, `to`, `no_deliver`, `job_id`. |
|
|
340
|
-
| `scientify_literature_state` | Persistent incremental state for subscriptions: `prepare` dedupe context (+ memory hints), `record` pushed papers, `feedback` lightweight preference memory, and `status` inspection with traceable logs. |
|
|
339
|
+
| `scientify_cron_job` | Manage scheduled Scientify jobs from the model (`upsert`/`list`/`remove`). Main fields: `action`, `scope`, `schedule`, `topic`, `project`, `message`, `max_papers`, `recency_days`, `candidate_pool`, `score_weights`, `sources`, `channel`, `to`, `no_deliver`, `job_id`. |
|
|
340
|
+
| `scientify_literature_state` | Persistent incremental state for subscriptions: `prepare` dedupe context (+ memory hints), `record` pushed papers + project `knowledge_state` artifacts (including `paper_notes` deep-reading fields and full-text cleanup run logs), `feedback` lightweight preference memory, and `status` inspection with traceable logs. |
|
|
341
341
|
|
|
342
342
|
### Commands (direct, no LLM)
|
|
343
343
|
|
|
@@ -349,7 +349,7 @@ You can also check status anytime with:
|
|
|
349
349
|
| `/projects` | List all projects |
|
|
350
350
|
| `/project-switch <id>` | Switch active project |
|
|
351
351
|
| `/project-delete <id>` | Delete a project |
|
|
352
|
-
| `/research-subscribe ...` | Create/update scheduled Scientify jobs (supports `daily`, `weekly`, `every`, `at`, `cron`; options: `--channel`, `--to`, `--topic`, `--message`, `--max-papers`, `--recency-days`, `--candidate-pool`, `--score-weights`, `--sources`, `--no-deliver`) |
|
|
352
|
+
| `/research-subscribe ...` | Create/update scheduled Scientify jobs (supports `daily`, `weekly`, `every`, `at`, `cron`; options: `--channel`, `--to`, `--topic`, `--project`, `--message`, `--max-papers`, `--recency-days`, `--candidate-pool`, `--score-weights`, `--sources`, `--no-deliver`) |
|
|
353
353
|
| `/research-subscriptions` | Show your scheduled Scientify jobs |
|
|
354
354
|
| `/research-unsubscribe [job-id]` | Remove your scheduled Scientify jobs (or a specific job) |
|
|
355
355
|
|
|
@@ -360,6 +360,7 @@ You can also check status anytime with:
|
|
|
360
360
|
- `/research-subscribe weekly mon 09:30 --channel telegram --to 123456789`
|
|
361
361
|
- `/research-subscribe at 2m --channel webui` (`webui`/`tui` are aliases of `last`)
|
|
362
362
|
- `/research-subscribe daily 08:00 --topic "LLM alignment"`
|
|
363
|
+
- `/research-subscribe daily 08:00 --topic "LLM alignment" --project llm-alignment`
|
|
363
364
|
- `/research-subscribe daily 08:00 --topic "LLM alignment" --max-papers 5 --recency-days 30 --sources arxiv,openalex`
|
|
364
365
|
- `/research-subscribe daily 08:00 --topic "LLM alignment" --candidate-pool 12 --score-weights relevance:45,novelty:20,authority:25,actionability:10`
|
|
365
366
|
- `/research-subscribe at 1m --message "Time to drink coffee."`
|
|
@@ -371,9 +372,14 @@ Behavior notes:
|
|
|
371
372
|
- Reminder-safe fallback: if `topic` looks like a plain reminder (for example "remind me to sleep"), Scientify auto-routes it as a reminder message instead of literature pipeline.
|
|
372
373
|
- One-shot topic (`at ... --topic ...`) uses focused retrieval of representative papers; recurring schedules (`daily/weekly/every/cron`) use incremental tracking mode.
|
|
373
374
|
- Recurring incremental mode uses candidate-pool ranking before Top-K selection; if no unseen paper is found, it runs one representative fallback pass before returning empty.
|
|
375
|
+
- Default `max_papers` is 5 unless overridden by `--max-papers`.
|
|
376
|
+
- Built-in quality gates for research records: core full-text coverage >= 80%, evidence-binding rate >= 90%, citation error rate < 2%. Runs failing gates are downgraded to `degraded_quality`.
|
|
374
377
|
- Lightweight preference memory is stored backend-only (keyword/source affinities) and used to rerank future pushes quietly.
|
|
375
|
-
- Incremental state is persisted under `~/.openclaw/workspace/scientify/` (`literature-state.json`, `literature-push-log.jsonl`)
|
|
376
|
-
-
|
|
378
|
+
- Incremental dedupe + memory state is persisted under `~/.openclaw/workspace/scientify/` (`literature-state.json`, `literature-push-log.jsonl`).
|
|
379
|
+
- Project-level research traceability is persisted under `~/.openclaw/workspace/projects/{project-id}/knowledge_state/`.
|
|
380
|
+
- Full-text-first scheduled runs store per-paper deep-reading notes (domain/subdomains/cross-domain links/research goal/approach/design/contributions/practical insights/must-understand points/limitations/evidence anchors) under `knowledge_state/paper_notes/`.
|
|
381
|
+
- Full-text files should be downloaded to a temporary directory and cleaned after each run; cleanup result is tracked in `knowledge_state` run logs.
|
|
382
|
+
- Storage: subscription jobs are stored in OpenClaw cron storage; knowledge artifacts are stored in project workspace files.
|
|
377
383
|
- Global inspect: `openclaw cron list --all --json`
|
|
378
384
|
|
|
379
385
|
---
|
|
@@ -404,9 +410,17 @@ projects/
|
|
|
404
410
|
│ ├── iterations/ # Review iterations
|
|
405
411
|
│ │ └── judge_v*.md
|
|
406
412
|
│ ├── experiment_res.md # Final experiment results
|
|
407
|
-
│
|
|
413
|
+
│ ├── ideas/ # Generated ideas
|
|
408
414
|
│ ├── idea_*.md
|
|
409
415
|
│ └── selected_idea.md
|
|
416
|
+
│ └── knowledge_state/ # Scheduled research state artifacts
|
|
417
|
+
│ ├── knowledge/
|
|
418
|
+
│ ├── paper_notes/ # Per-paper deep-reading records
|
|
419
|
+
│ ├── daily_changes/
|
|
420
|
+
│ ├── hypotheses/
|
|
421
|
+
│ ├── logs/
|
|
422
|
+
│ ├── state.json
|
|
423
|
+
│ └── events.jsonl
|
|
410
424
|
└── another-project/
|
|
411
425
|
```
|
|
412
426
|
|
package/README.zh.md
CHANGED
|
@@ -275,7 +275,7 @@ openclaw gateway
|
|
|
275
275
|
|
|
276
276
|
```
|
|
277
277
|
/research-pipeline
|
|
278
|
-
/
|
|
278
|
+
/research-collect
|
|
279
279
|
/idea-generation
|
|
280
280
|
```
|
|
281
281
|
|
|
@@ -310,7 +310,7 @@ openclaw gateway
|
|
|
310
310
|
| Skill | 斜杠命令 | 描述 |
|
|
311
311
|
|-------|---------|------|
|
|
312
312
|
| **research-pipeline** | `/research-pipeline` | 编排器。逐阶段 spawn 子 agent,验证产出后推进。 |
|
|
313
|
-
| **
|
|
313
|
+
| **research-collect** | `/research-collect` | 搜索 arXiv → 筛选 → 下载 .tex 源文件 → 聚类 → 生成调研报告。 |
|
|
314
314
|
| **research-survey** | `/research-survey` | 深度分析论文:提取公式、映射代码、生成核心方法对比表。 |
|
|
315
315
|
| **research-plan** | `/research-plan` | 从调研结果制定四部分实现计划(数据集/模型/训练/测试)。 |
|
|
316
316
|
| **research-implement** | `/research-implement` | 按计划实现 ML 代码,`uv` 虚拟环境隔离,2 epoch 验证。 |
|
|
@@ -336,8 +336,8 @@ openclaw gateway
|
|
|
336
336
|
| `unpaywall_download` | 通过 Unpaywall API 按 DOI 下载开放获取 PDF。非 OA 论文跳过不报错。 |
|
|
337
337
|
| `github_search` | 搜索 GitHub 仓库,返回仓库名、描述、star 数、URL。支持语言过滤和排序。 |
|
|
338
338
|
| `paper_browser` | 分页浏览大型论文文件(.tex/.md),避免一次性加载数千行到上下文。返回指定行范围和导航信息。 |
|
|
339
|
-
| `scientify_cron_job` | 由模型管理 Scientify 定时任务(`upsert`/`list`/`remove`)。主要参数:`action`、`scope`、`schedule`、`topic`、`message`、`max_papers`、`recency_days`、`candidate_pool`、`score_weights`、`sources`、`channel`、`to`、`no_deliver`、`job_id`。 |
|
|
340
|
-
| `scientify_literature_state` | 订阅增量状态工具:`prepare` 获取去重上下文(含记忆提示)、`record`
|
|
339
|
+
| `scientify_cron_job` | 由模型管理 Scientify 定时任务(`upsert`/`list`/`remove`)。主要参数:`action`、`scope`、`schedule`、`topic`、`project`、`message`、`max_papers`、`recency_days`、`candidate_pool`、`score_weights`、`sources`、`channel`、`to`、`no_deliver`、`job_id`。 |
|
|
340
|
+
| `scientify_literature_state` | 订阅增量状态工具:`prepare` 获取去重上下文(含记忆提示)、`record` 记录已推送论文 + 项目级 `knowledge_state` 产物(含 `paper_notes` 深读字段与全文临时清理日志)、`feedback` 写入轻量偏好记忆、`status` 查看状态与可追溯日志。 |
|
|
341
341
|
|
|
342
342
|
### Commands(直接执行,不经 LLM)
|
|
343
343
|
|
|
@@ -349,7 +349,7 @@ openclaw gateway
|
|
|
349
349
|
| `/projects` | 列出所有项目 |
|
|
350
350
|
| `/project-switch <id>` | 切换当前项目 |
|
|
351
351
|
| `/project-delete <id>` | 删除项目 |
|
|
352
|
-
| `/research-subscribe ...` | 创建/更新定时 Scientify 任务(支持 `daily`、`weekly`、`every`、`at`、`cron`;可选参数:`--channel`、`--to`、`--topic`、`--message`、`--max-papers`、`--recency-days`、`--candidate-pool`、`--score-weights`、`--sources`、`--no-deliver`) |
|
|
352
|
+
| `/research-subscribe ...` | 创建/更新定时 Scientify 任务(支持 `daily`、`weekly`、`every`、`at`、`cron`;可选参数:`--channel`、`--to`、`--topic`、`--project`、`--message`、`--max-papers`、`--recency-days`、`--candidate-pool`、`--score-weights`、`--sources`、`--no-deliver`) |
|
|
353
353
|
| `/research-subscriptions` | 查看你的 Scientify 定时任务 |
|
|
354
354
|
| `/research-unsubscribe [job-id]` | 取消你的 Scientify 定时任务(或删除指定任务) |
|
|
355
355
|
|
|
@@ -360,6 +360,7 @@ openclaw gateway
|
|
|
360
360
|
- `/research-subscribe weekly mon 09:30 --channel telegram --to 123456789`
|
|
361
361
|
- `/research-subscribe at 2m --channel webui`(`webui`/`tui` 是 `last` 的别名)
|
|
362
362
|
- `/research-subscribe daily 08:00 --topic "LLM alignment"`
|
|
363
|
+
- `/research-subscribe daily 08:00 --topic "LLM alignment" --project llm-alignment`
|
|
363
364
|
- `/research-subscribe daily 08:00 --topic "LLM alignment" --max-papers 5 --recency-days 30 --sources arxiv,openalex`
|
|
364
365
|
- `/research-subscribe daily 08:00 --topic "LLM alignment" --candidate-pool 12 --score-weights relevance:45,novelty:20,authority:25,actionability:10`
|
|
365
366
|
- `/research-subscribe at 1m --message "Time to drink coffee."`
|
|
@@ -371,9 +372,14 @@ openclaw gateway
|
|
|
371
372
|
- 提醒兜底:如果 `topic` 看起来是普通提醒(例如“提醒我睡觉”),Scientify 会自动按提醒消息处理,不走文献流水线。
|
|
372
373
|
- 一次性研究任务(`at ... --topic ...`)使用“代表论文聚焦检索”;周期任务(`daily/weekly/every/cron`)保持“增量追踪”模式。
|
|
373
374
|
- 周期增量模式会先构建候选池并评分后再选 Top-K;若本轮无“未推送新文献”,会自动再跑一轮代表性回退检索,再决定是否返回空结果。
|
|
375
|
+
- 默认 `max_papers` 为 5(可用 `--max-papers` 覆盖)。
|
|
376
|
+
- 研究记录内置质量闸门:核心论文全文覆盖率 >= 80%、证据绑定率 >= 90%、引用错误率 < 2%。未达标会自动降级为 `degraded_quality`。
|
|
374
377
|
- 轻量偏好记忆(关键词/来源亲和)仅后台保存,不默认展示给用户,会静默影响后续排序。
|
|
375
|
-
-
|
|
376
|
-
-
|
|
378
|
+
- 增量去重与偏好状态会持久化到 `~/.openclaw/workspace/scientify/`(`literature-state.json`、`literature-push-log.jsonl`)。
|
|
379
|
+
- 项目级研究可追溯状态会持久化到 `~/.openclaw/workspace/projects/{project-id}/knowledge_state/`。
|
|
380
|
+
- 全文优先的定时研究会在 `knowledge_state/paper_notes/` 中沉淀逐篇深读记录(领域/子领域/交叉领域/研究目标/方法设计/贡献/经验启发/必读要点/局限/证据锚点)。
|
|
381
|
+
- 全文文件建议下载到临时目录并在每轮后清理,清理结果会写入 `knowledge_state` 的 run log。
|
|
382
|
+
- 存储位置:订阅任务保存在 OpenClaw cron 存储中;知识状态产物写入项目 workspace 文件。
|
|
377
383
|
- 全局查看:`openclaw cron list --all --json`
|
|
378
384
|
|
|
379
385
|
---
|
|
@@ -404,9 +410,17 @@ projects/
|
|
|
404
410
|
│ ├── iterations/ # 审查迭代
|
|
405
411
|
│ │ └── judge_v*.md
|
|
406
412
|
│ ├── experiment_res.md # 最终实验结果
|
|
407
|
-
│
|
|
408
|
-
│
|
|
409
|
-
│
|
|
413
|
+
│ ├── ideas/ # 生成的想法
|
|
414
|
+
│ │ ├── idea_*.md
|
|
415
|
+
│ │ └── selected_idea.md
|
|
416
|
+
│ └── knowledge_state/ # 定时研究状态产物
|
|
417
|
+
│ ├── knowledge/
|
|
418
|
+
│ ├── paper_notes/ # 逐篇深读沉淀
|
|
419
|
+
│ ├── daily_changes/
|
|
420
|
+
│ ├── hypotheses/
|
|
421
|
+
│ ├── logs/
|
|
422
|
+
│ ├── state.json
|
|
423
|
+
│ └── events.jsonl
|
|
410
424
|
└── another-project/
|
|
411
425
|
```
|
|
412
426
|
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAwClD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,QAgJtD"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,9 @@ import { createSkillInjectionHook } from "./src/hooks/inject-skill.js";
|
|
|
15
15
|
import { createResearchModeHook } from "./src/hooks/research-mode.js";
|
|
16
16
|
import { createScientifyCronAutofillHook } from "./src/hooks/scientify-cron-autofill.js";
|
|
17
17
|
import { createScientifyMessageTrackerHook, createScientifySignaturePromptHook, createScientifyUsageCleanupHook, createScientifyUsageTrackerHook, } from "./src/hooks/scientify-signature.js";
|
|
18
|
+
import { createCronSkillInjectionHook } from "./src/hooks/cron-skill-inject.js";
|
|
19
|
+
import { registerResearchCli } from "./src/cli/research.js";
|
|
20
|
+
import { handleMetabolismStatus } from "./src/commands/metabolism-status.js";
|
|
18
21
|
// Default: check every hour
|
|
19
22
|
const UPDATE_CHECK_INTERVAL_MS = 60 * 60 * 1000;
|
|
20
23
|
export default function register(api) {
|
|
@@ -127,6 +130,18 @@ export default function register(api) {
|
|
|
127
130
|
api.on("before_agent_start", createScientifySignaturePromptHook(), {
|
|
128
131
|
priority: 90,
|
|
129
132
|
});
|
|
130
|
-
|
|
133
|
+
// Inject SKILL.md into cron session messages (for metabolism heartbeat).
|
|
134
|
+
api.on("before_agent_start", createCronSkillInjectionHook());
|
|
135
|
+
// Register CLI commands: openclaw research init/list/status/delete
|
|
136
|
+
registerResearchCli(api);
|
|
137
|
+
// Register metabolism chat commands
|
|
138
|
+
api.registerCommand({
|
|
139
|
+
name: "metabolism-status",
|
|
140
|
+
description: "Show knowledge metabolism status (day, topics, hypotheses)",
|
|
141
|
+
acceptsArgs: false,
|
|
142
|
+
requireAuth: false,
|
|
143
|
+
handler: handleMetabolismStatus,
|
|
144
|
+
});
|
|
145
|
+
api.logger.info("Scientify plugin loaded");
|
|
131
146
|
}
|
|
132
147
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,8BAA8B,EAC9B,kCAAkC,EAClC,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,kCAAkC,EAAE,MAAM,2CAA2C,CAAC;AAC/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,+BAA+B,EAAE,MAAM,wCAAwC,CAAC;AACzF,OAAO,EACL,iCAAiC,EACjC,kCAAkC,EAClC,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register the `openclaw research` CLI command.
|
|
3
|
+
*/
|
|
4
|
+
export declare function registerResearchCli(api: {
|
|
5
|
+
registerCli: (registrar: unknown, opts?: {
|
|
6
|
+
commands?: string[];
|
|
7
|
+
}) => void;
|
|
8
|
+
source: string;
|
|
9
|
+
}): void;
|
|
10
|
+
//# sourceMappingURL=research.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../src/cli/research.ts"],"names":[],"mappings":"AAiSA;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE;IAAE,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,QA4DnG"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import { renderBootstrapMd, renderSoulMd, renderAgentsMd } from "../templates/bootstrap.js";
|
|
5
|
+
const OPENCLAW_HOME = path.join(os.homedir(), ".openclaw");
|
|
6
|
+
const OPENCLAW_CONFIG = path.join(OPENCLAW_HOME, "openclaw.json");
|
|
7
|
+
const CRON_JOBS_PATH = path.join(OPENCLAW_HOME, "cron", "jobs.json");
|
|
8
|
+
function readOpenClawConfig() {
|
|
9
|
+
try {
|
|
10
|
+
return JSON.parse(fs.readFileSync(OPENCLAW_CONFIG, "utf-8"));
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return {};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function writeOpenClawConfig(config) {
|
|
17
|
+
fs.writeFileSync(OPENCLAW_CONFIG, JSON.stringify(config, null, 2) + "\n");
|
|
18
|
+
}
|
|
19
|
+
function readCronJobs() {
|
|
20
|
+
try {
|
|
21
|
+
return JSON.parse(fs.readFileSync(CRON_JOBS_PATH, "utf-8"));
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return { version: 1, jobs: [] };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function writeCronJobs(data) {
|
|
28
|
+
const dir = path.dirname(CRON_JOBS_PATH);
|
|
29
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
30
|
+
fs.writeFileSync(CRON_JOBS_PATH, JSON.stringify(data, null, 2) + "\n");
|
|
31
|
+
}
|
|
32
|
+
function addCronJob(agentId) {
|
|
33
|
+
const data = readCronJobs();
|
|
34
|
+
const jobId = `${agentId}-metabolism`;
|
|
35
|
+
// Avoid duplicates
|
|
36
|
+
if (data.jobs.some((j) => j.jobId === jobId))
|
|
37
|
+
return;
|
|
38
|
+
data.jobs.push({
|
|
39
|
+
name: `${agentId} daily metabolism`,
|
|
40
|
+
jobId,
|
|
41
|
+
schedule: { kind: "cron", expr: "0 6 * * *", tz: "Asia/Shanghai" },
|
|
42
|
+
sessionTarget: "isolated",
|
|
43
|
+
payload: {
|
|
44
|
+
kind: "agentTurn",
|
|
45
|
+
agentId,
|
|
46
|
+
message: "执行每日知识新陈代谢。阅读 AGENTS.md 了解工作流,然后使用 /metabolism 技能完成今日代谢。",
|
|
47
|
+
},
|
|
48
|
+
delivery: { mode: "announce" },
|
|
49
|
+
enabled: true,
|
|
50
|
+
});
|
|
51
|
+
writeCronJobs(data);
|
|
52
|
+
}
|
|
53
|
+
function removeCronJob(agentId) {
|
|
54
|
+
const data = readCronJobs();
|
|
55
|
+
const jobId = `${agentId}-metabolism`;
|
|
56
|
+
const before = data.jobs.length;
|
|
57
|
+
data.jobs = data.jobs.filter((j) => j.jobId !== jobId);
|
|
58
|
+
if (data.jobs.length < before) {
|
|
59
|
+
writeCronJobs(data);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function findPluginSkillsDir(entryDir) {
|
|
63
|
+
// Walk up to find openclaw.plugin.json
|
|
64
|
+
let dir = entryDir;
|
|
65
|
+
for (;;) {
|
|
66
|
+
if (fs.existsSync(path.join(dir, "openclaw.plugin.json"))) {
|
|
67
|
+
return path.join(dir, "skills");
|
|
68
|
+
}
|
|
69
|
+
const parent = path.dirname(dir);
|
|
70
|
+
if (parent === dir)
|
|
71
|
+
break;
|
|
72
|
+
dir = parent;
|
|
73
|
+
}
|
|
74
|
+
return path.join(entryDir, "skills");
|
|
75
|
+
}
|
|
76
|
+
function listResearchProjects() {
|
|
77
|
+
const config = readOpenClawConfig();
|
|
78
|
+
const agents = config.agents?.list ?? [];
|
|
79
|
+
const projects = [];
|
|
80
|
+
for (const agent of agents) {
|
|
81
|
+
if (!agent.id.startsWith("research-"))
|
|
82
|
+
continue;
|
|
83
|
+
const projectId = agent.id.replace("research-", "");
|
|
84
|
+
const workspace = agent.workspace
|
|
85
|
+
? agent.workspace.replace("~", os.homedir())
|
|
86
|
+
: path.join(OPENCLAW_HOME, `workspace-${agent.id}`);
|
|
87
|
+
let currentDay = 0;
|
|
88
|
+
let createdAt = "";
|
|
89
|
+
const configPath = path.join(workspace, "metabolism", "config.json");
|
|
90
|
+
try {
|
|
91
|
+
const mc = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
92
|
+
currentDay = mc.currentDay ?? 0;
|
|
93
|
+
createdAt = mc.createdAt ?? "";
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// config not yet created (pre-bootstrap)
|
|
97
|
+
}
|
|
98
|
+
projects.push({
|
|
99
|
+
id: projectId,
|
|
100
|
+
agentId: agent.id,
|
|
101
|
+
workspace,
|
|
102
|
+
currentDay,
|
|
103
|
+
createdAt,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return projects;
|
|
107
|
+
}
|
|
108
|
+
function initProject(id, pluginSkillsDir) {
|
|
109
|
+
const agentId = `research-${id}`;
|
|
110
|
+
const workspace = path.join(OPENCLAW_HOME, `workspace-${agentId}`);
|
|
111
|
+
// Check if workspace already exists
|
|
112
|
+
if (fs.existsSync(workspace)) {
|
|
113
|
+
console.error(`Error: workspace already exists at ${workspace}`);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
// 1. Create workspace directory structure
|
|
117
|
+
const dirs = [
|
|
118
|
+
workspace,
|
|
119
|
+
path.join(workspace, "metabolism"),
|
|
120
|
+
path.join(workspace, "metabolism", "knowledge"),
|
|
121
|
+
path.join(workspace, "metabolism", "diffs"),
|
|
122
|
+
path.join(workspace, "metabolism", "hypotheses"),
|
|
123
|
+
path.join(workspace, "metabolism", "log"),
|
|
124
|
+
path.join(workspace, "skills", "metabolism"),
|
|
125
|
+
path.join(workspace, "survey"),
|
|
126
|
+
path.join(workspace, "papers"),
|
|
127
|
+
path.join(workspace, "ideas"),
|
|
128
|
+
path.join(workspace, "experiments"),
|
|
129
|
+
];
|
|
130
|
+
for (const dir of dirs) {
|
|
131
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
132
|
+
}
|
|
133
|
+
// 2. Write bootstrap files
|
|
134
|
+
fs.writeFileSync(path.join(workspace, "BOOTSTRAP.md"), renderBootstrapMd(id));
|
|
135
|
+
fs.writeFileSync(path.join(workspace, "SOUL.md"), renderSoulMd(id));
|
|
136
|
+
fs.writeFileSync(path.join(workspace, "AGENTS.md"), renderAgentsMd());
|
|
137
|
+
// 3. Copy metabolism SKILL.md from plugin bundled skills
|
|
138
|
+
const srcSkill = path.join(pluginSkillsDir, "metabolism", "SKILL.md");
|
|
139
|
+
const dstSkill = path.join(workspace, "skills", "metabolism", "SKILL.md");
|
|
140
|
+
if (fs.existsSync(srcSkill)) {
|
|
141
|
+
fs.copyFileSync(srcSkill, dstSkill);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
console.warn(`Warning: metabolism SKILL.md not found at ${srcSkill}`);
|
|
145
|
+
}
|
|
146
|
+
// 4. Modify openclaw.json
|
|
147
|
+
const config = readOpenClawConfig();
|
|
148
|
+
// Add agent to agents.list
|
|
149
|
+
if (!config.agents)
|
|
150
|
+
config.agents = {};
|
|
151
|
+
const agents = config.agents;
|
|
152
|
+
if (!agents.list)
|
|
153
|
+
agents.list = [];
|
|
154
|
+
// Check for duplicate
|
|
155
|
+
if (agents.list.some((a) => a.id === agentId)) {
|
|
156
|
+
console.error(`Error: agent '${agentId}' already exists in openclaw.json`);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
agents.list.push({
|
|
160
|
+
id: agentId,
|
|
161
|
+
workspace: `~/.openclaw/workspace-${agentId}`,
|
|
162
|
+
});
|
|
163
|
+
writeOpenClawConfig(config);
|
|
164
|
+
// 5. Register daily metabolism cron job
|
|
165
|
+
addCronJob(agentId);
|
|
166
|
+
console.log(`\nResearch project '${id}' created successfully.\n`);
|
|
167
|
+
console.log(` Agent ID: ${agentId}`);
|
|
168
|
+
console.log(` Workspace: ${workspace}`);
|
|
169
|
+
console.log(` Cron: daily metabolism at 06:00 (Asia/Shanghai)\n`);
|
|
170
|
+
console.log("Next steps:");
|
|
171
|
+
console.log(" 1. Restart Gateway to load the new agent");
|
|
172
|
+
console.log(" 2. In Gateway web UI, create a Feishu group binding for this agent");
|
|
173
|
+
console.log(" 3. Send a message in the Feishu group to start the BOOTSTRAP configuration");
|
|
174
|
+
}
|
|
175
|
+
function showStatus(id) {
|
|
176
|
+
const projects = listResearchProjects();
|
|
177
|
+
const project = projects.find((p) => p.id === id);
|
|
178
|
+
if (!project) {
|
|
179
|
+
console.error(`Error: research project '${id}' not found`);
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
const knowledgeDir = path.join(project.workspace, "metabolism", "knowledge");
|
|
183
|
+
const hypothesesDir = path.join(project.workspace, "metabolism", "hypotheses");
|
|
184
|
+
const diffsDir = path.join(project.workspace, "metabolism", "diffs");
|
|
185
|
+
let topicCount = 0;
|
|
186
|
+
let hypothesisCount = 0;
|
|
187
|
+
let latestDiffs = [];
|
|
188
|
+
try {
|
|
189
|
+
topicCount = fs.readdirSync(knowledgeDir).filter((f) => f.startsWith("topic-")).length;
|
|
190
|
+
}
|
|
191
|
+
catch { /* empty */ }
|
|
192
|
+
try {
|
|
193
|
+
hypothesisCount = fs.readdirSync(hypothesesDir).filter((f) => f.endsWith(".md")).length;
|
|
194
|
+
}
|
|
195
|
+
catch { /* empty */ }
|
|
196
|
+
try {
|
|
197
|
+
latestDiffs = fs
|
|
198
|
+
.readdirSync(diffsDir)
|
|
199
|
+
.filter((f) => f.endsWith(".md"))
|
|
200
|
+
.sort()
|
|
201
|
+
.slice(-3);
|
|
202
|
+
}
|
|
203
|
+
catch { /* empty */ }
|
|
204
|
+
console.log(`\nResearch Project: ${id}`);
|
|
205
|
+
console.log(` Agent: ${project.agentId}`);
|
|
206
|
+
console.log(` Workspace: ${project.workspace}`);
|
|
207
|
+
console.log(` Day: ${project.currentDay}`);
|
|
208
|
+
console.log(` Topics: ${topicCount}`);
|
|
209
|
+
console.log(` Hypotheses: ${hypothesisCount}`);
|
|
210
|
+
if (latestDiffs.length > 0) {
|
|
211
|
+
console.log(` Recent diffs: ${latestDiffs.join(", ")}`);
|
|
212
|
+
}
|
|
213
|
+
if (project.createdAt) {
|
|
214
|
+
console.log(` Created: ${project.createdAt}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function deleteProject(id) {
|
|
218
|
+
const agentId = `research-${id}`;
|
|
219
|
+
const workspace = path.join(OPENCLAW_HOME, `workspace-${agentId}`);
|
|
220
|
+
// Remove workspace
|
|
221
|
+
if (fs.existsSync(workspace)) {
|
|
222
|
+
fs.rmSync(workspace, { recursive: true, force: true });
|
|
223
|
+
console.log(`Deleted workspace: ${workspace}`);
|
|
224
|
+
}
|
|
225
|
+
// Remove from openclaw.json
|
|
226
|
+
const config = readOpenClawConfig();
|
|
227
|
+
const agents = config.agents;
|
|
228
|
+
if (agents?.list) {
|
|
229
|
+
agents.list = agents.list.filter((a) => a.id !== agentId);
|
|
230
|
+
}
|
|
231
|
+
// Remove cron job
|
|
232
|
+
removeCronJob(agentId);
|
|
233
|
+
writeOpenClawConfig(config);
|
|
234
|
+
console.log(`Removed agent '${agentId}' from openclaw.json`);
|
|
235
|
+
console.log(`\nNote: If you created a Feishu group binding, remove it manually in the Gateway web UI.`);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Register the `openclaw research` CLI command.
|
|
239
|
+
*/
|
|
240
|
+
export function registerResearchCli(api) {
|
|
241
|
+
const entryDir = path.dirname(api.source);
|
|
242
|
+
api.registerCli(({ program }) => {
|
|
243
|
+
const cmd = program.command("research");
|
|
244
|
+
cmd.description("Manage CKM research projects");
|
|
245
|
+
const pluginSkillsDir = findPluginSkillsDir(entryDir);
|
|
246
|
+
// openclaw research init <id>
|
|
247
|
+
const initCmd = cmd.command("init <id>");
|
|
248
|
+
initCmd.description("Create a new research project agent + workspace");
|
|
249
|
+
initCmd.action((id) => {
|
|
250
|
+
initProject(String(id), pluginSkillsDir);
|
|
251
|
+
});
|
|
252
|
+
// openclaw research list
|
|
253
|
+
const listCmd = cmd.command("list");
|
|
254
|
+
listCmd.description("List all research projects");
|
|
255
|
+
listCmd.action(() => {
|
|
256
|
+
const projects = listResearchProjects();
|
|
257
|
+
if (projects.length === 0) {
|
|
258
|
+
console.log("No research projects found.");
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
console.log("\nResearch Projects:\n");
|
|
262
|
+
for (const p of projects) {
|
|
263
|
+
const configured = p.currentDay > 0 || p.createdAt ? "" : " (pending BOOTSTRAP)";
|
|
264
|
+
console.log(` ${p.id} Day ${p.currentDay}${configured}`);
|
|
265
|
+
console.log(` ${p.workspace}`);
|
|
266
|
+
}
|
|
267
|
+
console.log();
|
|
268
|
+
});
|
|
269
|
+
// openclaw research status <id>
|
|
270
|
+
const statusCmd = cmd.command("status <id>");
|
|
271
|
+
statusCmd.description("Show research project metabolism status");
|
|
272
|
+
statusCmd.action((id) => {
|
|
273
|
+
showStatus(String(id));
|
|
274
|
+
});
|
|
275
|
+
// openclaw research delete <id>
|
|
276
|
+
const deleteCmd = cmd.command("delete <id>");
|
|
277
|
+
deleteCmd.description("Delete a research project (agent + workspace + cron)");
|
|
278
|
+
deleteCmd.action((id) => {
|
|
279
|
+
deleteProject(String(id));
|
|
280
|
+
});
|
|
281
|
+
}, { commands: ["research"] });
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=research.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../../src/cli/research.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PluginCommandContext, PluginCommandResult } from "openclaw";
|
|
2
|
+
/**
|
|
3
|
+
* /metabolism-status — Show knowledge metabolism status
|
|
4
|
+
*/
|
|
5
|
+
export declare function handleMetabolismStatus(_ctx: PluginCommandContext): PluginCommandResult;
|
|
6
|
+
//# sourceMappingURL=metabolism-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metabolism-status.d.ts","sourceRoot":"","sources":["../../../src/commands/metabolism-status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AA6E1E;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,GAAG,mBAAmB,CA0CtF"}
|