ridgeline 0.5.9 → 0.7.2

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 (212) hide show
  1. package/README.md +53 -9
  2. package/dist/agents/core/designer.md +131 -0
  3. package/dist/agents/core/refiner.md +61 -0
  4. package/dist/agents/core/researcher.md +78 -0
  5. package/dist/agents/core/specifier.md +16 -0
  6. package/dist/agents/researchers/academic.md +27 -0
  7. package/dist/agents/researchers/competitive.md +28 -0
  8. package/dist/agents/researchers/context.md +46 -0
  9. package/dist/agents/researchers/ecosystem.md +28 -0
  10. package/dist/agents/researchers/gaps.md +67 -0
  11. package/dist/agents/specifiers/visual-coherence.md +55 -0
  12. package/dist/cli.js +83 -1
  13. package/dist/cli.js.map +1 -1
  14. package/dist/commands/create.js +20 -2
  15. package/dist/commands/create.js.map +1 -1
  16. package/dist/commands/design.d.ts +8 -0
  17. package/dist/commands/design.js +130 -0
  18. package/dist/commands/design.js.map +1 -0
  19. package/dist/commands/index.d.ts +1 -0
  20. package/dist/commands/index.js +3 -1
  21. package/dist/commands/index.js.map +1 -1
  22. package/dist/commands/plan.js +3 -3
  23. package/dist/commands/plan.js.map +1 -1
  24. package/dist/commands/qa-workflow.d.ts +33 -0
  25. package/dist/commands/qa-workflow.js +139 -0
  26. package/dist/commands/qa-workflow.js.map +1 -0
  27. package/dist/commands/refine.d.ts +8 -0
  28. package/dist/commands/refine.js +105 -0
  29. package/dist/commands/refine.js.map +1 -0
  30. package/dist/commands/research.d.ts +10 -0
  31. package/dist/commands/research.js +146 -0
  32. package/dist/commands/research.js.map +1 -0
  33. package/dist/commands/rewind.js +5 -3
  34. package/dist/commands/rewind.js.map +1 -1
  35. package/dist/commands/shape.js +36 -121
  36. package/dist/commands/shape.js.map +1 -1
  37. package/dist/commands/spec.js +1 -0
  38. package/dist/commands/spec.js.map +1 -1
  39. package/dist/engine/claude/stream.display.js +0 -1
  40. package/dist/engine/claude/stream.display.js.map +1 -1
  41. package/dist/engine/claude/stream.parse.d.ts +1 -15
  42. package/dist/engine/claude/stream.parse.js +3 -21
  43. package/dist/engine/claude/stream.parse.js.map +1 -1
  44. package/dist/engine/claude/stream.result.js +2 -2
  45. package/dist/engine/claude/stream.types.d.ts +15 -0
  46. package/dist/engine/claude/stream.types.js +23 -0
  47. package/dist/engine/claude/stream.types.js.map +1 -0
  48. package/dist/engine/discovery/agent.registry.d.ts +4 -0
  49. package/dist/engine/discovery/agent.registry.js +46 -18
  50. package/dist/engine/discovery/agent.registry.js.map +1 -1
  51. package/dist/engine/discovery/flavour.config.d.ts +9 -0
  52. package/dist/engine/discovery/flavour.config.js +61 -0
  53. package/dist/engine/discovery/flavour.config.js.map +1 -0
  54. package/dist/engine/discovery/plugin.scan.d.ts +1 -0
  55. package/dist/engine/discovery/plugin.scan.js +29 -1
  56. package/dist/engine/discovery/plugin.scan.js.map +1 -1
  57. package/dist/engine/discovery/skill.check.d.ts +19 -0
  58. package/dist/engine/discovery/skill.check.js +145 -0
  59. package/dist/engine/discovery/skill.check.js.map +1 -0
  60. package/dist/engine/pipeline/build.exec.js +1 -0
  61. package/dist/engine/pipeline/build.exec.js.map +1 -1
  62. package/dist/engine/pipeline/ensemble.exec.d.ts +12 -1
  63. package/dist/engine/pipeline/ensemble.exec.js +20 -10
  64. package/dist/engine/pipeline/ensemble.exec.js.map +1 -1
  65. package/dist/engine/pipeline/phase.sequence.js +10 -10
  66. package/dist/engine/pipeline/phase.sequence.js.map +1 -1
  67. package/dist/engine/pipeline/pipeline.shared.d.ts +6 -0
  68. package/dist/engine/pipeline/pipeline.shared.js +24 -1
  69. package/dist/engine/pipeline/pipeline.shared.js.map +1 -1
  70. package/dist/engine/pipeline/plan.exec.js +1 -0
  71. package/dist/engine/pipeline/plan.exec.js.map +1 -1
  72. package/dist/engine/pipeline/refine.exec.d.ts +10 -0
  73. package/dist/engine/pipeline/refine.exec.js +91 -0
  74. package/dist/engine/pipeline/refine.exec.js.map +1 -0
  75. package/dist/engine/pipeline/research.exec.d.ts +17 -0
  76. package/dist/engine/pipeline/research.exec.js +196 -0
  77. package/dist/engine/pipeline/research.exec.js.map +1 -0
  78. package/dist/engine/pipeline/review.exec.js +23 -0
  79. package/dist/engine/pipeline/review.exec.js.map +1 -1
  80. package/dist/engine/pipeline/specify.exec.d.ts +1 -0
  81. package/dist/engine/pipeline/specify.exec.js +114 -44
  82. package/dist/engine/pipeline/specify.exec.js.map +1 -1
  83. package/dist/flavours/data-analysis/core/refiner.md +65 -0
  84. package/dist/flavours/data-analysis/core/researcher.md +81 -0
  85. package/dist/flavours/data-analysis/researchers/academic.md +29 -0
  86. package/dist/flavours/data-analysis/researchers/competitive.md +29 -0
  87. package/dist/flavours/data-analysis/researchers/ecosystem.md +29 -0
  88. package/dist/flavours/data-analysis/researchers/gaps.md +59 -0
  89. package/dist/flavours/game-dev/core/refiner.md +65 -0
  90. package/dist/flavours/game-dev/core/researcher.md +81 -0
  91. package/dist/flavours/game-dev/researchers/academic.md +31 -0
  92. package/dist/flavours/game-dev/researchers/competitive.md +30 -0
  93. package/dist/flavours/game-dev/researchers/ecosystem.md +29 -0
  94. package/dist/flavours/game-dev/researchers/gaps.md +59 -0
  95. package/dist/flavours/legal-drafting/core/refiner.md +65 -0
  96. package/dist/flavours/legal-drafting/core/researcher.md +81 -0
  97. package/dist/flavours/legal-drafting/researchers/academic.md +31 -0
  98. package/dist/flavours/legal-drafting/researchers/competitive.md +31 -0
  99. package/dist/flavours/legal-drafting/researchers/ecosystem.md +30 -0
  100. package/dist/flavours/legal-drafting/researchers/gaps.md +59 -0
  101. package/dist/flavours/machine-learning/core/refiner.md +65 -0
  102. package/dist/flavours/machine-learning/core/researcher.md +81 -0
  103. package/dist/flavours/machine-learning/researchers/academic.md +32 -0
  104. package/dist/flavours/machine-learning/researchers/competitive.md +32 -0
  105. package/dist/flavours/machine-learning/researchers/ecosystem.md +31 -0
  106. package/dist/flavours/machine-learning/researchers/gaps.md +59 -0
  107. package/dist/flavours/mobile-app/core/refiner.md +65 -0
  108. package/dist/flavours/mobile-app/core/researcher.md +81 -0
  109. package/dist/flavours/mobile-app/researchers/academic.md +31 -0
  110. package/dist/flavours/mobile-app/researchers/competitive.md +32 -0
  111. package/dist/flavours/mobile-app/researchers/ecosystem.md +31 -0
  112. package/dist/flavours/mobile-app/researchers/gaps.md +59 -0
  113. package/dist/flavours/music-composition/core/refiner.md +65 -0
  114. package/dist/flavours/music-composition/core/researcher.md +81 -0
  115. package/dist/flavours/music-composition/researchers/academic.md +32 -0
  116. package/dist/flavours/music-composition/researchers/competitive.md +32 -0
  117. package/dist/flavours/music-composition/researchers/ecosystem.md +32 -0
  118. package/dist/flavours/music-composition/researchers/gaps.md +59 -0
  119. package/dist/flavours/novel-writing/core/refiner.md +65 -0
  120. package/dist/flavours/novel-writing/core/researcher.md +81 -0
  121. package/dist/flavours/novel-writing/researchers/academic.md +32 -0
  122. package/dist/flavours/novel-writing/researchers/competitive.md +32 -0
  123. package/dist/flavours/novel-writing/researchers/ecosystem.md +32 -0
  124. package/dist/flavours/novel-writing/researchers/gaps.md +59 -0
  125. package/dist/flavours/screenwriting/core/refiner.md +65 -0
  126. package/dist/flavours/screenwriting/core/researcher.md +81 -0
  127. package/dist/flavours/screenwriting/researchers/academic.md +32 -0
  128. package/dist/flavours/screenwriting/researchers/competitive.md +32 -0
  129. package/dist/flavours/screenwriting/researchers/ecosystem.md +32 -0
  130. package/dist/flavours/screenwriting/researchers/gaps.md +59 -0
  131. package/dist/flavours/security-audit/core/refiner.md +65 -0
  132. package/dist/flavours/security-audit/core/researcher.md +81 -0
  133. package/dist/flavours/security-audit/researchers/academic.md +32 -0
  134. package/dist/flavours/security-audit/researchers/competitive.md +32 -0
  135. package/dist/flavours/security-audit/researchers/ecosystem.md +32 -0
  136. package/dist/flavours/security-audit/researchers/gaps.md +59 -0
  137. package/dist/flavours/software-engineering/core/builder.md +2 -0
  138. package/dist/flavours/software-engineering/core/refiner.md +65 -0
  139. package/dist/flavours/software-engineering/core/researcher.md +81 -0
  140. package/dist/flavours/software-engineering/core/reviewer.md +2 -0
  141. package/dist/flavours/software-engineering/flavour.json +7 -0
  142. package/dist/flavours/software-engineering/researchers/academic.md +32 -0
  143. package/dist/flavours/software-engineering/researchers/competitive.md +32 -0
  144. package/dist/flavours/software-engineering/researchers/ecosystem.md +32 -0
  145. package/dist/flavours/software-engineering/researchers/gaps.md +59 -0
  146. package/dist/flavours/technical-writing/core/refiner.md +65 -0
  147. package/dist/flavours/technical-writing/core/researcher.md +81 -0
  148. package/dist/flavours/technical-writing/researchers/academic.md +32 -0
  149. package/dist/flavours/technical-writing/researchers/competitive.md +32 -0
  150. package/dist/flavours/technical-writing/researchers/ecosystem.md +32 -0
  151. package/dist/flavours/technical-writing/researchers/gaps.md +59 -0
  152. package/dist/flavours/test-suite/core/refiner.md +65 -0
  153. package/dist/flavours/test-suite/core/researcher.md +81 -0
  154. package/dist/flavours/test-suite/researchers/academic.md +32 -0
  155. package/dist/flavours/test-suite/researchers/competitive.md +32 -0
  156. package/dist/flavours/test-suite/researchers/ecosystem.md +32 -0
  157. package/dist/flavours/test-suite/researchers/gaps.md +59 -0
  158. package/dist/flavours/translation/core/refiner.md +65 -0
  159. package/dist/flavours/translation/core/researcher.md +81 -0
  160. package/dist/flavours/translation/researchers/academic.md +32 -0
  161. package/dist/flavours/translation/researchers/competitive.md +32 -0
  162. package/dist/flavours/translation/researchers/ecosystem.md +32 -0
  163. package/dist/flavours/translation/researchers/gaps.md +59 -0
  164. package/dist/flavours/web-game/core/builder.md +123 -0
  165. package/dist/flavours/web-game/core/reviewer.md +159 -0
  166. package/dist/flavours/web-game/flavour.json +9 -0
  167. package/dist/flavours/web-ui/core/builder.md +117 -0
  168. package/dist/flavours/web-ui/core/reviewer.md +155 -0
  169. package/dist/flavours/web-ui/flavour.json +10 -0
  170. package/dist/plugin/visual-tools/plugin.json +4 -0
  171. package/dist/plugin/visual-tools/skills/a11y-audit/SKILL.md +57 -0
  172. package/dist/plugin/visual-tools/skills/agent-browser/SKILL.md +56 -0
  173. package/dist/plugin/visual-tools/skills/agent-browser/references/viewports.md +17 -0
  174. package/dist/plugin/visual-tools/skills/canvas-screenshot/SKILL.md +84 -0
  175. package/dist/plugin/visual-tools/skills/css-audit/SKILL.md +50 -0
  176. package/dist/plugin/visual-tools/skills/lighthouse/SKILL.md +58 -0
  177. package/dist/plugin/visual-tools/skills/shader-validate/SKILL.md +77 -0
  178. package/dist/plugin/visual-tools/skills/visual-diff/SKILL.md +68 -0
  179. package/dist/shapes/detect.d.ts +8 -0
  180. package/dist/shapes/detect.js +87 -0
  181. package/dist/shapes/detect.js.map +1 -0
  182. package/dist/shapes/game-visual.json +8 -0
  183. package/dist/shapes/print-layout.json +8 -0
  184. package/dist/shapes/web-visual.json +9 -0
  185. package/dist/stores/budget.js +2 -1
  186. package/dist/stores/budget.js.map +1 -1
  187. package/dist/stores/feedback.format.d.ts +3 -0
  188. package/dist/stores/feedback.format.js +62 -0
  189. package/dist/stores/feedback.format.js.map +1 -0
  190. package/dist/stores/feedback.parse.d.ts +2 -0
  191. package/dist/stores/feedback.parse.js +121 -0
  192. package/dist/stores/feedback.parse.js.map +1 -0
  193. package/dist/stores/feedback.verdict.d.ts +2 -4
  194. package/dist/stores/feedback.verdict.js +7 -175
  195. package/dist/stores/feedback.verdict.js.map +1 -1
  196. package/dist/stores/index.d.ts +1 -1
  197. package/dist/stores/index.js +1 -2
  198. package/dist/stores/index.js.map +1 -1
  199. package/dist/stores/settings.d.ts +2 -0
  200. package/dist/stores/settings.js +24 -1
  201. package/dist/stores/settings.js.map +1 -1
  202. package/dist/stores/state.d.ts +4 -0
  203. package/dist/stores/state.js +75 -12
  204. package/dist/stores/state.js.map +1 -1
  205. package/dist/stores/trajectory.d.ts +2 -3
  206. package/dist/stores/trajectory.js +6 -7
  207. package/dist/stores/trajectory.js.map +1 -1
  208. package/dist/types.d.ts +15 -3
  209. package/dist/utils/atomic-write.d.ts +6 -0
  210. package/dist/utils/atomic-write.js +62 -0
  211. package/dist/utils/atomic-write.js.map +1 -0
  212. package/package.json +2 -2
@@ -33,8 +33,9 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.commonInvokeOptions = exports.appendConstraintsAndTaste = exports.formatProposalHeading = exports.createStderrHandler = exports.prepareAgentsAndPlugins = void 0;
36
+ exports.commonInvokeOptions = exports.appendDesign = exports.appendConstraintsAndTaste = exports.formatProposalHeading = exports.createStderrHandler = exports.prepareAgentsAndPlugins = void 0;
37
37
  const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
38
39
  const agent_registry_1 = require("../discovery/agent.registry");
39
40
  const flavour_resolve_1 = require("../discovery/flavour.resolve");
40
41
  const plugin_scan_1 = require("../discovery/plugin.scan");
@@ -103,6 +104,28 @@ const appendConstraintsAndTaste = (sections, config) => {
103
104
  }
104
105
  };
105
106
  exports.appendConstraintsAndTaste = appendConstraintsAndTaste;
107
+ /**
108
+ * Append design.md sections to a prompt sections array.
109
+ * Checks both project-level (.ridgeline/design.md) and feature-level (buildDir/design.md).
110
+ * Both can coexist — injected as separate labeled sections.
111
+ */
112
+ const appendDesign = (sections, config) => {
113
+ const projectDesignPath = path.join(config.ridgelineDir, "design.md");
114
+ const featureDesignPath = path.join(config.buildDir, "design.md");
115
+ const hasProject = fs.existsSync(projectDesignPath);
116
+ const hasFeature = fs.existsSync(featureDesignPath);
117
+ if (hasProject) {
118
+ sections.push("## Project Design\n");
119
+ sections.push(fs.readFileSync(projectDesignPath, "utf-8"));
120
+ sections.push("");
121
+ }
122
+ if (hasFeature) {
123
+ sections.push("## Feature Design\n");
124
+ sections.push(fs.readFileSync(featureDesignPath, "utf-8"));
125
+ sections.push("");
126
+ }
127
+ };
128
+ exports.appendDesign = appendDesign;
106
129
  /**
107
130
  * Build the common invokeClaude options shared across pipeline agents.
108
131
  */
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.shared.js","sourceRoot":"","sources":["../../../src/engine/pipeline/pipeline.shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.shared.js","sourceRoot":"","sources":["../../../src/engine/pipeline/pipeline.shared.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,7 @@ const assembleBaseUserPrompt = (config) => {
45
45
  sections.push(fs.readFileSync(specPath, "utf-8"));
46
46
  sections.push("");
47
47
  (0, pipeline_shared_1.appendConstraintsAndTaste)(sections, config);
48
+ (0, pipeline_shared_1.appendDesign)(sections, config);
48
49
  sections.push("## Target Model\n");
49
50
  sections.push(`The builder will use the \`${config.model}\` model.`);
50
51
  return sections.join("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"plan.exec.js","sourceRoot":"","sources":["../../../src/engine/pipeline/plan.exec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AAEjC,uDAA6D;AAE7D,8FAA8F;AACvF,MAAM,sBAAsB,GAAG,CAAC,MAAuB,EAAU,EAAE;IACxE,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACtD,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEjB,IAAA,2CAAyB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAE3C,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAClC,QAAQ,CAAC,IAAI,CAAC,8BAA8B,MAAM,CAAC,KAAK,WAAW,CAAC,CAAA;IAEpE,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC,CAAA;AAdY,QAAA,sBAAsB,0BAclC"}
1
+ {"version":3,"file":"plan.exec.js","sourceRoot":"","sources":["../../../src/engine/pipeline/plan.exec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AAEjC,uDAA2E;AAE3E,8FAA8F;AACvF,MAAM,sBAAsB,GAAG,CAAC,MAAuB,EAAU,EAAE;IACxE,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACtD,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEjB,IAAA,2CAAyB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC3C,IAAA,8BAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAE9B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAClC,QAAQ,CAAC,IAAI,CAAC,8BAA8B,MAAM,CAAC,KAAK,WAAW,CAAC,CAAA;IAEpE,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC,CAAA;AAfY,QAAA,sBAAsB,0BAelC"}
@@ -0,0 +1,10 @@
1
+ import { ClaudeResult } from "../../types";
2
+ export type RefineConfig = {
3
+ model: string;
4
+ timeoutMinutes: number;
5
+ buildDir: string;
6
+ flavour: string | null;
7
+ changelogMd: string | null;
8
+ iterationNumber: number;
9
+ };
10
+ export declare const invokeRefiner: (specMd: string, researchMd: string, constraintsMd: string, tasteMd: string | null, config: RefineConfig) => Promise<ClaudeResult>;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.invokeRefiner = void 0;
37
+ const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
39
+ const claude_exec_1 = require("../claude/claude.exec");
40
+ const stream_display_1 = require("../claude/stream.display");
41
+ const agent_registry_1 = require("../discovery/agent.registry");
42
+ const flavour_resolve_1 = require("../discovery/flavour.resolve");
43
+ const pipeline_shared_1 = require("./pipeline.shared");
44
+ const research_exec_1 = require("./research.exec");
45
+ const invokeRefiner = async (specMd, researchMd, constraintsMd, tasteMd, config) => {
46
+ const registry = (0, agent_registry_1.buildAgentRegistry)((0, flavour_resolve_1.resolveFlavour)(config.flavour));
47
+ const systemPrompt = registry.getCorePrompt("refiner.md");
48
+ const sections = (0, research_exec_1.assembleInputSections)(specMd, constraintsMd, tasteMd);
49
+ // Insert research.md after spec.md section
50
+ const constraintsIdx = sections.indexOf("## constraints.md\n");
51
+ sections.splice(constraintsIdx, 0, "## research.md\n", researchMd, "");
52
+ // Insert spec.changelog.md after research.md (if it exists)
53
+ if (config.changelogMd) {
54
+ const newConstraintsIdx = sections.indexOf("## constraints.md\n");
55
+ sections.splice(newConstraintsIdx, 0, "## spec.changelog.md (your prior changes)\n", config.changelogMd, "");
56
+ }
57
+ sections.push("## Output\n");
58
+ sections.push(`1. Rewrite the spec incorporating research findings. Write the revised spec to: ${config.buildDir}/spec.md`);
59
+ sections.push(`2. Document your changes. Write the changelog to: ${config.buildDir}/spec.changelog.md`);
60
+ sections.push(` - ${config.changelogMd ? "Read the existing spec.changelog.md first, then prepend" : "Create"} a new ## Iteration ${config.iterationNumber} section.`);
61
+ sections.push("Use the Write tool for both files.");
62
+ const userPrompt = sections.join("\n");
63
+ const { onStdout, flush } = (0, stream_display_1.createDisplayCallbacks)({ projectRoot: process.cwd() });
64
+ let result;
65
+ try {
66
+ result = await (0, claude_exec_1.invokeClaude)({
67
+ systemPrompt,
68
+ userPrompt,
69
+ model: config.model,
70
+ allowedTools: ["Read", "Write"],
71
+ cwd: process.cwd(),
72
+ timeoutMs: config.timeoutMinutes * 60 * 1000,
73
+ onStdout,
74
+ onStderr: (0, pipeline_shared_1.createStderrHandler)("refiner"),
75
+ });
76
+ }
77
+ finally {
78
+ flush();
79
+ }
80
+ // Verify spec.md was rewritten
81
+ if (!fs.existsSync(path.join(config.buildDir, "spec.md"))) {
82
+ throw new Error("Refiner did not write spec.md");
83
+ }
84
+ // Verify spec.changelog.md was written
85
+ if (!fs.existsSync(path.join(config.buildDir, "spec.changelog.md"))) {
86
+ throw new Error("Refiner did not write spec.changelog.md");
87
+ }
88
+ return result;
89
+ };
90
+ exports.invokeRefiner = invokeRefiner;
91
+ //# sourceMappingURL=refine.exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refine.exec.js","sourceRoot":"","sources":["../../../src/engine/pipeline/refine.exec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AAEjC,uDAAoD;AACpD,6DAAiE;AACjE,gEAAgE;AAChE,kEAA6D;AAC7D,uDAAuD;AACvD,mDAAuD;AAehD,MAAM,aAAa,GAAG,KAAK,EAChC,MAAc,EACd,UAAkB,EAClB,aAAqB,EACrB,OAAsB,EACtB,MAAoB,EACG,EAAE;IACzB,MAAM,QAAQ,GAAG,IAAA,mCAAkB,EAAC,IAAA,gCAAc,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IACnE,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;IAEzD,MAAM,QAAQ,GAAG,IAAA,qCAAqB,EAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;IAEtE,2CAA2C;IAC3C,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC9D,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,kBAAkB,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;IAEtE,4DAA4D;IAC5D,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QACjE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,EAAE,6CAA6C,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IAC9G,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC5B,QAAQ,CAAC,IAAI,CAAC,mFAAmF,MAAM,CAAC,QAAQ,UAAU,CAAC,CAAA;IAC3H,QAAQ,CAAC,IAAI,CAAC,qDAAqD,MAAM,CAAC,QAAQ,oBAAoB,CAAC,CAAA;IACvG,QAAQ,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC,QAAQ,uBAAuB,MAAM,CAAC,eAAe,WAAW,CAAC,CAAA;IACxK,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAEnD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEtC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAA,uCAAsB,EAAC,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAElF,IAAI,MAAoB,CAAA;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAA,0BAAY,EAAC;YAC1B,YAAY;YACZ,UAAU;YACV,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;YAC/B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,SAAS,EAAE,MAAM,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI;YAC5C,QAAQ;YACR,QAAQ,EAAE,IAAA,qCAAmB,EAAC,SAAS,CAAC;SACzC,CAAC,CAAA;IACJ,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,CAAA;IACT,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAED,uCAAuC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAC5D,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AA3DY,QAAA,aAAa,iBA2DzB"}
@@ -0,0 +1,17 @@
1
+ import { EnsembleResult } from "../../types";
2
+ /** Build the common spec + constraints + taste sections for research/refine prompts. */
3
+ export declare const assembleInputSections: (specMd: string, constraintsMd: string, tasteMd: string | null) => string[];
4
+ export type ResearchConfig = {
5
+ model: string;
6
+ timeoutMinutes: number;
7
+ maxBudgetUsd: number | null;
8
+ buildDir: string;
9
+ flavour: string | null;
10
+ isDeep: boolean;
11
+ networkAllowlist: string[];
12
+ sandboxProvider?: import("../../types").RidgelineConfig["sandboxProvider"];
13
+ existingResearchMd: string | null;
14
+ changelogMd: string | null;
15
+ iterationNumber: number;
16
+ };
17
+ export declare const invokeResearcher: (specMd: string, constraintsMd: string, tasteMd: string | null, config: ResearchConfig) => Promise<EnsembleResult>;
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.invokeResearcher = exports.assembleInputSections = void 0;
37
+ const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
39
+ const ensemble_exec_1 = require("./ensemble.exec");
40
+ const claude_exec_1 = require("../claude/claude.exec");
41
+ const agent_registry_1 = require("../discovery/agent.registry");
42
+ const flavour_resolve_1 = require("../discovery/flavour.resolve");
43
+ const pipeline_shared_1 = require("./pipeline.shared");
44
+ // ---------------------------------------------------------------------------
45
+ // Shared prompt helpers
46
+ // ---------------------------------------------------------------------------
47
+ /** Build the common spec + constraints + taste sections for research/refine prompts. */
48
+ const assembleInputSections = (specMd, constraintsMd, tasteMd) => {
49
+ const sections = [];
50
+ sections.push("## spec.md\n");
51
+ sections.push(specMd);
52
+ sections.push("");
53
+ sections.push("## constraints.md\n");
54
+ sections.push(constraintsMd);
55
+ sections.push("");
56
+ if (tasteMd) {
57
+ sections.push("## taste.md\n");
58
+ sections.push(tasteMd);
59
+ sections.push("");
60
+ }
61
+ return sections;
62
+ };
63
+ exports.assembleInputSections = assembleInputSections;
64
+ // ---------------------------------------------------------------------------
65
+ // Research agenda
66
+ // ---------------------------------------------------------------------------
67
+ const AGENDA_SYSTEM_PROMPT = `You are a research agenda planner. Given a specification and a domain gap checklist, identify what the spec is missing or vague about, and produce a focused research agenda.
68
+
69
+ Your output is a markdown research agenda that will be given to research specialists to focus their web searches. Be specific — name the gaps, suggest search terms, and prioritize by impact.
70
+
71
+ If prior research findings are provided, note which areas are already well-covered and should not be re-researched unless contradictory information is found. Focus the agenda on unexplored territory.
72
+
73
+ Keep your response concise — under 500 words. No preamble.`;
74
+ const buildAgendaUserPrompt = (specMd, gapsMd, existingResearchMd, changelogMd) => {
75
+ const sections = [];
76
+ sections.push("## spec.md\n");
77
+ sections.push(specMd);
78
+ sections.push("");
79
+ if (gapsMd) {
80
+ sections.push("## Domain Gap Checklist\n");
81
+ sections.push(gapsMd);
82
+ sections.push("");
83
+ }
84
+ if (existingResearchMd) {
85
+ sections.push("## Prior Research (already conducted)\n");
86
+ sections.push(existingResearchMd);
87
+ sections.push("");
88
+ }
89
+ if (changelogMd) {
90
+ sections.push("## Spec Changelog (recommendations already incorporated)\n");
91
+ sections.push(changelogMd);
92
+ sections.push("");
93
+ }
94
+ sections.push("Produce a focused research agenda identifying gaps and specific questions for specialists to investigate.");
95
+ return sections.join("\n");
96
+ };
97
+ const buildResearchAgenda = async (specMd, gapsMd, existingResearchMd, changelogMd, model, timeoutMinutes) => {
98
+ const result = await (0, claude_exec_1.invokeClaude)({
99
+ systemPrompt: AGENDA_SYSTEM_PROMPT,
100
+ userPrompt: buildAgendaUserPrompt(specMd, gapsMd, existingResearchMd, changelogMd),
101
+ model: "sonnet",
102
+ allowedTools: [],
103
+ cwd: process.cwd(),
104
+ timeoutMs: Math.min(timeoutMinutes * 60 * 1000, 3 * 60 * 1000), // cap at 3 min
105
+ onStderr: (0, pipeline_shared_1.createStderrHandler)("agenda"),
106
+ });
107
+ return result.result ?? "";
108
+ };
109
+ // ---------------------------------------------------------------------------
110
+ // Prompt construction
111
+ // ---------------------------------------------------------------------------
112
+ /** Build a research specialist system prompt from shared context + overlay. */
113
+ const buildResearchSpecialistPrompt = (context, overlay) => {
114
+ return `${context}\n\n${overlay}`;
115
+ };
116
+ /** Assemble the user prompt for a research specialist. */
117
+ const assembleSpecialistUserPrompt = (specMd, constraintsMd, tasteMd, agenda) => {
118
+ const sections = (0, exports.assembleInputSections)(specMd, constraintsMd, tasteMd);
119
+ if (agenda) {
120
+ sections.push("## Research Agenda\n");
121
+ sections.push("The following gaps and questions were identified. Focus your research on these areas:\n");
122
+ sections.push(agenda);
123
+ sections.push("");
124
+ }
125
+ sections.push("Research this spec thoroughly using your web tools. Produce a markdown research report as your response.");
126
+ return sections.join("\n");
127
+ };
128
+ /** Assemble the user prompt for the research synthesizer. */
129
+ const assembleSynthesizerUserPrompt = (specMd, buildDir, drafts, existingResearchMd, changelogMd, iterationNumber) => {
130
+ const sections = [];
131
+ sections.push("## spec.md\n");
132
+ sections.push(specMd);
133
+ sections.push("");
134
+ sections.push("## Specialist Research Reports\n");
135
+ for (const { perspective, draft } of drafts) {
136
+ sections.push(`### ${perspective.charAt(0).toUpperCase() + perspective.slice(1)} Specialist Report\n`);
137
+ sections.push(draft);
138
+ sections.push("\n---\n");
139
+ }
140
+ if (existingResearchMd) {
141
+ sections.push("## Existing research.md (to be updated, not replaced)\n");
142
+ sections.push(existingResearchMd);
143
+ sections.push("");
144
+ }
145
+ if (changelogMd) {
146
+ sections.push("## spec.changelog.md (recommendations already acted on)\n");
147
+ sections.push(changelogMd);
148
+ sections.push("");
149
+ }
150
+ sections.push("## Current Iteration\n");
151
+ sections.push(`Iteration: ${iterationNumber}`);
152
+ sections.push("");
153
+ sections.push("## Output\n");
154
+ sections.push(`Write the ${existingResearchMd ? "updated" : "new"} research report to: ${buildDir}/research.md`);
155
+ sections.push("Use the Write tool to create the file.");
156
+ return sections.join("\n");
157
+ };
158
+ const invokeResearcher = async (specMd, constraintsMd, tasteMd, config) => {
159
+ const registry = (0, agent_registry_1.buildAgentRegistry)((0, flavour_resolve_1.resolveFlavour)(config.flavour));
160
+ const context = registry.getContext("researchers") ?? "";
161
+ const gapsMd = registry.getGaps("researchers");
162
+ const allSpecialists = registry.getSpecialists("researchers");
163
+ // Quick mode: use only the first specialist (ecosystem by default — most broadly useful)
164
+ // Deep mode: use all specialists
165
+ const specialists = config.isDeep
166
+ ? allSpecialists
167
+ : allSpecialists.length > 0
168
+ ? [allSpecialists[0]]
169
+ : [];
170
+ // Build a research agenda before dispatching specialists
171
+ const agenda = await buildResearchAgenda(specMd, gapsMd, config.existingResearchMd, config.changelogMd, config.model, config.timeoutMinutes);
172
+ return (0, ensemble_exec_1.invokeEnsemble)({
173
+ label: "Researching",
174
+ specialists,
175
+ isStructured: false,
176
+ buildSpecialistPrompt: (overlay) => buildResearchSpecialistPrompt(context, overlay),
177
+ specialistUserPrompt: assembleSpecialistUserPrompt(specMd, constraintsMd, tasteMd, agenda || null),
178
+ specialistSchema: "", // unused when isStructured is false
179
+ specialistTools: ["WebFetch", "WebSearch", "Bash"],
180
+ synthesizerPrompt: registry.getCorePrompt("researcher.md"),
181
+ buildSynthesizerUserPrompt: (drafts) => assembleSynthesizerUserPrompt(specMd, config.buildDir, drafts, config.existingResearchMd, config.changelogMd, config.iterationNumber),
182
+ synthesizerTools: ["Write"],
183
+ model: config.model,
184
+ timeoutMinutes: config.timeoutMinutes,
185
+ maxBudgetUsd: config.maxBudgetUsd,
186
+ networkAllowlist: config.networkAllowlist,
187
+ sandboxProvider: config.sandboxProvider,
188
+ verify: () => {
189
+ if (!fs.existsSync(path.join(config.buildDir, "research.md"))) {
190
+ throw new Error("Synthesizer did not create research.md");
191
+ }
192
+ },
193
+ });
194
+ };
195
+ exports.invokeResearcher = invokeResearcher;
196
+ //# sourceMappingURL=research.exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research.exec.js","sourceRoot":"","sources":["../../../src/engine/pipeline/research.exec.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,8 @@ const plugin_scan_1 = require("../discovery/plugin.scan");
43
43
  const agent_registry_1 = require("../discovery/agent.registry");
44
44
  const flavour_resolve_1 = require("../discovery/flavour.resolve");
45
45
  const pipeline_shared_1 = require("./pipeline.shared");
46
+ const state_1 = require("../../stores/state");
47
+ const detect_1 = require("../../shapes/detect");
46
48
  const assembleUserPrompt = (config, phase, checkpointTag) => {
47
49
  const sections = [];
48
50
  sections.push("## Phase Spec\n");
@@ -62,6 +64,27 @@ const assembleUserPrompt = (config, phase, checkpointTag) => {
62
64
  sections.push("## constraints.md\n");
63
65
  sections.push(fs.readFileSync(config.constraintsPath, "utf-8"));
64
66
  sections.push("");
67
+ // Inject design.md
68
+ (0, pipeline_shared_1.appendDesign)(sections, config);
69
+ // Inject reviewer context from matched shapes
70
+ const matchedShapeNames = (0, state_1.getMatchedShapes)(config.buildDir);
71
+ if (matchedShapeNames.length > 0) {
72
+ const allDefs = (0, detect_1.loadShapeDefinitions)();
73
+ const matchedDefs = allDefs.filter((d) => matchedShapeNames.includes(d.name));
74
+ if (matchedDefs.length > 0) {
75
+ sections.push("## Visual Design Review Context\n");
76
+ sections.push("The following visual design heuristics apply to this phase:\n");
77
+ for (const def of matchedDefs) {
78
+ sections.push(`### ${def.name}\n`);
79
+ sections.push(def.reviewerContext);
80
+ sections.push("");
81
+ }
82
+ sections.push("**Review rules for design.md:**");
83
+ sections.push("- Hard token violations (specific values with imperative language) → severity: blocking");
84
+ sections.push("- Soft guidance deviations (directional language) → severity: suggestion");
85
+ sections.push("");
86
+ }
87
+ }
65
88
  return sections.join("\n");
66
89
  };
67
90
  const invokeReviewer = async (config, phase, checkpointTag) => {
@@ -1 +1 @@
1
- {"version":3,"file":"review.exec.js","sourceRoot":"","sources":["../../../src/engine/pipeline/review.exec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAE7B,uDAAoD;AACpD,6DAAiE;AACjE,mCAAmC;AACnC,oEAA4D;AAC5D,0DAA4D;AAC5D,gEAAgE;AAChE,kEAA6D;AAC7D,uDAAgF;AAEhF,MAAM,kBAAkB,GAAG,CACzB,MAAuB,EACvB,KAAgB,EAChB,aAAqB,EACb,EAAE;IACV,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEjB,MAAM,IAAI,GAAG,IAAA,aAAO,EAAC,aAAa,CAAC,CAAA;IACnC,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IACnD,IAAI,IAAI,EAAE,CAAC;QACT,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IACvC,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEjB,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;IAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEjB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC,CAAA;AAEM,MAAM,cAAc,GAAG,KAAK,EACjC,MAAuB,EACvB,KAAgB,EAChB,aAAqB,EACsC,EAAE;IAC7D,MAAM,QAAQ,GAAG,IAAA,mCAAkB,EAAC,IAAA,gCAAc,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IACnE,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;IAC1D,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAA;IACnE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAA,uCAAsB,EAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC3G,MAAM,QAAQ,GAAG,IAAA,yCAAuB,EAAC,MAAM,CAAC,CAAA;IAEhD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAY,EAAC;YAChC,YAAY;YACZ,UAAU;YACV,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;YACvD,GAAG,IAAA,qCAAmB,EAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;SACnD,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,IAAA,+BAAY,EAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC3C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IAC5B,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,CAAA;QACP,IAAA,+BAAiB,EAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC;AACH,CAAC,CAAA;AA1BY,QAAA,cAAc,kBA0B1B"}
1
+ {"version":3,"file":"review.exec.js","sourceRoot":"","sources":["../../../src/engine/pipeline/review.exec.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,6 @@ export type SpecEnsembleConfig = {
5
5
  maxBudgetUsd: number | null;
6
6
  buildDir: string;
7
7
  flavour: string | null;
8
+ matchedShapes: string[];
8
9
  };
9
10
  export declare const invokeSpecifier: (shapeMd: string, config: SpecEnsembleConfig) => Promise<EnsembleResult>;