@lumenflow/cli 2.21.0 → 3.0.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 (68) hide show
  1. package/README.md +53 -47
  2. package/dist/commands.js +3 -0
  3. package/dist/commands.js.map +1 -1
  4. package/dist/config-get.js +56 -0
  5. package/dist/config-get.js.map +1 -0
  6. package/dist/config-set.js +287 -0
  7. package/dist/config-set.js.map +1 -0
  8. package/dist/gates-runners.js +1 -1
  9. package/dist/gates-runners.js.map +1 -1
  10. package/dist/git-log.js +5 -3
  11. package/dist/git-log.js.map +1 -1
  12. package/dist/guard-worktree-commit.js +1 -1
  13. package/dist/guard-worktree-commit.js.map +1 -1
  14. package/dist/init-templates.js +17 -1
  15. package/dist/init-templates.js.map +1 -1
  16. package/dist/init.js +21 -3
  17. package/dist/init.js.map +1 -1
  18. package/dist/initiative-create.js +19 -4
  19. package/dist/initiative-create.js.map +1 -1
  20. package/dist/lane-edit.js +318 -0
  21. package/dist/lane-edit.js.map +1 -0
  22. package/dist/lane-lifecycle-process.js +92 -2
  23. package/dist/lane-lifecycle-process.js.map +1 -1
  24. package/dist/lane-setup.js +19 -2
  25. package/dist/lane-setup.js.map +1 -1
  26. package/dist/mem-checkpoint.js +70 -3
  27. package/dist/mem-checkpoint.js.map +1 -1
  28. package/dist/orchestrate-initiative.js +15 -1
  29. package/dist/orchestrate-initiative.js.map +1 -1
  30. package/dist/pack-hash.js +101 -0
  31. package/dist/pack-hash.js.map +1 -0
  32. package/dist/pack-install.js +407 -0
  33. package/dist/pack-install.js.map +1 -0
  34. package/dist/pack-publish.js +277 -0
  35. package/dist/pack-publish.js.map +1 -0
  36. package/dist/pack-scaffold.js +269 -0
  37. package/dist/pack-scaffold.js.map +1 -0
  38. package/dist/pack-search.js +142 -0
  39. package/dist/pack-search.js.map +1 -0
  40. package/dist/pack-validate.js +208 -0
  41. package/dist/pack-validate.js.map +1 -0
  42. package/dist/public-manifest.js +46 -0
  43. package/dist/public-manifest.js.map +1 -1
  44. package/dist/release.js +1 -1
  45. package/dist/release.js.map +1 -1
  46. package/dist/task-claim.js +667 -0
  47. package/dist/task-claim.js.map +1 -0
  48. package/dist/workspace-init.js +321 -0
  49. package/dist/workspace-init.js.map +1 -0
  50. package/dist/wu-block.js +1 -1
  51. package/dist/wu-block.js.map +1 -1
  52. package/dist/wu-claim-cloud.js +16 -0
  53. package/dist/wu-claim-cloud.js.map +1 -1
  54. package/dist/wu-claim-state.js +0 -1
  55. package/dist/wu-claim-state.js.map +1 -1
  56. package/dist/wu-claim.js +13 -3
  57. package/dist/wu-claim.js.map +1 -1
  58. package/dist/wu-create-content.js +8 -2
  59. package/dist/wu-create-content.js.map +1 -1
  60. package/dist/wu-create-validation.js +5 -3
  61. package/dist/wu-create-validation.js.map +1 -1
  62. package/dist/wu-create.js +5 -1
  63. package/dist/wu-create.js.map +1 -1
  64. package/dist/wu-done.js +5 -3
  65. package/dist/wu-done.js.map +1 -1
  66. package/dist/wu-spawn-prompt-builders.js +86 -28
  67. package/dist/wu-spawn-prompt-builders.js.map +1 -1
  68. package/package.json +19 -7
@@ -0,0 +1,667 @@
1
+ #!/usr/bin/env node
2
+ import { createWUParser } from '@lumenflow/core/arg-parser';
3
+ import { die } from '@lumenflow/core/error-handler';
4
+ import { ExecutionContextSchema, initializeKernelRuntime, TaskSpecSchema, } from '@lumenflow/kernel';
5
+ import { runCLI } from './cli-entry-point.js';
6
+ const TASK_CLAIM_COMMAND_NAME = 'task-claim';
7
+ const TASK_CLAIM_LOG_PREFIX = '[task:claim]';
8
+ const TASK_CLAIM_DESCRIPTION = 'Claim a task directly through KernelRuntime';
9
+ const TASK_CLAIM_DEFAULT_WORKSPACE_ROOT = '.';
10
+ const TASK_CREATE_COMMAND_NAME = 'task-create';
11
+ const TASK_CREATE_LOG_PREFIX = '[task:create]';
12
+ const TASK_CREATE_DESCRIPTION = 'Create a task directly through KernelRuntime';
13
+ const TASK_CREATE_DEFAULT_WORKSPACE_ROOT = '.';
14
+ const TASK_COMPLETE_COMMAND_NAME = 'task-complete';
15
+ const TASK_COMPLETE_LOG_PREFIX = '[task:complete]';
16
+ const TASK_COMPLETE_DESCRIPTION = 'Complete a task directly through KernelRuntime';
17
+ const TASK_COMPLETE_DEFAULT_WORKSPACE_ROOT = '.';
18
+ const TASK_BLOCK_COMMAND_NAME = 'task-block';
19
+ const TASK_BLOCK_LOG_PREFIX = '[task:block]';
20
+ const TASK_BLOCK_DESCRIPTION = 'Block a task directly through KernelRuntime';
21
+ const TASK_BLOCK_DEFAULT_WORKSPACE_ROOT = '.';
22
+ const TASK_UNBLOCK_COMMAND_NAME = 'task-unblock';
23
+ const TASK_UNBLOCK_LOG_PREFIX = '[task:unblock]';
24
+ const TASK_UNBLOCK_DESCRIPTION = 'Unblock a task directly through KernelRuntime';
25
+ const TASK_UNBLOCK_DEFAULT_WORKSPACE_ROOT = '.';
26
+ const TASK_INSPECT_COMMAND_NAME = 'task-inspect';
27
+ const TASK_INSPECT_LOG_PREFIX = '[task:inspect]';
28
+ const TASK_INSPECT_DESCRIPTION = 'Inspect a task directly through KernelRuntime';
29
+ const TASK_INSPECT_DEFAULT_WORKSPACE_ROOT = '.';
30
+ const TOOL_EXECUTE_COMMAND_NAME = 'tool-execute';
31
+ const TOOL_EXECUTE_LOG_PREFIX = '[tool:execute]';
32
+ const TOOL_EXECUTE_DESCRIPTION = 'Execute a tool directly through KernelRuntime';
33
+ const TOOL_EXECUTE_DEFAULT_WORKSPACE_ROOT = '.';
34
+ const TASK_CLAIM_OPTIONS = {
35
+ taskId: {
36
+ name: 'taskId',
37
+ flags: '--task-id <taskId>',
38
+ description: 'Task ID to claim (e.g., WU-1772)',
39
+ },
40
+ by: {
41
+ name: 'by',
42
+ flags: '--by <identity>',
43
+ description: 'Actor identity for the claim (e.g., tom@hellm.ai)',
44
+ },
45
+ sessionId: {
46
+ name: 'sessionId',
47
+ flags: '--session-id <sessionId>',
48
+ description: 'Session ID for runtime event correlation',
49
+ },
50
+ timestamp: {
51
+ name: 'timestamp',
52
+ flags: '--timestamp <iso8601>',
53
+ description: 'Optional ISO-8601 timestamp override',
54
+ },
55
+ domainData: {
56
+ name: 'domainData',
57
+ flags: '--domain-data <json>',
58
+ description: 'Optional JSON object payload for domain-specific metadata',
59
+ },
60
+ workspaceRoot: {
61
+ name: 'workspaceRoot',
62
+ flags: '--workspace-root <path>',
63
+ description: 'Workspace root path (default: current directory)',
64
+ default: TASK_CLAIM_DEFAULT_WORKSPACE_ROOT,
65
+ },
66
+ json: {
67
+ name: 'json',
68
+ flags: '--json',
69
+ description: 'Output claim result as JSON',
70
+ type: 'boolean',
71
+ },
72
+ };
73
+ const TASK_CREATE_OPTIONS = {
74
+ taskSpec: {
75
+ name: 'taskSpec',
76
+ flags: '--task-spec <json>',
77
+ description: 'Task spec JSON payload for KernelRuntime.createTask',
78
+ },
79
+ workspaceRoot: {
80
+ name: 'workspaceRoot',
81
+ flags: '--workspace-root <path>',
82
+ description: 'Workspace root path (default: current directory)',
83
+ default: TASK_CREATE_DEFAULT_WORKSPACE_ROOT,
84
+ },
85
+ json: {
86
+ name: 'json',
87
+ flags: '--json',
88
+ description: 'Output create result as JSON',
89
+ type: 'boolean',
90
+ },
91
+ };
92
+ const TASK_COMPLETE_OPTIONS = {
93
+ complete: {
94
+ name: 'complete',
95
+ flags: '--complete',
96
+ description: 'Run task completion flow',
97
+ type: 'boolean',
98
+ },
99
+ taskId: {
100
+ name: 'taskId',
101
+ flags: '--task-id <taskId>',
102
+ description: 'Task ID to complete (e.g., WU-1786)',
103
+ },
104
+ runId: {
105
+ name: 'runId',
106
+ flags: '--run-id <runId>',
107
+ description: 'Optional run ID override',
108
+ },
109
+ timestamp: {
110
+ name: 'timestamp',
111
+ flags: '--timestamp <iso8601>',
112
+ description: 'Optional ISO-8601 timestamp override',
113
+ },
114
+ evidenceRefs: {
115
+ name: 'evidenceRefs',
116
+ flags: '--evidence-refs <json>',
117
+ description: 'Optional JSON array of receipt/evidence references',
118
+ },
119
+ workspaceRoot: {
120
+ name: 'workspaceRoot',
121
+ flags: '--workspace-root <path>',
122
+ description: 'Workspace root path (default: current directory)',
123
+ default: TASK_COMPLETE_DEFAULT_WORKSPACE_ROOT,
124
+ },
125
+ json: {
126
+ name: 'json',
127
+ flags: '--json',
128
+ description: 'Output complete result as JSON',
129
+ type: 'boolean',
130
+ },
131
+ };
132
+ const TASK_BLOCK_OPTIONS = {
133
+ block: {
134
+ name: 'block',
135
+ flags: '--block',
136
+ description: 'Run task block flow',
137
+ type: 'boolean',
138
+ },
139
+ taskId: {
140
+ name: 'taskId',
141
+ flags: '--task-id <taskId>',
142
+ description: 'Task ID to block (e.g., WU-1787)',
143
+ },
144
+ reason: {
145
+ name: 'reason',
146
+ flags: '--reason <reason>',
147
+ description: 'Reason for blocking the task',
148
+ },
149
+ timestamp: {
150
+ name: 'timestamp',
151
+ flags: '--timestamp <iso8601>',
152
+ description: 'Optional ISO-8601 timestamp override',
153
+ },
154
+ workspaceRoot: {
155
+ name: 'workspaceRoot',
156
+ flags: '--workspace-root <path>',
157
+ description: 'Workspace root path (default: current directory)',
158
+ default: TASK_BLOCK_DEFAULT_WORKSPACE_ROOT,
159
+ },
160
+ json: {
161
+ name: 'json',
162
+ flags: '--json',
163
+ description: 'Output block result as JSON',
164
+ type: 'boolean',
165
+ },
166
+ };
167
+ const TASK_UNBLOCK_OPTIONS = {
168
+ unblock: {
169
+ name: 'unblock',
170
+ flags: '--unblock',
171
+ description: 'Run task unblock flow',
172
+ type: 'boolean',
173
+ },
174
+ taskId: {
175
+ name: 'taskId',
176
+ flags: '--task-id <taskId>',
177
+ description: 'Task ID to unblock (e.g., WU-1787)',
178
+ },
179
+ timestamp: {
180
+ name: 'timestamp',
181
+ flags: '--timestamp <iso8601>',
182
+ description: 'Optional ISO-8601 timestamp override',
183
+ },
184
+ workspaceRoot: {
185
+ name: 'workspaceRoot',
186
+ flags: '--workspace-root <path>',
187
+ description: 'Workspace root path (default: current directory)',
188
+ default: TASK_UNBLOCK_DEFAULT_WORKSPACE_ROOT,
189
+ },
190
+ json: {
191
+ name: 'json',
192
+ flags: '--json',
193
+ description: 'Output unblock result as JSON',
194
+ type: 'boolean',
195
+ },
196
+ };
197
+ const TASK_INSPECT_OPTIONS = {
198
+ inspect: {
199
+ name: 'inspect',
200
+ flags: '--inspect',
201
+ description: 'Run task inspect flow',
202
+ type: 'boolean',
203
+ },
204
+ taskId: {
205
+ name: 'taskId',
206
+ flags: '--task-id <taskId>',
207
+ description: 'Task ID to inspect (e.g., WU-1788)',
208
+ },
209
+ workspaceRoot: {
210
+ name: 'workspaceRoot',
211
+ flags: '--workspace-root <path>',
212
+ description: 'Workspace root path (default: current directory)',
213
+ default: TASK_INSPECT_DEFAULT_WORKSPACE_ROOT,
214
+ },
215
+ json: {
216
+ name: 'json',
217
+ flags: '--json',
218
+ description: 'Output inspect result as JSON',
219
+ type: 'boolean',
220
+ },
221
+ };
222
+ const TOOL_EXECUTE_OPTIONS = {
223
+ toolExecute: {
224
+ name: 'toolExecute',
225
+ flags: '--tool-execute',
226
+ description: 'Run tool execution flow',
227
+ type: 'boolean',
228
+ },
229
+ toolName: {
230
+ name: 'toolName',
231
+ flags: '--tool-name <toolName>',
232
+ description: 'Tool capability name to execute',
233
+ },
234
+ toolInput: {
235
+ name: 'toolInput',
236
+ flags: '--tool-input <json>',
237
+ description: 'Optional JSON input payload for the tool (default: {})',
238
+ },
239
+ taskId: {
240
+ name: 'taskId',
241
+ flags: '--task-id <taskId>',
242
+ description: 'Task ID for execution context',
243
+ },
244
+ runId: {
245
+ name: 'runId',
246
+ flags: '--run-id <runId>',
247
+ description: 'Run ID for execution context',
248
+ },
249
+ sessionId: {
250
+ name: 'sessionId',
251
+ flags: '--session-id <sessionId>',
252
+ description: 'Session ID for execution context',
253
+ },
254
+ allowedScopes: {
255
+ name: 'allowedScopes',
256
+ flags: '--allowed-scopes <json>',
257
+ description: 'Optional JSON array of runtime-allowed tool scopes (default: [])',
258
+ },
259
+ metadata: {
260
+ name: 'metadata',
261
+ flags: '--metadata <json>',
262
+ description: 'Optional JSON object metadata for execution context',
263
+ },
264
+ workspaceRoot: {
265
+ name: 'workspaceRoot',
266
+ flags: '--workspace-root <path>',
267
+ description: 'Workspace root path (default: current directory)',
268
+ default: TOOL_EXECUTE_DEFAULT_WORKSPACE_ROOT,
269
+ },
270
+ json: {
271
+ name: 'json',
272
+ flags: '--json',
273
+ description: 'Output tool execution result as JSON',
274
+ type: 'boolean',
275
+ },
276
+ };
277
+ export function parseTaskClaimDomainData(raw) {
278
+ if (!raw) {
279
+ return undefined;
280
+ }
281
+ let parsed;
282
+ try {
283
+ parsed = JSON.parse(raw);
284
+ }
285
+ catch {
286
+ die(`${TASK_CLAIM_LOG_PREFIX} --domain-data must be valid JSON`);
287
+ }
288
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
289
+ die(`${TASK_CLAIM_LOG_PREFIX} --domain-data must be a JSON object`);
290
+ }
291
+ return parsed;
292
+ }
293
+ export function parseTaskCreateSpec(raw) {
294
+ if (!raw) {
295
+ die(`${TASK_CREATE_LOG_PREFIX} --task-spec is required`);
296
+ }
297
+ let parsed;
298
+ try {
299
+ parsed = JSON.parse(raw);
300
+ }
301
+ catch {
302
+ die(`${TASK_CREATE_LOG_PREFIX} --task-spec must be valid JSON`);
303
+ }
304
+ const validated = TaskSpecSchema.safeParse(parsed);
305
+ if (!validated.success) {
306
+ die(`${TASK_CREATE_LOG_PREFIX} --task-spec is invalid: ${validated.error.message}`);
307
+ }
308
+ return validated.data;
309
+ }
310
+ export function parseTaskBlockReason(raw) {
311
+ const reason = raw?.trim() ?? '';
312
+ if (reason.length === 0) {
313
+ die(`${TASK_BLOCK_LOG_PREFIX} --reason is required`);
314
+ }
315
+ return reason;
316
+ }
317
+ export function parseTaskCompleteEvidenceRefs(raw) {
318
+ if (!raw) {
319
+ return undefined;
320
+ }
321
+ let parsed;
322
+ try {
323
+ parsed = JSON.parse(raw);
324
+ }
325
+ catch {
326
+ die(`${TASK_COMPLETE_LOG_PREFIX} --evidence-refs must be valid JSON`);
327
+ }
328
+ if (!Array.isArray(parsed) || !parsed.every((item) => typeof item === 'string')) {
329
+ die(`${TASK_COMPLETE_LOG_PREFIX} --evidence-refs must be a JSON array of strings`);
330
+ }
331
+ return parsed;
332
+ }
333
+ export function parseTaskToolExecuteInput(raw) {
334
+ if (!raw) {
335
+ return {};
336
+ }
337
+ try {
338
+ return JSON.parse(raw);
339
+ }
340
+ catch {
341
+ die(`${TOOL_EXECUTE_LOG_PREFIX} --tool-input must be valid JSON`);
342
+ }
343
+ }
344
+ export function parseTaskToolExecuteScopes(raw) {
345
+ if (!raw) {
346
+ return [];
347
+ }
348
+ let parsed;
349
+ try {
350
+ parsed = JSON.parse(raw);
351
+ }
352
+ catch {
353
+ die(`${TOOL_EXECUTE_LOG_PREFIX} --allowed-scopes must be valid JSON`);
354
+ }
355
+ const validated = ExecutionContextSchema.safeParse({
356
+ run_id: 'run-placeholder',
357
+ task_id: 'task-placeholder',
358
+ session_id: 'session-placeholder',
359
+ allowed_scopes: parsed,
360
+ });
361
+ if (!validated.success) {
362
+ die(`${TOOL_EXECUTE_LOG_PREFIX} --allowed-scopes must be a valid tool scope array: ${validated.error.message}`);
363
+ }
364
+ return validated.data.allowed_scopes;
365
+ }
366
+ export function parseTaskToolExecuteMetadata(raw) {
367
+ if (!raw) {
368
+ return undefined;
369
+ }
370
+ let parsed;
371
+ try {
372
+ parsed = JSON.parse(raw);
373
+ }
374
+ catch {
375
+ die(`${TOOL_EXECUTE_LOG_PREFIX} --metadata must be valid JSON`);
376
+ }
377
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
378
+ die(`${TOOL_EXECUTE_LOG_PREFIX} --metadata must be a JSON object`);
379
+ }
380
+ return parsed;
381
+ }
382
+ export function parseTaskClaimArgs() {
383
+ const options = Object.values(TASK_CLAIM_OPTIONS);
384
+ const parsed = createWUParser({
385
+ name: TASK_CLAIM_COMMAND_NAME,
386
+ description: TASK_CLAIM_DESCRIPTION,
387
+ options,
388
+ required: ['taskId', 'by', 'sessionId'],
389
+ });
390
+ return {
391
+ input: {
392
+ task_id: parsed.taskId,
393
+ by: parsed.by,
394
+ session_id: parsed.sessionId,
395
+ timestamp: parsed.timestamp,
396
+ domain_data: parseTaskClaimDomainData(parsed.domainData),
397
+ },
398
+ workspaceRoot: parsed.workspaceRoot || process.cwd(),
399
+ json: parsed.json ?? false,
400
+ };
401
+ }
402
+ export function parseTaskCreateArgs() {
403
+ const options = Object.values(TASK_CREATE_OPTIONS);
404
+ const parsed = createWUParser({
405
+ name: TASK_CREATE_COMMAND_NAME,
406
+ description: TASK_CREATE_DESCRIPTION,
407
+ options,
408
+ required: ['taskSpec'],
409
+ });
410
+ return {
411
+ input: parseTaskCreateSpec(parsed.taskSpec),
412
+ workspaceRoot: parsed.workspaceRoot || process.cwd(),
413
+ json: parsed.json ?? false,
414
+ };
415
+ }
416
+ export function parseTaskCompleteArgs() {
417
+ const options = Object.values(TASK_COMPLETE_OPTIONS);
418
+ const parsed = createWUParser({
419
+ name: TASK_COMPLETE_COMMAND_NAME,
420
+ description: TASK_COMPLETE_DESCRIPTION,
421
+ options,
422
+ required: ['taskId'],
423
+ });
424
+ return {
425
+ input: {
426
+ task_id: parsed.taskId,
427
+ run_id: parsed.runId,
428
+ timestamp: parsed.timestamp,
429
+ evidence_refs: parseTaskCompleteEvidenceRefs(parsed.evidenceRefs),
430
+ },
431
+ workspaceRoot: parsed.workspaceRoot || process.cwd(),
432
+ json: parsed.json ?? false,
433
+ };
434
+ }
435
+ export function parseTaskBlockArgs() {
436
+ const options = Object.values(TASK_BLOCK_OPTIONS);
437
+ const parsed = createWUParser({
438
+ name: TASK_BLOCK_COMMAND_NAME,
439
+ description: TASK_BLOCK_DESCRIPTION,
440
+ options,
441
+ required: ['taskId', 'reason'],
442
+ });
443
+ return {
444
+ input: {
445
+ task_id: parsed.taskId,
446
+ reason: parseTaskBlockReason(parsed.reason),
447
+ timestamp: parsed.timestamp,
448
+ },
449
+ workspaceRoot: parsed.workspaceRoot || process.cwd(),
450
+ json: parsed.json ?? false,
451
+ };
452
+ }
453
+ export function parseTaskUnblockArgs() {
454
+ const options = Object.values(TASK_UNBLOCK_OPTIONS);
455
+ const parsed = createWUParser({
456
+ name: TASK_UNBLOCK_COMMAND_NAME,
457
+ description: TASK_UNBLOCK_DESCRIPTION,
458
+ options,
459
+ required: ['taskId'],
460
+ });
461
+ return {
462
+ input: {
463
+ task_id: parsed.taskId,
464
+ timestamp: parsed.timestamp,
465
+ },
466
+ workspaceRoot: parsed.workspaceRoot || process.cwd(),
467
+ json: parsed.json ?? false,
468
+ };
469
+ }
470
+ export function parseTaskInspectArgs() {
471
+ const options = Object.values(TASK_INSPECT_OPTIONS);
472
+ const parsed = createWUParser({
473
+ name: TASK_INSPECT_COMMAND_NAME,
474
+ description: TASK_INSPECT_DESCRIPTION,
475
+ options,
476
+ required: ['taskId'],
477
+ });
478
+ return {
479
+ taskId: parsed.taskId,
480
+ workspaceRoot: parsed.workspaceRoot || process.cwd(),
481
+ json: parsed.json ?? false,
482
+ };
483
+ }
484
+ export function parseTaskToolExecuteArgs() {
485
+ const options = Object.values(TOOL_EXECUTE_OPTIONS);
486
+ const parsed = createWUParser({
487
+ name: TOOL_EXECUTE_COMMAND_NAME,
488
+ description: TOOL_EXECUTE_DESCRIPTION,
489
+ options,
490
+ required: ['toolName', 'taskId', 'runId', 'sessionId'],
491
+ });
492
+ const parsedContext = ExecutionContextSchema.safeParse({
493
+ run_id: parsed.runId,
494
+ task_id: parsed.taskId,
495
+ session_id: parsed.sessionId,
496
+ allowed_scopes: parseTaskToolExecuteScopes(parsed.allowedScopes),
497
+ metadata: parseTaskToolExecuteMetadata(parsed.metadata),
498
+ });
499
+ if (!parsedContext.success) {
500
+ die(`${TOOL_EXECUTE_LOG_PREFIX} execution context is invalid: ${parsedContext.error.message}`);
501
+ }
502
+ return {
503
+ toolName: parsed.toolName,
504
+ toolInput: parseTaskToolExecuteInput(parsed.toolInput),
505
+ context: parsedContext.data,
506
+ workspaceRoot: parsed.workspaceRoot || process.cwd(),
507
+ json: parsed.json ?? false,
508
+ };
509
+ }
510
+ export async function runTaskClaim(args) {
511
+ const runtime = await initializeKernelRuntime({ workspaceRoot: args.workspaceRoot });
512
+ return runtime.claimTask(args.input);
513
+ }
514
+ export async function runTaskCreate(args) {
515
+ const runtime = await initializeKernelRuntime({ workspaceRoot: args.workspaceRoot });
516
+ return runtime.createTask(args.input);
517
+ }
518
+ export async function runTaskComplete(args) {
519
+ const runtime = await initializeKernelRuntime({ workspaceRoot: args.workspaceRoot });
520
+ return runtime.completeTask(args.input);
521
+ }
522
+ export async function runTaskBlock(args) {
523
+ const runtime = await initializeKernelRuntime({ workspaceRoot: args.workspaceRoot });
524
+ return runtime.blockTask(args.input);
525
+ }
526
+ export async function runTaskUnblock(args) {
527
+ const runtime = await initializeKernelRuntime({ workspaceRoot: args.workspaceRoot });
528
+ return runtime.unblockTask(args.input);
529
+ }
530
+ export async function runTaskInspect(args) {
531
+ const runtime = await initializeKernelRuntime({ workspaceRoot: args.workspaceRoot });
532
+ return runtime.inspectTask(args.taskId);
533
+ }
534
+ export async function runTaskToolExecute(args) {
535
+ const runtime = await initializeKernelRuntime({ workspaceRoot: args.workspaceRoot });
536
+ return runtime.executeTool(args.toolName, args.toolInput, args.context);
537
+ }
538
+ function formatTaskClaimSummary(result) {
539
+ const eventKinds = result.events.map((event) => event.kind).join(', ');
540
+ return [
541
+ `${TASK_CLAIM_LOG_PREFIX} Claimed task ${result.task_id}`,
542
+ `${TASK_CLAIM_LOG_PREFIX} Run ID: ${result.run.run_id}`,
543
+ `${TASK_CLAIM_LOG_PREFIX} Events: ${eventKinds}`,
544
+ ].join('\n');
545
+ }
546
+ function formatTaskCreateSummary(result) {
547
+ return [
548
+ `${TASK_CREATE_LOG_PREFIX} Created task ${result.task.id}`,
549
+ `${TASK_CREATE_LOG_PREFIX} Task spec: ${result.task_spec_path}`,
550
+ `${TASK_CREATE_LOG_PREFIX} Event: ${result.event.kind}`,
551
+ ].join('\n');
552
+ }
553
+ function formatTaskCompleteSummary(result) {
554
+ const eventKinds = result.events.map((event) => event.kind).join(', ');
555
+ return [
556
+ `${TASK_COMPLETE_LOG_PREFIX} Completed task ${result.task_id}`,
557
+ `${TASK_COMPLETE_LOG_PREFIX} Run ID: ${result.run_id}`,
558
+ `${TASK_COMPLETE_LOG_PREFIX} Events: ${eventKinds}`,
559
+ ].join('\n');
560
+ }
561
+ function formatTaskBlockSummary(result) {
562
+ return [
563
+ `${TASK_BLOCK_LOG_PREFIX} Blocked task ${result.task_id}`,
564
+ `${TASK_BLOCK_LOG_PREFIX} Event: ${result.event.kind}`,
565
+ `${TASK_BLOCK_LOG_PREFIX} Reason: ${result.event.reason}`,
566
+ ].join('\n');
567
+ }
568
+ function formatTaskUnblockSummary(result) {
569
+ return [
570
+ `${TASK_UNBLOCK_LOG_PREFIX} Unblocked task ${result.task_id}`,
571
+ `${TASK_UNBLOCK_LOG_PREFIX} Event: ${result.event.kind}`,
572
+ ].join('\n');
573
+ }
574
+ function formatTaskInspectSummary(result) {
575
+ return [
576
+ `${TASK_INSPECT_LOG_PREFIX} Inspected task ${result.task_id}`,
577
+ `${TASK_INSPECT_LOG_PREFIX} State: ${result.state.status}`,
578
+ `${TASK_INSPECT_LOG_PREFIX} Runs: ${result.run_history.length}`,
579
+ `${TASK_INSPECT_LOG_PREFIX} Events: ${result.events.length}`,
580
+ ].join('\n');
581
+ }
582
+ function formatTaskToolExecuteSummary(toolName, result) {
583
+ const receiptId = result.metadata && typeof result.metadata.receipt_id === 'string'
584
+ ? result.metadata.receipt_id
585
+ : null;
586
+ const status = result.success ? 'success' : 'failure';
587
+ return [
588
+ `${TOOL_EXECUTE_LOG_PREFIX} Executed tool ${toolName}`,
589
+ `${TOOL_EXECUTE_LOG_PREFIX} Status: ${status}`,
590
+ receiptId ? `${TOOL_EXECUTE_LOG_PREFIX} Receipt: ${receiptId}` : null,
591
+ ]
592
+ .filter((line) => line !== null)
593
+ .join('\n');
594
+ }
595
+ export async function main() {
596
+ if (process.argv.includes('--task-spec')) {
597
+ const args = parseTaskCreateArgs();
598
+ const result = await runTaskCreate(args);
599
+ if (args.json) {
600
+ console.log(JSON.stringify(result, null, 2));
601
+ return;
602
+ }
603
+ console.log(formatTaskCreateSummary(result));
604
+ return;
605
+ }
606
+ if (process.argv.includes('--complete')) {
607
+ const args = parseTaskCompleteArgs();
608
+ const result = await runTaskComplete(args);
609
+ if (args.json) {
610
+ console.log(JSON.stringify(result, null, 2));
611
+ return;
612
+ }
613
+ console.log(formatTaskCompleteSummary(result));
614
+ return;
615
+ }
616
+ if (process.argv.includes('--block')) {
617
+ const args = parseTaskBlockArgs();
618
+ const result = await runTaskBlock(args);
619
+ if (args.json) {
620
+ console.log(JSON.stringify(result, null, 2));
621
+ return;
622
+ }
623
+ console.log(formatTaskBlockSummary(result));
624
+ return;
625
+ }
626
+ if (process.argv.includes('--unblock')) {
627
+ const args = parseTaskUnblockArgs();
628
+ const result = await runTaskUnblock(args);
629
+ if (args.json) {
630
+ console.log(JSON.stringify(result, null, 2));
631
+ return;
632
+ }
633
+ console.log(formatTaskUnblockSummary(result));
634
+ return;
635
+ }
636
+ if (process.argv.includes('--inspect')) {
637
+ const args = parseTaskInspectArgs();
638
+ const result = await runTaskInspect(args);
639
+ if (args.json) {
640
+ console.log(JSON.stringify(result, null, 2));
641
+ return;
642
+ }
643
+ console.log(formatTaskInspectSummary(result));
644
+ return;
645
+ }
646
+ if (process.argv.includes('--tool-execute')) {
647
+ const args = parseTaskToolExecuteArgs();
648
+ const result = await runTaskToolExecute(args);
649
+ if (args.json) {
650
+ console.log(JSON.stringify(result, null, 2));
651
+ return;
652
+ }
653
+ console.log(formatTaskToolExecuteSummary(args.toolName, result));
654
+ return;
655
+ }
656
+ const args = parseTaskClaimArgs();
657
+ const result = await runTaskClaim(args);
658
+ if (args.json) {
659
+ console.log(JSON.stringify(result, null, 2));
660
+ return;
661
+ }
662
+ console.log(formatTaskClaimSummary(result));
663
+ }
664
+ if (import.meta.main) {
665
+ void runCLI(main);
666
+ }
667
+ //# sourceMappingURL=task-claim.js.map