agileflow 2.99.1 → 2.99.2
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.
- package/CHANGELOG.md +5 -0
- package/lib/dashboard-server.js +16 -8
- package/lib/feedback.js +4 -3
- package/lib/merge-operations.js +17 -8
- package/lib/session-operations.js +13 -3
- package/lib/session-switching.js +6 -1
- package/package.json +1 -1
- package/scripts/agileflow-configure.js +2 -1
- package/scripts/agileflow-welcome.js +11 -6
- package/scripts/damage-control-bash.js +33 -3
- package/scripts/damage-control-edit.js +33 -3
- package/scripts/damage-control-write.js +33 -3
- package/scripts/lib/configure-features.js +4 -3
- package/scripts/lib/configure-repair.js +4 -3
- package/scripts/lib/process-cleanup.js +188 -10
- package/scripts/session-manager.js +108 -35
- package/src/core/agents/configuration/archival.md +2 -1
- package/src/core/agents/configuration/attribution.md +2 -1
- package/src/core/agents/configuration/ci.md +2 -1
- package/src/core/agents/configuration/damage-control.md +2 -1
- package/src/core/agents/configuration/git-config.md +2 -1
- package/src/core/agents/configuration/hooks.md +2 -1
- package/src/core/agents/configuration/precompact.md +2 -1
- package/src/core/agents/configuration/status-line.md +2 -1
- package/src/core/agents/configuration/verify.md +2 -1
- package/src/core/commands/adr/list.md +1 -1
- package/src/core/commands/adr/update.md +1 -1
- package/src/core/commands/adr/view.md +1 -1
- package/src/core/commands/adr.md +1 -1
- package/src/core/commands/agent.md +1 -1
- package/src/core/commands/api.md +1 -1
- package/src/core/commands/assign.md +1 -1
- package/src/core/commands/audit.md +1 -1
- package/src/core/commands/auto.md +1 -1
- package/src/core/commands/automate.md +1 -1
- package/src/core/commands/babysit.md +1 -1
- package/src/core/commands/baseline.md +1 -1
- package/src/core/commands/batch.md +1 -1
- package/src/core/commands/blockers.md +1 -1
- package/src/core/commands/board.md +1 -1
- package/src/core/commands/changelog.md +1 -1
- package/src/core/commands/choose.md +1 -1
- package/src/core/commands/ci.md +1 -1
- package/src/core/commands/compress.md +1 -1
- package/src/core/commands/configure.md +1 -1
- package/src/core/commands/context/export.md +1 -1
- package/src/core/commands/context/full.md +1 -1
- package/src/core/commands/context/note.md +1 -1
- package/src/core/commands/council.md +1 -1
- package/src/core/commands/debt.md +1 -1
- package/src/core/commands/deploy.md +1 -1
- package/src/core/commands/deps.md +1 -1
- package/src/core/commands/diagnose.md +1 -1
- package/src/core/commands/docs.md +1 -1
- package/src/core/commands/epic/list.md +1 -1
- package/src/core/commands/epic/view.md +1 -1
- package/src/core/commands/epic.md +1 -1
- package/src/core/commands/feedback.md +1 -1
- package/src/core/commands/handoff.md +1 -1
- package/src/core/commands/help.md +4 -190
- package/src/core/commands/ideate/history.md +1 -1
- package/src/core/commands/ideate/new.md +1 -1
- package/src/core/commands/impact.md +1 -1
- package/src/core/commands/install.md +1 -1
- package/src/core/commands/logic/audit.md +1 -1
- package/src/core/commands/maintain.md +1 -1
- package/src/core/commands/metrics.md +1 -1
- package/src/core/commands/multi-expert.md +1 -1
- package/src/core/commands/packages.md +1 -1
- package/src/core/commands/pr.md +1 -1
- package/src/core/commands/readme-sync.md +1 -1
- package/src/core/commands/research/analyze.md +1 -1
- package/src/core/commands/research/ask.md +1 -1
- package/src/core/commands/research/import.md +1 -1
- package/src/core/commands/research/list.md +1 -1
- package/src/core/commands/research/synthesize.md +1 -1
- package/src/core/commands/research/view.md +1 -1
- package/src/core/commands/retro.md +1 -1
- package/src/core/commands/review.md +1 -1
- package/src/core/commands/rlm.md +1 -1
- package/src/core/commands/roadmap/analyze.md +1 -1
- package/src/core/commands/rpi.md +1 -1
- package/src/core/commands/session/cleanup.md +1 -1
- package/src/core/commands/session/end.md +1 -1
- package/src/core/commands/session/history.md +1 -1
- package/src/core/commands/session/init.md +1 -1
- package/src/core/commands/session/new.md +1 -1
- package/src/core/commands/session/resume.md +1 -1
- package/src/core/commands/session/spawn.md +1 -1
- package/src/core/commands/session/status.md +1 -1
- package/src/core/commands/skill/create.md +1 -1
- package/src/core/commands/skill/delete.md +1 -1
- package/src/core/commands/skill/edit.md +1 -1
- package/src/core/commands/skill/list.md +1 -1
- package/src/core/commands/skill/test.md +1 -1
- package/src/core/commands/skill/upgrade.md +1 -1
- package/src/core/commands/sprint.md +1 -1
- package/src/core/commands/status.md +1 -1
- package/src/core/commands/story/list.md +1 -1
- package/src/core/commands/story/view.md +1 -1
- package/src/core/commands/story-validate.md +1 -1
- package/src/core/commands/story.md +1 -1
- package/src/core/commands/team/list.md +1 -1
- package/src/core/commands/team/start.md +1 -1
- package/src/core/commands/team/status.md +1 -1
- package/src/core/commands/team/stop.md +1 -1
- package/src/core/commands/template.md +1 -1
- package/src/core/commands/tests.md +1 -1
- package/src/core/commands/update.md +1 -1
- package/src/core/commands/validate-expertise.md +1 -1
- package/src/core/commands/velocity.md +1 -1
- package/src/core/commands/verify.md +1 -1
- package/src/core/commands/whats-new.md +1 -1
- package/src/core/commands/workflow.md +1 -1
- package/tools/cli/installers/ide/codex.js +12 -4
- package/tools/cli/lib/content-injector.js +23 -4
|
@@ -223,8 +223,13 @@ function main() {
|
|
|
223
223
|
if (!arg.startsWith('--')) continue;
|
|
224
224
|
const eqIndex = arg.indexOf('=');
|
|
225
225
|
let key, value;
|
|
226
|
-
if (eqIndex !== -1) {
|
|
227
|
-
|
|
226
|
+
if (eqIndex !== -1) {
|
|
227
|
+
key = arg.slice(2, eqIndex);
|
|
228
|
+
value = arg.slice(eqIndex + 1);
|
|
229
|
+
} else {
|
|
230
|
+
key = arg.slice(2);
|
|
231
|
+
value = args[++i];
|
|
232
|
+
}
|
|
228
233
|
if (!allowedKeys.includes(key)) {
|
|
229
234
|
console.log(JSON.stringify({ success: false, error: `Unknown option: --${key}` }));
|
|
230
235
|
return null;
|
|
@@ -243,7 +248,8 @@ function main() {
|
|
|
243
248
|
}
|
|
244
249
|
|
|
245
250
|
case 'unregister': {
|
|
246
|
-
const id = requireId();
|
|
251
|
+
const id = requireId();
|
|
252
|
+
if (!id) return;
|
|
247
253
|
unregisterSession(id);
|
|
248
254
|
console.log(JSON.stringify({ success: true }));
|
|
249
255
|
break;
|
|
@@ -253,15 +259,25 @@ function main() {
|
|
|
253
259
|
const options = parseOpts(1, ['nickname', 'branch', 'timeout', 'mode', 'template']);
|
|
254
260
|
if (!options) return;
|
|
255
261
|
if (options.mode === 'team') {
|
|
256
|
-
console.log(
|
|
257
|
-
|
|
258
|
-
|
|
262
|
+
console.log(
|
|
263
|
+
JSON.stringify(
|
|
264
|
+
createTeamSession({
|
|
265
|
+
template: options.template || 'fullstack',
|
|
266
|
+
nickname: options.nickname,
|
|
267
|
+
})
|
|
268
|
+
)
|
|
269
|
+
);
|
|
259
270
|
break;
|
|
260
271
|
}
|
|
261
272
|
if (options.timeout) {
|
|
262
273
|
options.timeout = parseInt(options.timeout, 10);
|
|
263
274
|
if (isNaN(options.timeout) || options.timeout < 1000) {
|
|
264
|
-
console.log(
|
|
275
|
+
console.log(
|
|
276
|
+
JSON.stringify({
|
|
277
|
+
success: false,
|
|
278
|
+
error: 'Timeout must be a number >= 1000 (milliseconds)',
|
|
279
|
+
})
|
|
280
|
+
);
|
|
265
281
|
return;
|
|
266
282
|
}
|
|
267
283
|
}
|
|
@@ -320,9 +336,13 @@ function main() {
|
|
|
320
336
|
}
|
|
321
337
|
|
|
322
338
|
case 'get': {
|
|
323
|
-
const id = requireId();
|
|
339
|
+
const id = requireId();
|
|
340
|
+
if (!id) return;
|
|
324
341
|
const session = getSession(id);
|
|
325
|
-
if (!session) {
|
|
342
|
+
if (!session) {
|
|
343
|
+
console.log(JSON.stringify({ success: false, error: `Session ${id} not found` }));
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
326
346
|
console.log(JSON.stringify({ success: true, ...session }));
|
|
327
347
|
break;
|
|
328
348
|
}
|
|
@@ -333,47 +353,63 @@ function main() {
|
|
|
333
353
|
}
|
|
334
354
|
|
|
335
355
|
case 'check-merge': {
|
|
336
|
-
const id = requireId();
|
|
356
|
+
const id = requireId();
|
|
357
|
+
if (!id) return;
|
|
337
358
|
console.log(JSON.stringify(checkMergeability(id)));
|
|
338
359
|
break;
|
|
339
360
|
}
|
|
340
361
|
case 'merge-preview': {
|
|
341
|
-
const id = requireId();
|
|
362
|
+
const id = requireId();
|
|
363
|
+
if (!id) return;
|
|
342
364
|
console.log(JSON.stringify(getMergePreview(id)));
|
|
343
365
|
break;
|
|
344
366
|
}
|
|
345
367
|
case 'integrate': {
|
|
346
|
-
const id = requireId();
|
|
347
|
-
|
|
368
|
+
const id = requireId();
|
|
369
|
+
if (!id) return;
|
|
370
|
+
const opts = parseOpts(
|
|
371
|
+
2,
|
|
372
|
+
['strategy', 'deleteBranch', 'deleteWorktree', 'message'],
|
|
373
|
+
['deleteBranch', 'deleteWorktree']
|
|
374
|
+
);
|
|
348
375
|
if (!opts) return;
|
|
349
376
|
console.log(JSON.stringify(integrateSession(id, opts)));
|
|
350
377
|
break;
|
|
351
378
|
}
|
|
352
379
|
case 'commit-changes': {
|
|
353
|
-
const id = requireId();
|
|
380
|
+
const id = requireId();
|
|
381
|
+
if (!id) return;
|
|
354
382
|
const opts = parseOpts(2, ['message']);
|
|
355
383
|
if (!opts) return;
|
|
356
384
|
console.log(JSON.stringify(commitChanges(id, opts)));
|
|
357
385
|
break;
|
|
358
386
|
}
|
|
359
387
|
case 'stash': {
|
|
360
|
-
const id = requireId();
|
|
388
|
+
const id = requireId();
|
|
389
|
+
if (!id) return;
|
|
361
390
|
console.log(JSON.stringify(stashChanges(id)));
|
|
362
391
|
break;
|
|
363
392
|
}
|
|
364
393
|
case 'unstash': {
|
|
365
|
-
const id = requireId();
|
|
394
|
+
const id = requireId();
|
|
395
|
+
if (!id) return;
|
|
366
396
|
console.log(JSON.stringify(unstashChanges(id)));
|
|
367
397
|
break;
|
|
368
398
|
}
|
|
369
399
|
case 'discard-changes': {
|
|
370
|
-
const id = requireId();
|
|
400
|
+
const id = requireId();
|
|
401
|
+
if (!id) return;
|
|
371
402
|
console.log(JSON.stringify(discardChanges(id)));
|
|
372
403
|
break;
|
|
373
404
|
}
|
|
374
405
|
case 'smart-merge': {
|
|
375
|
-
const id = requireId();
|
|
376
|
-
|
|
406
|
+
const id = requireId();
|
|
407
|
+
if (!id) return;
|
|
408
|
+
const opts = parseOpts(
|
|
409
|
+
2,
|
|
410
|
+
['strategy', 'deleteBranch', 'deleteWorktree', 'message'],
|
|
411
|
+
['deleteBranch', 'deleteWorktree']
|
|
412
|
+
);
|
|
377
413
|
if (!opts) return;
|
|
378
414
|
console.log(JSON.stringify(smartMerge(id, opts), null, 2));
|
|
379
415
|
break;
|
|
@@ -383,7 +419,8 @@ function main() {
|
|
|
383
419
|
break;
|
|
384
420
|
}
|
|
385
421
|
case 'switch': {
|
|
386
|
-
const id = requireId('Session ID or nickname');
|
|
422
|
+
const id = requireId('Session ID or nickname');
|
|
423
|
+
if (!id) return;
|
|
387
424
|
console.log(JSON.stringify(switchSession(id), null, 2));
|
|
388
425
|
break;
|
|
389
426
|
}
|
|
@@ -453,21 +490,57 @@ ${c.cyan}Commands:${c.reset}
|
|
|
453
490
|
|
|
454
491
|
// --- Exports ---
|
|
455
492
|
module.exports = {
|
|
456
|
-
injectRegistry,
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
493
|
+
injectRegistry,
|
|
494
|
+
getRegistryInstance,
|
|
495
|
+
resetRegistryCache,
|
|
496
|
+
loadRegistry,
|
|
497
|
+
saveRegistry,
|
|
498
|
+
registerSession,
|
|
499
|
+
unregisterSession,
|
|
500
|
+
getSession,
|
|
501
|
+
createSession,
|
|
502
|
+
createTeamSession,
|
|
503
|
+
getSessions,
|
|
504
|
+
getSessionsAsync,
|
|
505
|
+
getActiveSessionCount,
|
|
506
|
+
deleteSession,
|
|
507
|
+
isSessionActive,
|
|
508
|
+
isSessionActiveAsync,
|
|
509
|
+
cleanupStaleLocks,
|
|
510
|
+
cleanupStaleLocksAsync,
|
|
511
|
+
switchSession,
|
|
512
|
+
clearActiveSession,
|
|
513
|
+
getActiveSession,
|
|
514
|
+
THREAD_TYPES,
|
|
515
|
+
detectThreadType,
|
|
516
|
+
getSessionThreadType,
|
|
517
|
+
setSessionThreadType,
|
|
518
|
+
transitionThread,
|
|
519
|
+
getValidThreadTransitions,
|
|
520
|
+
getMainBranch,
|
|
521
|
+
checkMergeability,
|
|
522
|
+
getMergePreview,
|
|
523
|
+
integrateSession,
|
|
524
|
+
commitChanges,
|
|
525
|
+
stashChanges,
|
|
526
|
+
unstashChanges,
|
|
527
|
+
discardChanges,
|
|
528
|
+
smartMerge,
|
|
529
|
+
getConflictingFiles,
|
|
530
|
+
categorizeFile,
|
|
531
|
+
getMergeStrategy,
|
|
532
|
+
getMergeHistory,
|
|
533
|
+
SESSION_PHASES,
|
|
534
|
+
getSessionPhase,
|
|
535
|
+
getSessionPhaseAsync,
|
|
536
|
+
getSessionPhasesAsync,
|
|
537
|
+
renderKanbanBoard,
|
|
538
|
+
renderKanbanBoardAsync,
|
|
539
|
+
formatSessionsTable,
|
|
540
|
+
getFileDetails,
|
|
541
|
+
getSessionsHealth,
|
|
542
|
+
execGitAsync,
|
|
543
|
+
gitCache,
|
|
471
544
|
};
|
|
472
545
|
|
|
473
546
|
if (require.main === module) main();
|
package/src/core/commands/adr.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Create an Architecture Decision Record
|
|
3
|
-
argument-hint: NUMBER=<number> TITLE=<text> CONTEXT=<text> DECISION=<text> CONSEQUENCES=<text> [LINKS=<text>]
|
|
3
|
+
argument-hint: "NUMBER=<number> TITLE=<text> CONTEXT=<text> DECISION=<text> CONSEQUENCES=<text> [LINKS=<text>]"
|
|
4
4
|
compact_context:
|
|
5
5
|
priority: medium
|
|
6
6
|
preserve_rules:
|
package/src/core/commands/api.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Assign or reassign a story to an owner
|
|
3
|
-
argument-hint: STORY=<US-ID> NEW_OWNER=<id> [NEW_STATUS=<status>] [NOTE=<text>]
|
|
3
|
+
argument-hint: "STORY=<US-ID> NEW_OWNER=<id> [NEW_STATUS=<status>] [NOTE=<text>]"
|
|
4
4
|
compact_context:
|
|
5
5
|
priority: high
|
|
6
6
|
preserve_rules:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Auto-generate stories from PRDs, mockups, or specs
|
|
3
|
-
argument-hint: SOURCE=<path|url> [EPIC=<EP-ID>] [OWNER=<id>] [AUTO_CREATE=true|false]
|
|
3
|
+
argument-hint: "SOURCE=<path|url> [EPIC=<EP-ID>] [OWNER=<id>] [AUTO_CREATE=true|false]"
|
|
4
4
|
compact_context:
|
|
5
5
|
priority: high
|
|
6
6
|
preserve_rules:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Manage scheduled automations for recurring tasks
|
|
3
|
-
argument-hint: ACTION=list|add|edit|remove|run|presets [ID=<automation-id>]
|
|
3
|
+
argument-hint: "ACTION=list|add|edit|remove|run|presets [ID=<automation-id>]"
|
|
4
4
|
compact_context:
|
|
5
5
|
priority: medium
|
|
6
6
|
preserve_rules:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Track and resolve blockers with actionable suggestions
|
|
3
|
-
argument-hint: [AGENT=<id>] [SHOW_RESOLVED=true|false] [DETAILED=true|false]
|
|
3
|
+
argument-hint: "[AGENT=<id>] [SHOW_RESOLVED=true|false] [DETAILED=true|false]"
|
|
4
4
|
model: haiku
|
|
5
5
|
compact_context:
|
|
6
6
|
priority: high
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Display visual kanban board with WIP limits
|
|
3
|
-
argument-hint: [EPIC=<EP-ID>] [OWNER=<id>] [FORMAT=ascii|markdown|html] [GROUP_BY=status|owner|epic]
|
|
3
|
+
argument-hint: "[EPIC=<EP-ID>] [OWNER=<id>] [FORMAT=ascii|markdown|html] [GROUP_BY=status|owner|epic]"
|
|
4
4
|
model: haiku
|
|
5
5
|
type: output-only # Board display - read-only visualization, not an ongoing task
|
|
6
6
|
compact_context:
|
package/src/core/commands/ci.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Configure AgileFlow features, hooks, and project infrastructure (Visual E2E, CI, git)
|
|
3
|
-
argument-hint: [--profile=<name>] [--save-profile=<name>] [--list-profiles] [--export-profile=<name>] [--import-profile=<file>] [--enable/--disable=features]
|
|
3
|
+
argument-hint: "[--profile=<name>] [--save-profile=<name>] [--list-profiles] [--export-profile=<name>] [--import-profile=<file>] [--enable/--disable=features]"
|
|
4
4
|
compact_context:
|
|
5
5
|
priority: critical
|
|
6
6
|
preserve_rules:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Convene AI Council for strategic decisions with three perspectives (Optimist, Advocate, Analyst)
|
|
3
|
-
argument-hint: <question> [--mode parallel|debate] [--rounds N]
|
|
3
|
+
argument-hint: "<question> [--mode parallel|debate] [--rounds N]"
|
|
4
4
|
compact_context:
|
|
5
5
|
priority: high
|
|
6
6
|
preserve_rules:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Visualize dependency graph with critical path detection
|
|
3
|
-
argument-hint: [SCOPE=story|epic|all] [EPIC=<EP-ID>] [STORY=<US-ID>] [FORMAT=ascii|mermaid|graphviz|json] [ANALYSIS=critical-path|circular|blocking|all]
|
|
3
|
+
argument-hint: "[SCOPE=story|epic|all] [EPIC=<EP-ID>] [STORY=<US-ID>] [FORMAT=ascii|mermaid|graphviz|json] [ANALYSIS=critical-path|circular|blocking|all]"
|
|
4
4
|
model: haiku
|
|
5
5
|
compact_context:
|
|
6
6
|
priority: high
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Create a new epic with stories
|
|
3
|
-
argument-hint: EPIC=<EP-ID> TITLE=<text> OWNER=<id> GOAL=<text> [STORIES=<list>] [RESEARCH=<file>]
|
|
3
|
+
argument-hint: "EPIC=<EP-ID> TITLE=<text> OWNER=<id> GOAL=<text> [STORIES=<list>] [RESEARCH=<file>]"
|
|
4
4
|
compact_context:
|
|
5
5
|
priority: high
|
|
6
6
|
preserve_rules:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Document work handoff between agents
|
|
3
|
-
argument-hint: STORY=<US-ID> FROM=<id> TO=<id> [SUMMARY=<text>] [BLOCKERS=<list>]
|
|
3
|
+
argument-hint: "STORY=<US-ID> FROM=<id> TO=<id> [SUMMARY=<text>] [BLOCKERS=<list>]"
|
|
4
4
|
compact_context:
|
|
5
5
|
priority: high
|
|
6
6
|
preserve_rules:
|