@harness-engineering/intelligence 0.4.0 → 0.4.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/index.js +37 -34
- package/dist/index.mjs +37 -34
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -245,43 +245,46 @@ function degradedRecommendation() {
|
|
|
245
245
|
alternatives: []
|
|
246
246
|
};
|
|
247
247
|
}
|
|
248
|
-
function
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
return { ok: false, reason: "binary-missing" };
|
|
259
|
-
}
|
|
260
|
-
return { ok: false, reason: "exec-failed" };
|
|
248
|
+
async function execCanary(exec, subArgs) {
|
|
249
|
+
const [cmd, args] = canaryInvocation(subArgs);
|
|
250
|
+
try {
|
|
251
|
+
const { stdout } = await exec(cmd, args);
|
|
252
|
+
return { ok: true, stdout };
|
|
253
|
+
} catch (err) {
|
|
254
|
+
const e = err;
|
|
255
|
+
if (e.code === "ENOENT") return { ok: false, reason: "not-installed" };
|
|
256
|
+
if (e.code === 1 && /canary binary not found/i.test(e.stderr ?? "")) {
|
|
257
|
+
return { ok: false, reason: "binary-missing" };
|
|
261
258
|
}
|
|
259
|
+
return { ok: false, reason: "exec-failed" };
|
|
262
260
|
}
|
|
261
|
+
}
|
|
262
|
+
async function probeCanary(exec) {
|
|
263
|
+
const res = await execCanary(exec, ["version"]);
|
|
264
|
+
if (!res.ok) return { status: "degraded", reason: res.reason };
|
|
265
|
+
if (res.stdout.trim() === "") return { status: "degraded", reason: "bad-output" };
|
|
266
|
+
const version = parseVersion(res.stdout);
|
|
267
|
+
return version ? { status: "available", version } : { status: "available" };
|
|
268
|
+
}
|
|
269
|
+
async function recommendFrameworkCanary(exec, prompt) {
|
|
270
|
+
const res = await execCanary(exec, ["recommend", prompt, "--json"]);
|
|
271
|
+
if (!res.ok) return degradedRecommendation();
|
|
272
|
+
const parsed = frameworkRecommendationSchema.safeParse(safeJson(res.stdout));
|
|
273
|
+
return parsed.success ? parsed.data : degradedRecommendation();
|
|
274
|
+
}
|
|
275
|
+
async function reviewTestCanary(exec, path2, framework) {
|
|
276
|
+
const args = ["review-test", path2, "--json"];
|
|
277
|
+
if (framework) args.push("--framework", framework);
|
|
278
|
+
const res = await execCanary(exec, args);
|
|
279
|
+
if (!res.ok) return [];
|
|
280
|
+
const parsed = canaryFindingsSchema.safeParse(safeJson(res.stdout));
|
|
281
|
+
return parsed.success ? parsed.data : [];
|
|
282
|
+
}
|
|
283
|
+
function createCanaryAdapter(exec = defaultExec) {
|
|
263
284
|
let cachedProbe;
|
|
264
|
-
const probe = () => cachedProbe ??= (
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
if (res.stdout.trim() === "") return { status: "degraded", reason: "bad-output" };
|
|
268
|
-
const version = parseVersion(res.stdout);
|
|
269
|
-
return version ? { status: "available", version } : { status: "available" };
|
|
270
|
-
})();
|
|
271
|
-
const recommendFramework = async (prompt) => {
|
|
272
|
-
const res = await execCanary(["recommend", prompt, "--json"]);
|
|
273
|
-
if (!res.ok) return degradedRecommendation();
|
|
274
|
-
const parsed = frameworkRecommendationSchema.safeParse(safeJson(res.stdout));
|
|
275
|
-
return parsed.success ? parsed.data : degradedRecommendation();
|
|
276
|
-
};
|
|
277
|
-
const reviewTest = async (path2, framework) => {
|
|
278
|
-
const args = ["review-test", path2, "--json"];
|
|
279
|
-
if (framework) args.push("--framework", framework);
|
|
280
|
-
const res = await execCanary(args);
|
|
281
|
-
if (!res.ok) return [];
|
|
282
|
-
const parsed = canaryFindingsSchema.safeParse(safeJson(res.stdout));
|
|
283
|
-
return parsed.success ? parsed.data : [];
|
|
284
|
-
};
|
|
285
|
+
const probe = () => cachedProbe ??= probeCanary(exec);
|
|
286
|
+
const recommendFramework = (prompt) => recommendFrameworkCanary(exec, prompt);
|
|
287
|
+
const reviewTest = (path2, framework) => reviewTestCanary(exec, path2, framework);
|
|
285
288
|
return { probe, recommendFramework, reviewTest };
|
|
286
289
|
}
|
|
287
290
|
|
package/dist/index.mjs
CHANGED
|
@@ -165,43 +165,46 @@ function degradedRecommendation() {
|
|
|
165
165
|
alternatives: []
|
|
166
166
|
};
|
|
167
167
|
}
|
|
168
|
-
function
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
return { ok: false, reason: "binary-missing" };
|
|
179
|
-
}
|
|
180
|
-
return { ok: false, reason: "exec-failed" };
|
|
168
|
+
async function execCanary(exec, subArgs) {
|
|
169
|
+
const [cmd, args] = canaryInvocation(subArgs);
|
|
170
|
+
try {
|
|
171
|
+
const { stdout } = await exec(cmd, args);
|
|
172
|
+
return { ok: true, stdout };
|
|
173
|
+
} catch (err) {
|
|
174
|
+
const e = err;
|
|
175
|
+
if (e.code === "ENOENT") return { ok: false, reason: "not-installed" };
|
|
176
|
+
if (e.code === 1 && /canary binary not found/i.test(e.stderr ?? "")) {
|
|
177
|
+
return { ok: false, reason: "binary-missing" };
|
|
181
178
|
}
|
|
179
|
+
return { ok: false, reason: "exec-failed" };
|
|
182
180
|
}
|
|
181
|
+
}
|
|
182
|
+
async function probeCanary(exec) {
|
|
183
|
+
const res = await execCanary(exec, ["version"]);
|
|
184
|
+
if (!res.ok) return { status: "degraded", reason: res.reason };
|
|
185
|
+
if (res.stdout.trim() === "") return { status: "degraded", reason: "bad-output" };
|
|
186
|
+
const version = parseVersion(res.stdout);
|
|
187
|
+
return version ? { status: "available", version } : { status: "available" };
|
|
188
|
+
}
|
|
189
|
+
async function recommendFrameworkCanary(exec, prompt) {
|
|
190
|
+
const res = await execCanary(exec, ["recommend", prompt, "--json"]);
|
|
191
|
+
if (!res.ok) return degradedRecommendation();
|
|
192
|
+
const parsed = frameworkRecommendationSchema.safeParse(safeJson(res.stdout));
|
|
193
|
+
return parsed.success ? parsed.data : degradedRecommendation();
|
|
194
|
+
}
|
|
195
|
+
async function reviewTestCanary(exec, path2, framework) {
|
|
196
|
+
const args = ["review-test", path2, "--json"];
|
|
197
|
+
if (framework) args.push("--framework", framework);
|
|
198
|
+
const res = await execCanary(exec, args);
|
|
199
|
+
if (!res.ok) return [];
|
|
200
|
+
const parsed = canaryFindingsSchema.safeParse(safeJson(res.stdout));
|
|
201
|
+
return parsed.success ? parsed.data : [];
|
|
202
|
+
}
|
|
203
|
+
function createCanaryAdapter(exec = defaultExec) {
|
|
183
204
|
let cachedProbe;
|
|
184
|
-
const probe = () => cachedProbe ??= (
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
if (res.stdout.trim() === "") return { status: "degraded", reason: "bad-output" };
|
|
188
|
-
const version = parseVersion(res.stdout);
|
|
189
|
-
return version ? { status: "available", version } : { status: "available" };
|
|
190
|
-
})();
|
|
191
|
-
const recommendFramework = async (prompt) => {
|
|
192
|
-
const res = await execCanary(["recommend", prompt, "--json"]);
|
|
193
|
-
if (!res.ok) return degradedRecommendation();
|
|
194
|
-
const parsed = frameworkRecommendationSchema.safeParse(safeJson(res.stdout));
|
|
195
|
-
return parsed.success ? parsed.data : degradedRecommendation();
|
|
196
|
-
};
|
|
197
|
-
const reviewTest = async (path2, framework) => {
|
|
198
|
-
const args = ["review-test", path2, "--json"];
|
|
199
|
-
if (framework) args.push("--framework", framework);
|
|
200
|
-
const res = await execCanary(args);
|
|
201
|
-
if (!res.ok) return [];
|
|
202
|
-
const parsed = canaryFindingsSchema.safeParse(safeJson(res.stdout));
|
|
203
|
-
return parsed.success ? parsed.data : [];
|
|
204
|
-
};
|
|
205
|
+
const probe = () => cachedProbe ??= probeCanary(exec);
|
|
206
|
+
const recommendFramework = (prompt) => recommendFrameworkCanary(exec, prompt);
|
|
207
|
+
const reviewTest = (path2, framework) => reviewTestCanary(exec, path2, framework);
|
|
205
208
|
return { probe, recommendFramework, reviewTest };
|
|
206
209
|
}
|
|
207
210
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@harness-engineering/intelligence",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "Intelligence pipeline for spec enrichment, complexity modeling, and pre-execution simulation",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"@anthropic-ai/sdk": "^0.95.1",
|
|
41
41
|
"openai": "^6.0.0",
|
|
42
42
|
"zod": "^3.25.76",
|
|
43
|
-
"@harness-engineering/graph": "0.11.
|
|
44
|
-
"@harness-engineering/types": "0.
|
|
43
|
+
"@harness-engineering/graph": "0.11.4",
|
|
44
|
+
"@harness-engineering/types": "0.18.0"
|
|
45
45
|
},
|
|
46
46
|
"optionalDependencies": {
|
|
47
47
|
"canary-test-cli": "^5.4.0"
|