popeye-cli 1.9.5 → 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 (318) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/CONTRIBUTING.md +15 -1
  3. package/README.md +57 -0
  4. package/cheatsheet.md +65 -0
  5. package/dist/cli/commands/debug-context.d.ts +64 -0
  6. package/dist/cli/commands/debug-context.d.ts.map +1 -0
  7. package/dist/cli/commands/debug-context.js +221 -0
  8. package/dist/cli/commands/debug-context.js.map +1 -0
  9. package/dist/cli/commands/debug-prompts.d.ts +25 -0
  10. package/dist/cli/commands/debug-prompts.d.ts.map +1 -0
  11. package/dist/cli/commands/debug-prompts.js +80 -0
  12. package/dist/cli/commands/debug-prompts.js.map +1 -0
  13. package/dist/cli/commands/debug.d.ts +68 -0
  14. package/dist/cli/commands/debug.d.ts.map +1 -0
  15. package/dist/cli/commands/debug.js +543 -0
  16. package/dist/cli/commands/debug.js.map +1 -0
  17. package/dist/cli/commands/index.d.ts +1 -0
  18. package/dist/cli/commands/index.d.ts.map +1 -1
  19. package/dist/cli/commands/index.js +1 -0
  20. package/dist/cli/commands/index.js.map +1 -1
  21. package/dist/cli/index.d.ts.map +1 -1
  22. package/dist/cli/index.js +2 -1
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/cli/interactive.d.ts.map +1 -1
  25. package/dist/cli/interactive.js +25 -0
  26. package/dist/cli/interactive.js.map +1 -1
  27. package/dist/generators/all.d.ts.map +1 -1
  28. package/dist/generators/all.js +2 -0
  29. package/dist/generators/all.js.map +1 -1
  30. package/dist/generators/templates/database-docker.d.ts.map +1 -1
  31. package/dist/generators/templates/database-docker.js +10 -0
  32. package/dist/generators/templates/database-docker.js.map +1 -1
  33. package/dist/generators/templates/fullstack.d.ts +4 -1
  34. package/dist/generators/templates/fullstack.d.ts.map +1 -1
  35. package/dist/generators/templates/fullstack.js +6 -2
  36. package/dist/generators/templates/fullstack.js.map +1 -1
  37. package/dist/pipeline/artifact-manager.d.ts +47 -0
  38. package/dist/pipeline/artifact-manager.d.ts.map +1 -0
  39. package/dist/pipeline/artifact-manager.js +251 -0
  40. package/dist/pipeline/artifact-manager.js.map +1 -0
  41. package/dist/pipeline/artifact-validators.d.ts +29 -0
  42. package/dist/pipeline/artifact-validators.d.ts.map +1 -0
  43. package/dist/pipeline/artifact-validators.js +173 -0
  44. package/dist/pipeline/artifact-validators.js.map +1 -0
  45. package/dist/pipeline/change-request.d.ts +47 -0
  46. package/dist/pipeline/change-request.d.ts.map +1 -0
  47. package/dist/pipeline/change-request.js +91 -0
  48. package/dist/pipeline/change-request.js.map +1 -0
  49. package/dist/pipeline/check-runner.d.ts +47 -0
  50. package/dist/pipeline/check-runner.d.ts.map +1 -0
  51. package/dist/pipeline/check-runner.js +417 -0
  52. package/dist/pipeline/check-runner.js.map +1 -0
  53. package/dist/pipeline/command-resolver.d.ts +9 -0
  54. package/dist/pipeline/command-resolver.d.ts.map +1 -0
  55. package/dist/pipeline/command-resolver.js +140 -0
  56. package/dist/pipeline/command-resolver.js.map +1 -0
  57. package/dist/pipeline/consensus/consensus-runner.d.ts +44 -0
  58. package/dist/pipeline/consensus/consensus-runner.d.ts.map +1 -0
  59. package/dist/pipeline/consensus/consensus-runner.js +212 -0
  60. package/dist/pipeline/consensus/consensus-runner.js.map +1 -0
  61. package/dist/pipeline/constitution.d.ts +45 -0
  62. package/dist/pipeline/constitution.d.ts.map +1 -0
  63. package/dist/pipeline/constitution.js +82 -0
  64. package/dist/pipeline/constitution.js.map +1 -0
  65. package/dist/pipeline/gate-engine.d.ts +55 -0
  66. package/dist/pipeline/gate-engine.d.ts.map +1 -0
  67. package/dist/pipeline/gate-engine.js +270 -0
  68. package/dist/pipeline/gate-engine.js.map +1 -0
  69. package/dist/pipeline/index.d.ts +26 -0
  70. package/dist/pipeline/index.d.ts.map +1 -0
  71. package/dist/pipeline/index.js +35 -0
  72. package/dist/pipeline/index.js.map +1 -0
  73. package/dist/pipeline/migration.d.ts +15 -0
  74. package/dist/pipeline/migration.d.ts.map +1 -0
  75. package/dist/pipeline/migration.js +76 -0
  76. package/dist/pipeline/migration.js.map +1 -0
  77. package/dist/pipeline/orchestrator.d.ts +28 -0
  78. package/dist/pipeline/orchestrator.d.ts.map +1 -0
  79. package/dist/pipeline/orchestrator.js +238 -0
  80. package/dist/pipeline/orchestrator.js.map +1 -0
  81. package/dist/pipeline/packets/audit-report-builder.d.ts +11 -0
  82. package/dist/pipeline/packets/audit-report-builder.d.ts.map +1 -0
  83. package/dist/pipeline/packets/audit-report-builder.js +32 -0
  84. package/dist/pipeline/packets/audit-report-builder.js.map +1 -0
  85. package/dist/pipeline/packets/consensus-packet-builder.d.ts +35 -0
  86. package/dist/pipeline/packets/consensus-packet-builder.d.ts.map +1 -0
  87. package/dist/pipeline/packets/consensus-packet-builder.js +80 -0
  88. package/dist/pipeline/packets/consensus-packet-builder.js.map +1 -0
  89. package/dist/pipeline/packets/index.d.ts +12 -0
  90. package/dist/pipeline/packets/index.d.ts.map +1 -0
  91. package/dist/pipeline/packets/index.js +8 -0
  92. package/dist/pipeline/packets/index.js.map +1 -0
  93. package/dist/pipeline/packets/plan-packet-builder.d.ts +21 -0
  94. package/dist/pipeline/packets/plan-packet-builder.d.ts.map +1 -0
  95. package/dist/pipeline/packets/plan-packet-builder.js +27 -0
  96. package/dist/pipeline/packets/plan-packet-builder.js.map +1 -0
  97. package/dist/pipeline/packets/rca-packet-builder.d.ts +19 -0
  98. package/dist/pipeline/packets/rca-packet-builder.d.ts.map +1 -0
  99. package/dist/pipeline/packets/rca-packet-builder.js +22 -0
  100. package/dist/pipeline/packets/rca-packet-builder.js.map +1 -0
  101. package/dist/pipeline/phases/architecture.d.ts +7 -0
  102. package/dist/pipeline/phases/architecture.d.ts.map +1 -0
  103. package/dist/pipeline/phases/architecture.js +60 -0
  104. package/dist/pipeline/phases/architecture.js.map +1 -0
  105. package/dist/pipeline/phases/audit.d.ts +8 -0
  106. package/dist/pipeline/phases/audit.d.ts.map +1 -0
  107. package/dist/pipeline/phases/audit.js +144 -0
  108. package/dist/pipeline/phases/audit.js.map +1 -0
  109. package/dist/pipeline/phases/consensus-architecture.d.ts +7 -0
  110. package/dist/pipeline/phases/consensus-architecture.d.ts.map +1 -0
  111. package/dist/pipeline/phases/consensus-architecture.js +84 -0
  112. package/dist/pipeline/phases/consensus-architecture.js.map +1 -0
  113. package/dist/pipeline/phases/consensus-master-plan.d.ts +7 -0
  114. package/dist/pipeline/phases/consensus-master-plan.d.ts.map +1 -0
  115. package/dist/pipeline/phases/consensus-master-plan.js +81 -0
  116. package/dist/pipeline/phases/consensus-master-plan.js.map +1 -0
  117. package/dist/pipeline/phases/consensus-role-plans.d.ts +7 -0
  118. package/dist/pipeline/phases/consensus-role-plans.d.ts.map +1 -0
  119. package/dist/pipeline/phases/consensus-role-plans.js +85 -0
  120. package/dist/pipeline/phases/consensus-role-plans.js.map +1 -0
  121. package/dist/pipeline/phases/done.d.ts +7 -0
  122. package/dist/pipeline/phases/done.d.ts.map +1 -0
  123. package/dist/pipeline/phases/done.js +45 -0
  124. package/dist/pipeline/phases/done.js.map +1 -0
  125. package/dist/pipeline/phases/implementation.d.ts +8 -0
  126. package/dist/pipeline/phases/implementation.d.ts.map +1 -0
  127. package/dist/pipeline/phases/implementation.js +42 -0
  128. package/dist/pipeline/phases/implementation.js.map +1 -0
  129. package/dist/pipeline/phases/index.d.ts +20 -0
  130. package/dist/pipeline/phases/index.d.ts.map +1 -0
  131. package/dist/pipeline/phases/index.js +19 -0
  132. package/dist/pipeline/phases/index.js.map +1 -0
  133. package/dist/pipeline/phases/intake.d.ts +8 -0
  134. package/dist/pipeline/phases/intake.d.ts.map +1 -0
  135. package/dist/pipeline/phases/intake.js +40 -0
  136. package/dist/pipeline/phases/intake.js.map +1 -0
  137. package/dist/pipeline/phases/phase-context.d.ts +30 -0
  138. package/dist/pipeline/phases/phase-context.d.ts.map +1 -0
  139. package/dist/pipeline/phases/phase-context.js +33 -0
  140. package/dist/pipeline/phases/phase-context.js.map +1 -0
  141. package/dist/pipeline/phases/production-gate.d.ts +8 -0
  142. package/dist/pipeline/phases/production-gate.d.ts.map +1 -0
  143. package/dist/pipeline/phases/production-gate.js +84 -0
  144. package/dist/pipeline/phases/production-gate.js.map +1 -0
  145. package/dist/pipeline/phases/qa-validation.d.ts +7 -0
  146. package/dist/pipeline/phases/qa-validation.d.ts.map +1 -0
  147. package/dist/pipeline/phases/qa-validation.js +50 -0
  148. package/dist/pipeline/phases/qa-validation.js.map +1 -0
  149. package/dist/pipeline/phases/recovery-loop.d.ts +7 -0
  150. package/dist/pipeline/phases/recovery-loop.d.ts.map +1 -0
  151. package/dist/pipeline/phases/recovery-loop.js +91 -0
  152. package/dist/pipeline/phases/recovery-loop.js.map +1 -0
  153. package/dist/pipeline/phases/review.d.ts +8 -0
  154. package/dist/pipeline/phases/review.d.ts.map +1 -0
  155. package/dist/pipeline/phases/review.js +127 -0
  156. package/dist/pipeline/phases/review.js.map +1 -0
  157. package/dist/pipeline/phases/role-planning.d.ts +7 -0
  158. package/dist/pipeline/phases/role-planning.d.ts.map +1 -0
  159. package/dist/pipeline/phases/role-planning.js +75 -0
  160. package/dist/pipeline/phases/role-planning.js.map +1 -0
  161. package/dist/pipeline/phases/stuck.d.ts +7 -0
  162. package/dist/pipeline/phases/stuck.d.ts.map +1 -0
  163. package/dist/pipeline/phases/stuck.js +51 -0
  164. package/dist/pipeline/phases/stuck.js.map +1 -0
  165. package/dist/pipeline/repo-snapshot.d.ts +24 -0
  166. package/dist/pipeline/repo-snapshot.d.ts.map +1 -0
  167. package/dist/pipeline/repo-snapshot.js +343 -0
  168. package/dist/pipeline/repo-snapshot.js.map +1 -0
  169. package/dist/pipeline/role-execution-adapter.d.ts +59 -0
  170. package/dist/pipeline/role-execution-adapter.d.ts.map +1 -0
  171. package/dist/pipeline/role-execution-adapter.js +159 -0
  172. package/dist/pipeline/role-execution-adapter.js.map +1 -0
  173. package/dist/pipeline/skill-loader.d.ts +34 -0
  174. package/dist/pipeline/skill-loader.d.ts.map +1 -0
  175. package/dist/pipeline/skill-loader.js +156 -0
  176. package/dist/pipeline/skill-loader.js.map +1 -0
  177. package/dist/pipeline/skills/defaults.d.ts +16 -0
  178. package/dist/pipeline/skills/defaults.d.ts.map +1 -0
  179. package/dist/pipeline/skills/defaults.js +189 -0
  180. package/dist/pipeline/skills/defaults.js.map +1 -0
  181. package/dist/pipeline/type-defs/artifacts.d.ts +202 -0
  182. package/dist/pipeline/type-defs/artifacts.d.ts.map +1 -0
  183. package/dist/pipeline/type-defs/artifacts.js +66 -0
  184. package/dist/pipeline/type-defs/artifacts.js.map +1 -0
  185. package/dist/pipeline/type-defs/audit.d.ts +256 -0
  186. package/dist/pipeline/type-defs/audit.d.ts.map +1 -0
  187. package/dist/pipeline/type-defs/audit.js +54 -0
  188. package/dist/pipeline/type-defs/audit.js.map +1 -0
  189. package/dist/pipeline/type-defs/checks.d.ts +81 -0
  190. package/dist/pipeline/type-defs/checks.d.ts.map +1 -0
  191. package/dist/pipeline/type-defs/checks.js +38 -0
  192. package/dist/pipeline/type-defs/checks.js.map +1 -0
  193. package/dist/pipeline/type-defs/enums.d.ts +43 -0
  194. package/dist/pipeline/type-defs/enums.d.ts.map +1 -0
  195. package/dist/pipeline/type-defs/enums.js +55 -0
  196. package/dist/pipeline/type-defs/enums.js.map +1 -0
  197. package/dist/pipeline/type-defs/index.d.ts +12 -0
  198. package/dist/pipeline/type-defs/index.d.ts.map +1 -0
  199. package/dist/pipeline/type-defs/index.js +12 -0
  200. package/dist/pipeline/type-defs/index.js.map +1 -0
  201. package/dist/pipeline/type-defs/packets.d.ts +806 -0
  202. package/dist/pipeline/type-defs/packets.d.ts.map +1 -0
  203. package/dist/pipeline/type-defs/packets.js +109 -0
  204. package/dist/pipeline/type-defs/packets.js.map +1 -0
  205. package/dist/pipeline/type-defs/snapshot.d.ts +52 -0
  206. package/dist/pipeline/type-defs/snapshot.d.ts.map +1 -0
  207. package/dist/pipeline/type-defs/snapshot.js +35 -0
  208. package/dist/pipeline/type-defs/snapshot.js.map +1 -0
  209. package/dist/pipeline/type-defs/state.d.ts +449 -0
  210. package/dist/pipeline/type-defs/state.d.ts.map +1 -0
  211. package/dist/pipeline/type-defs/state.js +88 -0
  212. package/dist/pipeline/type-defs/state.js.map +1 -0
  213. package/dist/pipeline/types.d.ts +16 -0
  214. package/dist/pipeline/types.d.ts.map +1 -0
  215. package/dist/pipeline/types.js +16 -0
  216. package/dist/pipeline/types.js.map +1 -0
  217. package/dist/types/audit.d.ts +6 -6
  218. package/dist/workflow/index.d.ts.map +1 -1
  219. package/dist/workflow/index.js +48 -0
  220. package/dist/workflow/index.js.map +1 -1
  221. package/package.json +1 -1
  222. package/skills/ARBITRATOR.md +137 -0
  223. package/skills/ARCHITECT.md +167 -0
  224. package/skills/AUDITOR.md +128 -0
  225. package/skills/AUDIT_REPORT_SCHEMA.md +20 -0
  226. package/skills/BACKEND_PROGRAMMER.md +95 -0
  227. package/skills/CONSENSUS_PACKET_SCHEMA.md +166 -0
  228. package/skills/DB_EXPERT.md +106 -0
  229. package/skills/DEBUGGER.md +286 -0
  230. package/skills/DISPATCHER.md +157 -0
  231. package/skills/FRONTEND_PROGRAMMER.md +84 -0
  232. package/skills/JOURNALIST.md +247 -0
  233. package/skills/MARKETING_EXPERT.md +23 -0
  234. package/skills/PHASE_GATE_ENGINE_SPEC.md +171 -0
  235. package/skills/PLAN_PACKET_SCHEMA.md +222 -0
  236. package/skills/POPEYE_CONSTITUTION.md +177 -0
  237. package/skills/POPEYE_FULL_AUTONOMY_PIPELINE.md +537 -0
  238. package/skills/PRODUCTION_READINESS_SCHEMA.md +19 -0
  239. package/skills/QA_TESTER.md +40 -0
  240. package/skills/RCA_PACKET_SCHEMA.md +22 -0
  241. package/skills/RELEASE_MANAGER.md +60 -0
  242. package/skills/REVIEWER.md +133 -0
  243. package/skills/SOCIAL_EXPERT.md +22 -0
  244. package/skills/UI_UX_SPECIALIST.md +22 -0
  245. package/skills/WEBSITE_PROGRAMMER.md +37 -0
  246. package/src/cli/commands/debug-context.ts +265 -0
  247. package/src/cli/commands/debug-prompts.ts +91 -0
  248. package/src/cli/commands/debug.ts +662 -0
  249. package/src/cli/commands/index.ts +1 -0
  250. package/src/cli/index.ts +2 -0
  251. package/src/cli/interactive.ts +27 -0
  252. package/src/generators/all.ts +2 -0
  253. package/src/generators/templates/database-docker.ts +10 -0
  254. package/src/generators/templates/fullstack.ts +6 -2
  255. package/src/pipeline/artifact-manager.ts +339 -0
  256. package/src/pipeline/artifact-validators.ts +224 -0
  257. package/src/pipeline/change-request.ts +119 -0
  258. package/src/pipeline/check-runner.ts +504 -0
  259. package/src/pipeline/command-resolver.ts +168 -0
  260. package/src/pipeline/consensus/consensus-runner.ts +317 -0
  261. package/src/pipeline/constitution.ts +109 -0
  262. package/src/pipeline/gate-engine.ts +347 -0
  263. package/src/pipeline/index.ts +82 -0
  264. package/src/pipeline/migration.ts +91 -0
  265. package/src/pipeline/orchestrator.ts +314 -0
  266. package/src/pipeline/packets/audit-report-builder.ts +47 -0
  267. package/src/pipeline/packets/consensus-packet-builder.ts +112 -0
  268. package/src/pipeline/packets/index.ts +15 -0
  269. package/src/pipeline/packets/plan-packet-builder.ts +52 -0
  270. package/src/pipeline/packets/rca-packet-builder.ts +38 -0
  271. package/src/pipeline/phases/architecture.ts +73 -0
  272. package/src/pipeline/phases/audit.ts +193 -0
  273. package/src/pipeline/phases/consensus-architecture.ts +104 -0
  274. package/src/pipeline/phases/consensus-master-plan.ts +100 -0
  275. package/src/pipeline/phases/consensus-role-plans.ts +105 -0
  276. package/src/pipeline/phases/done.ts +68 -0
  277. package/src/pipeline/phases/implementation.ts +48 -0
  278. package/src/pipeline/phases/index.ts +21 -0
  279. package/src/pipeline/phases/intake.ts +54 -0
  280. package/src/pipeline/phases/phase-context.ts +86 -0
  281. package/src/pipeline/phases/production-gate.ts +113 -0
  282. package/src/pipeline/phases/qa-validation.ts +63 -0
  283. package/src/pipeline/phases/recovery-loop.ts +118 -0
  284. package/src/pipeline/phases/review.ts +149 -0
  285. package/src/pipeline/phases/role-planning.ts +92 -0
  286. package/src/pipeline/phases/stuck.ts +62 -0
  287. package/src/pipeline/repo-snapshot.ts +395 -0
  288. package/src/pipeline/role-execution-adapter.ts +238 -0
  289. package/src/pipeline/skill-loader.ts +192 -0
  290. package/src/pipeline/skills/defaults.ts +215 -0
  291. package/src/pipeline/type-defs/artifacts.ts +81 -0
  292. package/src/pipeline/type-defs/audit.ts +67 -0
  293. package/src/pipeline/type-defs/checks.ts +47 -0
  294. package/src/pipeline/type-defs/enums.ts +62 -0
  295. package/src/pipeline/type-defs/index.ts +12 -0
  296. package/src/pipeline/type-defs/packets.ts +131 -0
  297. package/src/pipeline/type-defs/snapshot.ts +55 -0
  298. package/src/pipeline/type-defs/state.ts +165 -0
  299. package/src/pipeline/types.ts +16 -0
  300. package/src/workflow/index.ts +48 -0
  301. package/tests/cli/commands/debug.test.ts +376 -0
  302. package/tests/pipeline/artifact-manager.test.ts +183 -0
  303. package/tests/pipeline/artifact-validators.test.ts +207 -0
  304. package/tests/pipeline/change-request.test.ts +180 -0
  305. package/tests/pipeline/check-runner.test.ts +157 -0
  306. package/tests/pipeline/command-resolver.test.ts +159 -0
  307. package/tests/pipeline/consensus-runner.test.ts +206 -0
  308. package/tests/pipeline/consensus-scoring.test.ts +163 -0
  309. package/tests/pipeline/constitution.test.ts +122 -0
  310. package/tests/pipeline/gate-engine.test.ts +195 -0
  311. package/tests/pipeline/migration.test.ts +133 -0
  312. package/tests/pipeline/orchestrator.test.ts +614 -0
  313. package/tests/pipeline/packets/builders.test.ts +347 -0
  314. package/tests/pipeline/repo-snapshot.test.ts +189 -0
  315. package/tests/pipeline/role-execution-adapter.test.ts +299 -0
  316. package/tests/pipeline/skill-loader.test.ts +186 -0
  317. package/tests/pipeline/start-env-checks.test.ts +123 -0
  318. package/tests/pipeline/types.test.ts +156 -0
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Structured packet types — plans, consensus, RCA, constraints, change requests.
3
+ */
4
+
5
+ import { z } from 'zod';
6
+ import { PipelinePhaseSchema, PipelineRoleSchema } from './enums.js';
7
+ import { ArtifactRefSchema, DependencyEdgeSchema } from './artifacts.js';
8
+
9
+ // ─── Constraint ──────────────────────────────────────────
10
+
11
+ export const ConstraintSchema = z.object({
12
+ type: z.enum(['technical', 'business', 'timeline', 'compliance']),
13
+ description: z.string(),
14
+ source: ArtifactRefSchema,
15
+ });
16
+ export type Constraint = z.infer<typeof ConstraintSchema>;
17
+
18
+ // ─── Plan Packet ─────────────────────────────────────────
19
+
20
+ export const PlanPacketMetadataSchema = z.object({
21
+ packet_id: z.string(),
22
+ timestamp: z.string(),
23
+ phase: PipelinePhaseSchema,
24
+ submitted_by: PipelineRoleSchema,
25
+ version: z.number().int().positive(),
26
+ });
27
+
28
+ export const PlanPacketSchema = z.object({
29
+ metadata: PlanPacketMetadataSchema,
30
+ references: z.object({
31
+ master_plan: ArtifactRefSchema,
32
+ constitution: ArtifactRefSchema,
33
+ repo_snapshot: ArtifactRefSchema,
34
+ }),
35
+ proposed_artifacts: z.array(ArtifactRefSchema),
36
+ acceptance_criteria: z.array(z.string()),
37
+ artifact_dependencies: z.array(DependencyEdgeSchema),
38
+ constraints: z.array(ConstraintSchema),
39
+ open_questions: z.array(z.string()).optional(),
40
+ });
41
+ export type PlanPacket = z.infer<typeof PlanPacketSchema>;
42
+
43
+ // ─── Reviewer Vote ───────────────────────────────────────
44
+
45
+ export const ReviewerVoteSchema = z.object({
46
+ reviewer_id: z.string(),
47
+ provider: z.string(),
48
+ model: z.string(),
49
+ temperature: z.number(),
50
+ prompt_hash: z.string(),
51
+ vote: z.enum(['APPROVE', 'REJECT', 'CONDITIONAL']),
52
+ confidence: z.number().min(0).max(1),
53
+ blocking_issues: z.array(z.string()),
54
+ suggestions: z.array(z.string()),
55
+ evidence_refs: z.array(ArtifactRefSchema),
56
+ });
57
+ export type ReviewerVote = z.infer<typeof ReviewerVoteSchema>;
58
+
59
+ // ─── Consensus Packet ────────────────────────────────────
60
+
61
+ export const ConsensusRulesSchema = z.object({
62
+ threshold: z.number().min(0).max(1),
63
+ quorum: z.number().int().positive(),
64
+ min_reviewers: z.number().int().positive(),
65
+ });
66
+
67
+ export const ConsensusResultSchema = z.object({
68
+ approved: z.boolean(),
69
+ score: z.number().min(0).max(1),
70
+ weighted_score: z.number().min(0).max(1),
71
+ participating_reviewers: z.number().int(),
72
+ });
73
+
74
+ export const ArbitratorResultSchema = z.object({
75
+ decision: z.string(),
76
+ merged_patch: z.string().optional(),
77
+ artifact_ref: ArtifactRefSchema.optional(),
78
+ });
79
+
80
+ export const ConsensusPacketSchema = z.object({
81
+ metadata: z.object({
82
+ packet_id: z.string(),
83
+ timestamp: z.string(),
84
+ plan_packet_id: z.string(),
85
+ }),
86
+ plan_packet_reference: ArtifactRefSchema,
87
+ reviewer_votes: z.array(ReviewerVoteSchema),
88
+ consensus_rules: ConsensusRulesSchema,
89
+ consensus_result: ConsensusResultSchema,
90
+ arbitrator_result: ArbitratorResultSchema.optional(),
91
+ final_status: z.enum(['APPROVED', 'REJECTED', 'ARBITRATED']),
92
+ });
93
+ export type ConsensusPacket = z.infer<typeof ConsensusPacketSchema>;
94
+
95
+ // ─── RCA Packet ──────────────────────────────────────────
96
+
97
+ export const RCAPacketSchema = z.object({
98
+ rca_id: z.string(),
99
+ timestamp: z.string(),
100
+ incident_summary: z.string(),
101
+ symptoms: z.array(z.string()),
102
+ root_cause: z.string(),
103
+ responsible_layer: z.string(),
104
+ origin_phase: PipelinePhaseSchema,
105
+ governance_gap: z.string(),
106
+ corrective_actions: z.array(z.string()),
107
+ prevention: z.string(),
108
+ requires_phase_rewind_to: PipelinePhaseSchema.optional(),
109
+ requires_consensus_on: z.array(PipelinePhaseSchema).optional(),
110
+ });
111
+ export type RCAPacket = z.infer<typeof RCAPacketSchema>;
112
+
113
+ // ─── Change Request ──────────────────────────────────────
114
+
115
+ export const ChangeRequestSchema = z.object({
116
+ cr_id: z.string(),
117
+ timestamp: z.string(),
118
+ origin_phase: PipelinePhaseSchema,
119
+ requested_by: PipelineRoleSchema,
120
+ change_type: z.enum(['scope', 'architecture', 'dependency', 'config', 'requirement']),
121
+ description: z.string(),
122
+ justification: z.string(),
123
+ impact_analysis: z.object({
124
+ affected_artifacts: z.array(ArtifactRefSchema),
125
+ affected_phases: z.array(PipelinePhaseSchema),
126
+ risk_level: z.enum(['low', 'medium', 'high']),
127
+ }),
128
+ status: z.enum(['proposed', 'approved', 'rejected']),
129
+ approval_artifact: ArtifactRefSchema.optional(),
130
+ });
131
+ export type ChangeRequest = z.infer<typeof ChangeRequestSchema>;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Repo snapshot types — project state capture for drift detection.
3
+ */
4
+
5
+ import { z } from 'zod';
6
+
7
+ // ─── Config File Entry ───────────────────────────────────
8
+
9
+ export const ConfigFileEntrySchema = z.object({
10
+ path: z.string(),
11
+ type: z.string(),
12
+ content_hash: z.string(),
13
+ key_fields: z.record(z.string(), z.unknown()),
14
+ });
15
+ export type ConfigFileEntry = z.infer<typeof ConfigFileEntrySchema>;
16
+
17
+ // ─── Port Entry ──────────────────────────────────────────
18
+
19
+ export const PortEntrySchema = z.object({
20
+ port: z.number().int(),
21
+ service: z.string(),
22
+ source: z.string(),
23
+ });
24
+ export type PortEntry = z.infer<typeof PortEntrySchema>;
25
+
26
+ // ─── Repo Snapshot ───────────────────────────────────────
27
+
28
+ export const RepoSnapshotSchema = z.object({
29
+ snapshot_id: z.string(),
30
+ timestamp: z.string(),
31
+ tree_summary: z.string(),
32
+ config_files: z.array(ConfigFileEntrySchema),
33
+ languages_detected: z.array(z.string()),
34
+ package_manager: z.string().optional(),
35
+ scripts: z.record(z.string(), z.string()),
36
+ test_framework: z.string().optional(),
37
+ build_tool: z.string().optional(),
38
+ env_files: z.array(z.string()),
39
+ migrations_present: z.boolean(),
40
+ ports_entrypoints: z.array(PortEntrySchema),
41
+ total_files: z.number().int(),
42
+ total_lines: z.number().int(),
43
+ });
44
+ export type RepoSnapshot = z.infer<typeof RepoSnapshotSchema>;
45
+
46
+ // ─── Snapshot Diff ───────────────────────────────────────
47
+
48
+ /** Diff between two snapshots for drift detection */
49
+ export interface SnapshotDiff {
50
+ files_added: string[];
51
+ files_removed: string[];
52
+ configs_changed: string[];
53
+ lines_delta: number;
54
+ has_drift: boolean;
55
+ }
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Pipeline state types — the core mutable state, gate definitions, gate results.
3
+ */
4
+
5
+ import { z } from 'zod';
6
+ import { PipelinePhaseSchema, type PipelinePhase, PipelineRoleSchema, type PipelineRole } from './enums.js';
7
+ import { ArtifactTypeSchema, ArtifactEntrySchema, ArtifactRefSchema, type ArtifactEntry } from './artifacts.js';
8
+ import { GateCheckTypeSchema, GateCheckResultSchema, ResolvedCommandsSchema, type GateCheckType } from './checks.js';
9
+ import type { ArtifactType } from './artifacts.js';
10
+ import type { ConsensusPacket } from './packets.js';
11
+ import type { RCAPacket } from './packets.js';
12
+
13
+ // ─── Gate Definition ─────────────────────────────────────
14
+
15
+ export const GateDefinitionSchema = z.object({
16
+ phase: PipelinePhaseSchema,
17
+ requiredArtifacts: z.array(ArtifactTypeSchema),
18
+ requiredChecks: z.array(GateCheckTypeSchema),
19
+ consensusThreshold: z.number().min(0).max(1).optional(),
20
+ minReviewers: z.number().int().positive().optional(),
21
+ allowedTransitions: z.array(PipelinePhaseSchema),
22
+ failTransition: PipelinePhaseSchema,
23
+ });
24
+ export type GateDefinition = z.infer<typeof GateDefinitionSchema>;
25
+
26
+ // ─── Gate Result ─────────────────────────────────────────
27
+
28
+ /** Result of evaluating a gate */
29
+ export interface GateResult {
30
+ phase: PipelinePhase;
31
+ pass: boolean;
32
+ score?: number;
33
+ blockers: string[];
34
+ missingArtifacts: ArtifactType[];
35
+ failedChecks: GateCheckType[];
36
+ consensusScore?: number;
37
+ timestamp: string;
38
+ }
39
+
40
+ // ─── Skill Definition ────────────────────────────────────
41
+
42
+ export interface SkillDefinition {
43
+ role: PipelineRole;
44
+ systemPrompt: string;
45
+ constraints: string[];
46
+ outputContract: string[];
47
+ requiredSections: string[];
48
+ }
49
+
50
+ // ─── Phase Result ────────────────────────────────────────
51
+
52
+ export interface PhaseResult {
53
+ success: boolean;
54
+ phase: PipelinePhase;
55
+ artifacts: ArtifactEntry[];
56
+ errors?: string[];
57
+ /** For consensus phases: the consensus packet produced */
58
+ consensusPacket?: ConsensusPacket;
59
+ /** For recovery: the RCA packet produced */
60
+ rcaPacket?: RCAPacket;
61
+ }
62
+
63
+ // ─── Phase Context ───────────────────────────────────────
64
+
65
+ /**
66
+ * Context passed to every phase handler.
67
+ * Defined as an interface so phase implementations can import it.
68
+ * The orchestrator constructs this before entering the phase loop.
69
+ */
70
+ export interface PhaseContext {
71
+ projectDir: string;
72
+ pipeline: PipelineState;
73
+ skillsDir?: string;
74
+ }
75
+
76
+ // ─── Pipeline State ──────────────────────────────────────
77
+
78
+ export const PipelineStateSchema = z.object({
79
+ pipelinePhase: PipelinePhaseSchema,
80
+ artifacts: z.array(ArtifactEntrySchema),
81
+ recoveryCount: z.number().int().min(0),
82
+ maxRecoveryIterations: z.number().int().positive(),
83
+ gateResults: z.record(z.string(), z.object({
84
+ phase: PipelinePhaseSchema,
85
+ pass: z.boolean(),
86
+ score: z.number().optional(),
87
+ blockers: z.array(z.string()),
88
+ missingArtifacts: z.array(ArtifactTypeSchema),
89
+ failedChecks: z.array(GateCheckTypeSchema),
90
+ consensusScore: z.number().optional(),
91
+ timestamp: z.string(),
92
+ })),
93
+ gateChecks: z.record(z.string(), z.array(GateCheckResultSchema)),
94
+ activeRoles: z.array(PipelineRoleSchema),
95
+ constitutionHash: z.string(),
96
+ latestRepoSnapshot: ArtifactRefSchema.optional(),
97
+ resolvedCommands: ResolvedCommandsSchema.optional(),
98
+ /** Tracks which phase failed, for recovery routing */
99
+ failedPhase: PipelinePhaseSchema.optional(),
100
+ /** Pending change requests that force re-routing to consensus phases (v1.1) */
101
+ pendingChangeRequests: z.array(z.object({
102
+ cr_id: z.string(),
103
+ change_type: z.enum(['scope', 'architecture', 'dependency', 'config', 'requirement']),
104
+ target_phase: PipelinePhaseSchema,
105
+ status: z.enum(['proposed', 'approved', 'rejected']),
106
+ })).optional(),
107
+ });
108
+ export type PipelineState = z.infer<typeof PipelineStateSchema>;
109
+
110
+ // ─── Pipeline Result ─────────────────────────────────────
111
+
112
+ export interface PipelineResult {
113
+ finalPhase: PipelinePhase;
114
+ success: boolean;
115
+ artifacts: ArtifactEntry[];
116
+ recoveryIterations: number;
117
+ error?: string;
118
+ }
119
+
120
+ // ─── Consensus Modes ─────────────────────────────────────
121
+
122
+ export type ConsensusMode = 'independent' | 'iterative';
123
+
124
+ // ─── Helper: legacy phase mapping ────────────────────────
125
+
126
+ /**
127
+ * Maps pipeline phases to the legacy 3-phase WorkflowPhase.
128
+ * Used for backward compatibility with existing state/UI code.
129
+ */
130
+ export function toLegacyPhase(phase: PipelinePhase): 'plan' | 'execution' | 'complete' {
131
+ switch (phase) {
132
+ case 'INTAKE':
133
+ case 'CONSENSUS_MASTER_PLAN':
134
+ case 'ARCHITECTURE':
135
+ case 'CONSENSUS_ARCHITECTURE':
136
+ case 'ROLE_PLANNING':
137
+ case 'CONSENSUS_ROLE_PLANS':
138
+ return 'plan';
139
+ case 'IMPLEMENTATION':
140
+ case 'QA_VALIDATION':
141
+ case 'REVIEW':
142
+ case 'AUDIT':
143
+ case 'PRODUCTION_GATE':
144
+ case 'RECOVERY_LOOP':
145
+ case 'STUCK':
146
+ return 'execution';
147
+ case 'DONE':
148
+ return 'complete';
149
+ }
150
+ }
151
+
152
+ // ─── Default pipeline state factory ──────────────────────
153
+
154
+ export function createDefaultPipelineState(): PipelineState {
155
+ return {
156
+ pipelinePhase: 'INTAKE',
157
+ artifacts: [],
158
+ recoveryCount: 0,
159
+ maxRecoveryIterations: 5,
160
+ gateResults: {},
161
+ gateChecks: {},
162
+ activeRoles: [],
163
+ constitutionHash: '',
164
+ };
165
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Pipeline type definitions — barrel re-export from type-defs/ sub-modules.
3
+ *
4
+ * All types are defined in src/pipeline/type-defs/ for modularity:
5
+ * enums.ts — PipelinePhase, PipelineRole
6
+ * artifacts.ts — ArtifactType, ArtifactRef, ArtifactEntry, DependencyEdge
7
+ * packets.ts — PlanPacket, ConsensusPacket, ReviewerVote, RCAPacket, ChangeRequest
8
+ * audit.ts — AuditFinding, AuditReport, ProductionReadiness
9
+ * snapshot.ts — RepoSnapshot, ConfigFileEntry, PortEntry, SnapshotDiff
10
+ * checks.ts — GateCheckType, GateCheckResult, ResolvedCommands
11
+ * state.ts — PipelineState, GateResult, GateDefinition, SkillDefinition
12
+ *
13
+ * This file re-exports everything so existing imports work unchanged.
14
+ */
15
+
16
+ export * from './type-defs/index.js';
@@ -28,6 +28,7 @@ import {
28
28
  type TaskExecutionResult,
29
29
  } from './execution-mode.js';
30
30
  import { getWorkflowLogger } from './workflow-logger.js';
31
+ import { runPipeline, resumePipeline } from '../pipeline/orchestrator.js';
31
32
  // Types are re-exported via export * from statements below
32
33
 
33
34
  // Re-export submodules
@@ -99,6 +100,31 @@ export async function runWorkflow(
99
100
  ): Promise<WorkflowResult> {
100
101
  const { projectDir, consensusConfig, maxRetries, onProgress } = options;
101
102
 
103
+ // P0-5: Pipeline mode check — use full autonomy pipeline unless legacy mode
104
+ const useLegacy = process.env.POPEYE_LEGACY_WORKFLOW === '1' || process.env.POPEYE_LEGACY_WORKFLOW === 'true';
105
+ if (!useLegacy) {
106
+ try {
107
+ const state = await loadProject(projectDir).catch(() => null);
108
+ if (state) {
109
+ const result = await runPipeline({
110
+ projectDir,
111
+ state,
112
+ consensusConfig,
113
+ onPhaseStart: (phase) => onProgress?.('pipeline', `Starting phase: ${phase}`),
114
+ onProgress: (msg) => onProgress?.('pipeline', msg),
115
+ });
116
+ return {
117
+ success: result.success,
118
+ state: await loadProject(projectDir).catch(() => ({} as ProjectState)),
119
+ error: result.error,
120
+ };
121
+ }
122
+ } catch {
123
+ // Fall through to legacy workflow on pipeline error
124
+ onProgress?.('workflow', 'Pipeline mode failed, falling back to legacy workflow...');
125
+ }
126
+ }
127
+
102
128
  // Initialize workflow logger
103
129
  const logger = getWorkflowLogger(projectDir);
104
130
 
@@ -206,6 +232,28 @@ export async function resumeWorkflow(
206
232
  ): Promise<WorkflowResult> {
207
233
  const { consensusConfig, maxRetries, onProgress, additionalContext } = options;
208
234
 
235
+ // P0-5: Pipeline mode check
236
+ const useLegacy = process.env.POPEYE_LEGACY_WORKFLOW === '1' || process.env.POPEYE_LEGACY_WORKFLOW === 'true';
237
+ if (!useLegacy) {
238
+ try {
239
+ const state = await loadProject(projectDir);
240
+ const result = await resumePipeline({
241
+ projectDir,
242
+ state,
243
+ consensusConfig,
244
+ onPhaseStart: (phase) => onProgress?.('pipeline', `Resuming phase: ${phase}`),
245
+ onProgress: (msg) => onProgress?.('pipeline', msg),
246
+ });
247
+ return {
248
+ success: result.success,
249
+ state: await loadProject(projectDir).catch(() => ({} as ProjectState)),
250
+ error: result.error,
251
+ };
252
+ } catch {
253
+ onProgress?.('workflow', 'Pipeline resume failed, falling back to legacy workflow...');
254
+ }
255
+ }
256
+
209
257
  // Initialize workflow logger
210
258
  const logger = getWorkflowLogger(projectDir);
211
259