popeye-cli 2.0.0 → 2.2.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 (161) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/CONTRIBUTING.md +23 -2
  3. package/README.md +47 -18
  4. package/dist/adapters/gemini.js +3 -3
  5. package/dist/adapters/openai.js +2 -2
  6. package/dist/adapters/openai.js.map +1 -1
  7. package/dist/auth/gemini.js +1 -1
  8. package/dist/cli/commands/create.d.ts.map +1 -1
  9. package/dist/cli/commands/create.js +11 -5
  10. package/dist/cli/commands/create.js.map +1 -1
  11. package/dist/cli/commands/resume.d.ts.map +1 -1
  12. package/dist/cli/commands/resume.js +9 -1
  13. package/dist/cli/commands/resume.js.map +1 -1
  14. package/dist/cli/interactive.d.ts.map +1 -1
  15. package/dist/cli/interactive.js +33 -4
  16. package/dist/cli/interactive.js.map +1 -1
  17. package/dist/config/defaults.d.ts.map +1 -1
  18. package/dist/config/defaults.js +7 -2
  19. package/dist/config/defaults.js.map +1 -1
  20. package/dist/config/index.d.ts +1 -7
  21. package/dist/config/index.d.ts.map +1 -1
  22. package/dist/config/popeye-md.d.ts +32 -0
  23. package/dist/config/popeye-md.d.ts.map +1 -0
  24. package/dist/config/popeye-md.js +111 -0
  25. package/dist/config/popeye-md.js.map +1 -0
  26. package/dist/config/schema.d.ts +3 -21
  27. package/dist/config/schema.d.ts.map +1 -1
  28. package/dist/config/schema.js +21 -8
  29. package/dist/config/schema.js.map +1 -1
  30. package/dist/generators/all.d.ts.map +1 -1
  31. package/dist/generators/all.js +23 -1
  32. package/dist/generators/all.js.map +1 -1
  33. package/dist/pipeline/artifact-manager.d.ts.map +1 -1
  34. package/dist/pipeline/artifact-manager.js +3 -0
  35. package/dist/pipeline/artifact-manager.js.map +1 -1
  36. package/dist/pipeline/bridges/review-bridge.d.ts +70 -0
  37. package/dist/pipeline/bridges/review-bridge.d.ts.map +1 -0
  38. package/dist/pipeline/bridges/review-bridge.js +266 -0
  39. package/dist/pipeline/bridges/review-bridge.js.map +1 -0
  40. package/dist/pipeline/consensus/consensus-runner.js +3 -3
  41. package/dist/pipeline/consensus/consensus-runner.js.map +1 -1
  42. package/dist/pipeline/gate-engine.js +1 -1
  43. package/dist/pipeline/gate-engine.js.map +1 -1
  44. package/dist/pipeline/migration.d.ts.map +1 -1
  45. package/dist/pipeline/migration.js +3 -26
  46. package/dist/pipeline/migration.js.map +1 -1
  47. package/dist/pipeline/orchestrator.d.ts +2 -0
  48. package/dist/pipeline/orchestrator.d.ts.map +1 -1
  49. package/dist/pipeline/orchestrator.js +10 -1
  50. package/dist/pipeline/orchestrator.js.map +1 -1
  51. package/dist/pipeline/phases/implementation.d.ts.map +1 -1
  52. package/dist/pipeline/phases/implementation.js +5 -2
  53. package/dist/pipeline/phases/implementation.js.map +1 -1
  54. package/dist/pipeline/phases/intake.d.ts +1 -0
  55. package/dist/pipeline/phases/intake.d.ts.map +1 -1
  56. package/dist/pipeline/phases/intake.js +56 -8
  57. package/dist/pipeline/phases/intake.js.map +1 -1
  58. package/dist/pipeline/phases/recovery-loop.d.ts.map +1 -1
  59. package/dist/pipeline/phases/recovery-loop.js +2 -0
  60. package/dist/pipeline/phases/recovery-loop.js.map +1 -1
  61. package/dist/pipeline/phases/role-planning.d.ts.map +1 -1
  62. package/dist/pipeline/phases/role-planning.js +2 -3
  63. package/dist/pipeline/phases/role-planning.js.map +1 -1
  64. package/dist/pipeline/skills/constitution-generator.d.ts +51 -0
  65. package/dist/pipeline/skills/constitution-generator.d.ts.map +1 -0
  66. package/dist/pipeline/skills/constitution-generator.js +210 -0
  67. package/dist/pipeline/skills/constitution-generator.js.map +1 -0
  68. package/dist/pipeline/skills/generator.d.ts +65 -0
  69. package/dist/pipeline/skills/generator.d.ts.map +1 -0
  70. package/dist/pipeline/skills/generator.js +221 -0
  71. package/dist/pipeline/skills/generator.js.map +1 -0
  72. package/dist/pipeline/skills/role-map.d.ts +38 -0
  73. package/dist/pipeline/skills/role-map.d.ts.map +1 -0
  74. package/dist/pipeline/skills/role-map.js +234 -0
  75. package/dist/pipeline/skills/role-map.js.map +1 -0
  76. package/dist/pipeline/skills/types.d.ts +47 -0
  77. package/dist/pipeline/skills/types.d.ts.map +1 -0
  78. package/dist/pipeline/skills/types.js +5 -0
  79. package/dist/pipeline/skills/types.js.map +1 -0
  80. package/dist/pipeline/type-defs/artifacts.d.ts +10 -0
  81. package/dist/pipeline/type-defs/artifacts.d.ts.map +1 -1
  82. package/dist/pipeline/type-defs/artifacts.js +2 -0
  83. package/dist/pipeline/type-defs/artifacts.js.map +1 -1
  84. package/dist/pipeline/type-defs/audit.d.ts +6 -0
  85. package/dist/pipeline/type-defs/audit.d.ts.map +1 -1
  86. package/dist/pipeline/type-defs/checks.d.ts +2 -0
  87. package/dist/pipeline/type-defs/checks.d.ts.map +1 -1
  88. package/dist/pipeline/type-defs/packets.d.ts +30 -0
  89. package/dist/pipeline/type-defs/packets.d.ts.map +1 -1
  90. package/dist/pipeline/type-defs/state.d.ts +11 -0
  91. package/dist/pipeline/type-defs/state.d.ts.map +1 -1
  92. package/dist/pipeline/type-defs/state.js +2 -0
  93. package/dist/pipeline/type-defs/state.js.map +1 -1
  94. package/dist/types/consensus.d.ts +5 -1
  95. package/dist/types/consensus.d.ts.map +1 -1
  96. package/dist/types/consensus.js +15 -4
  97. package/dist/types/consensus.js.map +1 -1
  98. package/dist/types/index.d.ts +1 -1
  99. package/dist/types/index.d.ts.map +1 -1
  100. package/dist/types/index.js +1 -1
  101. package/dist/types/index.js.map +1 -1
  102. package/dist/types/project.d.ts +1 -1
  103. package/dist/types/project.d.ts.map +1 -1
  104. package/dist/types/project.js +39 -10
  105. package/dist/types/project.js.map +1 -1
  106. package/dist/types/workflow.d.ts +1 -7
  107. package/dist/types/workflow.d.ts.map +1 -1
  108. package/dist/types/workflow.js +1 -1
  109. package/dist/types/workflow.js.map +1 -1
  110. package/dist/upgrade/handlers.js +5 -5
  111. package/dist/upgrade/handlers.js.map +1 -1
  112. package/dist/workflow/index.d.ts.map +1 -1
  113. package/dist/workflow/index.js +18 -14
  114. package/dist/workflow/index.js.map +1 -1
  115. package/dist/workflow/website-strategy.js +1 -1
  116. package/dist/workflow/website-strategy.js.map +1 -1
  117. package/package.json +1 -1
  118. package/src/adapters/gemini.ts +3 -3
  119. package/src/adapters/openai.ts +2 -2
  120. package/src/auth/gemini.ts +1 -1
  121. package/src/cli/commands/create.ts +12 -6
  122. package/src/cli/commands/resume.ts +9 -1
  123. package/src/cli/interactive.ts +36 -4
  124. package/src/config/defaults.ts +7 -2
  125. package/src/config/popeye-md.ts +139 -0
  126. package/src/config/schema.ts +21 -8
  127. package/src/generators/all.ts +23 -1
  128. package/src/pipeline/artifact-manager.ts +3 -0
  129. package/src/pipeline/bridges/review-bridge.ts +371 -0
  130. package/src/pipeline/consensus/consensus-runner.ts +3 -3
  131. package/src/pipeline/gate-engine.ts +1 -1
  132. package/src/pipeline/migration.ts +5 -30
  133. package/src/pipeline/orchestrator.ts +14 -0
  134. package/src/pipeline/phases/implementation.ts +6 -2
  135. package/src/pipeline/phases/intake.ts +73 -10
  136. package/src/pipeline/phases/recovery-loop.ts +2 -0
  137. package/src/pipeline/phases/role-planning.ts +2 -3
  138. package/src/pipeline/skills/constitution-generator.ts +236 -0
  139. package/src/pipeline/skills/generator.ts +287 -0
  140. package/src/pipeline/skills/role-map.ts +248 -0
  141. package/src/pipeline/skills/types.ts +53 -0
  142. package/src/pipeline/type-defs/artifacts.ts +2 -0
  143. package/src/pipeline/type-defs/state.ts +2 -0
  144. package/src/types/consensus.ts +16 -4
  145. package/src/types/index.ts +1 -0
  146. package/src/types/project.ts +39 -10
  147. package/src/types/workflow.ts +1 -1
  148. package/src/upgrade/handlers.ts +5 -5
  149. package/src/workflow/index.ts +18 -14
  150. package/src/workflow/website-strategy.ts +1 -1
  151. package/tests/cli/model-command.test.ts +19 -9
  152. package/tests/config/config.test.ts +3 -3
  153. package/tests/config/popeye-md.test.ts +168 -0
  154. package/tests/pipeline/bridges/review-bridge.test.ts +243 -0
  155. package/tests/pipeline/migration.test.ts +4 -3
  156. package/tests/pipeline/session-guidance.test.ts +205 -0
  157. package/tests/pipeline/skills/constitution-generator.test.ts +201 -0
  158. package/tests/pipeline/skills/generator.test.ts +213 -0
  159. package/tests/pipeline/skills/role-map.test.ts +198 -0
  160. package/tests/types/consensus.test.ts +1 -1
  161. package/tests/workflow/pipeline-bootstrap.test.ts +162 -0
@@ -2,10 +2,15 @@
2
2
  * INTAKE phase — normalize user prompt into structured Master Plan v1.
3
3
  * Reuses expandIdea() and createPlan() from workflow.
4
4
  * v1.1: Creates constitution artifact and stores hash.
5
+ * v1.2: Generates project-specific skills and constitution.
5
6
  */
7
+ import { join } from 'node:path';
6
8
  import { successResult, failureResult } from './phase-context.js';
7
9
  import { generateRepoSnapshot, createSnapshotArtifact } from '../repo-snapshot.js';
8
10
  import { createConstitutionArtifact, computeConstitutionHash } from '../constitution.js';
11
+ import { getActiveRoles, inferTechStack } from '../skills/role-map.js';
12
+ import { generateProjectSkills } from '../skills/generator.js';
13
+ import { generateConstitution } from '../skills/constitution-generator.js';
9
14
  export async function runIntake(context) {
10
15
  const { projectDir, pipeline, artifactManager } = context;
11
16
  const artifacts = [];
@@ -15,21 +20,64 @@ export async function runIntake(context) {
15
20
  const snapshotEntry = createSnapshotArtifact(snapshot, artifactManager, 'INTAKE');
16
21
  artifacts.push(snapshotEntry);
17
22
  pipeline.latestRepoSnapshot = artifactManager.toArtifactRef(snapshotEntry);
18
- // 2. Create constitution artifact and store hash
23
+ // 2. Store additional_context artifact if session guidance provided
24
+ const guidance = pipeline.sessionGuidance ?? '';
25
+ if (guidance) {
26
+ const ctxEntry = artifactManager.createAndStoreText('additional_context', guidance, 'INTAKE');
27
+ artifacts.push(ctxEntry);
28
+ }
29
+ // 3. Push pre-AI artifacts to pipeline state now (survives if AI calls fail below)
30
+ pipeline.artifacts.push(...artifacts);
31
+ // 4. Expand idea using existing workflow
32
+ const { expandIdea, createPlan } = await import('../../workflow/plan-mode.js');
33
+ const expandedIdea = await expandIdea(context.state.specification ?? context.state.idea ?? '', context.state.language);
34
+ // 5. Determine active roles
35
+ const language = context.state.language;
36
+ pipeline.activeRoles = getActiveRoles(language);
37
+ // 6-8. Generate project-specific skills and constitution (non-fatal)
38
+ const skillsDir = join(projectDir, 'skills');
39
+ try {
40
+ const projectName = context.state.name ?? 'Project';
41
+ await generateProjectSkills({
42
+ language,
43
+ expandedSpec: expandedIdea,
44
+ snapshot,
45
+ sessionGuidance: guidance || undefined,
46
+ activeRoles: pipeline.activeRoles,
47
+ skillsDir,
48
+ projectName,
49
+ }, artifactManager);
50
+ const techStack = inferTechStack(language, snapshot, expandedIdea);
51
+ generateConstitution({
52
+ language,
53
+ projectName,
54
+ techStack,
55
+ expandedSpec: expandedIdea,
56
+ sessionGuidance: guidance || undefined,
57
+ skillsDir,
58
+ });
59
+ // Clear skill loader cache so it picks up new .md files
60
+ context.skillLoader.clearCache();
61
+ }
62
+ catch {
63
+ // Skill/constitution generation is non-fatal — pipeline continues with defaults
64
+ }
65
+ // 9. Create constitution artifact and store hash (AFTER generation)
19
66
  const constitutionEntry = createConstitutionArtifact(projectDir, artifactManager);
20
67
  if (constitutionEntry) {
21
68
  artifacts.push(constitutionEntry);
69
+ pipeline.artifacts.push(constitutionEntry);
22
70
  }
23
71
  pipeline.constitutionHash = computeConstitutionHash(projectDir);
24
- // 3. Expand idea using existing workflow
25
- const { expandIdea, createPlan } = await import('../../workflow/plan-mode.js');
26
- const expandedIdea = await expandIdea(context.state.specification ?? context.state.idea ?? '', context.state.language);
27
- // 4. Create master plan using existing workflow
28
- const plan = await createPlan(expandedIdea, '', context.state.language);
29
- // 5. Store master plan as artifact
72
+ // 10. Create master plan prepend guidance so planner sees constraints first
73
+ const planInput = guidance
74
+ ? `${guidance}\n\n---\n\n${expandedIdea}`
75
+ : expandedIdea;
76
+ const plan = await createPlan(planInput, '', context.state.language);
77
+ // 11. Store master plan as artifact
30
78
  const planEntry = artifactManager.createAndStoreText('master_plan', plan, 'INTAKE');
31
79
  artifacts.push(planEntry);
32
- pipeline.artifacts.push(...artifacts);
80
+ pipeline.artifacts.push(planEntry);
33
81
  return successResult('INTAKE', artifacts, 'Master Plan v1 created');
34
82
  }
35
83
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"intake.js","sourceRoot":"","sources":["../../../src/pipeline/phases/intake.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEzF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAqB;IACnD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAC1D,MAAM,SAAS,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,sBAAsB,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QAClF,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9B,QAAQ,CAAC,kBAAkB,GAAG,eAAe,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAE3E,iDAAiD;QACjD,MAAM,iBAAiB,GAAG,0BAA0B,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAClF,IAAI,iBAAiB,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACpC,CAAC;QACD,QAAQ,CAAC,gBAAgB,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAEhE,yCAAyC;QACzC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QAC/E,MAAM,YAAY,GAAG,MAAM,UAAU,CACnC,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EACvD,OAAO,CAAC,KAAK,CAAC,QAAQ,CACvB,CAAC;QAEF,gDAAgD;QAChD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAExE,mCAAmC;QACnC,MAAM,SAAS,GAAG,eAAe,CAAC,kBAAkB,CAClD,aAAa,EACb,IAAI,EACJ,QAAQ,CACT,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAEtC,OAAO,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;QACnF,OAAO,aAAa,CAAC,QAAQ,EAAE,8BAA8B,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"intake.js","sourceRoot":"","sources":["../../../src/pipeline/phases/intake.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-loop.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/recovery-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIpE,wBAAsB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAsFjF"}
1
+ {"version":3,"file":"recovery-loop.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/recovery-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIpE,wBAAsB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAwFjF"}
@@ -25,9 +25,11 @@ export async function runRecoveryLoop(context) {
25
25
  ].join('\n');
26
26
  // 3. Generate RCA via Claude with Debugger skill
27
27
  const { executePrompt } = await import('../../adapters/claude.js');
28
+ const guidance = pipeline.sessionGuidance;
28
29
  const rcaPrompt = [
29
30
  debuggerSkill.systemPrompt,
30
31
  '',
32
+ ...(guidance ? ['## User Guidance', guidance, ''] : []),
31
33
  '## Failure Evidence',
32
34
  failureEvidence,
33
35
  '',
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-loop.js","sourceRoot":"","sources":["../../../src/pipeline/phases/recovery-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recovery-loop.js","sourceRoot":"","sources":["../../../src/pipeline/phases/recovery-loop.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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,CAqEjF"}
@@ -36,10 +36,9 @@ export async function runRolePlanning(context) {
36
36
  }
37
37
  }
38
38
  const { executePrompt } = await import('../../adapters/claude.js');
39
- // Generate plan for each role
39
+ // Generate plan for each role (skip roles not in activeRoles)
40
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')) {
41
+ if (!pipeline.activeRoles.includes(role)) {
43
42
  continue;
44
43
  }
45
44
  const skill = skillLoader.loadSkill(role);
@@ -1 +1 @@
1
- {"version":3,"file":"role-planning.js","sourceRoot":"","sources":["../../../src/pipeline/phases/role-planning.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"role-planning.js","sourceRoot":"","sources":["../../../src/pipeline/phases/role-planning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Deterministic constitution generation — no AI call required.
3
+ * Produces skills/POPEYE_CONSTITUTION.md from templates + inferred tech stack.
4
+ * Includes pipeline governance invariants that never change.
5
+ */
6
+ import type { OutputLanguage } from '../../types/project.js';
7
+ import type { ConstitutionContext, TechStack } from './types.js';
8
+ /**
9
+ * Generate the project constitution file if it doesn't already exist.
10
+ * Entirely deterministic — built from templates and tech stack data.
11
+ *
12
+ * @param context - Constitution generation context
13
+ */
14
+ export declare function generateConstitution(context: ConstitutionContext): void;
15
+ /**
16
+ * Check if constitution generation should be skipped.
17
+ * Returns true if the file already exists (hand-written or prior run).
18
+ *
19
+ * @param skillsDir - Path to the skills directory
20
+ * @returns true if generation should be skipped
21
+ */
22
+ export declare function shouldSkipConstitution(skillsDir: string): boolean;
23
+ /**
24
+ * Generate the tech stack section from inferred stack data.
25
+ *
26
+ * @param techStack - Inferred tech stack
27
+ * @returns Markdown section
28
+ */
29
+ export declare function getTechStackSection(techStack: TechStack): string;
30
+ /**
31
+ * Generate architecture rules based on the tech stack.
32
+ *
33
+ * @param techStack - Inferred tech stack
34
+ * @returns Markdown section
35
+ */
36
+ export declare function getArchitectureRules(techStack: TechStack): string;
37
+ /**
38
+ * Generate code quality rules (constant across all projects).
39
+ *
40
+ * @returns Markdown section
41
+ */
42
+ export declare function getCodeQualityRules(): string;
43
+ /**
44
+ * Generate language-specific and session-specific constraints.
45
+ *
46
+ * @param language - Project language
47
+ * @param sessionGuidance - Optional session guidance text
48
+ * @returns Markdown section
49
+ */
50
+ export declare function getConstraintsSection(language: OutputLanguage, sessionGuidance?: string): string;
51
+ //# sourceMappingURL=constitution-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constitution-generator.d.ts","sourceRoot":"","sources":["../../../src/pipeline/skills/constitution-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AASjE;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAcvE;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAGjE;AAgCD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAUhE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAyCjE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAS5C;AAoBD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CA2BR"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Deterministic constitution generation — no AI call required.
3
+ * Produces skills/POPEYE_CONSTITUTION.md from templates + inferred tech stack.
4
+ * Includes pipeline governance invariants that never change.
5
+ */
6
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ // ─── Constants ──────────────────────────────────────────
9
+ const CONSTITUTION_FILENAME = 'POPEYE_CONSTITUTION.md';
10
+ const PIPELINE_VERSION = '1.0';
11
+ // ─── Public API ─────────────────────────────────────────
12
+ /**
13
+ * Generate the project constitution file if it doesn't already exist.
14
+ * Entirely deterministic — built from templates and tech stack data.
15
+ *
16
+ * @param context - Constitution generation context
17
+ */
18
+ export function generateConstitution(context) {
19
+ const { skillsDir } = context;
20
+ if (shouldSkipConstitution(skillsDir)) {
21
+ return;
22
+ }
23
+ if (!existsSync(skillsDir)) {
24
+ mkdirSync(skillsDir, { recursive: true });
25
+ }
26
+ const content = buildConstitutionContent(context);
27
+ const constitutionPath = join(skillsDir, CONSTITUTION_FILENAME);
28
+ writeFileSync(constitutionPath, content, 'utf-8');
29
+ }
30
+ /**
31
+ * Check if constitution generation should be skipped.
32
+ * Returns true if the file already exists (hand-written or prior run).
33
+ *
34
+ * @param skillsDir - Path to the skills directory
35
+ * @returns true if generation should be skipped
36
+ */
37
+ export function shouldSkipConstitution(skillsDir) {
38
+ const constitutionPath = join(skillsDir, CONSTITUTION_FILENAME);
39
+ return existsSync(constitutionPath);
40
+ }
41
+ // ─── Content Assembly ───────────────────────────────────
42
+ /**
43
+ * Build the full constitution markdown content.
44
+ *
45
+ * @param context - Constitution generation context
46
+ * @returns Complete markdown string
47
+ */
48
+ function buildConstitutionContent(context) {
49
+ const { projectName, language, techStack, sessionGuidance } = context;
50
+ const date = new Date().toISOString().split('T')[0];
51
+ const sections = [
52
+ `# Project Constitution: ${projectName}`,
53
+ '',
54
+ `Generated: ${date} | Language: ${language} | Pipeline: v${PIPELINE_VERSION}`,
55
+ '',
56
+ getTechStackSection(techStack),
57
+ getArchitectureRules(techStack),
58
+ getCodeQualityRules(),
59
+ getGovernanceRules(),
60
+ getConstraintsSection(language, sessionGuidance),
61
+ getImmutabilitySection(),
62
+ ];
63
+ return sections.join('\n');
64
+ }
65
+ // ─── Template Sections ──────────────────────────────────
66
+ /**
67
+ * Generate the tech stack section from inferred stack data.
68
+ *
69
+ * @param techStack - Inferred tech stack
70
+ * @returns Markdown section
71
+ */
72
+ export function getTechStackSection(techStack) {
73
+ const lines = ['## Tech Stack'];
74
+ if (techStack.language)
75
+ lines.push(`- Language: ${techStack.language}`);
76
+ if (techStack.backend)
77
+ lines.push(`- Framework: ${techStack.backend}`);
78
+ if (techStack.frontend)
79
+ lines.push(`- Frontend: ${techStack.frontend}`);
80
+ if (techStack.database)
81
+ lines.push(`- Database: ${techStack.database}`);
82
+ if (techStack.orm)
83
+ lines.push(`- ORM: ${techStack.orm}`);
84
+ if (techStack.testing)
85
+ lines.push(`- Testing: ${techStack.testing}`);
86
+ lines.push('');
87
+ return lines.join('\n');
88
+ }
89
+ /**
90
+ * Generate architecture rules based on the tech stack.
91
+ *
92
+ * @param techStack - Inferred tech stack
93
+ * @returns Markdown section
94
+ */
95
+ export function getArchitectureRules(techStack) {
96
+ const rules = [];
97
+ let ruleNum = 1;
98
+ if (techStack.backend?.includes('FastAPI')) {
99
+ rules.push(`${ruleNum++}. All API endpoints MUST use async/await`);
100
+ }
101
+ if (techStack.backend?.includes('Express')) {
102
+ rules.push(`${ruleNum++}. Use Express middleware pattern for cross-cutting concerns`);
103
+ }
104
+ if (techStack.backend?.includes('Django')) {
105
+ rules.push(`${ruleNum++}. Follow Django app structure conventions`);
106
+ }
107
+ if (techStack.orm?.includes('SQLAlchemy')) {
108
+ rules.push(`${ruleNum++}. Database access exclusively via SQLAlchemy ORM`);
109
+ }
110
+ if (techStack.orm?.includes('Prisma')) {
111
+ rules.push(`${ruleNum++}. Database access exclusively via Prisma client`);
112
+ }
113
+ if (techStack.language?.includes('Python')) {
114
+ rules.push(`${ruleNum++}. Environment variables via python-dotenv, never hardcoded`);
115
+ rules.push(`${ruleNum++}. PEP8 style with type hints on all functions`);
116
+ }
117
+ if (techStack.language?.includes('TypeScript')) {
118
+ rules.push(`${ruleNum++}. TypeScript strict mode, no implicit any`);
119
+ rules.push(`${ruleNum++}. Environment variables via dotenv, never hardcoded`);
120
+ }
121
+ if (techStack.frontend?.includes('React')) {
122
+ rules.push(`${ruleNum++}. React components use functional patterns with hooks`);
123
+ }
124
+ if (techStack.frontend?.includes('Next')) {
125
+ rules.push(`${ruleNum++}. Next.js App Router conventions for routing and layouts`);
126
+ }
127
+ // Always add a generic rule if nothing specific matched
128
+ if (rules.length === 0) {
129
+ rules.push('1. Environment variables never hardcoded in source code');
130
+ rules.push('2. Clear separation of concerns between modules');
131
+ }
132
+ return ['## Architecture Rules', ...rules, ''].join('\n');
133
+ }
134
+ /**
135
+ * Generate code quality rules (constant across all projects).
136
+ *
137
+ * @returns Markdown section
138
+ */
139
+ export function getCodeQualityRules() {
140
+ return [
141
+ '## Code Quality',
142
+ '1. Maximum 500 lines per source file',
143
+ '2. Unit tests for every module (happy path + edge case + failure)',
144
+ '3. Standard logging (no unstructured print statements)',
145
+ '4. Docstrings/JSDoc on public functions',
146
+ '',
147
+ ].join('\n');
148
+ }
149
+ /**
150
+ * Generate governance rules (pipeline invariants, constant).
151
+ *
152
+ * @returns Markdown section
153
+ */
154
+ function getGovernanceRules() {
155
+ return [
156
+ '## Governance Rules',
157
+ '1. Consensus threshold: 0.95 with minimum 2 reviewers',
158
+ '2. All artifacts are immutable once stored (new versions create new files)',
159
+ '3. No placeholder content in production code or generated output',
160
+ '4. Gate failures route to RECOVERY_LOOP before phase retry',
161
+ '5. Constitution modifications during pipeline execution are forbidden',
162
+ '6. Change Requests required for scope changes after INTAKE',
163
+ '',
164
+ ].join('\n');
165
+ }
166
+ /**
167
+ * Generate language-specific and session-specific constraints.
168
+ *
169
+ * @param language - Project language
170
+ * @param sessionGuidance - Optional session guidance text
171
+ * @returns Markdown section
172
+ */
173
+ export function getConstraintsSection(language, sessionGuidance) {
174
+ const lines = ['## Project Constraints'];
175
+ const langConstraints = {
176
+ python: ['- Python 3.11+ required', '- Use virtual environment (venv) for all operations'],
177
+ typescript: ['- Node.js 18+ required', '- ESM modules (import/export, .js extensions)'],
178
+ fullstack: [
179
+ '- Python 3.11+ for backend, Node.js 18+ for frontend',
180
+ '- Monorepo structure with clear app boundaries',
181
+ ],
182
+ website: ['- Node.js 18+ required', '- SSG/SSR optimization for performance and SEO'],
183
+ all: [
184
+ '- Python 3.11+ for backend, Node.js 18+ for frontend and website',
185
+ '- Monorepo structure with clear app boundaries',
186
+ ],
187
+ };
188
+ const constraints = langConstraints[language] ?? langConstraints.python;
189
+ lines.push(...constraints);
190
+ if (sessionGuidance) {
191
+ lines.push('', '### Session-Specific Guidance');
192
+ lines.push(sessionGuidance.slice(0, 500));
193
+ }
194
+ lines.push('');
195
+ return lines.join('\n');
196
+ }
197
+ /**
198
+ * Generate the immutability notice (constant).
199
+ *
200
+ * @returns Markdown section
201
+ */
202
+ function getImmutabilitySection() {
203
+ return [
204
+ '## Immutability',
205
+ 'This document MUST NOT be modified during pipeline execution.',
206
+ 'Any modification triggers constitution verification failure at next gate.',
207
+ '',
208
+ ].join('\n');
209
+ }
210
+ //# sourceMappingURL=constitution-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constitution-generator.js","sourceRoot":"","sources":["../../../src/pipeline/skills/constitution-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Project-specific skill generation.
3
+ * Uses a single AI call to generate tailored system prompts for active roles,
4
+ * then writes them as .md files with YAML frontmatter to the project's skills/ dir.
5
+ * Falls back to defaults with project-specific constraints on AI failure.
6
+ */
7
+ import type { PipelineRole } from '../types.js';
8
+ import type { ArtifactManager } from '../artifact-manager.js';
9
+ import type { SkillGenerationContext, SkillsGenerationMarker, TechStack } from './types.js';
10
+ /**
11
+ * Generate project-specific skill .md files for all active roles.
12
+ * Skips roles that already have a .md file in the skills directory.
13
+ * Stores the raw AI response as a skill_generation_log artifact.
14
+ *
15
+ * @param context - Skill generation context with project details
16
+ * @param artifactManager - Optional artifact manager for logging
17
+ */
18
+ export declare function generateProjectSkills(context: SkillGenerationContext, artifactManager?: ArtifactManager): Promise<void>;
19
+ /**
20
+ * Check if a skill file should be generated for a role.
21
+ * Returns false if the role already has a .md file (hand-written or prior run).
22
+ *
23
+ * @param skillsDir - Path to the skills directory
24
+ * @param role - Pipeline role to check
25
+ * @returns true if the role needs a generated skill file
26
+ */
27
+ export declare function shouldGenerateSkill(skillsDir: string, role: PipelineRole): boolean;
28
+ /**
29
+ * Build the AI prompt that requests system prompts for all roles at once.
30
+ *
31
+ * @param context - Generation context
32
+ * @param roles - Roles needing prompts
33
+ * @param techStack - Inferred tech stack
34
+ * @returns Formatted prompt string
35
+ */
36
+ export declare function buildSkillGenPrompt(context: SkillGenerationContext, roles: PipelineRole[], techStack: TechStack): string;
37
+ /**
38
+ * Parse and validate the AI response as a JSON record of role prompts.
39
+ * Falls back per-role: missing or invalid entries are excluded.
40
+ *
41
+ * @param response - Raw AI response text
42
+ * @param expectedRoles - Roles we requested prompts for
43
+ * @returns Validated record of role -> system prompt
44
+ */
45
+ export declare function parseSkillPrompts(response: string, expectedRoles: PipelineRole[]): Record<string, string>;
46
+ /**
47
+ * Render a skill definition as a Markdown file with YAML frontmatter.
48
+ * Format matches what the SkillLoader's parseSkillMarkdown() expects.
49
+ *
50
+ * @param role - Pipeline role
51
+ * @param systemPrompt - The system prompt body
52
+ * @param constraints - Combined constraint identifiers
53
+ * @param requiredOutputs - Required output types
54
+ * @param dependsOn - Upstream role dependencies
55
+ * @returns Complete markdown string
56
+ */
57
+ export declare function renderSkillMarkdown(role: PipelineRole, systemPrompt: string, constraints: string[], requiredOutputs: string[], dependsOn: PipelineRole[]): string;
58
+ /**
59
+ * Write the generation marker file to track what was generated.
60
+ *
61
+ * @param skillsDir - Path to the skills directory
62
+ * @param marker - Marker data to persist
63
+ */
64
+ export declare function writeGenerationMarker(skillsDir: string, marker: SkillsGenerationMarker): void;
65
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/pipeline/skills/generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAY5F;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,EAC/B,eAAe,CAAC,EAAE,eAAe,GAChC,OAAO,CAAC,IAAI,CAAC,CAuFf;AAID;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAGlF;AAID;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,SAAS,GACnB,MAAM,CAmCR;AAID;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,YAAY,EAAE,GAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EAAE,EACrB,eAAe,EAAE,MAAM,EAAE,EACzB,SAAS,EAAE,YAAY,EAAE,GACxB,MAAM,CAuBR;AAID;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,sBAAsB,GAC7B,IAAI,CAGN"}