scientify 1.11.0 → 1.12.1

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.
Files changed (72) hide show
  1. package/README.md +2 -2
  2. package/README.zh.md +2 -2
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +16 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/cli/research.d.ts +10 -0
  7. package/dist/src/cli/research.d.ts.map +1 -0
  8. package/dist/src/cli/research.js +283 -0
  9. package/dist/src/cli/research.js.map +1 -0
  10. package/dist/src/commands/metabolism-status.d.ts +6 -0
  11. package/dist/src/commands/metabolism-status.d.ts.map +1 -0
  12. package/dist/src/commands/metabolism-status.js +100 -0
  13. package/dist/src/commands/metabolism-status.js.map +1 -0
  14. package/dist/src/hooks/cron-skill-inject.d.ts +21 -0
  15. package/dist/src/hooks/cron-skill-inject.d.ts.map +1 -0
  16. package/dist/src/hooks/cron-skill-inject.js +53 -0
  17. package/dist/src/hooks/cron-skill-inject.js.map +1 -0
  18. package/dist/src/hooks/research-mode.d.ts +1 -1
  19. package/dist/src/hooks/research-mode.d.ts.map +1 -1
  20. package/dist/src/hooks/research-mode.js +28 -2
  21. package/dist/src/hooks/research-mode.js.map +1 -1
  22. package/dist/src/knowledge-state/render.d.ts +8 -1
  23. package/dist/src/knowledge-state/render.d.ts.map +1 -1
  24. package/dist/src/knowledge-state/render.js +31 -0
  25. package/dist/src/knowledge-state/render.js.map +1 -1
  26. package/dist/src/knowledge-state/store.d.ts.map +1 -1
  27. package/dist/src/knowledge-state/store.js +340 -6
  28. package/dist/src/knowledge-state/store.js.map +1 -1
  29. package/dist/src/knowledge-state/types.d.ts +19 -0
  30. package/dist/src/knowledge-state/types.d.ts.map +1 -1
  31. package/dist/src/literature/subscription-state.d.ts +2 -0
  32. package/dist/src/literature/subscription-state.d.ts.map +1 -1
  33. package/dist/src/literature/subscription-state.js +7 -0
  34. package/dist/src/literature/subscription-state.js.map +1 -1
  35. package/dist/src/research-subscriptions/prompt.d.ts.map +1 -1
  36. package/dist/src/research-subscriptions/prompt.js +44 -16
  37. package/dist/src/research-subscriptions/prompt.js.map +1 -1
  38. package/dist/src/templates/bootstrap.d.ts +8 -0
  39. package/dist/src/templates/bootstrap.d.ts.map +1 -0
  40. package/dist/src/templates/bootstrap.js +153 -0
  41. package/dist/src/templates/bootstrap.js.map +1 -0
  42. package/dist/src/tools/arxiv-download.d.ts +2 -2
  43. package/dist/src/tools/arxiv-download.d.ts.map +1 -1
  44. package/dist/src/tools/arxiv-download.js +9 -11
  45. package/dist/src/tools/arxiv-download.js.map +1 -1
  46. package/dist/src/tools/scientify-cron.d.ts +2 -0
  47. package/dist/src/tools/scientify-cron.d.ts.map +1 -1
  48. package/dist/src/tools/scientify-cron.js +33 -1
  49. package/dist/src/tools/scientify-cron.js.map +1 -1
  50. package/dist/src/tools/scientify-literature-state.d.ts +4 -0
  51. package/dist/src/tools/scientify-literature-state.d.ts.map +1 -1
  52. package/dist/src/tools/scientify-literature-state.js +45 -0
  53. package/dist/src/tools/scientify-literature-state.js.map +1 -1
  54. package/dist/src/tools/unpaywall-download.d.ts +2 -2
  55. package/dist/src/tools/unpaywall-download.js +4 -4
  56. package/dist/src/tools/unpaywall-download.js.map +1 -1
  57. package/openclaw.plugin.json +4 -2
  58. package/package.json +1 -1
  59. package/skills/idea-generation/SKILL.md +24 -29
  60. package/skills/metabolism/SKILL.md +118 -0
  61. package/skills/metabolism-init/SKILL.md +80 -0
  62. package/skills/{literature-survey → research-collect}/SKILL.md +23 -33
  63. package/skills/research-experiment/SKILL.md +1 -1
  64. package/skills/research-implement/SKILL.md +1 -1
  65. package/skills/research-pipeline/SKILL.md +6 -11
  66. package/skills/research-plan/SKILL.md +3 -3
  67. package/skills/research-review/SKILL.md +1 -1
  68. package/skills/research-subscription/SKILL.md +16 -0
  69. package/skills/research-survey/SKILL.md +6 -6
  70. package/skills/write-review-paper/SKILL.md +14 -14
  71. package/skills/_shared/workspace-spec.md +0 -164
  72. package/skills/install-scientify/SKILL.md +0 -106
@@ -194,6 +194,8 @@ export function buildScheduledTaskMessage(options, scheduleKind, scopeKey) {
194
194
  run_log: {
195
195
  model: "model-name",
196
196
  duration_ms: 1200,
197
+ required_core_papers: preferences.max_papers,
198
+ required_full_text_coverage_pct: 80,
197
199
  temp_full_text_dir: "/tmp/scientify-fulltext/run-123",
198
200
  temp_files_downloaded: 3,
199
201
  temp_cleanup_status: "done",
@@ -207,6 +209,7 @@ export function buildScheduledTaskMessage(options, scheduleKind, scopeKey) {
207
209
  scope: scopeKey,
208
210
  topic: effectiveTopic,
209
211
  ...(projectId ? { project_id: projectId } : {}),
212
+ run_id: "run-20260309T103000Z",
210
213
  status: "ok",
211
214
  papers: recordPaperTemplate,
212
215
  knowledge_state: knowledgeStateTemplate,
@@ -216,6 +219,7 @@ export function buildScheduledTaskMessage(options, scheduleKind, scopeKey) {
216
219
  scope: scopeKey,
217
220
  topic: effectiveTopic,
218
221
  ...(projectId ? { project_id: projectId } : {}),
222
+ run_id: "run-20260309T103000Z-fallback",
219
223
  status: "fallback_representative",
220
224
  papers: recordPaperTemplate,
221
225
  knowledge_state: {
@@ -224,6 +228,8 @@ export function buildScheduledTaskMessage(options, scheduleKind, scopeKey) {
224
228
  model: "model-name",
225
229
  duration_ms: 1300,
226
230
  degraded: true,
231
+ required_core_papers: preferences.max_papers,
232
+ required_full_text_coverage_pct: 80,
227
233
  temp_full_text_dir: "/tmp/scientify-fulltext/run-123",
228
234
  temp_files_downloaded: 1,
229
235
  temp_cleanup_status: "done",
@@ -239,6 +245,7 @@ export function buildScheduledTaskMessage(options, scheduleKind, scopeKey) {
239
245
  scope: scopeKey,
240
246
  topic: effectiveTopic,
241
247
  ...(projectId ? { project_id: projectId } : {}),
248
+ run_id: "run-20260309T103000Z-empty",
242
249
  status: "empty",
243
250
  papers: [],
244
251
  knowledge_state: {
@@ -250,6 +257,8 @@ export function buildScheduledTaskMessage(options, scheduleKind, scopeKey) {
250
257
  hypotheses: [],
251
258
  run_log: {
252
259
  model: "model-name",
260
+ required_core_papers: preferences.max_papers,
261
+ required_full_text_coverage_pct: 80,
253
262
  temp_cleanup_status: "not_needed",
254
263
  notes: "No suitable paper found in this cycle.",
255
264
  },
@@ -261,7 +270,11 @@ export function buildScheduledTaskMessage(options, scheduleKind, scopeKey) {
261
270
  `/research-pipeline Run a focused literature study on \"${effectiveTopic}\" and return up to ${preferences.max_papers} high-value representative papers.`,
262
271
  "",
263
272
  "Mandatory workflow:",
273
+ "0) Truthfulness contract: do not claim background progress unless a real async handle exists. If you did not create a cron job/task id, this run must finish in this turn.",
274
+ "0.1) This run already has an async handle (cron). Do not call `scientify_cron_job` again from inside this run, and do not create nested `run_now` jobs.",
264
275
  `1) Call tool \`scientify_literature_state\` with: ${preparePayload}`,
276
+ "1.1) `no_deliver` only controls delivery. You still must call `scientify_literature_state.record` for persistence.",
277
+ "1.2) Reuse the exact `scope` and `topic` returned by `prepare` in `record` and `status`. Do not replace scope with project id.",
265
278
  "2) Read `memory_hints` from prepare result. Treat preferred keywords/sources as positive ranking priors, and avoided ones as negative priors.",
266
279
  `3) Build a candidate pool of around ${candidatePool} papers when possible, matching returned preferences (sources/recency).`,
267
280
  `4) Score each candidate with weighted dimensions (${scoreWeightsText}). Each dimension is 0-100, then compute weighted average score.`,
@@ -270,27 +283,36 @@ export function buildScheduledTaskMessage(options, scheduleKind, scopeKey) {
270
283
  "7) Create a temporary local directory for full text (for example `/tmp/scientify-fulltext/<run-id>`). Download full text for selected core papers when possible (arXiv PDF/source first, then DOI OA PDF if available).",
271
284
  "8) Read full text with `paper_browser` in sections (method, experiments, limitations). Extract structured fields per paper: `domain`, `subdomains`, `cross_domain_links`, `research_goal`, `approach`, `methodology_design`, `key_contributions`, `practical_insights`, `must_understand_points`, `limitations`, and `evidence_anchors`.",
272
285
  "9) For papers without full text, explicitly set `full_text_read=false` and provide `unread_reason`.",
286
+ "9.1) Set a unique `run_id` for this cycle (cron run id preferred; otherwise generate a timestamp-based id). Reusing the same run_id can cause idempotent no-op writes.",
273
287
  `10) Call \`scientify_literature_state\` to persist selected papers and knowledge_state details using this JSON shape: ${recordTemplate}`,
274
288
  "11) `knowledge_state.core_papers` must include all selected papers with id/title/url/score/reason and structured reading fields (not placeholders).",
275
289
  "12) `knowledge_state.knowledge_changes` and `knowledge_state.knowledge_updates` must reflect this run's actual findings and include `evidence_ids` whenever available.",
276
290
  "13) Quality targets must be met: core full-text coverage >= 80%, evidence-binding rate >= 90% (key conclusions backed by section+locator+quote), citation error rate < 2%.",
277
291
  "14) Without sufficient full-text evidence, do not keep high-confidence conclusions; downgrade confidence explicitly.",
278
- "15) For hypotheses, include at least one `evidence_ids` entry and a concrete `dependency_path` when applicable. Prioritize evidence from full-text-read papers.",
279
- "16) If a hypothesis is high-impact, optionally run `openreview_lookup` or additional literature search and fill `validation_status`/`validation_notes`/`validation_evidence`.",
280
- "17) After recording state, clean temporary full-text files. Put cleanup outcome in `run_log.temp_cleanup_status` (`done|partial|failed|not_needed`) and optional `temp_cleanup_note`.",
281
- "18) Keep `run_log.notes` factual (candidate count, filtering reason, fallback/no-fallback).",
282
- "19) In user-facing output, always include a numbered paper list with title + direct source URL + one-line value. Never claim papers were selected without listing links.",
283
- "20) Do not display raw score/reason unless explicitly requested.",
284
- "21) If nothing suitable is found, still call record with empty papers using:",
292
+ "15) If `knowledge_changes` contains BRIDGE (or REVISE+CONFIRM contradiction signals), run at least one reflection query immediately and write it into `knowledge_state.exploration_trace` with query/reason/source/candidates/filtered_to.",
293
+ "15.1) Do not emit BRIDGE without grounded evidence_ids linked to this run's papers; at least one bridge evidence should be full-text-backed.",
294
+ "16) For hypotheses, use research-grade gate: at least 2 `evidence_ids`, dependency_path length >= 2, and include novelty+feasibility+impact scores. Evidence should be resolved and preferably full-text-backed.",
295
+ "16.1) If user provided hard constraints (for example exact/min core paper count), set `run_log.required_core_papers` accordingly and do not return status `ok` unless the requirement is met.",
296
+ "17) If a hypothesis is high-impact, optionally run `openreview_lookup` or additional literature search and fill `validation_status`/`validation_notes`/`validation_evidence`.",
297
+ "18) After recording state, clean temporary full-text files. Put cleanup outcome in `run_log.temp_cleanup_status` (`done|partial|failed|not_needed`) and optional `temp_cleanup_note`.",
298
+ "19) Keep `run_log.notes` factual (candidate count, filtering reason, reflection action, fallback/no-fallback).",
299
+ "20) In user-facing output, always include a numbered paper list with title + direct source URL + one-line value. Never claim papers were selected without listing links.",
300
+ "21) Do not display raw score/reason unless explicitly requested.",
301
+ "22) If nothing suitable is found, still call record with empty papers using:",
285
302
  `${recordEmptyTemplate}`,
286
303
  "Then respond: `No new literature found.`",
304
+ "23) After `record`, call `scientify_literature_state.status` once and include `run_id`/`latest_run_id` in your response for verifiable traceability.",
287
305
  ].join("\n");
288
306
  }
289
307
  return [
290
308
  `/research-pipeline Run an incremental literature check focused on \"${effectiveTopic}\".`,
291
309
  "",
292
310
  "Mandatory workflow:",
311
+ "0) Truthfulness contract: do not claim background progress unless a real async handle exists. If you did not create a cron job/task id, this run must finish in this turn.",
312
+ "0.1) This run already has an async handle (cron). Do not call `scientify_cron_job` again from inside this run, and do not create nested `run_now` jobs.",
293
313
  `1) Call tool \`scientify_literature_state\` with: ${preparePayload}`,
314
+ "1.1) `no_deliver` only controls delivery. You still must call `scientify_literature_state.record` for persistence.",
315
+ "1.2) Reuse the exact `scope` and `topic` returned by `prepare` in `record` and `status`. Do not replace scope with project id.",
294
316
  "2) Read `memory_hints` from prepare result. Use them as quiet personalization priors in ranking (not user-facing).",
295
317
  "3) Treat `exclude_paper_ids` as hard dedupe constraints. Do not push papers whose IDs are already in that list.",
296
318
  `4) Incremental pass: build a candidate pool of around ${candidatePool} unseen papers when possible, following preferences (sources/recency).`,
@@ -300,21 +322,27 @@ export function buildScheduledTaskMessage(options, scheduleKind, scopeKey) {
300
322
  "8) Create a temporary local directory for full text (for example `/tmp/scientify-fulltext/<run-id>`). Download full text for selected core papers when possible (arXiv first, then DOI OA if available).",
301
323
  "9) Read full text with `paper_browser` and fill structured paper fields: `domain`, `subdomains`, `cross_domain_links`, `research_goal`, `approach`, `methodology_design`, `key_contributions`, `practical_insights`, `must_understand_points`, `limitations`, and `evidence_anchors`.",
302
324
  "10) If full text cannot be read, set `full_text_read=false` with explicit `unread_reason`.",
325
+ "10.1) Set a unique `run_id` for this cycle (cron run id preferred; otherwise generate a timestamp-based id). Reusing the same run_id can cause idempotent no-op writes.",
303
326
  `11) If selected > 0, call \`scientify_literature_state\` with status \`ok\` using: ${recordTemplate}`,
304
327
  "12) `knowledge_state.core_papers` must contain all selected papers with id/title/url/score/reason and structured reading fields; `exploration_trace` should include query/source/candidates/filtered_to/filter reasons when available.",
305
328
  "13) `knowledge_state.knowledge_changes` and `knowledge_state.hypotheses` should include evidence_ids (and dependency_path for hypotheses) whenever available, preferably from full-text-read papers.",
306
329
  "14) Quality targets must be met: core full-text coverage >= 80%, evidence-binding rate >= 90% (key conclusions backed by section+locator+quote), citation error rate < 2%.",
307
330
  "15) Without sufficient full-text evidence, do not keep high-confidence conclusions; downgrade confidence explicitly.",
308
- "16) For top hypotheses, optionally validate risk via `openreview_lookup` and fill `validation_status`/`validation_notes`/`validation_evidence`.",
309
- "17) If incremental selection is empty, run one fallback representative pass (ignore `exclude_paper_ids` once) and select best representative papers.",
310
- `18) If fallback returns papers, call \`scientify_literature_state\` with status \`fallback_representative\` using: ${recordFallbackTemplate}`,
311
- "19) After recording state, clean temporary full-text files and set `run_log.temp_cleanup_status` accordingly (`done|partial|failed|not_needed`).",
312
- "20) If papers are selected (incremental or fallback), output a numbered list with title + direct source URL + one-line value for each pushed paper.",
313
- "21) Output a compact progress report for this cycle: what changed, what matters, and a concrete plan for the next 1 hour.",
314
- "22) Keep user-facing output concise; do not expose raw score/reason unless explicitly requested.",
315
- "23) If both incremental and fallback passes are empty, call record with empty papers using:",
331
+ "16) If `knowledge_changes` contains BRIDGE (or REVISE+CONFIRM contradiction signals), run at least one reflection query immediately and write it into `knowledge_state.exploration_trace` with query/reason/source/candidates/filtered_to.",
332
+ "16.1) Do not emit BRIDGE without grounded evidence_ids linked to this run's papers; at least one bridge evidence should be full-text-backed.",
333
+ "17) Research-grade hypothesis gate: each hypothesis should have >=2 evidence_ids, dependency_path length >=2, novelty+feasibility+impact scores, and evidence linked to this run's papers (full-text-backed when possible).",
334
+ "17.1) If user provided hard constraints (for example exact/min core paper count), set `run_log.required_core_papers` accordingly and do not return status `ok` unless the requirement is met.",
335
+ "18) For top hypotheses, optionally validate risk via `openreview_lookup` and fill `validation_status`/`validation_notes`/`validation_evidence`.",
336
+ "19) If incremental selection is empty, run one fallback representative pass (ignore `exclude_paper_ids` once) and select best representative papers.",
337
+ `20) If fallback returns papers, call \`scientify_literature_state\` with status \`fallback_representative\` using: ${recordFallbackTemplate}`,
338
+ "21) After recording state, clean temporary full-text files and set `run_log.temp_cleanup_status` accordingly (`done|partial|failed|not_needed`).",
339
+ "22) If papers are selected (incremental or fallback), output a numbered list with title + direct source URL + one-line value for each pushed paper.",
340
+ "23) Output a compact progress report for this cycle: what changed, what matters, and a concrete plan for the next 1 hour.",
341
+ "24) Keep user-facing output concise; do not expose raw score/reason unless explicitly requested.",
342
+ "25) If both incremental and fallback passes are empty, call record with empty papers using:",
316
343
  `${recordEmptyTemplate}`,
317
- "24) Then still return a useful progress status with next-hour actions (instead of only a generic reminder).",
344
+ "26) Then still return a useful progress status with next-hour actions (instead of only a generic reminder).",
345
+ "27) After `record`, call `scientify_literature_state.status` and include `run_id`/`latest_run_id` in your response for verifiable traceability.",
318
346
  ].join("\n");
319
347
  }
320
348
  export function formatUsage() {
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/research-subscriptions/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/research-subscriptions/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Templates for research project agent workspace files.
3
+ * Generated by `openclaw research init <id>` CLI command.
4
+ */
5
+ export declare function renderBootstrapMd(projectName: string): string;
6
+ export declare function renderSoulMd(projectName: string): string;
7
+ export declare function renderAgentsMd(): string;
8
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/templates/bootstrap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA6C7D;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAexD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAqFvC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Templates for research project agent workspace files.
3
+ * Generated by `openclaw research init <id>` CLI command.
4
+ */
5
+ export function renderBootstrapMd(projectName) {
6
+ return `# Research Agent Bootstrap
7
+
8
+ 你刚刚被创建为课题「${projectName}」的研究 agent。你需要完成首次配置。
9
+
10
+ ## 引导流程
11
+
12
+ 1. 向用户问好,说明你是课题「${projectName}」的研究 agent,请用户描述研究方向
13
+ 2. 根据用户回答,提取:
14
+ - 核心域关键词(3-5 个)
15
+ - 建议的 arXiv 分类(如 cs.LG, cs.AI)
16
+ - 建议的监测带相邻领域分类
17
+ 3. 向用户确认以上配置,接受调整
18
+ 4. 确认后执行以下写入操作:
19
+ - 更新 SOUL.md:填写研究方向、核心域、监测带各字段
20
+ - 生成 metabolism/config.json(参考下方模板)
21
+ 5. 询问用户是否立即执行 Day 0(构建初始知识状态 K(T0))
22
+ - 如果是,使用 arxiv_search 按配置的关键词检索论文,执行 skills/metabolism/SKILL.md 中的四步循环
23
+ 6. 删除本文件(BOOTSTRAP.md)
24
+
25
+ ## config.json 模板
26
+
27
+ \`\`\`json
28
+ {
29
+ "projectId": "${projectName}",
30
+ "coreQuery": {
31
+ "keywords": ["关键词1", "关键词2"],
32
+ "arxivCategories": ["cs.LG"],
33
+ "dateMode": "daily-new"
34
+ },
35
+ "monitorZone": {
36
+ "categories": ["相邻领域分类"],
37
+ "enabled": true
38
+ },
39
+ "heartbeat": {
40
+ "cronExpression": "0 6 * * *",
41
+ "timezone": "Asia/Shanghai",
42
+ "enabled": true
43
+ },
44
+ "agentId": "research-${projectName}",
45
+ "currentDay": 0,
46
+ "createdAt": "${new Date().toISOString()}"
47
+ }
48
+ \`\`\`
49
+ `;
50
+ }
51
+ export function renderSoulMd(projectName) {
52
+ return `# Project Agent — ${projectName}
53
+
54
+ 你是课题「${projectName}」的研究 agent。
55
+
56
+ ## 研究方向
57
+ {由 BOOTSTRAP 流程填写}
58
+
59
+ ## 核心域
60
+ 关键词: {由 BOOTSTRAP 流程填写}
61
+ arXiv 分类: {由 BOOTSTRAP 流程填写}
62
+
63
+ ## 监测带
64
+ 相邻领域: {由 BOOTSTRAP 流程填写}
65
+ `;
66
+ }
67
+ export function renderAgentsMd() {
68
+ return `# Agent Operating Manual
69
+
70
+ ## Workspace Layout
71
+
72
+ 本 agent 的工作目录即为项目根目录(\`$W\`)。所有文件相对于 \`$W\` 组织:
73
+
74
+ \`\`\`
75
+ $W/
76
+ ├── SOUL.md # 身份 + 研究方向
77
+ ├── AGENTS.md # 本文档
78
+ ├── metabolism/ # 知识新陈代谢
79
+ │ ├── config.json # 项目配置(关键词、分类、heartbeat)
80
+ │ ├── knowledge/ # K(t) 持久知识状态
81
+ │ │ ├── _index.md # 全景索引
82
+ │ │ └── topic-*.md # 主题文件(上限 50)
83
+ │ ├── diffs/ # 每日 diff 报告
84
+ │ ├── hypotheses/ # 生成的假设
85
+ │ └── log/ # 运行日志
86
+ ├── survey/ # /research-collect outputs
87
+ │ ├── search_terms.json
88
+ │ └── report.md
89
+ ├── papers/ # 下载的论文
90
+ │ ├── _downloads/ # 原始下载
91
+ │ ├── _meta/ # 元数据 {arxiv_id}.json
92
+ │ └── {direction}/ # 按方向分类
93
+ ├── repos/ # 参考代码仓库
94
+ ├── notes/ # /research-survey: 逐篇深度笔记
95
+ │ └── paper_{arxiv_id}.md
96
+ ├── ideas/ # /idea-generation outputs
97
+ ├── review/ # /write-review-paper outputs
98
+ ├── survey_res.md # /research-survey: 方法对比报告
99
+ ├── plan_res.md # /research-plan: 实现计划
100
+ ├── project/ # /research-implement: 代码实现
101
+ ├── ml_res.md # /research-implement: 执行报告
102
+ ├── iterations/ # /research-review: 审查迭代
103
+ │ └── judge_v*.md
104
+ ├── experiment_res.md # /research-experiment: 实验报告
105
+ └── skills/ # workspace skills (metabolism 等)
106
+ \`\`\`
107
+
108
+ ## Session Context
109
+
110
+ 你可能在不同类型的 session 中被唤醒:
111
+ - **Main session**:与人类直接对话,可触发 research-pipeline 等编排 skill
112
+ - **Cron session**:定时触发,执行周期性任务(如每日 metabolism)
113
+ - **Spawn session**:被 main session 调度(sessions_spawn),执行一次性重任务
114
+
115
+ 任务指令会在 session 启动时注入,按指令执行即可。
116
+
117
+ ## Conventions
118
+
119
+ ### File Existence = Step Completion
120
+ 检查产出文件是否存在再执行。已存在则跳过。支持崩溃恢复和增量推进。
121
+
122
+ ### Immutability
123
+ 产出文件一旦写入不修改,除非用户明确要求。例外:\`project/\` 在 implement-review 迭代中可变。
124
+
125
+ ### Knowledge File Rules
126
+ - knowledge/ 下的文件是持久知识状态,修改需谨慎
127
+ - 每次修改必须先读取当前内容再更新
128
+ - _index.md 是全景索引,必须与 topic 文件保持同步
129
+ - topic 文件数上限 50,低活跃主题应合并归档
130
+
131
+ ## Research Rigor
132
+
133
+ - 先读原文,再思考,最后作答
134
+ - 不捏造引用或实验结果,每个断言需有来源
135
+ - 不确定时说「不确定」而非猜测
136
+ - 读论文全文(.tex),不能只读 abstract
137
+ - 想法必须扎根于真实论文
138
+
139
+ ## Skill Outputs Summary
140
+
141
+ | Skill | Primary Outputs |
142
+ |-------|-----------------|
143
+ | /research-collect | survey/, papers/ |
144
+ | /research-survey | notes/paper_*.md, survey_res.md |
145
+ | /research-plan | plan_res.md |
146
+ | /research-implement | project/, ml_res.md |
147
+ | /research-review | iterations/judge_v*.md |
148
+ | /research-experiment | experiment_res.md |
149
+ | /idea-generation | ideas/ |
150
+ | /write-review-paper | review/ |
151
+ `;
152
+ }
153
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/templates/bootstrap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,OAAO;;YAEG,WAAW;;;;kBAIL,WAAW;;;;;;;;;;;;;;;;;kBAiBX,WAAW;;;;;;;;;;;;;;;yBAeJ,WAAW;;kBAElB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;CAGzC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,qBAAqB,WAAW;;OAElC,WAAW;;;;;;;;;;;CAWjB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFR,CAAC;AACF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export declare const ArxivDownloadSchema: import("@sinclair/typebox").TObject<{
2
2
  arxiv_ids: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
3
- output_dir: import("@sinclair/typebox").TString;
3
+ output_dir: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
4
4
  }>;
5
5
  /**
6
6
  * arxiv_download: Download papers by arxiv_id. Requires explicit output_dir.
@@ -11,7 +11,7 @@ export declare function createArxivDownloadTool(): {
11
11
  description: string;
12
12
  parameters: import("@sinclair/typebox").TObject<{
13
13
  arxiv_ids: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
14
- output_dir: import("@sinclair/typebox").TString;
14
+ output_dir: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
15
15
  }>;
16
16
  execute: (_toolCallId: string, rawArgs: unknown) => Promise<{
17
17
  type: "tool_result";
@@ -1 +1 @@
1
- {"version":3,"file":"arxiv-download.d.ts","sourceRoot":"","sources":["../../../src/tools/arxiv-download.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,mBAAmB;;;EAO9B,CAAC;AAoIH;;GAEG;AACH,wBAAgB,uBAAuB;;;;;;;;2BAMN,MAAM,WAAW,OAAO;;;;;;;;EA4DxD"}
1
+ {"version":3,"file":"arxiv-download.d.ts","sourceRoot":"","sources":["../../../src/tools/arxiv-download.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,mBAAmB;;;EAO9B,CAAC;AAoIH;;GAEG;AACH,wBAAgB,uBAAuB;;;;;;;;2BAMN,MAAM,WAAW,OAAO;;;;;;;;EA0DxD"}
@@ -11,9 +11,9 @@ export const ArxivDownloadSchema = Type.Object({
11
11
  arxiv_ids: Type.Array(Type.String(), {
12
12
  description: "List of arXiv IDs to download (e.g. ['2401.12345', '2312.00001']).",
13
13
  }),
14
- output_dir: Type.String({
15
- description: "Directory to save files. MUST be an absolute path.",
16
- }),
14
+ output_dir: Type.Optional(Type.String({
15
+ description: "Directory to save files. Defaults to 'papers/' relative to cwd. Can be relative or absolute.",
16
+ })),
17
17
  });
18
18
  function readStringParam(params, key, opts) {
19
19
  const value = params[key];
@@ -131,19 +131,17 @@ export function createArxivDownloadTool() {
131
131
  return {
132
132
  label: "ArXiv Download",
133
133
  name: "arxiv_download",
134
- description: "Download arXiv papers by ID. Downloads .tex source (with PDF fallback). Requires explicit output_dir (absolute path).",
134
+ description: "Download arXiv papers by ID. Downloads .tex source (with PDF fallback). output_dir defaults to 'papers/' if omitted.",
135
135
  parameters: ArxivDownloadSchema,
136
136
  execute: async (_toolCallId, rawArgs) => {
137
137
  const params = rawArgs;
138
138
  const arxivIds = readArrayParam(params, "arxiv_ids");
139
- const outputDir = readStringParam(params, "output_dir", { required: true });
139
+ const outputDir = readStringParam(params, "output_dir") ?? "papers";
140
140
  if (arxivIds.length === 0) {
141
141
  return Result.err("invalid_params", "arxiv_ids must be a non-empty array");
142
142
  }
143
- if (!path.isAbsolute(outputDir)) {
144
- return Result.err("invalid_params", `output_dir must be an absolute path, got: ${outputDir}`);
145
- }
146
- await fs.promises.mkdir(outputDir, { recursive: true });
143
+ const resolvedOutputDir = path.resolve(outputDir);
144
+ await fs.promises.mkdir(resolvedOutputDir, { recursive: true });
147
145
  const logger = { debug: (msg) => console.log(`[arxiv-download] ${msg}`) };
148
146
  const downloads = [];
149
147
  for (let i = 0; i < arxivIds.length; i++) {
@@ -153,7 +151,7 @@ export function createArxivDownloadTool() {
153
151
  await delay(RATE_LIMIT_MS);
154
152
  }
155
153
  // Always try .tex first, fallback to PDF automatically
156
- const result = await downloadTexSource(arxivId, outputDir, logger);
154
+ const result = await downloadTexSource(arxivId, resolvedOutputDir, logger);
157
155
  downloads.push({
158
156
  arxiv_id: arxivId,
159
157
  success: result.success,
@@ -167,7 +165,7 @@ export function createArxivDownloadTool() {
167
165
  const successful = downloads.filter((d) => d.success).length;
168
166
  const failed = downloads.filter((d) => !d.success).length;
169
167
  return Result.ok({
170
- output_dir: outputDir,
168
+ output_dir: resolvedOutputDir,
171
169
  total: arxivIds.length,
172
170
  successful,
173
171
  failed,
@@ -1 +1 @@
1
- {"version":3,"file":"arxiv-download.js","sourceRoot":"","sources":["../../../src/tools/arxiv-download.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arxiv-download.js","sourceRoot":"","sources":["../../../src/tools/arxiv-download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,2DAA2D;AAC3D,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,mDAAmD;AACnD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEtF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;QACnC,WAAW,EAAE,oEAAoE;KAClF,CAAC;IACF,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACpC,WAAW,EAAE,8FAA8F;KAC5G,CAAC,CAAC;CACJ,CAAC,CAAC;AAWH,SAAS,eAAe,CAAC,MAA+B,EAAE,GAAW,EAAE,IAA6B;IAClG,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,cAAc,CAAC,MAA+B,EAAE,GAAW;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAAe,EACf,SAAiB,EACjB,MAA0C;IAE1C,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,UAAU,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,yBAAyB,OAAO,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,GAAG,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,gCAAgC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxF,GAAG,CAAC,MAAM,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QACzD,GAAG,CAAC,iBAAiB,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QAE3D,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9C,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAElC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC3C,GAAG,CAAC,SAAS,KAAK,CAAC,MAAM,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,uCAAuC,CAAC;gBACvD,GAAG,CAAC,MAAM,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;YAC/C,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACpG,GAAG,CAAC,MAAM,CAAC,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,OAAe,EACf,SAAiB,EACjB,MAA0C;IAE1C,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,UAAU,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC;IAC1E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,yBAAyB,OAAO,MAAM,CAAC;QACtD,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,GAAG,CAAC,6BAA6B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACpD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,wBAAwB,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAClH,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,MAAM,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,GAAG,CAAC,cAAc,OAAO,KAAK,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;QACtD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,MAAM,CAAC,EAAE,CAAC;IACpF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACtF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAW;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,KAAK,EAAE,gBAAgB;QACvB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,sHAAsH;QACnI,UAAU,EAAE,mBAAmB;QAC/B,OAAO,EAAE,KAAK,EAAE,WAAmB,EAAE,OAAgB,EAAE,EAAE;YACvD,MAAM,MAAM,GAAG,OAAkC,CAAC;YAClD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,QAAQ,CAAC;YAEpE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAElD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhE,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,EAAE,CAAC,EAAE,CAAC;YAClF,MAAM,SAAS,GAQV,EAAE,CAAC;YAER,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAE5B,sDAAsD;gBACtD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACV,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC7B,CAAC;gBAED,uDAAuD;gBACvD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBAE3E,SAAS,CAAC,IAAI,CAAC;oBACb,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,eAAe,EAAE,MAAM,CAAC,cAAc;iBACvC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YAC7D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YAE1D,OAAO,MAAM,CAAC,EAAE,CAAC;gBACf,UAAU,EAAE,iBAAiB;gBAC7B,KAAK,EAAE,QAAQ,CAAC,MAAM;gBACtB,UAAU;gBACV,MAAM;gBACN,SAAS;aACV,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -19,6 +19,7 @@ export declare const ScientifyCronToolSchema: import("@sinclair/typebox").TObjec
19
19
  channel: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
20
20
  to: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
21
21
  no_deliver: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
22
+ run_now: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
22
23
  job_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
23
24
  }>;
24
25
  type CronToolDeps = {
@@ -49,6 +50,7 @@ export declare function createScientifyCronTool(deps: CronToolDeps): {
49
50
  channel: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
50
51
  to: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
51
52
  no_deliver: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
53
+ run_now: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
52
54
  job_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
53
55
  }>;
54
56
  execute: (_toolCallId: string, rawArgs: unknown) => Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"scientify-cron.d.ts","sourceRoot":"","sources":["../../../src/tools/scientify-cron.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA6C,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AASvG,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;EAmFlC,CAAC;AAEH,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAgLF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;2BAWzB,MAAM,WAAW,OAAO;;;;;;;;EAwDxD"}
1
+ {"version":3,"file":"scientify-cron.d.ts","sourceRoot":"","sources":["../../../src/tools/scientify-cron.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA6C,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AASvG,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;EAyFlC,CAAC;AAEH,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAwLF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAWzB,MAAM,WAAW,OAAO;;;;;;;;EAuFxD"}
@@ -48,6 +48,9 @@ export const ScientifyCronToolSchema = Type.Object({
48
48
  no_deliver: Type.Optional(Type.Boolean({
49
49
  description: "If true, run in background without push delivery.",
50
50
  })),
51
+ run_now: Type.Optional(Type.Boolean({
52
+ description: "If true (upsert only), trigger one immediate run after job creation/update and return the run result handle.",
53
+ })),
51
54
  job_id: Type.Optional(Type.String({
52
55
  description: "Specific job id to remove (only used when action=remove).",
53
56
  })),
@@ -103,6 +106,15 @@ function normalizeScope(raw) {
103
106
  .replace(/^-|-$/g, "");
104
107
  return base || "global";
105
108
  }
109
+ function parseJobIdFromResultText(text) {
110
+ const fenced = text.match(/Job ID:\s*`([^`]+)`/i);
111
+ if (fenced?.[1])
112
+ return fenced[1].trim();
113
+ const plain = text.match(/Job ID:\s*([a-z0-9-]{8,})/i);
114
+ if (plain?.[1])
115
+ return plain[1].trim();
116
+ return undefined;
117
+ }
106
118
  function buildToolContext(scope, args, commandBody) {
107
119
  return {
108
120
  senderId: `tool_${scope}`,
@@ -225,7 +237,27 @@ export function createScientifyCronTool(deps) {
225
237
  return Result.err("operation_failed", err);
226
238
  }
227
239
  const text = getResultText(res);
228
- return Result.ok({ action, scope, result: text });
240
+ const jobId = parseJobIdFromResultText(text);
241
+ const runNow = readBooleanParam(params, "run_now");
242
+ if (runNow && jobId) {
243
+ let runRes = await deps.runtime.system.runCommandWithTimeout(["openclaw", "cron", "run", jobId, "--json"], { timeoutMs: 120_000 });
244
+ if (runRes.code !== 0 &&
245
+ /unknown option '--json'|unknown option \"--json\"|unknown option\s+--json/i.test(runRes.stderr || "")) {
246
+ runRes = await deps.runtime.system.runCommandWithTimeout(["openclaw", "cron", "run", jobId], { timeoutMs: 120_000 });
247
+ }
248
+ if (runRes.code !== 0) {
249
+ return Result.err("operation_failed", runRes.stderr || `cron run failed for job ${jobId}`);
250
+ }
251
+ return Result.ok({
252
+ action,
253
+ scope,
254
+ job_id: jobId,
255
+ run_now: true,
256
+ run_result: runRes.stdout.trim(),
257
+ result: text,
258
+ });
259
+ }
260
+ return Result.ok({ action, scope, ...(jobId ? { job_id: jobId } : {}), result: text });
229
261
  }
230
262
  if (action === "list") {
231
263
  const ctx = buildToolContext(scope, "", "/research-subscriptions");