@moda-ai/cli 1.55.91 → 1.55.93

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.
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  buildDoctorReport
3
- } from "./cli-esna2ebz.js";
3
+ } from "./cli-2ctk8gy8.js";
4
4
  import"./cli-qwnkv4jy.js";
5
- import"./cli-5knr4dts.js";
5
+ import"./cli-0qgxw8cx.js";
6
6
  import"./cli-mm48br00.js";
7
7
  import {
8
8
  readHarnessSyncState
@@ -14,7 +14,7 @@ import {
14
14
  hashStableJson,
15
15
  readHarnessReport,
16
16
  validateHarnessReport
17
- } from "./cli-y333w08f.js";
17
+ } from "./cli-krm4w2v9.js";
18
18
  import"./cli-6ga6kmdp.js";
19
19
  import"./cli-dxajrq9h.js";
20
20
  import"./cli-13zdcv4w.js";
@@ -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-7j8cvzgc.js") : undefined;
98
+ const harness = graph ? await import("./harness-fjrhp1af.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),
@@ -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-7j8cvzgc.js");
5771
+ const { analyzeHarnessPrompts } = await import("./harness-fjrhp1af.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-abzze4g0.js");
5799
+ const { checkPromptAttribution } = await import("./prompt-attribution-5rdys8cj.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-7j8cvzgc.js");
6105
+ const { analyzeHarnessPrompts } = await import("./harness-fjrhp1af.js");
6106
6106
  const result = await analyzeHarnessPrompts({
6107
6107
  rootDir: root,
6108
6108
  existing: manifest.sources,
@@ -6303,7 +6303,7 @@ async function readHarnessSources(reportPath) {
6303
6303
  if (!graph) {
6304
6304
  throw new CliInputError(`${selected} is not a harness report with a graph (schema: ${schemaLabel}). Regenerate it with \`${HARNESS_REANALYZE_COMMAND}\`.`);
6305
6305
  }
6306
- const { normalizeHarnessReport } = await import("./harness-report-1q7322xg.js");
6306
+ const { normalizeHarnessReport } = await import("./harness-report-hn2aarv2.js");
6307
6307
  const { backfillPromptSource, resolvePromptSource } = await loadPromptSources();
6308
6308
  const report = normalizeHarnessReport(raw);
6309
6309
  const artifacts = (report.graph.artifacts ?? []).filter((artifact) => artifact.type === "prompt");
@@ -4,7 +4,7 @@ import {
4
4
  } from "./cli-qwnkv4jy.js";
5
5
  import {
6
6
  inspectPromptManifest
7
- } from "./cli-5knr4dts.js";
7
+ } from "./cli-0qgxw8cx.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-7j8cvzgc.js");
398
+ const { scanHarness } = await import("./harness-fjrhp1af.js");
399
399
  const current = scanHarness({
400
400
  rootDir: cwd,
401
401
  scannerVersion: "doctor",
@@ -35,7 +35,7 @@ import {
35
35
  tagComponentStatus,
36
36
  validateHarnessReport,
37
37
  writeHarnessReportArtifacts
38
- } from "./cli-y333w08f.js";
38
+ } from "./cli-krm4w2v9.js";
39
39
  import {
40
40
  assertFlags,
41
41
  assertPositionals,
@@ -5323,9 +5323,359 @@ function enumerateAgents(result, ctx) {
5323
5323
  }
5324
5324
 
5325
5325
  // src/harness-extract/instruction-templates.ts
5326
- function instructionTemplates(ctx, maxBytes = Number.POSITIVE_INFINITY, preferredPaths = []) {
5326
+ var MAX_FOLD_DEPTH = 6;
5327
+ var MAX_FOLD_CHARS = 64 * 1024;
5328
+ var MAX_FLOW_HOPS = 16;
5329
+ var MAX_TITLES = 24;
5330
+ var HEADING_LINE = /^[ \t]*#{1,6}[ \t]+(\S.*?)[ \t#]*$/;
5331
+ var READ_HEADING = /^[ \t]*#{1,6}[ \t]+[^\n{]*\S[ \t]*\n(?:\s*\{\{slot_\d+\}\})+\s*$/;
5332
+ var SQL_READ = /^\s*(?:select|with)\b/i;
5333
+ var ORM_READS = new Set(["findMany", "findFirst", "findUnique", "findOne", "findFirstOrThrow", "findUniqueOrThrow"]);
5334
+ var MODEL_CALLS = new Set(["generateText", "streamText", "generateObject", "streamObject"]);
5335
+ var MODEL_METHODS = /(?:^|\.)(?:messages|completions|responses)\.(?:create|stream|parse)$/;
5336
+ var isPlus = (node) => import_typescript9.default.isBinaryExpression(node) && node.operatorToken.kind === import_typescript9.default.SyntaxKind.PlusToken;
5337
+ var isStringLike = (node) => {
5338
+ const inner = unwrap(node);
5339
+ return import_typescript9.default.isStringLiteral(inner) || import_typescript9.default.isNoSubstitutionTemplateLiteral(inner) || import_typescript9.default.isTemplateExpression(inner);
5340
+ };
5341
+ var inRepository = (file) => !file.isDeclarationFile && !/[\\/]node_modules[\\/]/.test(file.fileName);
5342
+ function templateFacts(ctx) {
5343
+ const checkerOf = (node) => typeof ctx.checkerFor === "function" ? ctx.checkerFor(node.getSourceFile().fileName) : undefined;
5344
+ const bindingIn = (name, owner, text) => {
5345
+ if (import_typescript9.default.isIdentifier(name))
5346
+ return name.text === text ? owner : undefined;
5347
+ for (const element of name.elements) {
5348
+ if (!import_typescript9.default.isBindingElement(element))
5349
+ continue;
5350
+ const found = bindingIn(element.name, element, text);
5351
+ if (found)
5352
+ return found;
5353
+ }
5354
+ return;
5355
+ };
5356
+ const lexicalDeclaration = (identifier) => {
5357
+ const name = identifier.text;
5358
+ const inList = (list) => {
5359
+ for (const declaration of list.declarations) {
5360
+ const found = bindingIn(declaration.name, declaration, name);
5361
+ if (found)
5362
+ return found;
5363
+ }
5364
+ return;
5365
+ };
5366
+ const declares2 = (statement) => {
5367
+ if (import_typescript9.default.isVariableStatement(statement))
5368
+ return inList(statement.declarationList);
5369
+ if ((import_typescript9.default.isFunctionDeclaration(statement) || import_typescript9.default.isClassDeclaration(statement)) && statement.name?.text === name)
5370
+ return statement;
5371
+ return;
5372
+ };
5373
+ for (let scope = identifier.parent;scope; scope = scope.parent) {
5374
+ if ((import_typescript9.default.isForOfStatement(scope) || import_typescript9.default.isForInStatement(scope) || import_typescript9.default.isForStatement(scope)) && scope.initializer && import_typescript9.default.isVariableDeclarationList(scope.initializer)) {
5375
+ const found = inList(scope.initializer);
5376
+ if (found)
5377
+ return found;
5378
+ }
5379
+ if (isFunctionLike(scope)) {
5380
+ for (const parameter of scope.parameters) {
5381
+ const found = bindingIn(parameter.name, parameter, name);
5382
+ if (found)
5383
+ return found;
5384
+ }
5385
+ }
5386
+ if (import_typescript9.default.isBlock(scope) || import_typescript9.default.isSourceFile(scope) || import_typescript9.default.isModuleBlock(scope)) {
5387
+ for (const statement of scope.statements) {
5388
+ const found = declares2(statement);
5389
+ if (found)
5390
+ return found;
5391
+ }
5392
+ }
5393
+ }
5394
+ return;
5395
+ };
5396
+ const declarationOf = (identifier) => {
5397
+ const checker = checkerOf(identifier);
5398
+ if (!checker)
5399
+ return lexicalDeclaration(identifier);
5400
+ const declaration = valueDeclaration(resolvedSymbol(identifier, checker));
5401
+ return declaration && inRepository(declaration.getSourceFile()) ? declaration : undefined;
5402
+ };
5403
+ const folding = new Set;
5404
+ const fold = (node, depth) => {
5405
+ if (depth > MAX_FOLD_DEPTH)
5406
+ return;
5407
+ const inner = unwrap(node);
5408
+ if (import_typescript9.default.isStringLiteral(inner) || import_typescript9.default.isNoSubstitutionTemplateLiteral(inner))
5409
+ return { text: inner.text, string: true };
5410
+ if (import_typescript9.default.isNumericLiteral(inner))
5411
+ return { text: String(Number(inner.text)), string: false };
5412
+ if (import_typescript9.default.isTemplateExpression(inner)) {
5413
+ let text = inner.head.text;
5414
+ for (const span of inner.templateSpans) {
5415
+ const value = fold(span.expression, depth);
5416
+ if (value === undefined)
5417
+ return;
5418
+ text += value.text + span.literal.text;
5419
+ if (text.length > MAX_FOLD_CHARS)
5420
+ return;
5421
+ }
5422
+ return { text, string: true };
5423
+ }
5424
+ if (isPlus(inner)) {
5425
+ const left = fold(inner.left, depth);
5426
+ const right = left === undefined ? undefined : fold(inner.right, depth);
5427
+ if (!left || !right || !left.string && !right.string || left.text.length + right.text.length > MAX_FOLD_CHARS)
5428
+ return;
5429
+ return { text: left.text + right.text, string: true };
5430
+ }
5431
+ if (import_typescript9.default.isIdentifier(inner)) {
5432
+ const declaration = declarationOf(inner);
5433
+ if (!declaration || !import_typescript9.default.isVariableDeclaration(declaration) || !declaration.initializer || folding.has(declaration))
5434
+ return;
5435
+ if (!(import_typescript9.default.getCombinedNodeFlags(declaration) & import_typescript9.default.NodeFlags.Const))
5436
+ return;
5437
+ folding.add(declaration);
5438
+ try {
5439
+ return fold(declaration.initializer, depth + 1);
5440
+ } finally {
5441
+ folding.delete(declaration);
5442
+ }
5443
+ }
5444
+ return;
5445
+ };
5446
+ const constantValue = (node) => {
5447
+ const value = fold(node, 0);
5448
+ return value?.string ? value.text : undefined;
5449
+ };
5450
+ const calleeFunction = (call) => {
5451
+ const callee = unwrap(call.expression);
5452
+ const name = import_typescript9.default.isIdentifier(callee) ? callee : import_typescript9.default.isPropertyAccessExpression(callee) ? callee.name : undefined;
5453
+ if (!name)
5454
+ return;
5455
+ let declaration;
5456
+ if (import_typescript9.default.isIdentifier(name) && name === callee)
5457
+ declaration = declarationOf(name);
5458
+ else {
5459
+ const checker = checkerOf(name);
5460
+ const resolved = checker ? valueDeclaration(resolvedSymbol(name, checker)) : undefined;
5461
+ declaration = resolved && inRepository(resolved.getSourceFile()) ? resolved : undefined;
5462
+ }
5463
+ if (declaration && isFunctionLike(declaration))
5464
+ return declaration;
5465
+ if (declaration && import_typescript9.default.isVariableDeclaration(declaration) && declaration.initializer) {
5466
+ const initializer = unwrap(declaration.initializer);
5467
+ if (isFunctionLike(initializer))
5468
+ return initializer;
5469
+ }
5470
+ return;
5471
+ };
5472
+ const calleeText2 = (call) => calleeChain(call.expression)?.join(".") ?? "";
5473
+ const isModelCall = (call) => {
5474
+ const chain = calleeText2(call);
5475
+ return MODEL_CALLS.has(chain.split(".").pop() ?? "") || MODEL_METHODS.test(chain);
5476
+ };
5477
+ const primitiveRead = (node) => {
5478
+ if (import_typescript9.default.isTaggedTemplateExpression(node)) {
5479
+ const template = node.template;
5480
+ return SQL_READ.test(import_typescript9.default.isNoSubstitutionTemplateLiteral(template) ? template.text : template.head.text);
5481
+ }
5482
+ if (!import_typescript9.default.isCallExpression(node))
5483
+ return false;
5484
+ if (ORM_READS.has(calleeText2(node).split(".").pop() ?? ""))
5485
+ return true;
5486
+ const first2 = node.arguments[0] && unwrap(node.arguments[0]);
5487
+ const text = !first2 ? undefined : import_typescript9.default.isStringLiteral(first2) || import_typescript9.default.isNoSubstitutionTemplateLiteral(first2) ? first2.text : import_typescript9.default.isTemplateExpression(first2) ? first2.head.text : undefined;
5488
+ return text !== undefined && SQL_READ.test(text);
5489
+ };
5490
+ const readKind = (names) => names.some((name) => /memor|recall/i.test(name)) ? "memory" : names.some((name) => /(?:^|[._])file|File/.test(name)) ? "user_data" : "database";
5491
+ const scopeOf = (node) => enclosingFunction(node)?.body ?? node.getSourceFile();
5492
+ const valueIdentifier = (node) => import_typescript9.default.isIdentifier(node) && !((import_typescript9.default.isPropertyAccessExpression(node.parent) || import_typescript9.default.isPropertyAssignment(node.parent) || import_typescript9.default.isBindingElement(node.parent) || import_typescript9.default.isVariableDeclaration(node.parent) || import_typescript9.default.isParameter(node.parent)) && node.parent.name === node);
5493
+ const writesTo = (binding, name) => {
5494
+ const reassigned = [];
5495
+ const filled = [];
5496
+ const binds = (expression) => {
5497
+ const identifier = unwrap(expression);
5498
+ return import_typescript9.default.isIdentifier(identifier) && identifier.text === name && declarationOf(identifier) === binding;
5499
+ };
5500
+ const visit2 = (node) => {
5501
+ if (import_typescript9.default.isBinaryExpression(node) && node.operatorToken.kind === import_typescript9.default.SyntaxKind.EqualsToken) {
5502
+ const target = unwrap(node.left);
5503
+ if (binds(target))
5504
+ reassigned.push(node.right);
5505
+ else if ((import_typescript9.default.isElementAccessExpression(target) || import_typescript9.default.isPropertyAccessExpression(target)) && binds(target.expression))
5506
+ filled.push(node.right);
5507
+ } else if (import_typescript9.default.isCallExpression(node) && import_typescript9.default.isPropertyAccessExpression(unwrap(node.expression)) && unwrap(node.expression).name.text === "push" && binds(unwrap(node.expression).expression))
5508
+ filled.push(...node.arguments);
5509
+ import_typescript9.default.forEachChild(node, visit2);
5510
+ };
5511
+ visit2(scopeOf(binding));
5512
+ return { reassigned, filled };
5513
+ };
5514
+ const localValue = (identifier) => {
5515
+ const binding = declarationOf(identifier);
5516
+ if (!binding)
5517
+ return;
5518
+ let root = binding;
5519
+ const defaults = [];
5520
+ while (import_typescript9.default.isBindingElement(root)) {
5521
+ if (root.initializer)
5522
+ defaults.push(root.initializer);
5523
+ root = root.parent.parent;
5524
+ }
5525
+ if (import_typescript9.default.isParameter(root))
5526
+ return { kind: "parameter", binding, parameter: root };
5527
+ if (!import_typescript9.default.isVariableDeclaration(root))
5528
+ return;
5529
+ const list = root.parent;
5530
+ const forOf = import_typescript9.default.isVariableDeclarationList(list) && import_typescript9.default.isForOfStatement(list.parent) ? list.parent.expression : undefined;
5531
+ const { reassigned, filled } = writesTo(binding, identifier.text);
5532
+ return {
5533
+ kind: "local",
5534
+ binding,
5535
+ declaration: root,
5536
+ sources: [...forOf ? [forOf] : root.initializer ? [root.initializer] : [], ...defaults],
5537
+ filled,
5538
+ reassigned
5539
+ };
5540
+ };
5541
+ const returned = new Map;
5542
+ const flowRead = (expression, hops, seen) => {
5543
+ let found;
5544
+ const visit2 = (node) => {
5545
+ if (found || isFunctionLike(node))
5546
+ return;
5547
+ if (import_typescript9.default.isCallExpression(node)) {
5548
+ const name = calleeText2(node);
5549
+ if (isModelCall(node)) {
5550
+ found = { call: node, names: [name], model: true };
5551
+ return;
5552
+ }
5553
+ if (primitiveRead(node)) {
5554
+ found = { call: node, names: [name] };
5555
+ return;
5556
+ }
5557
+ const callee = calleeFunction(node);
5558
+ const inner = callee && hops < MAX_FLOW_HOPS ? returnsRead(callee, hops + 1) : null;
5559
+ if (inner) {
5560
+ found = { call: node, names: [name, ...inner.names], model: inner.model };
5561
+ return;
5562
+ }
5563
+ if (callee && !returnsParameter(callee))
5564
+ return;
5565
+ } else if (import_typescript9.default.isTaggedTemplateExpression(node) && primitiveRead(node)) {
5566
+ found = { call: node, names: [calleeChain(node.tag)?.join(".") ?? "sql"] };
5567
+ return;
5568
+ } else if (valueIdentifier(node) && hops < MAX_FLOW_HOPS) {
5569
+ const local = localValue(node);
5570
+ if (local?.kind === "parameter")
5571
+ return;
5572
+ if (local && !seen.has(local.binding)) {
5573
+ seen.add(local.binding);
5574
+ if (local.reassigned.length)
5575
+ return;
5576
+ for (const source of [...local.sources, ...local.filled]) {
5577
+ found = flowRead(source, hops + 1, seen);
5578
+ if (found)
5579
+ return;
5580
+ }
5581
+ return;
5582
+ }
5583
+ }
5584
+ import_typescript9.default.forEachChild(node, visit2);
5585
+ };
5586
+ visit2(expression);
5587
+ return found;
5588
+ };
5589
+ const returnsParameter = (fn) => {
5590
+ if (!fn.parameters.length)
5591
+ return false;
5592
+ const own = new Set(fn.parameters);
5593
+ const seen = new Set;
5594
+ const mentions = (node) => {
5595
+ if (valueIdentifier(node)) {
5596
+ const local = localValue(node);
5597
+ if (local?.kind === "parameter" && own.has(local.parameter))
5598
+ return true;
5599
+ if (local?.kind === "local" && !seen.has(local.binding) && enclosingFunction(local.declaration) === fn) {
5600
+ seen.add(local.binding);
5601
+ if ([...local.sources, ...local.reassigned, ...local.filled].some(mentions))
5602
+ return true;
5603
+ }
5604
+ }
5605
+ return import_typescript9.default.forEachChild(node, mentions) ?? false;
5606
+ };
5607
+ return returnExpressions(fn).some(mentions);
5608
+ };
5609
+ function returnsRead(fn, hops) {
5610
+ if (returned.has(fn))
5611
+ return returned.get(fn);
5612
+ returned.set(fn, null);
5613
+ let found = null;
5614
+ for (const expression of returnExpressions(fn)) {
5615
+ found = flowRead(expression, hops, new Set) ?? null;
5616
+ if (found)
5617
+ break;
5618
+ }
5619
+ returned.set(fn, found);
5620
+ return found;
5621
+ }
5622
+ const readOf = (expression) => {
5623
+ const flow = flowRead(expression, 0, new Set);
5624
+ if (!flow)
5625
+ return;
5626
+ return {
5627
+ kind: flow.model ? "llm_generated" : readKind(flow.names),
5628
+ path: relPath(ctx.rootDir, flow.call.getSourceFile().fileName),
5629
+ line: lineOf(flow.call),
5630
+ call: flow.names[0]
5631
+ };
5632
+ };
5633
+ const titleCache = new Map;
5634
+ const titlesOf = (fn) => {
5635
+ const cached = titleCache.get(fn);
5636
+ if (cached)
5637
+ return cached;
5638
+ const titles = new Set;
5639
+ const visit2 = (node) => {
5640
+ if (titles.size >= MAX_TITLES)
5641
+ return;
5642
+ if (import_typescript9.default.isStringLiteral(node) || import_typescript9.default.isNoSubstitutionTemplateLiteral(node) || import_typescript9.default.isTemplateHead(node) || import_typescript9.default.isTemplateMiddle(node) || import_typescript9.default.isTemplateTail(node)) {
5643
+ for (const line of node.text.split(`
5644
+ `)) {
5645
+ const title = HEADING_LINE.exec(line)?.[1];
5646
+ if (title && title.length <= 120 && !/\$\{|\{\{/.test(title))
5647
+ titles.add(title);
5648
+ }
5649
+ }
5650
+ import_typescript9.default.forEachChild(node, visit2);
5651
+ };
5652
+ if (fn.body)
5653
+ visit2(fn.body);
5654
+ const result = [...titles].slice(0, MAX_TITLES);
5655
+ titleCache.set(fn, result);
5656
+ return result;
5657
+ };
5658
+ return { constantValue, readOf, titlesOf };
5659
+ }
5660
+ function templateBody(node, constantValue, holes) {
5661
+ let body = node.head.text;
5662
+ for (const span of node.templateSpans) {
5663
+ const value = constantValue(span.expression);
5664
+ if (value !== undefined)
5665
+ body += value;
5666
+ else {
5667
+ body += `{{slot_${holes.length}}}`;
5668
+ holes.push(span.expression);
5669
+ }
5670
+ body += span.literal.text;
5671
+ }
5672
+ return body;
5673
+ }
5674
+ function instructionTemplates(ctx, maxBytes = Number.POSITIVE_INFINITY, preferredPaths = [], options = {}) {
5327
5675
  const reachability = buildImportGraphReachability(ctx.rootDir);
5328
5676
  const knownReachability = reachability.inProd.size + reachability.reachable.size > 0;
5677
+ const agentReach = options.agentFiles?.length ? reachability.reachFrom(options.agentFiles) : undefined;
5678
+ const facts = templateFacts(ctx);
5329
5679
  const templates = [];
5330
5680
  const ranks = new Map;
5331
5681
  const textFiles = new Set;
@@ -5338,7 +5688,7 @@ function instructionTemplates(ctx, maxBytes = Number.POSITIVE_INFINITY, preferre
5338
5688
  };
5339
5689
  for (const source of ctx.sourceFiles().slice().sort((a, b) => priority(a.fileName) - priority(b.fileName) || a.fileName.localeCompare(b.fileName))) {
5340
5690
  const path = relPath(ctx.rootDir, source.fileName);
5341
- if (isEvalPath(path) || isTestPath(path) || knownReachability && !reachability.inProd.has(path) && !reachability.reachable.has(path))
5691
+ if (isEvalPath(path) || isTestPath(path) || knownReachability && !reachability.inProd.has(path) && !reachability.reachable.has(path) || agentReach && agentReach.size > 0 && !agentReach.has(path))
5342
5692
  continue;
5343
5693
  for (const statement of source.statements) {
5344
5694
  if (!import_typescript9.default.isImportDeclaration(statement) || !import_typescript9.default.isStringLiteral(statement.moduleSpecifier))
@@ -5359,53 +5709,89 @@ function instructionTemplates(ctx, maxBytes = Number.POSITIVE_INFINITY, preferre
5359
5709
  ranks.set(entry, 0);
5360
5710
  } catch {}
5361
5711
  }
5362
- const constantText = (node) => {
5363
- if (import_typescript9.default.isStringLiteral(node) || import_typescript9.default.isNoSubstitutionTemplateLiteral(node))
5364
- return node.text;
5365
- if (import_typescript9.default.isParenthesizedExpression(node))
5366
- return constantText(node.expression);
5367
- if (import_typescript9.default.isBinaryExpression(node) && node.operatorToken.kind === import_typescript9.default.SyntaxKind.PlusToken) {
5368
- const left = constantText(node.left), right = constantText(node.right);
5369
- return left === undefined || right === undefined ? undefined : left + right;
5370
- }
5371
- return;
5712
+ const builderOf = (node) => {
5713
+ let fn = enclosingFunction(node);
5714
+ while (fn && !functionName(fn))
5715
+ fn = enclosingFunction(fn.parent);
5716
+ return fn;
5717
+ };
5718
+ const entryFor = (node, body, holes) => {
5719
+ const fn = builderOf(node);
5720
+ const name = fn ? functionName(fn) : undefined;
5721
+ const titles = fn && name ? facts.titlesOf(fn) : [];
5722
+ const reads = holes.flatMap((hole, slot) => {
5723
+ const read = facts.readOf(hole);
5724
+ return read ? [{ slot, ...read }] : [];
5725
+ });
5726
+ return {
5727
+ body,
5728
+ path,
5729
+ line: lineOf(node),
5730
+ endLine: source.getLineAndCharacterOfPosition(node.getEnd()).line + 1,
5731
+ ...name ? { function: name, functionLine: lineOf(fn) } : { kind: "static" },
5732
+ ...titles.length ? { titles } : {},
5733
+ ...reads.length ? { reads } : {}
5734
+ };
5735
+ };
5736
+ const literalLength = (body) => body.replace(/\{\{[\s\S]*?\}\}/g, "").trim().length;
5737
+ const readHeading = (node, body, holes) => {
5738
+ if (!holes.length || !READ_HEADING.test(body) || !builderOf(node))
5739
+ return;
5740
+ const entry = entryFor(node, body, holes);
5741
+ return entry.reads?.length === holes.length ? entry : undefined;
5372
5742
  };
5373
5743
  const visit2 = (node) => {
5374
- if (import_typescript9.default.isBinaryExpression(node) && node.operatorToken.kind === import_typescript9.default.SyntaxKind.PlusToken) {
5375
- const body = constantText(node);
5376
- if (body !== undefined && body.trim().length >= 60) {
5377
- let fn = enclosingFunction(node);
5378
- while (fn && !functionName(fn))
5379
- fn = enclosingFunction(fn.parent);
5380
- const name = fn ? functionName(fn) : undefined;
5381
- const entry = {
5382
- body,
5383
- path,
5384
- line: lineOf(node),
5385
- endLine: source.getLineAndCharacterOfPosition(node.getEnd()).line + 1,
5386
- ...name ? { function: name, functionLine: lineOf(fn) } : { kind: "static" }
5387
- };
5388
- templates.push(entry);
5389
- ranks.set(entry, 2);
5390
- return;
5744
+ if (isPlus(node) && !isPlus(node.parent)) {
5745
+ const operands = [];
5746
+ const flatten = (expression) => {
5747
+ while (import_typescript9.default.isParenthesizedExpression(expression) && isPlus(expression.expression))
5748
+ expression = expression.expression;
5749
+ if (isPlus(expression)) {
5750
+ flatten(expression.left);
5751
+ flatten(expression.right);
5752
+ } else
5753
+ operands.push(expression);
5754
+ };
5755
+ flatten(node);
5756
+ if (operands.some(isStringLike)) {
5757
+ const holes = [];
5758
+ let body = "";
5759
+ for (const operand of operands) {
5760
+ const value = facts.constantValue(operand);
5761
+ const inner = unwrap(operand);
5762
+ if (value !== undefined)
5763
+ body += value;
5764
+ else if (import_typescript9.default.isTemplateExpression(inner))
5765
+ body += templateBody(inner, facts.constantValue, holes);
5766
+ else {
5767
+ body += `{{slot_${holes.length}}}`;
5768
+ holes.push(operand);
5769
+ }
5770
+ }
5771
+ const fn = builderOf(node);
5772
+ const entry = holes.length === 0 ? body.trim().length >= 60 ? entryFor(node, body, holes) : undefined : literalLength(body) >= (fn ? 20 : 60) && /\s/.test(body) ? entryFor(node, body, holes) : readHeading(node, body, holes);
5773
+ if (entry) {
5774
+ templates.push(entry);
5775
+ ranks.set(entry, 2);
5776
+ for (const operand of operands) {
5777
+ const inner = unwrap(operand);
5778
+ if (import_typescript9.default.isTemplateExpression(inner))
5779
+ inner.templateSpans.forEach((span) => visit2(span.expression));
5780
+ else if (!import_typescript9.default.isStringLiteral(inner) && !import_typescript9.default.isNoSubstitutionTemplateLiteral(inner))
5781
+ visit2(operand);
5782
+ }
5783
+ return;
5784
+ }
5391
5785
  }
5392
5786
  }
5393
5787
  if (import_typescript9.default.isStringLiteral(node) || import_typescript9.default.isNoSubstitutionTemplateLiteral(node) || import_typescript9.default.isTemplateExpression(node)) {
5394
- let fn = enclosingFunction(node);
5395
- while (fn && !functionName(fn))
5396
- fn = enclosingFunction(fn.parent);
5397
- const name = fn ? functionName(fn) : undefined;
5398
- const body = import_typescript9.default.isTemplateExpression(node) ? node.head.text + node.templateSpans.map((span, index) => `{{slot_${index}}}${span.literal.text}`).join("") : node.text;
5399
- const literalLength = body.replace(/\{\{[\s\S]*?\}\}/g, "").trim().length;
5400
- if (literalLength < (name ? 20 : 60) || !/\s/.test(body))
5788
+ const holes = [];
5789
+ const body = import_typescript9.default.isTemplateExpression(node) ? templateBody(node, facts.constantValue, holes) : node.text;
5790
+ const fn = builderOf(node);
5791
+ const entry = literalLength(body) >= (fn ? 20 : 60) && /\s/.test(body) ? entryFor(node, body, holes) : readHeading(node, body, holes);
5792
+ if (!entry)
5401
5793
  return;
5402
- const entry = {
5403
- body,
5404
- path,
5405
- line: lineOf(node),
5406
- endLine: source.getLineAndCharacterOfPosition(node.getEnd()).line + 1,
5407
- ...name ? { function: name, functionLine: lineOf(fn) } : { kind: "static" }
5408
- };
5794
+ const name = entry.function;
5409
5795
  const property = import_typescript9.default.isPropertyAssignment(node.parent) ? node.parent.name.getText(source) : "";
5410
5796
  let binding = "";
5411
5797
  for (let parent = node.parent;parent; parent = parent.parent) {
@@ -5630,6 +6016,20 @@ function readInstructionOwnerCache(rootDir, fingerprint, sites, env = process.en
5630
6016
  return;
5631
6017
  }
5632
6018
  }
6019
+ var MAIN_GUARD = /\bprocess\.argv\b|\bimport\.meta\.main\b|\brequire\.main\s*===/;
6020
+ function scriptFiles(ctx) {
6021
+ const files = new Set;
6022
+ for (const source of ctx.sourceFiles()) {
6023
+ if (source.statements.some((statement) => !import_typescript9.default.isFunctionLike(statement) && !import_typescript9.default.isClassLike(statement) && !import_typescript9.default.isImportDeclaration(statement) && MAIN_GUARD.test(statement.getText(source))))
6024
+ files.add(relPath(ctx.rootDir, source.fileName));
6025
+ }
6026
+ return files;
6027
+ }
6028
+ function agentReachedTemplates(templates, scopes, scripts) {
6029
+ const owned = new Set(scopes.filter((scope) => scope.agentNames.length).map((scope) => scope.path));
6030
+ const unreached = new Set([...scripts].filter((path) => !owned.has(path) && !templates.some((template) => template.path === path && template.agentNames?.length)));
6031
+ return templates.filter((template) => !unreached.has(template.path));
6032
+ }
5633
6033
 
5634
6034
  // src/harness.ts
5635
6035
  import { createHash as createHash9 } from "node:crypto";
@@ -20845,7 +21245,7 @@ async function runHarnessCommand(context) {
20845
21245
  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.");
20846
21246
  }
20847
21247
  if (context.flags["github-actions"] === "true") {
20848
- const { runGithubActionsAnalyze } = await import("./harness-github-actions-pyt3baxe.js");
21248
+ const { runGithubActionsAnalyze } = await import("./harness-github-actions-3m6k2a71.js");
20849
21249
  const result = await runGithubActionsAnalyze(rootDir, {
20850
21250
  writeReport: (report2) => {
20851
21251
  const normalized = normalizeHarnessReport(report2);
@@ -20996,8 +21396,8 @@ async function runHarnessCommand(context) {
20996
21396
  }
20997
21397
  const { artifacts, unknowns, canonicalAgentIdentities } = deterministicGraphItems(rootDir, promote === "all" ? undefined : promote);
20998
21398
  tagComponentStatus({ runtimeAgents: [], artifacts }, rootDir);
20999
- const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-b45wadt6.js");
21000
- const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-paym0crb.js");
21399
+ const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-dcsgqzfr.js");
21400
+ const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-ekdmgbb6.js");
21001
21401
  let components = { runtimeAgents: [], artifacts: [], warnings: [] };
21002
21402
  if (promote === "all" || promote === "topology" || promote === "tools") {
21003
21403
  const { result, ctx } = extractHarnessWithContext2(rootDir);
@@ -21040,8 +21440,6 @@ async function runHarnessCommand(context) {
21040
21440
  const extracted = extractHarnessWithContext(rootDir, { tools: false, models: false });
21041
21441
  const { result, ctx } = extracted;
21042
21442
  mark("extract");
21043
- const inventory = instructionTemplates(ctx, Number.POSITIVE_INFINITY);
21044
- mark("templates");
21045
21443
  const sites = instructionOwnerSites(result.callSites);
21046
21444
  const fingerprint = extractFingerprint(extracted);
21047
21445
  let evidence = fingerprint ? readInstructionOwnerCache(rootDir, fingerprint, sites) : undefined;
@@ -21055,7 +21453,9 @@ async function runHarnessCommand(context) {
21055
21453
  }
21056
21454
  mark("owners");
21057
21455
  const { siteAgents, connectors } = evidence;
21058
- const templates = withTemplateOwners(inventory.templates, evidence.refs, (id) => Object.hasOwn(siteAgents, id) ? siteAgents[id] : [], evidence.scopes);
21456
+ const inventory = instructionTemplates(ctx, Number.POSITIVE_INFINITY, [], { agentFiles: [...new Set(evidence.scopes.map((scope) => scope.path))] });
21457
+ mark("templates");
21458
+ const templates = agentReachedTemplates(withTemplateOwners(inventory.templates, evidence.refs, (id) => Object.hasOwn(siteAgents, id) ? siteAgents[id] : [], evidence.scopes), evidence.scopes, scriptFiles(ctx));
21059
21459
  const payload = JSON.stringify({ templates, connectorSites: connectors });
21060
21460
  mark("join");
21061
21461
  context.output.writeData({
@@ -21069,8 +21469,8 @@ async function runHarnessCommand(context) {
21069
21469
  }
21070
21470
  case "extract": {
21071
21471
  writeHumanProgress(context, "Harness extract: tracing model call sites (no LLM, no network)...");
21072
- const { extractHarnessWithContext: extractHarnessWithContext2, serializeExtractResult } = await import("./index-b45wadt6.js");
21073
- const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-paym0crb.js");
21472
+ const { extractHarnessWithContext: extractHarnessWithContext2, serializeExtractResult } = await import("./index-dcsgqzfr.js");
21473
+ const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-ekdmgbb6.js");
21074
21474
  const { result, ctx } = extractHarnessWithContext2(rootDir, { fresh: true });
21075
21475
  const items = deterministicGraphItems(rootDir);
21076
21476
  const artifacts = items.artifacts;
@@ -21977,8 +22377,8 @@ var CONCERN_PROMOTED_ARTIFACT_TYPES = {
21977
22377
  evals: new Set(["model_config", "eval"])
21978
22378
  };
21979
22379
  async function deterministicFloorGraph(rootDir, options = {}) {
21980
- const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-b45wadt6.js");
21981
- const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-paym0crb.js");
22380
+ const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-dcsgqzfr.js");
22381
+ const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-ekdmgbb6.js");
21982
22382
  const { result, ctx } = extractHarnessWithContext2(rootDir);
21983
22383
  const items = deterministicGraphItems(rootDir);
21984
22384
  const components = mergeEnumeratedComponents(items.artifacts, enumerateHarnessComponents(result, ctx));
@@ -1102,11 +1102,12 @@ function analyzeRepository(rootDir) {
1102
1102
  }
1103
1103
  const all = walk(otherStarts, new Set(inProd));
1104
1104
  const reachable = new Set([...all].filter((file) => !inProd.has(file)));
1105
- return { inProd, reachable, files, workers, classFiles, resolveFile };
1105
+ const reachFrom = (starts) => walk([...starts].map((start) => resolveFile(start) ?? start));
1106
+ return { inProd, reachable, reachFrom, files, workers, classFiles, resolveFile };
1106
1107
  }
1107
1108
  function buildImportGraphReachability(rootDir) {
1108
- const { inProd, reachable } = analyzeRepository(rootDir);
1109
- return { inProd, reachable };
1109
+ const { inProd, reachable, reachFrom } = analyzeRepository(rootDir);
1110
+ return { inProd, reachable, reachFrom };
1110
1111
  }
1111
1112
  function norm2(value) {
1112
1113
  return typeof value === "string" ? value.toLowerCase().replace(/[^a-z0-9]/g, "") : "";
package/dist/cli.js CHANGED
@@ -2976,25 +2976,25 @@ function leafManifestFields(leaf, commands) {
2976
2976
  import { fileURLToPath } from "url";
2977
2977
  import { realpathSync } from "fs";
2978
2978
  async function runPromptsCommand(...args) {
2979
- return (await import("./prompts-smvr4001.js")).runPromptsCommand(...args);
2979
+ return (await import("./prompts-nhy5vagy.js")).runPromptsCommand(...args);
2980
2980
  }
2981
2981
  async function runSkillsCommand(...args) {
2982
2982
  return (await import("./skills-hf8fa7w7.js")).runSkillsCommand(...args);
2983
2983
  }
2984
2984
  async function runHarnessCommand(...args) {
2985
- return (await import("./harness-7j8cvzgc.js")).runHarnessCommand(...args);
2985
+ return (await import("./harness-fjrhp1af.js")).runHarnessCommand(...args);
2986
2986
  }
2987
2987
  async function runSyncCommand(...args) {
2988
- return (await import("./sync-m7n9rm5x.js")).runSyncCommand(...args);
2988
+ return (await import("./sync-bwx0ncm3.js")).runSyncCommand(...args);
2989
2989
  }
2990
2990
  async function runRegistryCommand(...args) {
2991
2991
  return (await import("./registry-4mhr7xsd.js")).runRegistryCommand(...args);
2992
2992
  }
2993
2993
  async function runDoctorCommand(...args) {
2994
- return (await import("./doctor-s0bxsdt9.js")).runDoctorCommand(...args);
2994
+ return (await import("./doctor-tkdk49s0.js")).runDoctorCommand(...args);
2995
2995
  }
2996
2996
  async function runStatusCommand(...args) {
2997
- return (await import("./doctor-s0bxsdt9.js")).runStatusCommand(...args);
2997
+ return (await import("./doctor-tkdk49s0.js")).runStatusCommand(...args);
2998
2998
  }
2999
2999
  async function runAuthCommand(...args) {
3000
3000
  return (await import("./profile-commands-tav5q639.js")).runAuthCommand(...args);
@@ -3006,7 +3006,7 @@ async function runProfilesCommand(...args) {
3006
3006
  return (await import("./profile-commands-tav5q639.js")).runProfilesCommand(...args);
3007
3007
  }
3008
3008
  async function runAgentCommand(...args) {
3009
- return (await import("./agent-scdstghf.js")).runAgentCommand(...args);
3009
+ return (await import("./agent-732v69qx.js")).runAgentCommand(...args);
3010
3010
  }
3011
3011
  async function runProductionCommand(...args) {
3012
3012
  return (await import("./production-intelligence-1y884f69.js")).runProductionCommand(...args);
@@ -6770,7 +6770,7 @@ var commandRegistry = createCommandRegistry([
6770
6770
  resetApiRequestCountBeforeRun: true,
6771
6771
  telemetry: "result-and-error",
6772
6772
  handler: async (context) => {
6773
- const { runInit } = await import("./index-ckqhs8ja.js");
6773
+ const { runInit } = await import("./index-rs7878j3.js");
6774
6774
  if (context.outputMode === "agent-stream") {
6775
6775
  context.output.writeEvent({
6776
6776
  event: "started",
@@ -3,9 +3,9 @@ import {
3
3
  promptsDiscoveredCheck,
4
4
  runDoctorCommand,
5
5
  runStatusCommand
6
- } from "./cli-esna2ebz.js";
6
+ } from "./cli-2ctk8gy8.js";
7
7
  import"./cli-qwnkv4jy.js";
8
- import"./cli-5knr4dts.js";
8
+ import"./cli-0qgxw8cx.js";
9
9
  import"./cli-mm48br00.js";
10
10
  import"./cli-k0vxtzxb.js";
11
11
  import"./cli-6ga6kmdp.js";
@@ -48,12 +48,12 @@ import {
48
48
  writeHarnessAnalyzeResult,
49
49
  writeHarnessArtifacts,
50
50
  writeHumanProgress
51
- } from "./cli-7nqp9wnf.js";
51
+ } from "./cli-cmj01mp1.js";
52
52
  import"./cli-k0vxtzxb.js";
53
53
  import"./cli-97fnztpy.js";
54
54
  import {
55
55
  HARNESS_ANALYZE_CONCERNS
56
- } from "./cli-y333w08f.js";
56
+ } from "./cli-krm4w2v9.js";
57
57
  import"./cli-6ga6kmdp.js";
58
58
  import"./cli-dxajrq9h.js";
59
59
  import"./cli-13zdcv4w.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  buildSourceSnapshot
3
- } from "./cli-7nqp9wnf.js";
3
+ } from "./cli-cmj01mp1.js";
4
4
  import"./cli-k0vxtzxb.js";
5
5
  import"./cli-97fnztpy.js";
6
- import"./cli-y333w08f.js";
6
+ import"./cli-krm4w2v9.js";
7
7
  import"./cli-6ga6kmdp.js";
8
8
  import"./cli-dxajrq9h.js";
9
9
  import"./cli-13zdcv4w.js";
@@ -24,7 +24,7 @@ import {
24
24
  stampRemoteSnapshotTruncation,
25
25
  validateHarnessReport,
26
26
  writeHarnessReportArtifacts
27
- } from "./cli-y333w08f.js";
27
+ } from "./cli-krm4w2v9.js";
28
28
  import"./cli-k4tqwah4.js";
29
29
  import"./cli-0v6na3yp.js";
30
30
  export {
@@ -20,10 +20,10 @@ import {
20
20
  serializeExtractResult,
21
21
  toolNamesOf,
22
22
  valueChildren
23
- } from "./cli-7nqp9wnf.js";
23
+ } from "./cli-cmj01mp1.js";
24
24
  import"./cli-k0vxtzxb.js";
25
25
  import"./cli-97fnztpy.js";
26
- import"./cli-y333w08f.js";
26
+ import"./cli-krm4w2v9.js";
27
27
  import"./cli-6ga6kmdp.js";
28
28
  import"./cli-dxajrq9h.js";
29
29
  import"./cli-13zdcv4w.js";
@@ -22,10 +22,10 @@ import {
22
22
  valueDeclaration,
23
23
  visit,
24
24
  workspacePackages
25
- } from "./cli-7nqp9wnf.js";
25
+ } from "./cli-cmj01mp1.js";
26
26
  import"./cli-k0vxtzxb.js";
27
27
  import"./cli-97fnztpy.js";
28
- import"./cli-y333w08f.js";
28
+ import"./cli-krm4w2v9.js";
29
29
  import"./cli-6ga6kmdp.js";
30
30
  import"./cli-dxajrq9h.js";
31
31
  import"./cli-13zdcv4w.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildDoctorReport
3
- } from "./cli-esna2ebz.js";
3
+ } from "./cli-2ctk8gy8.js";
4
4
  import {
5
5
  selectTenantAndCreateKey
6
6
  } from "./cli-62e1vy8f.js";
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  initPrompts,
22
22
  runPromptSync
23
- } from "./cli-5knr4dts.js";
23
+ } from "./cli-0qgxw8cx.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-7nqp9wnf.js";
49
+ } from "./cli-cmj01mp1.js";
50
50
  import {
51
51
  canonicalText,
52
52
  renderInitBanner,
@@ -58,7 +58,7 @@ import {
58
58
  import {
59
59
  stripAnsi
60
60
  } from "./cli-97fnztpy.js";
61
- import"./cli-y333w08f.js";
61
+ import"./cli-krm4w2v9.js";
62
62
  import"./cli-6ga6kmdp.js";
63
63
  import"./cli-dxajrq9h.js";
64
64
  import {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  inventoryFiles,
3
3
  safePromptEvidencePath
4
- } from "./cli-7nqp9wnf.js";
4
+ } from "./cli-cmj01mp1.js";
5
5
  import"./cli-k0vxtzxb.js";
6
6
  import"./cli-97fnztpy.js";
7
- import"./cli-y333w08f.js";
7
+ import"./cli-krm4w2v9.js";
8
8
  import"./cli-6ga6kmdp.js";
9
9
  import"./cli-dxajrq9h.js";
10
10
  import"./cli-13zdcv4w.js";
@@ -3,10 +3,10 @@ import {
3
3
  checkPromptMapping,
4
4
  discoverHarnessPromptSources,
5
5
  safePromptEvidencePath
6
- } from "./cli-7nqp9wnf.js";
6
+ } from "./cli-cmj01mp1.js";
7
7
  import"./cli-k0vxtzxb.js";
8
8
  import"./cli-97fnztpy.js";
9
- import"./cli-y333w08f.js";
9
+ import"./cli-krm4w2v9.js";
10
10
  import"./cli-6ga6kmdp.js";
11
11
  import"./cli-dxajrq9h.js";
12
12
  import"./cli-13zdcv4w.js";
@@ -9,7 +9,7 @@ import {
9
9
  runPromptSync,
10
10
  runPromptsCommand,
11
11
  writePromptSyncProgress
12
- } from "./cli-5knr4dts.js";
12
+ } from "./cli-0qgxw8cx.js";
13
13
  import {
14
14
  promptSourceHashPayload
15
15
  } from "./cli-mm48br00.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runPromptsCommand
3
- } from "./cli-5knr4dts.js";
3
+ } from "./cli-0qgxw8cx.js";
4
4
  import {
5
5
  runSkillsCommand
6
6
  } from "./cli-t8vmcbe0.js";
@@ -10,10 +10,10 @@ import"./cli-hcwdz9sd.js";
10
10
  import"./cli-mm48br00.js";
11
11
  import {
12
12
  runHarnessCommand
13
- } from "./cli-7nqp9wnf.js";
13
+ } from "./cli-cmj01mp1.js";
14
14
  import"./cli-k0vxtzxb.js";
15
15
  import"./cli-97fnztpy.js";
16
- import"./cli-y333w08f.js";
16
+ import"./cli-krm4w2v9.js";
17
17
  import"./cli-6ga6kmdp.js";
18
18
  import"./cli-dxajrq9h.js";
19
19
  import"./cli-13zdcv4w.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moda-ai/cli",
3
- "version": "1.55.91",
3
+ "version": "1.55.93",
4
4
  "description": "CLI for Moda: production monitoring and evals for AI agents.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": "moda.skill_index.v1",
3
- "bundled_at": "2026-10-23T03:11:31.981Z",
4
- "cli_version": "1.55.91",
3
+ "bundled_at": "2026-10-23T16:42:08.540Z",
4
+ "cli_version": "1.55.93",
5
5
  "skills": [
6
6
  {
7
7
  "id": "integration-cloudflare-think",