@bicorne/task-flow 0.1.0 → 0.2.1

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 (58) hide show
  1. package/README.md +337 -145
  2. package/SKILL.md +9 -5
  3. package/assets/.harnessrc +0 -1
  4. package/dist/commands/analyze.js +160 -318
  5. package/dist/commands/archive.js +44 -48
  6. package/dist/commands/design.js +225 -400
  7. package/dist/commands/extract.js +174 -303
  8. package/dist/commands/init.js +103 -148
  9. package/dist/commands/merge/index.js +184 -295
  10. package/dist/commands/merge/merger.js +112 -134
  11. package/dist/commands/merge/types.js +3 -5
  12. package/dist/commands/merge/validators.js +115 -132
  13. package/dist/commands/merge.js +46 -13
  14. package/dist/commands/start.js +155 -248
  15. package/dist/commands/status.js +68 -129
  16. package/dist/commands/sync.js +37 -53
  17. package/dist/commands/tasks-gen/doc-parser.js +148 -228
  18. package/dist/commands/tasks-gen/generators.js +104 -116
  19. package/dist/commands/tasks-gen/index.js +206 -314
  20. package/dist/commands/tasks-gen/parsers.js +131 -232
  21. package/dist/commands/tasks-gen/templates.js +9 -10
  22. package/dist/commands/tasks-gen/types.js +36 -14
  23. package/dist/commands/tasks-gen/validators.js +33 -49
  24. package/dist/commands/tasks.js +58 -20
  25. package/dist/commands/worktree.js +167 -249
  26. package/dist/hooks/check-prd-exists.js +45 -55
  27. package/dist/hooks/check-worktree-conflict.js +68 -101
  28. package/dist/hooks/hook-runner/executor.js +134 -126
  29. package/dist/hooks/hook-runner/index.js +181 -196
  30. package/dist/hooks/hook-runner/loader.js +74 -113
  31. package/dist/hooks/hook-runner/types.js +3 -5
  32. package/dist/hooks/hook-runner.js +94 -28
  33. package/dist/hooks/phase-complete-detector.js +125 -191
  34. package/dist/hooks/phase-gate-validator.js +315 -376
  35. package/dist/hooks/save-checkpoint.js +87 -130
  36. package/dist/hooks/start-mcp-servers.js +50 -65
  37. package/dist/hooks/stop-mcp-servers.js +40 -49
  38. package/dist/index.js +84 -153
  39. package/dist/lib/archive.js +126 -209
  40. package/dist/lib/config.d.ts +0 -2
  41. package/dist/lib/config.js +141 -230
  42. package/dist/lib/constants.js +155 -145
  43. package/dist/lib/interactive.js +98 -148
  44. package/dist/lib/mcp-client.js +197 -320
  45. package/dist/lib/state.js +142 -253
  46. package/dist/slash/executor.js +309 -233
  47. package/dist/slash/index.js +69 -43
  48. package/dist/slash/parser.js +84 -97
  49. package/dist/slash/registry.js +100 -88
  50. package/dist/spec/openspec-to-task/builders.js +96 -109
  51. package/dist/spec/openspec-to-task/index.js +112 -173
  52. package/dist/spec/openspec-to-task/parsers.js +148 -219
  53. package/dist/spec/openspec-to-task/types.js +3 -5
  54. package/dist/spec/sync-openspec-to-task.js +47 -19
  55. package/dist/spec/sync-task-to-openspec.js +241 -272
  56. package/dist/types/ai-context.js +3 -8
  57. package/package.json +9 -7
  58. package/references/CLI-TUTORIAL.md +4 -10
@@ -1,259 +1,335 @@
1
- "use strict";
2
- /**
3
- * slash/executor.ts
4
- * Execute slash commands by dispatching to the appropriate command modules.
5
- * Supports both single commands and composite (multi-step) commands.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.executeSlashCommand = executeSlashCommand;
9
- const registry_1 = require("./registry");
10
- const extract_1 = require("../commands/extract");
11
- const design_1 = require("../commands/design");
12
- const tasks_gen_1 = require("../commands/tasks-gen");
13
- const worktree_1 = require("../commands/worktree");
14
- const init_1 = require("../commands/init");
15
- const status_1 = require("../commands/status");
16
- const archive_1 = require("../lib/archive");
17
- const merge_1 = require("../commands/merge");
18
- const sync_task_to_openspec_1 = require("../spec/sync-task-to-openspec");
19
- function extractChangeName(parsed) {
20
- const firstArg = parsed.args[0];
21
- if (firstArg && !firstArg.startsWith('--')) {
22
- return firstArg;
23
- }
24
- for (let i = 0; i < parsed.args.length - 1; i += 1) {
25
- if (parsed.args[i] === '--change' || parsed.args[i] === '--task-id') {
26
- return parsed.args[i + 1];
27
- }
28
- }
29
- return undefined;
1
+ function e(s) {
2
+ return "function" != typeof WeakMap ? null : (e = function(e) {
3
+ return new WeakMap();
4
+ })(s);
30
5
  }
31
- function extractTaskId(parsed) {
32
- for (let i = 0; i < parsed.args.length - 1; i += 1) {
33
- if (parsed.args[i] === '--task-id') {
34
- return parsed.args[i + 1];
35
- }
36
- }
37
- const firstArg = parsed.args[0];
38
- if (firstArg && !firstArg.startsWith('--')) {
39
- return firstArg;
6
+ function s(s, t) {
7
+ var a, r, n;
8
+ if (!t && s && s.__esModule) return s;
9
+ if (null === s || "object" != typeof s && "function" != typeof s) return {
10
+ default: s
11
+ };
12
+ if ((a = e(t)) && a.has(s)) return a.get(s);
13
+ for(var c in r = {
14
+ __proto__: null
15
+ }, n = Object.defineProperty && Object.getOwnPropertyDescriptor, s)if ("default" !== c && Object.prototype.hasOwnProperty.call(s, c)) {
16
+ var o = n ? Object.getOwnPropertyDescriptor(s, c) : null;
17
+ o && (o.get || o.set) ? Object.defineProperty(r, c, o) : r[c] = s[c];
40
18
  }
41
- return undefined;
19
+ return r.default = s, a && a.set(s, r), r;
42
20
  }
43
- function extractFlagValue(parsed, flag) {
44
- const idx = parsed.args.indexOf(`--${flag}`);
45
- if (idx === -1 || idx + 1 >= parsed.args.length) {
46
- return undefined;
47
- }
48
- return parsed.args[idx + 1];
21
+ function t(e, s) {
22
+ let t = e.args.indexOf(`--${s}`);
23
+ if (-1 !== t && !(t + 1 >= e.args.length)) return e.args[t + 1];
49
24
  }
50
- function hasFlag(parsed, flag) {
51
- return parsed.args.includes(`--${flag}`) || parsed.args.includes(`-${flag}`);
25
+ function a(e, s) {
26
+ return e.args.includes(`--${s}`) || e.args.includes(`-${s}`);
52
27
  }
53
- async function executeSingleCommand(commandName, changeName, taskId, parsed) {
54
- switch (commandName) {
55
- case 'extract': {
56
- if (!changeName) {
57
- return { step: 'extract', success: false, message: 'Missing change name. Usage: /tf:extract <change-name>' };
58
- }
59
- const result = await (0, extract_1.extract)({
60
- change: changeName,
61
- force: hasFlag(parsed, 'force'),
62
- contextFile: extractFlagValue(parsed, 'context-file'),
63
- });
64
- return {
65
- step: 'extract',
66
- success: result.success,
67
- message: result.success ? `PRD created: ${result.prdPath}` : result.message,
68
- detail: result.success ? { prdPath: result.prdPath, changeDir: result.changeDir } : undefined,
69
- };
70
- }
71
- case 'design': {
72
- if (!changeName) {
73
- return { step: 'design', success: false, message: 'Missing change name. Usage: /tf:design <change-name>' };
28
+ async function r(e, s, r, n, c) {
29
+ let o = t(n, 'context-file') || c;
30
+ switch(e){
31
+ case 'extract':
32
+ {
33
+ if (!s) return {
34
+ step: 'extract',
35
+ success: !1,
36
+ message: 'Missing change name. Usage: /tf:extract <change-name>'
37
+ };
38
+ let e = await (0, m.extract)({
39
+ change: s,
40
+ force: a(n, 'force'),
41
+ contextFile: o
42
+ });
43
+ return {
44
+ step: 'extract',
45
+ success: e.success,
46
+ message: e.success ? `PRD created: ${e.prdPath}` : e.message,
47
+ detail: e.success ? {
48
+ prdPath: e.prdPath,
49
+ changeDir: e.changeDir
50
+ } : void 0
51
+ };
74
52
  }
75
- const result = await (0, design_1.generateDesign)({
76
- change: changeName,
77
- force: hasFlag(parsed, 'force'),
78
- skipPrompt: true,
79
- contextFile: extractFlagValue(parsed, 'context-file'),
80
- });
81
- return {
82
- step: 'design',
83
- success: result.success,
84
- message: result.success ? `Design created: ${result.designPath}` : result.message,
85
- detail: result.success ? { designPath: result.designPath } : undefined,
86
- };
87
- }
88
- case 'tasks': {
89
- if (!changeName) {
90
- return { step: 'tasks', success: false, message: 'Missing change name. Usage: /tf:tasks <change-name>' };
53
+ case 'design':
54
+ {
55
+ if (!s) return {
56
+ step: 'design',
57
+ success: !1,
58
+ message: 'Missing change name. Usage: /tf:design <change-name>'
59
+ };
60
+ let e = await (0, g.generateDesign)({
61
+ change: s,
62
+ force: a(n, 'force'),
63
+ skipPrompt: !0,
64
+ contextFile: o
65
+ });
66
+ return {
67
+ step: 'design',
68
+ success: e.success,
69
+ message: e.success ? `Design created: ${e.designPath}` : e.message,
70
+ detail: e.success ? {
71
+ designPath: e.designPath
72
+ } : void 0
73
+ };
91
74
  }
92
- const result = await (0, tasks_gen_1.generateTasks)({
93
- change: changeName,
94
- yes: true,
95
- });
96
- return {
97
- step: 'tasks',
98
- success: result.success,
99
- message: result.success ? `Tasks generated: ${result.generatedFiles?.length || 0} files` : result.message,
100
- detail: result.success ? { tasksDir: result.tasksDir, manifestPath: result.manifestPath } : undefined,
101
- };
102
- }
103
- case 'worktree': {
104
- if (!changeName) {
105
- return { step: 'worktree', success: false, message: 'Missing change name. Usage: /tf:worktree <change-name>' };
75
+ case 'tasks':
76
+ {
77
+ if (!s) return {
78
+ step: 'tasks',
79
+ success: !1,
80
+ message: 'Missing change name. Usage: /tf:tasks <change-name>'
81
+ };
82
+ let e = await (0, l.generateTasks)({
83
+ change: s,
84
+ yes: !0
85
+ });
86
+ return {
87
+ step: 'tasks',
88
+ success: e.success,
89
+ message: e.success ? `Tasks generated: ${e.generatedFiles?.length || 0} files` : e.message,
90
+ detail: e.success ? {
91
+ tasksDir: e.tasksDir,
92
+ manifestPath: e.manifestPath
93
+ } : void 0
94
+ };
106
95
  }
107
- const result = await (0, worktree_1.createWorktree)({
108
- change: changeName,
109
- yes: true,
110
- });
111
- return {
112
- step: 'worktree',
113
- success: result.success,
114
- message: result.success ? `Worktree created: ${result.worktreePath}` : result.message,
115
- detail: result.success ? { worktreePath: result.worktreePath, branchName: result.branchName } : undefined,
116
- };
117
- }
118
- case 'init': {
119
- const result = (0, init_1.initHarness)({
120
- force: hasFlag(parsed, 'force'),
121
- });
122
- return {
123
- step: 'init',
124
- success: result.success,
125
- message: result.success ? 'Task flow initialized' : result.message,
126
- };
127
- }
128
- case 'status': {
129
- (0, status_1.showStatus)({});
130
- return { step: 'status', success: true, message: 'Status displayed' };
131
- }
132
- case 'archive': {
133
- const tid = taskId || changeName;
134
- if (!tid) {
135
- return { step: 'archive', success: false, message: 'Missing task ID. Usage: /tf:archive --task-id <id>' };
96
+ case 'worktree':
97
+ {
98
+ if (!s) return {
99
+ step: 'worktree',
100
+ success: !1,
101
+ message: 'Missing change name. Usage: /tf:worktree <change-name>'
102
+ };
103
+ let e = await (0, d.createWorktree)({
104
+ change: s,
105
+ yes: !0
106
+ });
107
+ return {
108
+ step: 'worktree',
109
+ success: e.success,
110
+ message: e.success ? `Worktree created: ${e.worktreePath}` : e.message,
111
+ detail: e.success ? {
112
+ worktreePath: e.worktreePath,
113
+ branchName: e.branchName
114
+ } : void 0
115
+ };
136
116
  }
137
- const result = (0, archive_1.archiveTaskState)({
138
- taskId: tid,
139
- eventType: 'task_completed',
140
- status: 'completed',
141
- });
142
- if ('skipped' in result && result.skipped) {
143
- return { step: 'archive', success: true, message: `Skipped: ${result.reason}` };
117
+ case 'init':
118
+ {
119
+ let e = (0, f.initHarness)({
120
+ force: a(n, 'force')
121
+ });
122
+ return {
123
+ step: 'init',
124
+ success: e.success,
125
+ message: e.success ? 'Task flow initialized' : e.message
126
+ };
144
127
  }
145
- return {
146
- step: 'archive',
147
- success: true,
148
- message: `Archived: ${result.archivePath}`,
128
+ case 'status':
129
+ return (0, p.showStatus)({}), {
130
+ step: 'status',
131
+ success: !0,
132
+ message: 'Status displayed'
149
133
  };
150
- }
151
- case 'merge': {
152
- const tid = taskId || changeName;
153
- if (!tid) {
154
- return { step: 'merge', success: false, message: 'Missing task ID. Usage: /tf:merge <task-id>' };
134
+ case 'archive':
135
+ {
136
+ let e = r || s;
137
+ if (!e) return {
138
+ step: 'archive',
139
+ success: !1,
140
+ message: 'Missing task ID. Usage: /tf:archive --task-id <id>'
141
+ };
142
+ let t = (0, h.archiveTaskState)({
143
+ taskId: e,
144
+ eventType: 'task_completed',
145
+ status: 'completed'
146
+ });
147
+ if ('skipped' in t && t.skipped) return {
148
+ step: 'archive',
149
+ success: !0,
150
+ message: `Skipped: ${t.reason}`
151
+ };
152
+ return {
153
+ step: 'archive',
154
+ success: !0,
155
+ message: `Archived: ${t.archivePath}`
156
+ };
155
157
  }
156
- const result = (0, merge_1.mergeTask)({
157
- taskId: tid,
158
- skipReviewCheck: hasFlag(parsed, 'skip-review-check'),
159
- dryRun: hasFlag(parsed, 'dry-run'),
160
- });
161
- return {
162
- step: 'merge',
163
- success: result.success,
164
- message: result.success ? `Merged: ${result.taskId}` : result.message,
165
- };
166
- }
167
- case 'sync': {
168
- const tid = taskId || changeName;
169
- if (!tid) {
170
- return { step: 'sync', success: false, message: 'Missing task ID. Usage: /tf:sync --task-id <id>' };
158
+ case 'merge':
159
+ {
160
+ let e = r || s;
161
+ if (!e) return {
162
+ step: 'merge',
163
+ success: !1,
164
+ message: 'Missing task ID. Usage: /tf:merge <task-id>'
165
+ };
166
+ let t = (0, k.mergeTask)({
167
+ taskId: e,
168
+ skipReviewCheck: a(n, 'skip-review-check'),
169
+ dryRun: a(n, 'dry-run')
170
+ });
171
+ return {
172
+ step: 'merge',
173
+ success: t.success,
174
+ message: t.success ? `Merged: ${t.taskId}` : t.message
175
+ };
171
176
  }
172
- const result = (0, sync_task_to_openspec_1.syncTaskToSpec)({ taskId: tid });
173
- if (result.skipped) {
174
- return { step: 'sync', success: true, message: `Skipped: ${result.reason}` };
177
+ case 'sync':
178
+ {
179
+ let e = r || s;
180
+ if (!e) return {
181
+ step: 'sync',
182
+ success: !1,
183
+ message: 'Missing task ID. Usage: /tf:sync --task-id <id>'
184
+ };
185
+ let t = (0, y.syncTaskToSpec)({
186
+ taskId: e
187
+ });
188
+ if (t.skipped) return {
189
+ step: 'sync',
190
+ success: !0,
191
+ message: `Skipped: ${t.reason}`
192
+ };
193
+ return {
194
+ step: 'sync',
195
+ success: !0,
196
+ message: 'Synced'
197
+ };
175
198
  }
176
- return { step: 'sync', success: true, message: 'Synced' };
177
- }
178
199
  default:
179
- return { step: commandName, success: false, message: `Unknown command: ${commandName}` };
200
+ return {
201
+ step: e,
202
+ success: !1,
203
+ message: `Unknown command: ${e}`
204
+ };
180
205
  }
181
206
  }
182
- async function executeCompositeCommand(cmdDef, changeName, taskId, parsed) {
183
- const steps = cmdDef.steps || [];
184
- const stepResults = [];
185
- console.log(`[SLASH] Executing composite command: /tf:${cmdDef.name}`);
186
- console.log(`[SLASH] Steps: ${steps.join(' → ')}`);
187
- console.log('');
188
- for (const step of steps) {
189
- console.log(`[SLASH] → Step: ${step}`);
190
- const result = await executeSingleCommand(step, changeName, taskId, parsed);
191
- stepResults.push(result);
192
- if (result.success) {
193
- console.log(`[SLASH] ✓ ${step}: ${result.message || 'OK'}`);
194
- }
207
+ async function n(e, s, a, n) {
208
+ let c, u = e.steps || [], m = [];
209
+ if (console.log(`[SLASH] Executing composite command: /tf:${e.name}`), console.log(`[SLASH] Steps: ${u.join(' → ')}`), console.log(''), 'propose' === e.name) {
210
+ let r = t(n, 'context-file');
211
+ if (r) console.log(`[SLASH] ✓ Using explicit context: ${r}`), c = r;
195
212
  else {
196
- console.log(`[SLASH] ✗ ${step}: ${result.message || 'Failed'}`);
197
- return {
198
- success: false,
199
- command: cmdDef.name,
200
- changeName,
201
- taskId,
202
- steps: stepResults,
203
- message: `Composite command "${cmdDef.name}" failed at step "${step}": ${result.message}`,
204
- error: result.message,
205
- };
213
+ let t = (0, S.loadConfig)({}).projectRoot || process.cwd(), r = function(e) {
214
+ for (let s of [
215
+ i.resolve(e, 'context.json'),
216
+ i.resolve(e, '.harness', 'context.json'),
217
+ i.resolve(e, '.tmp', 'context.json')
218
+ ])if (o.existsSync(s)) return s;
219
+ return null;
220
+ }(t);
221
+ if (r) console.log(`[SLASH] ✓ Using existing context: ${r}`), c = r;
222
+ else {
223
+ console.log('[SLASH] → Step: analyze (auto)');
224
+ try {
225
+ c = function(e) {
226
+ let s = i.resolve(e, '.tmp');
227
+ o.existsSync(s) || o.mkdirSync(s, {
228
+ recursive: !0
229
+ });
230
+ let t = i.resolve(s, 'context.json'), a = (0, $.analyzeProject)({
231
+ cwd: e,
232
+ output: t
233
+ });
234
+ if (!a.success || !a.outputPath) throw Error(`Failed to generate context: ${a.message}`);
235
+ return a.outputPath;
236
+ }(t), console.log(`[SLASH] ✓ analyze: Context generated at ${c}`), m.push({
237
+ step: 'analyze',
238
+ success: !0,
239
+ message: `Context generated: ${c}`,
240
+ detail: {
241
+ contextPath: c
242
+ }
243
+ });
244
+ } catch (r) {
245
+ let t = r instanceof Error ? r.message : 'Unknown error';
246
+ return console.log(`[SLASH] ✗ analyze: ${t}`), {
247
+ success: !1,
248
+ command: e.name,
249
+ changeName: s,
250
+ taskId: a,
251
+ steps: m,
252
+ message: `Failed to generate context: ${t}`,
253
+ error: t
254
+ };
255
+ }
256
+ console.log('');
257
+ }
206
258
  }
207
- console.log('');
259
+ }
260
+ for (let t of u){
261
+ console.log(`[SLASH] → Step: ${t}`);
262
+ let o = await r(t, s, a, n, c);
263
+ if (m.push(o), !o.success) return console.log(`[SLASH] ✗ ${t}: ${o.message || 'Failed'}`), {
264
+ success: !1,
265
+ command: e.name,
266
+ changeName: s,
267
+ taskId: a,
268
+ steps: m,
269
+ message: `Composite command "${e.name}" failed at step "${t}": ${o.message}`,
270
+ error: o.message
271
+ };
272
+ console.log(`[SLASH] ✓ ${t}: ${o.message || 'OK'}`), console.log('');
208
273
  }
209
274
  return {
210
- success: true,
211
- command: cmdDef.name,
212
- changeName,
213
- taskId,
214
- steps: stepResults,
215
- message: `Composite command "/tf:${cmdDef.name}" completed successfully`,
275
+ success: !0,
276
+ command: e.name,
277
+ changeName: s,
278
+ taskId: a,
279
+ steps: m,
280
+ message: `Composite command "/tf:${e.name}" completed successfully`
216
281
  };
217
282
  }
218
- async function executeSlashCommand(parsed) {
219
- const cmdDef = (0, registry_1.getCommand)(parsed.command);
220
- if (!cmdDef) {
221
- return {
222
- success: false,
223
- command: parsed.command,
224
- message: `Unknown slash command: /tf:${parsed.command}`,
225
- error: `Command "${parsed.command}" not found. Run /tf:help for available commands.`,
226
- };
227
- }
228
- const changeName = extractChangeName(parsed);
229
- const taskId = extractTaskId(parsed);
230
- if (cmdDef.requiresChange && !changeName) {
231
- return {
232
- success: false,
233
- command: parsed.command,
234
- message: `Command "/tf:${parsed.command}" requires a change name. Usage: ${cmdDef.usage}`,
235
- error: 'Missing change name',
236
- };
237
- }
238
- if (cmdDef.requiresTaskId && !taskId && !changeName) {
239
- return {
240
- success: false,
241
- command: parsed.command,
242
- message: `Command "/tf:${parsed.command}" requires a task ID. Usage: ${cmdDef.usage}`,
243
- error: 'Missing task ID',
244
- };
245
- }
246
- if (cmdDef.category === 'composite') {
247
- return executeCompositeCommand(cmdDef, changeName, taskId, parsed);
248
- }
249
- const stepResult = await executeSingleCommand(parsed.command, changeName, taskId, parsed);
283
+ async function c(e) {
284
+ let s = (0, u.getCommand)(e.command);
285
+ if (!s) return {
286
+ success: !1,
287
+ command: e.command,
288
+ message: `Unknown slash command: /tf:${e.command}`,
289
+ error: `Command "${e.command}" not found. Run /tf:help for available commands.`
290
+ };
291
+ let t = function(e) {
292
+ let s = e.args[0];
293
+ if (s && !s.startsWith('--')) return s;
294
+ for(let s = 0; s < e.args.length - 1; s += 1)if ('--change' === e.args[s] || '--task-id' === e.args[s]) return e.args[s + 1];
295
+ }(e), a = function(e) {
296
+ for(let s = 0; s < e.args.length - 1; s += 1)if ('--task-id' === e.args[s]) return e.args[s + 1];
297
+ let s = e.args[0];
298
+ if (s && !s.startsWith('--')) return s;
299
+ }(e);
300
+ if (s.requiresChange && !t) return {
301
+ success: !1,
302
+ command: e.command,
303
+ message: `Command "/tf:${e.command}" requires a change name. Usage: ${s.usage}`,
304
+ error: 'Missing change name'
305
+ };
306
+ if (s.requiresTaskId && !a && !t) return {
307
+ success: !1,
308
+ command: e.command,
309
+ message: `Command "/tf:${e.command}" requires a task ID. Usage: ${s.usage}`,
310
+ error: 'Missing task ID'
311
+ };
312
+ if ('composite' === s.category) return n(s, t, a, e);
313
+ let c = await r(e.command, t, a, e);
250
314
  return {
251
- success: stepResult.success,
252
- command: parsed.command,
253
- changeName,
254
- taskId,
255
- steps: [stepResult],
256
- message: stepResult.message,
257
- error: stepResult.success ? undefined : stepResult.message,
315
+ success: c.success,
316
+ command: e.command,
317
+ changeName: t,
318
+ taskId: a,
319
+ steps: [
320
+ c
321
+ ],
322
+ message: c.message,
323
+ error: c.success ? void 0 : c.message
258
324
  };
259
325
  }
326
+ "use strict";
327
+ Object.defineProperty(exports, "__esModule", {
328
+ value: !0
329
+ }), Object.defineProperty(exports, "executeSlashCommand", {
330
+ enumerable: !0,
331
+ get: function() {
332
+ return c;
333
+ }
334
+ });
335
+ let o = /*#__PURE__*/ s(require("fs")), i = /*#__PURE__*/ s(require("path")), u = require("./registry"), m = require("../commands/extract"), g = require("../commands/design"), l = require("../commands/tasks-gen"), d = require("../commands/worktree"), f = require("../commands/init"), p = require("../commands/status"), h = require("../lib/archive"), k = require("../commands/merge"), y = require("../spec/sync-task-to-openspec"), $ = require("../commands/analyze"), S = require("../lib/config");