@caiqueoak/flow 0.6.0 → 0.8.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 (173) hide show
  1. package/README.md +65 -43
  2. package/dist/artifacts/backlog.d.mts +16 -0
  3. package/dist/artifacts/backlog.d.mts.map +1 -0
  4. package/dist/artifacts/backlog.mjs +193 -0
  5. package/dist/artifacts/backlog.mjs.map +1 -0
  6. package/dist/artifacts/document.d.mts +6 -0
  7. package/dist/artifacts/document.d.mts.map +1 -0
  8. package/dist/artifacts/document.mjs +39 -0
  9. package/dist/artifacts/document.mjs.map +1 -0
  10. package/dist/artifacts/engineering.d.mts +5 -0
  11. package/dist/artifacts/engineering.d.mts.map +1 -0
  12. package/dist/artifacts/engineering.mjs +27 -0
  13. package/dist/artifacts/engineering.mjs.map +1 -0
  14. package/dist/artifacts/gates.d.mts +7 -0
  15. package/dist/artifacts/gates.d.mts.map +1 -0
  16. package/dist/artifacts/gates.mjs +42 -0
  17. package/dist/artifacts/gates.mjs.map +1 -0
  18. package/dist/artifacts/implementation-plan.d.mts +11 -0
  19. package/dist/artifacts/implementation-plan.d.mts.map +1 -0
  20. package/dist/artifacts/implementation-plan.mjs +30 -0
  21. package/dist/artifacts/implementation-plan.mjs.map +1 -0
  22. package/dist/artifacts/prd.d.mts +4 -0
  23. package/dist/artifacts/prd.d.mts.map +1 -0
  24. package/dist/artifacts/prd.mjs +13 -0
  25. package/dist/artifacts/prd.mjs.map +1 -0
  26. package/dist/artifacts/review.d.mts +11 -0
  27. package/dist/artifacts/review.d.mts.map +1 -0
  28. package/dist/artifacts/review.mjs +27 -0
  29. package/dist/artifacts/review.mjs.map +1 -0
  30. package/dist/artifacts/spec.d.mts +14 -0
  31. package/dist/artifacts/spec.d.mts.map +1 -0
  32. package/dist/artifacts/spec.mjs +50 -0
  33. package/dist/artifacts/spec.mjs.map +1 -0
  34. package/dist/artifacts/state.d.mts +44 -0
  35. package/dist/artifacts/state.d.mts.map +1 -0
  36. package/dist/artifacts/state.mjs +60 -0
  37. package/dist/artifacts/state.mjs.map +1 -0
  38. package/dist/artifacts/tasks.d.mts +10 -0
  39. package/dist/artifacts/tasks.d.mts.map +1 -0
  40. package/dist/artifacts/tasks.mjs +107 -0
  41. package/dist/artifacts/tasks.mjs.map +1 -0
  42. package/dist/artifacts/work-items.d.mts +21 -0
  43. package/dist/artifacts/work-items.d.mts.map +1 -0
  44. package/dist/artifacts/work-items.mjs +81 -0
  45. package/dist/artifacts/work-items.mjs.map +1 -0
  46. package/dist/cli/command-registry.d.mts +498 -0
  47. package/dist/cli/command-registry.d.mts.map +1 -0
  48. package/dist/cli/command-registry.mjs +230 -0
  49. package/dist/cli/command-registry.mjs.map +1 -0
  50. package/dist/cli.d.mts +3 -0
  51. package/dist/cli.d.mts.map +1 -0
  52. package/dist/cli.mjs +48 -0
  53. package/dist/cli.mjs.map +1 -0
  54. package/dist/commands/doctor.d.mts +21 -0
  55. package/dist/commands/doctor.d.mts.map +1 -0
  56. package/dist/commands/doctor.mjs +79 -0
  57. package/dist/commands/doctor.mjs.map +1 -0
  58. package/dist/commands/gates.d.mts +14 -0
  59. package/dist/commands/gates.d.mts.map +1 -0
  60. package/dist/commands/gates.mjs +136 -0
  61. package/dist/commands/gates.mjs.map +1 -0
  62. package/dist/commands/graph.d.mts +11 -0
  63. package/dist/commands/graph.d.mts.map +1 -0
  64. package/dist/commands/graph.mjs +78 -0
  65. package/dist/commands/graph.mjs.map +1 -0
  66. package/dist/commands/init.d.mts +6 -0
  67. package/dist/commands/init.d.mts.map +1 -0
  68. package/dist/commands/init.mjs +126 -0
  69. package/dist/commands/init.mjs.map +1 -0
  70. package/dist/commands/migrate.d.mts +27 -0
  71. package/dist/commands/migrate.d.mts.map +1 -0
  72. package/dist/commands/migrate.mjs +379 -0
  73. package/dist/commands/migrate.mjs.map +1 -0
  74. package/dist/commands/operations.d.mts +13 -0
  75. package/dist/commands/operations.d.mts.map +1 -0
  76. package/dist/commands/operations.mjs +340 -0
  77. package/dist/commands/operations.mjs.map +1 -0
  78. package/dist/commands/route.d.mts +12 -0
  79. package/dist/commands/route.d.mts.map +1 -0
  80. package/dist/commands/route.mjs +45 -0
  81. package/dist/commands/route.mjs.map +1 -0
  82. package/dist/commands/schemas.d.mts +5 -0
  83. package/dist/commands/schemas.d.mts.map +1 -0
  84. package/dist/commands/schemas.mjs +14 -0
  85. package/dist/commands/schemas.mjs.map +1 -0
  86. package/dist/commands/status.d.mts +4 -0
  87. package/dist/commands/status.d.mts.map +1 -0
  88. package/dist/commands/status.mjs +18 -0
  89. package/dist/commands/status.mjs.map +1 -0
  90. package/dist/commands/sync.d.mts +18 -0
  91. package/dist/commands/sync.d.mts.map +1 -0
  92. package/dist/commands/sync.mjs +29 -0
  93. package/dist/commands/sync.mjs.map +1 -0
  94. package/dist/commands/trace.d.mts +30 -0
  95. package/dist/commands/trace.d.mts.map +1 -0
  96. package/dist/commands/trace.mjs +111 -0
  97. package/dist/commands/trace.mjs.map +1 -0
  98. package/dist/commands/validate.d.mts +8 -0
  99. package/dist/commands/validate.d.mts.map +1 -0
  100. package/dist/commands/validate.mjs +82 -0
  101. package/dist/commands/validate.mjs.map +1 -0
  102. package/dist/domain/contracts.d.mts +203 -0
  103. package/dist/domain/contracts.d.mts.map +1 -0
  104. package/dist/domain/contracts.mjs +126 -0
  105. package/dist/domain/contracts.mjs.map +1 -0
  106. package/dist/domain/types.d.ts +45 -0
  107. package/dist/domain/types.d.ts.map +1 -0
  108. package/dist/domain/types.js +2 -0
  109. package/dist/domain/types.js.map +1 -0
  110. package/dist/entry.d.ts +3 -0
  111. package/dist/entry.d.ts.map +1 -0
  112. package/dist/entry.js +4 -0
  113. package/dist/entry.js.map +1 -0
  114. package/dist/shared/cli-io.d.mts +15 -0
  115. package/dist/shared/cli-io.d.mts.map +1 -0
  116. package/dist/shared/cli-io.mjs +83 -0
  117. package/dist/shared/cli-io.mjs.map +1 -0
  118. package/dist/shared/profiles.d.mts +17 -0
  119. package/dist/shared/profiles.d.mts.map +1 -0
  120. package/dist/shared/profiles.mjs +25 -0
  121. package/dist/shared/profiles.mjs.map +1 -0
  122. package/dist/shared/project-config.d.mts +21 -0
  123. package/dist/shared/project-config.d.mts.map +1 -0
  124. package/dist/shared/project-config.mjs +41 -0
  125. package/dist/shared/project-config.mjs.map +1 -0
  126. package/dist/shared/project-path.d.mts +3 -0
  127. package/dist/shared/project-path.d.mts.map +1 -0
  128. package/dist/shared/project-path.mjs +9 -0
  129. package/dist/shared/project-path.mjs.map +1 -0
  130. package/dist/shared/skill-installer.d.mts +2 -0
  131. package/dist/shared/skill-installer.d.mts.map +1 -0
  132. package/dist/shared/skill-installer.mjs +33 -0
  133. package/dist/shared/skill-installer.mjs.map +1 -0
  134. package/package.json +16 -8
  135. package/schemas/backlog.schema.json +85 -0
  136. package/schemas/config.schema.json +29 -0
  137. package/schemas/gates.schema.json +17 -0
  138. package/schemas/review.schema.json +28 -0
  139. package/schemas/tasks.schema.json +66 -0
  140. package/skills/flow/SKILL.md +10 -11
  141. package/skills/flow/build/step-01-execute-task.md +3 -3
  142. package/skills/flow/discovery/bmad-comparison.md +5 -0
  143. package/skills/flow/discovery/step-01-project.md +8 -3
  144. package/skills/flow/engineering/profiles/readability-first.md +1 -0
  145. package/skills/flow/engineering/step-02-synthesize.md +2 -2
  146. package/skills/flow/invariants.md +4 -4
  147. package/skills/flow/planning/step-01-create-tasks.md +3 -0
  148. package/skills/flow/planning/step-01-plan-work-item.md +2 -2
  149. package/skills/flow/planning/step-02-prepare-plan.md +1 -1
  150. package/skills/flow/review/step-01-review-work-item.md +2 -2
  151. package/skills/flow/specification/step-01-deepen-spec.md +7 -0
  152. package/src/artifacts/backlog.mjs +0 -157
  153. package/src/artifacts/document.mjs +0 -30
  154. package/src/artifacts/engineering.mjs +0 -26
  155. package/src/artifacts/gates.mjs +0 -28
  156. package/src/artifacts/implementation-plan.mjs +0 -27
  157. package/src/artifacts/prd.mjs +0 -12
  158. package/src/artifacts/state.mjs +0 -63
  159. package/src/artifacts/tasks.mjs +0 -90
  160. package/src/cli.mjs +0 -62
  161. package/src/commands/gates.mjs +0 -71
  162. package/src/commands/graph.mjs +0 -92
  163. package/src/commands/init.mjs +0 -111
  164. package/src/commands/migrate.mjs +0 -224
  165. package/src/commands/route.mjs +0 -135
  166. package/src/commands/status.mjs +0 -35
  167. package/src/commands/trace.mjs +0 -58
  168. package/src/commands/validate.mjs +0 -197
  169. package/src/shared/cli-io.mjs +0 -86
  170. package/src/shared/profiles.mjs +0 -27
  171. package/src/shared/project-config.mjs +0 -39
  172. package/src/shared/project-path.mjs +0 -10
  173. package/src/shared/skill-installer.mjs +0 -34
@@ -0,0 +1,230 @@
1
+ const common = [{ name: '--path', value: '<project>', description: 'Project root (default: current directory).' }];
2
+ export const COMMANDS = Object.freeze([
3
+ {
4
+ name: 'init',
5
+ description: 'Initialize Flow or refresh runtime integrations.',
6
+ usage: 'flow init [options]',
7
+ flags: [
8
+ ...common,
9
+ { name: '--runtime', value: '<list>' },
10
+ { name: '--profile', value: '<id>', default: 'readability-first' },
11
+ { name: '--existing-code', value: '<policy>', values: ['improve', 'preserve'] }
12
+ ],
13
+ effects: 'Writes config and runtime skills.',
14
+ when: 'Once per project and after an explicit package update.',
15
+ load: () => import('../commands/init.mjs'),
16
+ run: 'runInit'
17
+ },
18
+ {
19
+ name: 'doctor',
20
+ description: 'Diagnose versions, artifacts, schemas and integrations without writing.',
21
+ usage: 'flow doctor [--quick] [--json]',
22
+ flags: [...common, { name: '--quick' }, { name: '--json' }],
23
+ effects: 'Read-only.',
24
+ when: 'At every /flow start with --quick --json, or before migration.',
25
+ load: () => import('../commands/doctor.mjs'),
26
+ run: 'runDoctor'
27
+ },
28
+ {
29
+ name: 'migrate',
30
+ description: 'Plan or apply deterministic, recoverable structural migrations.',
31
+ usage: 'flow migrate --plan|--apply [--json]',
32
+ flags: [...common, { name: '--plan' }, { name: '--apply' }, { name: '--json' }],
33
+ effects: '--plan is read-only; --apply uses validated staging and a recoverable backup.',
34
+ when: 'After doctor reports an artifact version mismatch.',
35
+ load: () => import('../commands/migrate.mjs'),
36
+ run: 'runMigrate'
37
+ },
38
+ {
39
+ name: 'status',
40
+ description: 'Show persisted progress and derived eligibility/blocking.',
41
+ usage: 'flow status [--json]',
42
+ flags: [...common, { name: '--json' }],
43
+ effects: 'Read-only.',
44
+ when: 'To inspect progress.',
45
+ load: () => import('../commands/status.mjs'),
46
+ run: 'runStatus'
47
+ },
48
+ {
49
+ name: 'validate',
50
+ description: 'Run fast structural validation; gates are opt-in.',
51
+ usage: 'flow validate [--work-item W###] [--gates] [--json]',
52
+ flags: [
53
+ ...common,
54
+ { name: '--work-item', value: '<W###>' },
55
+ { name: '--gates' },
56
+ { name: '--pre-commit', value: '<W###-T###>' },
57
+ { name: '--skip-trace' },
58
+ { name: '--json' }
59
+ ],
60
+ effects: 'Read-only; --gates may execute configured processes.',
61
+ when: 'After structured changes and before commits.',
62
+ load: () => import('../commands/validate.mjs'),
63
+ run: 'runValidate'
64
+ },
65
+ {
66
+ name: 'route',
67
+ description: 'Resolve the next legal workflow step and safe validation scope.',
68
+ usage: 'flow route [--json]',
69
+ flags: [...common, { name: '--json' }],
70
+ effects: 'Read-only.',
71
+ when: 'After doctor and every completed workflow step.',
72
+ load: () => import('../commands/route.mjs'),
73
+ run: 'runRoute'
74
+ },
75
+ {
76
+ name: 'sync',
77
+ description: 'Materialize disposable projections from canonical work-items.',
78
+ usage: 'flow sync',
79
+ flags: common,
80
+ effects: 'Reads only canonical work-items; writes _flow/generated/ only.',
81
+ when: 'After canonical work-item changes.',
82
+ load: () => import('../commands/sync.mjs'),
83
+ run: 'runSync'
84
+ },
85
+ {
86
+ name: 'trace',
87
+ description: 'Resolve a permanent task ID against reachable Git history.',
88
+ usage: 'flow trace W###[-T###] [--json]',
89
+ arguments: [{ name: 'identity', required: true, description: 'Task W###-T### or aggregate work-item W###.' }],
90
+ flags: [...common, { name: '--json' }],
91
+ effects: 'Read-only Git inspection.',
92
+ when: 'After task completion and during review.',
93
+ load: () => import('../commands/trace.mjs'),
94
+ run: 'runTrace'
95
+ },
96
+ {
97
+ name: 'gates',
98
+ description: 'List or selectively run deterministic project gates.',
99
+ usage: 'flow gates list|run [filters]',
100
+ arguments: [{ name: 'action', required: true }],
101
+ flags: [
102
+ ...common,
103
+ { name: '--id', value: '<gate-id>' },
104
+ { name: '--task', value: '<W###-T###>' },
105
+ { name: '--work-item', value: '<W###>' },
106
+ { name: '--stage', value: '<stage>', values: ['task', 'work-item-review', 'full'] },
107
+ { name: '--all' },
108
+ { name: '--json' }
109
+ ],
110
+ effects: 'list is read-only; run executes selected commands.',
111
+ when: 'For the smallest safe verification scope.',
112
+ load: () => import('../commands/gates.mjs'),
113
+ run: 'runGates'
114
+ },
115
+ {
116
+ name: 'work-item',
117
+ description: 'Create or deterministically update backlog work-items.',
118
+ usage: 'flow work-item <create|set|priority|dependencies|blocker-add|blocker-resolve|promote|review-complete> ...',
119
+ arguments: [{ name: 'operation', required: true }],
120
+ flags: [
121
+ ...common,
122
+ { name: '--title', value: '<text>' },
123
+ { name: '--kind', value: '<kind>', values: ['feature', 'technical', 'maintenance'] },
124
+ { name: '--priority', value: '<integer>' },
125
+ { name: '--depends-on', value: '<W###,...>' },
126
+ { name: '--id', value: '<blocker-id>' },
127
+ { name: '--type', value: '<type>', values: ['external_action', 'consequential_decision'] },
128
+ { name: '--description', value: '<text>' },
129
+ { name: '--domain', value: '<domain>' }
130
+ ],
131
+ effects: 'Writes only artifacts in the target work-item folder.',
132
+ when: 'For deterministic backlog mutations.',
133
+ load: () => import('../commands/operations.mjs'),
134
+ run: 'runWorkItem'
135
+ },
136
+ {
137
+ name: 'task',
138
+ description: 'Create, update, start or commit tasks.',
139
+ usage: 'flow task <create|set|start|commit> W###[-T###] [options]',
140
+ arguments: [{ name: 'operation', required: true }],
141
+ flags: [
142
+ ...common,
143
+ { name: '--title', value: '<text>' },
144
+ { name: '--depends-on', value: '<T###,...>' },
145
+ { name: '--message', value: '<objective commit title>' },
146
+ { name: '--files', value: '<path,...>' }
147
+ ],
148
+ effects: 'Task commit creates the one canonical implementation commit.',
149
+ when: 'Only after spec maturity is ready.',
150
+ load: () => import('../commands/operations.mjs'),
151
+ run: 'runTask'
152
+ },
153
+ {
154
+ name: 'approval',
155
+ description: 'Persist an explicit human approval for a document revision.',
156
+ usage: 'flow approval record <path> [--at <ISO timestamp>]',
157
+ arguments: [{ name: 'operation', required: true }],
158
+ flags: [...common, { name: '--at', value: '<timestamp>' }],
159
+ effects: 'Updates approved frontmatter.',
160
+ when: 'Only after explicit approval of the exact document.',
161
+ load: () => import('../commands/operations.mjs'),
162
+ run: 'runApproval'
163
+ },
164
+ {
165
+ name: 'scope',
166
+ description: 'Validate the staged scope for one task before its implementation commit.',
167
+ usage: 'flow scope validate W###-T### --files <path,...> [--json]',
168
+ arguments: [{ name: 'operation', required: true }],
169
+ flags: [...common, { name: '--files', value: '<path,...>' }, { name: '--json' }],
170
+ effects: 'Read-only staged Git inspection and structural validation.',
171
+ when: 'Immediately before a task implementation commit.',
172
+ load: () => import('../commands/operations.mjs'),
173
+ run: 'runScope'
174
+ },
175
+ {
176
+ name: 'schemas',
177
+ description: 'Generate JSON Schemas from central contracts.',
178
+ usage: 'flow schemas',
179
+ flags: [],
180
+ effects: 'Writes package schemas.',
181
+ when: 'Build/release.',
182
+ load: () => import('../commands/schemas.mjs'),
183
+ run: 'runSchemas',
184
+ hidden: true
185
+ }
186
+ ]);
187
+ export const commandByName = (name) => COMMANDS.find((command) => command.name === name);
188
+ export function renderGlobalHelp(version) {
189
+ const rows = COMMANDS.filter((command) => !command.hidden).map((command) => ` ${command.name.padEnd(11)} ${command.description}`);
190
+ return `Flow ${version}\n\nUsage: npx --no-install flow <command> [options]\nEngineering baseline: Readability First.\n\nGlobal parameters:\n --help, -h Show help.\n --version, -v Show package version.\n --path <project> Select project root (default: current directory).\n\nCommands:\n${rows.join('\n')}\n\nRun flow <command> --help for syntax, values, effects and usage guidance.`;
191
+ }
192
+ export function renderCommandHelp(command) {
193
+ const argumentsText = command.arguments?.length
194
+ ? command.arguments
195
+ .map((argument) => ` ${argument.name}${argument.required ? ' (required)' : ''} — ${argument.description ?? 'Command argument.'}`)
196
+ .join('\n')
197
+ : ' (none)';
198
+ const flags = command.flags?.length
199
+ ? command.flags
200
+ .map((flag) => ` ${flag.name}${flag.value ? ` ${flag.value}` : ''}${flag.values ? ` (${flag.values.join('|')})` : ''}${flag.default ? ` [default: ${flag.default}]` : ''} — ${flag.description ?? 'Command option.'}`)
201
+ .join('\n')
202
+ : ' (none)';
203
+ return `${command.description}\n\nSyntax:\n ${command.usage}\n\nArguments:\n${argumentsText}\n\nOptions:\n${flags}\n\nEffects:\n ${command.effects}\n\nUse when:\n ${command.when}`;
204
+ }
205
+ export function validateCommandArguments(command, args) {
206
+ const allowed = new Map((command.flags ?? []).map((flag) => [flag.name, flag]));
207
+ const positional = [];
208
+ for (let index = 0; index < args.length; index += 1) {
209
+ const value = args[index];
210
+ if (!value.startsWith('-')) {
211
+ positional.push(value);
212
+ continue;
213
+ }
214
+ const flag = allowed.get(value);
215
+ if (!flag)
216
+ throw new Error(`unknown option '${value}' for flow ${command.name}.`);
217
+ if (flag.value) {
218
+ const next = args[++index];
219
+ if (!next || next.startsWith('-'))
220
+ throw new Error(`${value} requires ${flag.value}.`);
221
+ if (flag.values && !flag.values.includes(next))
222
+ throw new Error(`${value} must be one of: ${flag.values.join(', ')}.`);
223
+ }
224
+ }
225
+ if (command.name === 'migrate' && args.includes('--plan') === args.includes('--apply'))
226
+ throw new Error('flow migrate requires exactly one of --plan or --apply.');
227
+ if (command.arguments?.some((argument) => argument.required) && !positional.length)
228
+ throw new Error(`flow ${command.name} requires ${command.arguments[0].name}.`);
229
+ }
230
+ //# sourceMappingURL=command-registry.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-registry.mjs","sourceRoot":"","sources":["../../src/cli/command-registry.mjs"],"names":[],"mappings":"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"}
package/dist/cli.d.mts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export declare function runCli(args?: any): Promise<any>;
3
+ //# sourceMappingURL=cli.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.mts","sourceRoot":"","sources":["../src/cli.mjs"],"names":[],"mappings":";AAgBA,wBAAsB,MAAM,CAAC,IAAI,MAAwB,gBAkBxD"}
package/dist/cli.mjs ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env node
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { CliError, info } from './shared/cli-io.mjs';
6
+ import { commandByName, renderCommandHelp, renderGlobalHelp, validateCommandArguments } from './cli/command-registry.mjs';
7
+ const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
8
+ const packageManifest = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
9
+ export async function runCli(args = process.argv.slice(2)) {
10
+ if (!args.length || ['--help', '-h'].includes(args[0]))
11
+ return info(renderGlobalHelp(packageManifest.version));
12
+ if (['--version', '-v'].includes(args[0]))
13
+ return info(packageManifest.version);
14
+ const command = commandByName(args[0]);
15
+ if (!command)
16
+ throw new CliError(`unknown command '${args[0]}'. Run flow --help.`);
17
+ if (args.slice(1).some((arg) => ['--help', '-h'].includes(arg)))
18
+ return info(renderCommandHelp(command));
19
+ try {
20
+ validateCommandArguments(command, args.slice(1));
21
+ }
22
+ catch (error) {
23
+ throw new CliError(error.message);
24
+ }
25
+ const module = await command.load();
26
+ return module[command.run]({
27
+ args: args.slice(1),
28
+ packageRoot,
29
+ packageName: packageManifest.name,
30
+ version: packageManifest.version
31
+ });
32
+ }
33
+ try {
34
+ await runCli();
35
+ }
36
+ catch (error) {
37
+ if (error?.code === 'ABORT_ERR') {
38
+ info('\nFlow command canceled.');
39
+ process.exitCode = 130;
40
+ }
41
+ else if (error instanceof CliError) {
42
+ console.error(`flow: ${error.message}`);
43
+ process.exitCode = error.exitCode || 1;
44
+ }
45
+ else
46
+ throw error;
47
+ }
48
+ //# sourceMappingURL=cli.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.mjs","sourceRoot":"","sources":["../src/cli.mjs"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare function diagnoseProject(root: any, { quick, version, packageRoot }?: {
2
+ quick?: boolean | undefined;
3
+ }): {
4
+ healthy: boolean;
5
+ mode: string;
6
+ checks: any[];
7
+ configured_version?: never;
8
+ executed_version?: never;
9
+ } | {
10
+ healthy: boolean;
11
+ mode: string;
12
+ configured_version: string | null;
13
+ executed_version: any;
14
+ checks: any[];
15
+ };
16
+ export declare function runDoctor({ args, version, packageRoot }: {
17
+ args: any;
18
+ packageRoot: any;
19
+ version: any;
20
+ }): void;
21
+ //# sourceMappingURL=doctor.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.mts","sourceRoot":"","sources":["../../src/commands/doctor.mjs"],"names":[],"mappings":"AAQA,wBAAgB,eAAe,CAAC,IAAI,KAAA,EAAE,EAAE,KAAa,EAAE,OAAO,EAAE,WAAW,EAAE;;CAAK;;;;;;;;;;;;EAwFjF;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE;;;;CAAA,QASvD"}
@@ -0,0 +1,79 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { parse } from 'yaml';
4
+ import { info } from '../shared/cli-io.mjs';
5
+ import { projectRoot } from '../shared/project-path.mjs';
6
+ import { readConfig } from '../shared/project-config.mjs';
7
+ import { validateProject } from './validate.mjs';
8
+ export function diagnoseProject(root, { quick = false, version, packageRoot } = {}) {
9
+ const checks = [];
10
+ const add = (id, ok, message, recovery) => checks.push({ id, status: ok ? 'pass' : 'fail', message, ...(recovery ? { recovery } : {}) });
11
+ const flow = path.join(root, '_flow');
12
+ const legacyFlow = path.join(root, '.flow');
13
+ if (!fs.existsSync(flow) && fs.existsSync(legacyFlow)) {
14
+ add('flow-directory', false, 'Legacy .flow directory requires explicit migration to _flow.', 'Run flow migrate --plan.');
15
+ return {
16
+ healthy: false,
17
+ mode: quick ? 'quick' : 'full',
18
+ configured_version: null,
19
+ executed_version: version,
20
+ checks
21
+ };
22
+ }
23
+ add('flow-directory', fs.existsSync(flow), '_flow directory is present.', 'Run flow init.');
24
+ if (!fs.existsSync(flow))
25
+ return { healthy: false, mode: quick ? 'quick' : 'full', checks };
26
+ let config;
27
+ try {
28
+ config = readConfig(root);
29
+ }
30
+ catch (error) {
31
+ add('config', false, error.message, 'Repair config.yaml or run migration.');
32
+ }
33
+ add('config', Boolean(config), 'config.yaml is readable.', 'Run flow init.');
34
+ if (config) {
35
+ add('version', config.flow_version === version, `Project uses ${config.flow_version ?? 'an unversioned legacy release'}; CLI is ${version}.`, 'Update deliberately, then run flow migrate --plan.');
36
+ const skillCompatible = (config.runtimes ?? []).every((runtime) => fs.existsSync(path.join(root, runtime.skills_path, 'flow', 'SKILL.md')));
37
+ add('integrations', skillCompatible, 'Configured Flow skills are installed.', 'Run flow init to refresh configured integrations.');
38
+ }
39
+ for (const required of ['config.yaml', 'gates.yaml', 'work-items'])
40
+ add(`artifact:${required}`, fs.existsSync(path.join(flow, required)), `${required} is present.`, 'Restore it or run flow init.');
41
+ for (const schema of ['config', 'backlog', 'tasks', 'review', 'gates'])
42
+ add(`schema:${schema}`, fs.existsSync(path.join(packageRoot, 'schemas', `${schema}.schema.json`)), `${schema} schema is packaged.`, 'Reinstall the Flow package.');
43
+ if (!quick) {
44
+ const findings = validateProject(root, { skipTrace: false });
45
+ add('invariants', findings.length === 0, findings.length ? `${findings.length} validation finding(s).` : 'All structural invariants pass.', 'Run flow validate for details.');
46
+ }
47
+ else {
48
+ for (const file of ['gates.yaml']) {
49
+ const target = path.join(flow, file);
50
+ if (!fs.existsSync(target))
51
+ continue;
52
+ try {
53
+ parse(fs.readFileSync(target, 'utf8'));
54
+ add(`yaml:${file}`, true, `${file} parses.`);
55
+ }
56
+ catch (error) {
57
+ add(`yaml:${file}`, false, error.message, 'Repair or migrate the artifact.');
58
+ }
59
+ }
60
+ }
61
+ return {
62
+ healthy: checks.every((check) => check.status === 'pass'),
63
+ mode: quick ? 'quick' : 'full',
64
+ configured_version: config?.flow_version ?? null,
65
+ executed_version: version,
66
+ checks
67
+ };
68
+ }
69
+ export function runDoctor({ args, version, packageRoot }) {
70
+ const result = diagnoseProject(projectRoot(args), { quick: args.includes('--quick'), version, packageRoot });
71
+ if (args.includes('--json'))
72
+ info(JSON.stringify(result, null, 2));
73
+ else
74
+ for (const check of result.checks)
75
+ info(`${check.status === 'pass' ? 'PASS' : 'FAIL'} ${check.id}: ${check.message}${check.recovery && check.status === 'fail' ? ` ${check.recovery}` : ''}`);
76
+ if (!result.healthy)
77
+ process.exitCode = 1;
78
+ }
79
+ //# sourceMappingURL=doctor.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.mjs","sourceRoot":"","sources":["../../src/commands/doctor.mjs"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare function selectGates(gates: any, { ids, task, workItem, stage, all }?: {
2
+ all?: boolean | undefined;
3
+ ids?: never[] | undefined;
4
+ stage?: null | undefined;
5
+ task?: null | undefined;
6
+ workItem?: null | undefined;
7
+ }): any;
8
+ export declare function evaluateGates(root: any, filters?: {
9
+ all: boolean;
10
+ }): any;
11
+ export declare function runGates({ args }: {
12
+ args: any;
13
+ }): void;
14
+ //# sourceMappingURL=gates.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.d.mts","sourceRoot":"","sources":["../../src/commands/gates.mjs"],"names":[],"mappings":"AA0DA,wBAAgB,WAAW,CAAC,KAAK,KAAA,EAAE,EAAE,GAAQ,EAAE,IAAW,EAAE,QAAe,EAAE,KAAY,EAAE,GAAW,EAAE;;;;;;CAAK,OAkB5G;AAED,wBAAgB,aAAa,CAAC,IAAI,KAAA,EAAE,OAAO;IAAK,GAAG;CAAQ,OAY1D;AAOD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE;;CAAA,QA6BhC"}
@@ -0,0 +1,136 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { spawnSync } from 'node:child_process';
4
+ import { fail } from '../shared/cli-io.mjs';
5
+ import { parseGates } from '../artifacts/gates.mjs';
6
+ function runCommandGate(root, gate) {
7
+ const shell = process.platform === 'win32' ? process.env.ComSpec || 'cmd.exe' : '/bin/sh';
8
+ const args = process.platform === 'win32' ? ['/d', '/s', '/c', gate.command] : ['-lc', gate.command];
9
+ const result = spawnSync(shell, args, { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
10
+ return {
11
+ id: gate.id,
12
+ kind: gate.kind,
13
+ blocking: gate.blocking,
14
+ status: result.status === 0 ? 'passed' : 'failed',
15
+ exit_code: result.status,
16
+ stdout: result.stdout,
17
+ stderr: result.stderr
18
+ };
19
+ }
20
+ function runBuiltinGate(root, gate) {
21
+ if (gate.rule !== 'kebab-case-files')
22
+ return {
23
+ id: gate.id,
24
+ kind: gate.kind,
25
+ blocking: gate.blocking,
26
+ status: 'unsupported',
27
+ message: `Unknown builtin rule '${gate.rule}'.`
28
+ };
29
+ const excluded = new Set(['.git', '_flow', 'node_modules']);
30
+ const violations = [];
31
+ function walk(directory) {
32
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
33
+ if (excluded.has(entry.name))
34
+ continue;
35
+ const full = path.join(directory, entry.name);
36
+ if (entry.isDirectory()) {
37
+ walk(full);
38
+ continue;
39
+ }
40
+ if (entry.name.startsWith('.'))
41
+ continue;
42
+ const ext = path.extname(entry.name);
43
+ const stem = ext ? entry.name.slice(0, -ext.length) : entry.name;
44
+ if (/^[A-Z0-9_.-]+$/.test(entry.name))
45
+ continue;
46
+ const valid = stem.split('.').every((segment) => /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(segment));
47
+ if (!valid)
48
+ violations.push(path.relative(root, full));
49
+ }
50
+ }
51
+ walk(root);
52
+ return {
53
+ id: gate.id,
54
+ kind: gate.kind,
55
+ blocking: gate.blocking,
56
+ status: violations.length ? 'failed' : 'passed',
57
+ violations
58
+ };
59
+ }
60
+ export function selectGates(gates, { ids = [], task = null, workItem = null, stage = null, all = false } = {}) {
61
+ return gates.filter((gate) => {
62
+ if (ids.length && !ids.includes(gate.id))
63
+ return false;
64
+ if (stage && gate.stage !== stage)
65
+ return false;
66
+ if (all)
67
+ return true;
68
+ if (task)
69
+ return ((gate.scope.tasks ?? []).includes(task) ||
70
+ (gate.scope.work_items ?? []).includes(task.split('-T')[0]) ||
71
+ (gate.stage === 'task' && !Object.keys(gate.scope).length));
72
+ if (workItem)
73
+ return ((gate.scope.work_items ?? []).includes(workItem) ||
74
+ (gate.stage === 'work-item-review' && !Object.keys(gate.scope).length));
75
+ return ids.length > 0 || Boolean(stage);
76
+ });
77
+ }
78
+ export function evaluateGates(root, filters = { all: true }) {
79
+ const file = path.join(root, '_flow', 'gates.yaml');
80
+ if (!fs.existsSync(file))
81
+ fail('gates.yaml does not exist.');
82
+ const { gates } = parseGates(fs.readFileSync(file, 'utf8'));
83
+ return selectGates(gates, filters).map((gate) => {
84
+ const startedAt = performance.now();
85
+ let result;
86
+ if (gate.kind === 'command')
87
+ result = runCommandGate(root, gate);
88
+ else if (gate.kind === 'builtin')
89
+ result = runBuiltinGate(root, gate);
90
+ else
91
+ throw new Error(`Unsupported gate kind '${gate.kind}'.`);
92
+ return { ...result, duration_ms: Math.round(performance.now() - startedAt) };
93
+ });
94
+ }
95
+ function option(args, name) {
96
+ const index = args.indexOf(name);
97
+ return index < 0 ? null : args[index + 1];
98
+ }
99
+ export function runGates({ args }) {
100
+ const root = path.resolve(option(args, '--path') ?? process.cwd());
101
+ const action = args.find((arg) => !arg.startsWith('-'));
102
+ const file = path.join(root, '_flow', 'gates.yaml');
103
+ if (!fs.existsSync(file))
104
+ fail('gates.yaml does not exist.');
105
+ const parsed = parseGates(fs.readFileSync(file, 'utf8'));
106
+ const filters = {
107
+ ids: option(args, '--id')?.split(',') ?? [],
108
+ task: option(args, '--task'),
109
+ workItem: option(args, '--work-item'),
110
+ stage: option(args, '--stage'),
111
+ all: args.includes('--all')
112
+ };
113
+ const hasFilter = filters.ids.length || filters.task || filters.workItem || filters.stage || filters.all;
114
+ if (action === 'list' && !hasFilter)
115
+ filters.all = true;
116
+ const selected = selectGates(parsed.gates, filters);
117
+ if (action === 'list') {
118
+ const output = args.includes('--json')
119
+ ? JSON.stringify(selected, null, 2)
120
+ : selected.map((gate) => `${gate.id}\t${gate.stage}\t${gate.cost}\t${gate.command ?? gate.rule}`).join('\n');
121
+ return console.log(output);
122
+ }
123
+ if (action !== 'run')
124
+ fail("flow gates requires 'list' or 'run'.");
125
+ if (!selected.length)
126
+ fail('No gates matched; use --all or a scope filter.');
127
+ const results = evaluateGates(root, filters);
128
+ if (args.includes('--json'))
129
+ console.log(JSON.stringify(results, null, 2));
130
+ else
131
+ for (const result of results)
132
+ console.log(`${result.status.toUpperCase()} ${result.id} (${result.duration_ms}ms)`);
133
+ if (results.some((result) => result.blocking && result.status !== 'passed'))
134
+ process.exitCode = 1;
135
+ }
136
+ //# sourceMappingURL=gates.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.mjs","sourceRoot":"","sources":["../../src/commands/gates.mjs"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ArtifactValidationError } from '../artifacts/backlog.mjs';
2
+ export { ArtifactValidationError as GraphValidationError };
3
+ export declare function generateGraphMarkdown(backlogText: any): string;
4
+ export declare function writeGraph(root: any): {
5
+ graphPath: any;
6
+ markdown: string;
7
+ };
8
+ export declare function runGraph({ args }: {
9
+ args: any;
10
+ }): void;
11
+ //# sourceMappingURL=graph.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.mts","sourceRoot":"","sources":["../../src/commands/graph.mjs"],"names":[],"mappings":"AAIA,OAAO,EACL,uBAAuB,EAIxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,uBAAuB,IAAI,oBAAoB,EAAE,CAAC;AAoB3D,wBAAgB,qBAAqB,CAAC,WAAW,KAAA,UA2ChD;AAED,wBAAgB,UAAU,CAAC,IAAI,KAAA;;;EAU9B;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE;;CAAA,QAGhC"}