specweave 0.22.0 → 0.22.3
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/CLAUDE.md +373 -13
- package/README.md +5 -5
- package/bin/specweave.js +5 -8
- package/dist/plugins/specweave-github/lib/CodeValidator.d.ts +1 -1
- package/dist/plugins/specweave-github/lib/CodeValidator.js +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +10 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js +26 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/task-sync.js +7 -0
- package/dist/plugins/specweave-github/lib/task-sync.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-profiles.d.ts +1 -0
- package/dist/src/cli/commands/migrate-to-profiles.d.ts.map +1 -1
- package/dist/src/cli/commands/migrate-to-profiles.js +12 -1
- package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
- package/dist/src/cli/commands/next-command.d.ts +52 -0
- package/dist/src/cli/commands/next-command.d.ts.map +1 -0
- package/dist/src/cli/commands/next-command.js +204 -0
- package/dist/src/cli/commands/next-command.js.map +1 -0
- package/dist/src/cli/commands/repair-status-desync.d.ts +69 -0
- package/dist/src/cli/commands/repair-status-desync.d.ts.map +1 -0
- package/dist/src/cli/commands/repair-status-desync.js +221 -0
- package/dist/src/cli/commands/repair-status-desync.js.map +1 -0
- package/dist/src/cli/commands/sync-specs.d.ts +16 -0
- package/dist/src/cli/commands/sync-specs.d.ts.map +1 -0
- package/dist/src/cli/commands/sync-specs.js +130 -0
- package/dist/src/cli/commands/sync-specs.js.map +1 -0
- package/dist/src/cli/commands/validate-status-sync.d.ts +52 -0
- package/dist/src/cli/commands/validate-status-sync.d.ts.map +1 -0
- package/dist/src/cli/commands/validate-status-sync.js +176 -0
- package/dist/src/cli/commands/validate-status-sync.js.map +1 -0
- package/dist/src/cli/count-tasks.d.ts +20 -0
- package/dist/src/cli/count-tasks.d.ts.map +1 -0
- package/dist/src/cli/count-tasks.js +50 -0
- package/dist/src/cli/count-tasks.js.map +1 -0
- package/dist/src/cli/update-status-line.d.ts +16 -0
- package/dist/src/cli/update-status-line.d.ts.map +1 -0
- package/dist/src/cli/update-status-line.js +44 -0
- package/dist/src/cli/update-status-line.js.map +1 -0
- package/dist/src/config/ConfigManager.d.ts.map +1 -1
- package/dist/src/config/ConfigManager.js +2 -1
- package/dist/src/config/ConfigManager.js.map +1 -1
- package/dist/src/config/types.d.ts +50 -50
- package/dist/src/core/cicd/state-manager.d.ts +8 -0
- package/dist/src/core/cicd/state-manager.d.ts.map +1 -1
- package/dist/src/core/cicd/state-manager.js +60 -15
- package/dist/src/core/cicd/state-manager.js.map +1 -1
- package/dist/src/core/cost-tracker.d.ts.map +1 -1
- package/dist/src/core/cost-tracker.js +2 -1
- package/dist/src/core/cost-tracker.js.map +1 -1
- package/dist/src/core/iac/template-engine.d.ts.map +1 -1
- package/dist/src/core/iac/template-engine.js +28 -0
- package/dist/src/core/iac/template-engine.js.map +1 -1
- package/dist/src/core/iac/template-generator.d.ts +53 -0
- package/dist/src/core/iac/template-generator.d.ts.map +1 -0
- package/dist/src/core/iac/template-generator.js +125 -0
- package/dist/src/core/iac/template-generator.js.map +1 -0
- package/dist/src/core/increment/completion-validator.d.ts +56 -0
- package/dist/src/core/increment/completion-validator.d.ts.map +1 -0
- package/dist/src/core/increment/completion-validator.js +102 -0
- package/dist/src/core/increment/completion-validator.js.map +1 -0
- package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +10 -0
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/increment/spec-frontmatter-updater.d.ts +78 -0
- package/dist/src/core/increment/spec-frontmatter-updater.d.ts.map +1 -0
- package/dist/src/core/increment/spec-frontmatter-updater.js +152 -0
- package/dist/src/core/increment/spec-frontmatter-updater.js.map +1 -0
- package/dist/src/core/increment/status-auto-transition.js +3 -3
- package/dist/src/core/increment/status-auto-transition.js.map +1 -1
- package/dist/src/core/living-docs/CodeValidator.js +1 -1
- package/dist/src/core/living-docs/CodeValidator.js.map +1 -1
- package/dist/src/core/living-docs/content-distributor.d.ts.map +1 -1
- package/dist/src/core/living-docs/content-distributor.js +11 -1
- package/dist/src/core/living-docs/content-distributor.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts +166 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -0
- package/dist/src/core/living-docs/living-docs-sync.js +727 -0
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -0
- package/dist/src/core/living-docs/task-project-specific-generator.d.ts +7 -3
- package/dist/src/core/living-docs/task-project-specific-generator.d.ts.map +1 -1
- package/dist/src/core/living-docs/task-project-specific-generator.js +40 -24
- package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -1
- package/dist/src/core/plugin-loader.d.ts +7 -0
- package/dist/src/core/plugin-loader.d.ts.map +1 -1
- package/dist/src/core/plugin-loader.js +18 -1
- package/dist/src/core/plugin-loader.js.map +1 -1
- package/dist/src/core/serverless/platform-data-loader.d.ts +8 -0
- package/dist/src/core/serverless/platform-data-loader.d.ts.map +1 -1
- package/dist/src/core/serverless/platform-data-loader.js +14 -0
- package/dist/src/core/serverless/platform-data-loader.js.map +1 -1
- package/dist/src/core/serverless/types.d.ts +1 -1
- package/dist/src/core/serverless/types.d.ts.map +1 -1
- package/dist/src/core/status-line/status-line-manager.d.ts +7 -2
- package/dist/src/core/status-line/status-line-manager.d.ts.map +1 -1
- package/dist/src/core/status-line/status-line-manager.js +47 -18
- package/dist/src/core/status-line/status-line-manager.js.map +1 -1
- package/dist/src/core/status-line/status-line-updater.d.ts +67 -0
- package/dist/src/core/status-line/status-line-updater.d.ts.map +1 -0
- package/dist/src/core/status-line/status-line-updater.js +203 -0
- package/dist/src/core/status-line/status-line-updater.js.map +1 -0
- package/dist/src/core/status-line/task-counter.d.ts +69 -0
- package/dist/src/core/status-line/task-counter.d.ts.map +1 -0
- package/dist/src/core/status-line/task-counter.js +107 -0
- package/dist/src/core/status-line/task-counter.js.map +1 -0
- package/dist/src/core/status-line/types.d.ts +19 -5
- package/dist/src/core/status-line/types.d.ts.map +1 -1
- package/dist/src/core/status-line/types.js +3 -3
- package/dist/src/core/status-line/types.js.map +1 -1
- package/dist/src/core/workflow/autonomous-executor.d.ts +111 -0
- package/dist/src/core/workflow/autonomous-executor.d.ts.map +1 -0
- package/dist/src/core/workflow/autonomous-executor.js +275 -0
- package/dist/src/core/workflow/autonomous-executor.js.map +1 -0
- package/dist/src/core/workflow/backlog-scanner.d.ts +94 -0
- package/dist/src/core/workflow/backlog-scanner.d.ts.map +1 -0
- package/dist/src/core/workflow/backlog-scanner.js +170 -0
- package/dist/src/core/workflow/backlog-scanner.js.map +1 -0
- package/dist/src/core/workflow/command-invoker.d.ts +86 -0
- package/dist/src/core/workflow/command-invoker.d.ts.map +1 -0
- package/dist/src/core/workflow/command-invoker.js +131 -0
- package/dist/src/core/workflow/command-invoker.js.map +1 -0
- package/dist/src/core/workflow/cost-estimator.d.ts +120 -0
- package/dist/src/core/workflow/cost-estimator.d.ts.map +1 -0
- package/dist/src/core/workflow/cost-estimator.js +222 -0
- package/dist/src/core/workflow/cost-estimator.js.map +1 -0
- package/dist/src/core/workflow/index.d.ts +20 -0
- package/dist/src/core/workflow/index.d.ts.map +1 -0
- package/dist/src/core/workflow/index.js +24 -0
- package/dist/src/core/workflow/index.js.map +1 -0
- package/dist/src/core/workflow/state-manager.d.ts +107 -0
- package/dist/src/core/workflow/state-manager.d.ts.map +1 -0
- package/dist/src/core/workflow/state-manager.js +126 -0
- package/dist/src/core/workflow/state-manager.js.map +1 -0
- package/dist/src/core/workflow/workflow-orchestrator.d.ts +93 -0
- package/dist/src/core/workflow/workflow-orchestrator.d.ts.map +1 -0
- package/dist/src/core/workflow/workflow-orchestrator.js +195 -0
- package/dist/src/core/workflow/workflow-orchestrator.js.map +1 -0
- package/dist/src/init/architecture/types.d.ts +10 -10
- package/dist/src/metrics/dora-calculator.js +2 -2
- package/dist/src/metrics/dora-calculator.js.map +1 -1
- package/dist/src/utils/pricing-constants.d.ts +5 -2
- package/dist/src/utils/pricing-constants.d.ts.map +1 -1
- package/dist/src/utils/pricing-constants.js +3 -2
- package/dist/src/utils/pricing-constants.js.map +1 -1
- package/package.json +4 -4
- package/plugins/specweave/agents/infrastructure/AGENT.md +88 -46
- package/plugins/specweave/agents/pm/AGENT.md +58 -1
- package/plugins/specweave/commands/specweave-archive-features.md +1 -1
- package/plugins/specweave/commands/specweave-archive-increments.md +1 -1
- package/plugins/specweave/commands/specweave-check-hooks.md +5 -0
- package/plugins/specweave/commands/specweave-done.md +72 -4
- package/plugins/specweave/commands/specweave-plan.md +1 -1
- package/plugins/specweave/commands/specweave-progress.md +108 -379
- package/plugins/specweave/commands/specweave-reopen.md +30 -3
- package/plugins/specweave/commands/specweave-restore-feature.md +1 -1
- package/plugins/specweave/commands/specweave-sync-docs.md +71 -4
- package/plugins/specweave/commands/specweave-sync-specs.md +20 -48
- package/plugins/specweave/commands/specweave-update-status.md +151 -0
- package/plugins/specweave/hooks/lib/update-status-line.sh +78 -41
- package/plugins/specweave/hooks/lib/validate-spec-status.sh +163 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +38 -35
- package/plugins/specweave/hooks/validate-increment-completion.sh +113 -0
- package/plugins/specweave/lib/hooks/update-tasks-md.js +52 -9
- package/plugins/specweave/lib/hooks/update-tasks-md.ts +77 -16
- package/plugins/specweave/templates/iac/aws-lambda/defaults.json +24 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/README.md.hbs +260 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/environments/dev.tfvars.hbs +34 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/environments/prod.tfvars.hbs +37 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/environments/staging.tfvars.hbs +35 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/outputs.tf.hbs +77 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/providers.tf.hbs +36 -0
- package/plugins/specweave/templates/iac/aws-lambda/templates/variables.tf.hbs +115 -0
- package/plugins/specweave/templates/iac/azure-functions/defaults.json +25 -0
- package/plugins/specweave/templates/iac/azure-functions/templates/README.md.hbs +268 -0
- package/plugins/specweave/templates/iac/azure-functions/templates/environments/dev.tfvars.hbs +34 -0
- package/plugins/specweave/templates/iac/azure-functions/templates/environments/prod.tfvars.hbs +46 -0
- package/plugins/specweave/templates/iac/azure-functions/templates/environments/staging.tfvars.hbs +34 -0
- package/plugins/specweave/templates/iac/azure-functions/templates/main.tf.hbs +225 -0
- package/plugins/specweave/templates/iac/azure-functions/templates/outputs.tf.hbs +89 -0
- package/plugins/specweave/templates/iac/azure-functions/templates/provider.tf.hbs +27 -0
- package/plugins/specweave/templates/iac/azure-functions/templates/providers.tf.hbs +35 -0
- package/plugins/specweave/templates/iac/azure-functions/templates/variables.tf.hbs +124 -0
- package/plugins/specweave/templates/iac/firebase/defaults.json +29 -0
- package/plugins/specweave/templates/iac/firebase/templates/README.md.hbs +35 -0
- package/plugins/specweave/templates/iac/firebase/templates/environments/dev.tfvars.hbs +7 -0
- package/plugins/specweave/templates/iac/firebase/templates/environments/prod.tfvars.hbs +7 -0
- package/plugins/specweave/templates/iac/firebase/templates/environments/staging.tfvars.hbs +7 -0
- package/plugins/specweave/templates/iac/firebase/templates/main.tf.hbs +90 -0
- package/plugins/specweave/templates/iac/firebase/templates/outputs.tf.hbs +15 -0
- package/plugins/specweave/templates/iac/firebase/templates/providers.tf.hbs +23 -0
- package/plugins/specweave/templates/iac/firebase/templates/variables.tf.hbs +42 -0
- package/plugins/specweave/templates/iac/gcp-cloud-functions/defaults.json +26 -0
- package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/README.md.hbs +299 -0
- package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/environments/dev.tfvars.hbs +36 -0
- package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/environments/prod.tfvars.hbs +48 -0
- package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/environments/staging.tfvars.hbs +41 -0
- package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/main.tf.hbs +192 -0
- package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/outputs.tf.hbs +66 -0
- package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/providers.tf.hbs +25 -0
- package/plugins/specweave/templates/iac/gcp-cloud-functions/templates/variables.tf.hbs +119 -0
- package/plugins/specweave/templates/iac/supabase/defaults.json +15 -0
- package/plugins/specweave/templates/iac/supabase/templates/README.md.hbs +46 -0
- package/plugins/specweave/templates/iac/supabase/templates/main.tf.hbs +50 -0
- package/plugins/specweave-ado/lib/ado-multi-project-sync.js +0 -1
- package/plugins/specweave-github/agents/github-manager/AGENT.md +39 -7
- package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +21 -0
- package/plugins/specweave-github/commands/specweave-github-create-issue.md +5 -5
- package/plugins/specweave-github/lib/CodeValidator.ts +1 -1
- package/plugins/specweave-github/lib/github-client-v2.js +29 -0
- package/plugins/specweave-github/lib/github-client-v2.ts +30 -0
- package/plugins/specweave-github/lib/task-sync.js +4 -0
- package/plugins/specweave-github/lib/task-sync.ts +7 -0
- package/src/templates/CLAUDE.md.template +31 -0
- package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts +0 -116
- package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts.map +0 -1
- package/dist/src/core/living-docs/ThreeLayerSyncManager.js +0 -356
- package/dist/src/core/living-docs/ThreeLayerSyncManager.js.map +0 -1
- package/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -170
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +0 -1200
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Invoker - Programmatic command execution
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities to invoke SpecWeave commands programmatically
|
|
5
|
+
* from within the workflow orchestration system.
|
|
6
|
+
*
|
|
7
|
+
* Part of increment 0039: Ultra-Smart Next Command
|
|
8
|
+
*
|
|
9
|
+
* @module core/workflow/command-invoker
|
|
10
|
+
* @since v0.22.0
|
|
11
|
+
*/
|
|
12
|
+
import { exec } from 'child_process';
|
|
13
|
+
import { promisify } from 'util';
|
|
14
|
+
const execAsync = promisify(exec);
|
|
15
|
+
/**
|
|
16
|
+
* Error severity level
|
|
17
|
+
*/
|
|
18
|
+
export var ErrorSeverity;
|
|
19
|
+
(function (ErrorSeverity) {
|
|
20
|
+
ErrorSeverity["INFO"] = "info";
|
|
21
|
+
ErrorSeverity["WARNING"] = "warning";
|
|
22
|
+
ErrorSeverity["ERROR"] = "error";
|
|
23
|
+
ErrorSeverity["CRITICAL"] = "critical";
|
|
24
|
+
})(ErrorSeverity || (ErrorSeverity = {}));
|
|
25
|
+
/**
|
|
26
|
+
* Command Invoker - Execute SpecWeave commands programmatically
|
|
27
|
+
*/
|
|
28
|
+
export class CommandInvoker {
|
|
29
|
+
/**
|
|
30
|
+
* Invoke a SpecWeave command
|
|
31
|
+
*
|
|
32
|
+
* @param command - Command name (e.g., 'plan', 'do', 'validate')
|
|
33
|
+
* @param options - Invocation options
|
|
34
|
+
* @returns Command execution result
|
|
35
|
+
*/
|
|
36
|
+
async invoke(command, options = {}) {
|
|
37
|
+
const startTime = Date.now();
|
|
38
|
+
try {
|
|
39
|
+
// Build command string
|
|
40
|
+
const args = options.args || [];
|
|
41
|
+
const commandString = `npx specweave ${command} ${args.join(' ')}`;
|
|
42
|
+
// Execute command
|
|
43
|
+
const { stdout, stderr } = await execAsync(commandString, {
|
|
44
|
+
cwd: options.cwd || process.cwd(),
|
|
45
|
+
timeout: options.timeout || 300000, // 5 min default
|
|
46
|
+
maxBuffer: 10 * 1024 * 1024 // 10MB
|
|
47
|
+
});
|
|
48
|
+
const executionTime = Date.now() - startTime;
|
|
49
|
+
return {
|
|
50
|
+
success: true,
|
|
51
|
+
exitCode: 0,
|
|
52
|
+
stdout: options.captureOutput ? stdout : undefined,
|
|
53
|
+
stderr: stderr || undefined,
|
|
54
|
+
executionTime
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const executionTime = Date.now() - startTime;
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
exitCode: error.code || 1,
|
|
62
|
+
stdout: options.captureOutput ? error.stdout : undefined,
|
|
63
|
+
stderr: error.stderr || undefined,
|
|
64
|
+
error: error.message,
|
|
65
|
+
executionTime
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Invoke command with automatic retry on transient failures
|
|
71
|
+
*
|
|
72
|
+
* @param command - Command name
|
|
73
|
+
* @param options - Invocation options
|
|
74
|
+
* @param maxRetries - Maximum retry attempts (default: 3)
|
|
75
|
+
* @returns Command execution result
|
|
76
|
+
*/
|
|
77
|
+
async invokeWithRetry(command, options = {}, maxRetries = 3) {
|
|
78
|
+
let lastResult = null;
|
|
79
|
+
let attempt = 0;
|
|
80
|
+
while (attempt < maxRetries) {
|
|
81
|
+
attempt++;
|
|
82
|
+
const result = await this.invoke(command, options);
|
|
83
|
+
if (result.success) {
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
// Check if error is retryable
|
|
87
|
+
const severity = this.classifyError(result);
|
|
88
|
+
if (severity === ErrorSeverity.CRITICAL) {
|
|
89
|
+
// Don't retry critical errors
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
lastResult = result;
|
|
93
|
+
// Wait before retry (exponential backoff)
|
|
94
|
+
if (attempt < maxRetries) {
|
|
95
|
+
await this.delay(Math.pow(2, attempt) * 1000);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return lastResult;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Classify error severity
|
|
102
|
+
*
|
|
103
|
+
* @param result - Command result
|
|
104
|
+
* @returns Error severity level
|
|
105
|
+
*/
|
|
106
|
+
classifyError(result) {
|
|
107
|
+
const error = result.error || result.stderr || '';
|
|
108
|
+
// Critical errors (don't retry)
|
|
109
|
+
if (error.includes('ENOENT') || error.includes('command not found')) {
|
|
110
|
+
return ErrorSeverity.CRITICAL;
|
|
111
|
+
}
|
|
112
|
+
if (error.includes('permission denied') || error.includes('EACCES')) {
|
|
113
|
+
return ErrorSeverity.CRITICAL;
|
|
114
|
+
}
|
|
115
|
+
// Transient errors (retry)
|
|
116
|
+
if (error.includes('ECONNREFUSED') || error.includes('ETIMEDOUT')) {
|
|
117
|
+
return ErrorSeverity.WARNING;
|
|
118
|
+
}
|
|
119
|
+
// Default to error
|
|
120
|
+
return ErrorSeverity.ERROR;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Delay execution
|
|
124
|
+
*
|
|
125
|
+
* @param ms - Milliseconds to delay
|
|
126
|
+
*/
|
|
127
|
+
delay(ms) {
|
|
128
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=command-invoker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-invoker.js","sourceRoot":"","sources":["../../../../src/core/workflow/command-invoker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost Estimator - AI execution cost estimation
|
|
3
|
+
*
|
|
4
|
+
* Estimates the cost of autonomous workflow execution based on
|
|
5
|
+
* AI API calls, task count, and complexity.
|
|
6
|
+
*
|
|
7
|
+
* Part of increment 0039: Ultra-Smart Next Command
|
|
8
|
+
*
|
|
9
|
+
* @module core/workflow/cost-estimator
|
|
10
|
+
* @since v0.22.0
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Cost estimate for workflow execution
|
|
14
|
+
*/
|
|
15
|
+
export interface CostEstimate {
|
|
16
|
+
/** Estimated cost in USD */
|
|
17
|
+
estimatedCost: number;
|
|
18
|
+
/** Cost breakdown by phase */
|
|
19
|
+
breakdown: CostBreakdown[];
|
|
20
|
+
/** Risk level */
|
|
21
|
+
riskLevel: RiskLevel;
|
|
22
|
+
/** Explanation */
|
|
23
|
+
explanation: string;
|
|
24
|
+
/** Confidence in estimate (0.0-1.0) */
|
|
25
|
+
confidence: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Cost breakdown by phase
|
|
29
|
+
*/
|
|
30
|
+
export interface CostBreakdown {
|
|
31
|
+
/** Phase name */
|
|
32
|
+
phase: string;
|
|
33
|
+
/** Number of AI calls */
|
|
34
|
+
aiCalls: number;
|
|
35
|
+
/** Estimated cost */
|
|
36
|
+
cost: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Risk level for cost
|
|
40
|
+
*/
|
|
41
|
+
export declare enum RiskLevel {
|
|
42
|
+
/** < $1 */
|
|
43
|
+
LOW = "low",
|
|
44
|
+
/** $1 - $5 */
|
|
45
|
+
MEDIUM = "medium",
|
|
46
|
+
/** $5 - $20 */
|
|
47
|
+
HIGH = "high",
|
|
48
|
+
/** > $20 */
|
|
49
|
+
CRITICAL = "critical"
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Cost estimation configuration
|
|
53
|
+
*/
|
|
54
|
+
export interface CostEstimatorConfig {
|
|
55
|
+
/** Cost per AI call (default: $0.01) */
|
|
56
|
+
costPerCall?: number;
|
|
57
|
+
/** Low risk threshold (default: $1) */
|
|
58
|
+
lowThreshold?: number;
|
|
59
|
+
/** Medium risk threshold (default: $5) */
|
|
60
|
+
mediumThreshold?: number;
|
|
61
|
+
/** High risk threshold (default: $20) */
|
|
62
|
+
highThreshold?: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Cost Estimator - Estimate autonomous execution costs
|
|
66
|
+
*/
|
|
67
|
+
export declare class CostEstimator {
|
|
68
|
+
private costPerCall;
|
|
69
|
+
private lowThreshold;
|
|
70
|
+
private mediumThreshold;
|
|
71
|
+
private highThreshold;
|
|
72
|
+
constructor(config?: CostEstimatorConfig);
|
|
73
|
+
/**
|
|
74
|
+
* Estimate cost for increment execution
|
|
75
|
+
*
|
|
76
|
+
* @param incrementPath - Path to increment directory
|
|
77
|
+
* @returns Cost estimate
|
|
78
|
+
*/
|
|
79
|
+
estimateIncrement(incrementPath: string): Promise<CostEstimate>;
|
|
80
|
+
/**
|
|
81
|
+
* Estimate planning cost
|
|
82
|
+
*/
|
|
83
|
+
private estimatePlanning;
|
|
84
|
+
/**
|
|
85
|
+
* Estimate execution cost based on task count
|
|
86
|
+
*/
|
|
87
|
+
private estimateExecution;
|
|
88
|
+
/**
|
|
89
|
+
* Estimate task count from spec.md
|
|
90
|
+
*/
|
|
91
|
+
private estimateTasksFromSpec;
|
|
92
|
+
/**
|
|
93
|
+
* Estimate validation cost
|
|
94
|
+
*/
|
|
95
|
+
private estimateValidation;
|
|
96
|
+
/**
|
|
97
|
+
* Estimate QA cost
|
|
98
|
+
*/
|
|
99
|
+
private estimateQA;
|
|
100
|
+
/**
|
|
101
|
+
* Determine risk level based on total cost
|
|
102
|
+
*/
|
|
103
|
+
private determineRiskLevel;
|
|
104
|
+
/**
|
|
105
|
+
* Calculate confidence in estimate
|
|
106
|
+
*/
|
|
107
|
+
private calculateConfidence;
|
|
108
|
+
/**
|
|
109
|
+
* Generate human-readable explanation
|
|
110
|
+
*/
|
|
111
|
+
private generateExplanation;
|
|
112
|
+
/**
|
|
113
|
+
* Check if cost exceeds threshold
|
|
114
|
+
*
|
|
115
|
+
* @param estimate - Cost estimate
|
|
116
|
+
* @returns True if cost exceeds HIGH threshold
|
|
117
|
+
*/
|
|
118
|
+
checkThreshold(estimate: CostEstimate): boolean;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=cost-estimator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-estimator.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/cost-estimator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,iBAAiB;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,oBAAY,SAAS;IACnB,WAAW;IACX,GAAG,QAAQ;IACX,cAAc;IACd,MAAM,WAAW;IACjB,eAAe;IACf,IAAI,SAAS;IACb,YAAY;IACZ,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAS;gBAElB,MAAM,GAAE,mBAAwB;IAO5C;;;;;OAKG;IACG,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuCrE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;YACW,iBAAiB;IA8B/B;;OAEG;YACW,qBAAqB;IAqBnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;YACW,mBAAmB;IAejC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO;CAGhD"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost Estimator - AI execution cost estimation
|
|
3
|
+
*
|
|
4
|
+
* Estimates the cost of autonomous workflow execution based on
|
|
5
|
+
* AI API calls, task count, and complexity.
|
|
6
|
+
*
|
|
7
|
+
* Part of increment 0039: Ultra-Smart Next Command
|
|
8
|
+
*
|
|
9
|
+
* @module core/workflow/cost-estimator
|
|
10
|
+
* @since v0.22.0
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'fs-extra';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
/**
|
|
15
|
+
* Risk level for cost
|
|
16
|
+
*/
|
|
17
|
+
export var RiskLevel;
|
|
18
|
+
(function (RiskLevel) {
|
|
19
|
+
/** < $1 */
|
|
20
|
+
RiskLevel["LOW"] = "low";
|
|
21
|
+
/** $1 - $5 */
|
|
22
|
+
RiskLevel["MEDIUM"] = "medium";
|
|
23
|
+
/** $5 - $20 */
|
|
24
|
+
RiskLevel["HIGH"] = "high";
|
|
25
|
+
/** > $20 */
|
|
26
|
+
RiskLevel["CRITICAL"] = "critical";
|
|
27
|
+
})(RiskLevel || (RiskLevel = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Cost Estimator - Estimate autonomous execution costs
|
|
30
|
+
*/
|
|
31
|
+
export class CostEstimator {
|
|
32
|
+
constructor(config = {}) {
|
|
33
|
+
this.costPerCall = config.costPerCall || 0.01;
|
|
34
|
+
this.lowThreshold = config.lowThreshold || 1.0;
|
|
35
|
+
this.mediumThreshold = config.mediumThreshold || 5.0;
|
|
36
|
+
this.highThreshold = config.highThreshold || 20.0;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Estimate cost for increment execution
|
|
40
|
+
*
|
|
41
|
+
* @param incrementPath - Path to increment directory
|
|
42
|
+
* @returns Cost estimate
|
|
43
|
+
*/
|
|
44
|
+
async estimateIncrement(incrementPath) {
|
|
45
|
+
const breakdown = [];
|
|
46
|
+
let totalCost = 0;
|
|
47
|
+
// Planning phase: 2 AI calls (Architect + test-aware-planner)
|
|
48
|
+
const planningCost = this.estimatePlanning(incrementPath);
|
|
49
|
+
breakdown.push(planningCost);
|
|
50
|
+
totalCost += planningCost.cost;
|
|
51
|
+
// Execution phase: Based on task count
|
|
52
|
+
const executionCost = await this.estimateExecution(incrementPath);
|
|
53
|
+
breakdown.push(executionCost);
|
|
54
|
+
totalCost += executionCost.cost;
|
|
55
|
+
// Validation phase: 1 AI call (PM validation)
|
|
56
|
+
const validationCost = this.estimateValidation();
|
|
57
|
+
breakdown.push(validationCost);
|
|
58
|
+
totalCost += validationCost.cost;
|
|
59
|
+
// QA phase: 1 AI call (judge LLM)
|
|
60
|
+
const qaCost = this.estimateQA();
|
|
61
|
+
breakdown.push(qaCost);
|
|
62
|
+
totalCost += qaCost.cost;
|
|
63
|
+
// Determine risk level
|
|
64
|
+
const riskLevel = this.determineRiskLevel(totalCost);
|
|
65
|
+
// Calculate confidence based on data availability
|
|
66
|
+
const confidence = await this.calculateConfidence(incrementPath);
|
|
67
|
+
return {
|
|
68
|
+
estimatedCost: totalCost,
|
|
69
|
+
breakdown,
|
|
70
|
+
riskLevel,
|
|
71
|
+
explanation: this.generateExplanation(totalCost, riskLevel, breakdown),
|
|
72
|
+
confidence
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Estimate planning cost
|
|
77
|
+
*/
|
|
78
|
+
estimatePlanning(incrementPath) {
|
|
79
|
+
// Planning = Architect + test-aware-planner = 2 calls
|
|
80
|
+
return {
|
|
81
|
+
phase: 'Planning',
|
|
82
|
+
aiCalls: 2,
|
|
83
|
+
cost: 2 * this.costPerCall
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Estimate execution cost based on task count
|
|
88
|
+
*/
|
|
89
|
+
async estimateExecution(incrementPath) {
|
|
90
|
+
const tasksPath = path.join(incrementPath, 'tasks.md');
|
|
91
|
+
let taskCount = 0;
|
|
92
|
+
// Try to count tasks from tasks.md
|
|
93
|
+
if (await fs.pathExists(tasksPath)) {
|
|
94
|
+
try {
|
|
95
|
+
const content = await fs.readFile(tasksPath, 'utf-8');
|
|
96
|
+
// Count task headers (#### T-XXX:)
|
|
97
|
+
const taskMatches = content.match(/^####\s+T-\d+:/gm);
|
|
98
|
+
taskCount = taskMatches ? taskMatches.length : 0;
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
// If can't read tasks, estimate based on spec
|
|
102
|
+
taskCount = 10; // Default estimate
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// No tasks.md yet, estimate from spec.md
|
|
107
|
+
taskCount = await this.estimateTasksFromSpec(incrementPath);
|
|
108
|
+
}
|
|
109
|
+
// Assume 3 AI calls per task (avg: simple=1, medium=3, complex=5)
|
|
110
|
+
const aiCalls = taskCount * 3;
|
|
111
|
+
return {
|
|
112
|
+
phase: 'Execution',
|
|
113
|
+
aiCalls,
|
|
114
|
+
cost: aiCalls * this.costPerCall
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Estimate task count from spec.md
|
|
119
|
+
*/
|
|
120
|
+
async estimateTasksFromSpec(incrementPath) {
|
|
121
|
+
const specPath = path.join(incrementPath, 'spec.md');
|
|
122
|
+
if (!await fs.pathExists(specPath)) {
|
|
123
|
+
return 10; // Default estimate
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
const content = await fs.readFile(specPath, 'utf-8');
|
|
127
|
+
// Count acceptance criteria as rough proxy for tasks
|
|
128
|
+
const acMatches = content.match(/^- \[.\] AC-/gm);
|
|
129
|
+
const acCount = acMatches ? acMatches.length : 0;
|
|
130
|
+
// Rough heuristic: 2 ACs ≈ 1 task
|
|
131
|
+
return Math.max(Math.floor(acCount / 2), 5);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
return 10;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Estimate validation cost
|
|
139
|
+
*/
|
|
140
|
+
estimateValidation() {
|
|
141
|
+
// Validation = 1 PM validation call
|
|
142
|
+
return {
|
|
143
|
+
phase: 'Validation',
|
|
144
|
+
aiCalls: 1,
|
|
145
|
+
cost: 1 * this.costPerCall
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Estimate QA cost
|
|
150
|
+
*/
|
|
151
|
+
estimateQA() {
|
|
152
|
+
// QA = 1 judge LLM call
|
|
153
|
+
return {
|
|
154
|
+
phase: 'QA',
|
|
155
|
+
aiCalls: 1,
|
|
156
|
+
cost: 1 * this.costPerCall
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Determine risk level based on total cost
|
|
161
|
+
*/
|
|
162
|
+
determineRiskLevel(cost) {
|
|
163
|
+
if (cost < this.lowThreshold) {
|
|
164
|
+
return RiskLevel.LOW;
|
|
165
|
+
}
|
|
166
|
+
else if (cost < this.mediumThreshold) {
|
|
167
|
+
return RiskLevel.MEDIUM;
|
|
168
|
+
}
|
|
169
|
+
else if (cost < this.highThreshold) {
|
|
170
|
+
return RiskLevel.HIGH;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
return RiskLevel.CRITICAL;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Calculate confidence in estimate
|
|
178
|
+
*/
|
|
179
|
+
async calculateConfidence(incrementPath) {
|
|
180
|
+
// Higher confidence if tasks.md exists
|
|
181
|
+
const tasksExists = await fs.pathExists(path.join(incrementPath, 'tasks.md'));
|
|
182
|
+
const planExists = await fs.pathExists(path.join(incrementPath, 'plan.md'));
|
|
183
|
+
const specExists = await fs.pathExists(path.join(incrementPath, 'spec.md'));
|
|
184
|
+
if (tasksExists && planExists) {
|
|
185
|
+
return 0.9; // High confidence (tasks are defined)
|
|
186
|
+
}
|
|
187
|
+
else if (specExists) {
|
|
188
|
+
return 0.6; // Medium confidence (only spec exists)
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
return 0.3; // Low confidence (estimating blindly)
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Generate human-readable explanation
|
|
196
|
+
*/
|
|
197
|
+
generateExplanation(totalCost, riskLevel, breakdown) {
|
|
198
|
+
const parts = [];
|
|
199
|
+
parts.push(`Estimated cost: $${totalCost.toFixed(2)} (Risk: ${riskLevel.toUpperCase()})`);
|
|
200
|
+
parts.push('\nBreakdown:');
|
|
201
|
+
breakdown.forEach(item => {
|
|
202
|
+
parts.push(` - ${item.phase}: ${item.aiCalls} AI calls ($${item.cost.toFixed(2)})`);
|
|
203
|
+
});
|
|
204
|
+
if (riskLevel === RiskLevel.CRITICAL) {
|
|
205
|
+
parts.push('\n⚠️ CRITICAL: Cost exceeds $20. Consider manual execution or splitting work.');
|
|
206
|
+
}
|
|
207
|
+
else if (riskLevel === RiskLevel.HIGH) {
|
|
208
|
+
parts.push('\n⚠️ HIGH: Cost is significant ($5-$20). Confirm before proceeding.');
|
|
209
|
+
}
|
|
210
|
+
return parts.join('\n');
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Check if cost exceeds threshold
|
|
214
|
+
*
|
|
215
|
+
* @param estimate - Cost estimate
|
|
216
|
+
* @returns True if cost exceeds HIGH threshold
|
|
217
|
+
*/
|
|
218
|
+
checkThreshold(estimate) {
|
|
219
|
+
return estimate.riskLevel === RiskLevel.HIGH || estimate.riskLevel === RiskLevel.CRITICAL;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=cost-estimator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-estimator.js","sourceRoot":"","sources":["../../../../src/core/workflow/cost-estimator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Orchestration Module
|
|
3
|
+
*
|
|
4
|
+
* Provides intelligent workflow orchestration for SpecWeave,
|
|
5
|
+
* enabling autonomous and semi-autonomous workflow execution.
|
|
6
|
+
*
|
|
7
|
+
* Part of increment 0039: Ultra-Smart Next Command
|
|
8
|
+
*
|
|
9
|
+
* @module core/workflow
|
|
10
|
+
* @since v0.22.0
|
|
11
|
+
*/
|
|
12
|
+
export { WorkflowOrchestrator, WorkflowExecuteOptions, WorkflowExecutionResult } from './workflow-orchestrator.js';
|
|
13
|
+
export { AutonomousExecutor, AutonomousConfig, AutonomousResult } from './autonomous-executor.js';
|
|
14
|
+
export { PhaseDetector } from './phase-detector.js';
|
|
15
|
+
export { WorkflowPhase, PhaseDetectionResult, DetectionContext, PhaseEvidence } from './types.js';
|
|
16
|
+
export { BacklogScanner, BacklogItem, RankedBacklogItem, BacklogRecommendation } from './backlog-scanner.js';
|
|
17
|
+
export { CostEstimator, CostEstimate, CostBreakdown, RiskLevel, CostEstimatorConfig } from './cost-estimator.js';
|
|
18
|
+
export { CommandInvoker, InvokeOptions, InvokeResult, ErrorSeverity } from './command-invoker.js';
|
|
19
|
+
export { StateManager, Checkpoint } from './state-manager.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGlG,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,SAAS,EACT,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Orchestration Module
|
|
3
|
+
*
|
|
4
|
+
* Provides intelligent workflow orchestration for SpecWeave,
|
|
5
|
+
* enabling autonomous and semi-autonomous workflow execution.
|
|
6
|
+
*
|
|
7
|
+
* Part of increment 0039: Ultra-Smart Next Command
|
|
8
|
+
*
|
|
9
|
+
* @module core/workflow
|
|
10
|
+
* @since v0.22.0
|
|
11
|
+
*/
|
|
12
|
+
// Core orchestration
|
|
13
|
+
export { WorkflowOrchestrator } from './workflow-orchestrator.js';
|
|
14
|
+
export { AutonomousExecutor } from './autonomous-executor.js';
|
|
15
|
+
// Phase detection
|
|
16
|
+
export { PhaseDetector } from './phase-detector.js';
|
|
17
|
+
export { WorkflowPhase } from './types.js';
|
|
18
|
+
// Intelligence
|
|
19
|
+
export { BacklogScanner } from './backlog-scanner.js';
|
|
20
|
+
export { CostEstimator, RiskLevel } from './cost-estimator.js';
|
|
21
|
+
// Execution infrastructure
|
|
22
|
+
export { CommandInvoker, ErrorSeverity } from './command-invoker.js';
|
|
23
|
+
export { StateManager } from './state-manager.js';
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/workflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,qBAAqB;AACrB,OAAO,EAAE,oBAAoB,EAAmD,MAAM,4BAA4B,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAsC,MAAM,0BAA0B,CAAC;AAElG,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,aAAa,EAId,MAAM,YAAY,CAAC;AAEpB,eAAe;AACf,OAAO,EACL,cAAc,EAIf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,aAAa,EAGb,SAAS,EAEV,MAAM,qBAAqB,CAAC;AAE7B,2BAA2B;AAC3B,OAAO,EAAE,cAAc,EAA+B,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,YAAY,EAAc,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Manager - Workflow state tracking and checkpointing
|
|
3
|
+
*
|
|
4
|
+
* Manages workflow state, checkpoints, and recovery for autonomous execution.
|
|
5
|
+
*
|
|
6
|
+
* Part of increment 0039: Ultra-Smart Next Command
|
|
7
|
+
*
|
|
8
|
+
* @module core/workflow/state-manager
|
|
9
|
+
* @since v0.22.0
|
|
10
|
+
*/
|
|
11
|
+
import { WorkflowPhase } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Checkpoint - Saved workflow state
|
|
14
|
+
*/
|
|
15
|
+
export interface Checkpoint {
|
|
16
|
+
/** Unique checkpoint ID */
|
|
17
|
+
id: string;
|
|
18
|
+
/** Timestamp */
|
|
19
|
+
timestamp: number;
|
|
20
|
+
/** Increment ID */
|
|
21
|
+
incrementId: string;
|
|
22
|
+
/** Current workflow phase */
|
|
23
|
+
phase: WorkflowPhase;
|
|
24
|
+
/** Iteration count */
|
|
25
|
+
iteration: number;
|
|
26
|
+
/** Actions taken */
|
|
27
|
+
actions: string[];
|
|
28
|
+
/** Last successful action */
|
|
29
|
+
lastAction?: string;
|
|
30
|
+
/** Custom metadata */
|
|
31
|
+
metadata?: Record<string, any>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* State transition record
|
|
35
|
+
*/
|
|
36
|
+
export interface StateTransition {
|
|
37
|
+
/** From phase */
|
|
38
|
+
from: WorkflowPhase;
|
|
39
|
+
/** To phase */
|
|
40
|
+
to: WorkflowPhase;
|
|
41
|
+
/** Timestamp */
|
|
42
|
+
timestamp: number;
|
|
43
|
+
/** Action that caused transition */
|
|
44
|
+
action: string;
|
|
45
|
+
/** Success flag */
|
|
46
|
+
success: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* State Manager - Track workflow state and checkpoints
|
|
50
|
+
*/
|
|
51
|
+
export declare class StateManager {
|
|
52
|
+
private checkpointDir;
|
|
53
|
+
private maxCheckpoints;
|
|
54
|
+
constructor(checkpointDir?: string, maxCheckpoints?: number);
|
|
55
|
+
/**
|
|
56
|
+
* Save checkpoint
|
|
57
|
+
*
|
|
58
|
+
* @param checkpoint - Checkpoint data
|
|
59
|
+
*/
|
|
60
|
+
saveCheckpoint(checkpoint: Checkpoint): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Load checkpoints for increment
|
|
63
|
+
*
|
|
64
|
+
* @param incrementId - Increment ID
|
|
65
|
+
* @returns Array of checkpoints (sorted by timestamp, newest first)
|
|
66
|
+
*/
|
|
67
|
+
loadCheckpoints(incrementId: string): Promise<Checkpoint[]>;
|
|
68
|
+
/**
|
|
69
|
+
* Get latest checkpoint for increment
|
|
70
|
+
*
|
|
71
|
+
* @param incrementId - Increment ID
|
|
72
|
+
* @returns Latest checkpoint or null
|
|
73
|
+
*/
|
|
74
|
+
getLatestCheckpoint(incrementId: string): Promise<Checkpoint | null>;
|
|
75
|
+
/**
|
|
76
|
+
* Delete checkpoint
|
|
77
|
+
*
|
|
78
|
+
* @param incrementId - Increment ID
|
|
79
|
+
* @param checkpointId - Checkpoint ID
|
|
80
|
+
*/
|
|
81
|
+
deleteCheckpoint(incrementId: string, checkpointId: string): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Cleanup old checkpoints (keep only N most recent)
|
|
84
|
+
*
|
|
85
|
+
* @param incrementId - Increment ID
|
|
86
|
+
*/
|
|
87
|
+
private cleanupOldCheckpoints;
|
|
88
|
+
/**
|
|
89
|
+
* Detect infinite loop in phase history
|
|
90
|
+
*
|
|
91
|
+
* Checks if the same phase has been visited too many times in a row.
|
|
92
|
+
*
|
|
93
|
+
* @param phaseHistory - Recent phase history
|
|
94
|
+
* @param threshold - Max same-phase repetitions (default: 3)
|
|
95
|
+
* @returns True if loop detected
|
|
96
|
+
*/
|
|
97
|
+
detectLoop(phaseHistory: WorkflowPhase[], threshold?: number): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Record state transition
|
|
100
|
+
*
|
|
101
|
+
* (For now, this is a no-op - will be used for analytics/debugging)
|
|
102
|
+
*
|
|
103
|
+
* @param transition - State transition record
|
|
104
|
+
*/
|
|
105
|
+
recordTransition(transition: StateTransition): void;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=state-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/workflow/state-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,IAAI,EAAE,aAAa,CAAC;IACpB,eAAe;IACf,EAAE,EAAE,aAAa,CAAC;IAClB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;gBAEnB,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,GAAE,MAAW;IAK/D;;;;OAIG;IACG,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3D;;;;;OAKG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAyBjE;;;;;OAKG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAK1E;;;;;OAKG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhF;;;;OAIG;YACW,qBAAqB;IAYnC;;;;;;;;OAQG;IACH,UAAU,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE,SAAS,GAAE,MAAU,GAAG,OAAO;IAYzE;;;;;;OAMG;IACH,gBAAgB,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;CAKpD"}
|