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.
Files changed (186) hide show
  1. package/README.en.md +21 -1
  2. package/README.md +27 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -77
  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 +47 -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 +230 -243
  15. package/dist/src/commands.js.map +1 -1
  16. package/dist/src/release-gate.d.ts +14 -0
  17. package/dist/src/release-gate.d.ts.map +1 -0
  18. package/dist/src/release-gate.js +124 -0
  19. package/dist/src/release-gate.js.map +1 -0
  20. package/dist/src/templates/bootstrap.d.ts.map +1 -1
  21. package/dist/src/templates/bootstrap.js +157 -94
  22. package/dist/src/templates/bootstrap.js.map +1 -1
  23. package/dist/src/types.d.ts +2 -10
  24. package/dist/src/types.d.ts.map +1 -1
  25. package/openclaw.plugin.json +11 -17
  26. package/package.json +2 -3
  27. package/skills/algorithm-selection/SKILL.md +103 -0
  28. package/skills/algorithm-selection/references/candidate-template.md +13 -0
  29. package/skills/algorithm-selection/references/selection-template.md +39 -0
  30. package/skills/artifact-review/SKILL.md +146 -0
  31. package/skills/artifact-review/references/release-gate-template.md +40 -0
  32. package/skills/artifact-review/references/review-checklist.md +45 -0
  33. package/skills/artifact-review/references/style-review-checklist.md +30 -0
  34. package/skills/baseline-runner/SKILL.md +103 -0
  35. package/skills/baseline-runner/references/baseline-matrix-template.md +9 -0
  36. package/skills/baseline-runner/references/baseline-report-template.md +25 -0
  37. package/skills/dataset-validate/SKILL.md +104 -0
  38. package/skills/dataset-validate/references/data-validation-template.md +38 -0
  39. package/skills/figure-standardize/SKILL.md +110 -0
  40. package/skills/figure-standardize/references/caption-template.md +12 -0
  41. package/skills/figure-standardize/references/figure-placement-template.md +30 -0
  42. package/skills/figure-standardize/references/figure-style-guide.md +36 -0
  43. package/skills/idea-generation/SKILL.md +20 -44
  44. package/skills/idea-generation/references/code-mapping.md +3 -3
  45. package/skills/idea-generation/references/idea-template.md +1 -1
  46. package/skills/idea-generation/references/reading-long-papers.md +3 -3
  47. package/skills/metabolism/SKILL.md +80 -36
  48. package/skills/paper-download/SKILL.md +61 -0
  49. package/skills/release-layout/SKILL.md +73 -0
  50. package/skills/release-layout/references/page-structure.md +14 -0
  51. package/skills/research-collect/SKILL.md +41 -111
  52. package/skills/research-experiment/SKILL.md +20 -12
  53. package/skills/research-implement/SKILL.md +10 -11
  54. package/skills/research-pipeline/SKILL.md +23 -31
  55. package/skills/research-plan/SKILL.md +7 -11
  56. package/skills/research-review/SKILL.md +21 -22
  57. package/skills/research-survey/SKILL.md +28 -25
  58. package/skills/write-paper/SKILL.md +252 -0
  59. package/skills/write-paper/references/boundary-notes-template.md +34 -0
  60. package/skills/write-paper/references/claim-inventory-template.md +32 -0
  61. package/skills/write-paper/references/evidence-contract.md +57 -0
  62. package/skills/write-paper/references/figure-callout-template.md +38 -0
  63. package/skills/write-paper/references/figures-manifest-template.md +44 -0
  64. package/skills/write-paper/references/latex/README.md +22 -0
  65. package/skills/write-paper/references/latex/build_paper.sh +41 -0
  66. package/skills/write-paper/references/latex/manuscript.tex +39 -0
  67. package/skills/write-paper/references/latex/references.bib +10 -0
  68. package/skills/write-paper/references/latex/sections/ablations.tex +3 -0
  69. package/skills/write-paper/references/latex/sections/abstract.tex +3 -0
  70. package/skills/write-paper/references/latex/sections/conclusion.tex +3 -0
  71. package/skills/write-paper/references/latex/sections/discussion_scope.tex +7 -0
  72. package/skills/write-paper/references/latex/sections/experimental_protocol.tex +3 -0
  73. package/skills/write-paper/references/latex/sections/introduction.tex +3 -0
  74. package/skills/write-paper/references/latex/sections/main_results.tex +9 -0
  75. package/skills/write-paper/references/latex/sections/method_system.tex +3 -0
  76. package/skills/write-paper/references/latex/sections/problem_setup.tex +3 -0
  77. package/skills/write-paper/references/latex/sections/related_work.tex +3 -0
  78. package/skills/write-paper/references/paper-template.md +155 -0
  79. package/skills/write-paper/references/paragraph-contract.md +139 -0
  80. package/skills/write-paper/references/paragraph-examples.md +171 -0
  81. package/skills/write-paper/references/style-banlist.md +81 -0
  82. package/skills/write-review-paper/SKILL.md +22 -16
  83. package/skills/write-review-paper/references/note-template.md +1 -1
  84. package/skills/write-review-paper/references/survey-template.md +1 -1
  85. package/dist/src/hooks/research-mode.d.ts +0 -22
  86. package/dist/src/hooks/research-mode.d.ts.map +0 -1
  87. package/dist/src/hooks/research-mode.js +0 -35
  88. package/dist/src/hooks/research-mode.js.map +0 -1
  89. package/dist/src/hooks/scientify-cron-autofill.d.ts +0 -15
  90. package/dist/src/hooks/scientify-cron-autofill.d.ts.map +0 -1
  91. package/dist/src/hooks/scientify-cron-autofill.js +0 -156
  92. package/dist/src/hooks/scientify-cron-autofill.js.map +0 -1
  93. package/dist/src/hooks/scientify-signature.d.ts +0 -21
  94. package/dist/src/hooks/scientify-signature.d.ts.map +0 -1
  95. package/dist/src/hooks/scientify-signature.js +0 -150
  96. package/dist/src/hooks/scientify-signature.js.map +0 -1
  97. package/dist/src/knowledge-state/project.d.ts +0 -13
  98. package/dist/src/knowledge-state/project.d.ts.map +0 -1
  99. package/dist/src/knowledge-state/project.js +0 -88
  100. package/dist/src/knowledge-state/project.js.map +0 -1
  101. package/dist/src/knowledge-state/render.d.ts +0 -63
  102. package/dist/src/knowledge-state/render.d.ts.map +0 -1
  103. package/dist/src/knowledge-state/render.js +0 -368
  104. package/dist/src/knowledge-state/render.js.map +0 -1
  105. package/dist/src/knowledge-state/store.d.ts +0 -19
  106. package/dist/src/knowledge-state/store.d.ts.map +0 -1
  107. package/dist/src/knowledge-state/store.js +0 -978
  108. package/dist/src/knowledge-state/store.js.map +0 -1
  109. package/dist/src/knowledge-state/types.d.ts +0 -182
  110. package/dist/src/knowledge-state/types.d.ts.map +0 -1
  111. package/dist/src/knowledge-state/types.js +0 -2
  112. package/dist/src/knowledge-state/types.js.map +0 -1
  113. package/dist/src/literature/subscription-state.d.ts +0 -112
  114. package/dist/src/literature/subscription-state.d.ts.map +0 -1
  115. package/dist/src/literature/subscription-state.js +0 -696
  116. package/dist/src/literature/subscription-state.js.map +0 -1
  117. package/dist/src/research-subscriptions/constants.d.ts +0 -16
  118. package/dist/src/research-subscriptions/constants.d.ts.map +0 -1
  119. package/dist/src/research-subscriptions/constants.js +0 -59
  120. package/dist/src/research-subscriptions/constants.js.map +0 -1
  121. package/dist/src/research-subscriptions/cron-client.d.ts +0 -8
  122. package/dist/src/research-subscriptions/cron-client.d.ts.map +0 -1
  123. package/dist/src/research-subscriptions/cron-client.js +0 -81
  124. package/dist/src/research-subscriptions/cron-client.js.map +0 -1
  125. package/dist/src/research-subscriptions/delivery.d.ts +0 -10
  126. package/dist/src/research-subscriptions/delivery.d.ts.map +0 -1
  127. package/dist/src/research-subscriptions/delivery.js +0 -82
  128. package/dist/src/research-subscriptions/delivery.js.map +0 -1
  129. package/dist/src/research-subscriptions/handlers.d.ts +0 -6
  130. package/dist/src/research-subscriptions/handlers.d.ts.map +0 -1
  131. package/dist/src/research-subscriptions/handlers.js +0 -204
  132. package/dist/src/research-subscriptions/handlers.js.map +0 -1
  133. package/dist/src/research-subscriptions/parse.d.ts +0 -11
  134. package/dist/src/research-subscriptions/parse.d.ts.map +0 -1
  135. package/dist/src/research-subscriptions/parse.js +0 -492
  136. package/dist/src/research-subscriptions/parse.js.map +0 -1
  137. package/dist/src/research-subscriptions/prompt.d.ts +0 -5
  138. package/dist/src/research-subscriptions/prompt.d.ts.map +0 -1
  139. package/dist/src/research-subscriptions/prompt.js +0 -347
  140. package/dist/src/research-subscriptions/prompt.js.map +0 -1
  141. package/dist/src/research-subscriptions/types.d.ts +0 -66
  142. package/dist/src/research-subscriptions/types.d.ts.map +0 -1
  143. package/dist/src/research-subscriptions/types.js +0 -2
  144. package/dist/src/research-subscriptions/types.js.map +0 -1
  145. package/dist/src/research-subscriptions.d.ts +0 -2
  146. package/dist/src/research-subscriptions.d.ts.map +0 -1
  147. package/dist/src/research-subscriptions.js +0 -2
  148. package/dist/src/research-subscriptions.js.map +0 -1
  149. package/dist/src/services/auto-updater.d.ts +0 -15
  150. package/dist/src/services/auto-updater.d.ts.map +0 -1
  151. package/dist/src/services/auto-updater.js +0 -188
  152. package/dist/src/services/auto-updater.js.map +0 -1
  153. package/dist/src/tools/arxiv-download.d.ts +0 -24
  154. package/dist/src/tools/arxiv-download.d.ts.map +0 -1
  155. package/dist/src/tools/arxiv-download.js +0 -177
  156. package/dist/src/tools/arxiv-download.js.map +0 -1
  157. package/dist/src/tools/github-search-tool.d.ts +0 -25
  158. package/dist/src/tools/github-search-tool.d.ts.map +0 -1
  159. package/dist/src/tools/github-search-tool.js +0 -114
  160. package/dist/src/tools/github-search-tool.js.map +0 -1
  161. package/dist/src/tools/openreview-lookup.d.ts +0 -31
  162. package/dist/src/tools/openreview-lookup.d.ts.map +0 -1
  163. package/dist/src/tools/openreview-lookup.js +0 -414
  164. package/dist/src/tools/openreview-lookup.js.map +0 -1
  165. package/dist/src/tools/paper-browser.d.ts +0 -23
  166. package/dist/src/tools/paper-browser.d.ts.map +0 -1
  167. package/dist/src/tools/paper-browser.js +0 -121
  168. package/dist/src/tools/paper-browser.js.map +0 -1
  169. package/dist/src/tools/scientify-cron.d.ts +0 -63
  170. package/dist/src/tools/scientify-cron.d.ts.map +0 -1
  171. package/dist/src/tools/scientify-cron.js +0 -265
  172. package/dist/src/tools/scientify-cron.js.map +0 -1
  173. package/dist/src/tools/scientify-literature-state.d.ts +0 -303
  174. package/dist/src/tools/scientify-literature-state.d.ts.map +0 -1
  175. package/dist/src/tools/scientify-literature-state.js +0 -957
  176. package/dist/src/tools/scientify-literature-state.js.map +0 -1
  177. package/dist/src/tools/unpaywall-download.d.ts +0 -21
  178. package/dist/src/tools/unpaywall-download.d.ts.map +0 -1
  179. package/dist/src/tools/unpaywall-download.js +0 -169
  180. package/dist/src/tools/unpaywall-download.js.map +0 -1
  181. package/dist/src/tools/workspace.d.ts +0 -32
  182. package/dist/src/tools/workspace.d.ts.map +0 -1
  183. package/dist/src/tools/workspace.js +0 -69
  184. package/dist/src/tools/workspace.js.map +0 -1
  185. package/skills/metabolism-init/SKILL.md +0 -80
  186. package/skills/research-subscription/SKILL.md +0 -119
@@ -1,227 +1,269 @@
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");
4
+ import { formatReleaseGateStatus, getReleaseGateNextStep, hasReleaseFacingArtifacts, readReleaseGateStatus } from "./release-gate.js";
5
+ const OPENCLAW_HOME = path.join(os.homedir(), ".openclaw");
6
+ /**
7
+ * List all research agents from openclaw.json.
8
+ */
9
+ function listResearchAgents() {
10
+ const configPath = path.join(OPENCLAW_HOME, "openclaw.json");
7
11
  try {
8
- return fs.readFileSync(activePath, "utf-8").trim();
12
+ const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
13
+ const agents = config.agents?.list ?? [];
14
+ return agents
15
+ .filter((a) => a.id.startsWith("research-"))
16
+ .map((a) => ({
17
+ id: a.id,
18
+ workspace: (a.workspace ?? `~/.openclaw/workspace-${a.id}`).replace("~", os.homedir()),
19
+ }));
9
20
  }
10
21
  catch {
11
- return null;
22
+ return [];
12
23
  }
13
24
  }
14
- function getProjectMeta(projectId) {
15
- const metaPath = path.join(WORKSPACE_ROOT, projectId, "project.json");
25
+ function countFiles(dirPath, filter) {
16
26
  try {
17
- return JSON.parse(fs.readFileSync(metaPath, "utf-8"));
27
+ const entries = fs.readdirSync(dirPath);
28
+ return filter ? entries.filter(filter).length : entries.length;
18
29
  }
19
30
  catch {
20
- return null;
31
+ return 0;
21
32
  }
22
33
  }
23
- function listProjects() {
34
+ function fileExists(filePath) {
24
35
  try {
25
- return fs
26
- .readdirSync(WORKSPACE_ROOT, { withFileTypes: true })
27
- .filter((d) => d.isDirectory() && !d.name.startsWith("."))
28
- .map((d) => d.name);
36
+ return fs.existsSync(filePath);
29
37
  }
30
38
  catch {
31
- return [];
39
+ return false;
32
40
  }
33
41
  }
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;
42
+ function readLatestReviewVerdict(workspace) {
43
+ const iterationsDir = path.join(workspace, "iterations");
44
+ if (!fileExists(iterationsDir))
45
+ return "MISSING";
43
46
  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
- }
47
+ const files = fs.readdirSync(iterationsDir)
48
+ .filter((f) => /^judge_v\d+\.md$/.test(f))
49
+ .sort((a, b) => {
50
+ const na = Number(a.match(/\d+/)?.[0] ?? "0");
51
+ const nb = Number(b.match(/\d+/)?.[0] ?? "0");
52
+ return nb - na;
53
+ });
54
+ const latest = files[0];
55
+ if (!latest)
56
+ return "MISSING";
57
+ const content = fs.readFileSync(path.join(iterationsDir, latest), "utf-8");
58
+ const verdictMatch = content.match(/##\s+Verdict:\s+([A-Z_]+)/);
59
+ const verdict = verdictMatch?.[1];
60
+ return verdict ?? "UNKNOWN";
54
61
  }
55
62
  catch {
56
- // ignore
63
+ return "UNKNOWN";
57
64
  }
58
- return size;
59
65
  }
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
- }
66
+ function buildProjectSnapshot(workspace) {
67
+ return {
68
+ hasConfig: fileExists(path.join(workspace, "config.json")),
69
+ hasSurvey: fileExists(path.join(workspace, "survey_res.md")),
70
+ hasSelection: fileExists(path.join(workspace, "selection_res.md")),
71
+ hasPlan: fileExists(path.join(workspace, "plan_res.md")),
72
+ hasDataValidation: fileExists(path.join(workspace, "data_validation.md")),
73
+ hasBaseline: fileExists(path.join(workspace, "baseline_res.md")),
74
+ hasImplementationReport: fileExists(path.join(workspace, "ml_res.md")),
75
+ latestReviewVerdict: readLatestReviewVerdict(workspace),
76
+ hasExperiment: fileExists(path.join(workspace, "experiment_res.md")),
77
+ };
78
+ }
79
+ function inferNextAction(snapshot) {
80
+ if (!snapshot.hasConfig) {
81
+ return {
82
+ stage: "Bootstrap pending",
83
+ command: "complete BOOTSTRAP configuration",
84
+ expectedOutputs: ["config.json", "SOUL.md"],
85
+ reason: "The project is missing its base configuration, so later survey, selection, and experiment steps do not yet share a stable direction.",
86
+ };
73
87
  }
74
- catch {
75
- // ignore
88
+ if (!snapshot.hasSurvey) {
89
+ return {
90
+ stage: "Survey needed",
91
+ command: "/research-survey",
92
+ expectedOutputs: ["knowledge/", "survey_res.md"],
93
+ reason: "There is no deep survey result yet, so route selection and implementation would be premature.",
94
+ };
76
95
  }
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;
83
- 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
- }
96
+ if (!snapshot.hasSelection && !snapshot.hasPlan) {
113
97
  return {
114
- totalRuns,
115
- totalHypotheses,
116
- totalPaperNotes,
117
- recentFullTextReadCount,
118
- recentNotFullTextReadCount,
119
- ...(lastRunAtMs > 0 ? { lastRunAtMs } : {}),
120
- ...(lastStatus ? { lastStatus } : {}),
121
- streamCount: streamEntries.length,
98
+ stage: "Route selection",
99
+ command: "/algorithm-selection",
100
+ expectedOutputs: ["selection_res.md"],
101
+ reason: "A survey exists, but the project has not yet narrowed candidate approaches into Chosen / Rejected / Fallback routes.",
122
102
  };
123
103
  }
124
- catch {
125
- return null;
104
+ if (!snapshot.hasPlan) {
105
+ return {
106
+ stage: "Planning",
107
+ command: "/research-plan",
108
+ expectedOutputs: ["plan_res.md"],
109
+ reason: "The project still needs a concrete Dataset / Model / Training / Testing plan before implementation.",
110
+ };
111
+ }
112
+ if (!snapshot.hasDataValidation) {
113
+ return {
114
+ stage: "Dataset validation",
115
+ command: "/dataset-validate",
116
+ expectedOutputs: ["data_validation.md"],
117
+ reason: "Data reality, splits, labels, and leakage risk should be reviewed separately before judging model quality.",
118
+ };
119
+ }
120
+ if (!snapshot.hasBaseline) {
121
+ return {
122
+ stage: "Baseline setup",
123
+ command: "/baseline-runner",
124
+ expectedOutputs: ["baseline_res.md", "experiments/baselines/"],
125
+ reason: "The project still lacks baseline results under a matched protocol, so headline comparisons would be too early.",
126
+ };
127
+ }
128
+ if (!snapshot.hasImplementationReport) {
129
+ return {
130
+ stage: "Implementation",
131
+ command: "/research-implement",
132
+ expectedOutputs: ["project/", "ml_res.md"],
133
+ reason: "The route, plan, data check, and baseline contract are already in place, so the next step is implementation plus 2-epoch validation.",
134
+ };
135
+ }
136
+ if (snapshot.latestReviewVerdict !== "PASS") {
137
+ return {
138
+ stage: "Review",
139
+ command: "/research-review",
140
+ expectedOutputs: ["iterations/judge_v{N}.md"],
141
+ reason: "Implementation exists, but review has not yet reached PASS, so model quality still needs a dedicated review pass.",
142
+ };
126
143
  }
144
+ if (!snapshot.hasExperiment) {
145
+ return {
146
+ stage: "Full experiment",
147
+ command: "/research-experiment",
148
+ expectedOutputs: ["experiment_res.md", "experiment_analysis/"],
149
+ reason: "Implementation and review are ready, so the next step is full training, ablations, and supplementary experiments.",
150
+ };
151
+ }
152
+ return {
153
+ stage: "Experiment complete",
154
+ command: "/write-review-paper",
155
+ expectedOutputs: ["review/"],
156
+ reason: "The core ML execution chain is complete, so the project can move into synthesis, survey writing, or outward-facing summaries.",
157
+ };
158
+ }
159
+ function formatArtifactPresence(snapshot) {
160
+ const items = [
161
+ ["survey", snapshot.hasSurvey],
162
+ ["selection", snapshot.hasSelection],
163
+ ["plan", snapshot.hasPlan],
164
+ ["data_validation", snapshot.hasDataValidation],
165
+ ["baseline", snapshot.hasBaseline],
166
+ ["implement", snapshot.hasImplementationReport],
167
+ ["review", snapshot.latestReviewVerdict === "PASS"],
168
+ ["experiment", snapshot.hasExperiment],
169
+ ];
170
+ return items.map(([label, ok]) => `${ok ? "yes" : "no"} ${label}`).join(" | ");
127
171
  }
128
172
  /**
129
- * /research-status - Show workspace status
173
+ * /research-status - Show workspace status for all research agents
130
174
  */
131
175
  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
- }
176
+ const agents = listResearchAgents();
177
+ if (agents.length === 0) {
178
+ return { text: "No research projects found. Use `openclaw research init <id>` to create one." };
150
179
  }
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
- }
180
+ let output = "**Research Projects**\n\n";
181
+ for (const agent of agents) {
182
+ const projectId = agent.id.replace("research-", "");
183
+ const w = agent.workspace;
184
+ const papersCount = countFiles(path.join(w, "papers"), (f) => f.endsWith(".tex") || f.endsWith(".pdf"));
185
+ const ideasCount = countFiles(path.join(w, "ideas"), (f) => f.endsWith(".md"));
186
+ const topicCount = countFiles(path.join(w, "knowledge"), (f) => f.startsWith("topic-"));
187
+ const hypothesisCount = countFiles(path.join(w, "ideas"), (f) => f.startsWith("hyp-"));
188
+ const snapshot = buildProjectSnapshot(w);
189
+ const next = inferNextAction(snapshot);
190
+ let currentDay = 0;
191
+ try {
192
+ const config = JSON.parse(fs.readFileSync(path.join(w, "config.json"), "utf-8"));
193
+ currentDay = config.currentDay ?? 0;
194
+ }
195
+ catch { /* not yet bootstrapped */ }
196
+ output += `**${projectId}** (Day ${currentDay})\n`;
197
+ output += ` Workspace: \`${w}\`\n`;
198
+ output += ` Topics: ${topicCount} | Hypotheses: ${hypothesisCount} | Papers: ${papersCount} | Ideas: ${ideasCount}\n`;
199
+ output += ` Stage: ${next.stage}\n`;
200
+ output += ` Artifacts: ${formatArtifactPresence(snapshot)}\n`;
201
+ output += ` Next: \`${next.command}\`\n`;
202
+ output += ` Why: ${next.reason}\n`;
203
+ output += ` Expected: ${next.expectedOutputs.map((p) => `\`${p}\``).join(", ")}\n`;
204
+ const gateStatus = readReleaseGateStatus(w);
205
+ if (hasReleaseFacingArtifacts(w) || gateStatus.state !== "missing") {
206
+ output += ` Release Gate: ${formatReleaseGateStatus(gateStatus)}\n`;
207
+ if (gateStatus.state === "stale" && gateStatus.staleReasons.length > 0) {
208
+ output += ` Gate Detail: ${gateStatus.staleReasons[0]}\n`;
168
209
  }
169
- catch {
170
- // ignore
210
+ const nextStep = getReleaseGateNextStep(w, gateStatus);
211
+ if (nextStep) {
212
+ output += ` Release Next: ${nextStep}\n`;
171
213
  }
172
- const marker = isActive ? "● " : " ";
173
- output += `${marker}\`${proj}\` (papers: ${papersCount}, ideas: ${ideasCount}, repos: ${reposCount})\n`;
174
214
  }
215
+ output += `\n`;
175
216
  }
176
217
  return { text: output };
177
218
  }
178
219
  /**
179
- * /papers - List downloaded papers
220
+ * /papers - List downloaded papers in a research agent workspace
180
221
  */
181
222
  export function handlePapers(ctx) {
182
- const projectId = ctx.args?.trim() || getActiveProject();
183
- if (!projectId) {
184
- return { text: "No active project. Use: `/papers <project-id>`" };
223
+ const agent = resolveAgent(ctx.args?.trim());
224
+ if (!agent) {
225
+ return { text: "No research project found. Use `openclaw research init <id>` to create one." };
185
226
  }
186
- const papersDir = path.join(WORKSPACE_ROOT, projectId, "papers");
227
+ const papersDir = path.join(agent.workspace, "papers");
187
228
  if (!fs.existsSync(papersDir)) {
188
- return { text: `📄 **Papers in ${projectId}**\n\n_No papers directory found._` };
229
+ return { text: `No papers directory in project ${agent.id}.` };
189
230
  }
190
- let output = `📄 **Papers in ${projectId}**\n\n`;
191
- const entries = fs.readdirSync(papersDir, { withFileTypes: true });
231
+ const downloadsDir = path.join(papersDir, "_downloads");
232
+ let output = `**Papers — ${agent.id.replace("research-", "")}**\n\n`;
192
233
  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;
234
+ try {
235
+ const entries = fs.readdirSync(downloadsDir, { withFileTypes: true });
236
+ for (const entry of entries) {
237
+ if (entry.isDirectory()) {
238
+ const texCount = fs.readdirSync(path.join(downloadsDir, entry.name)).filter((f) => f.endsWith(".tex")).length;
239
+ output += ` [tex] \`${entry.name}\` (${texCount} files)\n`;
240
+ hasItems = true;
241
+ }
242
+ else if (entry.name.endsWith(".pdf")) {
243
+ output += ` [pdf] \`${entry.name.replace(".pdf", "")}\`\n`;
244
+ hasItems = true;
245
+ }
204
246
  }
205
247
  }
206
- if (!hasItems) {
248
+ catch { /* empty */ }
249
+ if (!hasItems)
207
250
  output += "_No papers downloaded yet._";
208
- }
209
251
  return { text: output };
210
252
  }
211
253
  /**
212
- * /ideas - List generated ideas
254
+ * /ideas - List generated ideas in a research agent workspace
213
255
  */
214
256
  export function handleIdeas(ctx) {
215
- const projectId = ctx.args?.trim() || getActiveProject();
216
- if (!projectId) {
217
- return { text: "No active project. Use: `/ideas <project-id>`" };
257
+ const agent = resolveAgent(ctx.args?.trim());
258
+ if (!agent) {
259
+ return { text: "No research project found. Use `openclaw research init <id>` to create one." };
218
260
  }
219
- const ideasDir = path.join(WORKSPACE_ROOT, projectId, "ideas");
261
+ const ideasDir = path.join(agent.workspace, "ideas");
220
262
  if (!fs.existsSync(ideasDir)) {
221
- return { text: `💡 **Ideas in ${projectId}**\n\n_No ideas directory found._` };
263
+ return { text: `No ideas in project ${agent.id.replace("research-", "")}.` };
222
264
  }
223
- let output = `💡 **Ideas in ${projectId}**\n\n`;
224
265
  const files = fs.readdirSync(ideasDir).filter((f) => f.endsWith(".md"));
266
+ let output = `**Ideas — ${agent.id.replace("research-", "")}**\n\n`;
225
267
  if (files.length === 0) {
226
268
  output += "_No ideas generated yet._";
227
269
  }
@@ -231,97 +273,42 @@ export function handleIdeas(ctx) {
231
273
  const titleMatch = content.match(/^#\s+(.+)$/m);
232
274
  const title = titleMatch ? titleMatch[1] : file;
233
275
  const isSelected = file === "selected_idea.md";
234
- const marker = isSelected ? " " : " ";
235
- output += `${marker}\`${file.padEnd(22)}\` ${title}\n`;
276
+ const marker = isSelected ? "* " : " ";
277
+ output += `${marker}\`${file}\` ${title}\n`;
236
278
  }
237
279
  }
238
280
  return { text: output };
239
281
  }
240
282
  /**
241
- * /projects - List all research projects
283
+ * /projects - List all research projects (alias for /research-status)
242
284
  */
243
285
  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 };
286
+ return handleResearchStatus(_ctx);
265
287
  }
266
288
  /**
267
- * /project-switch <project-id> - Switch to a different project
289
+ * /project-switch - No longer needed (each agent has its own workspace)
268
290
  */
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}**'` };
291
+ export function handleProjectSwitch(_ctx) {
292
+ return { text: "Project switching is no longer needed. Each research agent has its own workspace. Use `openclaw research list` to see all projects." };
281
293
  }
282
294
  /**
283
- * /project-delete <project-id> - Delete a research project
295
+ * /project-delete - Delete via CLI instead
284
296
  */
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
- }
297
+ export function handleProjectDelete(_ctx) {
298
+ return { text: "Use `openclaw research delete <id>` to delete a research project." };
299
+ }
300
+ /**
301
+ * Resolve which research agent to use.
302
+ * If an arg is given, match by project id; otherwise use the first (or only) agent.
303
+ */
304
+ function resolveAgent(arg) {
305
+ const agents = listResearchAgents();
306
+ if (agents.length === 0)
307
+ return null;
308
+ if (arg) {
309
+ const agentId = arg.startsWith("research-") ? arg : `research-${arg}`;
310
+ return agents.find((a) => a.id === agentId) ?? null;
322
311
  }
323
- // Delete the project directory
324
- fs.rmSync(projectPath, { recursive: true, force: true });
325
- return { text: `✓ Deleted project '**${projectId}**'` };
312
+ return agents[0] ?? null;
326
313
  }
327
314
  //# 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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"}
@@ -0,0 +1,14 @@
1
+ export type ReleaseVerdict = "HOLD" | "CONDITIONAL_GO" | "GO";
2
+ export interface ReleaseGateStatus {
3
+ state: "missing" | "invalid" | "fresh" | "stale";
4
+ verdict?: ReleaseVerdict;
5
+ gatePath: string;
6
+ checkedFiles: string[];
7
+ staleReasons: string[];
8
+ generatedAt?: string;
9
+ }
10
+ export declare function hasReleaseFacingArtifacts(workspace: string): boolean;
11
+ export declare function readReleaseGateStatus(workspace: string): ReleaseGateStatus;
12
+ export declare function formatReleaseGateStatus(status: ReleaseGateStatus): string;
13
+ export declare function getReleaseGateNextStep(workspace: string, status: ReleaseGateStatus): string | null;
14
+ //# sourceMappingURL=release-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-gate.d.ts","sourceRoot":"","sources":["../../src/release-gate.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;AAY9D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACjD,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6BD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAkE1E;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAazE;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAuBlG"}