scientify 2.0.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 (140) hide show
  1. package/README.en.md +21 -0
  2. package/README.md +21 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -76
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/cli/research.d.ts.map +1 -1
  7. package/dist/src/cli/research.js +6 -23
  8. package/dist/src/cli/research.js.map +1 -1
  9. package/dist/src/commands/metabolism-status.d.ts.map +1 -1
  10. package/dist/src/commands/metabolism-status.js +5 -25
  11. package/dist/src/commands/metabolism-status.js.map +1 -1
  12. package/dist/src/commands.d.ts +8 -8
  13. package/dist/src/commands.d.ts.map +1 -1
  14. package/dist/src/commands.js +91 -262
  15. package/dist/src/commands.js.map +1 -1
  16. package/dist/src/templates/bootstrap.d.ts.map +1 -1
  17. package/dist/src/templates/bootstrap.js +45 -59
  18. package/dist/src/templates/bootstrap.js.map +1 -1
  19. package/dist/src/types.d.ts +2 -10
  20. package/dist/src/types.d.ts.map +1 -1
  21. package/openclaw.plugin.json +3 -16
  22. package/package.json +2 -3
  23. package/skills/idea-generation/SKILL.md +20 -44
  24. package/skills/idea-generation/references/code-mapping.md +3 -3
  25. package/skills/idea-generation/references/idea-template.md +1 -1
  26. package/skills/idea-generation/references/reading-long-papers.md +3 -3
  27. package/skills/metabolism/SKILL.md +80 -36
  28. package/skills/paper-download/SKILL.md +61 -0
  29. package/skills/research-collect/SKILL.md +41 -111
  30. package/skills/research-experiment/SKILL.md +11 -12
  31. package/skills/research-implement/SKILL.md +10 -11
  32. package/skills/research-pipeline/SKILL.md +23 -31
  33. package/skills/research-plan/SKILL.md +7 -11
  34. package/skills/research-review/SKILL.md +21 -22
  35. package/skills/research-survey/SKILL.md +11 -25
  36. package/skills/write-review-paper/SKILL.md +12 -12
  37. package/skills/write-review-paper/references/note-template.md +1 -1
  38. package/skills/write-review-paper/references/survey-template.md +1 -1
  39. package/dist/src/hooks/research-mode.d.ts +0 -22
  40. package/dist/src/hooks/research-mode.d.ts.map +0 -1
  41. package/dist/src/hooks/research-mode.js +0 -35
  42. package/dist/src/hooks/research-mode.js.map +0 -1
  43. package/dist/src/hooks/scientify-cron-autofill.d.ts +0 -15
  44. package/dist/src/hooks/scientify-cron-autofill.d.ts.map +0 -1
  45. package/dist/src/hooks/scientify-cron-autofill.js +0 -156
  46. package/dist/src/hooks/scientify-cron-autofill.js.map +0 -1
  47. package/dist/src/hooks/scientify-signature.d.ts +0 -21
  48. package/dist/src/hooks/scientify-signature.d.ts.map +0 -1
  49. package/dist/src/hooks/scientify-signature.js +0 -150
  50. package/dist/src/hooks/scientify-signature.js.map +0 -1
  51. package/dist/src/knowledge-state/project.d.ts +0 -13
  52. package/dist/src/knowledge-state/project.d.ts.map +0 -1
  53. package/dist/src/knowledge-state/project.js +0 -88
  54. package/dist/src/knowledge-state/project.js.map +0 -1
  55. package/dist/src/knowledge-state/render.d.ts +0 -63
  56. package/dist/src/knowledge-state/render.d.ts.map +0 -1
  57. package/dist/src/knowledge-state/render.js +0 -368
  58. package/dist/src/knowledge-state/render.js.map +0 -1
  59. package/dist/src/knowledge-state/store.d.ts +0 -19
  60. package/dist/src/knowledge-state/store.d.ts.map +0 -1
  61. package/dist/src/knowledge-state/store.js +0 -978
  62. package/dist/src/knowledge-state/store.js.map +0 -1
  63. package/dist/src/knowledge-state/types.d.ts +0 -182
  64. package/dist/src/knowledge-state/types.d.ts.map +0 -1
  65. package/dist/src/knowledge-state/types.js +0 -2
  66. package/dist/src/knowledge-state/types.js.map +0 -1
  67. package/dist/src/literature/subscription-state.d.ts +0 -112
  68. package/dist/src/literature/subscription-state.d.ts.map +0 -1
  69. package/dist/src/literature/subscription-state.js +0 -696
  70. package/dist/src/literature/subscription-state.js.map +0 -1
  71. package/dist/src/research-subscriptions/constants.d.ts +0 -16
  72. package/dist/src/research-subscriptions/constants.d.ts.map +0 -1
  73. package/dist/src/research-subscriptions/constants.js +0 -59
  74. package/dist/src/research-subscriptions/constants.js.map +0 -1
  75. package/dist/src/research-subscriptions/cron-client.d.ts +0 -8
  76. package/dist/src/research-subscriptions/cron-client.d.ts.map +0 -1
  77. package/dist/src/research-subscriptions/cron-client.js +0 -81
  78. package/dist/src/research-subscriptions/cron-client.js.map +0 -1
  79. package/dist/src/research-subscriptions/delivery.d.ts +0 -10
  80. package/dist/src/research-subscriptions/delivery.d.ts.map +0 -1
  81. package/dist/src/research-subscriptions/delivery.js +0 -82
  82. package/dist/src/research-subscriptions/delivery.js.map +0 -1
  83. package/dist/src/research-subscriptions/handlers.d.ts +0 -6
  84. package/dist/src/research-subscriptions/handlers.d.ts.map +0 -1
  85. package/dist/src/research-subscriptions/handlers.js +0 -204
  86. package/dist/src/research-subscriptions/handlers.js.map +0 -1
  87. package/dist/src/research-subscriptions/parse.d.ts +0 -11
  88. package/dist/src/research-subscriptions/parse.d.ts.map +0 -1
  89. package/dist/src/research-subscriptions/parse.js +0 -492
  90. package/dist/src/research-subscriptions/parse.js.map +0 -1
  91. package/dist/src/research-subscriptions/prompt.d.ts +0 -5
  92. package/dist/src/research-subscriptions/prompt.d.ts.map +0 -1
  93. package/dist/src/research-subscriptions/prompt.js +0 -347
  94. package/dist/src/research-subscriptions/prompt.js.map +0 -1
  95. package/dist/src/research-subscriptions/types.d.ts +0 -66
  96. package/dist/src/research-subscriptions/types.d.ts.map +0 -1
  97. package/dist/src/research-subscriptions/types.js +0 -2
  98. package/dist/src/research-subscriptions/types.js.map +0 -1
  99. package/dist/src/research-subscriptions.d.ts +0 -2
  100. package/dist/src/research-subscriptions.d.ts.map +0 -1
  101. package/dist/src/research-subscriptions.js +0 -2
  102. package/dist/src/research-subscriptions.js.map +0 -1
  103. package/dist/src/services/auto-updater.d.ts +0 -15
  104. package/dist/src/services/auto-updater.d.ts.map +0 -1
  105. package/dist/src/services/auto-updater.js +0 -188
  106. package/dist/src/services/auto-updater.js.map +0 -1
  107. package/dist/src/tools/arxiv-download.d.ts +0 -24
  108. package/dist/src/tools/arxiv-download.d.ts.map +0 -1
  109. package/dist/src/tools/arxiv-download.js +0 -177
  110. package/dist/src/tools/arxiv-download.js.map +0 -1
  111. package/dist/src/tools/github-search-tool.d.ts +0 -25
  112. package/dist/src/tools/github-search-tool.d.ts.map +0 -1
  113. package/dist/src/tools/github-search-tool.js +0 -114
  114. package/dist/src/tools/github-search-tool.js.map +0 -1
  115. package/dist/src/tools/openreview-lookup.d.ts +0 -31
  116. package/dist/src/tools/openreview-lookup.d.ts.map +0 -1
  117. package/dist/src/tools/openreview-lookup.js +0 -414
  118. package/dist/src/tools/openreview-lookup.js.map +0 -1
  119. package/dist/src/tools/paper-browser.d.ts +0 -23
  120. package/dist/src/tools/paper-browser.d.ts.map +0 -1
  121. package/dist/src/tools/paper-browser.js +0 -121
  122. package/dist/src/tools/paper-browser.js.map +0 -1
  123. package/dist/src/tools/scientify-cron.d.ts +0 -63
  124. package/dist/src/tools/scientify-cron.d.ts.map +0 -1
  125. package/dist/src/tools/scientify-cron.js +0 -265
  126. package/dist/src/tools/scientify-cron.js.map +0 -1
  127. package/dist/src/tools/scientify-literature-state.d.ts +0 -303
  128. package/dist/src/tools/scientify-literature-state.d.ts.map +0 -1
  129. package/dist/src/tools/scientify-literature-state.js +0 -957
  130. package/dist/src/tools/scientify-literature-state.js.map +0 -1
  131. package/dist/src/tools/unpaywall-download.d.ts +0 -21
  132. package/dist/src/tools/unpaywall-download.d.ts.map +0 -1
  133. package/dist/src/tools/unpaywall-download.js +0 -169
  134. package/dist/src/tools/unpaywall-download.js.map +0 -1
  135. package/dist/src/tools/workspace.d.ts +0 -32
  136. package/dist/src/tools/workspace.d.ts.map +0 -1
  137. package/dist/src/tools/workspace.js +0 -69
  138. package/dist/src/tools/workspace.js.map +0 -1
  139. package/skills/metabolism-init/SKILL.md +0 -80
  140. package/skills/research-subscription/SKILL.md +0 -119
@@ -1,227 +1,111 @@
1
1
  import * as fs from "node:fs";
2
2
  import * as path from "node:path";
3
3
  import * as os from "node:os";
4
- const WORKSPACE_ROOT = path.join(os.homedir(), ".openclaw", "workspace", "projects");
5
- function getActiveProject() {
6
- const activePath = path.join(WORKSPACE_ROOT, ".active");
7
- try {
8
- return fs.readFileSync(activePath, "utf-8").trim();
9
- }
10
- catch {
11
- return null;
12
- }
13
- }
14
- function getProjectMeta(projectId) {
15
- const metaPath = path.join(WORKSPACE_ROOT, projectId, "project.json");
16
- try {
17
- return JSON.parse(fs.readFileSync(metaPath, "utf-8"));
18
- }
19
- catch {
20
- return null;
21
- }
22
- }
23
- function listProjects() {
4
+ const OPENCLAW_HOME = path.join(os.homedir(), ".openclaw");
5
+ /**
6
+ * List all research agents from openclaw.json.
7
+ */
8
+ function listResearchAgents() {
9
+ const configPath = path.join(OPENCLAW_HOME, "openclaw.json");
24
10
  try {
25
- return fs
26
- .readdirSync(WORKSPACE_ROOT, { withFileTypes: true })
27
- .filter((d) => d.isDirectory() && !d.name.startsWith("."))
28
- .map((d) => d.name);
11
+ const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
12
+ const agents = config.agents?.list ?? [];
13
+ return agents
14
+ .filter((a) => a.id.startsWith("research-"))
15
+ .map((a) => ({
16
+ id: a.id,
17
+ workspace: (a.workspace ?? `~/.openclaw/workspace-${a.id}`).replace("~", os.homedir()),
18
+ }));
29
19
  }
30
20
  catch {
31
21
  return [];
32
22
  }
33
23
  }
34
- function formatSize(bytes) {
35
- if (bytes < 1024)
36
- return `${bytes}B`;
37
- if (bytes < 1024 * 1024)
38
- return `${(bytes / 1024).toFixed(1)}KB`;
39
- return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
40
- }
41
- function getDirSize(dirPath) {
42
- let size = 0;
43
- try {
44
- const entries = fs.readdirSync(dirPath, { withFileTypes: true });
45
- for (const entry of entries) {
46
- const fullPath = path.join(dirPath, entry.name);
47
- if (entry.isDirectory()) {
48
- size += getDirSize(fullPath);
49
- }
50
- else {
51
- size += fs.statSync(fullPath).size;
52
- }
53
- }
54
- }
55
- catch {
56
- // ignore
57
- }
58
- return size;
59
- }
60
- function countFiles(dirPath, pattern) {
61
- let count = 0;
62
- try {
63
- const entries = fs.readdirSync(dirPath, { withFileTypes: true });
64
- for (const entry of entries) {
65
- const fullPath = path.join(dirPath, entry.name);
66
- if (entry.isDirectory()) {
67
- count += countFiles(fullPath, pattern);
68
- }
69
- else if (!pattern || pattern.test(entry.name)) {
70
- count++;
71
- }
72
- }
73
- }
74
- catch {
75
- // ignore
76
- }
77
- return count;
78
- }
79
- function getKnowledgeStateSummary(projectId) {
80
- const file = path.join(WORKSPACE_ROOT, projectId, "knowledge_state", "state.json");
81
- if (!fs.existsSync(file))
82
- return null;
24
+ function countFiles(dirPath, filter) {
83
25
  try {
84
- const raw = fs.readFileSync(file, "utf-8");
85
- const parsed = JSON.parse(raw);
86
- const streams = parsed.streams ?? {};
87
- const streamEntries = Object.values(streams);
88
- let totalRuns = 0;
89
- let totalHypotheses = 0;
90
- let totalPaperNotes = 0;
91
- let recentFullTextReadCount = 0;
92
- let recentNotFullTextReadCount = 0;
93
- let lastRunAtMs = 0;
94
- let lastStatus;
95
- for (const stream of streamEntries) {
96
- totalRuns += Number.isFinite(stream.totalRuns) ? Math.max(0, Math.floor(stream.totalRuns)) : 0;
97
- totalHypotheses += Number.isFinite(stream.totalHypotheses)
98
- ? Math.max(0, Math.floor(stream.totalHypotheses))
99
- : 0;
100
- totalPaperNotes += Array.isArray(stream.paperNotes) ? stream.paperNotes.length : 0;
101
- recentFullTextReadCount += Number.isFinite(stream.recentFullTextReadCount)
102
- ? Math.max(0, Math.floor(stream.recentFullTextReadCount))
103
- : 0;
104
- recentNotFullTextReadCount += Number.isFinite(stream.recentNotFullTextReadCount)
105
- ? Math.max(0, Math.floor(stream.recentNotFullTextReadCount))
106
- : 0;
107
- const runAt = Number.isFinite(stream.lastRunAtMs) ? Math.floor(stream.lastRunAtMs) : 0;
108
- if (runAt >= lastRunAtMs) {
109
- lastRunAtMs = runAt;
110
- lastStatus = stream.lastStatus;
111
- }
112
- }
113
- return {
114
- totalRuns,
115
- totalHypotheses,
116
- totalPaperNotes,
117
- recentFullTextReadCount,
118
- recentNotFullTextReadCount,
119
- ...(lastRunAtMs > 0 ? { lastRunAtMs } : {}),
120
- ...(lastStatus ? { lastStatus } : {}),
121
- streamCount: streamEntries.length,
122
- };
26
+ const entries = fs.readdirSync(dirPath);
27
+ return filter ? entries.filter(filter).length : entries.length;
123
28
  }
124
29
  catch {
125
- return null;
30
+ return 0;
126
31
  }
127
32
  }
128
33
  /**
129
- * /research-status - Show workspace status
34
+ * /research-status - Show workspace status for all research agents
130
35
  */
131
36
  export function handleResearchStatus(_ctx) {
132
- const activeProject = getActiveProject();
133
- const projects = listProjects();
134
- let output = "📁 **Research Workspace Status**\n\n";
135
- output += `Root: \`${WORKSPACE_ROOT}\`\n`;
136
- output += `Active: ${activeProject ? `**${activeProject}**` : "(none)"}\n\n`;
137
- if (activeProject) {
138
- const knowledgeSummary = getKnowledgeStateSummary(activeProject);
139
- if (knowledgeSummary) {
140
- output += "**Knowledge State (active project):**\n";
141
- output += `- streams: ${knowledgeSummary.streamCount}\n`;
142
- output += `- total runs: ${knowledgeSummary.totalRuns}\n`;
143
- output += `- total hypotheses: ${knowledgeSummary.totalHypotheses}\n`;
144
- output += `- total paper notes: ${knowledgeSummary.totalPaperNotes}\n`;
145
- output += `- recent full-text-read papers: ${knowledgeSummary.recentFullTextReadCount}\n`;
146
- output += `- recent not-full-text-read papers: ${knowledgeSummary.recentNotFullTextReadCount}\n`;
147
- output += `- last status: ${knowledgeSummary.lastStatus ?? "(unknown)"}\n`;
148
- output += `- last run: ${knowledgeSummary.lastRunAtMs ? new Date(knowledgeSummary.lastRunAtMs).toISOString() : "(none)"}\n\n`;
149
- }
150
- }
151
- if (projects.length === 0) {
152
- output += "_No projects found. Use /idea-generation to create one._";
153
- }
154
- else {
155
- output += "**Projects:**\n";
156
- for (const proj of projects) {
157
- const isActive = proj === activeProject;
158
- const papersCount = countFiles(path.join(WORKSPACE_ROOT, proj, "papers"));
159
- const ideasCount = countFiles(path.join(WORKSPACE_ROOT, proj, "ideas"), /\.md$/);
160
- let reposCount = 0;
161
- try {
162
- const reposDir = path.join(WORKSPACE_ROOT, proj, "repos");
163
- if (fs.existsSync(reposDir)) {
164
- reposCount = fs
165
- .readdirSync(reposDir, { withFileTypes: true })
166
- .filter((d) => d.isDirectory()).length;
167
- }
168
- }
169
- catch {
170
- // ignore
171
- }
172
- const marker = isActive ? "● " : " ";
173
- output += `${marker}\`${proj}\` (papers: ${papersCount}, ideas: ${ideasCount}, repos: ${reposCount})\n`;
37
+ const agents = listResearchAgents();
38
+ if (agents.length === 0) {
39
+ return { text: "No research projects found. Use `openclaw research init <id>` to create one." };
40
+ }
41
+ let output = "**Research Projects**\n\n";
42
+ for (const agent of agents) {
43
+ const projectId = agent.id.replace("research-", "");
44
+ const w = agent.workspace;
45
+ const papersCount = countFiles(path.join(w, "papers"), (f) => f.endsWith(".tex") || f.endsWith(".pdf"));
46
+ const ideasCount = countFiles(path.join(w, "ideas"), (f) => f.endsWith(".md"));
47
+ const topicCount = countFiles(path.join(w, "knowledge"), (f) => f.startsWith("topic-"));
48
+ const hypothesisCount = countFiles(path.join(w, "ideas"), (f) => f.startsWith("hyp-"));
49
+ let currentDay = 0;
50
+ try {
51
+ const config = JSON.parse(fs.readFileSync(path.join(w, "config.json"), "utf-8"));
52
+ currentDay = config.currentDay ?? 0;
174
53
  }
54
+ catch { /* not yet bootstrapped */ }
55
+ output += `**${projectId}** (Day ${currentDay})\n`;
56
+ output += ` Workspace: \`${w}\`\n`;
57
+ output += ` Topics: ${topicCount} | Hypotheses: ${hypothesisCount} | Papers: ${papersCount} | Ideas: ${ideasCount}\n\n`;
175
58
  }
176
59
  return { text: output };
177
60
  }
178
61
  /**
179
- * /papers - List downloaded papers
62
+ * /papers - List downloaded papers in a research agent workspace
180
63
  */
181
64
  export function handlePapers(ctx) {
182
- const projectId = ctx.args?.trim() || getActiveProject();
183
- if (!projectId) {
184
- return { text: "No active project. Use: `/papers <project-id>`" };
65
+ const agent = resolveAgent(ctx.args?.trim());
66
+ if (!agent) {
67
+ return { text: "No research project found. Use `openclaw research init <id>` to create one." };
185
68
  }
186
- const papersDir = path.join(WORKSPACE_ROOT, projectId, "papers");
69
+ const papersDir = path.join(agent.workspace, "papers");
187
70
  if (!fs.existsSync(papersDir)) {
188
- return { text: `📄 **Papers in ${projectId}**\n\n_No papers directory found._` };
71
+ return { text: `No papers directory in project ${agent.id}.` };
189
72
  }
190
- let output = `📄 **Papers in ${projectId}**\n\n`;
191
- const entries = fs.readdirSync(papersDir, { withFileTypes: true });
73
+ const downloadsDir = path.join(papersDir, "_downloads");
74
+ let output = `**Papers — ${agent.id.replace("research-", "")}**\n\n`;
192
75
  let hasItems = false;
193
- for (const entry of entries) {
194
- if (entry.isDirectory()) {
195
- const paperDir = path.join(papersDir, entry.name);
196
- const texFiles = fs.readdirSync(paperDir).filter((f) => f.endsWith(".tex"));
197
- output += ` [tex] \`${entry.name}\` (${texFiles.length} files)\n`;
198
- hasItems = true;
199
- }
200
- else if (entry.name.endsWith(".pdf")) {
201
- const size = formatSize(fs.statSync(path.join(papersDir, entry.name)).size);
202
- output += ` [pdf] \`${entry.name.replace(".pdf", "")}\` (${size})\n`;
203
- hasItems = true;
76
+ try {
77
+ const entries = fs.readdirSync(downloadsDir, { withFileTypes: true });
78
+ for (const entry of entries) {
79
+ if (entry.isDirectory()) {
80
+ const texCount = fs.readdirSync(path.join(downloadsDir, entry.name)).filter((f) => f.endsWith(".tex")).length;
81
+ output += ` [tex] \`${entry.name}\` (${texCount} files)\n`;
82
+ hasItems = true;
83
+ }
84
+ else if (entry.name.endsWith(".pdf")) {
85
+ output += ` [pdf] \`${entry.name.replace(".pdf", "")}\`\n`;
86
+ hasItems = true;
87
+ }
204
88
  }
205
89
  }
206
- if (!hasItems) {
90
+ catch { /* empty */ }
91
+ if (!hasItems)
207
92
  output += "_No papers downloaded yet._";
208
- }
209
93
  return { text: output };
210
94
  }
211
95
  /**
212
- * /ideas - List generated ideas
96
+ * /ideas - List generated ideas in a research agent workspace
213
97
  */
214
98
  export function handleIdeas(ctx) {
215
- const projectId = ctx.args?.trim() || getActiveProject();
216
- if (!projectId) {
217
- return { text: "No active project. Use: `/ideas <project-id>`" };
99
+ const agent = resolveAgent(ctx.args?.trim());
100
+ if (!agent) {
101
+ return { text: "No research project found. Use `openclaw research init <id>` to create one." };
218
102
  }
219
- const ideasDir = path.join(WORKSPACE_ROOT, projectId, "ideas");
103
+ const ideasDir = path.join(agent.workspace, "ideas");
220
104
  if (!fs.existsSync(ideasDir)) {
221
- return { text: `💡 **Ideas in ${projectId}**\n\n_No ideas directory found._` };
105
+ return { text: `No ideas in project ${agent.id.replace("research-", "")}.` };
222
106
  }
223
- let output = `💡 **Ideas in ${projectId}**\n\n`;
224
107
  const files = fs.readdirSync(ideasDir).filter((f) => f.endsWith(".md"));
108
+ let output = `**Ideas — ${agent.id.replace("research-", "")}**\n\n`;
225
109
  if (files.length === 0) {
226
110
  output += "_No ideas generated yet._";
227
111
  }
@@ -231,97 +115,42 @@ export function handleIdeas(ctx) {
231
115
  const titleMatch = content.match(/^#\s+(.+)$/m);
232
116
  const title = titleMatch ? titleMatch[1] : file;
233
117
  const isSelected = file === "selected_idea.md";
234
- const marker = isSelected ? " " : " ";
235
- output += `${marker}\`${file.padEnd(22)}\` ${title}\n`;
118
+ const marker = isSelected ? "* " : " ";
119
+ output += `${marker}\`${file}\` ${title}\n`;
236
120
  }
237
121
  }
238
122
  return { text: output };
239
123
  }
240
124
  /**
241
- * /projects - List all research projects
125
+ * /projects - List all research projects (alias for /research-status)
242
126
  */
243
127
  export function handleProjects(_ctx) {
244
- const activeProject = getActiveProject();
245
- const projects = listProjects();
246
- let output = "📂 **Research Projects**\n\n";
247
- if (projects.length === 0) {
248
- output += "_No projects found._";
249
- }
250
- else {
251
- for (const proj of projects) {
252
- const isActive = proj === activeProject;
253
- const meta = getProjectMeta(proj);
254
- const marker = isActive ? "● " : " ";
255
- output += `${marker}**${proj}**\n`;
256
- if (meta?.name)
257
- output += ` name: ${meta.name}\n`;
258
- if (meta?.created)
259
- output += ` created: ${meta.created}\n`;
260
- if (meta?.topics?.length)
261
- output += ` topics: ${meta.topics.join(", ")}\n`;
262
- }
263
- }
264
- return { text: output };
128
+ return handleResearchStatus(_ctx);
265
129
  }
266
130
  /**
267
- * /project-switch <project-id> - Switch to a different project
131
+ * /project-switch - No longer needed (each agent has its own workspace)
268
132
  */
269
- export function handleProjectSwitch(ctx) {
270
- const projectId = ctx.args?.trim();
271
- if (!projectId) {
272
- return { text: "❌ Usage: `/project-switch <project-id>`" };
273
- }
274
- const projectPath = path.join(WORKSPACE_ROOT, projectId);
275
- if (!fs.existsSync(projectPath)) {
276
- return { text: `❌ Project '${projectId}' not found.` };
277
- }
278
- fs.mkdirSync(WORKSPACE_ROOT, { recursive: true });
279
- fs.writeFileSync(path.join(WORKSPACE_ROOT, ".active"), projectId);
280
- return { text: `✓ Switched to project '**${projectId}**'` };
133
+ export function handleProjectSwitch(_ctx) {
134
+ return { text: "Project switching is no longer needed. Each research agent has its own workspace. Use `openclaw research list` to see all projects." };
281
135
  }
282
136
  /**
283
- * /project-delete <project-id> - Delete a research project
137
+ * /project-delete - Delete via CLI instead
284
138
  */
285
- export function handleProjectDelete(ctx) {
286
- const args = ctx.args?.trim() || "";
287
- const hasForce = args.includes("--force");
288
- // Extract project ID by removing the --force flag
289
- const projectId = args.replace(/--force/g, "").trim();
290
- if (!projectId) {
291
- return { text: "❌ Usage: `/project-delete <project-id>`" };
292
- }
293
- const projectPath = path.join(WORKSPACE_ROOT, projectId);
294
- if (!fs.existsSync(projectPath)) {
295
- return { text: `❌ Project '${projectId}' not found.` };
296
- }
297
- const size = formatSize(getDirSize(projectPath));
298
- const papersCount = countFiles(path.join(projectPath, "papers"));
299
- const ideasCount = countFiles(path.join(projectPath, "ideas"), /\.md$/);
300
- // For safety, we'll return info and ask for confirmation
301
- // Note: Plugin commands don't support interactive confirmation,
302
- // so we provide a force flag via the args
303
- if (!hasForce) {
304
- return {
305
- text: `⚠️ **About to delete:**\n\n` +
306
- `- Project: \`${projectId}\`\n` +
307
- `- Papers: ${papersCount}\n` +
308
- `- Ideas: ${ideasCount}\n` +
309
- `- Size: ${size}\n\n` +
310
- `To confirm, use: \`/project-delete ${projectId} --force\``,
311
- };
312
- }
313
- // Clear active if this is the active project
314
- const activeProject = getActiveProject();
315
- if (activeProject === projectId) {
316
- try {
317
- fs.unlinkSync(path.join(WORKSPACE_ROOT, ".active"));
318
- }
319
- catch {
320
- // ignore
321
- }
139
+ export function handleProjectDelete(_ctx) {
140
+ return { text: "Use `openclaw research delete <id>` to delete a research project." };
141
+ }
142
+ /**
143
+ * Resolve which research agent to use.
144
+ * If an arg is given, match by project id; otherwise use the first (or only) agent.
145
+ */
146
+ function resolveAgent(arg) {
147
+ const agents = listResearchAgents();
148
+ if (agents.length === 0)
149
+ return null;
150
+ if (arg) {
151
+ const agentId = arg.startsWith("research-") ? arg : `research-${arg}`;
152
+ return agents.find((a) => a.id === agentId) ?? null;
322
153
  }
323
- // Delete the project directory
324
- fs.rmSync(projectPath, { recursive: true, force: true });
325
- return { text: `✓ Deleted project '**${projectId}**'` };
154
+ return agents[0] ?? null;
326
155
  }
327
156
  //# sourceMappingURL=commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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,CAqC7D;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAaxD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAiFvC"}
@@ -12,14 +12,14 @@ export function renderBootstrapMd(projectName) {
12
12
  1. 向用户问好,说明你是课题「${projectName}」的研究 agent,请用户描述研究方向
13
13
  2. 根据用户回答,提取:
14
14
  - 核心域关键词(3-5 个)
15
- - 建议的 arXiv 分类(如 cs.LG, cs.AI
16
- - 建议的监测带相邻领域分类
17
- 3. 向用户确认以上配置,接受调整
15
+ - 建议的 arXiv 分类(如 cs.LG, cs.AI),如果研究方向不属于 arXiv 覆盖范围则留空
16
+ - 建议的文献来源偏好(arXiv、OpenAlex、或两者兼用)
17
+ 3. 与用户讨论研究方向的边界和重点,确认以上配置,接受调整
18
18
  4. 确认后执行以下写入操作:
19
- - 更新 SOUL.md:填写研究方向、核心域、监测带各字段
20
- - 生成 metabolism/config.json(参考下方模板)
21
- 5. 询问用户是否立即执行 Day 0(构建初始知识状态 K(T0))
22
- - 如果是,使用 arxiv_search 按配置的关键词检索论文,执行 skills/metabolism/SKILL.md 中的四步循环
19
+ - 更新 SOUL.md:填写研究方向、核心域各字段
20
+ - 生成 config.json(参考下方模板)
21
+ 5. 询问用户是否立即执行 Day 0(构建初始知识状态)
22
+ - 如果是,执行 /metabolism 完成首轮文献检索和知识库构建(Day 0 模式)
23
23
  6. 删除本文件(BOOTSTRAP.md)
24
24
 
25
25
  ## config.json 模板
@@ -27,25 +27,17 @@ export function renderBootstrapMd(projectName) {
27
27
  \`\`\`json
28
28
  {
29
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}",
30
+ "keywords": ["关键词1", "关键词2"],
31
+ "arxivCategories": ["cs.LG"],
32
+ "sources": ["arxiv", "openalex"],
45
33
  "currentDay": 0,
34
+ "processed_ids": [],
46
35
  "createdAt": "${new Date().toISOString()}"
47
36
  }
48
37
  \`\`\`
38
+
39
+ > **注意:** \`arxivCategories\` 和 \`sources\` 根据研究领域灵活配置。
40
+ > 自然科学、社会科学等非 CS 领域可将 \`arxivCategories\` 设为 \`[]\`,主要依赖 OpenAlex。
49
41
  `;
50
42
  }
51
43
  export function renderSoulMd(projectName) {
@@ -58,10 +50,8 @@ export function renderSoulMd(projectName) {
58
50
 
59
51
  ## 核心域
60
52
  关键词: {由 BOOTSTRAP 流程填写}
61
- arXiv 分类: {由 BOOTSTRAP 流程填写}
62
-
63
- ## 监测带
64
- 相邻领域: {由 BOOTSTRAP 流程填写}
53
+ arXiv 分类: {由 BOOTSTRAP 流程填写,不适用则留空}
54
+ 文献来源: {arXiv / OpenAlex / 两者兼用}
65
55
  `;
66
56
  }
67
57
  export function renderAgentsMd() {
@@ -75,34 +65,29 @@ export function renderAgentsMd() {
75
65
  $W/
76
66
  ├── SOUL.md # 身份 + 研究方向
77
67
  ├── 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 等)
68
+ ├── config.json # 项目配置(关键词、分类、当前天数)
69
+
70
+ ├── papers/ # 文献区:下载的论文
71
+ │ ├── {arxiv_id}/ # arXiv 论文源文件
72
+ │ └── {doi_slug}.pdf # PDF 文件
73
+
74
+ ├── knowledge/ # 知识区:持久知识状态
75
+ ├── _index.md # 全景索引
76
+ │ └── topic-*.md # 主题文件(上限 50)
77
+
78
+ ├── ideas/ # 想法区:假设与研究想法
79
+ ├── hyp-*.md # 生成的假设
80
+ └── selected_idea.md # 选中的研究想法
81
+
82
+ ├── experiments/ # 实验代码区
83
+ ├── run.py # 入口脚本
84
+ ├── requirements.txt
85
+ │ └── results/ # 实验结果
86
+
87
+ ├── log/ # 运行日志
88
+ │ └── {YYYY-MM-DD}.md
89
+
90
+ └── skills/ # workspace skills
106
91
  \`\`\`
107
92
 
108
93
  ## Session Context
@@ -140,12 +125,13 @@ $W/
140
125
 
141
126
  | Skill | Primary Outputs |
142
127
  |-------|-----------------|
143
- | /research-collect | survey/, papers/ |
144
- | /research-survey | notes/paper_*.md, survey_res.md |
128
+ | /metabolism | Day 0: config.json, knowledge/ / Day 1+: papers/, knowledge/, ideas/hyp-*.md, log/ |
129
+ | /research-collect | papers/ |
130
+ | /research-survey | knowledge/, survey_res.md |
145
131
  | /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 |
132
+ | /research-implement | experiments/ |
133
+ | /research-review | experiments/review/ |
134
+ | /research-experiment | experiments/results/ |
149
135
  | /idea-generation | ideas/ |
150
136
  | /write-review-paper | review/ |
151
137
  `;
@@ -1 +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
+ {"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;;;;;;kBAMX,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;;;CAMzC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,qBAAqB,WAAW;;OAElC,WAAW;;;;;;;;;CASjB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+ER,CAAC;AACF,CAAC"}
@@ -1,16 +1,8 @@
1
1
  /**
2
2
  * Re-export SDK types and derive types not directly exported.
3
- *
4
- * OpenClaw plugin-entry exports OpenClawPluginApi, PluginCommandContext,
5
- * PluginLogger, etc. — but not PluginRuntime, PluginCommandResult, or
6
- * RunCommandResult. We derive those from the exported interfaces.
7
3
  */
8
- import type { OpenClawPluginApi, PluginCommandContext, PluginLogger, OpenClawPluginCommandDefinition } from "openclaw/plugin-sdk/plugin-entry";
9
- export type { OpenClawPluginApi, PluginCommandContext, PluginLogger, OpenClawPluginCommandDefinition, };
10
- /** Derived from OpenClawPluginApi["runtime"] */
11
- export type PluginRuntime = OpenClawPluginApi["runtime"];
4
+ import type { OpenClawPluginApi, PluginCommandContext, OpenClawPluginCommandDefinition } from "openclaw/plugin-sdk/plugin-entry";
5
+ export type { OpenClawPluginApi, PluginCommandContext };
12
6
  /** Derived from the return type of command handlers */
13
7
  export type PluginCommandResult = Awaited<ReturnType<OpenClawPluginCommandDefinition["handler"]>>;
14
- /** Derived from runtime.system.runCommandWithTimeout return type */
15
- export type RunCommandResult = Awaited<ReturnType<PluginRuntime["system"]["runCommandWithTimeout"]>>;
16
8
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,+BAA+B,EAChC,MAAM,kCAAkC,CAAC;AAE1C,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,+BAA+B,GAChC,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAEzD,uDAAuD;AACvD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,UAAU,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC,CACvD,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,GAAG,OAAO,CACpC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAC7D,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,+BAA+B,EAChC,MAAM,kCAAkC,CAAC;AAE1C,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;AAExD,uDAAuD;AACvD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,UAAU,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC,CACvD,CAAC"}