@moda-ai/cli 1.55.79 → 1.55.81
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/{agent-3acxyetj.js → agent-qpkd30kf.js} +3 -3
- package/dist/{cli-qa0rbdjd.js → cli-1g4s7kv5.js} +161 -19
- package/dist/{cli-w5en52xc.js → cli-mmskch5x.js} +2 -2
- package/dist/{cli-m82f9yqj.js → cli-w3273wfb.js} +3 -3
- package/dist/cli.js +7 -7
- package/dist/{doctor-txsjyfes.js → doctor-wcnsa4vf.js} +2 -2
- package/dist/{harness-dbkbs04z.js → harness-fp6whmxb.js} +3 -1
- package/dist/{harness-github-actions-amef13q6.js → harness-github-actions-51v5jbtn.js} +1 -1
- package/dist/{index-0w2wddj1.js → index-ejy18zzk.js} +1 -1
- package/dist/{index-xb4svyw4.js → index-xhayray3.js} +3 -3
- package/dist/{index-4jaj5eyb.js → index-yax78wy5.js} +1 -1
- package/dist/{prompt-attribution-mxmgv3bt.js → prompt-attribution-v7qqfz4c.js} +1 -1
- package/dist/prompt-source-mcp.js +1 -1
- package/dist/{prompts-tc7fntm5.js → prompts-1spfbzym.js} +1 -1
- package/dist/{sync-chceab5e.js → sync-zmj30a60.js} +2 -2
- package/package.json +1 -1
- package/skills/integration/index.json +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildDoctorReport
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-mmskch5x.js";
|
|
4
4
|
import"./cli-rrggdmf8.js";
|
|
5
|
-
import"./cli-
|
|
5
|
+
import"./cli-w3273wfb.js";
|
|
6
6
|
import"./cli-mm48br00.js";
|
|
7
7
|
import {
|
|
8
8
|
readHarnessSyncState
|
|
@@ -95,7 +95,7 @@ async function buildAgentContext(context) {
|
|
|
95
95
|
const graph = readHarnessGraphIfPresent(context.cwd);
|
|
96
96
|
const reportState = readHarnessReportState(context.cwd);
|
|
97
97
|
const syncState = readHarnessSyncState(context.cwd);
|
|
98
|
-
const harness = graph ? await import("./harness-
|
|
98
|
+
const harness = graph ? await import("./harness-fp6whmxb.js") : undefined;
|
|
99
99
|
const topFindings = doctor.checks.filter((check) => check.status === "fail" || check.status === "warning").slice(0, 12).map(checkToFinding);
|
|
100
100
|
const evidenceRefs = [
|
|
101
101
|
...doctor.checks.map(checkToEvidenceRef),
|
|
@@ -18923,6 +18923,7 @@ var HARNESS_FAMILY_FLAGS = [
|
|
|
18923
18923
|
"analyst-model",
|
|
18924
18924
|
"assist",
|
|
18925
18925
|
"concern",
|
|
18926
|
+
"deterministic-floor",
|
|
18926
18927
|
"dry-run",
|
|
18927
18928
|
"experimental",
|
|
18928
18929
|
"from",
|
|
@@ -18937,6 +18938,7 @@ var HARNESS_FAMILY_FLAGS = [
|
|
|
18937
18938
|
"path",
|
|
18938
18939
|
"promote",
|
|
18939
18940
|
"remote",
|
|
18941
|
+
"repair",
|
|
18940
18942
|
"report",
|
|
18941
18943
|
"run",
|
|
18942
18944
|
"run-id",
|
|
@@ -19222,7 +19224,7 @@ async function runHarnessCommand(context) {
|
|
|
19222
19224
|
throw new CliInputError("Focused remote prompt analysis is not supported yet.", "Use local --analyst=claude|codex|cursor|local-scan, or drop --concern for a full remote report.");
|
|
19223
19225
|
}
|
|
19224
19226
|
if (context.flags["github-actions"] === "true") {
|
|
19225
|
-
const { runGithubActionsAnalyze } = await import("./harness-github-actions-
|
|
19227
|
+
const { runGithubActionsAnalyze } = await import("./harness-github-actions-51v5jbtn.js");
|
|
19226
19228
|
const result = await runGithubActionsAnalyze(rootDir, {
|
|
19227
19229
|
writeReport: (report2) => {
|
|
19228
19230
|
const normalized = normalizeHarnessReport(report2);
|
|
@@ -19261,7 +19263,12 @@ async function runHarnessCommand(context) {
|
|
|
19261
19263
|
elapsed_ms: Date.now() - context.startedAt
|
|
19262
19264
|
});
|
|
19263
19265
|
writeHumanProgress(context, "Moda Analyst: inventorying local harness files...");
|
|
19264
|
-
const graph =
|
|
19266
|
+
const graph = context.flags["deterministic-floor"] === "true" ? await deterministicFloorGraph(rootDir, {
|
|
19267
|
+
dryRun: context.dryRun,
|
|
19268
|
+
tenantId: tenant?.tenantId,
|
|
19269
|
+
tenantSource: tenant?.source,
|
|
19270
|
+
pathWasExplicit: context.flags.path !== undefined
|
|
19271
|
+
}) : scanHarness({
|
|
19265
19272
|
rootDir,
|
|
19266
19273
|
dryRun: context.dryRun,
|
|
19267
19274
|
tenantId: tenant?.tenantId,
|
|
@@ -19316,7 +19323,7 @@ async function runHarnessCommand(context) {
|
|
|
19316
19323
|
}
|
|
19317
19324
|
case "validate-report": {
|
|
19318
19325
|
const reportPath = resolveHarnessReportPath(rootDir, context.positionals[1] ?? context.flags.report);
|
|
19319
|
-
const report = readHarnessReport(reportPath);
|
|
19326
|
+
const report = context.flags.repair === "true" ? repairExternalAnalystReport(JSON.parse(readFileSync12(reportPath, "utf8")), rootDir) : readHarnessReport(reportPath);
|
|
19320
19327
|
const validation = validateHarnessReport(report, rootDir, {
|
|
19321
19328
|
deterministicFloor: computeDeterministicFloor(rootDir)
|
|
19322
19329
|
});
|
|
@@ -19368,8 +19375,8 @@ async function runHarnessCommand(context) {
|
|
|
19368
19375
|
}
|
|
19369
19376
|
const { artifacts, unknowns } = deterministicGraphItems(rootDir, promote === "all" ? undefined : promote);
|
|
19370
19377
|
tagComponentStatus({ runtimeAgents: [], artifacts }, rootDir);
|
|
19371
|
-
const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-
|
|
19372
|
-
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-
|
|
19378
|
+
const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-yax78wy5.js");
|
|
19379
|
+
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-ejy18zzk.js");
|
|
19373
19380
|
let components = { runtimeAgents: [], artifacts: [], warnings: [] };
|
|
19374
19381
|
if (promote === "all" || promote === "topology" || promote === "tools") {
|
|
19375
19382
|
const { result, ctx } = extractHarnessWithContext2(rootDir);
|
|
@@ -19403,8 +19410,8 @@ async function runHarnessCommand(context) {
|
|
|
19403
19410
|
}
|
|
19404
19411
|
case "extract": {
|
|
19405
19412
|
writeHumanProgress(context, "Harness extract: tracing model call sites (no LLM, no network)...");
|
|
19406
|
-
const { extractHarnessWithContext: extractHarnessWithContext2, serializeExtractResult } = await import("./index-
|
|
19407
|
-
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-
|
|
19413
|
+
const { extractHarnessWithContext: extractHarnessWithContext2, serializeExtractResult } = await import("./index-yax78wy5.js");
|
|
19414
|
+
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-ejy18zzk.js");
|
|
19408
19415
|
const { result, ctx } = extractHarnessWithContext2(rootDir, { fresh: true });
|
|
19409
19416
|
const artifacts = deterministicArtifacts(rootDir);
|
|
19410
19417
|
tagComponentStatus({ runtimeAgents: [], artifacts }, rootDir);
|
|
@@ -20119,6 +20126,7 @@ function removeArtifacts(report, ids) {
|
|
|
20119
20126
|
}
|
|
20120
20127
|
function repairExternalAnalystReport(report, rootDir, options = {}) {
|
|
20121
20128
|
const normalized = normalizeHarnessReport(report);
|
|
20129
|
+
normalized.graph.artifacts = normalized.graph.artifacts.filter((artifact) => !(/^__(?:END|BEGIN|START)__$/i.test(artifact.id) && artifact.type === "unknown" && artifact.name === artifact.id && artifact.scope === "shared" && artifact.confidence === 0.5 && artifact.usedByAgentIds?.length === 0 && Object.keys(artifact).every((key) => ["id", "type", "name", "scope", "confidence", "usedByAgentIds"].includes(key))));
|
|
20122
20130
|
repairCitationLines(normalized, rootDir);
|
|
20123
20131
|
mergeDeterministicReplacement(normalized, rootDir, options);
|
|
20124
20132
|
if (!options.concern || options.concern === "topology")
|
|
@@ -20281,6 +20289,30 @@ var CONCERN_PROMOTED_ARTIFACT_TYPES = {
|
|
|
20281
20289
|
prompts: new Set(["prompt"]),
|
|
20282
20290
|
evals: new Set(["model_config", "eval"])
|
|
20283
20291
|
};
|
|
20292
|
+
async function deterministicFloorGraph(rootDir, options = {}) {
|
|
20293
|
+
const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-yax78wy5.js");
|
|
20294
|
+
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-ejy18zzk.js");
|
|
20295
|
+
const { result, ctx } = extractHarnessWithContext2(rootDir);
|
|
20296
|
+
const items = deterministicGraphItems(rootDir);
|
|
20297
|
+
const components = mergeEnumeratedComponents(items.artifacts, enumerateHarnessComponents(result, ctx));
|
|
20298
|
+
const metadata = scanHarness({ ...options, rootDir });
|
|
20299
|
+
const graph = {
|
|
20300
|
+
...metadata,
|
|
20301
|
+
agentFamilies: [],
|
|
20302
|
+
runtimeAgents: components.runtimeAgents,
|
|
20303
|
+
artifacts: components.artifacts,
|
|
20304
|
+
relationships: [],
|
|
20305
|
+
unknowns: items.unknowns,
|
|
20306
|
+
channelAdapters: [],
|
|
20307
|
+
identityNamespaces: [],
|
|
20308
|
+
deployments: []
|
|
20309
|
+
};
|
|
20310
|
+
hydratePromptAndToolBodies(graph, rootDir);
|
|
20311
|
+
tagComponentStatus(graph, rootDir);
|
|
20312
|
+
deriveRelationshipsFromGraph(graph);
|
|
20313
|
+
enrichScanCaptureMetadata(graph);
|
|
20314
|
+
return graph;
|
|
20315
|
+
}
|
|
20284
20316
|
function deterministicArtifacts(rootDir, concern) {
|
|
20285
20317
|
return deterministicGraphItems(rootDir, concern).artifacts;
|
|
20286
20318
|
}
|
|
@@ -25946,6 +25978,8 @@ function promoteAll(report, rootDir) {
|
|
|
25946
25978
|
let artifact;
|
|
25947
25979
|
switch (candidate.kind) {
|
|
25948
25980
|
case "tool_definition":
|
|
25981
|
+
if (FIXTURE_DIR2.test(candidate.path) || isTestInput(candidate.path))
|
|
25982
|
+
break;
|
|
25949
25983
|
artifact = promoteToolCandidate(candidate, rootDir, confidence2, fileCache);
|
|
25950
25984
|
break;
|
|
25951
25985
|
case "prompt_file":
|
|
@@ -27607,7 +27641,7 @@ function toolNamesOf(tree) {
|
|
|
27607
27641
|
visit2(child, false, spread);
|
|
27608
27642
|
spread.forEach(set);
|
|
27609
27643
|
} else if (child.key) {
|
|
27610
|
-
set({ name: child.key, path: child.path, line: child.line, via: "key" });
|
|
27644
|
+
set({ name: child.key, path: child.path, line: child.line, start: child.start, via: "key" });
|
|
27611
27645
|
}
|
|
27612
27646
|
}
|
|
27613
27647
|
names.push(...record.values());
|
|
@@ -27665,6 +27699,7 @@ function emitTools(result, ctx, options = {}) {
|
|
|
27665
27699
|
const packageOf = workspacePackages(ctx.rootDir);
|
|
27666
27700
|
const found = new Map;
|
|
27667
27701
|
const ownersByTool = new Map;
|
|
27702
|
+
const recordSpans = new Map;
|
|
27668
27703
|
let definitionBytes = 0;
|
|
27669
27704
|
const limit = () => {
|
|
27670
27705
|
const warning = "tools: bounded tool catalog budget reached; some evidence or bodies omitted";
|
|
@@ -27690,9 +27725,14 @@ function emitTools(result, ctx, options = {}) {
|
|
|
27690
27725
|
found.set(key, tool);
|
|
27691
27726
|
ownersByTool.set(key, { direct: [], rpc: [], open: [] });
|
|
27692
27727
|
}
|
|
27728
|
+
if (evidence.start !== undefined && evidence.end !== undefined && /^(?:tools record key|tool stored under this key)$/.test(evidence.reason)) {
|
|
27729
|
+
const spans = recordSpans.get(tool) ?? [];
|
|
27730
|
+
spans.push({ path: evidence.path, start: evidence.start, end: evidence.end });
|
|
27731
|
+
recordSpans.set(tool, spans);
|
|
27732
|
+
}
|
|
27693
27733
|
if (enumerationRepository(ctx).status(evidence.path) !== "defined_only")
|
|
27694
27734
|
tool.status = "reachable";
|
|
27695
|
-
if (tool.evidence.length < MAX_EVIDENCE_PER_TOOL && !tool.evidence.some((other) => other.path === evidence.path && other.line === evidence.line)) {
|
|
27735
|
+
if (tool.evidence.length < MAX_EVIDENCE_PER_TOOL && !tool.evidence.some((other) => other.path === evidence.path && other.line === evidence.line && other.start === evidence.start && other.end === evidence.end)) {
|
|
27696
27736
|
tool.evidence.push(evidence);
|
|
27697
27737
|
tool.calledFrom.push({ path: evidence.path, line: evidence.line, ...enclosing ? { enclosing } : {} });
|
|
27698
27738
|
}
|
|
@@ -27731,7 +27771,7 @@ function emitTools(result, ctx, options = {}) {
|
|
|
27731
27771
|
const checker = program.getTypeChecker();
|
|
27732
27772
|
const tracer = tracerFor(program);
|
|
27733
27773
|
const names = (expression) => literalStrings(expression, tracer).slice(0, MAX_NAMES_PER_SITE);
|
|
27734
|
-
const at = (node, reason) => ({ path: rel2, line: lineOf(node), reason });
|
|
27774
|
+
const at = (node, reason) => ({ path: rel2, line: lineOf(node), reason, start: node.getStart(), end: node.getEnd() });
|
|
27735
27775
|
const visitObject = (object) => {
|
|
27736
27776
|
const keys = object.properties.map((property) => propertyNameText(property.name) ?? "");
|
|
27737
27777
|
const nameExpr = propertyValue(object, "name");
|
|
@@ -27761,9 +27801,10 @@ function emitTools(result, ctx, options = {}) {
|
|
|
27761
27801
|
continue;
|
|
27762
27802
|
const agents = owners.ownersOf(property, program);
|
|
27763
27803
|
const options2 = toolOptions(property.initializer);
|
|
27764
|
-
const
|
|
27804
|
+
const definitions = definitionNodes(property.initializer, checker);
|
|
27765
27805
|
for (const name of list)
|
|
27766
|
-
|
|
27806
|
+
for (const definition of definitions)
|
|
27807
|
+
add(name, "record", at(property, "tools record key"), agents, definition, options2 ? displayNameOf(options2, tracer) : undefined, enclosingName(property));
|
|
27767
27808
|
}
|
|
27768
27809
|
};
|
|
27769
27810
|
const visit2 = (node) => {
|
|
@@ -27775,9 +27816,10 @@ function emitTools(result, ctx, options = {}) {
|
|
|
27775
27816
|
if (list.length > 0) {
|
|
27776
27817
|
const agents = owners.ownersOf(node, program);
|
|
27777
27818
|
const options2 = toolOptions(node.right);
|
|
27778
|
-
const
|
|
27819
|
+
const definitions = definitionNodes(node.right, checker);
|
|
27779
27820
|
for (const name of list)
|
|
27780
|
-
|
|
27821
|
+
for (const definition of definitions)
|
|
27822
|
+
add(name, "record", at(node, "tool stored under this key"), agents, definition, options2 ? displayNameOf(options2, tracer) : undefined, enclosingName(node));
|
|
27781
27823
|
}
|
|
27782
27824
|
}
|
|
27783
27825
|
} catch {}
|
|
@@ -27796,6 +27838,15 @@ function emitTools(result, ctx, options = {}) {
|
|
|
27796
27838
|
const local = candidates.filter((tool) => (tool.package ?? "") === packageOf(path));
|
|
27797
27839
|
return local.length === 1 ? local[0] : candidates.length === 1 ? candidates[0] : undefined;
|
|
27798
27840
|
};
|
|
27841
|
+
const targetsForHit = (name, path, start) => {
|
|
27842
|
+
const offered = [...found.values()].filter((tool) => tool.name === name && tool.surface).flatMap((tool) => (recordSpans.get(tool) ?? []).filter((entry) => entry.path === path && start !== undefined && entry.start !== undefined && entry.end !== undefined && entry.start <= start && start < entry.end).map((entry) => ({ tool, width: entry.end - entry.start })));
|
|
27843
|
+
if (offered.length > 0) {
|
|
27844
|
+
const nearest = Math.min(...offered.map((entry) => entry.width));
|
|
27845
|
+
return [...new Set(offered.filter((entry) => entry.width === nearest).map((entry) => entry.tool))];
|
|
27846
|
+
}
|
|
27847
|
+
const target = targetFor(name, path);
|
|
27848
|
+
return target ? [target] : [];
|
|
27849
|
+
};
|
|
27799
27850
|
for (const role of result.roles) {
|
|
27800
27851
|
if (role.role !== "tools" || role.sink.isTest || skipPath(role.sink.path))
|
|
27801
27852
|
continue;
|
|
@@ -27804,9 +27855,11 @@ function emitTools(result, ctx, options = {}) {
|
|
|
27804
27855
|
for (const hit of toolNamesOf(role.tree).names) {
|
|
27805
27856
|
if (skipPath(hit.path))
|
|
27806
27857
|
continue;
|
|
27807
|
-
const
|
|
27808
|
-
const ambiguous =
|
|
27809
|
-
|
|
27858
|
+
const targets = targetsForHit(hit.name, hit.path, hit.start);
|
|
27859
|
+
const ambiguous = targets.length === 0 && [...found.values()].some((tool) => tool.name === hit.name && tool.surface);
|
|
27860
|
+
for (const target of targets.length > 0 ? targets : [undefined]) {
|
|
27861
|
+
add(hit.name, "tools-arg", { path: hit.path, line: hit.line, reason: `named in the tools argument of ${role.sink.callee} at ${role.sink.path}:${role.sink.line}` }, ambiguous ? { direct: [], rpc: [], open: [] } : siteOwners, undefined, undefined, role.sink.enclosing, target?.surface);
|
|
27862
|
+
}
|
|
27810
27863
|
}
|
|
27811
27864
|
}
|
|
27812
27865
|
joinSurfaces(found, ownersByTool);
|
|
@@ -27823,7 +27876,10 @@ function emitTools(result, ctx, options = {}) {
|
|
|
27823
27876
|
let owners2 = callOwners.get(hit.name);
|
|
27824
27877
|
if (!owners2)
|
|
27825
27878
|
callOwners.set(hit.name, owners2 = []);
|
|
27826
|
-
|
|
27879
|
+
const targets = targetsForHit(hit.name, hit.path, hit.start);
|
|
27880
|
+
for (const surface of targets.length > 0 ? targets.map((tool) => tool.surface) : [surfaceOf(hit.path, packageOf(hit.path))]) {
|
|
27881
|
+
owners2.push({ pkg: packageOf(hit.path), surface, ids });
|
|
27882
|
+
}
|
|
27827
27883
|
}
|
|
27828
27884
|
}
|
|
27829
27885
|
for (const [key, tool] of found) {
|
|
@@ -27997,8 +28053,48 @@ function isSchemaProperty(object) {
|
|
|
27997
28053
|
const holder = parent.parent;
|
|
27998
28054
|
return import_typescript12.default.isObjectLiteralExpression(holder) && import_typescript12.default.isPropertyAssignment(holder.parent) && propertyNameText(holder.parent.name) === "properties";
|
|
27999
28055
|
}
|
|
28056
|
+
function executeToolFactories(expression, checker) {
|
|
28057
|
+
const value = unwrap(expression);
|
|
28058
|
+
if (!import_typescript12.default.isPropertyAccessExpression(value) || value.name.text !== "tool")
|
|
28059
|
+
return [];
|
|
28060
|
+
const find = (node, seen, depth) => {
|
|
28061
|
+
const current = unwrap(node);
|
|
28062
|
+
if (depth > 6 || seen.has(current))
|
|
28063
|
+
return [];
|
|
28064
|
+
seen.add(current);
|
|
28065
|
+
if (import_typescript12.default.isIdentifier(current)) {
|
|
28066
|
+
const declaration = valueDeclaration(resolvedSymbol(current, checker));
|
|
28067
|
+
if (declaration && import_typescript12.default.isVariableDeclaration(declaration) && declaration.initializer && declaration.parent.flags & import_typescript12.default.NodeFlags.Const) {
|
|
28068
|
+
return find(declaration.initializer, seen, depth + 1);
|
|
28069
|
+
}
|
|
28070
|
+
}
|
|
28071
|
+
if (import_typescript12.default.isConditionalExpression(current))
|
|
28072
|
+
return [...find(current.whenTrue, new Set(seen), depth + 1), ...find(current.whenFalse, new Set(seen), depth + 1)];
|
|
28073
|
+
if (import_typescript12.default.isCallExpression(current) && import_typescript12.default.isIdentifier(current.expression)) {
|
|
28074
|
+
const origin = importOrigin(current.expression, checker);
|
|
28075
|
+
if (origin?.imported === "createExecuteRuntime" && origin.module === "@cloudflare/think/tools/execute")
|
|
28076
|
+
return [current];
|
|
28077
|
+
}
|
|
28078
|
+
return [];
|
|
28079
|
+
};
|
|
28080
|
+
return [...new Set(find(value.expression, new Set, 0))];
|
|
28081
|
+
}
|
|
28082
|
+
function definitionNodes(expression, checker, depth = 0) {
|
|
28083
|
+
const value = unwrap(expression);
|
|
28084
|
+
const factories = executeToolFactories(value, checker);
|
|
28085
|
+
if (factories.length > 0)
|
|
28086
|
+
return factories;
|
|
28087
|
+
if (import_typescript12.default.isIdentifier(value) && depth < 2) {
|
|
28088
|
+
const declaration = valueDeclaration(resolvedSymbol(value, checker));
|
|
28089
|
+
if (declaration && import_typescript12.default.isVariableDeclaration(declaration) && declaration.initializer)
|
|
28090
|
+
return definitionNodes(declaration.initializer, checker, depth + 1);
|
|
28091
|
+
}
|
|
28092
|
+
return [definitionNode(value, checker)];
|
|
28093
|
+
}
|
|
28000
28094
|
function isToolValue(expression, checker, depth = 0) {
|
|
28001
28095
|
const value = unwrap(expression);
|
|
28096
|
+
if (executeToolFactories(value, checker).length > 0)
|
|
28097
|
+
return true;
|
|
28002
28098
|
if (import_typescript12.default.isCallExpression(value)) {
|
|
28003
28099
|
const callee = unwrap(value.expression);
|
|
28004
28100
|
const name = import_typescript12.default.isIdentifier(callee) ? callee : import_typescript12.default.isPropertyAccessExpression(callee) ? callee.name : undefined;
|
|
@@ -29285,6 +29381,50 @@ function inheritedTrue(node, propertyName2, checker, seen = new Set) {
|
|
|
29285
29381
|
}
|
|
29286
29382
|
return false;
|
|
29287
29383
|
}
|
|
29384
|
+
function hasSkillSources(node, checker, seen = new Set) {
|
|
29385
|
+
if (seen.has(node))
|
|
29386
|
+
return false;
|
|
29387
|
+
seen.add(node);
|
|
29388
|
+
const member2 = node.members.find((member3) => nameOf(member3.name) === "getSkills" && !(import_typescript16.default.getCombinedModifierFlags(member3) & import_typescript16.default.ModifierFlags.Static));
|
|
29389
|
+
if (member2) {
|
|
29390
|
+
const hook = import_typescript16.default.isMethodDeclaration(member2) ? member2 : import_typescript16.default.isPropertyDeclaration(member2) && member2.initializer && (import_typescript16.default.isArrowFunction(unwrap(member2.initializer)) || import_typescript16.default.isFunctionExpression(unwrap(member2.initializer))) ? unwrap(member2.initializer) : undefined;
|
|
29391
|
+
if (!hook?.body)
|
|
29392
|
+
return false;
|
|
29393
|
+
const enabled = (expression, visited = new Set, depth = 0) => {
|
|
29394
|
+
const value = unwrap(expression);
|
|
29395
|
+
if (visited.has(value) || depth > 8)
|
|
29396
|
+
return false;
|
|
29397
|
+
visited.add(value);
|
|
29398
|
+
if (import_typescript16.default.isConditionalExpression(value))
|
|
29399
|
+
return enabled(value.whenTrue, new Set(visited), depth + 1) || enabled(value.whenFalse, new Set(visited), depth + 1);
|
|
29400
|
+
if (checker && (import_typescript16.default.isIdentifier(value) || import_typescript16.default.isPropertyAccessExpression(value))) {
|
|
29401
|
+
const declaration = valueDeclaration(resolvedSymbol(import_typescript16.default.isPropertyAccessExpression(value) ? value.name : value, checker));
|
|
29402
|
+
if (declaration && import_typescript16.default.isVariableDeclaration(declaration) && declaration.initializer && declaration.parent.flags & import_typescript16.default.NodeFlags.Const) {
|
|
29403
|
+
let populated = false;
|
|
29404
|
+
const symbol = resolvedSymbol(declaration.name, checker);
|
|
29405
|
+
const scan = (node2) => {
|
|
29406
|
+
if (import_typescript16.default.isCallExpression(node2) && import_typescript16.default.isPropertyAccessExpression(node2.expression) && ["push", "unshift", "splice"].includes(node2.expression.name.text) && resolvedSymbol(node2.expression.expression, checker) === symbol && node2.arguments.length > (node2.expression.name.text === "splice" ? 2 : 0))
|
|
29407
|
+
populated = true;
|
|
29408
|
+
if (import_typescript16.default.isBinaryExpression(node2) && node2.operatorToken.kind === import_typescript16.default.SyntaxKind.EqualsToken && import_typescript16.default.isElementAccessExpression(node2.left) && resolvedSymbol(node2.left.expression, checker) === symbol)
|
|
29409
|
+
populated = true;
|
|
29410
|
+
import_typescript16.default.forEachChild(node2, scan);
|
|
29411
|
+
};
|
|
29412
|
+
scan(declaration.getSourceFile());
|
|
29413
|
+
return populated || enabled(declaration.initializer, visited, depth + 1);
|
|
29414
|
+
}
|
|
29415
|
+
}
|
|
29416
|
+
return value.kind !== import_typescript16.default.SyntaxKind.NullKeyword && value.getText() !== "undefined" && (!import_typescript16.default.isArrayLiteralExpression(value) || value.elements.length > 0);
|
|
29417
|
+
};
|
|
29418
|
+
return returnExpressions(hook).some((expression) => enabled(expression));
|
|
29419
|
+
}
|
|
29420
|
+
if (checker)
|
|
29421
|
+
for (const base of node.heritageClauses?.flatMap((h) => h.types) ?? []) {
|
|
29422
|
+
const declaration = valueDeclaration(resolvedSymbol(base.expression, checker));
|
|
29423
|
+
if (declaration && (import_typescript16.default.isClassDeclaration(declaration) || import_typescript16.default.isClassExpression(declaration)) && hasSkillSources(declaration, checker, seen))
|
|
29424
|
+
return true;
|
|
29425
|
+
}
|
|
29426
|
+
return false;
|
|
29427
|
+
}
|
|
29288
29428
|
function enumerateToolCatalog(result, ctx) {
|
|
29289
29429
|
const output = emptyResult(), repo = enumerationRepository(ctx), agents = enumerateAgents(result, ctx);
|
|
29290
29430
|
const agentByName = new Map(agents.runtimeAgents.map((entry) => [entry.name, entry.id]));
|
|
@@ -29348,6 +29488,8 @@ function enumerateToolCatalog(result, ctx) {
|
|
|
29348
29488
|
const names = [...THINK_WORKSPACE_TOOLS];
|
|
29349
29489
|
if (inheritedTrue(node, "workspaceBash", checker))
|
|
29350
29490
|
names.push("bash");
|
|
29491
|
+
if (hasSkillSources(node, checker))
|
|
29492
|
+
names.push("read_skill_resource");
|
|
29351
29493
|
for (const name of names)
|
|
29352
29494
|
add(name, file, node, "think", "Think workspace tool inherited by this concrete agent", owners2);
|
|
29353
29495
|
}
|
|
@@ -29508,4 +29650,4 @@ function mergeEnumeratedComponents(artifacts, components) {
|
|
|
29508
29650
|
return { runtimeAgents, artifacts: output };
|
|
29509
29651
|
}
|
|
29510
29652
|
|
|
29511
|
-
export { startRemoteAnalyze, pollRemoteAnalyzeUntilDone, isRecoverableRemoteRun, checkPromptMapping, safePromptEvidencePath, discoverHarnessPromptSources, valueChildren, selectKey, allValues, renderings, CALL_SINKS, registerCallSink, registerClassSink, isModelId, collectModels, modelArtifacts, modelUnknowns, collectModelLiterals, agentForScope, createAgentScopeResolver, enumerateAgents, toolNamesOf, EXTRACT_SCHEMA_VERSION, enumerateWorkflows, enumerateToolCatalog, ENUMERATORS, enumerateHarnessComponents, mergeEnumeratedComponents, clearExtractCache, extractHarness, extractHarnessWithContext, scopeOf, serializeExtractResult, runEnumerators, assignAgentIds, runHarnessCommand, writeHarnessAnalyzeResult, emitWrittenArtifacts, analyzeHarnessPrompts, isToolGroupPlaceholder, deterministicOnlyArtifactTypes, repairExternalAnalystReport, deriveRelationshipsFromGraph, deterministicArtifacts, deterministicGraphItems, mergeDeterministicArtifacts, analystRefutations, describeCodingAgentEvent, analystEventProgress, isRetryableExternalAnalystFailure, sleep, summarizeInvalidAnalystReport, isDeterministicLocalAnalyst, resolveHarnessAnalyzeConcern, resolveExternalHarnessAnalystInvocation, detectAvailableCodingAgents, codingAgentDisplayName, runCodingAgent, readOnlyClaudeExtraArgs, resolveAnalystModel, renderExternalHarnessAnalystPrompt, CONCERN_CANDIDATE_KINDS, SEED_CANDIDATE_KIND_LABELS, renderAnalystCandidateLines, renderAnalystSeedLines, truncateText, scanHarness, summarizeHarness, buildSourceSnapshot, writeHumanProgress, describeSyncIdentity, describeSyncTenantLabel, findFresherHarnessReports, writeHarnessArtifacts, assertHarnessGraphSyncQuality, graphForSync, inventoryFiles, numericEnv, numericEnvAllowZero, computeDeterministicFloor, stableId, titleFromId, promptNameFromPath };
|
|
29653
|
+
export { startRemoteAnalyze, pollRemoteAnalyzeUntilDone, isRecoverableRemoteRun, checkPromptMapping, safePromptEvidencePath, discoverHarnessPromptSources, valueChildren, selectKey, allValues, renderings, CALL_SINKS, registerCallSink, registerClassSink, isModelId, collectModels, modelArtifacts, modelUnknowns, collectModelLiterals, agentForScope, createAgentScopeResolver, enumerateAgents, toolNamesOf, EXTRACT_SCHEMA_VERSION, enumerateWorkflows, enumerateToolCatalog, ENUMERATORS, enumerateHarnessComponents, mergeEnumeratedComponents, clearExtractCache, extractHarness, extractHarnessWithContext, scopeOf, serializeExtractResult, runEnumerators, assignAgentIds, runHarnessCommand, writeHarnessAnalyzeResult, emitWrittenArtifacts, analyzeHarnessPrompts, isToolGroupPlaceholder, deterministicOnlyArtifactTypes, repairExternalAnalystReport, deriveRelationshipsFromGraph, deterministicFloorGraph, deterministicArtifacts, deterministicGraphItems, mergeDeterministicArtifacts, analystRefutations, describeCodingAgentEvent, analystEventProgress, isRetryableExternalAnalystFailure, sleep, summarizeInvalidAnalystReport, isDeterministicLocalAnalyst, resolveHarnessAnalyzeConcern, resolveExternalHarnessAnalystInvocation, detectAvailableCodingAgents, codingAgentDisplayName, runCodingAgent, readOnlyClaudeExtraArgs, resolveAnalystModel, renderExternalHarnessAnalystPrompt, CONCERN_CANDIDATE_KINDS, SEED_CANDIDATE_KIND_LABELS, renderAnalystCandidateLines, renderAnalystSeedLines, truncateText, scanHarness, summarizeHarness, buildSourceSnapshot, writeHumanProgress, describeSyncIdentity, describeSyncTenantLabel, findFresherHarnessReports, writeHarnessArtifacts, assertHarnessGraphSyncQuality, graphForSync, inventoryFiles, numericEnv, numericEnvAllowZero, computeDeterministicFloor, stableId, titleFromId, promptNameFromPath };
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./cli-rrggdmf8.js";
|
|
5
5
|
import {
|
|
6
6
|
inspectPromptManifest
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-w3273wfb.js";
|
|
8
8
|
import {
|
|
9
9
|
readHarnessSyncState,
|
|
10
10
|
renderDoctorHuman,
|
|
@@ -395,7 +395,7 @@ async function harnessCurrentCheck(cwd, manifestPath, manifestExists, tenantId)
|
|
|
395
395
|
};
|
|
396
396
|
}
|
|
397
397
|
try {
|
|
398
|
-
const { scanHarness } = await import("./harness-
|
|
398
|
+
const { scanHarness } = await import("./harness-fp6whmxb.js");
|
|
399
399
|
const current = scanHarness({
|
|
400
400
|
rootDir: cwd,
|
|
401
401
|
scannerVersion: "doctor",
|
|
@@ -5768,7 +5768,7 @@ async function runPromptSyncExclusive(flags, profileOptions, options) {
|
|
|
5768
5768
|
const analyzedDefinitions = new Map;
|
|
5769
5769
|
if (flags["no-analyze"] !== "true") {
|
|
5770
5770
|
options.onProgress?.("Analyzing prompt sources before sync.");
|
|
5771
|
-
const { analyzeHarnessPrompts } = await import("./harness-
|
|
5771
|
+
const { analyzeHarnessPrompts } = await import("./harness-fp6whmxb.js");
|
|
5772
5772
|
const result = await analyzeHarnessPrompts({
|
|
5773
5773
|
rootDir: process.cwd(),
|
|
5774
5774
|
existing: established.flatMap((prompt) => prompt.sourceDefinition ? [prompt.sourceDefinition.source] : []),
|
|
@@ -5796,7 +5796,7 @@ async function runPromptSyncExclusive(flags, profileOptions, options) {
|
|
|
5796
5796
|
const mergedSources = mergePromptSources(manifest.sources, extraSources);
|
|
5797
5797
|
const manifestUpdate = stableJson(mergedSources) === stableJson(mergePromptSources(manifest.sources, [])) ? undefined : $stringify({ version: 2, prompt_paths: manifest.promptPaths, sources: mergedSources });
|
|
5798
5798
|
const prompts = await discoverPrompts(extraSources);
|
|
5799
|
-
const { checkPromptAttribution } = await import("./prompt-attribution-
|
|
5799
|
+
const { checkPromptAttribution } = await import("./prompt-attribution-v7qqfz4c.js");
|
|
5800
5800
|
const attribution = checkPromptAttribution(process.cwd(), prompts.map((prompt) => prompt.key));
|
|
5801
5801
|
const brokenAttribution = attribution.references.filter((reference) => reference.status === "missing");
|
|
5802
5802
|
if (brokenAttribution.length) {
|
|
@@ -6102,7 +6102,7 @@ async function migratePromptManifest(options = {}) {
|
|
|
6102
6102
|
let addedSources = [];
|
|
6103
6103
|
let pendingSources = [];
|
|
6104
6104
|
if (options.discover) {
|
|
6105
|
-
const { analyzeHarnessPrompts } = await import("./harness-
|
|
6105
|
+
const { analyzeHarnessPrompts } = await import("./harness-fp6whmxb.js");
|
|
6106
6106
|
const result = await analyzeHarnessPrompts({
|
|
6107
6107
|
rootDir: root,
|
|
6108
6108
|
existing: manifest.sources,
|
package/dist/cli.js
CHANGED
|
@@ -2975,25 +2975,25 @@ function leafManifestFields(leaf, commands) {
|
|
|
2975
2975
|
import { fileURLToPath } from "url";
|
|
2976
2976
|
import { realpathSync } from "fs";
|
|
2977
2977
|
async function runPromptsCommand(...args) {
|
|
2978
|
-
return (await import("./prompts-
|
|
2978
|
+
return (await import("./prompts-1spfbzym.js")).runPromptsCommand(...args);
|
|
2979
2979
|
}
|
|
2980
2980
|
async function runSkillsCommand(...args) {
|
|
2981
2981
|
return (await import("./skills-knpeqryb.js")).runSkillsCommand(...args);
|
|
2982
2982
|
}
|
|
2983
2983
|
async function runHarnessCommand(...args) {
|
|
2984
|
-
return (await import("./harness-
|
|
2984
|
+
return (await import("./harness-fp6whmxb.js")).runHarnessCommand(...args);
|
|
2985
2985
|
}
|
|
2986
2986
|
async function runSyncCommand(...args) {
|
|
2987
|
-
return (await import("./sync-
|
|
2987
|
+
return (await import("./sync-zmj30a60.js")).runSyncCommand(...args);
|
|
2988
2988
|
}
|
|
2989
2989
|
async function runRegistryCommand(...args) {
|
|
2990
2990
|
return (await import("./registry-c64qr7ta.js")).runRegistryCommand(...args);
|
|
2991
2991
|
}
|
|
2992
2992
|
async function runDoctorCommand(...args) {
|
|
2993
|
-
return (await import("./doctor-
|
|
2993
|
+
return (await import("./doctor-wcnsa4vf.js")).runDoctorCommand(...args);
|
|
2994
2994
|
}
|
|
2995
2995
|
async function runStatusCommand(...args) {
|
|
2996
|
-
return (await import("./doctor-
|
|
2996
|
+
return (await import("./doctor-wcnsa4vf.js")).runStatusCommand(...args);
|
|
2997
2997
|
}
|
|
2998
2998
|
async function runAuthCommand(...args) {
|
|
2999
2999
|
return (await import("./profile-commands-1fdvrs5y.js")).runAuthCommand(...args);
|
|
@@ -3005,7 +3005,7 @@ async function runProfilesCommand(...args) {
|
|
|
3005
3005
|
return (await import("./profile-commands-1fdvrs5y.js")).runProfilesCommand(...args);
|
|
3006
3006
|
}
|
|
3007
3007
|
async function runAgentCommand(...args) {
|
|
3008
|
-
return (await import("./agent-
|
|
3008
|
+
return (await import("./agent-qpkd30kf.js")).runAgentCommand(...args);
|
|
3009
3009
|
}
|
|
3010
3010
|
async function runProductionCommand(...args) {
|
|
3011
3011
|
return (await import("./production-intelligence-f9sd68te.js")).runProductionCommand(...args);
|
|
@@ -6769,7 +6769,7 @@ var commandRegistry = createCommandRegistry([
|
|
|
6769
6769
|
resetApiRequestCountBeforeRun: true,
|
|
6770
6770
|
telemetry: "result-and-error",
|
|
6771
6771
|
handler: async (context) => {
|
|
6772
|
-
const { runInit } = await import("./index-
|
|
6772
|
+
const { runInit } = await import("./index-xhayray3.js");
|
|
6773
6773
|
if (context.outputMode === "agent-stream") {
|
|
6774
6774
|
context.output.writeEvent({
|
|
6775
6775
|
event: "started",
|
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
promptsDiscoveredCheck,
|
|
4
4
|
runDoctorCommand,
|
|
5
5
|
runStatusCommand
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-mmskch5x.js";
|
|
7
7
|
import"./cli-rrggdmf8.js";
|
|
8
|
-
import"./cli-
|
|
8
|
+
import"./cli-w3273wfb.js";
|
|
9
9
|
import"./cli-mm48br00.js";
|
|
10
10
|
import"./cli-k0vxtzxb.js";
|
|
11
11
|
import"./cli-22yvg5kh.js";
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
describeSyncTenantLabel,
|
|
15
15
|
detectAvailableCodingAgents,
|
|
16
16
|
deterministicArtifacts,
|
|
17
|
+
deterministicFloorGraph,
|
|
17
18
|
deterministicGraphItems,
|
|
18
19
|
deterministicOnlyArtifactTypes,
|
|
19
20
|
emitWrittenArtifacts,
|
|
@@ -47,7 +48,7 @@ import {
|
|
|
47
48
|
writeHarnessAnalyzeResult,
|
|
48
49
|
writeHarnessArtifacts,
|
|
49
50
|
writeHumanProgress
|
|
50
|
-
} from "./cli-
|
|
51
|
+
} from "./cli-1g4s7kv5.js";
|
|
51
52
|
import"./cli-k0vxtzxb.js";
|
|
52
53
|
import"./cli-97fnztpy.js";
|
|
53
54
|
import {
|
|
@@ -97,6 +98,7 @@ export {
|
|
|
97
98
|
emitWrittenArtifacts,
|
|
98
99
|
deterministicOnlyArtifactTypes,
|
|
99
100
|
deterministicGraphItems,
|
|
101
|
+
deterministicFloorGraph,
|
|
100
102
|
deterministicArtifacts,
|
|
101
103
|
detectAvailableCodingAgents,
|
|
102
104
|
describeSyncTenantLabel,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildDoctorReport
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-mmskch5x.js";
|
|
4
4
|
import {
|
|
5
5
|
selectTenantAndCreateKey
|
|
6
6
|
} from "./cli-n1406hqg.js";
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
import {
|
|
21
21
|
initPrompts,
|
|
22
22
|
runPromptSync
|
|
23
|
-
} from "./cli-
|
|
23
|
+
} from "./cli-w3273wfb.js";
|
|
24
24
|
import {
|
|
25
25
|
agentsMdProblem,
|
|
26
26
|
runSkillSync
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
runCodingAgent,
|
|
47
47
|
runHarnessCommand,
|
|
48
48
|
startRemoteAnalyze
|
|
49
|
-
} from "./cli-
|
|
49
|
+
} from "./cli-1g4s7kv5.js";
|
|
50
50
|
import {
|
|
51
51
|
canonicalText,
|
|
52
52
|
renderInitBanner,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runPromptsCommand
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-w3273wfb.js";
|
|
4
4
|
import {
|
|
5
5
|
runSkillsCommand
|
|
6
6
|
} from "./cli-1smcq5pf.js";
|
|
@@ -10,7 +10,7 @@ import"./cli-hcwdz9sd.js";
|
|
|
10
10
|
import"./cli-mm48br00.js";
|
|
11
11
|
import {
|
|
12
12
|
runHarnessCommand
|
|
13
|
-
} from "./cli-
|
|
13
|
+
} from "./cli-1g4s7kv5.js";
|
|
14
14
|
import"./cli-k0vxtzxb.js";
|
|
15
15
|
import"./cli-97fnztpy.js";
|
|
16
16
|
import"./cli-y333w08f.js";
|
package/package.json
CHANGED