agileflow 2.90.7 → 2.92.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.
- package/CHANGELOG.md +10 -0
- package/README.md +6 -6
- package/lib/README.md +178 -0
- package/lib/codebase-indexer.js +818 -0
- 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-names.js +3 -3
- package/lib/validate.js +116 -52
- package/package.json +4 -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 +435 -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 +43 -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 +118 -1048
- package/scripts/pre-push-check.sh +46 -0
- package/scripts/precompact-context.sh +36 -11
- package/scripts/query-codebase.js +538 -0
- package/scripts/ralph-loop.js +5 -5
- package/scripts/session-manager.js +220 -42
- package/scripts/spawn-parallel.js +651 -0
- package/scripts/tui/blessed/data/watcher.js +180 -0
- package/scripts/tui/blessed/index.js +244 -0
- package/scripts/tui/blessed/panels/output.js +101 -0
- package/scripts/tui/blessed/panels/sessions.js +150 -0
- package/scripts/tui/blessed/panels/trace.js +97 -0
- package/scripts/tui/blessed/ui/help.js +77 -0
- package/scripts/tui/blessed/ui/screen.js +52 -0
- package/scripts/tui/blessed/ui/statusbar.js +47 -0
- package/scripts/tui/blessed/ui/tabbar.js +99 -0
- package/scripts/tui/index.js +38 -30
- package/scripts/validators/README.md +143 -0
- package/scripts/validators/component-validator.js +239 -0
- package/scripts/validators/json-schema-validator.js +186 -0
- package/scripts/validators/markdown-validator.js +152 -0
- package/scripts/validators/migration-validator.js +129 -0
- package/scripts/validators/security-validator.js +380 -0
- package/scripts/validators/story-format-validator.js +197 -0
- package/scripts/validators/test-result-validator.js +114 -0
- package/scripts/validators/workflow-validator.js +247 -0
- package/src/core/agents/accessibility.md +6 -0
- package/src/core/agents/adr-writer.md +6 -0
- package/src/core/agents/analytics.md +6 -0
- package/src/core/agents/api.md +6 -0
- package/src/core/agents/ci.md +6 -0
- package/src/core/agents/codebase-query.md +261 -0
- package/src/core/agents/compliance.md +6 -0
- package/src/core/agents/configuration-damage-control.md +6 -0
- package/src/core/agents/configuration-visual-e2e.md +6 -0
- package/src/core/agents/database.md +10 -0
- package/src/core/agents/datamigration.md +6 -0
- package/src/core/agents/design.md +6 -0
- package/src/core/agents/devops.md +6 -0
- package/src/core/agents/documentation.md +6 -0
- package/src/core/agents/epic-planner.md +6 -0
- package/src/core/agents/integrations.md +6 -0
- package/src/core/agents/mentor.md +6 -0
- package/src/core/agents/mobile.md +6 -0
- package/src/core/agents/monitoring.md +6 -0
- package/src/core/agents/multi-expert.md +6 -0
- package/src/core/agents/performance.md +6 -0
- package/src/core/agents/product.md +6 -0
- package/src/core/agents/qa.md +6 -0
- package/src/core/agents/readme-updater.md +6 -0
- package/src/core/agents/refactor.md +6 -0
- package/src/core/agents/research.md +6 -0
- package/src/core/agents/security.md +6 -0
- package/src/core/agents/testing.md +10 -0
- package/src/core/agents/ui.md +6 -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/audit.md +401 -0
- package/src/core/commands/babysit.md +32 -5
- package/src/core/commands/board.md +1 -0
- 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 +205 -1
- package/src/core/commands/handoff.md +128 -0
- package/src/core/commands/help.md +76 -0
- package/src/core/commands/metrics.md +1 -0
- package/src/core/commands/pr.md +96 -0
- package/src/core/commands/research/analyze.md +1 -0
- package/src/core/commands/research/ask.md +2 -0
- package/src/core/commands/research/import.md +1 -0
- package/src/core/commands/research/list.md +2 -0
- package/src/core/commands/research/synthesize.md +584 -0
- package/src/core/commands/research/view.md +2 -0
- package/src/core/commands/roadmap/analyze.md +400 -0
- package/src/core/commands/session/new.md +113 -6
- package/src/core/commands/session/spawn.md +197 -0
- package/src/core/commands/sprint.md +22 -0
- package/src/core/commands/status.md +200 -1
- package/src/core/commands/story/list.md +9 -9
- package/src/core/commands/story/view.md +1 -0
- package/src/core/commands/story.md +143 -4
- package/src/core/experts/codebase-query/expertise.yaml +190 -0
- package/src/core/experts/codebase-query/question.md +73 -0
- package/src/core/experts/codebase-query/self-improve.md +105 -0
- 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 +86 -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/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 +114 -1
- package/tools/cli/lib/ui.js +14 -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,20 @@ 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: ['precompact', 'statusline', 'ralphloop', 'selfimprove', 'askuserquestion'],
|
|
68
|
+
disable: ['precompact', 'statusline', 'ralphloop', 'selfimprove', 'askuserquestion', 'tmuxautospawn'],
|
|
67
69
|
archivalDays: 30,
|
|
68
70
|
},
|
|
69
71
|
none: {
|
|
@@ -76,6 +78,7 @@ const PROFILES = {
|
|
|
76
78
|
'ralphloop',
|
|
77
79
|
'selfimprove',
|
|
78
80
|
'askuserquestion',
|
|
81
|
+
'tmuxautospawn',
|
|
79
82
|
],
|
|
80
83
|
},
|
|
81
84
|
};
|
|
@@ -214,6 +217,25 @@ function enableFeature(feature, options = {}, version) {
|
|
|
214
217
|
return true;
|
|
215
218
|
}
|
|
216
219
|
|
|
220
|
+
// Handle tmuxautospawn (metadata only)
|
|
221
|
+
if (feature === 'tmuxautospawn') {
|
|
222
|
+
updateMetadata(
|
|
223
|
+
{
|
|
224
|
+
features: {
|
|
225
|
+
tmuxAutoSpawn: {
|
|
226
|
+
enabled: true,
|
|
227
|
+
version,
|
|
228
|
+
at: new Date().toISOString(),
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
version
|
|
233
|
+
);
|
|
234
|
+
success('Tmux auto-spawn enabled');
|
|
235
|
+
info('Running "af" or "agileflow" will auto-start Claude in tmux session');
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
|
|
217
239
|
// Handle damage control
|
|
218
240
|
if (feature === 'damagecontrol') {
|
|
219
241
|
return enableDamageControl(settings, options, version);
|
|
@@ -499,6 +521,25 @@ function disableFeature(feature, version) {
|
|
|
499
521
|
return true;
|
|
500
522
|
}
|
|
501
523
|
|
|
524
|
+
// Disable tmuxautospawn
|
|
525
|
+
if (feature === 'tmuxautospawn') {
|
|
526
|
+
updateMetadata(
|
|
527
|
+
{
|
|
528
|
+
features: {
|
|
529
|
+
tmuxAutoSpawn: {
|
|
530
|
+
enabled: false,
|
|
531
|
+
version,
|
|
532
|
+
at: new Date().toISOString(),
|
|
533
|
+
},
|
|
534
|
+
},
|
|
535
|
+
},
|
|
536
|
+
version
|
|
537
|
+
);
|
|
538
|
+
success('Tmux auto-spawn disabled');
|
|
539
|
+
info('Running "af" or "agileflow" will start Claude directly without tmux');
|
|
540
|
+
return true;
|
|
541
|
+
}
|
|
542
|
+
|
|
502
543
|
// Disable damage control
|
|
503
544
|
if (feature === 'damagecontrol') {
|
|
504
545
|
if (settings.hooks?.PreToolUse && Array.isArray(settings.hooks.PreToolUse)) {
|