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.
- package/README.md +53 -9
- package/dist/agents/core/designer.md +131 -0
- package/dist/agents/core/refiner.md +61 -0
- package/dist/agents/core/researcher.md +78 -0
- package/dist/agents/core/specifier.md +16 -0
- package/dist/agents/researchers/academic.md +27 -0
- package/dist/agents/researchers/competitive.md +28 -0
- package/dist/agents/researchers/context.md +46 -0
- package/dist/agents/researchers/ecosystem.md +28 -0
- package/dist/agents/researchers/gaps.md +67 -0
- package/dist/agents/specifiers/visual-coherence.md +55 -0
- package/dist/cli.js +83 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/create.js +20 -2
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/design.d.ts +8 -0
- package/dist/commands/design.js +130 -0
- package/dist/commands/design.js.map +1 -0
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.js +3 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/plan.js +3 -3
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/qa-workflow.d.ts +33 -0
- package/dist/commands/qa-workflow.js +139 -0
- package/dist/commands/qa-workflow.js.map +1 -0
- package/dist/commands/refine.d.ts +8 -0
- package/dist/commands/refine.js +105 -0
- package/dist/commands/refine.js.map +1 -0
- package/dist/commands/research.d.ts +10 -0
- package/dist/commands/research.js +146 -0
- package/dist/commands/research.js.map +1 -0
- package/dist/commands/rewind.js +5 -3
- package/dist/commands/rewind.js.map +1 -1
- package/dist/commands/shape.js +36 -121
- package/dist/commands/shape.js.map +1 -1
- package/dist/commands/spec.js +1 -0
- package/dist/commands/spec.js.map +1 -1
- package/dist/engine/claude/stream.display.js +0 -1
- package/dist/engine/claude/stream.display.js.map +1 -1
- package/dist/engine/claude/stream.parse.d.ts +1 -15
- package/dist/engine/claude/stream.parse.js +3 -21
- package/dist/engine/claude/stream.parse.js.map +1 -1
- package/dist/engine/claude/stream.result.js +2 -2
- package/dist/engine/claude/stream.types.d.ts +15 -0
- package/dist/engine/claude/stream.types.js +23 -0
- package/dist/engine/claude/stream.types.js.map +1 -0
- package/dist/engine/discovery/agent.registry.d.ts +4 -0
- package/dist/engine/discovery/agent.registry.js +46 -18
- package/dist/engine/discovery/agent.registry.js.map +1 -1
- package/dist/engine/discovery/flavour.config.d.ts +9 -0
- package/dist/engine/discovery/flavour.config.js +61 -0
- package/dist/engine/discovery/flavour.config.js.map +1 -0
- package/dist/engine/discovery/plugin.scan.d.ts +1 -0
- package/dist/engine/discovery/plugin.scan.js +29 -1
- package/dist/engine/discovery/plugin.scan.js.map +1 -1
- package/dist/engine/discovery/skill.check.d.ts +19 -0
- package/dist/engine/discovery/skill.check.js +145 -0
- package/dist/engine/discovery/skill.check.js.map +1 -0
- package/dist/engine/pipeline/build.exec.js +1 -0
- package/dist/engine/pipeline/build.exec.js.map +1 -1
- package/dist/engine/pipeline/ensemble.exec.d.ts +12 -1
- package/dist/engine/pipeline/ensemble.exec.js +20 -10
- package/dist/engine/pipeline/ensemble.exec.js.map +1 -1
- package/dist/engine/pipeline/phase.sequence.js +10 -10
- package/dist/engine/pipeline/phase.sequence.js.map +1 -1
- package/dist/engine/pipeline/pipeline.shared.d.ts +6 -0
- package/dist/engine/pipeline/pipeline.shared.js +24 -1
- package/dist/engine/pipeline/pipeline.shared.js.map +1 -1
- package/dist/engine/pipeline/plan.exec.js +1 -0
- package/dist/engine/pipeline/plan.exec.js.map +1 -1
- package/dist/engine/pipeline/refine.exec.d.ts +10 -0
- package/dist/engine/pipeline/refine.exec.js +91 -0
- package/dist/engine/pipeline/refine.exec.js.map +1 -0
- package/dist/engine/pipeline/research.exec.d.ts +17 -0
- package/dist/engine/pipeline/research.exec.js +196 -0
- package/dist/engine/pipeline/research.exec.js.map +1 -0
- package/dist/engine/pipeline/review.exec.js +23 -0
- package/dist/engine/pipeline/review.exec.js.map +1 -1
- package/dist/engine/pipeline/specify.exec.d.ts +1 -0
- package/dist/engine/pipeline/specify.exec.js +114 -44
- package/dist/engine/pipeline/specify.exec.js.map +1 -1
- package/dist/flavours/data-analysis/core/refiner.md +65 -0
- package/dist/flavours/data-analysis/core/researcher.md +81 -0
- package/dist/flavours/data-analysis/researchers/academic.md +29 -0
- package/dist/flavours/data-analysis/researchers/competitive.md +29 -0
- package/dist/flavours/data-analysis/researchers/ecosystem.md +29 -0
- package/dist/flavours/data-analysis/researchers/gaps.md +59 -0
- package/dist/flavours/game-dev/core/refiner.md +65 -0
- package/dist/flavours/game-dev/core/researcher.md +81 -0
- package/dist/flavours/game-dev/researchers/academic.md +31 -0
- package/dist/flavours/game-dev/researchers/competitive.md +30 -0
- package/dist/flavours/game-dev/researchers/ecosystem.md +29 -0
- package/dist/flavours/game-dev/researchers/gaps.md +59 -0
- package/dist/flavours/legal-drafting/core/refiner.md +65 -0
- package/dist/flavours/legal-drafting/core/researcher.md +81 -0
- package/dist/flavours/legal-drafting/researchers/academic.md +31 -0
- package/dist/flavours/legal-drafting/researchers/competitive.md +31 -0
- package/dist/flavours/legal-drafting/researchers/ecosystem.md +30 -0
- package/dist/flavours/legal-drafting/researchers/gaps.md +59 -0
- package/dist/flavours/machine-learning/core/refiner.md +65 -0
- package/dist/flavours/machine-learning/core/researcher.md +81 -0
- package/dist/flavours/machine-learning/researchers/academic.md +32 -0
- package/dist/flavours/machine-learning/researchers/competitive.md +32 -0
- package/dist/flavours/machine-learning/researchers/ecosystem.md +31 -0
- package/dist/flavours/machine-learning/researchers/gaps.md +59 -0
- package/dist/flavours/mobile-app/core/refiner.md +65 -0
- package/dist/flavours/mobile-app/core/researcher.md +81 -0
- package/dist/flavours/mobile-app/researchers/academic.md +31 -0
- package/dist/flavours/mobile-app/researchers/competitive.md +32 -0
- package/dist/flavours/mobile-app/researchers/ecosystem.md +31 -0
- package/dist/flavours/mobile-app/researchers/gaps.md +59 -0
- package/dist/flavours/music-composition/core/refiner.md +65 -0
- package/dist/flavours/music-composition/core/researcher.md +81 -0
- package/dist/flavours/music-composition/researchers/academic.md +32 -0
- package/dist/flavours/music-composition/researchers/competitive.md +32 -0
- package/dist/flavours/music-composition/researchers/ecosystem.md +32 -0
- package/dist/flavours/music-composition/researchers/gaps.md +59 -0
- package/dist/flavours/novel-writing/core/refiner.md +65 -0
- package/dist/flavours/novel-writing/core/researcher.md +81 -0
- package/dist/flavours/novel-writing/researchers/academic.md +32 -0
- package/dist/flavours/novel-writing/researchers/competitive.md +32 -0
- package/dist/flavours/novel-writing/researchers/ecosystem.md +32 -0
- package/dist/flavours/novel-writing/researchers/gaps.md +59 -0
- package/dist/flavours/screenwriting/core/refiner.md +65 -0
- package/dist/flavours/screenwriting/core/researcher.md +81 -0
- package/dist/flavours/screenwriting/researchers/academic.md +32 -0
- package/dist/flavours/screenwriting/researchers/competitive.md +32 -0
- package/dist/flavours/screenwriting/researchers/ecosystem.md +32 -0
- package/dist/flavours/screenwriting/researchers/gaps.md +59 -0
- package/dist/flavours/security-audit/core/refiner.md +65 -0
- package/dist/flavours/security-audit/core/researcher.md +81 -0
- package/dist/flavours/security-audit/researchers/academic.md +32 -0
- package/dist/flavours/security-audit/researchers/competitive.md +32 -0
- package/dist/flavours/security-audit/researchers/ecosystem.md +32 -0
- package/dist/flavours/security-audit/researchers/gaps.md +59 -0
- package/dist/flavours/software-engineering/core/builder.md +2 -0
- package/dist/flavours/software-engineering/core/refiner.md +65 -0
- package/dist/flavours/software-engineering/core/researcher.md +81 -0
- package/dist/flavours/software-engineering/core/reviewer.md +2 -0
- package/dist/flavours/software-engineering/flavour.json +7 -0
- package/dist/flavours/software-engineering/researchers/academic.md +32 -0
- package/dist/flavours/software-engineering/researchers/competitive.md +32 -0
- package/dist/flavours/software-engineering/researchers/ecosystem.md +32 -0
- package/dist/flavours/software-engineering/researchers/gaps.md +59 -0
- package/dist/flavours/technical-writing/core/refiner.md +65 -0
- package/dist/flavours/technical-writing/core/researcher.md +81 -0
- package/dist/flavours/technical-writing/researchers/academic.md +32 -0
- package/dist/flavours/technical-writing/researchers/competitive.md +32 -0
- package/dist/flavours/technical-writing/researchers/ecosystem.md +32 -0
- package/dist/flavours/technical-writing/researchers/gaps.md +59 -0
- package/dist/flavours/test-suite/core/refiner.md +65 -0
- package/dist/flavours/test-suite/core/researcher.md +81 -0
- package/dist/flavours/test-suite/researchers/academic.md +32 -0
- package/dist/flavours/test-suite/researchers/competitive.md +32 -0
- package/dist/flavours/test-suite/researchers/ecosystem.md +32 -0
- package/dist/flavours/test-suite/researchers/gaps.md +59 -0
- package/dist/flavours/translation/core/refiner.md +65 -0
- package/dist/flavours/translation/core/researcher.md +81 -0
- package/dist/flavours/translation/researchers/academic.md +32 -0
- package/dist/flavours/translation/researchers/competitive.md +32 -0
- package/dist/flavours/translation/researchers/ecosystem.md +32 -0
- package/dist/flavours/translation/researchers/gaps.md +59 -0
- package/dist/flavours/web-game/core/builder.md +123 -0
- package/dist/flavours/web-game/core/reviewer.md +159 -0
- package/dist/flavours/web-game/flavour.json +9 -0
- package/dist/flavours/web-ui/core/builder.md +117 -0
- package/dist/flavours/web-ui/core/reviewer.md +155 -0
- package/dist/flavours/web-ui/flavour.json +10 -0
- package/dist/plugin/visual-tools/plugin.json +4 -0
- package/dist/plugin/visual-tools/skills/a11y-audit/SKILL.md +57 -0
- package/dist/plugin/visual-tools/skills/agent-browser/SKILL.md +56 -0
- package/dist/plugin/visual-tools/skills/agent-browser/references/viewports.md +17 -0
- package/dist/plugin/visual-tools/skills/canvas-screenshot/SKILL.md +84 -0
- package/dist/plugin/visual-tools/skills/css-audit/SKILL.md +50 -0
- package/dist/plugin/visual-tools/skills/lighthouse/SKILL.md +58 -0
- package/dist/plugin/visual-tools/skills/shader-validate/SKILL.md +77 -0
- package/dist/plugin/visual-tools/skills/visual-diff/SKILL.md +68 -0
- package/dist/shapes/detect.d.ts +8 -0
- package/dist/shapes/detect.js +87 -0
- package/dist/shapes/detect.js.map +1 -0
- package/dist/shapes/game-visual.json +8 -0
- package/dist/shapes/print-layout.json +8 -0
- package/dist/shapes/web-visual.json +9 -0
- package/dist/stores/budget.js +2 -1
- package/dist/stores/budget.js.map +1 -1
- package/dist/stores/feedback.format.d.ts +3 -0
- package/dist/stores/feedback.format.js +62 -0
- package/dist/stores/feedback.format.js.map +1 -0
- package/dist/stores/feedback.parse.d.ts +2 -0
- package/dist/stores/feedback.parse.js +121 -0
- package/dist/stores/feedback.parse.js.map +1 -0
- package/dist/stores/feedback.verdict.d.ts +2 -4
- package/dist/stores/feedback.verdict.js +7 -175
- package/dist/stores/feedback.verdict.js.map +1 -1
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/index.js +1 -2
- package/dist/stores/index.js.map +1 -1
- package/dist/stores/settings.d.ts +2 -0
- package/dist/stores/settings.js +24 -1
- package/dist/stores/settings.js.map +1 -1
- package/dist/stores/state.d.ts +4 -0
- package/dist/stores/state.js +75 -12
- package/dist/stores/state.js.map +1 -1
- package/dist/stores/trajectory.d.ts +2 -3
- package/dist/stores/trajectory.js +6 -7
- package/dist/stores/trajectory.js.map +1 -1
- package/dist/types.d.ts +15 -3
- package/dist/utils/atomic-write.d.ts +6 -0
- package/dist/utils/atomic-write.js +62 -0
- package/dist/utils/atomic-write.js.map +1 -0
- 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;
|
|
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,
|
|
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":"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"}
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"review.exec.js","sourceRoot":"","sources":["../../../src/engine/pipeline/review.exec.ts"],"names":[],"mappings":"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"}
|