@aiagentflow/cli 0.1.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/LICENSE +21 -0
- package/README.md +232 -0
- package/dist/agents/base.d.ts +69 -0
- package/dist/agents/base.d.ts.map +1 -0
- package/dist/agents/base.js +78 -0
- package/dist/agents/base.js.map +1 -0
- package/dist/agents/factory.d.ts +21 -0
- package/dist/agents/factory.d.ts.map +1 -0
- package/dist/agents/factory.js +50 -0
- package/dist/agents/factory.js.map +1 -0
- package/dist/agents/roles/architect.d.ts +23 -0
- package/dist/agents/roles/architect.d.ts.map +1 -0
- package/dist/agents/roles/architect.js +39 -0
- package/dist/agents/roles/architect.js.map +1 -0
- package/dist/agents/roles/coder.d.ts +19 -0
- package/dist/agents/roles/coder.d.ts.map +1 -0
- package/dist/agents/roles/coder.js +38 -0
- package/dist/agents/roles/coder.js.map +1 -0
- package/dist/agents/roles/fixer.d.ts +19 -0
- package/dist/agents/roles/fixer.d.ts.map +1 -0
- package/dist/agents/roles/fixer.js +29 -0
- package/dist/agents/roles/fixer.js.map +1 -0
- package/dist/agents/roles/judge.d.ts +24 -0
- package/dist/agents/roles/judge.d.ts.map +1 -0
- package/dist/agents/roles/judge.js +38 -0
- package/dist/agents/roles/judge.js.map +1 -0
- package/dist/agents/roles/reviewer.d.ts +28 -0
- package/dist/agents/roles/reviewer.d.ts.map +1 -0
- package/dist/agents/roles/reviewer.js +49 -0
- package/dist/agents/roles/reviewer.js.map +1 -0
- package/dist/agents/roles/tester.d.ts +19 -0
- package/dist/agents/roles/tester.d.ts.map +1 -0
- package/dist/agents/roles/tester.js +29 -0
- package/dist/agents/roles/tester.js.map +1 -0
- package/dist/agents/types.d.ts +13 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +25 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli/commands/config.d.ts +9 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +30 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +12 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +63 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +12 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +231 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/run.d.ts +11 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +66 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +24 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/config/defaults.d.ts +22 -0
- package/dist/core/config/defaults.d.ts.map +1 -0
- package/dist/core/config/defaults.js +60 -0
- package/dist/core/config/defaults.js.map +1 -0
- package/dist/core/config/manager.d.ts +45 -0
- package/dist/core/config/manager.d.ts.map +1 -0
- package/dist/core/config/manager.js +106 -0
- package/dist/core/config/manager.js.map +1 -0
- package/dist/core/config/schema.d.ts +780 -0
- package/dist/core/config/schema.d.ts.map +1 -0
- package/dist/core/config/schema.js +102 -0
- package/dist/core/config/schema.js.map +1 -0
- package/dist/core/config/types.d.ts +24 -0
- package/dist/core/config/types.d.ts.map +1 -0
- package/dist/core/config/types.js +11 -0
- package/dist/core/config/types.js.map +1 -0
- package/dist/core/errors.d.ts +36 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +60 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/workflow/approval.d.ts +22 -0
- package/dist/core/workflow/approval.d.ts.map +1 -0
- package/dist/core/workflow/approval.js +54 -0
- package/dist/core/workflow/approval.js.map +1 -0
- package/dist/core/workflow/engine.d.ts +128 -0
- package/dist/core/workflow/engine.d.ts.map +1 -0
- package/dist/core/workflow/engine.js +159 -0
- package/dist/core/workflow/engine.js.map +1 -0
- package/dist/core/workflow/file-parser.d.ts +41 -0
- package/dist/core/workflow/file-parser.d.ts.map +1 -0
- package/dist/core/workflow/file-parser.js +138 -0
- package/dist/core/workflow/file-parser.js.map +1 -0
- package/dist/core/workflow/qa-policy.d.ts +55 -0
- package/dist/core/workflow/qa-policy.d.ts.map +1 -0
- package/dist/core/workflow/qa-policy.js +119 -0
- package/dist/core/workflow/qa-policy.js.map +1 -0
- package/dist/core/workflow/runner.d.ts +30 -0
- package/dist/core/workflow/runner.d.ts.map +1 -0
- package/dist/core/workflow/runner.js +273 -0
- package/dist/core/workflow/runner.js.map +1 -0
- package/dist/core/workflow/session.d.ts +37 -0
- package/dist/core/workflow/session.d.ts.map +1 -0
- package/dist/core/workflow/session.js +93 -0
- package/dist/core/workflow/session.js.map +1 -0
- package/dist/core/workflow/task-queue.d.ts +46 -0
- package/dist/core/workflow/task-queue.d.ts.map +1 -0
- package/dist/core/workflow/task-queue.js +106 -0
- package/dist/core/workflow/task-queue.js.map +1 -0
- package/dist/core/workflow/test-runner.d.ts +25 -0
- package/dist/core/workflow/test-runner.d.ts.map +1 -0
- package/dist/core/workflow/test-runner.js +50 -0
- package/dist/core/workflow/test-runner.js.map +1 -0
- package/dist/core/workflow/token-tracker.d.ts +54 -0
- package/dist/core/workflow/token-tracker.d.ts.map +1 -0
- package/dist/core/workflow/token-tracker.js +98 -0
- package/dist/core/workflow/token-tracker.js.map +1 -0
- package/dist/git/client.d.ts +47 -0
- package/dist/git/client.d.ts.map +1 -0
- package/dist/git/client.js +109 -0
- package/dist/git/client.js.map +1 -0
- package/dist/prompts/library.d.ts +35 -0
- package/dist/prompts/library.d.ts.map +1 -0
- package/dist/prompts/library.js +238 -0
- package/dist/prompts/library.js.map +1 -0
- package/dist/providers/anthropic.d.ts +55 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +237 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/ollama.d.ts +44 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +211 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/registry.d.ts +36 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +91 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +100 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +12 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/fs.d.ts +30 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +80 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +46 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +87 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +28 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +38 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/core/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,qBAAqB;IAC9B,iDAAiD;;IAEjD,mCAAmC;;IAEnC,0EAA0E;;IAE1E,2DAA2D;;;;;;;;;;;;EAE7D,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;QAb1B,iDAAiD;;QAEjD,mCAAmC;;QAEnC,0EAA0E;;QAE1E,2DAA2D;;;;;;;;;;;;;;QAN3D,iDAAiD;;QAEjD,mCAAmC;;QAEnC,0EAA0E;;QAE1E,2DAA2D;;;;;;;;;;;;;;QAN3D,iDAAiD;;QAEjD,mCAAmC;;QAEnC,0EAA0E;;QAE1E,2DAA2D;;;;;;;;;;;;;;QAN3D,iDAAiD;;QAEjD,mCAAmC;;QAEnC,0EAA0E;;QAE1E,2DAA2D;;;;;;;;;;;;;;QAN3D,iDAAiD;;QAEjD,mCAAmC;;QAEnC,0EAA0E;;QAE1E,2DAA2D;;;;;;;;;;;;;;QAN3D,iDAAiD;;QAEjD,mCAAmC;;QAEnC,0EAA0E;;QAE1E,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc7D,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC5B,oCAAoC;;IAEpC,6DAA6D;;IAE7D,kEAAkE;;IAElE,sCAAsC;;IAEtC,oCAAoC;;;;;;;;;;;;;;EAEtC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;IAC7B,wDAAwD;;IAExD,wDAAwD;;IAExD,yDAAyD;;IAEzD,oDAAoD;;IAEpD,uDAAuD;;;;;;;;;;;;;;EAEzD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,eAAe;IACxB,4CAA4C;;IAE5C,wCAAwC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAExC,iDAAiD;;;YAvFjD,iDAAiD;;YAEjD,mCAAmC;;YAEnC,0EAA0E;;YAE1E,2DAA2D;;;;;;;;;;;;;;YAN3D,iDAAiD;;YAEjD,mCAAmC;;YAEnC,0EAA0E;;YAE1E,2DAA2D;;;;;;;;;;;;;;YAN3D,iDAAiD;;YAEjD,mCAAmC;;YAEnC,0EAA0E;;YAE1E,2DAA2D;;;;;;;;;;;;;;YAN3D,iDAAiD;;YAEjD,mCAAmC;;YAEnC,0EAA0E;;YAE1E,2DAA2D;;;;;;;;;;;;;;YAN3D,iDAAiD;;YAEjD,mCAAmC;;YAEnC,0EAA0E;;YAE1E,2DAA2D;;;;;;;;;;;;;;YAN3D,iDAAiD;;YAEjD,mCAAmC;;YAEnC,0EAA0E;;YAE1E,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmF3D,8BAA8B;;QAvC9B,oCAAoC;;QAEpC,6DAA6D;;QAE7D,kEAAkE;;QAElE,sCAAsC;;QAEtC,oCAAoC;;;;;;;;;;;;;;;IAiCpC,mCAAmC;;QAzBnC,wDAAwD;;QAExD,wDAAwD;;QAExD,yDAAyD;;QAEzD,oDAAoD;;QAEpD,uDAAuD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBzD,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas defining the complete configuration shape.
|
|
3
|
+
*
|
|
4
|
+
* This is the authoritative definition of what a valid config looks like.
|
|
5
|
+
* All TypeScript types are inferred from these schemas via z.infer<>.
|
|
6
|
+
*
|
|
7
|
+
* Dependency direction: schema.ts → zod, agents/types.ts
|
|
8
|
+
* Used by: manager.ts, init.ts, types.ts
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
/**
|
|
12
|
+
* Schema for a single agent role's configuration.
|
|
13
|
+
*/
|
|
14
|
+
export const agentRoleConfigSchema = z.object({
|
|
15
|
+
/** Which provider to use for this agent role. */
|
|
16
|
+
provider: z.enum(['anthropic', 'ollama']),
|
|
17
|
+
/** The model identifier to use. */
|
|
18
|
+
model: z.string().min(1),
|
|
19
|
+
/** Sampling temperature (0.0 = deterministic, higher = more creative). */
|
|
20
|
+
temperature: z.number().min(0).max(2).default(0.7),
|
|
21
|
+
/** Maximum tokens the model can generate in a response. */
|
|
22
|
+
maxTokens: z.number().int().min(1).max(200000).default(4096),
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Schema for all agent configurations, keyed by role.
|
|
26
|
+
*/
|
|
27
|
+
export const agentConfigSchema = z.object({
|
|
28
|
+
architect: agentRoleConfigSchema,
|
|
29
|
+
coder: agentRoleConfigSchema,
|
|
30
|
+
reviewer: agentRoleConfigSchema,
|
|
31
|
+
tester: agentRoleConfigSchema,
|
|
32
|
+
fixer: agentRoleConfigSchema,
|
|
33
|
+
judge: agentRoleConfigSchema,
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Schema for Anthropic provider settings.
|
|
37
|
+
*/
|
|
38
|
+
export const anthropicProviderSchema = z.object({
|
|
39
|
+
apiKey: z.string().min(1, 'Anthropic API key is required'),
|
|
40
|
+
baseUrl: z.string().url().default('https://api.anthropic.com'),
|
|
41
|
+
apiVersion: z.string().default('2023-06-01'),
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Schema for Ollama provider settings.
|
|
45
|
+
*/
|
|
46
|
+
export const ollamaProviderSchema = z.object({
|
|
47
|
+
baseUrl: z.string().url().default('http://localhost:11434'),
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Schema for provider configuration (all providers).
|
|
51
|
+
*/
|
|
52
|
+
export const providerConfigSchema = z.object({
|
|
53
|
+
anthropic: anthropicProviderSchema.optional(),
|
|
54
|
+
ollama: ollamaProviderSchema.optional(),
|
|
55
|
+
});
|
|
56
|
+
/**
|
|
57
|
+
* Schema for project-level settings.
|
|
58
|
+
*/
|
|
59
|
+
export const projectConfigSchema = z.object({
|
|
60
|
+
/** Primary programming language. */
|
|
61
|
+
language: z.string().default('typescript'),
|
|
62
|
+
/** Framework in use (e.g., "next.js", "express", "none"). */
|
|
63
|
+
framework: z.string().default('none'),
|
|
64
|
+
/** Test runner / framework (e.g., "vitest", "jest", "pytest"). */
|
|
65
|
+
testFramework: z.string().default('vitest'),
|
|
66
|
+
/** Glob patterns for source files. */
|
|
67
|
+
sourceGlobs: z.array(z.string()).default(['src/**/*.ts']),
|
|
68
|
+
/** Glob patterns for test files. */
|
|
69
|
+
testGlobs: z.array(z.string()).default(['tests/**/*.test.ts']),
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* Schema for workflow execution settings.
|
|
73
|
+
*/
|
|
74
|
+
export const workflowConfigSchema = z.object({
|
|
75
|
+
/** Maximum number of fix iterations before stopping. */
|
|
76
|
+
maxIterations: z.number().int().min(1).max(20).default(5),
|
|
77
|
+
/** Whether to require human approval between stages. */
|
|
78
|
+
humanApproval: z.boolean().default(true),
|
|
79
|
+
/** Whether to auto-create a Git branch for each task. */
|
|
80
|
+
autoCreateBranch: z.boolean().default(true),
|
|
81
|
+
/** Branch name prefix for auto-created branches. */
|
|
82
|
+
branchPrefix: z.string().default('aiagentflow/'),
|
|
83
|
+
/** Whether to auto-run tests after code generation. */
|
|
84
|
+
autoRunTests: z.boolean().default(true),
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* The complete application configuration schema.
|
|
88
|
+
* This is the single source of truth for config structure.
|
|
89
|
+
*/
|
|
90
|
+
export const appConfigSchema = z.object({
|
|
91
|
+
/** Schema version for future migrations. */
|
|
92
|
+
version: z.literal(1).default(1),
|
|
93
|
+
/** LLM provider connection settings. */
|
|
94
|
+
providers: providerConfigSchema,
|
|
95
|
+
/** Per-agent model and parameter assignments. */
|
|
96
|
+
agents: agentConfigSchema,
|
|
97
|
+
/** Project-level settings. */
|
|
98
|
+
project: projectConfigSchema,
|
|
99
|
+
/** Workflow execution settings. */
|
|
100
|
+
workflow: workflowConfigSchema,
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/core/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript types inferred from Zod schemas.
|
|
3
|
+
*
|
|
4
|
+
* NEVER define config types manually — they are always derived
|
|
5
|
+
* from the Zod schemas to guarantee runtime and compile-time agreement.
|
|
6
|
+
*
|
|
7
|
+
* Dependency direction: types.ts → schema.ts
|
|
8
|
+
* Used by: every module that touches config
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import { agentConfigSchema, agentRoleConfigSchema, appConfigSchema, providerConfigSchema, projectConfigSchema, workflowConfigSchema } from './schema.js';
|
|
12
|
+
/** Complete application configuration. */
|
|
13
|
+
export type AppConfig = z.infer<typeof appConfigSchema>;
|
|
14
|
+
/** LLM provider connection settings. */
|
|
15
|
+
export type ProviderConfig = z.infer<typeof providerConfigSchema>;
|
|
16
|
+
/** Project-level settings (language, framework, test runner). */
|
|
17
|
+
export type ProjectConfig = z.infer<typeof projectConfigSchema>;
|
|
18
|
+
/** Workflow execution settings. */
|
|
19
|
+
export type WorkflowConfig = z.infer<typeof workflowConfigSchema>;
|
|
20
|
+
/** Per-agent model and parameter assignments. */
|
|
21
|
+
export type AgentConfig = z.infer<typeof agentConfigSchema>;
|
|
22
|
+
/** Configuration for a single agent role. */
|
|
23
|
+
export type AgentRoleConfig = z.infer<typeof agentRoleConfigSchema>;
|
|
24
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/config/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACH,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACvB,MAAM,aAAa,CAAC;AAErB,0CAA0C;AAC1C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,iEAAiE;AACjE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,mCAAmC;AACnC,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,iDAAiD;AACjD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript types inferred from Zod schemas.
|
|
3
|
+
*
|
|
4
|
+
* NEVER define config types manually — they are always derived
|
|
5
|
+
* from the Zod schemas to guarantee runtime and compile-time agreement.
|
|
6
|
+
*
|
|
7
|
+
* Dependency direction: types.ts → schema.ts
|
|
8
|
+
* Used by: every module that touches config
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/config/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core error hierarchy for the AI Workflow Orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* All errors extend AppError and carry a machine-readable code
|
|
5
|
+
* plus optional structured context for debugging.
|
|
6
|
+
*
|
|
7
|
+
* Dependency direction: errors.ts → nothing (leaf module)
|
|
8
|
+
* Used by: every layer in the application
|
|
9
|
+
*/
|
|
10
|
+
/** Base application error with structured metadata. */
|
|
11
|
+
export declare class AppError extends Error {
|
|
12
|
+
readonly code: string;
|
|
13
|
+
readonly context?: Record<string, unknown>;
|
|
14
|
+
constructor(message: string, code: string, context?: Record<string, unknown>);
|
|
15
|
+
}
|
|
16
|
+
/** Raised when configuration is missing, invalid, or cannot be loaded/saved. */
|
|
17
|
+
export declare class ConfigError extends AppError {
|
|
18
|
+
constructor(message: string, context?: Record<string, unknown>);
|
|
19
|
+
}
|
|
20
|
+
/** Raised when an LLM provider call fails or cannot be reached. */
|
|
21
|
+
export declare class ProviderError extends AppError {
|
|
22
|
+
constructor(message: string, context?: Record<string, unknown>);
|
|
23
|
+
}
|
|
24
|
+
/** Raised when a Git operation fails. */
|
|
25
|
+
export declare class GitError extends AppError {
|
|
26
|
+
constructor(message: string, context?: Record<string, unknown>);
|
|
27
|
+
}
|
|
28
|
+
/** Raised when a workflow state transition is invalid. */
|
|
29
|
+
export declare class WorkflowError extends AppError {
|
|
30
|
+
constructor(message: string, context?: Record<string, unknown>);
|
|
31
|
+
}
|
|
32
|
+
/** Raised when user input fails validation. */
|
|
33
|
+
export declare class ValidationError extends AppError {
|
|
34
|
+
constructor(message: string, context?: Record<string, unknown>);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uDAAuD;AACvD,qBAAa,QAAS,SAAQ,KAAK;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEtC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAW/E;AAED,gFAAgF;AAChF,qBAAa,WAAY,SAAQ,QAAQ;gBACzB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAIjE;AAED,mEAAmE;AACnE,qBAAa,aAAc,SAAQ,QAAQ;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAIjE;AAED,yCAAyC;AACzC,qBAAa,QAAS,SAAQ,QAAQ;gBACtB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAIjE;AAED,0DAA0D;AAC1D,qBAAa,aAAc,SAAQ,QAAQ;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAIjE;AAED,+CAA+C;AAC/C,qBAAa,eAAgB,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAIjE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core error hierarchy for the AI Workflow Orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* All errors extend AppError and carry a machine-readable code
|
|
5
|
+
* plus optional structured context for debugging.
|
|
6
|
+
*
|
|
7
|
+
* Dependency direction: errors.ts → nothing (leaf module)
|
|
8
|
+
* Used by: every layer in the application
|
|
9
|
+
*/
|
|
10
|
+
/** Base application error with structured metadata. */
|
|
11
|
+
export class AppError extends Error {
|
|
12
|
+
code;
|
|
13
|
+
context;
|
|
14
|
+
constructor(message, code, context) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = 'AppError';
|
|
17
|
+
this.code = code;
|
|
18
|
+
this.context = context;
|
|
19
|
+
// Maintains proper stack trace in V8
|
|
20
|
+
if (Error.captureStackTrace) {
|
|
21
|
+
Error.captureStackTrace(this, this.constructor);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Raised when configuration is missing, invalid, or cannot be loaded/saved. */
|
|
26
|
+
export class ConfigError extends AppError {
|
|
27
|
+
constructor(message, context) {
|
|
28
|
+
super(message, 'CONFIG_ERROR', context);
|
|
29
|
+
this.name = 'ConfigError';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Raised when an LLM provider call fails or cannot be reached. */
|
|
33
|
+
export class ProviderError extends AppError {
|
|
34
|
+
constructor(message, context) {
|
|
35
|
+
super(message, 'PROVIDER_ERROR', context);
|
|
36
|
+
this.name = 'ProviderError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Raised when a Git operation fails. */
|
|
40
|
+
export class GitError extends AppError {
|
|
41
|
+
constructor(message, context) {
|
|
42
|
+
super(message, 'GIT_ERROR', context);
|
|
43
|
+
this.name = 'GitError';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Raised when a workflow state transition is invalid. */
|
|
47
|
+
export class WorkflowError extends AppError {
|
|
48
|
+
constructor(message, context) {
|
|
49
|
+
super(message, 'WORKFLOW_ERROR', context);
|
|
50
|
+
this.name = 'WorkflowError';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Raised when user input fails validation. */
|
|
54
|
+
export class ValidationError extends AppError {
|
|
55
|
+
constructor(message, context) {
|
|
56
|
+
super(message, 'VALIDATION_ERROR', context);
|
|
57
|
+
this.name = 'ValidationError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uDAAuD;AACvD,MAAM,OAAO,QAAS,SAAQ,KAAK;IACf,IAAI,CAAS;IACb,OAAO,CAA2B;IAElD,YAAY,OAAe,EAAE,IAAY,EAAE,OAAiC;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,qCAAqC;QACrC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC1B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;CACJ;AAED,gFAAgF;AAChF,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACrC,YAAY,OAAe,EAAE,OAAiC;QAC1D,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ;AAED,mEAAmE;AACnE,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACvC,YAAY,OAAe,EAAE,OAAiC;QAC1D,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAChC,CAAC;CACJ;AAED,yCAAyC;AACzC,MAAM,OAAO,QAAS,SAAQ,QAAQ;IAClC,YAAY,OAAe,EAAE,OAAiC;QAC1D,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IAC3B,CAAC;CACJ;AAED,0DAA0D;AAC1D,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACvC,YAAY,OAAe,EAAE,OAAiC;QAC1D,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAChC,CAAC;CACJ;AAED,+CAA+C;AAC/C,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IACzC,YAAY,OAAe,EAAE,OAAiC;QAC1D,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAClC,CAAC;CACJ"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human approval — interactive prompts for stage gates.
|
|
3
|
+
*
|
|
4
|
+
* When `humanApproval` is enabled in config, the workflow pauses
|
|
5
|
+
* between stages and asks the user to approve, edit, or abort.
|
|
6
|
+
*
|
|
7
|
+
* Dependency direction: approval.ts → prompts, chalk, utils
|
|
8
|
+
* Used by: workflow runner
|
|
9
|
+
*/
|
|
10
|
+
import type { WorkflowContext } from './engine.js';
|
|
11
|
+
export type ApprovalDecision = 'approve' | 'edit' | 'retry' | 'abort';
|
|
12
|
+
/**
|
|
13
|
+
* Ask the user to approve the current stage output.
|
|
14
|
+
*
|
|
15
|
+
* Shows a summary of what happened and gives options to proceed.
|
|
16
|
+
*/
|
|
17
|
+
export declare function requestApproval(ctx: WorkflowContext, agentRole: string, output: string): Promise<ApprovalDecision>;
|
|
18
|
+
/**
|
|
19
|
+
* Check if approval is needed based on config and current state.
|
|
20
|
+
*/
|
|
21
|
+
export declare function needsApproval(humanApproval: boolean, state: string): boolean;
|
|
22
|
+
//# sourceMappingURL=approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/approval.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtE;;;;GAIG;AACH,wBAAsB,eAAe,CACjC,GAAG,EAAE,eAAe,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CA8B3B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAM5E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human approval — interactive prompts for stage gates.
|
|
3
|
+
*
|
|
4
|
+
* When `humanApproval` is enabled in config, the workflow pauses
|
|
5
|
+
* between stages and asks the user to approve, edit, or abort.
|
|
6
|
+
*
|
|
7
|
+
* Dependency direction: approval.ts → prompts, chalk, utils
|
|
8
|
+
* Used by: workflow runner
|
|
9
|
+
*/
|
|
10
|
+
import prompts from 'prompts';
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
/**
|
|
13
|
+
* Ask the user to approve the current stage output.
|
|
14
|
+
*
|
|
15
|
+
* Shows a summary of what happened and gives options to proceed.
|
|
16
|
+
*/
|
|
17
|
+
export async function requestApproval(ctx, agentRole, output) {
|
|
18
|
+
console.log();
|
|
19
|
+
console.log(chalk.bold.cyan(`── ${agentRole.toUpperCase()} Output ──`));
|
|
20
|
+
console.log();
|
|
21
|
+
// Show a truncated preview of the output
|
|
22
|
+
const preview = output.length > 500
|
|
23
|
+
? output.slice(0, 500) + chalk.gray('\n... (truncated)')
|
|
24
|
+
: output;
|
|
25
|
+
console.log(preview);
|
|
26
|
+
console.log();
|
|
27
|
+
console.log(chalk.gray(`State: ${ctx.state} | Iteration: ${ctx.iteration}/${ctx.maxIterations}`));
|
|
28
|
+
console.log();
|
|
29
|
+
const { decision } = await prompts({
|
|
30
|
+
type: 'select',
|
|
31
|
+
name: 'decision',
|
|
32
|
+
message: 'How would you like to proceed?',
|
|
33
|
+
choices: [
|
|
34
|
+
{ title: chalk.green('✔ Approve') + ' — continue to next stage', value: 'approve' },
|
|
35
|
+
{ title: chalk.yellow('↻ Retry') + ' — re-run this agent', value: 'retry' },
|
|
36
|
+
{ title: chalk.red('✘ Abort') + ' — stop the workflow', value: 'abort' },
|
|
37
|
+
],
|
|
38
|
+
initial: 0,
|
|
39
|
+
});
|
|
40
|
+
if (!decision)
|
|
41
|
+
return 'abort';
|
|
42
|
+
return decision;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if approval is needed based on config and current state.
|
|
46
|
+
*/
|
|
47
|
+
export function needsApproval(humanApproval, state) {
|
|
48
|
+
if (!humanApproval)
|
|
49
|
+
return false;
|
|
50
|
+
// Skip approval for terminal states
|
|
51
|
+
const skipStates = ['complete', 'failed', 'idle'];
|
|
52
|
+
return !skipStates.includes(state);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/core/workflow/approval.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,GAAoB,EACpB,SAAiB,EACjB,MAAc;IAEd,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,yCAAyC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG;QAC/B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACxD,CAAC,CAAC,MAAM,CAAC;IACb,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAErB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,iBAAiB,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAClG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,CAAC;QAC/B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,gCAAgC;QACzC,OAAO,EAAE;YACL,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,2BAA2B,EAAE,KAAK,EAAE,SAAS,EAAE;YACnF,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE;YAC3E,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE;SAC3E;QACD,OAAO,EAAE,CAAC;KACb,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC;IAE9B,OAAO,QAA4B,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,aAAsB,EAAE,KAAa;IAC/D,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IAEjC,oCAAoC;IACpC,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow engine — core state machine that orchestrates the agent pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of a development task through stages:
|
|
5
|
+
* Spec → Plan → Code → Review → Test → Fix → QA → Complete
|
|
6
|
+
*
|
|
7
|
+
* Dependency direction: engine.ts → core/errors, agents/types, providers/types, utils
|
|
8
|
+
* Used by: cli/commands/run.ts
|
|
9
|
+
*/
|
|
10
|
+
import type { AgentRole } from '../../agents/types.js';
|
|
11
|
+
export declare const WorkflowState: {
|
|
12
|
+
readonly Idle: "idle";
|
|
13
|
+
readonly SpecCreated: "spec_created";
|
|
14
|
+
readonly PlanApproved: "plan_approved";
|
|
15
|
+
readonly CodeGenerated: "code_generated";
|
|
16
|
+
readonly ReviewDone: "review_done";
|
|
17
|
+
readonly ReviewRejected: "review_rejected";
|
|
18
|
+
readonly TestsWritten: "tests_written";
|
|
19
|
+
readonly TestsPassed: "tests_passed";
|
|
20
|
+
readonly TestsFailed: "tests_failed";
|
|
21
|
+
readonly FixApplied: "fix_applied";
|
|
22
|
+
readonly QAApproved: "qa_approved";
|
|
23
|
+
readonly Complete: "complete";
|
|
24
|
+
readonly Failed: "failed";
|
|
25
|
+
};
|
|
26
|
+
export type WorkflowStateValue = (typeof WorkflowState)[keyof typeof WorkflowState];
|
|
27
|
+
export type WorkflowEvent = {
|
|
28
|
+
type: 'SPEC_READY';
|
|
29
|
+
payload: {
|
|
30
|
+
spec: string;
|
|
31
|
+
};
|
|
32
|
+
} | {
|
|
33
|
+
type: 'PLAN_APPROVED';
|
|
34
|
+
payload: {
|
|
35
|
+
plan: string;
|
|
36
|
+
};
|
|
37
|
+
} | {
|
|
38
|
+
type: 'CODE_GENERATED';
|
|
39
|
+
payload: {
|
|
40
|
+
files: string[];
|
|
41
|
+
};
|
|
42
|
+
} | {
|
|
43
|
+
type: 'REVIEW_DONE';
|
|
44
|
+
payload: {
|
|
45
|
+
approved: boolean;
|
|
46
|
+
feedback: string;
|
|
47
|
+
};
|
|
48
|
+
} | {
|
|
49
|
+
type: 'TESTS_WRITTEN';
|
|
50
|
+
payload: {
|
|
51
|
+
testFiles: string[];
|
|
52
|
+
};
|
|
53
|
+
} | {
|
|
54
|
+
type: 'TESTS_PASSED';
|
|
55
|
+
} | {
|
|
56
|
+
type: 'TESTS_FAILED';
|
|
57
|
+
payload: {
|
|
58
|
+
failures: string;
|
|
59
|
+
};
|
|
60
|
+
} | {
|
|
61
|
+
type: 'FIX_APPLIED';
|
|
62
|
+
payload: {
|
|
63
|
+
files: string[];
|
|
64
|
+
};
|
|
65
|
+
} | {
|
|
66
|
+
type: 'QA_APPROVED';
|
|
67
|
+
} | {
|
|
68
|
+
type: 'QA_REJECTED';
|
|
69
|
+
payload: {
|
|
70
|
+
reason: string;
|
|
71
|
+
};
|
|
72
|
+
} | {
|
|
73
|
+
type: 'ABORT';
|
|
74
|
+
payload?: {
|
|
75
|
+
reason: string;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
/** All accumulated data during a workflow run. */
|
|
79
|
+
export interface WorkflowContext {
|
|
80
|
+
/** The original task description. */
|
|
81
|
+
task: string;
|
|
82
|
+
/** Current state of the workflow. */
|
|
83
|
+
state: WorkflowStateValue;
|
|
84
|
+
/** Number of fix iterations completed. */
|
|
85
|
+
iteration: number;
|
|
86
|
+
/** Maximum allowed fix iterations. */
|
|
87
|
+
maxIterations: number;
|
|
88
|
+
/** Spec generated by the architect agent. */
|
|
89
|
+
spec?: string;
|
|
90
|
+
/** Plan generated by the architect agent. */
|
|
91
|
+
plan?: string;
|
|
92
|
+
/** Files created or modified by the coder agent. */
|
|
93
|
+
generatedFiles: string[];
|
|
94
|
+
/** Review feedback from the reviewer agent. */
|
|
95
|
+
reviewFeedback?: string;
|
|
96
|
+
/** Test files generated by the tester agent. */
|
|
97
|
+
testFiles: string[];
|
|
98
|
+
/** Test failure details. */
|
|
99
|
+
testFailures?: string;
|
|
100
|
+
/** History of all state transitions. */
|
|
101
|
+
history: Array<{
|
|
102
|
+
from: WorkflowStateValue;
|
|
103
|
+
to: WorkflowStateValue;
|
|
104
|
+
event: string;
|
|
105
|
+
timestamp: number;
|
|
106
|
+
}>;
|
|
107
|
+
}
|
|
108
|
+
/** Maps workflow states to which agent runs at that stage. */
|
|
109
|
+
export declare const STATE_AGENT_MAP: Partial<Record<WorkflowStateValue, AgentRole>>;
|
|
110
|
+
/**
|
|
111
|
+
* Create a new workflow context for a task.
|
|
112
|
+
*/
|
|
113
|
+
export declare function createWorkflowContext(task: string, maxIterations?: number): WorkflowContext;
|
|
114
|
+
/**
|
|
115
|
+
* Transition the workflow to a new state.
|
|
116
|
+
*
|
|
117
|
+
* @throws {WorkflowError} if the transition is invalid or max iterations exceeded.
|
|
118
|
+
*/
|
|
119
|
+
export declare function transition(context: WorkflowContext, event: WorkflowEvent): WorkflowContext;
|
|
120
|
+
/**
|
|
121
|
+
* Check if the workflow is in a terminal state.
|
|
122
|
+
*/
|
|
123
|
+
export declare function isTerminal(context: WorkflowContext): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Get the next agent that should run based on current state.
|
|
126
|
+
*/
|
|
127
|
+
export declare function getNextAgent(context: WorkflowContext): AgentRole | null;
|
|
128
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIvD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;CAchB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAIpF,MAAM,MAAM,aAAa,GACnB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAItD,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC5B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,kBAAkB,CAAC;QAAC,EAAE,EAAE,kBAAkB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1G;AAqBD,8DAA8D;AAC9D,eAAO,MAAM,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAS1E,CAAC;AAIF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAE,MAAU,GAAG,eAAe,CAU9F;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACtB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,aAAa,GACrB,eAAe,CAiEjB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAEvE"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow engine — core state machine that orchestrates the agent pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of a development task through stages:
|
|
5
|
+
* Spec → Plan → Code → Review → Test → Fix → QA → Complete
|
|
6
|
+
*
|
|
7
|
+
* Dependency direction: engine.ts → core/errors, agents/types, providers/types, utils
|
|
8
|
+
* Used by: cli/commands/run.ts
|
|
9
|
+
*/
|
|
10
|
+
import { WorkflowError } from '../errors.js';
|
|
11
|
+
import { logger } from '../../utils/logger.js';
|
|
12
|
+
// ── Workflow State ──
|
|
13
|
+
export const WorkflowState = {
|
|
14
|
+
Idle: 'idle',
|
|
15
|
+
SpecCreated: 'spec_created',
|
|
16
|
+
PlanApproved: 'plan_approved',
|
|
17
|
+
CodeGenerated: 'code_generated',
|
|
18
|
+
ReviewDone: 'review_done',
|
|
19
|
+
ReviewRejected: 'review_rejected',
|
|
20
|
+
TestsWritten: 'tests_written',
|
|
21
|
+
TestsPassed: 'tests_passed',
|
|
22
|
+
TestsFailed: 'tests_failed',
|
|
23
|
+
FixApplied: 'fix_applied',
|
|
24
|
+
QAApproved: 'qa_approved',
|
|
25
|
+
Complete: 'complete',
|
|
26
|
+
Failed: 'failed',
|
|
27
|
+
};
|
|
28
|
+
// ── Valid Transitions ──
|
|
29
|
+
/** Defines which state transitions are valid. */
|
|
30
|
+
const VALID_TRANSITIONS = {
|
|
31
|
+
idle: ['spec_created', 'failed'],
|
|
32
|
+
spec_created: ['plan_approved', 'failed'],
|
|
33
|
+
plan_approved: ['code_generated', 'failed'],
|
|
34
|
+
code_generated: ['review_done', 'review_rejected', 'failed'],
|
|
35
|
+
review_done: ['tests_written', 'failed'],
|
|
36
|
+
review_rejected: ['fix_applied', 'failed'], // fixer runs → fix_applied → code_generated
|
|
37
|
+
tests_written: ['tests_passed', 'tests_failed', 'failed'],
|
|
38
|
+
tests_passed: ['qa_approved', 'failed'],
|
|
39
|
+
tests_failed: ['fix_applied', 'failed'],
|
|
40
|
+
fix_applied: ['code_generated', 'failed'], // loops back to reviewer via code_generated
|
|
41
|
+
qa_approved: ['complete'],
|
|
42
|
+
complete: [],
|
|
43
|
+
failed: [],
|
|
44
|
+
};
|
|
45
|
+
/** Maps workflow states to which agent runs at that stage. */
|
|
46
|
+
export const STATE_AGENT_MAP = {
|
|
47
|
+
idle: 'architect',
|
|
48
|
+
spec_created: 'architect',
|
|
49
|
+
plan_approved: 'coder',
|
|
50
|
+
code_generated: 'reviewer',
|
|
51
|
+
review_done: 'tester',
|
|
52
|
+
review_rejected: 'fixer',
|
|
53
|
+
tests_failed: 'fixer',
|
|
54
|
+
tests_passed: 'judge',
|
|
55
|
+
};
|
|
56
|
+
// ── Workflow Engine ──
|
|
57
|
+
/**
|
|
58
|
+
* Create a new workflow context for a task.
|
|
59
|
+
*/
|
|
60
|
+
export function createWorkflowContext(task, maxIterations = 5) {
|
|
61
|
+
return {
|
|
62
|
+
task,
|
|
63
|
+
state: WorkflowState.Idle,
|
|
64
|
+
iteration: 0,
|
|
65
|
+
maxIterations,
|
|
66
|
+
generatedFiles: [],
|
|
67
|
+
testFiles: [],
|
|
68
|
+
history: [],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Transition the workflow to a new state.
|
|
73
|
+
*
|
|
74
|
+
* @throws {WorkflowError} if the transition is invalid or max iterations exceeded.
|
|
75
|
+
*/
|
|
76
|
+
export function transition(context, event) {
|
|
77
|
+
const currentState = context.state;
|
|
78
|
+
const nextState = resolveNextState(currentState, event);
|
|
79
|
+
// Validate the transition
|
|
80
|
+
const validNextStates = VALID_TRANSITIONS[currentState];
|
|
81
|
+
if (!validNextStates?.includes(nextState)) {
|
|
82
|
+
throw new WorkflowError(`Invalid transition: ${currentState} → ${nextState} (event: ${event.type})`, { currentState, nextState, event: event.type });
|
|
83
|
+
}
|
|
84
|
+
// Check iteration limit on fix loops
|
|
85
|
+
const isFixLoop = nextState === 'review_rejected' || (nextState === 'fix_applied' && currentState === 'tests_failed');
|
|
86
|
+
const newIteration = isFixLoop ? context.iteration + 1 : context.iteration;
|
|
87
|
+
if (newIteration >= context.maxIterations) {
|
|
88
|
+
throw new WorkflowError(`Max iterations (${context.maxIterations}) exceeded. Stopping workflow.`, { iteration: newIteration, maxIterations: context.maxIterations });
|
|
89
|
+
}
|
|
90
|
+
logger.debug(`Workflow: ${currentState} → ${nextState} (${event.type})`);
|
|
91
|
+
// Build updated context
|
|
92
|
+
const updated = {
|
|
93
|
+
...context,
|
|
94
|
+
state: nextState,
|
|
95
|
+
iteration: newIteration,
|
|
96
|
+
history: [
|
|
97
|
+
...context.history,
|
|
98
|
+
{ from: currentState, to: nextState, event: event.type, timestamp: Date.now() },
|
|
99
|
+
],
|
|
100
|
+
};
|
|
101
|
+
// Apply event-specific data
|
|
102
|
+
switch (event.type) {
|
|
103
|
+
case 'SPEC_READY':
|
|
104
|
+
updated.spec = event.payload.spec;
|
|
105
|
+
break;
|
|
106
|
+
case 'PLAN_APPROVED':
|
|
107
|
+
updated.plan = event.payload.plan;
|
|
108
|
+
break;
|
|
109
|
+
case 'CODE_GENERATED':
|
|
110
|
+
updated.generatedFiles = [...updated.generatedFiles, ...event.payload.files];
|
|
111
|
+
break;
|
|
112
|
+
case 'REVIEW_DONE':
|
|
113
|
+
updated.reviewFeedback = event.payload.feedback;
|
|
114
|
+
break;
|
|
115
|
+
case 'TESTS_WRITTEN':
|
|
116
|
+
updated.testFiles = [...updated.testFiles, ...event.payload.testFiles];
|
|
117
|
+
break;
|
|
118
|
+
case 'TESTS_FAILED':
|
|
119
|
+
updated.testFailures = event.payload.failures;
|
|
120
|
+
break;
|
|
121
|
+
case 'FIX_APPLIED':
|
|
122
|
+
updated.generatedFiles = [...updated.generatedFiles, ...event.payload.files];
|
|
123
|
+
break;
|
|
124
|
+
default:
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
return updated;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Check if the workflow is in a terminal state.
|
|
131
|
+
*/
|
|
132
|
+
export function isTerminal(context) {
|
|
133
|
+
return context.state === 'complete' || context.state === 'failed';
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get the next agent that should run based on current state.
|
|
137
|
+
*/
|
|
138
|
+
export function getNextAgent(context) {
|
|
139
|
+
return STATE_AGENT_MAP[context.state] ?? null;
|
|
140
|
+
}
|
|
141
|
+
// ── Private ──
|
|
142
|
+
function resolveNextState(current, event) {
|
|
143
|
+
switch (event.type) {
|
|
144
|
+
case 'SPEC_READY': return WorkflowState.SpecCreated;
|
|
145
|
+
case 'PLAN_APPROVED': return WorkflowState.PlanApproved;
|
|
146
|
+
case 'CODE_GENERATED': return WorkflowState.CodeGenerated;
|
|
147
|
+
case 'REVIEW_DONE':
|
|
148
|
+
return event.payload.approved ? WorkflowState.ReviewDone : WorkflowState.ReviewRejected;
|
|
149
|
+
case 'TESTS_WRITTEN': return WorkflowState.TestsWritten;
|
|
150
|
+
case 'TESTS_PASSED': return WorkflowState.TestsPassed;
|
|
151
|
+
case 'TESTS_FAILED': return WorkflowState.TestsFailed;
|
|
152
|
+
case 'FIX_APPLIED': return WorkflowState.FixApplied;
|
|
153
|
+
case 'QA_APPROVED': return WorkflowState.QAApproved;
|
|
154
|
+
case 'QA_REJECTED': return WorkflowState.CodeGenerated;
|
|
155
|
+
case 'ABORT': return WorkflowState.Failed;
|
|
156
|
+
default: return WorkflowState.Failed;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/core/workflow/engine.ts"],"names":[],"mappings":"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"}
|