@s_s/harmonia 1.2.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 (180) 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 +18 -11
  12. package/build/core/dispatch.js +43 -33
  13. package/build/core/dispatch.js.map +1 -1
  14. package/build/core/issues.d.ts +37 -0
  15. package/build/core/issues.js +100 -0
  16. package/build/core/issues.js.map +1 -0
  17. package/build/core/overrides.d.ts +19 -26
  18. package/build/core/overrides.js +32 -98
  19. package/build/core/overrides.js.map +1 -1
  20. package/build/core/plugin.d.ts +86 -0
  21. package/build/core/plugin.js +332 -0
  22. package/build/core/plugin.js.map +1 -0
  23. package/build/core/registry.d.ts +36 -3
  24. package/build/core/registry.js +63 -5
  25. package/build/core/registry.js.map +1 -1
  26. package/build/core/reviews.d.ts +13 -13
  27. package/build/core/reviews.js +31 -32
  28. package/build/core/reviews.js.map +1 -1
  29. package/build/core/schema.d.ts +43 -15
  30. package/build/core/schema.js +124 -20
  31. package/build/core/schema.js.map +1 -1
  32. package/build/core/state.d.ts +29 -22
  33. package/build/core/state.js +49 -81
  34. package/build/core/state.js.map +1 -1
  35. package/build/core/steps.d.ts +15 -15
  36. package/build/core/steps.js +32 -33
  37. package/build/core/steps.js.map +1 -1
  38. package/build/core/tree-utils.d.ts +52 -0
  39. package/build/core/tree-utils.js +226 -0
  40. package/build/core/tree-utils.js.map +1 -0
  41. package/build/core/types.d.ts +417 -117
  42. package/build/core/types.js +15 -1
  43. package/build/core/types.js.map +1 -1
  44. package/build/core/workflow-engine.d.ts +68 -0
  45. package/build/core/workflow-engine.js +821 -0
  46. package/build/core/workflow-engine.js.map +1 -0
  47. package/build/core/workflow-validator.d.ts +22 -0
  48. package/build/core/workflow-validator.js +489 -0
  49. package/build/core/workflow-validator.js.map +1 -0
  50. package/build/index.js +28 -25
  51. package/build/index.js.map +1 -1
  52. package/build/setup/inject.d.ts +4 -4
  53. package/build/setup/inject.js +6 -6
  54. package/build/setup/inject.js.map +1 -1
  55. package/build/setup/templates.d.ts +9 -7
  56. package/build/setup/templates.js +68 -103
  57. package/build/setup/templates.js.map +1 -1
  58. package/build/tools/artifact-approve.d.ts +8 -0
  59. package/build/tools/artifact-approve.js +94 -0
  60. package/build/tools/artifact-approve.js.map +1 -0
  61. package/build/tools/artifact-schema.d.ts +12 -0
  62. package/build/tools/artifact-schema.js +148 -0
  63. package/build/tools/artifact-schema.js.map +1 -0
  64. package/build/tools/artifact-tools.d.ts +18 -0
  65. package/build/tools/artifact-tools.js +465 -0
  66. package/build/tools/artifact-tools.js.map +1 -0
  67. package/build/tools/{report-dispatch.d.ts → dispatch-report.d.ts} +7 -3
  68. package/build/tools/dispatch-report.js +261 -0
  69. package/build/tools/dispatch-report.js.map +1 -0
  70. package/build/tools/engine-helpers.d.ts +41 -0
  71. package/build/tools/engine-helpers.js +182 -0
  72. package/build/tools/engine-helpers.js.map +1 -0
  73. package/build/tools/get-project-status.d.ts +6 -4
  74. package/build/tools/get-project-status.js +308 -246
  75. package/build/tools/get-project-status.js.map +1 -1
  76. package/build/tools/get-role-prompt.d.ts +1 -1
  77. package/build/tools/get-role-prompt.js +7 -41
  78. package/build/tools/get-role-prompt.js.map +1 -1
  79. package/build/tools/issue-tools.d.ts +10 -0
  80. package/build/tools/issue-tools.js +169 -0
  81. package/build/tools/issue-tools.js.map +1 -0
  82. package/build/tools/iteration-start.d.ts +7 -4
  83. package/build/tools/iteration-start.js +51 -20
  84. package/build/tools/iteration-start.js.map +1 -1
  85. package/build/tools/loop-done.d.ts +11 -0
  86. package/build/tools/loop-done.js +109 -0
  87. package/build/tools/loop-done.js.map +1 -0
  88. package/build/tools/patch-start.d.ts +16 -0
  89. package/build/tools/patch-start.js +122 -0
  90. package/build/tools/patch-start.js.map +1 -0
  91. package/build/tools/project-init.d.ts +5 -5
  92. package/build/tools/project-init.js +47 -18
  93. package/build/tools/project-init.js.map +1 -1
  94. package/build/tools/role-dispatch.d.ts +55 -0
  95. package/build/tools/role-dispatch.js +508 -0
  96. package/build/tools/role-dispatch.js.map +1 -0
  97. package/build/tools/utils.d.ts +40 -0
  98. package/build/tools/utils.js +97 -0
  99. package/build/tools/utils.js.map +1 -0
  100. package/package.json +1 -1
  101. package/{build/hooks/claude-code.js → workflows/dev/hooks/claude.js} +34 -23
  102. package/{build → workflows/dev}/hooks/content.js +27 -18
  103. package/workflows/dev/hooks/index.js +52 -0
  104. package/{build → workflows/dev}/hooks/openclaw.js +31 -20
  105. package/{build → workflows/dev}/hooks/opencode.js +31 -20
  106. package/workflows/dev/roles/architect.md +68 -28
  107. package/workflows/dev/roles/coordinator.md +103 -0
  108. package/workflows/dev/roles/developer.md +5 -5
  109. package/workflows/dev/roles/tester.md +19 -19
  110. package/workflows/dev/schemas/api-contract.json +42 -0
  111. package/workflows/dev/schemas/api-design.json +30 -13
  112. package/workflows/dev/schemas/data-model.json +20 -7
  113. package/workflows/dev/schemas/prd.completeness-check.json +6 -5
  114. package/workflows/dev/schemas/prd.draft.json +13 -5
  115. package/workflows/dev/schemas/prd.final.json +34 -11
  116. package/workflows/dev/schemas/prd.json +29 -11
  117. package/workflows/dev/schemas/prd.requirements.json +6 -5
  118. package/workflows/dev/schemas/prototype.json +6 -2
  119. package/workflows/dev/schemas/task-breakdown.coarse.json +4 -3
  120. package/workflows/dev/schemas/task-breakdown.dependencies.json +5 -4
  121. package/workflows/dev/schemas/task-breakdown.detailed.json +8 -3
  122. package/workflows/dev/schemas/task-breakdown.final.json +8 -3
  123. package/workflows/dev/schemas/task-breakdown.json +8 -3
  124. package/workflows/dev/schemas/tech-design.analysis.json +6 -5
  125. package/workflows/dev/schemas/tech-design.draft.json +14 -5
  126. package/workflows/dev/schemas/tech-design.final.json +39 -13
  127. package/workflows/dev/schemas/tech-design.json +34 -13
  128. package/workflows/dev/schemas/tech-design.research.json +21 -0
  129. package/workflows/dev/schemas/test-plan.json +17 -7
  130. package/workflows/dev/schemas/test-report.json +26 -9
  131. package/workflows/dev/schemas/user-stories.json +7 -3
  132. package/workflows/dev/tools/index.js +23 -0
  133. package/workflows/dev/workflow.json +234 -101
  134. package/build/core/docs.d.ts +0 -32
  135. package/build/core/docs.js +0 -91
  136. package/build/core/docs.js.map +0 -1
  137. package/build/core/workflow.d.ts +0 -33
  138. package/build/core/workflow.js +0 -140
  139. package/build/core/workflow.js.map +0 -1
  140. package/build/hooks/claude-code.d.ts +0 -20
  141. package/build/hooks/claude-code.js.map +0 -1
  142. package/build/hooks/content.d.ts +0 -43
  143. package/build/hooks/content.js.map +0 -1
  144. package/build/hooks/install.d.ts +0 -40
  145. package/build/hooks/install.js +0 -63
  146. package/build/hooks/install.js.map +0 -1
  147. package/build/hooks/openclaw.d.ts +0 -24
  148. package/build/hooks/openclaw.js.map +0 -1
  149. package/build/hooks/opencode.d.ts +0 -29
  150. package/build/hooks/opencode.js.map +0 -1
  151. package/build/tools/approve-doc.d.ts +0 -6
  152. package/build/tools/approve-doc.js +0 -108
  153. package/build/tools/approve-doc.js.map +0 -1
  154. package/build/tools/dispatch-role.d.ts +0 -16
  155. package/build/tools/dispatch-role.js +0 -277
  156. package/build/tools/dispatch-role.js.map +0 -1
  157. package/build/tools/doc-tools.d.ts +0 -16
  158. package/build/tools/doc-tools.js +0 -389
  159. package/build/tools/doc-tools.js.map +0 -1
  160. package/build/tools/override-tools.d.ts +0 -6
  161. package/build/tools/override-tools.js +0 -129
  162. package/build/tools/override-tools.js.map +0 -1
  163. package/build/tools/report-dispatch.js +0 -194
  164. package/build/tools/report-dispatch.js.map +0 -1
  165. package/build/tools/set-scale.d.ts +0 -6
  166. package/build/tools/set-scale.js +0 -107
  167. package/build/tools/set-scale.js.map +0 -1
  168. package/build/tools/setup-project.d.ts +0 -8
  169. package/build/tools/setup-project.js +0 -116
  170. package/build/tools/setup-project.js.map +0 -1
  171. package/build/tools/update-phase.d.ts +0 -12
  172. package/build/tools/update-phase.js +0 -159
  173. package/build/tools/update-phase.js.map +0 -1
  174. package/workflows/dev/roles/pm.md +0 -99
  175. package/workflows/dev/schemas/deploy.json +0 -20
  176. package/workflows/dev/schemas/fsd.json +0 -25
  177. package/workflows/dev/schemas/project-plan.json +0 -20
  178. package/workflows/dev/schemas/retrospective.json +0 -20
  179. package/workflows/dev/schemas/risk-assessment.json +0 -15
  180. package/workflows/dev/schemas/tech-design.api-contract.json +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/core/overrides.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/core/overrides.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
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 type { WorkflowPlugin, PluginEntry } from './types.js';
20
+ export declare class PluginLoadError extends Error {
21
+ constructor(pluginPath: string, reason: string);
22
+ }
23
+ export declare class PluginValidationError extends Error {
24
+ errors: {
25
+ type: string;
26
+ message: string;
27
+ nodeId?: string;
28
+ }[];
29
+ constructor(pluginPath: string, errors: {
30
+ type: string;
31
+ message: string;
32
+ nodeId?: string;
33
+ }[]);
34
+ }
35
+ export declare class WorkflowNotFoundError extends Error {
36
+ constructor(name: string, searched: string[]);
37
+ }
38
+ /**
39
+ * Load a workflow plugin from a directory.
40
+ *
41
+ * Full loading flow:
42
+ * 1. Read workflow.json → parse definition + artifact definitions
43
+ * 2. Validate the workflow definition (static analysis)
44
+ * 3. Load roles from roles/
45
+ * 4. Load schemas from schemas/
46
+ * 5. Optionally load actions from tools/index.js
47
+ * 6. Optionally load hook creator from hooks/index.js
48
+ *
49
+ * @param pluginPath - Absolute path to the plugin directory
50
+ * @param config - Optional plugin configuration
51
+ * @param skipValidation - Skip workflow validation (for testing)
52
+ */
53
+ export declare function loadPlugin(pluginPath: string, config?: unknown, skipValidation?: boolean): Promise<WorkflowPlugin>;
54
+ /**
55
+ * Discover registered plugins from a config.json file.
56
+ *
57
+ * Config format:
58
+ * ```json
59
+ * {
60
+ * "workflows": {
61
+ * "dev": { "path": "/path/to/dev/plugin" },
62
+ * "custom": { "path": "/path/to/custom", "config": { ... } }
63
+ * }
64
+ * }
65
+ * ```
66
+ */
67
+ export declare function discoverPlugins(configPath: string): Promise<PluginEntry[]>;
68
+ /**
69
+ * Resolve the actual directory for a workflow name.
70
+ * Searches only the single workflows directory (<data_dir>/harmonia/.workflows/).
71
+ */
72
+ export declare function resolveWorkflowDir(workflowsDir: string, name: string): Promise<string>;
73
+ /**
74
+ * Load a single workflow by name.
75
+ * Delegates to loadPlugin() internally.
76
+ *
77
+ * @param workflowsDir - Workflows directory (<data_dir>/harmonia/.workflows)
78
+ * @param name - Workflow name (directory name)
79
+ */
80
+ export declare function loadWorkflow(workflowsDir: string, name: string): Promise<WorkflowPlugin>;
81
+ /**
82
+ * List all available workflow names from the workflows directory.
83
+ *
84
+ * @param workflowsDir - Workflows directory (<data_dir>/harmonia/.workflows)
85
+ */
86
+ export declare function listWorkflows(workflowsDir: string): Promise<string[]>;
@@ -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,16 +10,20 @@
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)
15
+ * │ ├── issues.json # project-level issue tracking (optional)
16
16
  * │ ├── iter-1/
17
17
  * │ │ ├── state.json
18
- * │ │ ├── docs/
18
+ * │ │ ├── artifacts/
19
19
  * │ │ ├── reviews.json
20
20
  * │ │ └── ...
21
21
  * │ ├── iter-2/
22
22
  * │ │ └── ...
23
+ * │ ├── patch-1/
24
+ * │ │ ├── state.json # type: "patch", clarify/design skipped
25
+ * │ │ ├── artifacts/
26
+ * │ │ └── ...
23
27
  * └── another-project/
24
28
  * └── ...
25
29
  */
@@ -34,6 +38,12 @@ export interface ProjectEntry {
34
38
  currentIteration: number;
35
39
  /** Total number of iterations created so far */
36
40
  totalIterations: number;
41
+ /** Currently active patch number (starts at 1, 0 means no patch started yet) */
42
+ currentPatch: number;
43
+ /** Total number of patches created so far */
44
+ totalPatches: number;
45
+ /** Active context identifier, e.g. "iter-1" or "patch-2". Empty string means no context. */
46
+ activeContext: string;
37
47
  }
38
48
  export interface Registry {
39
49
  projects: Record<string, ProjectEntry>;
@@ -88,8 +98,31 @@ export declare function unregisterProject(projectName: string, keepData?: boolea
88
98
  export declare function getIterationDir(projectName: string, iteration: number): string;
89
99
  /**
90
100
  * Start a new iteration for a project.
91
- * Creates the iteration directory (with docs/ subdirectory) and updates the registry.
101
+ * Creates the iteration directory (with artifacts/ subdirectory) and updates the registry.
92
102
  *
93
103
  * @returns The new iteration number
94
104
  */
95
105
  export declare function startIteration(projectName: string): Promise<number>;
106
+ /**
107
+ * Get the patch directory for a specific project patch.
108
+ * Pure path concatenation — does NOT check if the directory exists.
109
+ */
110
+ export declare function getPatchDir(projectName: string, patch: number): string;
111
+ /**
112
+ * Start a new patch for a project.
113
+ * Creates the patch directory (with artifacts/ subdirectory) and updates the registry.
114
+ *
115
+ * @returns The new patch number
116
+ */
117
+ export declare function startPatch(projectName: string): Promise<number>;
118
+ /**
119
+ * Resolve the active context directory for a project.
120
+ * Parses activeContext string (e.g. "iter-1", "patch-2") into an absolute path.
121
+ *
122
+ * @returns { dir: string, type: 'iteration' | 'patch', number: number } or null if no active context
123
+ */
124
+ export declare function resolveContextDir(projectName: string, activeContext: string): {
125
+ dir: string;
126
+ type: 'iteration' | 'patch';
127
+ number: number;
128
+ } | null;
@@ -10,16 +10,20 @@
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)
15
+ * │ ├── issues.json # project-level issue tracking (optional)
16
16
  * │ ├── iter-1/
17
17
  * │ │ ├── state.json
18
- * │ │ ├── docs/
18
+ * │ │ ├── artifacts/
19
19
  * │ │ ├── reviews.json
20
20
  * │ │ └── ...
21
21
  * │ ├── iter-2/
22
22
  * │ │ └── ...
23
+ * │ ├── patch-1/
24
+ * │ │ ├── state.json # type: "patch", clarify/design skipped
25
+ * │ │ ├── artifacts/
26
+ * │ │ └── ...
23
27
  * └── another-project/
24
28
  * └── ...
25
29
  */
@@ -84,6 +88,9 @@ export async function registerProject(projectName, projectDir, workflow) {
84
88
  createdAt: new Date().toISOString(),
85
89
  currentIteration: 0,
86
90
  totalIterations: 0,
91
+ currentPatch: 0,
92
+ totalPatches: 0,
93
+ activeContext: '',
87
94
  };
88
95
  // Create project data directory under global dir
89
96
  const dataDir = getProjectDataDir(projectName);
@@ -130,7 +137,7 @@ export function getIterationDir(projectName, iteration) {
130
137
  }
131
138
  /**
132
139
  * Start a new iteration for a project.
133
- * Creates the iteration directory (with docs/ subdirectory) and updates the registry.
140
+ * Creates the iteration directory (with artifacts/ subdirectory) and updates the registry.
134
141
  *
135
142
  * @returns The new iteration number
136
143
  */
@@ -143,10 +150,61 @@ export async function startIteration(projectName) {
143
150
  const newIteration = entry.totalIterations + 1;
144
151
  entry.currentIteration = newIteration;
145
152
  entry.totalIterations = newIteration;
146
- // Create iteration directory with docs subdirectory
153
+ entry.activeContext = `iter-${newIteration}`;
154
+ // Create iteration directory with artifacts subdirectory
147
155
  const iterDir = getIterationDir(projectName, newIteration);
148
- await mkdir(join(iterDir, 'docs'), { recursive: true });
156
+ await mkdir(join(iterDir, 'artifacts'), { recursive: true });
149
157
  await writeRegistry(registry);
150
158
  return newIteration;
151
159
  }
160
+ /**
161
+ * Get the patch directory for a specific project patch.
162
+ * Pure path concatenation — does NOT check if the directory exists.
163
+ */
164
+ export function getPatchDir(projectName, patch) {
165
+ return join(getProjectDataDir(projectName), `patch-${patch}`);
166
+ }
167
+ /**
168
+ * Start a new patch for a project.
169
+ * Creates the patch directory (with artifacts/ subdirectory) and updates the registry.
170
+ *
171
+ * @returns The new patch number
172
+ */
173
+ export async function startPatch(projectName) {
174
+ const registry = await readRegistry();
175
+ const entry = registry.projects[projectName];
176
+ if (!entry) {
177
+ throw new Error(`Project "${projectName}" not found in registry.`);
178
+ }
179
+ const newPatch = entry.totalPatches + 1;
180
+ entry.currentPatch = newPatch;
181
+ entry.totalPatches = newPatch;
182
+ entry.activeContext = `patch-${newPatch}`;
183
+ // Create patch directory with artifacts subdirectory
184
+ const patchDir = getPatchDir(projectName, newPatch);
185
+ await mkdir(join(patchDir, 'artifacts'), { recursive: true });
186
+ await writeRegistry(registry);
187
+ return newPatch;
188
+ }
189
+ /**
190
+ * Resolve the active context directory for a project.
191
+ * Parses activeContext string (e.g. "iter-1", "patch-2") into an absolute path.
192
+ *
193
+ * @returns { dir: string, type: 'iteration' | 'patch', number: number } or null if no active context
194
+ */
195
+ export function resolveContextDir(projectName, activeContext) {
196
+ if (!activeContext)
197
+ return null;
198
+ const iterMatch = activeContext.match(/^iter-(\d+)$/);
199
+ if (iterMatch) {
200
+ const num = parseInt(iterMatch[1], 10);
201
+ return { dir: getIterationDir(projectName, num), type: 'iteration', number: num };
202
+ }
203
+ const patchMatch = activeContext.match(/^patch-(\d+)$/);
204
+ if (patchMatch) {
205
+ const num = parseInt(patchMatch[1], 10);
206
+ return { dir: getPatchDir(projectName, num), type: 'patch', number: num };
207
+ }
208
+ return null;
209
+ }
152
210
  //# sourceMappingURL=registry.js.map
@@ -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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"}