ridgeline 0.7.21 → 0.8.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/dist/agents/core/builder.md +15 -0
- package/dist/catalog/build-catalog.js +2 -1
- package/dist/catalog/build-catalog.js.map +1 -1
- package/dist/catalog/classify.js +2 -1
- package/dist/catalog/classify.js.map +1 -1
- package/dist/catalog/pack-sprites.js +3 -2
- package/dist/catalog/pack-sprites.js.map +1 -1
- package/dist/catalog/vision-describe.js +3 -2
- package/dist/catalog/vision-describe.js.map +1 -1
- package/dist/cli.js +112 -44
- package/dist/cli.js.map +1 -1
- package/dist/commands/build.js +0 -1
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/check.d.ts +1 -5
- package/dist/commands/check.js +2 -60
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/create.d.ts +0 -1
- package/dist/commands/create.js +0 -18
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/design.d.ts +0 -1
- package/dist/commands/design.js +1 -2
- package/dist/commands/design.js.map +1 -1
- package/dist/commands/qa-workflow.js +6 -5
- package/dist/commands/qa-workflow.js.map +1 -1
- package/dist/commands/refine.d.ts +0 -1
- package/dist/commands/refine.js +0 -1
- package/dist/commands/refine.js.map +1 -1
- package/dist/commands/research.d.ts +2 -1
- package/dist/commands/research.js +2 -2
- package/dist/commands/research.js.map +1 -1
- package/dist/commands/retrospective.d.ts +0 -1
- package/dist/commands/retrospective.js +1 -2
- package/dist/commands/retrospective.js.map +1 -1
- package/dist/commands/shape.d.ts +30 -1
- package/dist/commands/shape.js +16 -5
- package/dist/commands/shape.js.map +1 -1
- package/dist/commands/spec.d.ts +2 -1
- package/dist/commands/spec.js +2 -1
- package/dist/commands/spec.js.map +1 -1
- package/dist/commands/ui.d.ts +7 -0
- package/dist/commands/ui.js +96 -0
- package/dist/commands/ui.js.map +1 -0
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/engine/claude/claude.exec.d.ts +11 -0
- package/dist/engine/claude/claude.exec.js +73 -36
- package/dist/engine/claude/claude.exec.js.map +1 -1
- package/dist/engine/claude/stable.prompt.d.ts +31 -0
- package/dist/engine/claude/stable.prompt.js +137 -0
- package/dist/engine/claude/stable.prompt.js.map +1 -0
- package/dist/engine/claude/stream.display.d.ts +1 -1
- package/dist/engine/claude/stream.display.js +2 -1
- package/dist/engine/claude/stream.display.js.map +1 -1
- package/dist/engine/detect/index.d.ts +15 -0
- package/dist/engine/detect/index.js +160 -0
- package/dist/engine/detect/index.js.map +1 -0
- package/dist/engine/discovery/agent.registry.d.ts +5 -6
- package/dist/engine/discovery/agent.registry.js +20 -54
- package/dist/engine/discovery/agent.registry.js.map +1 -1
- package/dist/engine/discovery/skill.check.d.ts +3 -3
- package/dist/engine/discovery/skill.check.js +4 -4
- package/dist/engine/discovery/skill.check.js.map +1 -1
- package/dist/engine/index.d.ts +0 -1
- package/dist/engine/index.js +1 -3
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/pipeline/build.exec.js +19 -6
- package/dist/engine/pipeline/build.exec.js.map +1 -1
- package/dist/engine/pipeline/ensemble.exec.d.ts +41 -3
- package/dist/engine/pipeline/ensemble.exec.js +295 -94
- package/dist/engine/pipeline/ensemble.exec.js.map +1 -1
- package/dist/engine/pipeline/phase.sequence.js +97 -4
- package/dist/engine/pipeline/phase.sequence.js.map +1 -1
- package/dist/engine/pipeline/pipeline.shared.d.ts +7 -0
- package/dist/engine/pipeline/pipeline.shared.js +21 -3
- package/dist/engine/pipeline/pipeline.shared.js.map +1 -1
- package/dist/engine/pipeline/refine.exec.d.ts +0 -1
- package/dist/engine/pipeline/refine.exec.js +1 -2
- package/dist/engine/pipeline/refine.exec.js.map +1 -1
- package/dist/engine/pipeline/research.exec.d.ts +2 -1
- package/dist/engine/pipeline/research.exec.js +53 -7
- package/dist/engine/pipeline/research.exec.js.map +1 -1
- package/dist/engine/pipeline/review.exec.d.ts +2 -1
- package/dist/engine/pipeline/review.exec.js +14 -6
- package/dist/engine/pipeline/review.exec.js.map +1 -1
- package/dist/engine/pipeline/sensors.collect.d.ts +6 -0
- package/dist/engine/pipeline/sensors.collect.js +34 -0
- package/dist/engine/pipeline/sensors.collect.js.map +1 -0
- package/dist/engine/pipeline/specialist.verdict.d.ts +19 -0
- package/dist/engine/pipeline/specialist.verdict.js +189 -0
- package/dist/engine/pipeline/specialist.verdict.js.map +1 -0
- package/dist/engine/pipeline/specify.exec.d.ts +2 -1
- package/dist/engine/pipeline/specify.exec.js +159 -7
- package/dist/engine/pipeline/specify.exec.js.map +1 -1
- package/dist/sensors/a11y.d.ts +36 -0
- package/dist/sensors/a11y.js +134 -0
- package/dist/sensors/a11y.js.map +1 -0
- package/dist/sensors/contrast.d.ts +3 -0
- package/dist/sensors/contrast.js +117 -0
- package/dist/sensors/contrast.js.map +1 -0
- package/dist/sensors/index.d.ts +27 -0
- package/dist/sensors/index.js +3 -0
- package/dist/sensors/index.js.map +1 -0
- package/dist/sensors/playwright.d.ts +69 -0
- package/dist/sensors/playwright.js +266 -0
- package/dist/sensors/playwright.js.map +1 -0
- package/dist/sensors/vision.d.ts +18 -0
- package/dist/sensors/vision.js +125 -0
- package/dist/sensors/vision.js.map +1 -0
- package/dist/stores/feedback.format.js +9 -0
- package/dist/stores/feedback.format.js.map +1 -1
- package/dist/stores/feedback.parse.js +2 -0
- package/dist/stores/feedback.parse.js.map +1 -1
- package/dist/stores/settings.d.ts +7 -1
- package/dist/stores/settings.js +10 -1
- package/dist/stores/settings.js.map +1 -1
- package/dist/stores/trajectory.d.ts +9 -2
- package/dist/stores/trajectory.js +6 -0
- package/dist/stores/trajectory.js.map +1 -1
- package/dist/types.d.ts +36 -3
- package/dist/ui/color.d.ts +16 -0
- package/dist/ui/color.js +46 -0
- package/dist/ui/color.js.map +1 -0
- package/dist/ui/contrast.d.ts +2 -0
- package/dist/ui/contrast.js +94 -0
- package/dist/ui/contrast.js.map +1 -0
- package/dist/ui/dashboard/client.d.ts +1 -0
- package/dist/ui/dashboard/client.js +281 -0
- package/dist/ui/dashboard/client.js.map +1 -0
- package/dist/ui/dashboard/css.d.ts +1 -0
- package/dist/ui/dashboard/css.js +341 -0
- package/dist/ui/dashboard/css.js.map +1 -0
- package/dist/ui/dashboard/events.d.ts +15 -0
- package/dist/ui/dashboard/events.js +40 -0
- package/dist/ui/dashboard/events.js.map +1 -0
- package/dist/ui/dashboard/favicon.d.ts +2 -0
- package/dist/ui/dashboard/favicon.js +20 -0
- package/dist/ui/dashboard/favicon.js.map +1 -0
- package/dist/ui/dashboard/hex.d.ts +7 -0
- package/dist/ui/dashboard/hex.js +16 -0
- package/dist/ui/dashboard/hex.js.map +1 -0
- package/dist/ui/dashboard/html.d.ts +7 -0
- package/dist/ui/dashboard/html.js +69 -0
- package/dist/ui/dashboard/html.js.map +1 -0
- package/dist/ui/dashboard/server.d.ts +26 -0
- package/dist/ui/dashboard/server.js +257 -0
- package/dist/ui/dashboard/server.js.map +1 -0
- package/dist/ui/dashboard/snapshot.d.ts +29 -0
- package/dist/ui/dashboard/snapshot.js +71 -0
- package/dist/ui/dashboard/snapshot.js.map +1 -0
- package/dist/ui/dashboard/tokens.d.ts +19 -0
- package/dist/ui/dashboard/tokens.js +25 -0
- package/dist/ui/dashboard/tokens.js.map +1 -0
- package/dist/ui/dashboard/watcher.d.ts +13 -0
- package/dist/ui/dashboard/watcher.js +238 -0
- package/dist/ui/dashboard/watcher.js.map +1 -0
- package/dist/ui/output.js +3 -2
- package/dist/ui/output.js.map +1 -1
- package/dist/ui/preflight.d.ts +21 -0
- package/dist/ui/preflight.js +159 -0
- package/dist/ui/preflight.js.map +1 -0
- package/dist/ui/spinner.d.ts +0 -6
- package/dist/ui/spinner.js +25 -6
- package/dist/ui/spinner.js.map +1 -1
- package/dist/ui/transcript.js +2 -3
- package/dist/ui/transcript.js.map +1 -1
- package/dist/utils/flavour-removed.d.ts +12 -0
- package/dist/utils/flavour-removed.js +44 -0
- package/dist/utils/flavour-removed.js.map +1 -0
- package/package.json +16 -3
|
@@ -0,0 +1,137 @@
|
|
|
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.__trackedTempFiles = exports.__resetStablePromptState = exports.shouldLogUnavailableOnce = exports.detectExcludeDynamicFlag = exports.minCacheableTokens = exports.approximateTokenCount = exports.writeStablePromptFile = exports.computeStableHash = exports.buildStablePrompt = void 0;
|
|
37
|
+
const os = __importStar(require("node:os"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
const fs = __importStar(require("node:fs"));
|
|
40
|
+
const node_crypto_1 = require("node:crypto");
|
|
41
|
+
const node_child_process_1 = require("node:child_process");
|
|
42
|
+
const buildStablePrompt = (parts) => {
|
|
43
|
+
const sections = [];
|
|
44
|
+
sections.push(`## constraints.md\n\n${parts.constraintsMd.trimEnd()}\n`);
|
|
45
|
+
if (parts.tasteMd && parts.tasteMd.trim().length > 0) {
|
|
46
|
+
sections.push(`## taste.md\n\n${parts.tasteMd.trimEnd()}\n`);
|
|
47
|
+
}
|
|
48
|
+
if (parts.specMd && parts.specMd.trim().length > 0) {
|
|
49
|
+
sections.push(`## spec.md\n\n${parts.specMd.trimEnd()}\n`);
|
|
50
|
+
}
|
|
51
|
+
return sections.join("\n");
|
|
52
|
+
};
|
|
53
|
+
exports.buildStablePrompt = buildStablePrompt;
|
|
54
|
+
const computeStableHash = (content) => (0, node_crypto_1.createHash)("sha256").update(content).digest("hex");
|
|
55
|
+
exports.computeStableHash = computeStableHash;
|
|
56
|
+
const trackedTempFiles = new Set();
|
|
57
|
+
let cleanupRegistered = false;
|
|
58
|
+
const registerCleanup = () => {
|
|
59
|
+
if (cleanupRegistered)
|
|
60
|
+
return;
|
|
61
|
+
cleanupRegistered = true;
|
|
62
|
+
process.on("exit", () => {
|
|
63
|
+
for (const fp of trackedTempFiles) {
|
|
64
|
+
try {
|
|
65
|
+
fs.unlinkSync(fp);
|
|
66
|
+
}
|
|
67
|
+
catch { /* best-effort */ }
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Write (or reuse) the stable-block temp file named by sha256 of its content.
|
|
73
|
+
* Files persist for the process lifetime and are unlinked on exit.
|
|
74
|
+
*/
|
|
75
|
+
const writeStablePromptFile = (content) => {
|
|
76
|
+
const hash = (0, exports.computeStableHash)(content);
|
|
77
|
+
const fp = path.join(os.tmpdir(), `ridgeline-stable-${hash}.md`);
|
|
78
|
+
if (!fs.existsSync(fp)) {
|
|
79
|
+
fs.writeFileSync(fp, content);
|
|
80
|
+
}
|
|
81
|
+
trackedTempFiles.add(fp);
|
|
82
|
+
registerCleanup();
|
|
83
|
+
return { path: fp, hash, tokenEstimate: (0, exports.approximateTokenCount)(content) };
|
|
84
|
+
};
|
|
85
|
+
exports.writeStablePromptFile = writeStablePromptFile;
|
|
86
|
+
/** Rough 4 chars ≈ 1 token heuristic; sufficient for the preflight threshold check. */
|
|
87
|
+
const approximateTokenCount = (content) => Math.ceil(content.length / 4);
|
|
88
|
+
exports.approximateTokenCount = approximateTokenCount;
|
|
89
|
+
/**
|
|
90
|
+
* Minimum cacheable prefix in tokens per model family.
|
|
91
|
+
* Opus 4.5/4.6/4.7 and Haiku 4.5 → 4,096; Sonnet 4.6 → 2,048.
|
|
92
|
+
*/
|
|
93
|
+
const minCacheableTokens = (model) => {
|
|
94
|
+
const m = model.toLowerCase();
|
|
95
|
+
if (m.includes("sonnet"))
|
|
96
|
+
return 2048;
|
|
97
|
+
return 4096;
|
|
98
|
+
};
|
|
99
|
+
exports.minCacheableTokens = minCacheableTokens;
|
|
100
|
+
const defaultHelpRunner = () => {
|
|
101
|
+
const r = (0, node_child_process_1.spawnSync)("claude", ["--help"], { encoding: "utf-8", timeout: 10000 });
|
|
102
|
+
return `${r.stdout ?? ""}${r.stderr ?? ""}`;
|
|
103
|
+
};
|
|
104
|
+
let cachedFlagDetection = null;
|
|
105
|
+
const detectExcludeDynamicFlag = (runner) => {
|
|
106
|
+
if (cachedFlagDetection !== null)
|
|
107
|
+
return cachedFlagDetection;
|
|
108
|
+
try {
|
|
109
|
+
const help = (runner ?? defaultHelpRunner)();
|
|
110
|
+
cachedFlagDetection = help.includes("--exclude-dynamic-system-prompt-sections");
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
cachedFlagDetection = false;
|
|
114
|
+
}
|
|
115
|
+
return cachedFlagDetection;
|
|
116
|
+
};
|
|
117
|
+
exports.detectExcludeDynamicFlag = detectExcludeDynamicFlag;
|
|
118
|
+
let unavailableLogged = false;
|
|
119
|
+
const shouldLogUnavailableOnce = () => {
|
|
120
|
+
if (unavailableLogged)
|
|
121
|
+
return false;
|
|
122
|
+
unavailableLogged = true;
|
|
123
|
+
return true;
|
|
124
|
+
};
|
|
125
|
+
exports.shouldLogUnavailableOnce = shouldLogUnavailableOnce;
|
|
126
|
+
/** Test helper: reset internal module state. */
|
|
127
|
+
const __resetStablePromptState = () => {
|
|
128
|
+
cachedFlagDetection = null;
|
|
129
|
+
unavailableLogged = false;
|
|
130
|
+
trackedTempFiles.clear();
|
|
131
|
+
cleanupRegistered = false;
|
|
132
|
+
};
|
|
133
|
+
exports.__resetStablePromptState = __resetStablePromptState;
|
|
134
|
+
/** Test helper: inspect tracked files (read-only snapshot). */
|
|
135
|
+
const __trackedTempFiles = () => [...trackedTempFiles];
|
|
136
|
+
exports.__trackedTempFiles = __trackedTempFiles;
|
|
137
|
+
//# sourceMappingURL=stable.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stable.prompt.js","sourceRoot":"","sources":["../../../src/engine/claude/stable.prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ interface DisplayCallbackOptions {
|
|
|
3
3
|
suppressJsonBlock?: boolean;
|
|
4
4
|
/** When set, strip this prefix from tool-call file paths so the display shows relative paths. */
|
|
5
5
|
projectRoot?: string;
|
|
6
|
-
/** When set, render streamed text
|
|
6
|
+
/** When set, render streamed text dimmed. */
|
|
7
7
|
dimText?: boolean;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
@@ -4,6 +4,7 @@ exports.createDisplayCallbacks = void 0;
|
|
|
4
4
|
const stream_parse_1 = require("./stream.parse");
|
|
5
5
|
const spinner_1 = require("../../ui/spinner");
|
|
6
6
|
const transcript_1 = require("../../ui/transcript");
|
|
7
|
+
const color_1 = require("../../ui/color");
|
|
7
8
|
const RESUME_DEBOUNCE_MS = 200;
|
|
8
9
|
/**
|
|
9
10
|
* Create an onStdout callback that streams assistant text to stdout.
|
|
@@ -52,7 +53,7 @@ const createDisplayCallbacks = (opts) => {
|
|
|
52
53
|
if (!lastCharWasNewline) {
|
|
53
54
|
process.stdout.write("\n");
|
|
54
55
|
}
|
|
55
|
-
process.stdout.write(opts?.dimText ?
|
|
56
|
+
process.stdout.write(opts?.dimText ? (0, color_1.hint)(text, { force: true }) : text);
|
|
56
57
|
(0, transcript_1.appendTranscript)(text);
|
|
57
58
|
lastCharWasNewline = text.endsWith("\n");
|
|
58
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.display.js","sourceRoot":"","sources":["../../../src/engine/claude/stream.display.ts"],"names":[],"mappings":";;;AAAA,iDAAoD;AACpD,8CAA+C;AAC/C,oDAAsD;
|
|
1
|
+
{"version":3,"file":"stream.display.js","sourceRoot":"","sources":["../../../src/engine/claude/stream.display.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type ProjectType = "web" | "node" | "unknown";
|
|
2
|
+
export type SensorName = "playwright" | "vision" | "a11y" | "contrast";
|
|
3
|
+
export interface DetectionReport {
|
|
4
|
+
projectType: ProjectType;
|
|
5
|
+
isVisualSurface: boolean;
|
|
6
|
+
detectedDeps: string[];
|
|
7
|
+
hasDesignMd: boolean;
|
|
8
|
+
hasAssetDir: boolean;
|
|
9
|
+
suggestedSensors: SensorName[];
|
|
10
|
+
suggestedEnsembleSize: 2 | 3;
|
|
11
|
+
}
|
|
12
|
+
export interface DetectOptions {
|
|
13
|
+
isThorough?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const detect: (cwd: string, opts?: DetectOptions) => Promise<DetectionReport>;
|
|
@@ -0,0 +1,160 @@
|
|
|
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.detect = void 0;
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
const VISUAL_DEPS = [
|
|
40
|
+
"react",
|
|
41
|
+
"vue",
|
|
42
|
+
"svelte",
|
|
43
|
+
"solid-js",
|
|
44
|
+
"vite",
|
|
45
|
+
"next",
|
|
46
|
+
"three",
|
|
47
|
+
"phaser",
|
|
48
|
+
"pixi.js",
|
|
49
|
+
"@babylonjs/core",
|
|
50
|
+
"electron",
|
|
51
|
+
"react-native",
|
|
52
|
+
"expo",
|
|
53
|
+
];
|
|
54
|
+
const VISUAL_FILE_EXTS = new Set([".html", ".tsx", ".jsx", ".vue", ".svelte"]);
|
|
55
|
+
const SCAN_EXCLUDE_DIRS = new Set([
|
|
56
|
+
"node_modules",
|
|
57
|
+
".git",
|
|
58
|
+
".worktrees",
|
|
59
|
+
"dist",
|
|
60
|
+
"build",
|
|
61
|
+
".ridgeline",
|
|
62
|
+
]);
|
|
63
|
+
const ASSET_DIR_NAMES = ["assets", "public", "static"];
|
|
64
|
+
const SENSOR_ORDER = ["playwright", "vision", "a11y", "contrast"];
|
|
65
|
+
const readPackageJson = (cwd) => {
|
|
66
|
+
const pkgPath = path.join(cwd, "package.json");
|
|
67
|
+
if (!fs.existsSync(pkgPath)) {
|
|
68
|
+
return { deps: [], hasFile: false, isMalformed: false };
|
|
69
|
+
}
|
|
70
|
+
let raw;
|
|
71
|
+
try {
|
|
72
|
+
raw = fs.readFileSync(pkgPath, "utf-8");
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return { deps: [], hasFile: true, isMalformed: true };
|
|
76
|
+
}
|
|
77
|
+
let parsed;
|
|
78
|
+
try {
|
|
79
|
+
parsed = JSON.parse(raw);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
process.stderr.write(`[ridgeline] WARN: malformed package.json at ${pkgPath}; falling back to filesystem signals\n`);
|
|
83
|
+
return { deps: [], hasFile: true, isMalformed: true };
|
|
84
|
+
}
|
|
85
|
+
const deps = [
|
|
86
|
+
...Object.keys(parsed.dependencies ?? {}),
|
|
87
|
+
...Object.keys(parsed.devDependencies ?? {}),
|
|
88
|
+
];
|
|
89
|
+
return { deps, hasFile: true, isMalformed: false };
|
|
90
|
+
};
|
|
91
|
+
const hasVisualFile = (cwd) => {
|
|
92
|
+
const stack = [cwd];
|
|
93
|
+
while (stack.length > 0) {
|
|
94
|
+
const dir = stack.pop();
|
|
95
|
+
let entries;
|
|
96
|
+
try {
|
|
97
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
for (const entry of entries) {
|
|
103
|
+
if (entry.isDirectory()) {
|
|
104
|
+
if (SCAN_EXCLUDE_DIRS.has(entry.name))
|
|
105
|
+
continue;
|
|
106
|
+
if (entry.name.startsWith(".") && entry.name !== ".")
|
|
107
|
+
continue;
|
|
108
|
+
stack.push(path.join(dir, entry.name));
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (entry.isFile()) {
|
|
112
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
113
|
+
if (VISUAL_FILE_EXTS.has(ext))
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
};
|
|
120
|
+
const detectAssetDir = (cwd) => {
|
|
121
|
+
for (const name of ASSET_DIR_NAMES) {
|
|
122
|
+
const candidate = path.join(cwd, name);
|
|
123
|
+
try {
|
|
124
|
+
if (fs.statSync(candidate).isDirectory())
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return false;
|
|
132
|
+
};
|
|
133
|
+
const detect = async (cwd, opts = {}) => {
|
|
134
|
+
const { deps, hasFile } = readPackageJson(cwd);
|
|
135
|
+
const matchedVisualDeps = VISUAL_DEPS.filter((d) => deps.includes(d));
|
|
136
|
+
const detectedDeps = [...matchedVisualDeps].sort();
|
|
137
|
+
const hasDesignMd = fs.existsSync(path.join(cwd, ".ridgeline", "design.md"));
|
|
138
|
+
const hasAssetDir = detectAssetDir(cwd);
|
|
139
|
+
const isVisualSurface = matchedVisualDeps.length > 0 || hasVisualFile(cwd);
|
|
140
|
+
let projectType;
|
|
141
|
+
if (!hasFile)
|
|
142
|
+
projectType = "unknown";
|
|
143
|
+
else if (isVisualSurface)
|
|
144
|
+
projectType = "web";
|
|
145
|
+
else
|
|
146
|
+
projectType = "node";
|
|
147
|
+
const suggestedSensors = isVisualSurface ? [...SENSOR_ORDER] : [];
|
|
148
|
+
const suggestedEnsembleSize = opts.isThorough ? 3 : 2;
|
|
149
|
+
return {
|
|
150
|
+
projectType,
|
|
151
|
+
isVisualSurface,
|
|
152
|
+
detectedDeps,
|
|
153
|
+
hasDesignMd,
|
|
154
|
+
hasAssetDir,
|
|
155
|
+
suggestedSensors,
|
|
156
|
+
suggestedEnsembleSize,
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
exports.detect = detect;
|
|
160
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/detect/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AAmBjC,MAAM,WAAW,GAAG;IAClB,OAAO;IACP,KAAK;IACL,QAAQ;IACR,UAAU;IACV,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS;IACT,iBAAiB;IACjB,UAAU;IACV,cAAc;IACd,MAAM;CACE,CAAA;AAEV,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;AAC9E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,cAAc;IACd,MAAM;IACN,YAAY;IACZ,MAAM;IACN,OAAO;IACP,YAAY;CACb,CAAC,CAAA;AACF,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACtD,MAAM,YAAY,GAAiB,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;AAE/E,MAAM,eAAe,GAAG,CAAC,GAAW,EAA8D,EAAE;IAClG,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;IACzD,CAAC;IACD,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;IACvD,CAAC;IACD,IAAI,MAA6F,CAAA;IACjG,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,OAAO,wCAAwC,CAAC,CAAA;QACpH,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;IACvD,CAAC;IACD,MAAM,IAAI,GAAG;QACX,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;QACzC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;KAC7C,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;AACpD,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,GAAW,EAAW,EAAE;IAC7C,MAAM,KAAK,GAAa,CAAC,GAAG,CAAC,CAAA;IAC7B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;QACxB,IAAI,OAAoB,CAAA;QACxB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAQ;gBAC/C,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG;oBAAE,SAAQ;gBAC9D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;gBACtC,SAAQ;YACV,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;gBAClD,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAA;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,GAAW,EAAW,EAAE;IAC9C,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;gBAAE,OAAO,IAAI,CAAA;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAEM,MAAM,MAAM,GAAG,KAAK,EAAE,GAAW,EAAE,OAAsB,EAAE,EAA4B,EAAE;IAC9F,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IAE9C,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,MAAM,YAAY,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAA;IAElD,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;IAC5E,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IAEvC,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAA;IAE1E,IAAI,WAAwB,CAAA;IAC5B,IAAI,CAAC,OAAO;QAAE,WAAW,GAAG,SAAS,CAAA;SAChC,IAAI,eAAe;QAAE,WAAW,GAAG,KAAK,CAAA;;QACxC,WAAW,GAAG,MAAM,CAAA;IAEzB,MAAM,gBAAgB,GAAiB,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/E,MAAM,qBAAqB,GAAU,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE5D,OAAO;QACL,WAAW;QACX,eAAe;QACf,YAAY;QACZ,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,qBAAqB;KACtB,CAAA;AACH,CAAC,CAAA;AA5BY,QAAA,MAAM,UA4BlB"}
|
|
@@ -12,7 +12,7 @@ type AgentRegistry = {
|
|
|
12
12
|
getSpecialist: (subfolder: string, filename: string) => SpecialistDef | null;
|
|
13
13
|
/** Get shared context for an ensemble subfolder. Returns null if no context.md. */
|
|
14
14
|
getContext: (subfolder: string) => string | null;
|
|
15
|
-
/** Get gap checklist for an ensemble subfolder.
|
|
15
|
+
/** Get gap checklist for an ensemble subfolder. Returns null if no gaps.md. */
|
|
16
16
|
getGaps: (subfolder: string) => string | null;
|
|
17
17
|
/** Get sub-agents from specialists/ as DiscoveredAgent[]. */
|
|
18
18
|
getSubAgents: () => DiscoveredAgent[];
|
|
@@ -23,12 +23,11 @@ type AgentRegistry = {
|
|
|
23
23
|
model?: string;
|
|
24
24
|
}>;
|
|
25
25
|
};
|
|
26
|
-
/** Clear the cached registry. Exposed for tests
|
|
26
|
+
/** Clear the cached registry. Exposed for tests. */
|
|
27
27
|
export declare const clearRegistryCache: () => void;
|
|
28
28
|
/**
|
|
29
|
-
* Build an agent registry that resolves agents from
|
|
30
|
-
*
|
|
31
|
-
* Results are cached by flavour path for the lifetime of the process.
|
|
29
|
+
* Build an agent registry that resolves agents exclusively from src/agents/.
|
|
30
|
+
* Cached for the lifetime of the process.
|
|
32
31
|
*/
|
|
33
|
-
export declare const buildAgentRegistry: (
|
|
32
|
+
export declare const buildAgentRegistry: () => AgentRegistry;
|
|
34
33
|
export {};
|
|
@@ -37,11 +37,8 @@ exports.buildAgentRegistry = exports.clearRegistryCache = void 0;
|
|
|
37
37
|
const fs = __importStar(require("node:fs"));
|
|
38
38
|
const path = __importStar(require("node:path"));
|
|
39
39
|
const agent_scan_1 = require("./agent.scan");
|
|
40
|
-
// ---------------------------------------------------------------------------
|
|
41
|
-
// Path resolution helpers
|
|
42
|
-
// ---------------------------------------------------------------------------
|
|
43
40
|
/** Resolve the built-in agents/ directory across dist and src layouts. */
|
|
44
|
-
const
|
|
41
|
+
const resolveAgentsDir = () => {
|
|
45
42
|
const candidates = [
|
|
46
43
|
path.join(__dirname, "..", "agents"),
|
|
47
44
|
path.join(__dirname, "..", "..", "agents"),
|
|
@@ -53,27 +50,12 @@ const resolveDefaultAgentsDir = () => {
|
|
|
53
50
|
}
|
|
54
51
|
return null;
|
|
55
52
|
};
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const resolveSubfolder = (subfolder, flavourPath, defaultAgentsDir) => {
|
|
61
|
-
if (flavourPath) {
|
|
62
|
-
const flavourSub = path.join(flavourPath, subfolder);
|
|
63
|
-
if (fs.existsSync(flavourSub) && fs.statSync(flavourSub).isDirectory()) {
|
|
64
|
-
return flavourSub;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
const defaultSub = path.join(defaultAgentsDir, subfolder);
|
|
68
|
-
if (fs.existsSync(defaultSub) && fs.statSync(defaultSub).isDirectory()) {
|
|
69
|
-
return defaultSub;
|
|
70
|
-
}
|
|
53
|
+
const resolveSubfolder = (subfolder, agentsDir) => {
|
|
54
|
+
const dir = path.join(agentsDir, subfolder);
|
|
55
|
+
if (fs.existsSync(dir) && fs.statSync(dir).isDirectory())
|
|
56
|
+
return dir;
|
|
71
57
|
return null;
|
|
72
58
|
};
|
|
73
|
-
// ---------------------------------------------------------------------------
|
|
74
|
-
// Specialist discovery (extracted from ensemble.exec.ts)
|
|
75
|
-
// ---------------------------------------------------------------------------
|
|
76
|
-
/** Parse a specialist .md file into a SpecialistDef, or null on failure. */
|
|
77
59
|
const parseSpecialistFile = (filepath) => {
|
|
78
60
|
try {
|
|
79
61
|
const content = fs.readFileSync(filepath, "utf-8");
|
|
@@ -105,31 +87,23 @@ const discoverSpecialistsInDir = (dir, excludeFiles) => {
|
|
|
105
87
|
}
|
|
106
88
|
return specialists;
|
|
107
89
|
};
|
|
108
|
-
// ---------------------------------------------------------------------------
|
|
109
|
-
// Registry builder
|
|
110
|
-
// ---------------------------------------------------------------------------
|
|
111
|
-
// ---------------------------------------------------------------------------
|
|
112
|
-
// Registry cache — avoids re-scanning the filesystem on every invocation
|
|
113
|
-
// ---------------------------------------------------------------------------
|
|
114
90
|
let registryCache = null;
|
|
115
|
-
/** Clear the cached registry. Exposed for tests
|
|
91
|
+
/** Clear the cached registry. Exposed for tests. */
|
|
116
92
|
const clearRegistryCache = () => { registryCache = null; };
|
|
117
93
|
exports.clearRegistryCache = clearRegistryCache;
|
|
118
94
|
/**
|
|
119
|
-
* Build an agent registry that resolves agents from
|
|
120
|
-
*
|
|
121
|
-
* Results are cached by flavour path for the lifetime of the process.
|
|
95
|
+
* Build an agent registry that resolves agents exclusively from src/agents/.
|
|
96
|
+
* Cached for the lifetime of the process.
|
|
122
97
|
*/
|
|
123
|
-
const buildAgentRegistry = (
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (!defaultAgentsDir) {
|
|
98
|
+
const buildAgentRegistry = () => {
|
|
99
|
+
if (registryCache)
|
|
100
|
+
return registryCache;
|
|
101
|
+
const agentsDir = resolveAgentsDir();
|
|
102
|
+
if (!agentsDir) {
|
|
129
103
|
throw new Error("Built-in agents directory not found");
|
|
130
104
|
}
|
|
131
105
|
const getCorePrompt = (filename) => {
|
|
132
|
-
const coreDir = resolveSubfolder("core",
|
|
106
|
+
const coreDir = resolveSubfolder("core", agentsDir);
|
|
133
107
|
if (!coreDir)
|
|
134
108
|
throw new Error("No core agents directory found");
|
|
135
109
|
const filepath = path.join(coreDir, filename);
|
|
@@ -139,13 +113,13 @@ const buildAgentRegistry = (flavourPath) => {
|
|
|
139
113
|
return fs.readFileSync(filepath, "utf-8");
|
|
140
114
|
};
|
|
141
115
|
const getSpecialists = (subfolder) => {
|
|
142
|
-
const dir = resolveSubfolder(subfolder,
|
|
116
|
+
const dir = resolveSubfolder(subfolder, agentsDir);
|
|
143
117
|
if (!dir)
|
|
144
118
|
return [];
|
|
145
119
|
return discoverSpecialistsInDir(dir, ["context.md", "gaps.md", "visual-coherence.md"]);
|
|
146
120
|
};
|
|
147
121
|
const getSpecialist = (subfolder, filename) => {
|
|
148
|
-
const dir = resolveSubfolder(subfolder,
|
|
122
|
+
const dir = resolveSubfolder(subfolder, agentsDir);
|
|
149
123
|
if (!dir)
|
|
150
124
|
return null;
|
|
151
125
|
const filepath = path.join(dir, filename);
|
|
@@ -154,7 +128,7 @@ const buildAgentRegistry = (flavourPath) => {
|
|
|
154
128
|
return parseSpecialistFile(filepath);
|
|
155
129
|
};
|
|
156
130
|
const getContext = (subfolder) => {
|
|
157
|
-
const dir = resolveSubfolder(subfolder,
|
|
131
|
+
const dir = resolveSubfolder(subfolder, agentsDir);
|
|
158
132
|
if (!dir)
|
|
159
133
|
return null;
|
|
160
134
|
const contextPath = path.join(dir, "context.md");
|
|
@@ -163,21 +137,13 @@ const buildAgentRegistry = (flavourPath) => {
|
|
|
163
137
|
return fs.readFileSync(contextPath, "utf-8");
|
|
164
138
|
};
|
|
165
139
|
const getSubAgents = () => {
|
|
166
|
-
const dir = resolveSubfolder("specialists",
|
|
140
|
+
const dir = resolveSubfolder("specialists", agentsDir);
|
|
167
141
|
if (!dir)
|
|
168
142
|
return [];
|
|
169
143
|
return (0, agent_scan_1.discoverAgentsInDir)(dir);
|
|
170
144
|
};
|
|
171
|
-
// Independent fallback: check flavour first, then base — unlike getContext which
|
|
172
|
-
// is bound to whichever subfolder resolveSubfolder picks (whole-subfolder replacement).
|
|
173
|
-
// This ensures every flavour gets at least the base gap checklist.
|
|
174
145
|
const getGaps = (subfolder) => {
|
|
175
|
-
|
|
176
|
-
const flavourGaps = path.join(flavourPath, subfolder, "gaps.md");
|
|
177
|
-
if (fs.existsSync(flavourGaps))
|
|
178
|
-
return fs.readFileSync(flavourGaps, "utf-8");
|
|
179
|
-
}
|
|
180
|
-
const baseGaps = path.join(defaultAgentsDir, subfolder, "gaps.md");
|
|
146
|
+
const baseGaps = path.join(agentsDir, subfolder, "gaps.md");
|
|
181
147
|
if (fs.existsSync(baseGaps))
|
|
182
148
|
return fs.readFileSync(baseGaps, "utf-8");
|
|
183
149
|
return null;
|
|
@@ -186,7 +152,7 @@ const buildAgentRegistry = (flavourPath) => {
|
|
|
186
152
|
return (0, agent_scan_1.buildAgentsFlag)(getSubAgents());
|
|
187
153
|
};
|
|
188
154
|
const registry = { getCorePrompt, getSpecialists, getSpecialist, getContext, getGaps, getSubAgents, getAgentsFlag };
|
|
189
|
-
registryCache =
|
|
155
|
+
registryCache = registry;
|
|
190
156
|
return registry;
|
|
191
157
|
};
|
|
192
158
|
exports.buildAgentRegistry = buildAgentRegistry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.registry.js","sourceRoot":"","sources":["../../../src/engine/discovery/agent.registry.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AACjC,6CAAsG;AA8BtG,
|
|
1
|
+
{"version":3,"file":"agent.registry.js","sourceRoot":"","sources":["../../../src/engine/discovery/agent.registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,9 @@ export type SkillAvailability = {
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const parseSkillCompatibility: (content: string) => string | null;
|
|
10
10
|
/**
|
|
11
|
-
* Check availability of recommended skills
|
|
12
|
-
* Reads SKILL.md files
|
|
13
|
-
*
|
|
11
|
+
* Check availability of recommended skills against the bundled plugin
|
|
12
|
+
* directory. Reads SKILL.md files, extracts compatibility info, and verifies
|
|
13
|
+
* that the underlying CLI tool is on PATH.
|
|
14
14
|
*/
|
|
15
15
|
export declare const checkRecommendedSkills: (skillNames: string[]) => SkillAvailability[];
|
|
16
16
|
/**
|
|
@@ -78,9 +78,9 @@ const isToolAvailable = (toolName) => {
|
|
|
78
78
|
}
|
|
79
79
|
};
|
|
80
80
|
/**
|
|
81
|
-
* Check availability of recommended skills
|
|
82
|
-
* Reads SKILL.md files
|
|
83
|
-
*
|
|
81
|
+
* Check availability of recommended skills against the bundled plugin
|
|
82
|
+
* directory. Reads SKILL.md files, extracts compatibility info, and verifies
|
|
83
|
+
* that the underlying CLI tool is on PATH.
|
|
84
84
|
*/
|
|
85
85
|
const checkRecommendedSkills = (skillNames) => {
|
|
86
86
|
if (skillNames.length === 0)
|
|
@@ -119,7 +119,7 @@ const formatSkillAvailability = (results) => {
|
|
|
119
119
|
if (results.length === 0)
|
|
120
120
|
return "";
|
|
121
121
|
const lines = [];
|
|
122
|
-
lines.push(" Recommended tools
|
|
122
|
+
lines.push(" Recommended tools:");
|
|
123
123
|
for (const { name, isAvailable } of results) {
|
|
124
124
|
const icon = isAvailable ? "✓" : "✗";
|
|
125
125
|
const status = isAvailable ? "(found)" : "(not found)";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.check.js","sourceRoot":"","sources":["../../../src/engine/discovery/skill.check.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"skill.check.js","sourceRoot":"","sources":["../../../src/engine/discovery/skill.check.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { type DiscoveredAgent, parseFrontmatter, discoverAgentsInDir, buildAgentsFlag, } from './discovery/agent.scan';
|
|
2
2
|
export { type SpecialistDef, buildAgentRegistry } from './discovery/agent.registry';
|
|
3
|
-
export { resolveFlavour } from './discovery/flavour.resolve';
|
|
4
3
|
export { invokeBuilder } from './pipeline/build.exec';
|
|
5
4
|
export { type InvokeOptions, invokeClaude } from './claude/claude.exec';
|
|
6
5
|
export { runPhase } from './pipeline/phase.sequence';
|