scientify 2.1.0 → 3.0.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.
Files changed (138) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +1 -76
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/cli/research.d.ts.map +1 -1
  5. package/dist/src/cli/research.js +6 -23
  6. package/dist/src/cli/research.js.map +1 -1
  7. package/dist/src/commands/metabolism-status.d.ts.map +1 -1
  8. package/dist/src/commands/metabolism-status.js +5 -25
  9. package/dist/src/commands/metabolism-status.js.map +1 -1
  10. package/dist/src/commands.d.ts +8 -8
  11. package/dist/src/commands.d.ts.map +1 -1
  12. package/dist/src/commands.js +91 -262
  13. package/dist/src/commands.js.map +1 -1
  14. package/dist/src/templates/bootstrap.d.ts.map +1 -1
  15. package/dist/src/templates/bootstrap.js +45 -59
  16. package/dist/src/templates/bootstrap.js.map +1 -1
  17. package/dist/src/types.d.ts +2 -10
  18. package/dist/src/types.d.ts.map +1 -1
  19. package/openclaw.plugin.json +3 -16
  20. package/package.json +2 -3
  21. package/skills/idea-generation/SKILL.md +20 -44
  22. package/skills/idea-generation/references/code-mapping.md +3 -3
  23. package/skills/idea-generation/references/idea-template.md +1 -1
  24. package/skills/idea-generation/references/reading-long-papers.md +3 -3
  25. package/skills/metabolism/SKILL.md +80 -36
  26. package/skills/paper-download/SKILL.md +61 -0
  27. package/skills/research-collect/SKILL.md +41 -111
  28. package/skills/research-experiment/SKILL.md +11 -12
  29. package/skills/research-implement/SKILL.md +10 -11
  30. package/skills/research-pipeline/SKILL.md +23 -31
  31. package/skills/research-plan/SKILL.md +7 -11
  32. package/skills/research-review/SKILL.md +21 -22
  33. package/skills/research-survey/SKILL.md +11 -25
  34. package/skills/write-review-paper/SKILL.md +12 -12
  35. package/skills/write-review-paper/references/note-template.md +1 -1
  36. package/skills/write-review-paper/references/survey-template.md +1 -1
  37. package/dist/src/hooks/research-mode.d.ts +0 -22
  38. package/dist/src/hooks/research-mode.d.ts.map +0 -1
  39. package/dist/src/hooks/research-mode.js +0 -35
  40. package/dist/src/hooks/research-mode.js.map +0 -1
  41. package/dist/src/hooks/scientify-cron-autofill.d.ts +0 -15
  42. package/dist/src/hooks/scientify-cron-autofill.d.ts.map +0 -1
  43. package/dist/src/hooks/scientify-cron-autofill.js +0 -156
  44. package/dist/src/hooks/scientify-cron-autofill.js.map +0 -1
  45. package/dist/src/hooks/scientify-signature.d.ts +0 -21
  46. package/dist/src/hooks/scientify-signature.d.ts.map +0 -1
  47. package/dist/src/hooks/scientify-signature.js +0 -150
  48. package/dist/src/hooks/scientify-signature.js.map +0 -1
  49. package/dist/src/knowledge-state/project.d.ts +0 -13
  50. package/dist/src/knowledge-state/project.d.ts.map +0 -1
  51. package/dist/src/knowledge-state/project.js +0 -88
  52. package/dist/src/knowledge-state/project.js.map +0 -1
  53. package/dist/src/knowledge-state/render.d.ts +0 -63
  54. package/dist/src/knowledge-state/render.d.ts.map +0 -1
  55. package/dist/src/knowledge-state/render.js +0 -368
  56. package/dist/src/knowledge-state/render.js.map +0 -1
  57. package/dist/src/knowledge-state/store.d.ts +0 -19
  58. package/dist/src/knowledge-state/store.d.ts.map +0 -1
  59. package/dist/src/knowledge-state/store.js +0 -978
  60. package/dist/src/knowledge-state/store.js.map +0 -1
  61. package/dist/src/knowledge-state/types.d.ts +0 -182
  62. package/dist/src/knowledge-state/types.d.ts.map +0 -1
  63. package/dist/src/knowledge-state/types.js +0 -2
  64. package/dist/src/knowledge-state/types.js.map +0 -1
  65. package/dist/src/literature/subscription-state.d.ts +0 -112
  66. package/dist/src/literature/subscription-state.d.ts.map +0 -1
  67. package/dist/src/literature/subscription-state.js +0 -696
  68. package/dist/src/literature/subscription-state.js.map +0 -1
  69. package/dist/src/research-subscriptions/constants.d.ts +0 -16
  70. package/dist/src/research-subscriptions/constants.d.ts.map +0 -1
  71. package/dist/src/research-subscriptions/constants.js +0 -59
  72. package/dist/src/research-subscriptions/constants.js.map +0 -1
  73. package/dist/src/research-subscriptions/cron-client.d.ts +0 -8
  74. package/dist/src/research-subscriptions/cron-client.d.ts.map +0 -1
  75. package/dist/src/research-subscriptions/cron-client.js +0 -81
  76. package/dist/src/research-subscriptions/cron-client.js.map +0 -1
  77. package/dist/src/research-subscriptions/delivery.d.ts +0 -10
  78. package/dist/src/research-subscriptions/delivery.d.ts.map +0 -1
  79. package/dist/src/research-subscriptions/delivery.js +0 -82
  80. package/dist/src/research-subscriptions/delivery.js.map +0 -1
  81. package/dist/src/research-subscriptions/handlers.d.ts +0 -6
  82. package/dist/src/research-subscriptions/handlers.d.ts.map +0 -1
  83. package/dist/src/research-subscriptions/handlers.js +0 -204
  84. package/dist/src/research-subscriptions/handlers.js.map +0 -1
  85. package/dist/src/research-subscriptions/parse.d.ts +0 -11
  86. package/dist/src/research-subscriptions/parse.d.ts.map +0 -1
  87. package/dist/src/research-subscriptions/parse.js +0 -492
  88. package/dist/src/research-subscriptions/parse.js.map +0 -1
  89. package/dist/src/research-subscriptions/prompt.d.ts +0 -5
  90. package/dist/src/research-subscriptions/prompt.d.ts.map +0 -1
  91. package/dist/src/research-subscriptions/prompt.js +0 -347
  92. package/dist/src/research-subscriptions/prompt.js.map +0 -1
  93. package/dist/src/research-subscriptions/types.d.ts +0 -66
  94. package/dist/src/research-subscriptions/types.d.ts.map +0 -1
  95. package/dist/src/research-subscriptions/types.js +0 -2
  96. package/dist/src/research-subscriptions/types.js.map +0 -1
  97. package/dist/src/research-subscriptions.d.ts +0 -2
  98. package/dist/src/research-subscriptions.d.ts.map +0 -1
  99. package/dist/src/research-subscriptions.js +0 -2
  100. package/dist/src/research-subscriptions.js.map +0 -1
  101. package/dist/src/services/auto-updater.d.ts +0 -15
  102. package/dist/src/services/auto-updater.d.ts.map +0 -1
  103. package/dist/src/services/auto-updater.js +0 -188
  104. package/dist/src/services/auto-updater.js.map +0 -1
  105. package/dist/src/tools/arxiv-download.d.ts +0 -24
  106. package/dist/src/tools/arxiv-download.d.ts.map +0 -1
  107. package/dist/src/tools/arxiv-download.js +0 -177
  108. package/dist/src/tools/arxiv-download.js.map +0 -1
  109. package/dist/src/tools/github-search-tool.d.ts +0 -25
  110. package/dist/src/tools/github-search-tool.d.ts.map +0 -1
  111. package/dist/src/tools/github-search-tool.js +0 -114
  112. package/dist/src/tools/github-search-tool.js.map +0 -1
  113. package/dist/src/tools/openreview-lookup.d.ts +0 -31
  114. package/dist/src/tools/openreview-lookup.d.ts.map +0 -1
  115. package/dist/src/tools/openreview-lookup.js +0 -414
  116. package/dist/src/tools/openreview-lookup.js.map +0 -1
  117. package/dist/src/tools/paper-browser.d.ts +0 -23
  118. package/dist/src/tools/paper-browser.d.ts.map +0 -1
  119. package/dist/src/tools/paper-browser.js +0 -121
  120. package/dist/src/tools/paper-browser.js.map +0 -1
  121. package/dist/src/tools/scientify-cron.d.ts +0 -63
  122. package/dist/src/tools/scientify-cron.d.ts.map +0 -1
  123. package/dist/src/tools/scientify-cron.js +0 -265
  124. package/dist/src/tools/scientify-cron.js.map +0 -1
  125. package/dist/src/tools/scientify-literature-state.d.ts +0 -303
  126. package/dist/src/tools/scientify-literature-state.d.ts.map +0 -1
  127. package/dist/src/tools/scientify-literature-state.js +0 -957
  128. package/dist/src/tools/scientify-literature-state.js.map +0 -1
  129. package/dist/src/tools/unpaywall-download.d.ts +0 -21
  130. package/dist/src/tools/unpaywall-download.d.ts.map +0 -1
  131. package/dist/src/tools/unpaywall-download.js +0 -169
  132. package/dist/src/tools/unpaywall-download.js.map +0 -1
  133. package/dist/src/tools/workspace.d.ts +0 -32
  134. package/dist/src/tools/workspace.d.ts.map +0 -1
  135. package/dist/src/tools/workspace.js +0 -69
  136. package/dist/src/tools/workspace.js.map +0 -1
  137. package/skills/metabolism-init/SKILL.md +0 -80
  138. package/skills/research-subscription/SKILL.md +0 -119
@@ -14,29 +14,22 @@ metadata:
14
14
 
15
15
  **Don't ask permission. Just do it.**
16
16
 
17
- **Workspace:** `$W` = working directory provided in task parameter.
18
-
19
17
  ## Prerequisites
20
18
 
21
19
  Read and verify these files exist before starting:
22
20
 
23
21
  | File | Source |
24
22
  |------|--------|
25
- | `$W/papers/_meta/*.json` | /research-collect |
26
- | `$W/papers/_downloads/` or `$W/papers/{direction}/` | /research-collect |
27
- | `$W/repos/` | /research-collect Phase 3 |
28
- | `$W/prepare_res.md` | /research-collect Phase 3 |
23
+ | `papers/` | /research-collect 或 /metabolism |
29
24
 
30
25
  **If papers are missing, STOP:** "需要先运行 /research-collect 完成论文下载"
31
26
 
32
- **Note:** 如果 `prepare_res.md` 中注明"无可用参考仓库",代码映射步骤可跳过,但需在 survey_res.md 中标注。
33
-
34
27
  ## Output
35
28
 
36
29
  | File | Content |
37
30
  |------|---------|
38
- | `$W/notes/paper_{arxiv_id}.md` | Per-paper structured notes |
39
- | `$W/survey_res.md` | Synthesis report |
31
+ | `knowledge/paper_{id}.md` | Per-paper structured notes |
32
+ | `survey_res.md` | Synthesis report |
40
33
 
41
34
  ---
42
35
 
@@ -45,30 +38,23 @@ Read and verify these files exist before starting:
45
38
  ### Step 1: 收集论文列表
46
39
 
47
40
  ```bash
48
- ls $W/papers/_meta/
41
+ ls papers/
49
42
  ```
50
43
 
51
- 读取所有 `.json` 元数据,构建论文列表。按 score 降序排列。
44
+ 列出所有论文目录(arXiv 源文件)和 PDF 文件。
52
45
 
53
46
  ### Step 2: 逐篇深度分析
54
47
 
55
- **对每篇论文**(优先高分论文):
48
+ **对每篇论文:**
56
49
 
57
50
  #### 2.1 读 .tex 源码
58
51
 
59
- 找到论文的 .tex 文件(在 `_downloads/{arxiv_id}/` 或 `{direction}/{arxiv_id}/` 下),重点读取:
52
+ 找到论文的 .tex 文件(在 `papers/{arxiv_id}/` 下),重点读取:
60
53
  - **Method / Approach** section
61
54
  - **Model Architecture** section
62
55
  - 数学公式定义
63
56
 
64
- **对于大型论文**(>2000 行),使用 `paper_browser` 分页阅读:
65
- ```javascript
66
- // 先读前 100 行找到 section 位置
67
- paper_browser({ file_path: "$W/papers/{arxiv_id}/{file}.tex", start_line: 1, num_lines: 100 })
68
-
69
- // 找到 Method section 后,跳转到该位置
70
- paper_browser({ file_path: "$W/papers/{arxiv_id}/{file}.tex", start_line: 450, num_lines: 150 })
71
- ```
57
+ **对于大型论文**(>2000 行),分段读取关键 section,避免上下文溢出。
72
58
 
73
59
  如果没有 .tex(只有 PDF),基于 abstract 分析。
74
60
 
@@ -83,14 +69,14 @@ paper_browser({ file_path: "$W/papers/{arxiv_id}/{file}.tex", start_line: 450, n
83
69
 
84
70
  **⚠️ 强制性步骤(当 repos/ 存在时)** — 代码映射是下游 plan 和 implement 的关键输入。
85
71
 
86
- 读取 `$W/prepare_res.md` 中的仓库列表,对每个公式/核心概念:
72
+ 读取 `prepare_res.md` 中的仓库列表,对每个公式/核心概念:
87
73
  1. 在对应仓库中搜索实现代码(用 grep 关键类名/函数名)
88
74
  2. 记录**文件路径、行号、代码片段**
89
75
  3. 如果多个仓库有不同实现,记录差异
90
76
 
91
77
  #### 2.4 写入笔记
92
78
 
93
- 写入 `$W/notes/paper_{arxiv_id}.md`:
79
+ 写入 `knowledge/paper_{id}.md`:
94
80
 
95
81
  ```markdown
96
82
  # {Paper Title}
@@ -120,7 +106,7 @@ $$
120
106
 
121
107
  ### Step 3: 综合报告
122
108
 
123
- 读取所有 `notes/paper_*.md`,写入 `$W/survey_res.md`:
109
+ 读取所有 `knowledge/paper_*.md`,写入 `survey_res.md`:
124
110
 
125
111
  ```markdown
126
112
  # Survey Synthesis
@@ -16,18 +16,18 @@ metadata:
16
16
 
17
17
  Guide for writing a structured literature review or survey paper from papers you've already collected. This skill helps with reading strategy, note organization, and academic writing.
18
18
 
19
- **Workspace:** `$W` = working directory provided in task parameter. Outputs go to `$W/review/`.
19
+ Outputs go to `review/`.
20
20
 
21
21
  ## Prerequisites
22
22
 
23
23
  Before starting, ensure you have:
24
- 1. Papers collected in `$W/papers/`
25
- 2. Ideally, clustering done by `/research-collect` in `$W/survey/clusters.json`
24
+ 1. Papers collected in `papers/`
25
+ 2. Ideally, knowledge base built in `knowledge/`
26
26
 
27
27
  Check workspace:
28
28
  ```bash
29
- ls $W/papers/
30
- ls $W/survey/ 2>/dev/null
29
+ ls papers/
30
+ ls knowledge/ 2>/dev/null
31
31
  ```
32
32
 
33
33
  ---
@@ -44,7 +44,7 @@ Based on clusters from survey, prioritize reading:
44
44
  | P2 (重要) | 主要方法论、重要实验结果 | 读摘要+方法+实验 |
45
45
  | P3 (参考) | 辅助材料、边缘相关 | 仅读摘要 |
46
46
 
47
- Create `$W/review/reading_plan.md`:
47
+ Create `review/reading_plan.md`:
48
48
 
49
49
  ```markdown
50
50
  # Reading Plan
@@ -62,7 +62,7 @@ Create `$W/review/reading_plan.md`:
62
62
 
63
63
  ### 1.2 Reading Notes Template
64
64
 
65
- For each paper, create `$W/review/notes/{paper_id}.md` using template in `references/note-template.md`.
65
+ For each paper, create `review/notes/{paper_id}.md` using template in `references/note-template.md`.
66
66
 
67
67
  ---
68
68
 
@@ -70,7 +70,7 @@ For each paper, create `$W/review/notes/{paper_id}.md` using template in `refere
70
70
 
71
71
  ### 2.1 Build Comparison Table
72
72
 
73
- Create `$W/review/comparison.md`:
73
+ Create `review/comparison.md`:
74
74
 
75
75
  ```markdown
76
76
  # Method Comparison
@@ -83,7 +83,7 @@ Create `$W/review/comparison.md`:
83
83
 
84
84
  ### 2.2 Timeline Analysis
85
85
 
86
- Create `$W/review/timeline.md`:
86
+ Create `review/timeline.md`:
87
87
 
88
88
  ```markdown
89
89
  # Research Timeline
@@ -106,7 +106,7 @@ Create `$W/review/timeline.md`:
106
106
 
107
107
  ### 2.3 Taxonomy Design
108
108
 
109
- Create `$W/review/taxonomy.md`:
109
+ Create `review/taxonomy.md`:
110
110
 
111
111
  ```markdown
112
112
  # Taxonomy of Approaches
@@ -140,7 +140,7 @@ Create `$W/review/taxonomy.md`:
140
140
 
141
141
  ### 3.1 Survey Paper Template
142
142
 
143
- Create `$W/review/draft.md` using template in `references/survey-template.md`.
143
+ Create `review/draft.md` using template in `references/survey-template.md`.
144
144
 
145
145
  Key sections: Abstract → Introduction → Background → Taxonomy → Comparison → Datasets → Future Directions → Conclusion
146
146
 
@@ -198,7 +198,7 @@ For a thesis chapter:
198
198
  ## Output Files
199
199
 
200
200
  ```
201
- $W/review/
201
+ review/
202
202
  ├── reading_plan.md # 阅读计划
203
203
  ├── notes/ # 阅读笔记
204
204
  │ ├── {paper_id}.md
@@ -1,6 +1,6 @@
1
1
  # Paper Note Template
2
2
 
3
- Use this template for each paper in `~/.openclaw/workspace/literature/notes/`.
3
+ Use this template for each paper in `knowledge/`.
4
4
 
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Survey Paper Template
2
2
 
3
- Use this template for `$WORKSPACE/review/draft.md`:
3
+ Use this template for `review/draft.md`:
4
4
 
5
5
  ```markdown
6
6
  # [Survey Title]: A Comprehensive Review
@@ -1,22 +0,0 @@
1
- /**
2
- * Hook types (simplified for plugin use)
3
- */
4
- type HookEvent = {
5
- prompt: string;
6
- messages?: unknown[];
7
- };
8
- type HookContext = {
9
- agentId?: string;
10
- sessionKey?: string;
11
- workspaceDir?: string;
12
- };
13
- type HookResult = {
14
- prependContext?: string;
15
- systemPrompt?: string;
16
- };
17
- /**
18
- * Injects on every prompt build (survives compaction).
19
- */
20
- export declare function createResearchModeHook(): (_event: HookEvent, _context: HookContext) => HookResult;
21
- export {};
22
- //# sourceMappingURL=research-mode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"research-mode.d.ts","sourceRoot":"","sources":["../../../src/hooks/research-mode.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,SAAS,GAAG;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA6BF;;GAEG;AACH,wBAAgB,sBAAsB,KAC5B,QAAQ,SAAS,EAAE,UAAU,WAAW,KAAG,UAAU,CAG9D"}
@@ -1,35 +0,0 @@
1
- /**
2
- * Research mode prompt injected into every conversation.
3
- */
4
- const RESEARCH_MODE_PROMPT = `[Scientify]
5
- Skills: match research tasks to <available_skills>; read SKILL.md before acting.
6
- Workspace: $W/projects/<topic>/. Check /research-status before writing. Active project in $W/projects/.active.
7
- survey/ — search_terms.json, raw_results.json, filtered_papers.json, clusters.json, report.md (literature-survey)
8
- papers/ — organized by cluster direction, each with paper_list.md + {arxiv_id}/ .tex sources (literature-survey)
9
- notes/ — per-paper deep analysis paper_{id}.md (research-survey). survey_res.md = method comparison table.
10
- ideas/ — gaps.md, idea_1..5.md, selected_idea.md, summary.md (idea-generation)
11
- review/ — reading_plan.md, notes/{id}.md, comparison.md, taxonomy.md, draft.md, bibliography.bib (write-review-paper)
12
- plan_res.md (research-plan) → project/ + ml_res.md (research-implement) → iterations/judge_v*.md (research-review) → experiment_res.md (research-experiment)
13
- Scheduling: if user asks for recurring or delayed push delivery (e.g. tomorrow at 08:00, daily digest), use research-subscription skill and call scientify_cron_job to create a real schedule.
14
- If it is a plain reminder (not research), set scientify_cron_job.message and do not default to the literature pipeline.
15
- For recurring research pushes, use scientify_literature_state to prepare dedupe context and record both pushed paper IDs and structured knowledge_state (changes, updates, hypotheses, run_log).
16
- Full-text-first policy: for papers used as core evidence, read full text when possible and mark full_text_read=true; if not fully read, you must explicitly mark full_text_read=false with unread_reason.
17
- Structured paper record policy: for each core paper, populate domain/subdomains/cross-domain links/research goal/approach/methodology design/key contributions/practical insights/must-understand points/limitations/evidence anchors.
18
- Use temporary local directory for full-text files (e.g. /tmp/scientify-fulltext/<run-id>) and delete it after record; write cleanup status to run_log.temp_cleanup_status.
19
- Quality targets for research runs: core full-text coverage >=80%; evidence-binding rate >=90% (key conclusions must bind to section+locator+quote); citation error rate <2%. If full text is missing, do not keep high-confidence conclusions.
20
- For research records, include project_id when available so state can persist under project knowledge_state/.
21
- When user gives preference feedback (e.g. "more like this", "skip this direction", "prefer arxiv"), quietly persist it via scientify_literature_state action=feedback when scope/topic are inferable.
22
- Preference memory is backend-only: use it to rerank future pushes, do not expose memory internals unless user explicitly asks.
23
- Do not stop at explanation when user explicitly asks to set a schedule.
24
- Rules: file exists = step done (skip). Outputs immutable unless user asks. project/ mutable during review loop.
25
- Execution: always use \`python3\` (not \`python\`) for shell commands in this environment.
26
- Rigor: read first, think second, answer third. Never fabricate references or results. Every claim needs a source. Say "I don't know" when uncertain. Read actual papers, not just abstracts. Ground ideas in real papers.`;
27
- /**
28
- * Injects on every prompt build (survives compaction).
29
- */
30
- export function createResearchModeHook() {
31
- return (_event, _context) => {
32
- return { prependContext: RESEARCH_MODE_PROMPT };
33
- };
34
- }
35
- //# sourceMappingURL=research-mode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"research-mode.js","sourceRoot":"","sources":["../../../src/hooks/research-mode.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;0NAsB6L,CAAC;AAE3N;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,MAAiB,EAAE,QAAqB,EAAc,EAAE;QAC9D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC"}
@@ -1,15 +0,0 @@
1
- type BeforeToolCallEvent = {
2
- toolName: string;
3
- params?: Record<string, unknown>;
4
- };
5
- type BeforeToolCallContext = {
6
- sessionKey?: string;
7
- agentId?: string;
8
- channel?: string;
9
- senderId?: string;
10
- };
11
- export declare function createScientifyCronAutofillHook(): (event: BeforeToolCallEvent, context: BeforeToolCallContext) => {
12
- params: Record<string, unknown>;
13
- } | void;
14
- export {};
15
- //# sourceMappingURL=scientify-cron-autofill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scientify-cron-autofill.d.ts","sourceRoot":"","sources":["../../../src/hooks/scientify-cron-autofill.ts"],"names":[],"mappings":"AAAA,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAoIF,wBAAgB,+BAA+B,KAE3C,OAAO,mBAAmB,EAC1B,SAAS,qBAAqB,KAC7B;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,CAiD9C"}
@@ -1,156 +0,0 @@
1
- const CHANNELS_WITH_TARGET = new Set([
2
- "telegram",
3
- "whatsapp",
4
- "discord",
5
- "irc",
6
- "googlechat",
7
- "slack",
8
- "signal",
9
- "imessage",
10
- "feishu",
11
- "nostr",
12
- "msteams",
13
- "mattermost",
14
- "nextcloud-talk",
15
- "matrix",
16
- "bluebubbles",
17
- "line",
18
- "zalo",
19
- "zalouser",
20
- "synology-chat",
21
- "tlon",
22
- ]);
23
- function readString(value) {
24
- if (typeof value !== "string")
25
- return undefined;
26
- const trimmed = value.trim();
27
- return trimmed.length > 0 ? trimmed : undefined;
28
- }
29
- function readLowerString(value) {
30
- const raw = readString(value);
31
- return raw ? raw.toLowerCase() : undefined;
32
- }
33
- function splitSessionKeyParts(sessionKey) {
34
- // OpenClaw may append thread suffix: ...:thread:<id>
35
- // Strip that suffix first to avoid treating thread id as peer id.
36
- const lower = sessionKey.toLowerCase();
37
- const threadIndex = lower.lastIndexOf(":thread:");
38
- const base = threadIndex >= 0 ? sessionKey.slice(0, threadIndex) : sessionKey;
39
- return base.split(":").filter((part) => part.length > 0);
40
- }
41
- function joinParts(parts, start) {
42
- const joined = parts.slice(start).join(":").trim();
43
- return joined.length > 0 ? joined : undefined;
44
- }
45
- function deriveFromSessionKey(sessionKey) {
46
- const raw = readString(sessionKey);
47
- if (!raw)
48
- return {};
49
- // Canonical OpenClaw patterns:
50
- // - agent:<agentId>:<channel>:direct:<peerId>
51
- // - agent:<agentId>:<channel>:<accountId>:direct:<peerId>
52
- // - agent:<agentId>:<channel>:group:<peerId>
53
- // - agent:<agentId>:direct:<peerId>
54
- const parts = splitSessionKeyParts(raw);
55
- if (parts.length < 3 || parts[0].toLowerCase() !== "agent")
56
- return {};
57
- const rest = parts.slice(2);
58
- if (rest.length === 0)
59
- return {};
60
- const token0 = rest[0]?.toLowerCase();
61
- const token1 = rest[1]?.toLowerCase();
62
- const token2 = rest[2]?.toLowerCase();
63
- // agent:<agentId>:direct:<peerId>
64
- if (token0 === "direct" || token0 === "dm") {
65
- return { senderId: joinParts(rest, 1) };
66
- }
67
- // agent:<agentId>:<channel>:direct:<peerId>
68
- if (token1 === "direct" || token1 === "dm") {
69
- return {
70
- channel: token0,
71
- senderId: joinParts(rest, 2),
72
- };
73
- }
74
- // agent:<agentId>:<channel>:<accountId>:direct:<peerId>
75
- if (token2 === "direct" || token2 === "dm") {
76
- return {
77
- channel: token0,
78
- senderId: joinParts(rest, 3),
79
- };
80
- }
81
- // Non-direct session (group/channel/thread), peer id is still a valid delivery target.
82
- if (rest.length >= 3) {
83
- return {
84
- channel: token0,
85
- senderId: joinParts(rest, 2),
86
- };
87
- }
88
- return { channel: token0 };
89
- }
90
- function deriveOrigin(context) {
91
- const fromContext = {
92
- channel: readLowerString(context.channel),
93
- senderId: readString(context.senderId),
94
- };
95
- if (fromContext.channel && fromContext.senderId) {
96
- return fromContext;
97
- }
98
- const fromSession = deriveFromSessionKey(context.sessionKey);
99
- return {
100
- channel: fromContext.channel ?? fromSession.channel,
101
- senderId: fromContext.senderId ?? fromSession.senderId,
102
- };
103
- }
104
- function sanitizeScopePart(value) {
105
- const cleaned = value
106
- .toLowerCase()
107
- .replace(/[^a-z0-9_-]+/g, "-")
108
- .replace(/-+/g, "-")
109
- .replace(/^-|-$/g, "");
110
- return cleaned || "unknown";
111
- }
112
- export function createScientifyCronAutofillHook() {
113
- return (event, context) => {
114
- if (event.toolName !== "scientify_cron_job")
115
- return;
116
- const params = event.params ?? {};
117
- const action = readLowerString(params.action);
118
- if (action !== "upsert")
119
- return;
120
- if (params.no_deliver === true)
121
- return;
122
- const explicitChannel = readLowerString(params.channel);
123
- const explicitTo = readString(params.to);
124
- const explicitScope = readString(params.scope);
125
- const origin = deriveOrigin(context);
126
- const originChannel = readLowerString(origin.channel);
127
- const originSender = readString(origin.senderId);
128
- let nextChannel = explicitChannel;
129
- let nextTo = explicitTo;
130
- let nextScope = explicitScope;
131
- if (!nextChannel && originChannel && CHANNELS_WITH_TARGET.has(originChannel)) {
132
- nextChannel = originChannel;
133
- }
134
- if (!nextTo && nextChannel && nextChannel !== "last" && originSender) {
135
- if (!originChannel || originChannel === nextChannel) {
136
- nextTo = originSender;
137
- }
138
- }
139
- // Avoid global scope collisions across users when tool calls omit scope.
140
- if (!nextScope && nextChannel && nextTo) {
141
- nextScope = `${sanitizeScopePart(nextChannel)}-${sanitizeScopePart(nextTo)}`;
142
- }
143
- if (nextChannel === explicitChannel && nextTo === explicitTo && nextScope === explicitScope) {
144
- return;
145
- }
146
- return {
147
- params: {
148
- ...params,
149
- ...(nextChannel ? { channel: nextChannel } : {}),
150
- ...(nextTo ? { to: nextTo } : {}),
151
- ...(nextScope ? { scope: nextScope } : {}),
152
- },
153
- };
154
- };
155
- }
156
- //# sourceMappingURL=scientify-cron-autofill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scientify-cron-autofill.js","sourceRoot":"","sources":["../../../src/hooks/scientify-cron-autofill.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- type BaseHookContext = Record<string, unknown> & {
2
- sessionKey?: string;
3
- agentId?: string;
4
- };
5
- type BeforeToolCallEvent = {
6
- toolName: string;
7
- params?: Record<string, unknown>;
8
- };
9
- type BeforePromptBuildEvent = {
10
- prompt?: string;
11
- messages?: unknown[];
12
- };
13
- type PromptHookResult = {
14
- prependContext?: string;
15
- };
16
- export declare function createScientifyUsageTrackerHook(): (event: BeforeToolCallEvent, context: BaseHookContext) => void;
17
- export declare function createScientifyMessageTrackerHook(): (event: unknown, context: BaseHookContext) => void;
18
- export declare function createScientifySignaturePromptHook(): (event: BeforePromptBuildEvent, context: BaseHookContext) => PromptHookResult | void;
19
- export declare function createScientifyUsageCleanupHook(): (event: unknown, context: BaseHookContext) => void;
20
- export {};
21
- //# sourceMappingURL=scientify-signature.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scientify-signature.d.ts","sourceRoot":"","sources":["../../../src/hooks/scientify-signature.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAgGF,wBAAgB,+BAA+B,KACrC,OAAO,mBAAmB,EAAE,SAAS,eAAe,KAAG,IAAI,CAKpE;AAED,wBAAgB,iCAAiC,KACvC,OAAO,OAAO,EAAE,SAAS,eAAe,KAAG,IAAI,CAmBxD;AAED,wBAAgB,kCAAkC,KACxC,OAAO,sBAAsB,EAAE,SAAS,eAAe,KAAG,gBAAgB,GAAG,IAAI,CAoB1F;AAED,wBAAgB,+BAA+B,KACrC,OAAO,OAAO,EAAE,SAAS,eAAe,KAAG,IAAI,CAKxD"}
@@ -1,150 +0,0 @@
1
- const SCIENTIFY_TOOLS = new Set([
2
- "arxiv_search",
3
- "arxiv_download",
4
- "github_search",
5
- "paper_browser",
6
- "openalex_search",
7
- "unpaywall_download",
8
- "scientify_cron_job",
9
- "scientify_literature_state",
10
- ]);
11
- const SCIENTIFY_SKILLS = new Set([
12
- "idea-generation",
13
- "research-pipeline",
14
- "research-survey",
15
- "research-plan",
16
- "research-implement",
17
- "research-review",
18
- "research-experiment",
19
- "literature-survey",
20
- "write-review-paper",
21
- "research-subscription",
22
- ]);
23
- const SCIENTIFY_SKILL_COMMAND_RE = /(?:^|\s)\/(idea-generation|research-pipeline|research-survey|research-plan|research-implement|research-review|research-experiment|literature-survey|write-review-paper|research-subscription)(?:\s|$)/i;
24
- const SIGNATURE_PROMPT = `[Scientify Signature]
25
- If this response is based on Scientify workflow execution (Scientify skills/tools), append this exact footer at the end of your reply:
26
- ---
27
- 🐍Scientify
28
- Do not add any text after the footer.`;
29
- // Track sessions that actually used Scientify workflow elements.
30
- const scientifyActiveSessions = new Set();
31
- function getTrackingKey(event, context) {
32
- if (context.sessionKey)
33
- return context.sessionKey;
34
- if (context.agentId)
35
- return context.agentId;
36
- if (event && typeof event === "object") {
37
- const record = event;
38
- if (typeof record.sessionKey === "string")
39
- return record.sessionKey;
40
- if (typeof record.agentId === "string")
41
- return record.agentId;
42
- }
43
- return undefined;
44
- }
45
- function readSkillFromTask(task) {
46
- if (typeof task !== "string")
47
- return undefined;
48
- const match = task.match(/^\/([a-z][\w-]*)/);
49
- return match?.[1];
50
- }
51
- function extractText(value) {
52
- if (typeof value === "string")
53
- return value;
54
- if (Array.isArray(value)) {
55
- return value
56
- .map((item) => extractText(item))
57
- .filter((part) => part.length > 0)
58
- .join("\n");
59
- }
60
- if (value && typeof value === "object") {
61
- const record = value;
62
- if (typeof record.text === "string")
63
- return record.text;
64
- if (typeof record.content === "string")
65
- return record.content;
66
- }
67
- return "";
68
- }
69
- function extractLastUserMessageText(messages) {
70
- for (let i = messages.length - 1; i >= 0; i--) {
71
- const item = messages[i];
72
- if (!item || typeof item !== "object")
73
- continue;
74
- const record = item;
75
- const role = typeof record.role === "string" ? record.role.toLowerCase() : "";
76
- if (role !== "user")
77
- continue;
78
- return extractText(record.content);
79
- }
80
- return "";
81
- }
82
- function markScientifyUsageFromToolCall(event, trackingKey) {
83
- if (SCIENTIFY_TOOLS.has(event.toolName)) {
84
- scientifyActiveSessions.add(trackingKey);
85
- return;
86
- }
87
- if (event.toolName !== "sessions_spawn")
88
- return;
89
- const skill = readSkillFromTask(event.params?.task);
90
- if (skill && SCIENTIFY_SKILLS.has(skill)) {
91
- scientifyActiveSessions.add(trackingKey);
92
- }
93
- }
94
- export function createScientifyUsageTrackerHook() {
95
- return (event, context) => {
96
- const trackingKey = getTrackingKey(event, context);
97
- if (!trackingKey)
98
- return;
99
- markScientifyUsageFromToolCall(event, trackingKey);
100
- };
101
- }
102
- export function createScientifyMessageTrackerHook() {
103
- return (event, context) => {
104
- const trackingKey = getTrackingKey(event, context);
105
- if (!trackingKey)
106
- return;
107
- if (!event || typeof event !== "object")
108
- return;
109
- const record = event;
110
- const text = [
111
- extractText(record.text),
112
- extractText(record.content),
113
- extractText(record.commandBody),
114
- extractText(record.message),
115
- ]
116
- .filter((part) => part.length > 0)
117
- .join("\n");
118
- if (SCIENTIFY_SKILL_COMMAND_RE.test(text)) {
119
- scientifyActiveSessions.add(trackingKey);
120
- }
121
- };
122
- }
123
- export function createScientifySignaturePromptHook() {
124
- return (event, context) => {
125
- const trackingKey = getTrackingKey(event, context);
126
- if (trackingKey && scientifyActiveSessions.has(trackingKey)) {
127
- return { prependContext: SIGNATURE_PROMPT };
128
- }
129
- // Heuristic fallback: user explicitly invoked a Scientify skill command.
130
- const promptText = typeof event.prompt === "string" ? event.prompt : "";
131
- const lastUserText = Array.isArray(event.messages) ? extractLastUserMessageText(event.messages) : "";
132
- const combined = `${promptText}\n${lastUserText}`;
133
- if (SCIENTIFY_SKILL_COMMAND_RE.test(combined)) {
134
- if (trackingKey) {
135
- scientifyActiveSessions.add(trackingKey);
136
- }
137
- return { prependContext: SIGNATURE_PROMPT };
138
- }
139
- return;
140
- };
141
- }
142
- export function createScientifyUsageCleanupHook() {
143
- return (event, context) => {
144
- const trackingKey = getTrackingKey(event, context);
145
- if (!trackingKey)
146
- return;
147
- scientifyActiveSessions.delete(trackingKey);
148
- };
149
- }
150
- //# sourceMappingURL=scientify-signature.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scientify-signature.js","sourceRoot":"","sources":["../../../src/hooks/scientify-signature.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- export type ProjectContext = {
2
- projectId: string;
3
- projectPath: string;
4
- created: boolean;
5
- };
6
- export declare function resolveProjectContext(args: {
7
- projectId?: string;
8
- scope: string;
9
- topic: string;
10
- autoCreate?: boolean;
11
- }): Promise<ProjectContext>;
12
- export declare function getProjectRootPath(): string;
13
- //# sourceMappingURL=project.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/knowledge-state/project.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AA4FF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgB1B;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}