olympus-ai 4.4.22 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/features/workflow-engine/bolts/bolt-executor.d.ts +29 -0
  3. package/dist/features/workflow-engine/bolts/bolt-executor.d.ts.map +1 -0
  4. package/dist/features/workflow-engine/bolts/bolt-executor.js +96 -0
  5. package/dist/features/workflow-engine/bolts/bolt-executor.js.map +1 -0
  6. package/dist/features/workflow-engine/bolts/bolt-planner.d.ts +35 -0
  7. package/dist/features/workflow-engine/bolts/bolt-planner.d.ts.map +1 -0
  8. package/dist/features/workflow-engine/bolts/bolt-planner.js +284 -0
  9. package/dist/features/workflow-engine/bolts/bolt-planner.js.map +1 -0
  10. package/dist/features/workflow-engine/bolts/bolt-reviewer.d.ts +36 -0
  11. package/dist/features/workflow-engine/bolts/bolt-reviewer.d.ts.map +1 -0
  12. package/dist/features/workflow-engine/bolts/bolt-reviewer.js +108 -0
  13. package/dist/features/workflow-engine/bolts/bolt-reviewer.js.map +1 -0
  14. package/dist/features/workflow-engine/bolts/bolt-spec-validator.d.ts +9 -0
  15. package/dist/features/workflow-engine/bolts/bolt-spec-validator.d.ts.map +1 -0
  16. package/dist/features/workflow-engine/bolts/bolt-spec-validator.js +30 -0
  17. package/dist/features/workflow-engine/bolts/bolt-spec-validator.js.map +1 -0
  18. package/dist/features/workflow-engine/bolts/express-bolt-factory.d.ts +25 -0
  19. package/dist/features/workflow-engine/bolts/express-bolt-factory.d.ts.map +1 -0
  20. package/dist/features/workflow-engine/bolts/express-bolt-factory.js +60 -0
  21. package/dist/features/workflow-engine/bolts/express-bolt-factory.js.map +1 -0
  22. package/dist/features/workflow-engine/checkpoint.d.ts +5 -1
  23. package/dist/features/workflow-engine/checkpoint.d.ts.map +1 -1
  24. package/dist/features/workflow-engine/checkpoint.js +35 -0
  25. package/dist/features/workflow-engine/checkpoint.js.map +1 -1
  26. package/dist/features/workflow-engine/construction/decomposition.d.ts +13 -0
  27. package/dist/features/workflow-engine/construction/decomposition.d.ts.map +1 -1
  28. package/dist/features/workflow-engine/construction/decomposition.js +32 -0
  29. package/dist/features/workflow-engine/construction/decomposition.js.map +1 -1
  30. package/dist/features/workflow-engine/construction/executor.d.ts +5 -1
  31. package/dist/features/workflow-engine/construction/executor.d.ts.map +1 -1
  32. package/dist/features/workflow-engine/construction/executor.js +66 -35
  33. package/dist/features/workflow-engine/construction/executor.js.map +1 -1
  34. package/dist/features/workflow-engine/construction/regression-baseline.d.ts +1 -1
  35. package/dist/features/workflow-engine/construction/regression-baseline.js +1 -1
  36. package/dist/features/workflow-engine/construction/unit-stage-runner.d.ts.map +1 -1
  37. package/dist/features/workflow-engine/construction/unit-stage-runner.js +13 -2
  38. package/dist/features/workflow-engine/construction/unit-stage-runner.js.map +1 -1
  39. package/dist/features/workflow-engine/engine.d.ts.map +1 -1
  40. package/dist/features/workflow-engine/engine.js +6 -1
  41. package/dist/features/workflow-engine/engine.js.map +1 -1
  42. package/dist/features/workflow-engine/inception/stages/workflow-planning.js +2 -2
  43. package/dist/features/workflow-engine/inception/stages/workflow-planning.js.map +1 -1
  44. package/dist/features/workflow-engine/index.d.ts +15 -6
  45. package/dist/features/workflow-engine/index.d.ts.map +1 -1
  46. package/dist/features/workflow-engine/index.js +10 -5
  47. package/dist/features/workflow-engine/index.js.map +1 -1
  48. package/dist/features/workflow-engine/manifest.d.ts +1 -0
  49. package/dist/features/workflow-engine/manifest.d.ts.map +1 -1
  50. package/dist/features/workflow-engine/manifest.js +8 -0
  51. package/dist/features/workflow-engine/manifest.js.map +1 -1
  52. package/dist/features/workflow-engine/phase-types.d.ts +119 -3
  53. package/dist/features/workflow-engine/phase-types.d.ts.map +1 -1
  54. package/dist/features/workflow-engine/phase-types.js +13 -0
  55. package/dist/features/workflow-engine/phase-types.js.map +1 -1
  56. package/dist/features/workflow-engine/workflow-bridge.d.ts +1 -0
  57. package/dist/features/workflow-engine/workflow-bridge.d.ts.map +1 -1
  58. package/dist/features/workflow-engine/workflow-bridge.js +46 -0
  59. package/dist/features/workflow-engine/workflow-bridge.js.map +1 -1
  60. package/dist/features/workflow-engine/workflow-routing.d.ts +1 -1
  61. package/dist/features/workflow-engine/workflow-routing.d.ts.map +1 -1
  62. package/dist/features/workflow-engine/workflow-routing.js +10 -10
  63. package/dist/features/workflow-engine/workflow-routing.js.map +1 -1
  64. package/dist/hooks/olympus-hooks.cjs +265 -265
  65. package/dist/installer/index.d.ts +1 -1
  66. package/dist/installer/index.d.ts.map +1 -1
  67. package/dist/installer/index.js +1 -1
  68. package/dist/installer/index.js.map +1 -1
  69. package/package.json +1 -1
  70. package/resources/rules/common/welcome-message.md +12 -3
  71. package/resources/rules/construction/bolt-planning.md +143 -0
  72. package/resources/rules/construction/bolt-review.md +115 -0
  73. package/resources/rules/construction/code-generation.md +17 -7
  74. package/resources/rules/inception/units-generation.md +2 -2
  75. package/resources/rules/inception/workflow-planning.md +1 -1
  76. package/resources/skills/continue/SKILL.md +2 -1
  77. package/resources/skills/plan/SKILL.md +3 -3
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "olympus-ai",
3
- "version": "4.4.22",
3
+ "version": "4.5.1",
4
4
  "description": "Olympus: Multi-agent orchestration for Claude Code. Summon the gods of code.",
5
5
  "author": {
6
6
  "name": "mikev10",
@@ -0,0 +1,29 @@
1
+ import type { BoltSpec, BoltStatus, BoltExecutionStage, BoltStageProgress, WorkflowCheckpointV3 } from '../phase-types.js';
2
+ export interface StageResult {
3
+ success: boolean;
4
+ artifact_path?: string;
5
+ error?: string;
6
+ }
7
+ export interface StageHandlers {
8
+ onElaboration: (bolt: BoltSpec, projectPath: string) => Promise<StageResult>;
9
+ onCodeGeneration: (bolt: BoltSpec, projectPath: string) => Promise<StageResult>;
10
+ onBuildAndTest: (bolt: BoltSpec, projectPath: string, targetFiles: string[]) => Promise<StageResult>;
11
+ onReview: (bolt: BoltSpec, projectPath: string) => Promise<StageResult>;
12
+ }
13
+ export interface BoltExecutionResult {
14
+ status: BoltStatus;
15
+ stages: Record<BoltExecutionStage, BoltStageProgress>;
16
+ }
17
+ /**
18
+ * Executes the 4-stage pipeline for a single bolt.
19
+ *
20
+ * The caller must ensure `checkpoint.construction_bolts[boltSpec.id]` exists
21
+ * before calling this function (via `registerBoltsInCheckpoint`).
22
+ *
23
+ * @returns The final execution result with bolt status and per-stage progress.
24
+ */
25
+ export declare function execute(boltSpec: BoltSpec, checkpoint: WorkflowCheckpointV3, projectPath: string, workflowId: string, handlers: StageHandlers): Promise<BoltExecutionResult>;
26
+ export declare const BoltExecutor: {
27
+ execute: typeof execute;
28
+ };
29
+ //# sourceMappingURL=bolt-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bolt-executor.d.ts","sourceRoot":"","sources":["../../../../src/features/workflow-engine/bolts/bolt-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7E,gBAAgB,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAChF,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACrG,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;CACvD;AAsCD;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,mBAAmB,CAAC,CAwE9B;AAED,eAAO,MAAM,YAAY;;CAAc,CAAC"}
@@ -0,0 +1,96 @@
1
+ import { saveCheckpoint } from '../checkpoint.js';
2
+ const STAGE_ORDER = [
3
+ 'elaboration',
4
+ 'code_generation',
5
+ 'build_and_test',
6
+ 'review',
7
+ ];
8
+ const HANDLER_MAP = {
9
+ elaboration: 'onElaboration',
10
+ code_generation: 'onCodeGeneration',
11
+ build_and_test: 'onBuildAndTest',
12
+ review: 'onReview',
13
+ };
14
+ // Bolt-level status transitions triggered after specific stages complete (BR-003)
15
+ const STATUS_AFTER_STAGE = {
16
+ build_and_test: 'built',
17
+ review: 'done',
18
+ };
19
+ async function callHandler(handlers, stage, bolt, projectPath) {
20
+ const handlerKey = HANDLER_MAP[stage];
21
+ if (stage === 'build_and_test') {
22
+ return handlers.onBuildAndTest(bolt, projectPath, bolt.target_files ?? []);
23
+ }
24
+ return handlers[handlerKey](bolt, projectPath);
25
+ }
26
+ /**
27
+ * Executes the 4-stage pipeline for a single bolt.
28
+ *
29
+ * The caller must ensure `checkpoint.construction_bolts[boltSpec.id]` exists
30
+ * before calling this function (via `registerBoltsInCheckpoint`).
31
+ *
32
+ * @returns The final execution result with bolt status and per-stage progress.
33
+ */
34
+ export async function execute(boltSpec, checkpoint, projectPath, workflowId, handlers) {
35
+ const boltProgress = checkpoint.construction_bolts[boltSpec.id];
36
+ checkpoint.active_bolt_id = boltSpec.id;
37
+ boltProgress.status = 'in_progress';
38
+ await saveCheckpoint(projectPath, checkpoint);
39
+ for (const stage of STAGE_ORDER) {
40
+ const stageProgress = boltProgress.stages[stage];
41
+ // Express mode: skip elaboration (BR-002, BR-009)
42
+ if (boltSpec.express_mode && stage === 'elaboration') {
43
+ stageProgress.status = 'skipped';
44
+ stageProgress.completed_at = new Date().toISOString();
45
+ await saveCheckpoint(projectPath, checkpoint);
46
+ continue;
47
+ }
48
+ // Transition to in_review at review start (BR-003)
49
+ if (stage === 'review') {
50
+ boltProgress.status = 'in_review';
51
+ await saveCheckpoint(projectPath, checkpoint);
52
+ }
53
+ checkpoint.active_bolt_stage = stage;
54
+ stageProgress.status = 'in_progress';
55
+ stageProgress.started_at = new Date().toISOString();
56
+ await saveCheckpoint(projectPath, checkpoint);
57
+ const result = await callHandler(handlers, stage, boltSpec, projectPath);
58
+ if (result.success) {
59
+ stageProgress.status = 'completed';
60
+ stageProgress.completed_at = new Date().toISOString();
61
+ if (result.artifact_path) {
62
+ stageProgress.artifact_path = result.artifact_path;
63
+ }
64
+ const nextStatus = STATUS_AFTER_STAGE[stage];
65
+ if (nextStatus) {
66
+ boltProgress.status = nextStatus;
67
+ }
68
+ await saveCheckpoint(projectPath, checkpoint);
69
+ }
70
+ else {
71
+ stageProgress.failure_count += 1;
72
+ stageProgress.last_error = result.error ?? 'Unknown error';
73
+ boltProgress.failure_count += 1;
74
+ boltProgress.last_error = stageProgress.last_error;
75
+ if (stageProgress.failure_count >= 2) {
76
+ stageProgress.status = 'failed';
77
+ boltProgress.status = 'failed';
78
+ await saveCheckpoint(projectPath, checkpoint);
79
+ break;
80
+ }
81
+ // First failure: revert to not_started so caller can retry
82
+ stageProgress.status = 'not_started';
83
+ await saveCheckpoint(projectPath, checkpoint);
84
+ break;
85
+ }
86
+ }
87
+ checkpoint.active_bolt_id = null;
88
+ checkpoint.active_bolt_stage = null;
89
+ await saveCheckpoint(projectPath, checkpoint);
90
+ return {
91
+ status: boltProgress.status,
92
+ stages: { ...boltProgress.stages },
93
+ };
94
+ }
95
+ export const BoltExecutor = { execute };
96
+ //# sourceMappingURL=bolt-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bolt-executor.js","sourceRoot":"","sources":["../../../../src/features/workflow-engine/bolts/bolt-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { BoltSpec, WorkflowCheckpointV3, HierarchicalNode } from '../phase-types.js';
2
+ export interface CoverageResult {
3
+ coverage_percent: number;
4
+ uncovered_criteria: string[];
5
+ passed: boolean;
6
+ requiresAcknowledgment: boolean;
7
+ }
8
+ export type BoltPlannerErrorCode = 'AGENT_PARSE_FAILURE' | 'COVERAGE_HARD_BLOCK' | 'ARTIFACT_WRITE_FAILURE' | 'CHECKPOINT_UPDATE_FAILURE';
9
+ export declare class BoltPlannerError extends Error {
10
+ readonly code: BoltPlannerErrorCode;
11
+ constructor(code: BoltPlannerErrorCode, message: string);
12
+ }
13
+ export declare function validateBoltCoverage(unitCriteria: string[], bolts: BoltSpec[]): CoverageResult;
14
+ export declare function writeBoltArtifacts(bolts: BoltSpec[], projectPath: string, workflowId: string): Promise<void>;
15
+ export declare function registerBoltsInCheckpoint(bolts: BoltSpec[], checkpoint: WorkflowCheckpointV3): void;
16
+ export declare function buildDecompositionPrompt(unit: HierarchicalNode, intent: string, depth: number): string;
17
+ export declare function parseAgentResponse(response: string, unit: HierarchicalNode, startIndex: number, depth: number): BoltSpec[];
18
+ export declare function planBoltsForUnit(unit: HierarchicalNode, intent: string, depth: number, checkpoint: WorkflowCheckpointV3, projectPath: string, workflowId: string): Promise<{
19
+ bolts: BoltSpec[];
20
+ coverage: CoverageResult;
21
+ }>;
22
+ export declare function finalizeBoltPlan(bolts: BoltSpec[], unit: HierarchicalNode, checkpoint: WorkflowCheckpointV3, projectPath: string, workflowId: string): Promise<{
23
+ bolts: BoltSpec[];
24
+ coverage: CoverageResult;
25
+ }>;
26
+ export declare const BoltPlanner: {
27
+ buildDecompositionPrompt: typeof buildDecompositionPrompt;
28
+ parseAgentResponse: typeof parseAgentResponse;
29
+ validateBoltCoverage: typeof validateBoltCoverage;
30
+ writeBoltArtifacts: typeof writeBoltArtifacts;
31
+ registerBoltsInCheckpoint: typeof registerBoltsInCheckpoint;
32
+ planBoltsForUnit: typeof planBoltsForUnit;
33
+ finalizeBoltPlan: typeof finalizeBoltPlan;
34
+ };
35
+ //# sourceMappingURL=bolt-planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bolt-planner.d.ts","sourceRoot":"","sources":["../../../../src/features/workflow-engine/bolts/bolt-planner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EAGR,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAK3B,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,oBAAoB,GAC5B,qBAAqB,GACrB,qBAAqB,GACrB,wBAAwB,GACxB,2BAA2B,CAAC;AAEhC,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;gBAExB,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM;CAKxD;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,QAAQ,EAAE,GAChB,cAAc,CAwDhB;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,QAAQ,EAAE,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAwGf;AAaD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,oBAAoB,GAC/B,IAAI,CAwBN;AAID,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAwCR;AAWD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,QAAQ,EAAE,CA4DZ;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAE,CAAC,CAY1D;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,QAAQ,EAAE,EACjB,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAE,CAAC,CAmB1D;AAED,eAAO,MAAM,WAAW;;;;;;;;CAQvB,CAAC"}
@@ -0,0 +1,284 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { BoltSpecValidator } from './bolt-spec-validator.js';
4
+ import { slugifyBoltName } from '../construction/decomposition.js';
5
+ export class BoltPlannerError extends Error {
6
+ code;
7
+ constructor(code, message) {
8
+ super(message);
9
+ this.name = 'BoltPlannerError';
10
+ this.code = code;
11
+ }
12
+ }
13
+ export function validateBoltCoverage(unitCriteria, bolts) {
14
+ if (unitCriteria.length === 0) {
15
+ return {
16
+ coverage_percent: 100,
17
+ uncovered_criteria: [],
18
+ passed: true,
19
+ requiresAcknowledgment: false,
20
+ };
21
+ }
22
+ const boltCriteriaPool = [];
23
+ for (const bolt of bolts) {
24
+ for (const criterion of bolt.acceptance_criteria) {
25
+ boltCriteriaPool.push(criterion.toLowerCase());
26
+ }
27
+ }
28
+ const uncovered = [];
29
+ let coveredCount = 0;
30
+ for (const unitCriterion of unitCriteria) {
31
+ const lowerCriterion = unitCriterion.toLowerCase();
32
+ const isCovered = boltCriteriaPool.some((bc) => bc.includes(lowerCriterion));
33
+ if (isCovered) {
34
+ coveredCount++;
35
+ }
36
+ else {
37
+ uncovered.push(unitCriterion);
38
+ }
39
+ }
40
+ const coverage_percent = Math.round((coveredCount / unitCriteria.length) * 100);
41
+ if (coverage_percent >= 95) {
42
+ return {
43
+ coverage_percent,
44
+ uncovered_criteria: uncovered,
45
+ passed: true,
46
+ requiresAcknowledgment: false,
47
+ };
48
+ }
49
+ if (coverage_percent >= 80) {
50
+ return {
51
+ coverage_percent,
52
+ uncovered_criteria: uncovered,
53
+ passed: true,
54
+ requiresAcknowledgment: true,
55
+ };
56
+ }
57
+ return {
58
+ coverage_percent,
59
+ uncovered_criteria: uncovered,
60
+ passed: false,
61
+ requiresAcknowledgment: false,
62
+ };
63
+ }
64
+ export async function writeBoltArtifacts(bolts, projectPath, workflowId) {
65
+ try {
66
+ for (const bolt of bolts) {
67
+ const boltDir = path.join(projectPath, 'aidlc-docs', workflowId, 'construction', 'bolts', bolt.id);
68
+ await fs.ensureDir(boltDir);
69
+ const frontmatter = [
70
+ '---',
71
+ `id: ${bolt.id}`,
72
+ `title: "${bolt.title}"`,
73
+ `parent_unit_id: ${bolt.parent_unit_id}`,
74
+ `sequence: ${bolt.sequence}`,
75
+ `depth_target: ${bolt.depth_target}`,
76
+ `express_mode: ${bolt.express_mode}`,
77
+ `estimated_effort_hours: ${bolt.estimated_effort_hours}`,
78
+ '---',
79
+ ].join('\n');
80
+ const acList = bolt.acceptance_criteria.map((c) => `- ${c}`).join('\n');
81
+ const filesList = bolt.target_files.length > 0
82
+ ? bolt.target_files.map((f) => `- ${f}`).join('\n')
83
+ : 'None';
84
+ const depsList = bolt.dependencies.length > 0
85
+ ? bolt.dependencies.map((d) => `- ${d}`).join('\n')
86
+ : 'None';
87
+ const specContent = [
88
+ frontmatter,
89
+ '',
90
+ `# ${bolt.title}`,
91
+ '',
92
+ '## Scope',
93
+ '',
94
+ bolt.scope,
95
+ '',
96
+ '## Acceptance Criteria',
97
+ '',
98
+ acList,
99
+ '',
100
+ '## Target Files',
101
+ '',
102
+ filesList,
103
+ '',
104
+ '## Dependencies',
105
+ '',
106
+ depsList,
107
+ '',
108
+ ].join('\n');
109
+ await fs.writeFile(path.join(boltDir, 'spec.md'), specContent, 'utf-8');
110
+ }
111
+ if (bolts.length > 0) {
112
+ const parentUnitId = bolts[0].parent_unit_id;
113
+ const planDir = path.join(projectPath, 'aidlc-docs', workflowId, 'construction', 'plans');
114
+ await fs.ensureDir(planDir);
115
+ const summaryLines = [
116
+ `# Bolt Plan: ${parentUnitId}`,
117
+ '',
118
+ `Generated: ${new Date().toISOString()}`,
119
+ '',
120
+ '## Bolts',
121
+ '',
122
+ ];
123
+ for (const bolt of bolts) {
124
+ summaryLines.push(`### ${bolt.id}: ${bolt.title}`, '', `- **Sequence**: ${bolt.sequence}`, `- **Depth**: ${bolt.depth_target}`, `- **Express**: ${bolt.express_mode}`, `- **Effort**: ${bolt.estimated_effort_hours}h`, '');
125
+ }
126
+ await fs.writeFile(path.join(planDir, `${parentUnitId}-bolt-plan.md`), summaryLines.join('\n'), 'utf-8');
127
+ }
128
+ }
129
+ catch (error) {
130
+ throw new BoltPlannerError('ARTIFACT_WRITE_FAILURE', `Failed to write bolt artifacts: ${error instanceof Error ? error.message : String(error)}`);
131
+ }
132
+ }
133
+ function createInitialStageProgress() {
134
+ return {
135
+ status: 'not_started',
136
+ started_at: null,
137
+ completed_at: null,
138
+ failure_count: 0,
139
+ last_error: null,
140
+ artifact_path: null,
141
+ };
142
+ }
143
+ export function registerBoltsInCheckpoint(bolts, checkpoint) {
144
+ if (!checkpoint.construction_bolts) {
145
+ checkpoint.construction_bolts = {};
146
+ }
147
+ for (const bolt of bolts) {
148
+ const progress = {
149
+ bolt_id: bolt.id,
150
+ parent_unit_id: bolt.parent_unit_id,
151
+ status: 'planned',
152
+ stages: {
153
+ elaboration: createInitialStageProgress(),
154
+ code_generation: createInitialStageProgress(),
155
+ build_and_test: createInitialStageProgress(),
156
+ review: createInitialStageProgress(),
157
+ },
158
+ failure_count: 0,
159
+ last_error: null,
160
+ review_score: null,
161
+ acknowledged_by: null,
162
+ acknowledged_at: null,
163
+ };
164
+ checkpoint.construction_bolts[bolt.id] = progress;
165
+ }
166
+ }
167
+ const MAX_BOLTS_PER_UNIT = 8;
168
+ export function buildDecompositionPrompt(unit, intent, depth) {
169
+ const intentSummary = intent.length > 500 ? intent.substring(0, 500) + '...' : intent;
170
+ const acSection = 'acceptance_criteria' in unit && Array.isArray(unit.acceptance_criteria)
171
+ ? unit.acceptance_criteria.map((c) => `- ${c}`).join('\n')
172
+ : '(none provided)';
173
+ return [
174
+ 'You are decomposing a construction unit into sequential bolts (small executable work items).',
175
+ '',
176
+ `## Unit: ${unit.id}`,
177
+ `**Title**: ${unit.title}`,
178
+ `**Estimated effort**: ${unit.estimated_effort} hours`,
179
+ '',
180
+ '### Acceptance Criteria',
181
+ acSection,
182
+ '',
183
+ '### Intent Summary',
184
+ intentSummary,
185
+ '',
186
+ `### Depth Level: ${depth} (1-11 scale)`,
187
+ '',
188
+ '### Decomposition Rules',
189
+ `- Maximum ${MAX_BOLTS_PER_UNIT} bolts per unit`,
190
+ '- Each bolt must cover at least one acceptance criterion',
191
+ '- Bolts are executed sequentially',
192
+ '- Each bolt must specify target_files',
193
+ '- Achieve >= 95% acceptance criteria coverage across all bolts',
194
+ '',
195
+ '### Required Output Format',
196
+ 'Return a JSON array of bolt objects. Each object must have:',
197
+ '- `title` (string): Short descriptive name',
198
+ '- `scope` (string): What this bolt accomplishes',
199
+ '- `acceptance_criteria` (string[]): Verifiable outcomes (min 1)',
200
+ '- `target_files` (string[]): Relative file paths to modify/create',
201
+ '- `dependencies` (string[]): IDs of preceding bolts (or empty array)',
202
+ '- `estimated_effort_hours` (number): Estimated duration in hours',
203
+ '',
204
+ 'Return ONLY the JSON array, no other text.',
205
+ ].join('\n');
206
+ }
207
+ export function parseAgentResponse(response, unit, startIndex, depth) {
208
+ let rawBolts;
209
+ try {
210
+ const jsonMatch = response.match(/\[[\s\S]*\]/);
211
+ if (!jsonMatch) {
212
+ throw new Error('No JSON array found in response');
213
+ }
214
+ rawBolts = JSON.parse(jsonMatch[0]);
215
+ }
216
+ catch (error) {
217
+ throw new BoltPlannerError('AGENT_PARSE_FAILURE', `Failed to parse agent response as JSON array: ${error instanceof Error ? error.message : String(error)}`);
218
+ }
219
+ if (!Array.isArray(rawBolts)) {
220
+ throw new BoltPlannerError('AGENT_PARSE_FAILURE', 'Agent response parsed but is not an array');
221
+ }
222
+ const expressMode = depth <= 4;
223
+ const bolts = rawBolts.map((raw, i) => {
224
+ const globalIndex = startIndex + i;
225
+ const id = slugifyBoltName(raw.title || '', globalIndex);
226
+ return {
227
+ id,
228
+ type: 'bolt',
229
+ title: raw.title || 'Untitled Bolt',
230
+ parent_id: unit.id,
231
+ children_ids: [],
232
+ status: 'pending',
233
+ assigned_agent: null,
234
+ estimated_effort: raw.estimated_effort_hours || 0,
235
+ parent_unit_id: unit.id,
236
+ sequence: i + 1,
237
+ scope: raw.scope || '',
238
+ acceptance_criteria: raw.acceptance_criteria || [],
239
+ target_files: raw.target_files || [],
240
+ dependencies: raw.dependencies || [],
241
+ depth_target: depth,
242
+ express_mode: expressMode,
243
+ estimated_effort_hours: raw.estimated_effort_hours || 0,
244
+ };
245
+ });
246
+ const existingBoltsTotal = startIndex - 1;
247
+ for (let i = 0; i < bolts.length; i++) {
248
+ const context = {
249
+ existing_bolts_in_unit: i,
250
+ existing_bolts_total: existingBoltsTotal + i,
251
+ };
252
+ BoltSpecValidator.validate(bolts[i], context);
253
+ }
254
+ return bolts;
255
+ }
256
+ export async function planBoltsForUnit(unit, intent, depth, checkpoint, projectPath, workflowId) {
257
+ const startIndex = Object.keys(checkpoint.construction_bolts ?? {}).length + 1;
258
+ const prompt = buildDecompositionPrompt(unit, intent, depth);
259
+ void prompt;
260
+ void startIndex;
261
+ throw new BoltPlannerError('AGENT_PARSE_FAILURE', 'planBoltsForUnit is a coordination entry point. Use buildDecompositionPrompt + parseAgentResponse + writeBoltArtifacts + registerBoltsInCheckpoint individually.');
262
+ }
263
+ export async function finalizeBoltPlan(bolts, unit, checkpoint, projectPath, workflowId) {
264
+ const unitCriteria = 'acceptance_criteria' in unit && Array.isArray(unit.acceptance_criteria)
265
+ ? unit.acceptance_criteria
266
+ : [];
267
+ const coverage = validateBoltCoverage(unitCriteria, bolts);
268
+ if (!coverage.passed) {
269
+ throw new BoltPlannerError('COVERAGE_HARD_BLOCK', `Bolt coverage is ${coverage.coverage_percent}% (below 80% threshold). Uncovered: ${coverage.uncovered_criteria.join(', ')}`);
270
+ }
271
+ await writeBoltArtifacts(bolts, projectPath, workflowId);
272
+ registerBoltsInCheckpoint(bolts, checkpoint);
273
+ return { bolts, coverage };
274
+ }
275
+ export const BoltPlanner = {
276
+ buildDecompositionPrompt,
277
+ parseAgentResponse,
278
+ validateBoltCoverage,
279
+ writeBoltArtifacts,
280
+ registerBoltsInCheckpoint,
281
+ planBoltsForUnit,
282
+ finalizeBoltPlan,
283
+ };
284
+ //# sourceMappingURL=bolt-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bolt-planner.js","sourceRoot":"","sources":["../../../../src/features/workflow-engine/bolts/bolt-planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { BoltSpec, WorkflowCheckpointV3 } from '../phase-types.js';
2
+ export interface AgentReviewResult {
3
+ score: number;
4
+ feedback: string;
5
+ concerns: string[];
6
+ }
7
+ export interface EscalationEvent {
8
+ bolt_id: string;
9
+ failure_count: number;
10
+ last_errors: string[];
11
+ recommended_actions: ('re-scope' | 'split')[];
12
+ }
13
+ export interface ReviewDecision {
14
+ approved: boolean;
15
+ score: number;
16
+ tier: 'auto_approve' | 'advisory_ack' | 'hard_block';
17
+ feedback: string;
18
+ concerns: string[];
19
+ /** True only when tier is advisory_ack (trust < 2). Caller must surface acknowledgment prompt. */
20
+ requiresAcknowledgment: boolean;
21
+ escalation?: EscalationEvent;
22
+ artifact_path: string;
23
+ }
24
+ export declare function applyTierLogic(score: number): 'auto_approve' | 'advisory_ack' | 'hard_block';
25
+ export declare class BoltReviewer {
26
+ review(boltSpec: BoltSpec, codePaths: string[], projectPath: string, workflowId: string, checkpoint: WorkflowCheckpointV3, reviewCallback: (bolt: BoltSpec, codePaths: string[], projectPath: string) => Promise<AgentReviewResult>): Promise<ReviewDecision>;
27
+ writeReviewArtifact(boltId: string, reviewData: {
28
+ score: number;
29
+ tier: string;
30
+ approved: boolean;
31
+ feedback: string;
32
+ concerns: string[];
33
+ escalation?: EscalationEvent;
34
+ }, projectPath: string, workflowId: string): Promise<string>;
35
+ }
36
+ //# sourceMappingURL=bolt-reviewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bolt-reviewer.d.ts","sourceRoot":"","sources":["../../../../src/features/workflow-engine/bolts/bolt-reviewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAIxE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,mBAAmB,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,YAAY,CAAC;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kGAAkG;IAClG,sBAAsB,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,CAI5F;AAED,qBAAa,YAAY;IACjB,MAAM,CACV,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,oBAAoB,EAChC,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,GACvG,OAAO,CAAC,cAAc,CAAC;IAuDpB,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,CAAC,EAAE,eAAe,CAAC;KAC9B,EACD,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;CA2DnB"}
@@ -0,0 +1,108 @@
1
+ import fs from 'fs-extra';
2
+ import { join } from 'path';
3
+ import { loadTrustState } from '../trust.js';
4
+ import { saveCheckpoint } from '../checkpoint.js';
5
+ export function applyTierLogic(score) {
6
+ if (score >= 70)
7
+ return 'auto_approve';
8
+ if (score >= 50)
9
+ return 'advisory_ack';
10
+ return 'hard_block';
11
+ }
12
+ export class BoltReviewer {
13
+ async review(boltSpec, codePaths, projectPath, workflowId, checkpoint, reviewCallback) {
14
+ const result = await reviewCallback(boltSpec, codePaths, projectPath);
15
+ let tier = applyTierLogic(result.score);
16
+ const trustState = loadTrustState(projectPath);
17
+ if (trustState.current_level >= 2 && tier === 'advisory_ack') {
18
+ tier = 'auto_approve';
19
+ }
20
+ const approved = tier !== 'hard_block';
21
+ const requiresAcknowledgment = tier === 'advisory_ack';
22
+ let escalation;
23
+ const boltProgress = checkpoint.construction_bolts?.[boltSpec.id];
24
+ if (boltProgress) {
25
+ const reviewStage = boltProgress.stages.review;
26
+ if (reviewStage.failure_count >= 2) {
27
+ const lastErrors = [];
28
+ if (reviewStage.last_error) {
29
+ lastErrors.push(reviewStage.last_error);
30
+ }
31
+ escalation = {
32
+ bolt_id: boltSpec.id,
33
+ failure_count: reviewStage.failure_count,
34
+ last_errors: lastErrors,
35
+ recommended_actions: ['re-scope', 'split'],
36
+ };
37
+ }
38
+ }
39
+ const artifactPath = await this.writeReviewArtifact(boltSpec.id, { score: result.score, tier, approved, feedback: result.feedback, concerns: result.concerns, escalation }, projectPath, workflowId);
40
+ if (checkpoint.construction_bolts?.[boltSpec.id]) {
41
+ checkpoint.construction_bolts[boltSpec.id].review_score = result.score;
42
+ }
43
+ await saveCheckpoint(projectPath, checkpoint);
44
+ return {
45
+ approved,
46
+ score: result.score,
47
+ tier,
48
+ feedback: result.feedback,
49
+ concerns: result.concerns,
50
+ requiresAcknowledgment,
51
+ escalation,
52
+ artifact_path: artifactPath,
53
+ };
54
+ }
55
+ async writeReviewArtifact(boltId, reviewData, projectPath, workflowId) {
56
+ const relativePath = join('aidlc-docs', workflowId, 'construction', 'bolts', boltId, 'review.md');
57
+ const absolutePath = join(projectPath, relativePath);
58
+ const lines = [];
59
+ lines.push('---');
60
+ lines.push(`bolt_id: "${boltId}"`);
61
+ lines.push(`score: ${reviewData.score}`);
62
+ lines.push(`tier: "${reviewData.tier}"`);
63
+ lines.push(`approved: ${reviewData.approved}`);
64
+ lines.push(`reviewed_at: "${new Date().toISOString()}"`);
65
+ lines.push('---');
66
+ lines.push('');
67
+ lines.push('## Score');
68
+ lines.push('');
69
+ lines.push(`${reviewData.score}/100 (${reviewData.tier})`);
70
+ lines.push('');
71
+ lines.push('## Decision');
72
+ lines.push('');
73
+ if (reviewData.approved && reviewData.tier === 'auto_approve') {
74
+ lines.push('Approved — score meets auto-approve threshold.');
75
+ }
76
+ else if (reviewData.approved && reviewData.tier === 'advisory_ack') {
77
+ lines.push('Approved with advisory — acknowledgment required before proceeding.');
78
+ }
79
+ else {
80
+ lines.push('Blocked — score below minimum threshold. Review feedback and re-submit.');
81
+ }
82
+ lines.push('');
83
+ lines.push('## Feedback');
84
+ lines.push('');
85
+ lines.push(reviewData.feedback);
86
+ lines.push('');
87
+ if (reviewData.concerns.length > 0) {
88
+ lines.push('## Concerns');
89
+ lines.push('');
90
+ for (const concern of reviewData.concerns) {
91
+ lines.push(`- ${concern}`);
92
+ }
93
+ lines.push('');
94
+ }
95
+ if (reviewData.escalation) {
96
+ lines.push('## Recommended Actions');
97
+ lines.push('');
98
+ for (const action of reviewData.escalation.recommended_actions) {
99
+ lines.push(`- ${action}`);
100
+ }
101
+ lines.push('');
102
+ }
103
+ await fs.ensureDir(join(absolutePath, '..'));
104
+ await fs.writeFile(absolutePath, lines.join('\n'), 'utf-8');
105
+ return relativePath;
106
+ }
107
+ }
108
+ //# sourceMappingURL=bolt-reviewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bolt-reviewer.js","sourceRoot":"","sources":["../../../../src/features/workflow-engine/bolts/bolt-reviewer.ts"],"names":[],"mappings":"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"}