agileflow 2.91.0 → 2.92.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.
- package/CHANGELOG.md +10 -0
- package/README.md +6 -6
- package/lib/README.md +178 -0
- package/lib/codebase-indexer.js +32 -23
- package/lib/colors.js +190 -12
- package/lib/consent.js +232 -0
- package/lib/correlation.js +277 -0
- package/lib/error-codes.js +46 -0
- package/lib/errors.js +48 -6
- package/lib/file-cache.js +182 -0
- package/lib/format-error.js +156 -0
- package/lib/path-resolver.js +155 -7
- package/lib/paths.js +212 -20
- package/lib/placeholder-registry.js +205 -0
- package/lib/registry-di.js +358 -0
- package/lib/result-schema.js +363 -0
- package/lib/result.js +210 -0
- package/lib/session-registry.js +13 -0
- package/lib/session-state-machine.js +465 -0
- package/lib/validate-commands.js +308 -0
- package/lib/validate.js +116 -52
- package/package.json +1 -1
- package/scripts/af +34 -0
- package/scripts/agent-loop.js +63 -9
- package/scripts/agileflow-configure.js +2 -2
- package/scripts/agileflow-welcome.js +491 -23
- package/scripts/archive-completed-stories.sh +57 -11
- package/scripts/claude-tmux.sh +102 -0
- package/scripts/damage-control-bash.js +3 -70
- package/scripts/damage-control-edit.js +3 -20
- package/scripts/damage-control-write.js +3 -20
- package/scripts/dependency-check.js +310 -0
- package/scripts/get-env.js +11 -4
- package/scripts/lib/configure-detect.js +23 -1
- package/scripts/lib/configure-features.js +50 -2
- package/scripts/lib/context-formatter.js +771 -0
- package/scripts/lib/context-loader.js +699 -0
- package/scripts/lib/damage-control-utils.js +107 -0
- package/scripts/lib/json-utils.sh +162 -0
- package/scripts/lib/state-migrator.js +353 -0
- package/scripts/lib/story-state-machine.js +437 -0
- package/scripts/obtain-context.js +80 -1248
- package/scripts/pre-push-check.sh +46 -0
- package/scripts/precompact-context.sh +23 -10
- package/scripts/query-codebase.js +127 -14
- package/scripts/ralph-loop.js +5 -5
- package/scripts/session-manager.js +408 -55
- package/scripts/spawn-parallel.js +666 -0
- package/scripts/tui/blessed/data/watcher.js +20 -15
- package/scripts/tui/blessed/index.js +2 -2
- package/scripts/tui/blessed/panels/output.js +14 -8
- package/scripts/tui/blessed/panels/sessions.js +22 -15
- package/scripts/tui/blessed/panels/trace.js +14 -8
- package/scripts/tui/blessed/ui/help.js +3 -3
- package/scripts/tui/blessed/ui/screen.js +4 -4
- package/scripts/tui/blessed/ui/statusbar.js +5 -9
- package/scripts/tui/blessed/ui/tabbar.js +11 -11
- package/scripts/validators/component-validator.js +41 -14
- package/scripts/validators/json-schema-validator.js +11 -4
- package/scripts/validators/markdown-validator.js +1 -2
- package/scripts/validators/migration-validator.js +17 -5
- package/scripts/validators/security-validator.js +137 -33
- package/scripts/validators/story-format-validator.js +31 -10
- package/scripts/validators/test-result-validator.js +19 -4
- package/scripts/validators/workflow-validator.js +12 -5
- package/src/core/agents/codebase-query.md +24 -0
- package/src/core/commands/adr.md +114 -0
- package/src/core/commands/agent.md +120 -0
- package/src/core/commands/assign.md +145 -0
- package/src/core/commands/babysit.md +32 -5
- package/src/core/commands/changelog.md +118 -0
- package/src/core/commands/configure.md +42 -6
- package/src/core/commands/diagnose.md +114 -0
- package/src/core/commands/epic.md +113 -0
- package/src/core/commands/handoff.md +128 -0
- package/src/core/commands/help.md +75 -0
- package/src/core/commands/pr.md +96 -0
- package/src/core/commands/roadmap/analyze.md +400 -0
- package/src/core/commands/session/new.md +132 -6
- package/src/core/commands/session/spawn.md +197 -0
- package/src/core/commands/sprint.md +22 -0
- package/src/core/commands/status.md +74 -0
- package/src/core/commands/story.md +143 -4
- package/src/core/templates/agileflow-metadata.json +55 -2
- package/src/core/templates/plan-template.md +125 -0
- package/src/core/templates/story-lifecycle.md +213 -0
- package/src/core/templates/story-template.md +4 -0
- package/src/core/templates/tdd-test-template.js +241 -0
- package/tools/cli/commands/setup.js +95 -0
- package/tools/cli/installers/core/installer.js +94 -0
- package/tools/cli/installers/ide/_base-ide.js +20 -11
- package/tools/cli/installers/ide/codex.js +29 -47
- package/tools/cli/installers/ide/windsurf.js +1 -1
- package/tools/cli/lib/config-manager.js +17 -2
- package/tools/cli/lib/content-transformer.js +271 -0
- package/tools/cli/lib/error-handler.js +14 -22
- package/tools/cli/lib/ide-error-factory.js +421 -0
- package/tools/cli/lib/ide-health-monitor.js +364 -0
- package/tools/cli/lib/ide-registry.js +113 -2
- package/tools/cli/lib/ui.js +15 -25
|
@@ -48,6 +48,13 @@ function detectConfig(version) {
|
|
|
48
48
|
outdated: false,
|
|
49
49
|
mode: null,
|
|
50
50
|
},
|
|
51
|
+
tmuxautospawn: {
|
|
52
|
+
enabled: true, // Default to enabled (opt-out feature)
|
|
53
|
+
valid: true,
|
|
54
|
+
issues: [],
|
|
55
|
+
version: null,
|
|
56
|
+
outdated: false,
|
|
57
|
+
},
|
|
51
58
|
},
|
|
52
59
|
metadata: { exists: false, version: null },
|
|
53
60
|
currentVersion: version,
|
|
@@ -242,9 +249,16 @@ function detectMetadata(status, version) {
|
|
|
242
249
|
status.features.askuserquestion.mode = meta.features.askUserQuestion.mode || 'all';
|
|
243
250
|
}
|
|
244
251
|
|
|
252
|
+
// TmuxAutoSpawn metadata (default to true if not explicitly set)
|
|
253
|
+
if (meta.features?.tmuxAutoSpawn !== undefined) {
|
|
254
|
+
status.features.tmuxautospawn.enabled = meta.features.tmuxAutoSpawn.enabled !== false;
|
|
255
|
+
} else {
|
|
256
|
+
status.features.tmuxautospawn.enabled = true; // Default enabled
|
|
257
|
+
}
|
|
258
|
+
|
|
245
259
|
// Read feature versions and check if outdated
|
|
246
260
|
if (meta.features) {
|
|
247
|
-
const featureKeyMap = { askUserQuestion: 'askuserquestion' };
|
|
261
|
+
const featureKeyMap = { askUserQuestion: 'askuserquestion', tmuxAutoSpawn: 'tmuxautospawn' };
|
|
248
262
|
Object.entries(meta.features).forEach(([feature, data]) => {
|
|
249
263
|
const statusKey = featureKeyMap[feature] || feature.toLowerCase();
|
|
250
264
|
if (status.features[statusKey] && data.version) {
|
|
@@ -351,6 +365,14 @@ function printStatus(status) {
|
|
|
351
365
|
log(` AskUserQuestion: disabled`, c.dim);
|
|
352
366
|
}
|
|
353
367
|
|
|
368
|
+
// TmuxAutoSpawn
|
|
369
|
+
const tas = status.features.tmuxautospawn;
|
|
370
|
+
if (tas.enabled) {
|
|
371
|
+
log(` Tmux Auto-Spawn: enabled`, c.green);
|
|
372
|
+
} else {
|
|
373
|
+
log(` Tmux Auto-Spawn: disabled`, c.dim);
|
|
374
|
+
}
|
|
375
|
+
|
|
354
376
|
// Metadata version
|
|
355
377
|
if (status.metadata.exists) {
|
|
356
378
|
log(`\nMetadata: v${status.metadata.version}`, c.dim);
|
|
@@ -38,6 +38,7 @@ const FEATURES = {
|
|
|
38
38
|
patternsFile: 'damage-control-patterns.yaml',
|
|
39
39
|
},
|
|
40
40
|
askuserquestion: { metadataOnly: true },
|
|
41
|
+
tmuxautospawn: { metadataOnly: true },
|
|
41
42
|
};
|
|
42
43
|
|
|
43
44
|
const PROFILES = {
|
|
@@ -51,19 +52,27 @@ const PROFILES = {
|
|
|
51
52
|
'ralphloop',
|
|
52
53
|
'selfimprove',
|
|
53
54
|
'askuserquestion',
|
|
55
|
+
'tmuxautospawn',
|
|
54
56
|
],
|
|
55
57
|
archivalDays: 30,
|
|
56
58
|
},
|
|
57
59
|
basic: {
|
|
58
60
|
description: 'Essential hooks + archival (SessionStart + PreCompact + Archival)',
|
|
59
|
-
enable: ['sessionstart', 'precompact', 'archival', 'askuserquestion'],
|
|
61
|
+
enable: ['sessionstart', 'precompact', 'archival', 'askuserquestion', 'tmuxautospawn'],
|
|
60
62
|
disable: ['statusline', 'ralphloop', 'selfimprove'],
|
|
61
63
|
archivalDays: 30,
|
|
62
64
|
},
|
|
63
65
|
minimal: {
|
|
64
66
|
description: 'SessionStart + archival only',
|
|
65
67
|
enable: ['sessionstart', 'archival'],
|
|
66
|
-
disable: [
|
|
68
|
+
disable: [
|
|
69
|
+
'precompact',
|
|
70
|
+
'statusline',
|
|
71
|
+
'ralphloop',
|
|
72
|
+
'selfimprove',
|
|
73
|
+
'askuserquestion',
|
|
74
|
+
'tmuxautospawn',
|
|
75
|
+
],
|
|
67
76
|
archivalDays: 30,
|
|
68
77
|
},
|
|
69
78
|
none: {
|
|
@@ -76,6 +85,7 @@ const PROFILES = {
|
|
|
76
85
|
'ralphloop',
|
|
77
86
|
'selfimprove',
|
|
78
87
|
'askuserquestion',
|
|
88
|
+
'tmuxautospawn',
|
|
79
89
|
],
|
|
80
90
|
},
|
|
81
91
|
};
|
|
@@ -214,6 +224,25 @@ function enableFeature(feature, options = {}, version) {
|
|
|
214
224
|
return true;
|
|
215
225
|
}
|
|
216
226
|
|
|
227
|
+
// Handle tmuxautospawn (metadata only)
|
|
228
|
+
if (feature === 'tmuxautospawn') {
|
|
229
|
+
updateMetadata(
|
|
230
|
+
{
|
|
231
|
+
features: {
|
|
232
|
+
tmuxAutoSpawn: {
|
|
233
|
+
enabled: true,
|
|
234
|
+
version,
|
|
235
|
+
at: new Date().toISOString(),
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
version
|
|
240
|
+
);
|
|
241
|
+
success('Tmux auto-spawn enabled');
|
|
242
|
+
info('Running "af" or "agileflow" will auto-start Claude in tmux session');
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
|
|
217
246
|
// Handle damage control
|
|
218
247
|
if (feature === 'damagecontrol') {
|
|
219
248
|
return enableDamageControl(settings, options, version);
|
|
@@ -499,6 +528,25 @@ function disableFeature(feature, version) {
|
|
|
499
528
|
return true;
|
|
500
529
|
}
|
|
501
530
|
|
|
531
|
+
// Disable tmuxautospawn
|
|
532
|
+
if (feature === 'tmuxautospawn') {
|
|
533
|
+
updateMetadata(
|
|
534
|
+
{
|
|
535
|
+
features: {
|
|
536
|
+
tmuxAutoSpawn: {
|
|
537
|
+
enabled: false,
|
|
538
|
+
version,
|
|
539
|
+
at: new Date().toISOString(),
|
|
540
|
+
},
|
|
541
|
+
},
|
|
542
|
+
},
|
|
543
|
+
version
|
|
544
|
+
);
|
|
545
|
+
success('Tmux auto-spawn disabled');
|
|
546
|
+
info('Running "af" or "agileflow" will start Claude directly without tmux');
|
|
547
|
+
return true;
|
|
548
|
+
}
|
|
549
|
+
|
|
502
550
|
// Disable damage control
|
|
503
551
|
if (feature === 'damagecontrol') {
|
|
504
552
|
if (settings.hooks?.PreToolUse && Array.isArray(settings.hooks.PreToolUse)) {
|