@s_s/harmonia 1.3.0 → 1.4.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 (172) hide show
  1. package/README.md +140 -392
  2. package/build/cli/setup.d.ts +4 -2
  3. package/build/cli/setup.js +44 -18
  4. package/build/cli/setup.js.map +1 -1
  5. package/build/core/action-registry.d.ts +36 -0
  6. package/build/core/action-registry.js +53 -0
  7. package/build/core/action-registry.js.map +1 -0
  8. package/build/core/artifacts.d.ts +66 -0
  9. package/build/core/artifacts.js +178 -0
  10. package/build/core/artifacts.js.map +1 -0
  11. package/build/core/dispatch.d.ts +6 -2
  12. package/build/core/dispatch.js +12 -7
  13. package/build/core/dispatch.js.map +1 -1
  14. package/build/core/overrides.d.ts +19 -26
  15. package/build/core/overrides.js +32 -98
  16. package/build/core/overrides.js.map +1 -1
  17. package/build/core/plugin.d.ts +86 -0
  18. package/build/core/plugin.js +332 -0
  19. package/build/core/plugin.js.map +1 -0
  20. package/build/core/registry.d.ts +4 -5
  21. package/build/core/registry.js +8 -9
  22. package/build/core/registry.js.map +1 -1
  23. package/build/core/reviews.d.ts +11 -12
  24. package/build/core/reviews.js +18 -21
  25. package/build/core/reviews.js.map +1 -1
  26. package/build/core/schema.d.ts +43 -15
  27. package/build/core/schema.js +124 -20
  28. package/build/core/schema.js.map +1 -1
  29. package/build/core/state.d.ts +26 -27
  30. package/build/core/state.js +36 -90
  31. package/build/core/state.js.map +1 -1
  32. package/build/core/steps.d.ts +13 -14
  33. package/build/core/steps.js +26 -29
  34. package/build/core/steps.js.map +1 -1
  35. package/build/core/tree-utils.d.ts +52 -0
  36. package/build/core/tree-utils.js +226 -0
  37. package/build/core/tree-utils.js.map +1 -0
  38. package/build/core/types.d.ts +389 -118
  39. package/build/core/types.js +15 -1
  40. package/build/core/types.js.map +1 -1
  41. package/build/core/workflow-engine.d.ts +68 -0
  42. package/build/core/workflow-engine.js +821 -0
  43. package/build/core/workflow-engine.js.map +1 -0
  44. package/build/core/workflow-validator.d.ts +22 -0
  45. package/build/core/workflow-validator.js +489 -0
  46. package/build/core/workflow-validator.js.map +1 -0
  47. package/build/index.js +25 -26
  48. package/build/index.js.map +1 -1
  49. package/build/setup/inject.d.ts +4 -4
  50. package/build/setup/inject.js +6 -6
  51. package/build/setup/inject.js.map +1 -1
  52. package/build/setup/templates.d.ts +9 -7
  53. package/build/setup/templates.js +68 -172
  54. package/build/setup/templates.js.map +1 -1
  55. package/build/tools/artifact-approve.d.ts +8 -0
  56. package/build/tools/{approve-doc.js → artifact-approve.js} +24 -16
  57. package/build/tools/artifact-approve.js.map +1 -0
  58. package/build/tools/artifact-schema.d.ts +12 -0
  59. package/build/tools/artifact-schema.js +148 -0
  60. package/build/tools/artifact-schema.js.map +1 -0
  61. package/build/tools/artifact-tools.d.ts +18 -0
  62. package/build/tools/artifact-tools.js +465 -0
  63. package/build/tools/artifact-tools.js.map +1 -0
  64. package/build/tools/{report-dispatch.d.ts → dispatch-report.d.ts} +7 -3
  65. package/build/tools/{report-dispatch.js → dispatch-report.js} +106 -28
  66. package/build/tools/dispatch-report.js.map +1 -0
  67. package/build/tools/engine-helpers.d.ts +41 -0
  68. package/build/tools/engine-helpers.js +182 -0
  69. package/build/tools/engine-helpers.js.map +1 -0
  70. package/build/tools/get-project-status.d.ts +6 -4
  71. package/build/tools/get-project-status.js +265 -248
  72. package/build/tools/get-project-status.js.map +1 -1
  73. package/build/tools/get-role-prompt.d.ts +1 -1
  74. package/build/tools/get-role-prompt.js +7 -41
  75. package/build/tools/get-role-prompt.js.map +1 -1
  76. package/build/tools/iteration-start.d.ts +7 -4
  77. package/build/tools/iteration-start.js +45 -19
  78. package/build/tools/iteration-start.js.map +1 -1
  79. package/build/tools/loop-done.d.ts +11 -0
  80. package/build/tools/loop-done.js +109 -0
  81. package/build/tools/loop-done.js.map +1 -0
  82. package/build/tools/patch-start.d.ts +4 -2
  83. package/build/tools/patch-start.js +36 -11
  84. package/build/tools/patch-start.js.map +1 -1
  85. package/build/tools/project-init.d.ts +5 -5
  86. package/build/tools/project-init.js +41 -10
  87. package/build/tools/project-init.js.map +1 -1
  88. package/build/tools/role-dispatch.d.ts +55 -0
  89. package/build/tools/role-dispatch.js +508 -0
  90. package/build/tools/role-dispatch.js.map +1 -0
  91. package/build/tools/utils.d.ts +6 -0
  92. package/build/tools/utils.js +36 -0
  93. package/build/tools/utils.js.map +1 -1
  94. package/package.json +1 -1
  95. package/{build/hooks/claude-code.js → workflows/dev/hooks/claude.js} +34 -23
  96. package/{build → workflows/dev}/hooks/content.js +27 -18
  97. package/workflows/dev/hooks/index.js +52 -0
  98. package/{build → workflows/dev}/hooks/openclaw.js +31 -20
  99. package/{build → workflows/dev}/hooks/opencode.js +31 -20
  100. package/workflows/dev/roles/architect.md +68 -28
  101. package/workflows/dev/roles/coordinator.md +103 -0
  102. package/workflows/dev/roles/developer.md +5 -5
  103. package/workflows/dev/roles/tester.md +19 -19
  104. package/workflows/dev/schemas/api-contract.json +42 -0
  105. package/workflows/dev/schemas/api-design.json +30 -13
  106. package/workflows/dev/schemas/data-model.json +20 -7
  107. package/workflows/dev/schemas/prd.completeness-check.json +6 -5
  108. package/workflows/dev/schemas/prd.draft.json +13 -5
  109. package/workflows/dev/schemas/prd.final.json +34 -11
  110. package/workflows/dev/schemas/prd.json +29 -11
  111. package/workflows/dev/schemas/prd.requirements.json +6 -5
  112. package/workflows/dev/schemas/prototype.json +6 -2
  113. package/workflows/dev/schemas/task-breakdown.coarse.json +4 -3
  114. package/workflows/dev/schemas/task-breakdown.dependencies.json +5 -4
  115. package/workflows/dev/schemas/task-breakdown.detailed.json +8 -3
  116. package/workflows/dev/schemas/task-breakdown.final.json +8 -3
  117. package/workflows/dev/schemas/task-breakdown.json +8 -3
  118. package/workflows/dev/schemas/tech-design.analysis.json +6 -5
  119. package/workflows/dev/schemas/tech-design.draft.json +14 -5
  120. package/workflows/dev/schemas/tech-design.final.json +39 -13
  121. package/workflows/dev/schemas/tech-design.json +34 -13
  122. package/workflows/dev/schemas/tech-design.research.json +21 -0
  123. package/workflows/dev/schemas/test-plan.json +17 -7
  124. package/workflows/dev/schemas/test-report.json +26 -9
  125. package/workflows/dev/schemas/user-stories.json +7 -3
  126. package/workflows/dev/tools/index.js +23 -0
  127. package/workflows/dev/workflow.json +234 -101
  128. package/build/core/docs.d.ts +0 -36
  129. package/build/core/docs.js +0 -96
  130. package/build/core/docs.js.map +0 -1
  131. package/build/core/workflow.d.ts +0 -33
  132. package/build/core/workflow.js +0 -140
  133. package/build/core/workflow.js.map +0 -1
  134. package/build/hooks/claude-code.d.ts +0 -20
  135. package/build/hooks/claude-code.js.map +0 -1
  136. package/build/hooks/content.d.ts +0 -43
  137. package/build/hooks/content.js.map +0 -1
  138. package/build/hooks/install.d.ts +0 -40
  139. package/build/hooks/install.js +0 -63
  140. package/build/hooks/install.js.map +0 -1
  141. package/build/hooks/openclaw.d.ts +0 -24
  142. package/build/hooks/openclaw.js.map +0 -1
  143. package/build/hooks/opencode.d.ts +0 -29
  144. package/build/hooks/opencode.js.map +0 -1
  145. package/build/tools/approve-doc.d.ts +0 -6
  146. package/build/tools/approve-doc.js.map +0 -1
  147. package/build/tools/dispatch-role.d.ts +0 -16
  148. package/build/tools/dispatch-role.js +0 -266
  149. package/build/tools/dispatch-role.js.map +0 -1
  150. package/build/tools/doc-tools.d.ts +0 -16
  151. package/build/tools/doc-tools.js +0 -425
  152. package/build/tools/doc-tools.js.map +0 -1
  153. package/build/tools/override-tools.d.ts +0 -6
  154. package/build/tools/override-tools.js +0 -129
  155. package/build/tools/override-tools.js.map +0 -1
  156. package/build/tools/report-dispatch.js.map +0 -1
  157. package/build/tools/set-scale.d.ts +0 -6
  158. package/build/tools/set-scale.js +0 -95
  159. package/build/tools/set-scale.js.map +0 -1
  160. package/build/tools/setup-project.d.ts +0 -8
  161. package/build/tools/setup-project.js +0 -116
  162. package/build/tools/setup-project.js.map +0 -1
  163. package/build/tools/update-phase.d.ts +0 -12
  164. package/build/tools/update-phase.js +0 -148
  165. package/build/tools/update-phase.js.map +0 -1
  166. package/workflows/dev/roles/pm.md +0 -99
  167. package/workflows/dev/schemas/deploy.json +0 -20
  168. package/workflows/dev/schemas/fsd.json +0 -25
  169. package/workflows/dev/schemas/project-plan.json +0 -20
  170. package/workflows/dev/schemas/retrospective.json +0 -20
  171. package/workflows/dev/schemas/risk-assessment.json +0 -15
  172. package/workflows/dev/schemas/tech-design.api-contract.json +0 -20
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Plugin system — discovery, loading, and registration of workflow plugins.
3
+ *
4
+ * A workflow plugin is a directory containing:
5
+ * workflow.json — Node tree definition + artifact definitions
6
+ * roles/*.md — Role prompts with YAML frontmatter
7
+ * schemas/*.json — Artifact schemas for validation
8
+ * hooks/index.js — Optional, exports createHooks()
9
+ * tools/index.js — Optional, exports registerActions()
10
+ *
11
+ * Loading flow:
12
+ * 1. Read workflow.json → parse node tree + artifact definitions
13
+ * 2. Validate via workflow-validator
14
+ * 3. Scan roles/ → parse role files
15
+ * 4. Scan schemas/ → load artifact schemas
16
+ * 5. If tools/index.js exists → dynamic import, register actions
17
+ * 6. If hooks/index.js exists → record hook creator (not executed yet)
18
+ */
19
+ import { readFile, readdir, access } from 'node:fs/promises';
20
+ import { join, parse } from 'node:path';
21
+ import * as YAML from 'yaml';
22
+ import { validateWorkflow } from './workflow-validator.js';
23
+ // ─── Errors ───
24
+ export class PluginLoadError extends Error {
25
+ constructor(pluginPath, reason) {
26
+ super(`Failed to load plugin from "${pluginPath}": ${reason}`);
27
+ this.name = 'PluginLoadError';
28
+ }
29
+ }
30
+ export class PluginValidationError extends Error {
31
+ errors;
32
+ constructor(pluginPath, errors) {
33
+ const summary = errors.map((e) => ` - [${e.type}] ${e.message}`).join('\n');
34
+ super(`Workflow validation failed for "${pluginPath}":\n${summary}`);
35
+ this.name = 'PluginValidationError';
36
+ this.errors = errors;
37
+ }
38
+ }
39
+ export class WorkflowNotFoundError extends Error {
40
+ constructor(name, searched) {
41
+ const dirs = searched.map((d) => ` - ${d}`).join('\n');
42
+ super(`工作流 "${name}" 不存在。已搜索:\n${dirs}`);
43
+ this.name = 'WorkflowNotFoundError';
44
+ }
45
+ }
46
+ // ─── Internal helpers ───
47
+ async function fileExists(path) {
48
+ try {
49
+ await access(path);
50
+ return true;
51
+ }
52
+ catch {
53
+ return false;
54
+ }
55
+ }
56
+ /**
57
+ * Parse a role markdown file.
58
+ * Format: YAML frontmatter (---\n...\n---) followed by markdown prompt.
59
+ */
60
+ function parseRoleFile(id, content) {
61
+ const fmRegex = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
62
+ const match = content.match(fmRegex);
63
+ if (!match) {
64
+ return {
65
+ id,
66
+ frontmatter: { session: 'none', parallel: false },
67
+ prompt: content.trim(),
68
+ };
69
+ }
70
+ const yamlBlock = match[1];
71
+ const prompt = match[2].trim();
72
+ const parsed = YAML.parse(yamlBlock);
73
+ const fm = parsed ?? {};
74
+ const capabilities = Array.isArray(fm.capabilities) ? fm.capabilities : undefined;
75
+ const frontmatter = {
76
+ session: fm.session ?? 'none',
77
+ parallel: fm.parallel ?? false,
78
+ ...(fm.model ? { model: fm.model } : {}),
79
+ ...(fm.agent ? { agent: fm.agent } : {}),
80
+ ...(capabilities ? { capabilities } : {}),
81
+ };
82
+ return { id, frontmatter, prompt };
83
+ }
84
+ // ─── Loading Steps ───
85
+ /**
86
+ * Load workflow definition from workflow.json.
87
+ * Also extracts artifact definitions from the 'artifacts' field.
88
+ */
89
+ async function loadDefinition(pluginPath) {
90
+ const workflowJsonPath = join(pluginPath, 'workflow.json');
91
+ if (!(await fileExists(workflowJsonPath))) {
92
+ throw new PluginLoadError(pluginPath, 'workflow.json not found');
93
+ }
94
+ const content = await readFile(workflowJsonPath, 'utf-8');
95
+ const raw = JSON.parse(content);
96
+ // Extract artifact definitions (not part of WorkflowDefinition type)
97
+ const artifactDefinitions = {};
98
+ if (raw.artifacts && typeof raw.artifacts === 'object') {
99
+ for (const [id, def] of Object.entries(raw.artifacts)) {
100
+ artifactDefinitions[id] = def;
101
+ }
102
+ }
103
+ // Build WorkflowDefinition (without artifacts — that's plugin-level)
104
+ const definition = {
105
+ name: raw.name,
106
+ description: raw.description,
107
+ version: raw.version,
108
+ author: raw.author,
109
+ coordinator: raw.coordinator,
110
+ root: raw.root,
111
+ floatingNodes: raw.floatingNodes,
112
+ };
113
+ return { definition, artifactDefinitions };
114
+ }
115
+ /**
116
+ * Load role definitions from roles/ directory.
117
+ */
118
+ async function loadRoles(pluginPath) {
119
+ const rolesDir = join(pluginPath, 'roles');
120
+ const roles = {};
121
+ try {
122
+ const files = await readdir(rolesDir);
123
+ for (const file of files) {
124
+ if (!file.endsWith('.md'))
125
+ continue;
126
+ const roleId = parse(file).name;
127
+ const content = await readFile(join(rolesDir, file), 'utf-8');
128
+ roles[roleId] = parseRoleFile(roleId, content);
129
+ }
130
+ }
131
+ catch (err) {
132
+ // roles/ directory not found is normal; file parse errors should be logged
133
+ if (err.code !== 'ENOENT') {
134
+ console.warn(`[harmonia] Warning: failed to load roles from ${rolesDir}:`, err);
135
+ }
136
+ }
137
+ return roles;
138
+ }
139
+ /**
140
+ * Load artifact schemas from schemas/ directory.
141
+ * Schema files are named: <artifactId>.json or <artifactId>.<stepId>.json
142
+ */
143
+ async function loadSchemas(pluginPath) {
144
+ const schemasDir = join(pluginPath, 'schemas');
145
+ const schemas = {};
146
+ try {
147
+ const files = await readdir(schemasDir);
148
+ for (const file of files) {
149
+ if (!file.endsWith('.json'))
150
+ continue;
151
+ const schemaId = parse(file).name; // e.g., "prd" or "prd.draft"
152
+ const content = await readFile(join(schemasDir, file), 'utf-8');
153
+ schemas[schemaId] = JSON.parse(content);
154
+ }
155
+ }
156
+ catch (err) {
157
+ // schemas/ directory not found is normal; parse errors should be logged
158
+ if (err.code !== 'ENOENT') {
159
+ console.warn(`[harmonia] Warning: failed to load schemas from ${schemasDir}:`, err);
160
+ }
161
+ }
162
+ return schemas;
163
+ }
164
+ /**
165
+ * Try to load actions from tools/index.js (optional).
166
+ * The module should export a registerActions function.
167
+ */
168
+ async function loadActions(pluginPath) {
169
+ const toolsPath = join(pluginPath, 'tools', 'index.js');
170
+ if (!(await fileExists(toolsPath))) {
171
+ return {};
172
+ }
173
+ try {
174
+ const mod = await import(toolsPath);
175
+ if (typeof mod.registerActions === 'function') {
176
+ const actions = {};
177
+ mod.registerActions({
178
+ register: (name, handler) => {
179
+ actions[name] = handler;
180
+ },
181
+ });
182
+ return actions;
183
+ }
184
+ }
185
+ catch (err) {
186
+ console.warn(`[harmonia] Warning: failed to load actions from ${toolsPath}:`, err);
187
+ }
188
+ return {};
189
+ }
190
+ /**
191
+ * Try to load hook creator from hooks/index.js (optional).
192
+ * The module should export a createHooks function.
193
+ */
194
+ async function loadHookCreator(pluginPath) {
195
+ const hooksPath = join(pluginPath, 'hooks', 'index.js');
196
+ if (!(await fileExists(hooksPath))) {
197
+ return undefined;
198
+ }
199
+ try {
200
+ const mod = await import(hooksPath);
201
+ if (typeof mod.createHooks === 'function') {
202
+ return mod.createHooks;
203
+ }
204
+ }
205
+ catch (err) {
206
+ console.warn(`[harmonia] Warning: failed to load hooks from ${hooksPath}:`, err);
207
+ }
208
+ return undefined;
209
+ }
210
+ // ─── Public API ───
211
+ /**
212
+ * Load a workflow plugin from a directory.
213
+ *
214
+ * Full loading flow:
215
+ * 1. Read workflow.json → parse definition + artifact definitions
216
+ * 2. Validate the workflow definition (static analysis)
217
+ * 3. Load roles from roles/
218
+ * 4. Load schemas from schemas/
219
+ * 5. Optionally load actions from tools/index.js
220
+ * 6. Optionally load hook creator from hooks/index.js
221
+ *
222
+ * @param pluginPath - Absolute path to the plugin directory
223
+ * @param config - Optional plugin configuration
224
+ * @param skipValidation - Skip workflow validation (for testing)
225
+ */
226
+ export async function loadPlugin(pluginPath, config, skipValidation = false) {
227
+ // Step 1: Load definition
228
+ const { definition, artifactDefinitions } = await loadDefinition(pluginPath);
229
+ // Step 2: Load roles
230
+ const roles = await loadRoles(pluginPath);
231
+ // Step 3: Validate (using role IDs for reference checking)
232
+ if (!skipValidation) {
233
+ const roleIds = new Set(Object.keys(roles));
234
+ const errors = validateWorkflow(definition, roleIds, artifactDefinitions);
235
+ if (errors.length > 0) {
236
+ throw new PluginValidationError(pluginPath, errors);
237
+ }
238
+ }
239
+ // Step 4: Load schemas
240
+ const artifactSchemas = await loadSchemas(pluginPath);
241
+ // Step 5: Load actions (optional)
242
+ const actions = await loadActions(pluginPath);
243
+ // Step 6: Load hook creator (optional)
244
+ const hooks = await loadHookCreator(pluginPath);
245
+ return {
246
+ name: definition.name,
247
+ definition,
248
+ roles,
249
+ artifactSchemas,
250
+ artifactDefinitions,
251
+ actions,
252
+ hooks,
253
+ config,
254
+ pluginDir: pluginPath,
255
+ };
256
+ }
257
+ /**
258
+ * Discover registered plugins from a config.json file.
259
+ *
260
+ * Config format:
261
+ * ```json
262
+ * {
263
+ * "workflows": {
264
+ * "dev": { "path": "/path/to/dev/plugin" },
265
+ * "custom": { "path": "/path/to/custom", "config": { ... } }
266
+ * }
267
+ * }
268
+ * ```
269
+ */
270
+ export async function discoverPlugins(configPath) {
271
+ if (!(await fileExists(configPath))) {
272
+ return [];
273
+ }
274
+ try {
275
+ const content = await readFile(configPath, 'utf-8');
276
+ const config = JSON.parse(content);
277
+ if (!config.workflows || typeof config.workflows !== 'object') {
278
+ return [];
279
+ }
280
+ return Object.entries(config.workflows).map(([name, entry]) => ({
281
+ name,
282
+ path: entry.path,
283
+ config: entry.config,
284
+ }));
285
+ }
286
+ catch {
287
+ return [];
288
+ }
289
+ }
290
+ // ─── Workflow resolution ───
291
+ /**
292
+ * Resolve the actual directory for a workflow name.
293
+ * Searches only the single workflows directory (<data_dir>/harmonia/.workflows/).
294
+ */
295
+ export async function resolveWorkflowDir(workflowsDir, name) {
296
+ const workflowPath = join(workflowsDir, name, 'workflow.json');
297
+ if (await fileExists(workflowPath)) {
298
+ return join(workflowsDir, name);
299
+ }
300
+ throw new WorkflowNotFoundError(name, [join(workflowsDir, name)]);
301
+ }
302
+ /**
303
+ * Load a single workflow by name.
304
+ * Delegates to loadPlugin() internally.
305
+ *
306
+ * @param workflowsDir - Workflows directory (<data_dir>/harmonia/.workflows)
307
+ * @param name - Workflow name (directory name)
308
+ */
309
+ export async function loadWorkflow(workflowsDir, name) {
310
+ const workflowDir = await resolveWorkflowDir(workflowsDir, name);
311
+ return loadPlugin(workflowDir, undefined, false);
312
+ }
313
+ /**
314
+ * List all available workflow names from the workflows directory.
315
+ *
316
+ * @param workflowsDir - Workflows directory (<data_dir>/harmonia/.workflows)
317
+ */
318
+ export async function listWorkflows(workflowsDir) {
319
+ const names = [];
320
+ try {
321
+ const entries = await readdir(workflowsDir, { withFileTypes: true });
322
+ for (const e of entries) {
323
+ if (e.isDirectory())
324
+ names.push(e.name);
325
+ }
326
+ }
327
+ catch {
328
+ // workflows dir doesn't exist yet — that's fine
329
+ }
330
+ return names.sort();
331
+ }
332
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/core/plugin.ts"],"names":[],"mappings":"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"}
@@ -10,20 +10,19 @@
10
10
  * Structure:
11
11
  * <data_dir>/
12
12
  * ├── registry.json # { projects: { "my-app": { dir: "/path/to/src", ... } } }
13
- * ├── overrides.json # global overrides (optional)
14
13
  * ├── my-app/
15
14
  * │ ├── overrides.json # project-level overrides (optional)
16
15
  * │ ├── issues.json # project-level issue tracking (optional)
17
16
  * │ ├── iter-1/
18
17
  * │ │ ├── state.json
19
- * │ │ ├── docs/
18
+ * │ │ ├── artifacts/
20
19
  * │ │ ├── reviews.json
21
20
  * │ │ └── ...
22
21
  * │ ├── iter-2/
23
22
  * │ │ └── ...
24
23
  * │ ├── patch-1/
25
24
  * │ │ ├── state.json # type: "patch", clarify/design skipped
26
- * │ │ ├── docs/
25
+ * │ │ ├── artifacts/
27
26
  * │ │ └── ...
28
27
  * └── another-project/
29
28
  * └── ...
@@ -99,7 +98,7 @@ export declare function unregisterProject(projectName: string, keepData?: boolea
99
98
  export declare function getIterationDir(projectName: string, iteration: number): string;
100
99
  /**
101
100
  * Start a new iteration for a project.
102
- * Creates the iteration directory (with docs/ subdirectory) and updates the registry.
101
+ * Creates the iteration directory (with artifacts/ subdirectory) and updates the registry.
103
102
  *
104
103
  * @returns The new iteration number
105
104
  */
@@ -111,7 +110,7 @@ export declare function startIteration(projectName: string): Promise<number>;
111
110
  export declare function getPatchDir(projectName: string, patch: number): string;
112
111
  /**
113
112
  * Start a new patch for a project.
114
- * Creates the patch directory (with docs/ subdirectory) and updates the registry.
113
+ * Creates the patch directory (with artifacts/ subdirectory) and updates the registry.
115
114
  *
116
115
  * @returns The new patch number
117
116
  */
@@ -10,20 +10,19 @@
10
10
  * Structure:
11
11
  * <data_dir>/
12
12
  * ├── registry.json # { projects: { "my-app": { dir: "/path/to/src", ... } } }
13
- * ├── overrides.json # global overrides (optional)
14
13
  * ├── my-app/
15
14
  * │ ├── overrides.json # project-level overrides (optional)
16
15
  * │ ├── issues.json # project-level issue tracking (optional)
17
16
  * │ ├── iter-1/
18
17
  * │ │ ├── state.json
19
- * │ │ ├── docs/
18
+ * │ │ ├── artifacts/
20
19
  * │ │ ├── reviews.json
21
20
  * │ │ └── ...
22
21
  * │ ├── iter-2/
23
22
  * │ │ └── ...
24
23
  * │ ├── patch-1/
25
24
  * │ │ ├── state.json # type: "patch", clarify/design skipped
26
- * │ │ ├── docs/
25
+ * │ │ ├── artifacts/
27
26
  * │ │ └── ...
28
27
  * └── another-project/
29
28
  * └── ...
@@ -138,7 +137,7 @@ export function getIterationDir(projectName, iteration) {
138
137
  }
139
138
  /**
140
139
  * Start a new iteration for a project.
141
- * Creates the iteration directory (with docs/ subdirectory) and updates the registry.
140
+ * Creates the iteration directory (with artifacts/ subdirectory) and updates the registry.
142
141
  *
143
142
  * @returns The new iteration number
144
143
  */
@@ -152,9 +151,9 @@ export async function startIteration(projectName) {
152
151
  entry.currentIteration = newIteration;
153
152
  entry.totalIterations = newIteration;
154
153
  entry.activeContext = `iter-${newIteration}`;
155
- // Create iteration directory with docs subdirectory
154
+ // Create iteration directory with artifacts subdirectory
156
155
  const iterDir = getIterationDir(projectName, newIteration);
157
- await mkdir(join(iterDir, 'docs'), { recursive: true });
156
+ await mkdir(join(iterDir, 'artifacts'), { recursive: true });
158
157
  await writeRegistry(registry);
159
158
  return newIteration;
160
159
  }
@@ -167,7 +166,7 @@ export function getPatchDir(projectName, patch) {
167
166
  }
168
167
  /**
169
168
  * Start a new patch for a project.
170
- * Creates the patch directory (with docs/ subdirectory) and updates the registry.
169
+ * Creates the patch directory (with artifacts/ subdirectory) and updates the registry.
171
170
  *
172
171
  * @returns The new patch number
173
172
  */
@@ -181,9 +180,9 @@ export async function startPatch(projectName) {
181
180
  entry.currentPatch = newPatch;
182
181
  entry.totalPatches = newPatch;
183
182
  entry.activeContext = `patch-${newPatch}`;
184
- // Create patch directory with docs subdirectory
183
+ // Create patch directory with artifacts subdirectory
185
184
  const patchDir = getPatchDir(projectName, newPatch);
186
- await mkdir(join(patchDir, 'docs'), { recursive: true });
185
+ await mkdir(join(patchDir, 'artifacts'), { recursive: true });
187
186
  await writeRegistry(registry);
188
187
  return newPatch;
189
188
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,26 @@
1
1
  /**
2
- * Document review state management — <context_dir>/reviews.json
2
+ * Artifact review state management — <context_dir>/reviews.json
3
3
  *
4
- * Tracks which documents are pending review, approved, or rejected.
5
- * All public functions accept an optional contextDir parameter.
4
+ * Tracks which artifacts are pending review, approved, or rejected.
6
5
  */
7
- import type { DocReviewState } from './types.js';
6
+ import type { ReviewState } from './types.js';
8
7
  /**
9
8
  * Read the reviews state for a project context.
10
9
  */
11
- export declare function readReviews(projectName: string, iteration: number, contextDir?: string): Promise<Record<string, DocReviewState>>;
10
+ export declare function readReviews(projectName: string, iteration: number, contextDir?: string): Promise<Record<string, ReviewState>>;
12
11
  /**
13
- * Submit a document for review. Sets status to "pending".
12
+ * Submit an artifact for review. Sets status to "pending".
14
13
  */
15
- export declare function submitForReview(projectName: string, iteration: number, docId: string, contextDir?: string): Promise<DocReviewState>;
14
+ export declare function submitForReview(projectName: string, iteration: number, artifactId: string, contextDir?: string): Promise<ReviewState>;
16
15
  /**
17
- * Approve or reject a document review.
16
+ * Approve or reject an artifact review.
18
17
  */
19
- export declare function resolveReview(projectName: string, iteration: number, docId: string, status: 'approved' | 'rejected', comment?: string, contextDir?: string): Promise<DocReviewState>;
18
+ export declare function resolveReview(projectName: string, iteration: number, artifactId: string, status: 'approved' | 'rejected', comment?: string, contextDir?: string): Promise<ReviewState>;
20
19
  /**
21
- * Get the review state for a specific document.
20
+ * Get the review state for a specific artifact.
22
21
  */
23
- export declare function getDocReview(projectName: string, iteration: number, docId: string, contextDir?: string): Promise<DocReviewState | null>;
22
+ export declare function getArtifactReview(projectName: string, iteration: number, artifactId: string, contextDir?: string): Promise<ReviewState | null>;
24
23
  /**
25
24
  * Get all pending reviews for a project context.
26
25
  */
27
- export declare function getPendingReviews(projectName: string, iteration: number, contextDir?: string): Promise<DocReviewState[]>;
26
+ export declare function getPendingReviews(projectName: string, iteration: number, contextDir?: string): Promise<ReviewState[]>;
@@ -1,16 +1,13 @@
1
1
  /**
2
- * Document review state management — <context_dir>/reviews.json
2
+ * Artifact review state management — <context_dir>/reviews.json
3
3
  *
4
- * Tracks which documents are pending review, approved, or rejected.
5
- * All public functions accept an optional contextDir parameter.
4
+ * Tracks which artifacts are pending review, approved, or rejected.
6
5
  */
7
6
  import { readFile, writeFile, mkdir } from 'node:fs/promises';
8
7
  import { join, dirname } from 'node:path';
9
- import { getIterationDir } from './registry.js';
10
8
  const REVIEWS_FILE = 'reviews.json';
11
9
  function reviewsPath(projectName, iteration, contextDir) {
12
- const base = contextDir ?? getIterationDir(projectName, iteration);
13
- return join(base, REVIEWS_FILE);
10
+ return join(contextDir, REVIEWS_FILE);
14
11
  }
15
12
  /**
16
13
  * Read the reviews state for a project context.
@@ -19,7 +16,7 @@ export async function readReviews(projectName, iteration, contextDir) {
19
16
  try {
20
17
  const content = await readFile(reviewsPath(projectName, iteration, contextDir), 'utf-8');
21
18
  const data = JSON.parse(content);
22
- return data.docs ?? {};
19
+ return data.artifacts ?? {};
23
20
  }
24
21
  catch {
25
22
  return {};
@@ -28,37 +25,37 @@ export async function readReviews(projectName, iteration, contextDir) {
28
25
  /**
29
26
  * Write reviews state to disk.
30
27
  */
31
- async function writeReviews(projectName, iteration, docs, contextDir) {
28
+ async function writeReviews(projectName, iteration, artifacts, contextDir) {
32
29
  const filePath = reviewsPath(projectName, iteration, contextDir);
33
30
  await mkdir(dirname(filePath), { recursive: true });
34
- const data = { docs };
31
+ const data = { artifacts };
35
32
  await writeFile(filePath, JSON.stringify(data, null, 2) + '\n', 'utf-8');
36
33
  }
37
34
  /**
38
- * Submit a document for review. Sets status to "pending".
35
+ * Submit an artifact for review. Sets status to "pending".
39
36
  */
40
- export async function submitForReview(projectName, iteration, docId, contextDir) {
37
+ export async function submitForReview(projectName, iteration, artifactId, contextDir) {
41
38
  const reviews = await readReviews(projectName, iteration, contextDir);
42
39
  const state = {
43
- docId,
40
+ artifactId,
44
41
  status: 'pending',
45
42
  submittedAt: new Date().toISOString(),
46
43
  };
47
- reviews[docId] = state;
44
+ reviews[artifactId] = state;
48
45
  await writeReviews(projectName, iteration, reviews, contextDir);
49
46
  return state;
50
47
  }
51
48
  /**
52
- * Approve or reject a document review.
49
+ * Approve or reject an artifact review.
53
50
  */
54
- export async function resolveReview(projectName, iteration, docId, status, comment, contextDir) {
51
+ export async function resolveReview(projectName, iteration, artifactId, status, comment, contextDir) {
55
52
  const reviews = await readReviews(projectName, iteration, contextDir);
56
- const existing = reviews[docId];
53
+ const existing = reviews[artifactId];
57
54
  if (!existing) {
58
- throw new Error(`No review pending for document "${docId}". Submit it for review first.`);
55
+ throw new Error(`No review pending for artifact "${artifactId}". Submit it for review first.`);
59
56
  }
60
57
  if (existing.status !== 'pending') {
61
- throw new Error(`Document "${docId}" review is already ${existing.status}.`);
58
+ throw new Error(`Artifact "${artifactId}" review is already ${existing.status}.`);
62
59
  }
63
60
  existing.status = status;
64
61
  existing.reviewedAt = new Date().toISOString();
@@ -69,11 +66,11 @@ export async function resolveReview(projectName, iteration, docId, status, comme
69
66
  return existing;
70
67
  }
71
68
  /**
72
- * Get the review state for a specific document.
69
+ * Get the review state for a specific artifact.
73
70
  */
74
- export async function getDocReview(projectName, iteration, docId, contextDir) {
71
+ export async function getArtifactReview(projectName, iteration, artifactId, contextDir) {
75
72
  const reviews = await readReviews(projectName, iteration, contextDir);
76
- return reviews[docId] ?? null;
73
+ return reviews[artifactId] ?? null;
77
74
  }
78
75
  /**
79
76
  * Get all pending reviews for a project context.
@@ -1 +1 @@
1
- {"version":3,"file":"reviews.js","sourceRoot":"","sources":["../../src/core/reviews.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reviews.js","sourceRoot":"","sources":["../../src/core/reviews.ts"],"names":[],"mappings":"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"}