popeye-cli 1.10.0 → 2.0.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.
Files changed (253) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/CONTRIBUTING.md +15 -1
  3. package/README.md +57 -0
  4. package/dist/pipeline/artifact-manager.d.ts +47 -0
  5. package/dist/pipeline/artifact-manager.d.ts.map +1 -0
  6. package/dist/pipeline/artifact-manager.js +251 -0
  7. package/dist/pipeline/artifact-manager.js.map +1 -0
  8. package/dist/pipeline/artifact-validators.d.ts +29 -0
  9. package/dist/pipeline/artifact-validators.d.ts.map +1 -0
  10. package/dist/pipeline/artifact-validators.js +173 -0
  11. package/dist/pipeline/artifact-validators.js.map +1 -0
  12. package/dist/pipeline/change-request.d.ts +47 -0
  13. package/dist/pipeline/change-request.d.ts.map +1 -0
  14. package/dist/pipeline/change-request.js +91 -0
  15. package/dist/pipeline/change-request.js.map +1 -0
  16. package/dist/pipeline/check-runner.d.ts +47 -0
  17. package/dist/pipeline/check-runner.d.ts.map +1 -0
  18. package/dist/pipeline/check-runner.js +417 -0
  19. package/dist/pipeline/check-runner.js.map +1 -0
  20. package/dist/pipeline/command-resolver.d.ts +9 -0
  21. package/dist/pipeline/command-resolver.d.ts.map +1 -0
  22. package/dist/pipeline/command-resolver.js +140 -0
  23. package/dist/pipeline/command-resolver.js.map +1 -0
  24. package/dist/pipeline/consensus/consensus-runner.d.ts +44 -0
  25. package/dist/pipeline/consensus/consensus-runner.d.ts.map +1 -0
  26. package/dist/pipeline/consensus/consensus-runner.js +212 -0
  27. package/dist/pipeline/consensus/consensus-runner.js.map +1 -0
  28. package/dist/pipeline/constitution.d.ts +45 -0
  29. package/dist/pipeline/constitution.d.ts.map +1 -0
  30. package/dist/pipeline/constitution.js +82 -0
  31. package/dist/pipeline/constitution.js.map +1 -0
  32. package/dist/pipeline/gate-engine.d.ts +55 -0
  33. package/dist/pipeline/gate-engine.d.ts.map +1 -0
  34. package/dist/pipeline/gate-engine.js +270 -0
  35. package/dist/pipeline/gate-engine.js.map +1 -0
  36. package/dist/pipeline/index.d.ts +26 -0
  37. package/dist/pipeline/index.d.ts.map +1 -0
  38. package/dist/pipeline/index.js +35 -0
  39. package/dist/pipeline/index.js.map +1 -0
  40. package/dist/pipeline/migration.d.ts +15 -0
  41. package/dist/pipeline/migration.d.ts.map +1 -0
  42. package/dist/pipeline/migration.js +76 -0
  43. package/dist/pipeline/migration.js.map +1 -0
  44. package/dist/pipeline/orchestrator.d.ts +28 -0
  45. package/dist/pipeline/orchestrator.d.ts.map +1 -0
  46. package/dist/pipeline/orchestrator.js +238 -0
  47. package/dist/pipeline/orchestrator.js.map +1 -0
  48. package/dist/pipeline/packets/audit-report-builder.d.ts +11 -0
  49. package/dist/pipeline/packets/audit-report-builder.d.ts.map +1 -0
  50. package/dist/pipeline/packets/audit-report-builder.js +32 -0
  51. package/dist/pipeline/packets/audit-report-builder.js.map +1 -0
  52. package/dist/pipeline/packets/consensus-packet-builder.d.ts +35 -0
  53. package/dist/pipeline/packets/consensus-packet-builder.d.ts.map +1 -0
  54. package/dist/pipeline/packets/consensus-packet-builder.js +80 -0
  55. package/dist/pipeline/packets/consensus-packet-builder.js.map +1 -0
  56. package/dist/pipeline/packets/index.d.ts +12 -0
  57. package/dist/pipeline/packets/index.d.ts.map +1 -0
  58. package/dist/pipeline/packets/index.js +8 -0
  59. package/dist/pipeline/packets/index.js.map +1 -0
  60. package/dist/pipeline/packets/plan-packet-builder.d.ts +21 -0
  61. package/dist/pipeline/packets/plan-packet-builder.d.ts.map +1 -0
  62. package/dist/pipeline/packets/plan-packet-builder.js +27 -0
  63. package/dist/pipeline/packets/plan-packet-builder.js.map +1 -0
  64. package/dist/pipeline/packets/rca-packet-builder.d.ts +19 -0
  65. package/dist/pipeline/packets/rca-packet-builder.d.ts.map +1 -0
  66. package/dist/pipeline/packets/rca-packet-builder.js +22 -0
  67. package/dist/pipeline/packets/rca-packet-builder.js.map +1 -0
  68. package/dist/pipeline/phases/architecture.d.ts +7 -0
  69. package/dist/pipeline/phases/architecture.d.ts.map +1 -0
  70. package/dist/pipeline/phases/architecture.js +60 -0
  71. package/dist/pipeline/phases/architecture.js.map +1 -0
  72. package/dist/pipeline/phases/audit.d.ts +8 -0
  73. package/dist/pipeline/phases/audit.d.ts.map +1 -0
  74. package/dist/pipeline/phases/audit.js +144 -0
  75. package/dist/pipeline/phases/audit.js.map +1 -0
  76. package/dist/pipeline/phases/consensus-architecture.d.ts +7 -0
  77. package/dist/pipeline/phases/consensus-architecture.d.ts.map +1 -0
  78. package/dist/pipeline/phases/consensus-architecture.js +84 -0
  79. package/dist/pipeline/phases/consensus-architecture.js.map +1 -0
  80. package/dist/pipeline/phases/consensus-master-plan.d.ts +7 -0
  81. package/dist/pipeline/phases/consensus-master-plan.d.ts.map +1 -0
  82. package/dist/pipeline/phases/consensus-master-plan.js +81 -0
  83. package/dist/pipeline/phases/consensus-master-plan.js.map +1 -0
  84. package/dist/pipeline/phases/consensus-role-plans.d.ts +7 -0
  85. package/dist/pipeline/phases/consensus-role-plans.d.ts.map +1 -0
  86. package/dist/pipeline/phases/consensus-role-plans.js +85 -0
  87. package/dist/pipeline/phases/consensus-role-plans.js.map +1 -0
  88. package/dist/pipeline/phases/done.d.ts +7 -0
  89. package/dist/pipeline/phases/done.d.ts.map +1 -0
  90. package/dist/pipeline/phases/done.js +45 -0
  91. package/dist/pipeline/phases/done.js.map +1 -0
  92. package/dist/pipeline/phases/implementation.d.ts +8 -0
  93. package/dist/pipeline/phases/implementation.d.ts.map +1 -0
  94. package/dist/pipeline/phases/implementation.js +42 -0
  95. package/dist/pipeline/phases/implementation.js.map +1 -0
  96. package/dist/pipeline/phases/index.d.ts +20 -0
  97. package/dist/pipeline/phases/index.d.ts.map +1 -0
  98. package/dist/pipeline/phases/index.js +19 -0
  99. package/dist/pipeline/phases/index.js.map +1 -0
  100. package/dist/pipeline/phases/intake.d.ts +8 -0
  101. package/dist/pipeline/phases/intake.d.ts.map +1 -0
  102. package/dist/pipeline/phases/intake.js +40 -0
  103. package/dist/pipeline/phases/intake.js.map +1 -0
  104. package/dist/pipeline/phases/phase-context.d.ts +30 -0
  105. package/dist/pipeline/phases/phase-context.d.ts.map +1 -0
  106. package/dist/pipeline/phases/phase-context.js +33 -0
  107. package/dist/pipeline/phases/phase-context.js.map +1 -0
  108. package/dist/pipeline/phases/production-gate.d.ts +8 -0
  109. package/dist/pipeline/phases/production-gate.d.ts.map +1 -0
  110. package/dist/pipeline/phases/production-gate.js +84 -0
  111. package/dist/pipeline/phases/production-gate.js.map +1 -0
  112. package/dist/pipeline/phases/qa-validation.d.ts +7 -0
  113. package/dist/pipeline/phases/qa-validation.d.ts.map +1 -0
  114. package/dist/pipeline/phases/qa-validation.js +50 -0
  115. package/dist/pipeline/phases/qa-validation.js.map +1 -0
  116. package/dist/pipeline/phases/recovery-loop.d.ts +7 -0
  117. package/dist/pipeline/phases/recovery-loop.d.ts.map +1 -0
  118. package/dist/pipeline/phases/recovery-loop.js +91 -0
  119. package/dist/pipeline/phases/recovery-loop.js.map +1 -0
  120. package/dist/pipeline/phases/review.d.ts +8 -0
  121. package/dist/pipeline/phases/review.d.ts.map +1 -0
  122. package/dist/pipeline/phases/review.js +127 -0
  123. package/dist/pipeline/phases/review.js.map +1 -0
  124. package/dist/pipeline/phases/role-planning.d.ts +7 -0
  125. package/dist/pipeline/phases/role-planning.d.ts.map +1 -0
  126. package/dist/pipeline/phases/role-planning.js +75 -0
  127. package/dist/pipeline/phases/role-planning.js.map +1 -0
  128. package/dist/pipeline/phases/stuck.d.ts +7 -0
  129. package/dist/pipeline/phases/stuck.d.ts.map +1 -0
  130. package/dist/pipeline/phases/stuck.js +51 -0
  131. package/dist/pipeline/phases/stuck.js.map +1 -0
  132. package/dist/pipeline/repo-snapshot.d.ts +24 -0
  133. package/dist/pipeline/repo-snapshot.d.ts.map +1 -0
  134. package/dist/pipeline/repo-snapshot.js +343 -0
  135. package/dist/pipeline/repo-snapshot.js.map +1 -0
  136. package/dist/pipeline/role-execution-adapter.d.ts +59 -0
  137. package/dist/pipeline/role-execution-adapter.d.ts.map +1 -0
  138. package/dist/pipeline/role-execution-adapter.js +159 -0
  139. package/dist/pipeline/role-execution-adapter.js.map +1 -0
  140. package/dist/pipeline/skill-loader.d.ts +34 -0
  141. package/dist/pipeline/skill-loader.d.ts.map +1 -0
  142. package/dist/pipeline/skill-loader.js +156 -0
  143. package/dist/pipeline/skill-loader.js.map +1 -0
  144. package/dist/pipeline/skills/defaults.d.ts +16 -0
  145. package/dist/pipeline/skills/defaults.d.ts.map +1 -0
  146. package/dist/pipeline/skills/defaults.js +189 -0
  147. package/dist/pipeline/skills/defaults.js.map +1 -0
  148. package/dist/pipeline/type-defs/artifacts.d.ts +202 -0
  149. package/dist/pipeline/type-defs/artifacts.d.ts.map +1 -0
  150. package/dist/pipeline/type-defs/artifacts.js +66 -0
  151. package/dist/pipeline/type-defs/artifacts.js.map +1 -0
  152. package/dist/pipeline/type-defs/audit.d.ts +256 -0
  153. package/dist/pipeline/type-defs/audit.d.ts.map +1 -0
  154. package/dist/pipeline/type-defs/audit.js +54 -0
  155. package/dist/pipeline/type-defs/audit.js.map +1 -0
  156. package/dist/pipeline/type-defs/checks.d.ts +81 -0
  157. package/dist/pipeline/type-defs/checks.d.ts.map +1 -0
  158. package/dist/pipeline/type-defs/checks.js +38 -0
  159. package/dist/pipeline/type-defs/checks.js.map +1 -0
  160. package/dist/pipeline/type-defs/enums.d.ts +43 -0
  161. package/dist/pipeline/type-defs/enums.d.ts.map +1 -0
  162. package/dist/pipeline/type-defs/enums.js +55 -0
  163. package/dist/pipeline/type-defs/enums.js.map +1 -0
  164. package/dist/pipeline/type-defs/index.d.ts +12 -0
  165. package/dist/pipeline/type-defs/index.d.ts.map +1 -0
  166. package/dist/pipeline/type-defs/index.js +12 -0
  167. package/dist/pipeline/type-defs/index.js.map +1 -0
  168. package/dist/pipeline/type-defs/packets.d.ts +806 -0
  169. package/dist/pipeline/type-defs/packets.d.ts.map +1 -0
  170. package/dist/pipeline/type-defs/packets.js +109 -0
  171. package/dist/pipeline/type-defs/packets.js.map +1 -0
  172. package/dist/pipeline/type-defs/snapshot.d.ts +52 -0
  173. package/dist/pipeline/type-defs/snapshot.d.ts.map +1 -0
  174. package/dist/pipeline/type-defs/snapshot.js +35 -0
  175. package/dist/pipeline/type-defs/snapshot.js.map +1 -0
  176. package/dist/pipeline/type-defs/state.d.ts +449 -0
  177. package/dist/pipeline/type-defs/state.d.ts.map +1 -0
  178. package/dist/pipeline/type-defs/state.js +88 -0
  179. package/dist/pipeline/type-defs/state.js.map +1 -0
  180. package/dist/pipeline/types.d.ts +16 -0
  181. package/dist/pipeline/types.d.ts.map +1 -0
  182. package/dist/pipeline/types.js +16 -0
  183. package/dist/pipeline/types.js.map +1 -0
  184. package/dist/types/audit.d.ts +6 -6
  185. package/dist/workflow/index.d.ts.map +1 -1
  186. package/dist/workflow/index.js +48 -0
  187. package/dist/workflow/index.js.map +1 -1
  188. package/package.json +1 -1
  189. package/skills/PHASE_GATE_ENGINE_SPEC.md +113 -20
  190. package/skills/POPEYE_FULL_AUTONOMY_PIPELINE.md +66 -13
  191. package/src/pipeline/artifact-manager.ts +339 -0
  192. package/src/pipeline/artifact-validators.ts +224 -0
  193. package/src/pipeline/change-request.ts +119 -0
  194. package/src/pipeline/check-runner.ts +504 -0
  195. package/src/pipeline/command-resolver.ts +168 -0
  196. package/src/pipeline/consensus/consensus-runner.ts +317 -0
  197. package/src/pipeline/constitution.ts +109 -0
  198. package/src/pipeline/gate-engine.ts +347 -0
  199. package/src/pipeline/index.ts +82 -0
  200. package/src/pipeline/migration.ts +91 -0
  201. package/src/pipeline/orchestrator.ts +314 -0
  202. package/src/pipeline/packets/audit-report-builder.ts +47 -0
  203. package/src/pipeline/packets/consensus-packet-builder.ts +112 -0
  204. package/src/pipeline/packets/index.ts +15 -0
  205. package/src/pipeline/packets/plan-packet-builder.ts +52 -0
  206. package/src/pipeline/packets/rca-packet-builder.ts +38 -0
  207. package/src/pipeline/phases/architecture.ts +73 -0
  208. package/src/pipeline/phases/audit.ts +193 -0
  209. package/src/pipeline/phases/consensus-architecture.ts +104 -0
  210. package/src/pipeline/phases/consensus-master-plan.ts +100 -0
  211. package/src/pipeline/phases/consensus-role-plans.ts +105 -0
  212. package/src/pipeline/phases/done.ts +68 -0
  213. package/src/pipeline/phases/implementation.ts +48 -0
  214. package/src/pipeline/phases/index.ts +21 -0
  215. package/src/pipeline/phases/intake.ts +54 -0
  216. package/src/pipeline/phases/phase-context.ts +86 -0
  217. package/src/pipeline/phases/production-gate.ts +113 -0
  218. package/src/pipeline/phases/qa-validation.ts +63 -0
  219. package/src/pipeline/phases/recovery-loop.ts +118 -0
  220. package/src/pipeline/phases/review.ts +149 -0
  221. package/src/pipeline/phases/role-planning.ts +92 -0
  222. package/src/pipeline/phases/stuck.ts +62 -0
  223. package/src/pipeline/repo-snapshot.ts +395 -0
  224. package/src/pipeline/role-execution-adapter.ts +238 -0
  225. package/src/pipeline/skill-loader.ts +192 -0
  226. package/src/pipeline/skills/defaults.ts +215 -0
  227. package/src/pipeline/type-defs/artifacts.ts +81 -0
  228. package/src/pipeline/type-defs/audit.ts +67 -0
  229. package/src/pipeline/type-defs/checks.ts +47 -0
  230. package/src/pipeline/type-defs/enums.ts +62 -0
  231. package/src/pipeline/type-defs/index.ts +12 -0
  232. package/src/pipeline/type-defs/packets.ts +131 -0
  233. package/src/pipeline/type-defs/snapshot.ts +55 -0
  234. package/src/pipeline/type-defs/state.ts +165 -0
  235. package/src/pipeline/types.ts +16 -0
  236. package/src/workflow/index.ts +48 -0
  237. package/tests/pipeline/artifact-manager.test.ts +183 -0
  238. package/tests/pipeline/artifact-validators.test.ts +207 -0
  239. package/tests/pipeline/change-request.test.ts +180 -0
  240. package/tests/pipeline/check-runner.test.ts +157 -0
  241. package/tests/pipeline/command-resolver.test.ts +159 -0
  242. package/tests/pipeline/consensus-runner.test.ts +206 -0
  243. package/tests/pipeline/consensus-scoring.test.ts +163 -0
  244. package/tests/pipeline/constitution.test.ts +122 -0
  245. package/tests/pipeline/gate-engine.test.ts +195 -0
  246. package/tests/pipeline/migration.test.ts +133 -0
  247. package/tests/pipeline/orchestrator.test.ts +614 -0
  248. package/tests/pipeline/packets/builders.test.ts +347 -0
  249. package/tests/pipeline/repo-snapshot.test.ts +189 -0
  250. package/tests/pipeline/role-execution-adapter.test.ts +299 -0
  251. package/tests/pipeline/skill-loader.test.ts +186 -0
  252. package/tests/pipeline/start-env-checks.test.ts +123 -0
  253. package/tests/pipeline/types.test.ts +156 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/pipeline/phases/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * ROLE_PLANNING phase — produce deterministic implementation plans by role.
3
+ * Runs per-role: DB, BE, FE, Website, QA. Creates role_plan artifacts.
4
+ */
5
+ import type { PhaseContext, PhaseResult } from './phase-context.js';
6
+ export declare function runRolePlanning(context: PhaseContext): Promise<PhaseResult>;
7
+ //# sourceMappingURL=role-planning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-planning.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/role-planning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAYpE,wBAAsB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAsEjF"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * ROLE_PLANNING phase — produce deterministic implementation plans by role.
3
+ * Runs per-role: DB, BE, FE, Website, QA. Creates role_plan artifacts.
4
+ */
5
+ import { existsSync, readFileSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { successResult, failureResult } from './phase-context.js';
8
+ /** Roles that produce implementation plans */
9
+ const PLANNING_ROLES = [
10
+ 'DB_EXPERT',
11
+ 'BACKEND_PROGRAMMER',
12
+ 'FRONTEND_PROGRAMMER',
13
+ 'WEBSITE_PROGRAMMER',
14
+ 'QA_TESTER',
15
+ ];
16
+ export async function runRolePlanning(context) {
17
+ const { pipeline, artifactManager, skillLoader, projectDir } = context;
18
+ const artifacts = [];
19
+ try {
20
+ // Read architecture doc for context
21
+ const archArtifact = pipeline.artifacts.find((a) => a.type === 'architecture');
22
+ let architectureContent = '';
23
+ if (archArtifact) {
24
+ const fullPath = join(projectDir, archArtifact.path);
25
+ if (existsSync(fullPath)) {
26
+ architectureContent = readFileSync(fullPath, 'utf-8');
27
+ }
28
+ }
29
+ // Read master plan for context
30
+ const masterPlanArtifact = pipeline.artifacts.find((a) => a.type === 'master_plan');
31
+ let masterPlanContent = '';
32
+ if (masterPlanArtifact) {
33
+ const fullPath = join(projectDir, masterPlanArtifact.path);
34
+ if (existsSync(fullPath)) {
35
+ masterPlanContent = readFileSync(fullPath, 'utf-8');
36
+ }
37
+ }
38
+ const { executePrompt } = await import('../../adapters/claude.js');
39
+ // Generate plan for each role
40
+ for (const role of PLANNING_ROLES) {
41
+ // Skip website if not in active roles
42
+ if (role === 'WEBSITE_PROGRAMMER' && !pipeline.activeRoles.includes('WEBSITE_PROGRAMMER')) {
43
+ continue;
44
+ }
45
+ const skill = skillLoader.loadSkill(role);
46
+ const planPrompt = [
47
+ skill.systemPrompt,
48
+ '',
49
+ '## Master Plan',
50
+ masterPlanContent.slice(0, 5000),
51
+ '',
52
+ '## Architecture',
53
+ architectureContent.slice(0, 5000),
54
+ '',
55
+ '## Instructions',
56
+ `Create your ${role} implementation plan. Include:`,
57
+ '- Deterministic file-level outputs',
58
+ '- Specific tasks with acceptance criteria',
59
+ '- Dependencies on other roles',
60
+ '- Test requirements',
61
+ ].join('\n');
62
+ const planResult = await executePrompt(planPrompt);
63
+ const plan = planResult.response;
64
+ const entry = artifactManager.createAndStoreText('role_plan', `# ${role} Plan\n\n${plan}`, 'ROLE_PLANNING');
65
+ artifacts.push(entry);
66
+ }
67
+ pipeline.artifacts.push(...artifacts);
68
+ return successResult('ROLE_PLANNING', artifacts, `Created ${artifacts.length} role plans`);
69
+ }
70
+ catch (err) {
71
+ const message = err instanceof Error ? err.message : 'Unknown error';
72
+ return failureResult('ROLE_PLANNING', 'Role planning failed', message);
73
+ }
74
+ }
75
+ //# sourceMappingURL=role-planning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-planning.js","sourceRoot":"","sources":["../../../src/pipeline/phases/role-planning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * STUCK phase — safety valve when max recovery iterations exceeded.
3
+ * Produces stuck report with last RCA, suspected paths, required human input.
4
+ */
5
+ import type { PhaseContext, PhaseResult } from './phase-context.js';
6
+ export declare function runStuck(context: PhaseContext): Promise<PhaseResult>;
7
+ //# sourceMappingURL=stuck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stuck.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/stuck.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGpE,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAqD1E"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * STUCK phase — safety valve when max recovery iterations exceeded.
3
+ * Produces stuck report with last RCA, suspected paths, required human input.
4
+ */
5
+ import { successResult, failureResult } from './phase-context.js';
6
+ export async function runStuck(context) {
7
+ const { pipeline, artifactManager } = context;
8
+ const artifacts = [];
9
+ try {
10
+ // Find last RCA
11
+ const lastRca = pipeline.artifacts
12
+ .filter((a) => a.type === 'rca_report')
13
+ .sort((a, b) => b.timestamp.localeCompare(a.timestamp))[0];
14
+ const stuckReport = [
15
+ '# Stuck Report',
16
+ '',
17
+ `**Timestamp:** ${new Date().toISOString()}`,
18
+ `**Recovery Iterations:** ${pipeline.recoveryCount} / ${pipeline.maxRecoveryIterations}`,
19
+ `**Failed Phase:** ${pipeline.failedPhase ?? 'unknown'}`,
20
+ '',
21
+ '## Last RCA',
22
+ lastRca ? `See: ${lastRca.path}` : 'No RCA available',
23
+ '',
24
+ '## Suspected Resolution Paths',
25
+ '1. Review the last RCA report for root cause details',
26
+ '2. Check the failing gate conditions and resolve blockers manually',
27
+ '3. Consider reverting to a known good state and re-running',
28
+ '',
29
+ '## Required Human Input',
30
+ '- Review failing gate conditions',
31
+ '- Determine if scope changes are needed',
32
+ '- Decide whether to restart pipeline from a specific phase',
33
+ '',
34
+ '## Artifacts That May Need Update',
35
+ ...pipeline.artifacts
36
+ .filter((a) => a.phase === pipeline.failedPhase)
37
+ .map((a) => `- ${a.type}: ${a.path}`),
38
+ ].join('\n');
39
+ const stuckEntry = artifactManager.createAndStoreText('stuck_report', stuckReport, 'STUCK');
40
+ artifacts.push(stuckEntry);
41
+ pipeline.artifacts.push(...artifacts);
42
+ // Update INDEX
43
+ artifactManager.updateIndex(pipeline.artifacts);
44
+ return successResult('STUCK', artifacts, 'Pipeline STUCK. Human intervention required.');
45
+ }
46
+ catch (err) {
47
+ const message = err instanceof Error ? err.message : 'Unknown error';
48
+ return failureResult('STUCK', 'Stuck report generation failed', message);
49
+ }
50
+ }
51
+ //# sourceMappingURL=stuck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stuck.js","sourceRoot":"","sources":["../../../src/pipeline/phases/stuck.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB;IAClD,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAC9C,MAAM,SAAS,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC;QACH,gBAAgB;QAChB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;aACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG;YAClB,gBAAgB;YAChB,EAAE;YACF,kBAAkB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;YAC5C,4BAA4B,QAAQ,CAAC,aAAa,MAAM,QAAQ,CAAC,qBAAqB,EAAE;YACxF,qBAAqB,QAAQ,CAAC,WAAW,IAAI,SAAS,EAAE;YACxD,EAAE;YACF,aAAa;YACb,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB;YACrD,EAAE;YACF,+BAA+B;YAC/B,sDAAsD;YACtD,oEAAoE;YACpE,4DAA4D;YAC5D,EAAE;YACF,yBAAyB;YACzB,kCAAkC;YAClC,yCAAyC;YACzC,4DAA4D;YAC5D,EAAE;YACF,mCAAmC;YACnC,GAAG,QAAQ,CAAC,SAAS;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,WAAW,CAAC;iBAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;SACxC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,CACnD,cAAc,EACd,WAAW,EACX,OAAO,CACR,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3B,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAEtC,eAAe;QACf,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEhD,OAAO,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,8CAA8C,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACrE,OAAO,aAAa,CAAC,OAAO,EAAE,gCAAgC,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Repo Snapshot Generator — deterministic project state capture.
3
+ * Generated before every consensus gate for anti-hallucination.
4
+ * Supports caching via mtime for performance (P2-H).
5
+ */
6
+ import type { RepoSnapshot } from './types.js';
7
+ import type { ArtifactEntry } from './types.js';
8
+ import { ArtifactManager } from './artifact-manager.js';
9
+ import type { PipelinePhase } from './types.js';
10
+ /** Generate a deterministic snapshot of the project */
11
+ export declare function generateRepoSnapshot(projectDir: string): Promise<RepoSnapshot>;
12
+ /** Store snapshot as an artifact */
13
+ export declare function createSnapshotArtifact(snapshot: RepoSnapshot, artifactManager: ArtifactManager, phase: PipelinePhase): ArtifactEntry;
14
+ /** Compare two snapshots to detect drift */
15
+ export declare function diffSnapshots(before: RepoSnapshot, after: RepoSnapshot): SnapshotDiff;
16
+ export interface SnapshotDiff {
17
+ added_configs: string[];
18
+ removed_configs: string[];
19
+ changed_configs: string[];
20
+ files_delta: number;
21
+ lines_delta: number;
22
+ has_changes: boolean;
23
+ }
24
+ //# sourceMappingURL=repo-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-snapshot.d.ts","sourceRoot":"","sources":["../../src/pipeline/repo-snapshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyDhD,uDAAuD;AACvD,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAoCpF;AAED,oCAAoC;AACpC,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,YAAY,EACtB,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,aAAa,GACnB,aAAa,CAEf;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,GAClB,YAAY,CAsBd;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB"}
@@ -0,0 +1,343 @@
1
+ /**
2
+ * Repo Snapshot Generator — deterministic project state capture.
3
+ * Generated before every consensus gate for anti-hallucination.
4
+ * Supports caching via mtime for performance (P2-H).
5
+ */
6
+ import { createHash } from 'node:crypto';
7
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
8
+ import { join, extname } from 'node:path';
9
+ // ─── Constants ───────────────────────────────────────────
10
+ const EXCLUDE_DIRS = new Set([
11
+ 'node_modules', '.git', 'dist', '__pycache__', '.next',
12
+ '.nuxt', 'build', 'coverage', '.turbo', '.cache',
13
+ '.venv', 'venv', 'env',
14
+ ]);
15
+ const CONFIG_FILES = new Set([
16
+ 'package.json', 'pyproject.toml', 'docker-compose.yml',
17
+ 'docker-compose.yaml', 'Dockerfile', 'tsconfig.json',
18
+ 'vite.config.ts', 'vite.config.js', 'next.config.js',
19
+ 'next.config.mjs', 'next.config.ts', 'webpack.config.js',
20
+ 'tailwind.config.ts', 'tailwind.config.js',
21
+ 'jest.config.ts', 'jest.config.js', 'vitest.config.ts',
22
+ 'vitest.config.js', '.eslintrc.js', '.eslintrc.json',
23
+ 'eslint.config.js', 'eslint.config.mjs',
24
+ 'prisma/schema.prisma', 'alembic.ini',
25
+ 'requirements.txt', 'setup.py', 'setup.cfg',
26
+ 'Makefile', 'Procfile',
27
+ ]);
28
+ const CODE_EXTENSIONS = new Set([
29
+ '.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs',
30
+ '.java', '.rb', '.php', '.vue', '.svelte', '.astro',
31
+ '.css', '.scss', '.html', '.sql', '.prisma',
32
+ ]);
33
+ const lineCache = new Map();
34
+ function countLinesWithCache(filePath) {
35
+ try {
36
+ const stat = statSync(filePath);
37
+ const cached = lineCache.get(filePath);
38
+ if (cached && cached.mtime === stat.mtimeMs) {
39
+ return cached.lines;
40
+ }
41
+ const content = readFileSync(filePath, 'utf-8');
42
+ const lines = content.split('\n').length;
43
+ lineCache.set(filePath, { mtime: stat.mtimeMs, lines });
44
+ return lines;
45
+ }
46
+ catch {
47
+ return 0;
48
+ }
49
+ }
50
+ // ─── Snapshot Generation ─────────────────────────────────
51
+ /** Generate a deterministic snapshot of the project */
52
+ export async function generateRepoSnapshot(projectDir) {
53
+ const snapshotId = createHash('sha256')
54
+ .update(`${projectDir}-${Date.now()}`)
55
+ .digest('hex')
56
+ .slice(0, 16);
57
+ const treeSummary = buildTreeSummary(projectDir, '', 3);
58
+ const configFiles = scanConfigFiles(projectDir);
59
+ const languagesDetected = detectLanguages(projectDir);
60
+ const envFiles = findEnvFiles(projectDir);
61
+ const migrationsPresent = detectMigrations(projectDir);
62
+ const portsEntrypoints = detectPorts(configFiles);
63
+ const { totalFiles, totalLines } = countFilesAndLines(projectDir);
64
+ // Extract key info from config files
65
+ const packageManager = detectPackageManager(projectDir, configFiles);
66
+ const scripts = extractScripts(configFiles);
67
+ const testFramework = detectTestFramework(configFiles, scripts);
68
+ const buildTool = detectBuildTool(configFiles, scripts);
69
+ return {
70
+ snapshot_id: snapshotId,
71
+ timestamp: new Date().toISOString(),
72
+ tree_summary: treeSummary,
73
+ config_files: configFiles,
74
+ languages_detected: languagesDetected,
75
+ package_manager: packageManager,
76
+ scripts,
77
+ test_framework: testFramework,
78
+ build_tool: buildTool,
79
+ env_files: envFiles,
80
+ migrations_present: migrationsPresent,
81
+ ports_entrypoints: portsEntrypoints,
82
+ total_files: totalFiles,
83
+ total_lines: totalLines,
84
+ };
85
+ }
86
+ /** Store snapshot as an artifact */
87
+ export function createSnapshotArtifact(snapshot, artifactManager, phase) {
88
+ return artifactManager.createAndStoreJson('repo_snapshot', snapshot, phase);
89
+ }
90
+ /** Compare two snapshots to detect drift */
91
+ export function diffSnapshots(before, after) {
92
+ const addedConfigs = after.config_files
93
+ .filter((c) => !before.config_files.some((b) => b.path === c.path));
94
+ const removedConfigs = before.config_files
95
+ .filter((c) => !after.config_files.some((a) => a.path === c.path));
96
+ const changedConfigs = after.config_files.filter((ac) => {
97
+ const bc = before.config_files.find((b) => b.path === ac.path);
98
+ return bc && bc.content_hash !== ac.content_hash;
99
+ });
100
+ const filesChanged = after.total_files !== before.total_files;
101
+ const linesChanged = after.total_lines !== before.total_lines;
102
+ return {
103
+ added_configs: addedConfigs.map((c) => c.path),
104
+ removed_configs: removedConfigs.map((c) => c.path),
105
+ changed_configs: changedConfigs.map((c) => c.path),
106
+ files_delta: after.total_files - before.total_files,
107
+ lines_delta: after.total_lines - before.total_lines,
108
+ has_changes: filesChanged || linesChanged || changedConfigs.length > 0
109
+ || addedConfigs.length > 0 || removedConfigs.length > 0,
110
+ };
111
+ }
112
+ // ─── Internal Helpers ────────────────────────────────────
113
+ function buildTreeSummary(dir, prefix, maxDepth) {
114
+ if (maxDepth <= 0)
115
+ return '';
116
+ const lines = [];
117
+ try {
118
+ const entries = readdirSync(dir, { withFileTypes: true })
119
+ .filter((e) => !EXCLUDE_DIRS.has(e.name) && !e.name.startsWith('.'));
120
+ for (const entry of entries.slice(0, 50)) {
121
+ const marker = entry.isDirectory() ? '/' : '';
122
+ lines.push(`${prefix}${entry.name}${marker}`);
123
+ if (entry.isDirectory() && maxDepth > 1) {
124
+ const sub = buildTreeSummary(join(dir, entry.name), prefix + ' ', maxDepth - 1);
125
+ if (sub)
126
+ lines.push(sub);
127
+ }
128
+ }
129
+ if (entries.length > 50) {
130
+ lines.push(`${prefix}... (+${entries.length - 50} more)`);
131
+ }
132
+ }
133
+ catch {
134
+ // Directory unreadable
135
+ }
136
+ return lines.join('\n');
137
+ }
138
+ function scanConfigFiles(projectDir) {
139
+ const configs = [];
140
+ for (const configName of CONFIG_FILES) {
141
+ const fullPath = join(projectDir, configName);
142
+ if (!existsSync(fullPath))
143
+ continue;
144
+ try {
145
+ const content = readFileSync(fullPath, 'utf-8');
146
+ const contentHash = createHash('sha256').update(content).digest('hex').slice(0, 16);
147
+ const keyFields = extractKeyFields(configName, content);
148
+ configs.push({
149
+ path: configName,
150
+ type: configName,
151
+ content_hash: contentHash,
152
+ key_fields: keyFields,
153
+ });
154
+ }
155
+ catch {
156
+ // Skip unreadable config files
157
+ }
158
+ }
159
+ return configs;
160
+ }
161
+ function extractKeyFields(configName, content) {
162
+ try {
163
+ if (configName === 'package.json') {
164
+ const pkg = JSON.parse(content);
165
+ return {
166
+ name: pkg.name,
167
+ version: pkg.version,
168
+ scripts: pkg.scripts,
169
+ dependencies: pkg.dependencies ? Object.keys(pkg.dependencies) : [],
170
+ devDependencies: pkg.devDependencies ? Object.keys(pkg.devDependencies) : [],
171
+ };
172
+ }
173
+ if (configName === 'tsconfig.json') {
174
+ const ts = JSON.parse(content);
175
+ return {
176
+ target: ts.compilerOptions?.target,
177
+ module: ts.compilerOptions?.module,
178
+ outDir: ts.compilerOptions?.outDir,
179
+ };
180
+ }
181
+ }
182
+ catch {
183
+ // Not JSON parseable, return empty
184
+ }
185
+ return {};
186
+ }
187
+ function detectLanguages(projectDir) {
188
+ const languages = new Set();
189
+ const extensionMap = {
190
+ '.ts': 'typescript', '.tsx': 'typescript',
191
+ '.js': 'javascript', '.jsx': 'javascript',
192
+ '.py': 'python', '.go': 'go', '.rs': 'rust',
193
+ '.java': 'java', '.rb': 'ruby', '.php': 'php',
194
+ };
195
+ function scan(dir, depth) {
196
+ if (depth > 3)
197
+ return;
198
+ try {
199
+ const entries = readdirSync(dir, { withFileTypes: true });
200
+ for (const entry of entries) {
201
+ if (EXCLUDE_DIRS.has(entry.name))
202
+ continue;
203
+ if (entry.isDirectory()) {
204
+ scan(join(dir, entry.name), depth + 1);
205
+ }
206
+ else {
207
+ const ext = extname(entry.name);
208
+ if (extensionMap[ext])
209
+ languages.add(extensionMap[ext]);
210
+ }
211
+ }
212
+ }
213
+ catch {
214
+ // Skip unreadable
215
+ }
216
+ }
217
+ scan(projectDir, 0);
218
+ return Array.from(languages).sort();
219
+ }
220
+ function findEnvFiles(projectDir) {
221
+ try {
222
+ return readdirSync(projectDir)
223
+ .filter((f) => f.startsWith('.env'))
224
+ .sort();
225
+ }
226
+ catch {
227
+ return [];
228
+ }
229
+ }
230
+ function detectMigrations(projectDir) {
231
+ const migrationDirs = ['migrations', 'prisma/migrations', 'alembic/versions', 'db/migrate'];
232
+ return migrationDirs.some((d) => existsSync(join(projectDir, d)));
233
+ }
234
+ function detectPorts(configFiles) {
235
+ const ports = [];
236
+ for (const config of configFiles) {
237
+ if (config.type === 'docker-compose.yml' || config.type === 'docker-compose.yaml') {
238
+ // Basic port detection from docker-compose key_fields
239
+ // Full parsing would need YAML, keeping it simple
240
+ ports.push({ port: 3000, service: 'app', source: config.path });
241
+ }
242
+ }
243
+ // Check package.json scripts for port hints
244
+ const pkg = configFiles.find((c) => c.type === 'package.json');
245
+ if (pkg) {
246
+ const scripts = pkg.key_fields.scripts;
247
+ if (scripts && typeof scripts === 'object') {
248
+ const startScript = scripts.start ?? '';
249
+ const portMatch = startScript.match(/(?:PORT|port)[=: ]?(\d+)/);
250
+ if (portMatch) {
251
+ ports.push({ port: parseInt(portMatch[1], 10), service: 'start', source: 'package.json' });
252
+ }
253
+ }
254
+ }
255
+ return ports;
256
+ }
257
+ function detectPackageManager(projectDir, _configFiles) {
258
+ if (existsSync(join(projectDir, 'pnpm-lock.yaml')))
259
+ return 'pnpm';
260
+ if (existsSync(join(projectDir, 'yarn.lock')))
261
+ return 'yarn';
262
+ if (existsSync(join(projectDir, 'bun.lockb')))
263
+ return 'bun';
264
+ if (existsSync(join(projectDir, 'package-lock.json')))
265
+ return 'npm';
266
+ if (existsSync(join(projectDir, 'requirements.txt')))
267
+ return 'pip';
268
+ if (existsSync(join(projectDir, 'pyproject.toml')))
269
+ return 'poetry';
270
+ return undefined;
271
+ }
272
+ function extractScripts(configFiles) {
273
+ const pkg = configFiles.find((c) => c.type === 'package.json');
274
+ if (!pkg)
275
+ return {};
276
+ const scripts = pkg.key_fields.scripts;
277
+ if (!scripts || typeof scripts !== 'object')
278
+ return {};
279
+ return scripts;
280
+ }
281
+ function detectTestFramework(configFiles, scripts) {
282
+ const testScript = scripts.test ?? '';
283
+ if (testScript.includes('vitest'))
284
+ return 'vitest';
285
+ if (testScript.includes('jest'))
286
+ return 'jest';
287
+ if (testScript.includes('pytest'))
288
+ return 'pytest';
289
+ if (testScript.includes('mocha'))
290
+ return 'mocha';
291
+ if (configFiles.some((c) => c.type.startsWith('vitest.config')))
292
+ return 'vitest';
293
+ if (configFiles.some((c) => c.type.startsWith('jest.config')))
294
+ return 'jest';
295
+ return undefined;
296
+ }
297
+ function detectBuildTool(configFiles, scripts) {
298
+ const buildScript = scripts.build ?? '';
299
+ if (buildScript.includes('tsc'))
300
+ return 'tsc';
301
+ if (buildScript.includes('vite'))
302
+ return 'vite';
303
+ if (buildScript.includes('webpack'))
304
+ return 'webpack';
305
+ if (buildScript.includes('next'))
306
+ return 'next';
307
+ if (buildScript.includes('turbo'))
308
+ return 'turbo';
309
+ if (configFiles.some((c) => c.type.startsWith('vite.config')))
310
+ return 'vite';
311
+ if (configFiles.some((c) => c.type.startsWith('next.config')))
312
+ return 'next';
313
+ return undefined;
314
+ }
315
+ function countFilesAndLines(projectDir) {
316
+ let totalFiles = 0;
317
+ let totalLines = 0;
318
+ function walk(dir, depth) {
319
+ if (depth > 8)
320
+ return;
321
+ try {
322
+ const entries = readdirSync(dir, { withFileTypes: true });
323
+ for (const entry of entries) {
324
+ if (EXCLUDE_DIRS.has(entry.name))
325
+ continue;
326
+ const fullPath = join(dir, entry.name);
327
+ if (entry.isDirectory()) {
328
+ walk(fullPath, depth + 1);
329
+ }
330
+ else if (CODE_EXTENSIONS.has(extname(entry.name))) {
331
+ totalFiles++;
332
+ totalLines += countLinesWithCache(fullPath);
333
+ }
334
+ }
335
+ }
336
+ catch {
337
+ // Skip unreadable
338
+ }
339
+ }
340
+ walk(projectDir, 0);
341
+ return { totalFiles, totalLines };
342
+ }
343
+ //# sourceMappingURL=repo-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-snapshot.js","sourceRoot":"","sources":["../../src/pipeline/repo-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Role Execution Adapter — bridges pipeline role planning
3
+ * with the existing runExecutionMode().
4
+ *
5
+ * Builds role-specific execution contexts by combining skill prompts
6
+ * with role plan constraints, then injects them as systemPrompt
7
+ * into ClaudeExecuteOptions for prompt-based enforcement.
8
+ */
9
+ import type { PipelineRole, PipelineState, ArtifactEntry } from './types.js';
10
+ import type { SkillLoader, SkillDefinition } from './skill-loader.js';
11
+ export interface RoleExecutionContext {
12
+ role: PipelineRole;
13
+ systemPrompt: string;
14
+ allowedPaths: string[];
15
+ forbiddenPatterns: string[];
16
+ taskScope: string;
17
+ }
18
+ export interface ClaudeExecuteOptions {
19
+ projectDir: string;
20
+ systemPrompt?: string;
21
+ [key: string]: unknown;
22
+ }
23
+ /**
24
+ * Build a role-specific execution context from a skill definition and role plan artifact.
25
+ *
26
+ * Args:
27
+ * role: The pipeline role to build context for.
28
+ * skill: The skill definition loaded by SkillLoader.
29
+ * rolePlan: The approved role plan artifact entry.
30
+ * projectDir: Root project directory.
31
+ *
32
+ * Returns:
33
+ * RoleExecutionContext with system prompt, allowed paths, and task scope.
34
+ */
35
+ export declare function buildRoleExecutionContext(role: PipelineRole, skill: SkillDefinition, rolePlan: ArtifactEntry, projectDir: string): RoleExecutionContext;
36
+ /**
37
+ * Inject role context into ClaudeExecuteOptions by setting the systemPrompt field.
38
+ *
39
+ * Args:
40
+ * context: The role execution context.
41
+ * options: The execution options to augment.
42
+ *
43
+ * Returns:
44
+ * Modified options with systemPrompt injected.
45
+ */
46
+ export declare function executeWithRoleContext(context: RoleExecutionContext, options: ClaudeExecuteOptions): ClaudeExecuteOptions;
47
+ /**
48
+ * Find role plan artifacts for each active role in the pipeline.
49
+ *
50
+ * Args:
51
+ * pipeline: Current pipeline state.
52
+ * skillLoader: Skill loader instance.
53
+ * projectDir: Root project directory.
54
+ *
55
+ * Returns:
56
+ * Map of role to RoleExecutionContext.
57
+ */
58
+ export declare function buildAllRoleContexts(pipeline: PipelineState, skillLoader: SkillLoader, projectDir: string): Map<PipelineRole, RoleExecutionContext>;
59
+ //# sourceMappingURL=role-execution-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-execution-adapter.d.ts","sourceRoot":"","sources":["../../src/pipeline/role-execution-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAItE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,MAAM,GACjB,oBAAoB,CAuBtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,oBAAoB,GAC5B,oBAAoB,CAKtB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,MAAM,GACjB,GAAG,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAoBzC"}