scientify 2.1.0 → 3.1.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.en.md +21 -1
- package/README.md +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -77
- package/dist/index.js.map +1 -1
- package/dist/src/cli/research.d.ts.map +1 -1
- package/dist/src/cli/research.js +47 -23
- package/dist/src/cli/research.js.map +1 -1
- package/dist/src/commands/metabolism-status.d.ts.map +1 -1
- package/dist/src/commands/metabolism-status.js +5 -25
- package/dist/src/commands/metabolism-status.js.map +1 -1
- package/dist/src/commands.d.ts +8 -8
- package/dist/src/commands.d.ts.map +1 -1
- package/dist/src/commands.js +230 -243
- package/dist/src/commands.js.map +1 -1
- package/dist/src/release-gate.d.ts +14 -0
- package/dist/src/release-gate.d.ts.map +1 -0
- package/dist/src/release-gate.js +124 -0
- package/dist/src/release-gate.js.map +1 -0
- package/dist/src/templates/bootstrap.d.ts.map +1 -1
- package/dist/src/templates/bootstrap.js +157 -94
- package/dist/src/templates/bootstrap.js.map +1 -1
- package/dist/src/types.d.ts +2 -10
- package/dist/src/types.d.ts.map +1 -1
- package/openclaw.plugin.json +11 -17
- package/package.json +2 -3
- package/skills/algorithm-selection/SKILL.md +103 -0
- package/skills/algorithm-selection/references/candidate-template.md +13 -0
- package/skills/algorithm-selection/references/selection-template.md +39 -0
- package/skills/artifact-review/SKILL.md +146 -0
- package/skills/artifact-review/references/release-gate-template.md +40 -0
- package/skills/artifact-review/references/review-checklist.md +45 -0
- package/skills/artifact-review/references/style-review-checklist.md +30 -0
- package/skills/baseline-runner/SKILL.md +103 -0
- package/skills/baseline-runner/references/baseline-matrix-template.md +9 -0
- package/skills/baseline-runner/references/baseline-report-template.md +25 -0
- package/skills/dataset-validate/SKILL.md +104 -0
- package/skills/dataset-validate/references/data-validation-template.md +38 -0
- package/skills/figure-standardize/SKILL.md +110 -0
- package/skills/figure-standardize/references/caption-template.md +12 -0
- package/skills/figure-standardize/references/figure-placement-template.md +30 -0
- package/skills/figure-standardize/references/figure-style-guide.md +36 -0
- package/skills/idea-generation/SKILL.md +20 -44
- package/skills/idea-generation/references/code-mapping.md +3 -3
- package/skills/idea-generation/references/idea-template.md +1 -1
- package/skills/idea-generation/references/reading-long-papers.md +3 -3
- package/skills/metabolism/SKILL.md +80 -36
- package/skills/paper-download/SKILL.md +61 -0
- package/skills/release-layout/SKILL.md +73 -0
- package/skills/release-layout/references/page-structure.md +14 -0
- package/skills/research-collect/SKILL.md +41 -111
- package/skills/research-experiment/SKILL.md +20 -12
- package/skills/research-implement/SKILL.md +10 -11
- package/skills/research-pipeline/SKILL.md +23 -31
- package/skills/research-plan/SKILL.md +7 -11
- package/skills/research-review/SKILL.md +21 -22
- package/skills/research-survey/SKILL.md +28 -25
- package/skills/write-paper/SKILL.md +252 -0
- package/skills/write-paper/references/boundary-notes-template.md +34 -0
- package/skills/write-paper/references/claim-inventory-template.md +32 -0
- package/skills/write-paper/references/evidence-contract.md +57 -0
- package/skills/write-paper/references/figure-callout-template.md +38 -0
- package/skills/write-paper/references/figures-manifest-template.md +44 -0
- package/skills/write-paper/references/latex/README.md +22 -0
- package/skills/write-paper/references/latex/build_paper.sh +41 -0
- package/skills/write-paper/references/latex/manuscript.tex +39 -0
- package/skills/write-paper/references/latex/references.bib +10 -0
- package/skills/write-paper/references/latex/sections/ablations.tex +3 -0
- package/skills/write-paper/references/latex/sections/abstract.tex +3 -0
- package/skills/write-paper/references/latex/sections/conclusion.tex +3 -0
- package/skills/write-paper/references/latex/sections/discussion_scope.tex +7 -0
- package/skills/write-paper/references/latex/sections/experimental_protocol.tex +3 -0
- package/skills/write-paper/references/latex/sections/introduction.tex +3 -0
- package/skills/write-paper/references/latex/sections/main_results.tex +9 -0
- package/skills/write-paper/references/latex/sections/method_system.tex +3 -0
- package/skills/write-paper/references/latex/sections/problem_setup.tex +3 -0
- package/skills/write-paper/references/latex/sections/related_work.tex +3 -0
- package/skills/write-paper/references/paper-template.md +155 -0
- package/skills/write-paper/references/paragraph-contract.md +139 -0
- package/skills/write-paper/references/paragraph-examples.md +171 -0
- package/skills/write-paper/references/style-banlist.md +81 -0
- package/skills/write-review-paper/SKILL.md +22 -16
- package/skills/write-review-paper/references/note-template.md +1 -1
- package/skills/write-review-paper/references/survey-template.md +1 -1
- package/dist/src/hooks/research-mode.d.ts +0 -22
- package/dist/src/hooks/research-mode.d.ts.map +0 -1
- package/dist/src/hooks/research-mode.js +0 -35
- package/dist/src/hooks/research-mode.js.map +0 -1
- package/dist/src/hooks/scientify-cron-autofill.d.ts +0 -15
- package/dist/src/hooks/scientify-cron-autofill.d.ts.map +0 -1
- package/dist/src/hooks/scientify-cron-autofill.js +0 -156
- package/dist/src/hooks/scientify-cron-autofill.js.map +0 -1
- package/dist/src/hooks/scientify-signature.d.ts +0 -21
- package/dist/src/hooks/scientify-signature.d.ts.map +0 -1
- package/dist/src/hooks/scientify-signature.js +0 -150
- package/dist/src/hooks/scientify-signature.js.map +0 -1
- package/dist/src/knowledge-state/project.d.ts +0 -13
- package/dist/src/knowledge-state/project.d.ts.map +0 -1
- package/dist/src/knowledge-state/project.js +0 -88
- package/dist/src/knowledge-state/project.js.map +0 -1
- package/dist/src/knowledge-state/render.d.ts +0 -63
- package/dist/src/knowledge-state/render.d.ts.map +0 -1
- package/dist/src/knowledge-state/render.js +0 -368
- package/dist/src/knowledge-state/render.js.map +0 -1
- package/dist/src/knowledge-state/store.d.ts +0 -19
- package/dist/src/knowledge-state/store.d.ts.map +0 -1
- package/dist/src/knowledge-state/store.js +0 -978
- package/dist/src/knowledge-state/store.js.map +0 -1
- package/dist/src/knowledge-state/types.d.ts +0 -182
- package/dist/src/knowledge-state/types.d.ts.map +0 -1
- package/dist/src/knowledge-state/types.js +0 -2
- package/dist/src/knowledge-state/types.js.map +0 -1
- package/dist/src/literature/subscription-state.d.ts +0 -112
- package/dist/src/literature/subscription-state.d.ts.map +0 -1
- package/dist/src/literature/subscription-state.js +0 -696
- package/dist/src/literature/subscription-state.js.map +0 -1
- package/dist/src/research-subscriptions/constants.d.ts +0 -16
- package/dist/src/research-subscriptions/constants.d.ts.map +0 -1
- package/dist/src/research-subscriptions/constants.js +0 -59
- package/dist/src/research-subscriptions/constants.js.map +0 -1
- package/dist/src/research-subscriptions/cron-client.d.ts +0 -8
- package/dist/src/research-subscriptions/cron-client.d.ts.map +0 -1
- package/dist/src/research-subscriptions/cron-client.js +0 -81
- package/dist/src/research-subscriptions/cron-client.js.map +0 -1
- package/dist/src/research-subscriptions/delivery.d.ts +0 -10
- package/dist/src/research-subscriptions/delivery.d.ts.map +0 -1
- package/dist/src/research-subscriptions/delivery.js +0 -82
- package/dist/src/research-subscriptions/delivery.js.map +0 -1
- package/dist/src/research-subscriptions/handlers.d.ts +0 -6
- package/dist/src/research-subscriptions/handlers.d.ts.map +0 -1
- package/dist/src/research-subscriptions/handlers.js +0 -204
- package/dist/src/research-subscriptions/handlers.js.map +0 -1
- package/dist/src/research-subscriptions/parse.d.ts +0 -11
- package/dist/src/research-subscriptions/parse.d.ts.map +0 -1
- package/dist/src/research-subscriptions/parse.js +0 -492
- package/dist/src/research-subscriptions/parse.js.map +0 -1
- package/dist/src/research-subscriptions/prompt.d.ts +0 -5
- package/dist/src/research-subscriptions/prompt.d.ts.map +0 -1
- package/dist/src/research-subscriptions/prompt.js +0 -347
- package/dist/src/research-subscriptions/prompt.js.map +0 -1
- package/dist/src/research-subscriptions/types.d.ts +0 -66
- package/dist/src/research-subscriptions/types.d.ts.map +0 -1
- package/dist/src/research-subscriptions/types.js +0 -2
- package/dist/src/research-subscriptions/types.js.map +0 -1
- package/dist/src/research-subscriptions.d.ts +0 -2
- package/dist/src/research-subscriptions.d.ts.map +0 -1
- package/dist/src/research-subscriptions.js +0 -2
- package/dist/src/research-subscriptions.js.map +0 -1
- package/dist/src/services/auto-updater.d.ts +0 -15
- package/dist/src/services/auto-updater.d.ts.map +0 -1
- package/dist/src/services/auto-updater.js +0 -188
- package/dist/src/services/auto-updater.js.map +0 -1
- package/dist/src/tools/arxiv-download.d.ts +0 -24
- package/dist/src/tools/arxiv-download.d.ts.map +0 -1
- package/dist/src/tools/arxiv-download.js +0 -177
- package/dist/src/tools/arxiv-download.js.map +0 -1
- package/dist/src/tools/github-search-tool.d.ts +0 -25
- package/dist/src/tools/github-search-tool.d.ts.map +0 -1
- package/dist/src/tools/github-search-tool.js +0 -114
- package/dist/src/tools/github-search-tool.js.map +0 -1
- package/dist/src/tools/openreview-lookup.d.ts +0 -31
- package/dist/src/tools/openreview-lookup.d.ts.map +0 -1
- package/dist/src/tools/openreview-lookup.js +0 -414
- package/dist/src/tools/openreview-lookup.js.map +0 -1
- package/dist/src/tools/paper-browser.d.ts +0 -23
- package/dist/src/tools/paper-browser.d.ts.map +0 -1
- package/dist/src/tools/paper-browser.js +0 -121
- package/dist/src/tools/paper-browser.js.map +0 -1
- package/dist/src/tools/scientify-cron.d.ts +0 -63
- package/dist/src/tools/scientify-cron.d.ts.map +0 -1
- package/dist/src/tools/scientify-cron.js +0 -265
- package/dist/src/tools/scientify-cron.js.map +0 -1
- package/dist/src/tools/scientify-literature-state.d.ts +0 -303
- package/dist/src/tools/scientify-literature-state.d.ts.map +0 -1
- package/dist/src/tools/scientify-literature-state.js +0 -957
- package/dist/src/tools/scientify-literature-state.js.map +0 -1
- package/dist/src/tools/unpaywall-download.d.ts +0 -21
- package/dist/src/tools/unpaywall-download.d.ts.map +0 -1
- package/dist/src/tools/unpaywall-download.js +0 -169
- package/dist/src/tools/unpaywall-download.js.map +0 -1
- package/dist/src/tools/workspace.d.ts +0 -32
- package/dist/src/tools/workspace.d.ts.map +0 -1
- package/dist/src/tools/workspace.js +0 -69
- package/dist/src/tools/workspace.js.map +0 -1
- package/skills/metabolism-init/SKILL.md +0 -80
- package/skills/research-subscription/SKILL.md +0 -119
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Style Banlist
|
|
2
|
+
|
|
3
|
+
This is not a universal forbidden-word list.
|
|
4
|
+
|
|
5
|
+
Use it as a risk map: the higher the claim pressure, the more these words need explicit support nearby.
|
|
6
|
+
|
|
7
|
+
## High-Risk Praise Words
|
|
8
|
+
|
|
9
|
+
These often create fake confidence when they are not tied to evidence in the same sentence or the next sentence:
|
|
10
|
+
|
|
11
|
+
- `significant`
|
|
12
|
+
- `substantial`
|
|
13
|
+
- `strong`
|
|
14
|
+
- `robust`
|
|
15
|
+
- `effective`
|
|
16
|
+
- `promising`
|
|
17
|
+
- `remarkable`
|
|
18
|
+
- `novel`
|
|
19
|
+
- `comprehensive`
|
|
20
|
+
- `state-of-the-art`
|
|
21
|
+
|
|
22
|
+
## High-Risk Hedge Words
|
|
23
|
+
|
|
24
|
+
These are useful for interpretation, but risky when they blur what is actually observed:
|
|
25
|
+
|
|
26
|
+
- `may`
|
|
27
|
+
- `can`
|
|
28
|
+
- `could`
|
|
29
|
+
- `potentially`
|
|
30
|
+
- `suggests`
|
|
31
|
+
- `appears to`
|
|
32
|
+
- `likely`
|
|
33
|
+
- `in general`
|
|
34
|
+
- `overall`
|
|
35
|
+
|
|
36
|
+
## Vague Result Phrases
|
|
37
|
+
|
|
38
|
+
These usually need to be rewritten into metric- or evidence-based language:
|
|
39
|
+
|
|
40
|
+
- `shows advantages`
|
|
41
|
+
- `performs well`
|
|
42
|
+
- `works effectively`
|
|
43
|
+
- `achieves competitive results`
|
|
44
|
+
- `delivers better performance`
|
|
45
|
+
- `improves overall quality`
|
|
46
|
+
- `demonstrates robustness`
|
|
47
|
+
- `has broad applicability`
|
|
48
|
+
|
|
49
|
+
## Rewrite Moves
|
|
50
|
+
|
|
51
|
+
When a sentence sounds too soft, too grand, or too vague, prefer one of these moves:
|
|
52
|
+
|
|
53
|
+
- add a metric
|
|
54
|
+
- add a baseline
|
|
55
|
+
- add a protocol or guardrail
|
|
56
|
+
- add a source anchor such as `claim_id`, figure, or table
|
|
57
|
+
- add a scope or evidence boundary
|
|
58
|
+
- split observation from interpretation
|
|
59
|
+
|
|
60
|
+
Examples:
|
|
61
|
+
|
|
62
|
+
- `strong improvement` -> `17.53% mean TTFT gain vs INT4-FIFO`
|
|
63
|
+
- `robust behavior` -> `maintains quality_penalty_mean <= 0.02 under the stated protocol`
|
|
64
|
+
- `promising result` -> `improves bytes/request under simulator evaluation, but lacks runtime validation`
|
|
65
|
+
|
|
66
|
+
## Usage Rules
|
|
67
|
+
|
|
68
|
+
- If one of the high-risk praise words appears in a result sentence, the same sentence or the next sentence should also contain a metric, baseline, or explicit evidence anchor.
|
|
69
|
+
- Hedge words are acceptable when they clearly mark interpretation, uncertainty, or future-facing reasoning.
|
|
70
|
+
- Do not use hedge words to hide whether a result is actually observed or merely inferred.
|
|
71
|
+
- If a sentence can be made more precise by adding a number, comparison target, or boundary, do that instead of adding emphasis.
|
|
72
|
+
|
|
73
|
+
## Surface-Aware Notes
|
|
74
|
+
|
|
75
|
+
Different writing surfaces tolerate different kinds of language:
|
|
76
|
+
|
|
77
|
+
- high-pressure surfaces such as abstracts, headline result sentences, captions, and opening-page summaries need the strictest wording
|
|
78
|
+
- medium-pressure surfaces such as result discussion and comparison paragraphs can carry some interpretation, but still need explicit evidence anchors
|
|
79
|
+
- lower-pressure surfaces such as discussion, scope notes, and future-work paragraphs can use more hedging, as long as they do not rewrite observed results into broader claims
|
|
80
|
+
|
|
81
|
+
The key question is not “what section am I in?” but “how much claim pressure does this sentence carry?”
|
|
@@ -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
|
-
|
|
19
|
+
Outputs go to `review/`.
|
|
20
20
|
|
|
21
21
|
## Prerequisites
|
|
22
22
|
|
|
23
23
|
Before starting, ensure you have:
|
|
24
|
-
1. Papers collected in
|
|
25
|
-
2. Ideally,
|
|
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
|
|
30
|
-
ls
|
|
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
|
|
47
|
+
Create `review/reading_plan.md`:
|
|
48
48
|
|
|
49
49
|
```markdown
|
|
50
50
|
# Reading Plan
|
|
@@ -60,9 +60,11 @@ Create `$W/review/reading_plan.md`:
|
|
|
60
60
|
- [ ] ...
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
+
Every entry must keep `paper_id` and the selection reason. Do not write a reading plan that only lists titles.
|
|
64
|
+
|
|
63
65
|
### 1.2 Reading Notes Template
|
|
64
66
|
|
|
65
|
-
For each paper, create
|
|
67
|
+
For each paper, create `review/notes/{paper_id}.md` using template in `references/note-template.md`.
|
|
66
68
|
|
|
67
69
|
---
|
|
68
70
|
|
|
@@ -70,20 +72,20 @@ For each paper, create `$W/review/notes/{paper_id}.md` using template in `refere
|
|
|
70
72
|
|
|
71
73
|
### 2.1 Build Comparison Table
|
|
72
74
|
|
|
73
|
-
Create
|
|
75
|
+
Create `review/comparison.md`:
|
|
74
76
|
|
|
75
77
|
```markdown
|
|
76
78
|
# Method Comparison
|
|
77
79
|
|
|
78
|
-
| Paper | Year | Category | Key Innovation | Dataset | Metric | Result |
|
|
79
|
-
|
|
80
|
-
| [A] | 2023 | Data-driven | ... | ... | RMSE | 0.05 |
|
|
81
|
-
| [B] | 2022 | Hybrid | ... | ... | RMSE | 0.08 |
|
|
80
|
+
| Paper | Year | Category | Key Innovation | Dataset | Metric | Result | Evidence / Source |
|
|
81
|
+
|-------|------|----------|----------------|---------|--------|--------|-------------------|
|
|
82
|
+
| [A] | 2023 | Data-driven | ... | ... | RMSE | 0.05 | `review/notes/{paper_id}.md` |
|
|
83
|
+
| [B] | 2022 | Hybrid | ... | ... | RMSE | 0.08 | `review/notes/{paper_id}.md` |
|
|
82
84
|
```
|
|
83
85
|
|
|
84
86
|
### 2.2 Timeline Analysis
|
|
85
87
|
|
|
86
|
-
Create
|
|
88
|
+
Create `review/timeline.md`:
|
|
87
89
|
|
|
88
90
|
```markdown
|
|
89
91
|
# Research Timeline
|
|
@@ -106,7 +108,7 @@ Create `$W/review/timeline.md`:
|
|
|
106
108
|
|
|
107
109
|
### 2.3 Taxonomy Design
|
|
108
110
|
|
|
109
|
-
Create
|
|
111
|
+
Create `review/taxonomy.md`:
|
|
110
112
|
|
|
111
113
|
```markdown
|
|
112
114
|
# Taxonomy of Approaches
|
|
@@ -140,10 +142,12 @@ Create `$W/review/taxonomy.md`:
|
|
|
140
142
|
|
|
141
143
|
### 3.1 Survey Paper Template
|
|
142
144
|
|
|
143
|
-
Create
|
|
145
|
+
Create `review/draft.md` using template in `references/survey-template.md`.
|
|
144
146
|
|
|
145
147
|
Key sections: Abstract → Introduction → Background → Taxonomy → Comparison → Datasets → Future Directions → Conclusion
|
|
146
148
|
|
|
149
|
+
At the end of each major section, add one short summary sentence that clearly reflects the evidence already written in `review/notes/` or `review/comparison.md`.
|
|
150
|
+
|
|
147
151
|
### 3.2 Thesis Literature Review Template
|
|
148
152
|
|
|
149
153
|
For a thesis chapter:
|
|
@@ -192,13 +196,15 @@ For a thesis chapter:
|
|
|
192
196
|
3. **时态混乱** - 描述方法用现在时,描述实验结果用过去时
|
|
193
197
|
4. **过度引用** - 不是每句话都需要引用
|
|
194
198
|
5. **遗漏重要工作** - 确保覆盖领域的奠基性工作
|
|
199
|
+
6. **Body text detached from notes** - Do not write conclusions into the draft unless they already appear in notes / comparison
|
|
200
|
+
7. **Trend written as certainty** - When evidence is not stable, frame it as an observation or discussion rather than a firm conclusion
|
|
195
201
|
|
|
196
202
|
---
|
|
197
203
|
|
|
198
204
|
## Output Files
|
|
199
205
|
|
|
200
206
|
```
|
|
201
|
-
|
|
207
|
+
review/
|
|
202
208
|
├── reading_plan.md # 阅读计划
|
|
203
209
|
├── notes/ # 阅读笔记
|
|
204
210
|
│ ├── {paper_id}.md
|
|
@@ -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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"}
|