scientify 1.6.2 → 1.7.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAqBlD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,QAoFtD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAsBlD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,QA2FtD"}
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ import { createOpenAlexSearchTool } from "./src/tools/openalex-search.js";
8
8
  import { createUnpaywallDownloadTool } from "./src/tools/unpaywall-download.js";
9
9
  import { createAutoUpdaterService } from "./src/services/auto-updater.js";
10
10
  import { createSkillInjectionHook } from "./src/hooks/inject-skill.js";
11
+ import { createResearchModeHook } from "./src/hooks/research-mode.js";
11
12
  // Default: check every hour
12
13
  const UPDATE_CHECK_INTERVAL_MS = 60 * 60 * 1000;
13
14
  export default function register(api) {
@@ -81,6 +82,12 @@ export default function register(api) {
81
82
  // api.source = entry file path (e.g. dist/index.js); findPluginRoot() walks
82
83
  // up to locate openclaw.plugin.json, which is always at the plugin root.
83
84
  api.on("before_tool_call", createSkillInjectionHook(path.dirname(api.source)));
84
- api.logger.info("Scientify plugin loaded successfully");
85
+ // Inject research mode prompt into all conversations.
86
+ // This reminds the agent to use research skills for academic tasks.
87
+ // The agent decides whether to use skills based on task type.
88
+ api.on("before_prompt_build", createResearchModeHook(), {
89
+ priority: 100, // High priority to inject early
90
+ });
91
+ api.logger.info("Scientify plugin loaded (research mode: always active)");
85
92
  }
86
93
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,4BAA4B;AAC5B,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAsB;IACrD,iBAAiB;IACjB,GAAG,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC1C,GAAG,CAAC,YAAY,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC7C,GAAG,CAAC,YAAY,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAEhD,iDAAiD;IACjD,MAAM,YAAY,GAAG,GAAG,CAAC,YAAoD,CAAC;IAC9E,MAAM,iBAAiB,GAAG,YAAY,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC,qBAAqB;IAEnF,IAAI,iBAAiB,EAAE,CAAC;QACtB,GAAG,CAAC,eAAe,CACjB,wBAAwB,CAAC;YACvB,WAAW,EAAE,WAAW;YACxB,eAAe,EAAE,wBAAwB;YACzC,MAAM,EAAE;gBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;aACxC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,0CAA0C;QACvD,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,wCAAwC;QACrD,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,wCAAwC;QACrD,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,mBAAmB;KAC7B,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,oDAAoD;QACjE,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,IAAI,EAAE,yCAAyC;QAC5D,OAAO,EAAE,mBAAmB;KAC7B,CAAC,CAAC;IAEH,qDAAqD;IACrD,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,yEAAyE;IACzE,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
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
+ * Creates the research mode hook that injects enhancement prompt
19
+ * into all conversations when scientify is active.
20
+ *
21
+ * This ensures agents are always aware of available research skills
22
+ * and know how to use them properly.
23
+ */
24
+ export declare function createResearchModeHook(): (_event: HookEvent, _context: HookContext) => HookResult;
25
+ export {};
26
+ //# sourceMappingURL=research-mode.d.ts.map
@@ -0,0 +1 @@
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;AA2HF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,KAC5B,QAAQ,SAAS,EAAE,UAAU,WAAW,KAAG,UAAU,CAO9D"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Research Mode Enhancement Prompt
3
+ *
4
+ * Injected into every conversation when scientify is active.
5
+ * Reminds the agent to use research skills for academic tasks.
6
+ */
7
+ const RESEARCH_MODE_PROMPT = `
8
+ # 🔬 Scientify Research Assistant
9
+
10
+ You have access to specialized research workflows (skills) for academic tasks.
11
+
12
+ ## Available Research Skills (For You to Use)
13
+
14
+ When the user requests research work, use these skills:
15
+
16
+ ### literature-survey
17
+ Search & download academic papers from arXiv, OpenAlex, and GitHub repositories.
18
+
19
+ **When to use**: User asks for literature review, paper search, related work survey.
20
+
21
+ **How to use**:
22
+ 1. Find skill path in <available_skills>
23
+ 2. Read the SKILL.md: read({ file_path: "<path-from-available_skills>" })
24
+ 3. Follow every step exactly
25
+
26
+ ### research-pipeline
27
+ Complete end-to-end research pipeline: literature survey → deep analysis → planning → implementation → review → experiments.
28
+
29
+ **When to use**: User wants full research workflow from papers to final results.
30
+
31
+ **How to use**:
32
+ 1. Find skill path in <available_skills>
33
+ 2. Read the SKILL.md: read({ file_path: "<path-from-available_skills>" })
34
+ 3. Follow the orchestration steps (this skill will spawn sub-agents for each phase)
35
+
36
+ **Important**: research-pipeline uses sessions_spawn to create specialized sub-agents. You don't need to manually run research-survey, research-plan, etc. - the pipeline handles that internally.
37
+
38
+ ## When NOT to Use Skills
39
+
40
+ Handle these normally without skills:
41
+ - General programming questions
42
+ - File operations, debugging
43
+ - Casual conversation
44
+ - Non-academic queries
45
+
46
+ ## How to Use Skills (IMPORTANT)
47
+
48
+ When you identify a research task:
49
+
50
+ 1. **Identify** the matching skill from the list above
51
+ 2. **Locate** the skill file path from \`<available_skills>\` in your system prompt
52
+ 3. **Read** the skill file completely: \`read({ file_path: "<skill-path-from-available_skills>" })\`
53
+ 4. **Execute** every step in the SKILL.md exactly as written
54
+
55
+ **Do NOT**:
56
+ - ❌ Skip reading the skill file
57
+ - ❌ Improvise your own workflow
58
+ - ❌ Assume you remember the steps from previous sessions
59
+
60
+ ## Project Management (You Handle This)
61
+
62
+ For research tasks, you automatically manage project structure:
63
+
64
+ 1. **Check** if project exists: \`read({ file_path: "$W/projects/<topic>/task.json" })\`
65
+ 2. **Create** if needed: Use \`write\` to create directory structure and task.json
66
+ 3. **Load** context: Read existing task.json to understand current status
67
+ 4. **Continue** work: Resume from the last completed phase
68
+
69
+ User doesn't need to run commands. You create and manage projects automatically.
70
+
71
+ ### Example Project Structure
72
+
73
+ \`\`\`
74
+ $W/projects/<topic>/
75
+ ├── task.json # Project metadata & status
76
+ ├── papers/ # Downloaded papers
77
+ │ └── _meta/ # Paper metadata
78
+ ├── repos/ # Reference code repositories
79
+ ├── survey_res.md # Literature survey results
80
+ ├── plan_res.md # Implementation plan
81
+ ├── project/ # Your implementation
82
+ └── experiment_res.md # Experiment results
83
+ \`\`\`
84
+
85
+ ## Example Workflows
86
+
87
+ ### Example 1: Literature Survey Only
88
+
89
+ \`\`\`
90
+ User: "Survey recent papers on Vision Transformers"
91
+
92
+ You:
93
+ 1. Identify: Literature survey task
94
+ 2. Skill: literature-survey
95
+ 3. Read: literature-survey/SKILL.md from <available_skills>
96
+ 4. Project: Create $W/projects/vision-transformer-survey/
97
+ 5. Execute: Follow search → download → categorize steps
98
+ 6. Output: survey_res.md with categorized papers
99
+ \`\`\`
100
+
101
+ ### Example 2: Complete Research Pipeline
102
+
103
+ \`\`\`
104
+ User: "I want to implement Vision Transformer on MNIST, from literature survey to experiments"
105
+
106
+ You:
107
+ 1. Identify: Full research workflow
108
+ 2. Skill: research-pipeline
109
+ 3. Read: research-pipeline/SKILL.md from <available_skills>
110
+ 4. Project: Create $W/projects/vit-mnist/
111
+ 5. Execute: Follow orchestration steps
112
+ - Pipeline spawns sub-agents for survey, analysis, planning, coding, review, experiments
113
+ - You don't manually read research-survey, research-implement, etc.
114
+ 6. Output: Complete research project with all deliverables
115
+ \`\`\`
116
+
117
+ ---
118
+
119
+ **Remember**: Skills contain precise workflows tested in production. Read them before acting, don't guess.
120
+ `;
121
+ /**
122
+ * Creates the research mode hook that injects enhancement prompt
123
+ * into all conversations when scientify is active.
124
+ *
125
+ * This ensures agents are always aware of available research skills
126
+ * and know how to use them properly.
127
+ */
128
+ export function createResearchModeHook() {
129
+ return (_event, _context) => {
130
+ // Unconditionally inject research mode prompt
131
+ // The agent will decide whether to use skills based on task type
132
+ return {
133
+ prependContext: RESEARCH_MODE_PROMPT,
134
+ };
135
+ };
136
+ }
137
+ //# sourceMappingURL=research-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-mode.js","sourceRoot":"","sources":["../../../src/hooks/research-mode.ts"],"names":[],"mappings":"AAmBA;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiH5B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,MAAiB,EAAE,QAAqB,EAAc,EAAE;QAC9D,8CAA8C;QAC9C,iEAAiE;QACjE,OAAO;YACL,cAAc,EAAE,oBAAoB;SACrC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scientify",
3
- "version": "1.6.2",
3
+ "version": "1.7.1",
4
4
  "description": "Scientify - AI-powered research workflow automation for OpenClaw. Includes idea generation, literature review, research pipeline skills, and arxiv tool.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -29,6 +29,16 @@
29
29
  "bugs": {
30
30
  "url": "https://github.com/tsingyuai/scientify/issues"
31
31
  },
32
+ "scripts": {
33
+ "build": "tsc",
34
+ "clean": "rm -rf dist",
35
+ "dev": "tsc --watch",
36
+ "dev:link": "npm run build && rm -rf ~/.openclaw/extensions/scientify && ln -sfn \"$(pwd)\" ~/.openclaw/extensions/scientify",
37
+ "dev:unlink": "rm -f ~/.openclaw/extensions/scientify",
38
+ "dev:reload": "nodemon --watch src --watch skills --ext ts,md,json --exec \"npm run build && pkill -USR1 -f 'openclaw.mjs gateway' || true\" --delay 500ms",
39
+ "prepublishOnly": "npm run clean && npm run build",
40
+ "release": "npm version patch && git push && git push --tags"
41
+ },
32
42
  "devDependencies": {
33
43
  "@semantic-release/changelog": "^6.0.3",
34
44
  "@semantic-release/commit-analyzer": "^13.0.1",
@@ -51,14 +61,5 @@
51
61
  "extensions": [
52
62
  "./dist/index.js"
53
63
  ]
54
- },
55
- "scripts": {
56
- "build": "tsc",
57
- "clean": "rm -rf dist",
58
- "dev": "tsc --watch",
59
- "dev:link": "npm run build && rm -rf ~/.openclaw/extensions/scientify && ln -sfn \"$(pwd)\" ~/.openclaw/extensions/scientify",
60
- "dev:unlink": "rm -f ~/.openclaw/extensions/scientify",
61
- "dev:reload": "nodemon --watch src --watch skills --ext ts,md,json --exec \"npm run build && pkill -USR1 -f 'openclaw.mjs gateway' || true\" --delay 500ms",
62
- "release": "npm version patch && git push && git push --tags"
63
64
  }
64
- }
65
+ }