@moda-ai/cli 1.55.35 → 1.55.37

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.
Files changed (38) hide show
  1. package/dist/{agent-g07tg64w.js → agent-4pyeecf7.js} +8 -8
  2. package/dist/{cli-dr6x0zv7.js → cli-4d92a450.js} +1 -1
  3. package/dist/{cli-n2hng3gv.js → cli-cdx6yd7m.js} +19 -2
  4. package/dist/{cli-5fstvkva.js → cli-cr44672e.js} +5 -5
  5. package/dist/{cli-97jew729.js → cli-ef9eagsc.js} +1 -1
  6. package/dist/{cli-9bgnvth2.js → cli-gjzr7jq5.js} +1 -1
  7. package/dist/{cli-6j8h2ave.js → cli-npkb08xt.js} +8 -8
  8. package/dist/{cli-fwpqghgc.js → cli-nqgyz74b.js} +112 -2
  9. package/dist/{cli-yz8xcpyk.js → cli-nzx7rqjs.js} +1 -1
  10. package/dist/{cli-e23g9ywa.js → cli-s72pph9c.js} +1 -1
  11. package/dist/{cli-9bgk5jeh.js → cli-w3ckvma5.js} +3 -3
  12. package/dist/{cli-99p2jh28.js → cli-wg6e2a1g.js} +17 -4
  13. package/dist/{cli-k007ztbs.js → cli-wh83c3ss.js} +4 -4
  14. package/dist/{cli-x9cwat4a.js → cli-x605txan.js} +5 -5
  15. package/dist/{cli-602yx84w.js → cli-xkcy9wns.js} +5 -5
  16. package/dist/cli.js +179 -27
  17. package/dist/{doctor-tvre7zvk.js → doctor-w8z3wj1e.js} +7 -7
  18. package/dist/{fix-w5z02wt4.js → fix-667fyx00.js} +4 -4
  19. package/dist/{harness-6vwehf47.js → harness-fb0083ap.js} +5 -5
  20. package/dist/{harness-github-actions-6gdrpn4m.js → harness-github-actions-7s41s1vg.js} +5 -5
  21. package/dist/{index-75vcntpe.js → index-4w5szrnw.js} +11 -11
  22. package/dist/{production-intelligence-7wb1djy2.js → production-intelligence-v2wq2aqv.js} +3 -3
  23. package/dist/{profile-commands-h8evz9x0.js → profile-commands-3hw4trwk.js} +3 -3
  24. package/dist/{prompt-attribution-t0eq8gn8.js → prompt-attribution-g7md8hzc.js} +5 -5
  25. package/dist/prompt-source-mcp.js +5 -5
  26. package/dist/{prompts-b8qx3mrv.js → prompts-90v9eg2k.js} +5 -5
  27. package/dist/{prompts-ab-t7xptf0c.js → prompts-ab-59r52mxw.js} +7 -7
  28. package/dist/{prompts-propose-8feadk2t.js → prompts-propose-cbenbk8w.js} +7 -7
  29. package/dist/{provision-y5bdbh4y.js → provision-8c4s6vgg.js} +5 -5
  30. package/dist/{registry-ctnn8e26.js → registry-qvjyvbk8.js} +3 -3
  31. package/dist/{skills-96z55tj4.js → skills-z7w5x7jj.js} +5 -5
  32. package/dist/{sync-drz7req6.js → sync-r32tgpar.js} +7 -7
  33. package/package.json +1 -1
  34. package/skills/integration/index.json +2 -2
  35. package/skills/moda-cli/SKILL.md +3 -2
  36. package/skills/moda-cli/references/commands.md +2 -0
  37. package/skills/moda-cli/references/dashboard-parity.md +1 -0
  38. package/skills/moda-cli/references/detections.md +40 -0
package/dist/cli.js CHANGED
@@ -13,11 +13,14 @@ import {
13
13
  frustrationsFromEmotions,
14
14
  mapWithConcurrency,
15
15
  parseBatchTarget,
16
+ shapeToolCatalogDetail,
17
+ toolCatalogGetCommand,
18
+ toolFailureExamplesCommand,
16
19
  trimToolFailureConversations,
17
20
  withFrustrationAnchors,
18
21
  withToolFailureAnchors,
19
22
  withoutDetectionWindows
20
- } from "./cli-fwpqghgc.js";
23
+ } from "./cli-nqgyz74b.js";
21
24
  import {
22
25
  createCommandContext,
23
26
  envOptOutSet,
@@ -25,7 +28,7 @@ import {
25
28
  optOutFlagSet,
26
29
  parseBooleanFlagValue,
27
30
  withoutFlag
28
- } from "./cli-dr6x0zv7.js";
31
+ } from "./cli-4d92a450.js";
29
32
  import {
30
33
  AuditSchema,
31
34
  COMMAND_FLAG_SPECS,
@@ -67,12 +70,12 @@ import {
67
70
  unknownSignalsSubcommandError,
68
71
  usageLine,
69
72
  writeDryRun
70
- } from "./cli-n2hng3gv.js";
73
+ } from "./cli-cdx6yd7m.js";
71
74
  import {
72
75
  ApiError,
73
76
  callControlAPI,
74
77
  callDataAPI
75
- } from "./cli-e23g9ywa.js";
78
+ } from "./cli-s72pph9c.js";
76
79
  import {
77
80
  AGENT_ERROR_CODES,
78
81
  EXIT_AUTH_REQUIRED,
@@ -109,7 +112,7 @@ import {
109
112
  shellArg,
110
113
  validateConfig,
111
114
  wasOutputCancelled
112
- } from "./cli-99p2jh28.js";
115
+ } from "./cli-wg6e2a1g.js";
113
116
  import {
114
117
  CliAccessError,
115
118
  CliAuthError,
@@ -1242,6 +1245,24 @@ var CANONICAL_LEAVES = [
1242
1245
  summary: "Tool failure leaderboard, or one tool's failure examples",
1243
1246
  examples: ["moda detections tools --days-back=14", "moda detections tools <tool_name> --limit=3"]
1244
1247
  },
1248
+ {
1249
+ noun: "tools",
1250
+ verb: "list",
1251
+ path: "tools list",
1252
+ args: "",
1253
+ handler: "tool-catalog",
1254
+ summary: "Every tool called in the window: calls, failed calls, success rate, effect direction, last seen",
1255
+ examples: ["moda tools list --days-back=7", "moda tools list --sort=failure_rate --limit=10", "moda tools list --search=calendar --direction=write"]
1256
+ },
1257
+ {
1258
+ noun: "tools",
1259
+ verb: "get",
1260
+ path: "tools get",
1261
+ args: "<tool_name>",
1262
+ handler: "tool-catalog-detail",
1263
+ summary: "One tool: calls, recorded schema and payload fields, usage over time, top failure categories",
1264
+ examples: ["moda tools get <tool_name>", "moda tools get <tool_name> --days-back=30 --full"]
1265
+ },
1245
1266
  {
1246
1267
  noun: "review",
1247
1268
  verb: "",
@@ -1275,11 +1296,12 @@ var CANONICAL_LEAVES = [
1275
1296
  examples: ["moda skills push --dry-run", "moda skills push"]
1276
1297
  }
1277
1298
  ];
1278
- var CANONICAL_NOUNS = ["traces", "problems", "detections", "review", "reviews", "skills"];
1299
+ var CANONICAL_NOUNS = ["traces", "problems", "detections", "tools", "review", "reviews", "skills"];
1279
1300
  var NOUN_SUMMARIES = {
1280
1301
  traces: "Traces (agent runs): list, search, read, world state, raw spans",
1281
1302
  problems: "Problems ranked by root cause, their evidence, impact and lifecycle",
1282
1303
  detections: "Detections of every family, and the tool failure leaderboard",
1304
+ tools: "The Tool catalog: every tool with calls and success rate, and one tool's schema, usage and failure categories",
1283
1305
  review: "Mark a detection a false positive, correct, or clear the mark",
1284
1306
  reviews: "List false-positive marks and detection reviews",
1285
1307
  skills: "Generate, pull, push, and install agent skills"
@@ -2959,46 +2981,46 @@ function leafManifestFields(leaf, commands) {
2959
2981
  import { fileURLToPath } from "url";
2960
2982
  import { realpathSync } from "fs";
2961
2983
  async function runPromptsCommand(...args) {
2962
- return (await import("./prompts-b8qx3mrv.js")).runPromptsCommand(...args);
2984
+ return (await import("./prompts-90v9eg2k.js")).runPromptsCommand(...args);
2963
2985
  }
2964
2986
  async function runSkillsCommand(...args) {
2965
- return (await import("./skills-96z55tj4.js")).runSkillsCommand(...args);
2987
+ return (await import("./skills-z7w5x7jj.js")).runSkillsCommand(...args);
2966
2988
  }
2967
2989
  async function runFixCommand(...args) {
2968
- return (await import("./fix-w5z02wt4.js")).runFixCommand(...args);
2990
+ return (await import("./fix-667fyx00.js")).runFixCommand(...args);
2969
2991
  }
2970
2992
  async function runFixesCommand(...args) {
2971
- return (await import("./fix-w5z02wt4.js")).runFixesCommand(...args);
2993
+ return (await import("./fix-667fyx00.js")).runFixesCommand(...args);
2972
2994
  }
2973
2995
  async function runHarnessCommand(...args) {
2974
- return (await import("./harness-6vwehf47.js")).runHarnessCommand(...args);
2996
+ return (await import("./harness-fb0083ap.js")).runHarnessCommand(...args);
2975
2997
  }
2976
2998
  async function runSyncCommand(...args) {
2977
- return (await import("./sync-drz7req6.js")).runSyncCommand(...args);
2999
+ return (await import("./sync-r32tgpar.js")).runSyncCommand(...args);
2978
3000
  }
2979
3001
  async function runRegistryCommand(...args) {
2980
- return (await import("./registry-ctnn8e26.js")).runRegistryCommand(...args);
3002
+ return (await import("./registry-qvjyvbk8.js")).runRegistryCommand(...args);
2981
3003
  }
2982
3004
  async function runDoctorCommand(...args) {
2983
- return (await import("./doctor-tvre7zvk.js")).runDoctorCommand(...args);
3005
+ return (await import("./doctor-w8z3wj1e.js")).runDoctorCommand(...args);
2984
3006
  }
2985
3007
  async function runStatusCommand(...args) {
2986
- return (await import("./doctor-tvre7zvk.js")).runStatusCommand(...args);
3008
+ return (await import("./doctor-w8z3wj1e.js")).runStatusCommand(...args);
2987
3009
  }
2988
3010
  async function runAuthCommand(...args) {
2989
- return (await import("./profile-commands-h8evz9x0.js")).runAuthCommand(...args);
3011
+ return (await import("./profile-commands-3hw4trwk.js")).runAuthCommand(...args);
2990
3012
  }
2991
3013
  async function runConfigCommand(...args) {
2992
- return (await import("./profile-commands-h8evz9x0.js")).runConfigCommand(...args);
3014
+ return (await import("./profile-commands-3hw4trwk.js")).runConfigCommand(...args);
2993
3015
  }
2994
3016
  async function runProfilesCommand(...args) {
2995
- return (await import("./profile-commands-h8evz9x0.js")).runProfilesCommand(...args);
3017
+ return (await import("./profile-commands-3hw4trwk.js")).runProfilesCommand(...args);
2996
3018
  }
2997
3019
  async function runAgentCommand(...args) {
2998
- return (await import("./agent-g07tg64w.js")).runAgentCommand(...args);
3020
+ return (await import("./agent-4pyeecf7.js")).runAgentCommand(...args);
2999
3021
  }
3000
3022
  async function runProductionCommand(...args) {
3001
- return (await import("./production-intelligence-7wb1djy2.js")).runProductionCommand(...args);
3023
+ return (await import("./production-intelligence-v2wq2aqv.js")).runProductionCommand(...args);
3002
3024
  }
3003
3025
  function parseArgs(argv) {
3004
3026
  const args = argv.slice(2);
@@ -3285,6 +3307,7 @@ Start here (goal -> command):
3285
3307
  read one trace moda traces get <conversation_id> (whole trace: --all)
3286
3308
  what is broken moda overview, then moda problems list
3287
3309
  tool errors moda detections tools, then moda detections tools <tool_name>
3310
+ tool calls, success rate, schema moda tools list, then moda tools get <tool_name>
3288
3311
  user emotion and frustration moda detections list --family=emotion (or --family=frustration)
3289
3312
  raw spans for one trace moda traces spans <conversation_id|trace_id>
3290
3313
  a detection is wrong moda review <kind> <target> --reason=TEXT
@@ -3300,7 +3323,7 @@ Production data:
3300
3323
  users / user <user_id> End users with health and activity (the dashboard Users page)
3301
3324
  tail Live-tail new traces/detections as NDJSON (one line per item)
3302
3325
 
3303
- Traces, Problems, detections and review (moda <noun> --help lists the verbs):
3326
+ Traces, Problems, detections, tools and review (moda <noun> --help lists the verbs):
3304
3327
  ${canonicalTreeHelpLines().join(`
3305
3328
  `)}
3306
3329
 
@@ -3650,7 +3673,9 @@ async function attachWindows(rows, windowSize, budgetBytes) {
3650
3673
  }
3651
3674
  var TOOL_FAILURE_DETAIL_DEFAULT_LIMIT = 5;
3652
3675
  var TOOL_FAILURE_AGENT_SUBTYPES = 20;
3653
- async function printWithOptionalWindows(enriched, listKey, includeWindow, windowSize, output, warnings, finalize) {
3676
+ var TOOL_FAILURE_CATALOG_LINKS = 3;
3677
+ var TOOL_CATALOG_DEFAULT_LIMIT = 25;
3678
+ async function printWithOptionalWindows(enriched, listKey, includeWindow, windowSize, output, warnings, finalize, nextCommands = []) {
3654
3679
  const allWarnings = [...warnings ?? []];
3655
3680
  let data = enriched;
3656
3681
  if (includeWindow) {
@@ -3660,7 +3685,11 @@ async function printWithOptionalWindows(enriched, listKey, includeWindow, window
3660
3685
  }
3661
3686
  if (finalize)
3662
3687
  data = finalize(data, allWarnings);
3663
- output.writeData(data, allWarnings.length > 0 ? { warnings: allWarnings } : undefined);
3688
+ const options = {
3689
+ ...allWarnings.length > 0 ? { warnings: allWarnings } : {},
3690
+ ...nextCommands.length > 0 ? { nextCommands } : {}
3691
+ };
3692
+ output.writeData(data, Object.keys(options).length > 0 ? options : undefined);
3664
3693
  }
3665
3694
  function withoutRepeatedFrustrationWindow(data) {
3666
3695
  if (!Array.isArray(data.frustrations))
@@ -5346,7 +5375,98 @@ async function runCommand(command, positional, flags, positionals = positional ?
5346
5375
  const params = parseSpecFlags("tool-failures", args, command);
5347
5376
  const queryString = params.days_back ? `?days_back=${params.days_back}` : "";
5348
5377
  const data = await callDataAPI(`/tool-failures${queryString}`);
5349
- context.output.writeData(data);
5378
+ const daysBack = params.days_back ?? 7;
5379
+ const failing = (Array.isArray(asRecord(data)?.tools) ? asRecord(data).tools : []).map((row) => asString(asRecord(row)?.tool_name)).filter((name) => Boolean(name)).slice(0, TOOL_FAILURE_CATALOG_LINKS);
5380
+ const nextCommands = failing.flatMap((name, index) => [
5381
+ ...index === 0 ? [{ command: toolFailureExamplesCommand(name, daysBack), purpose: `Read failure examples of ${name}, the tool with the most failures.`, mutability: "read", requires_approval: false }] : [],
5382
+ { command: toolCatalogGetCommand(name, daysBack), purpose: `Calls, recorded schema, usage over time and failure categories of ${name}.`, mutability: "read", requires_approval: false }
5383
+ ]);
5384
+ context.output.writeData(data, nextCommands.length > 0 ? { nextCommands } : undefined);
5385
+ break;
5386
+ }
5387
+ case "tool-catalog": {
5388
+ const params = parseSpecFlags("tool-catalog", flagsToArgs(flags), command);
5389
+ const daysBack = params.days_back ?? 7;
5390
+ const limit = params.limit ?? TOOL_CATALOG_DEFAULT_LIMIT;
5391
+ const offset = params.offset ?? 0;
5392
+ const sort = params.sort ?? "calls";
5393
+ const query2 = new URLSearchParams({ days_back: String(daysBack), sort, limit: String(limit), offset: String(offset) });
5394
+ if (params.search)
5395
+ query2.set("search", params.search);
5396
+ if (params.direction)
5397
+ query2.set("direction", params.direction);
5398
+ const data = asRecord(await callDataAPI(`/tools?${query2.toString()}`)) ?? {};
5399
+ const pagination = asRecord(data.pagination);
5400
+ const tools = Array.isArray(data.tools) ? data.tools.map((row) => asRecord(row)).filter((row) => row !== null) : [];
5401
+ const listFlags = [
5402
+ `--days-back=${daysBack}`,
5403
+ ...sort !== "calls" ? [`--sort=${sort}`] : [],
5404
+ ...params.search ? [`--search=${shellArg(params.search)}`] : [],
5405
+ ...params.direction ? [`--direction=${params.direction}`] : []
5406
+ ];
5407
+ const nextCommands = [];
5408
+ const nextOffset = asNumber(pagination?.next_offset);
5409
+ if (pagination?.has_more === true && nextOffset !== null && nextOffset <= 1e4) {
5410
+ nextCommands.push({
5411
+ command: ["moda tools list", ...listFlags, `--limit=${limit}`, `--offset=${nextOffset}`].join(" "),
5412
+ purpose: `Read the next page: tools ${nextOffset + 1}-${Math.min(nextOffset + limit, asNumber(pagination.total) ?? nextOffset + limit)} of ${asNumber(pagination.total) ?? "more"}.`,
5413
+ mutability: "read",
5414
+ requires_approval: false
5415
+ });
5416
+ }
5417
+ const top = asString(tools[0]?.tool_name);
5418
+ if (top) {
5419
+ nextCommands.push({ command: toolCatalogGetCommand(top, daysBack), purpose: `Recorded schema, usage over time and failure categories of ${top}, the first tool on this page.`, mutability: "read", requires_approval: false });
5420
+ }
5421
+ const warnings = tools.length === 0 ? [`No tool calls recorded in the last ${daysBack} day(s)${params.search || params.direction ? " that match the filters" : ""}. Widen --days-back${params.search || params.direction ? " or drop --search/--direction" : ""}.`] : [];
5422
+ context.output.writeData(data, {
5423
+ ...warnings.length > 0 ? { warnings } : {},
5424
+ ...nextCommands.length > 0 ? { nextCommands } : {}
5425
+ });
5426
+ break;
5427
+ }
5428
+ case "tool-catalog-detail": {
5429
+ if (!positional) {
5430
+ throw new CliInputError("<tool_name> is required", "Usage: moda tools get <tool_name> [--days-back=N] [--full]", "missing_positional", {
5431
+ field: "<tool_name>",
5432
+ suggestedCommands: ["moda tools list"]
5433
+ });
5434
+ }
5435
+ const params = parseSpecFlags("tool-catalog-detail", flagsToArgs(flags, "tool_name", positional), command);
5436
+ const daysBack = params.days_back ?? 7;
5437
+ const agentMode = context.output.mode === "agent" || context.output.mode === "agent-stream";
5438
+ let raw;
5439
+ try {
5440
+ raw = asRecord(await callDataAPI(`/tools/${encodeURIComponent(params.tool_name)}?days_back=${daysBack}`)) ?? {};
5441
+ } catch (error) {
5442
+ if (!(error instanceof ApiError) || error.statusCode !== 404)
5443
+ throw error;
5444
+ throw new CliNotFoundError("tool", params.tool_name, `Tool "${params.tool_name}" has no recorded calls in the last ${daysBack} day(s): the name may be mistyped, or the tool was not called in this window.`, `moda tools list --search=${shellArg(params.tool_name)} --days-back=${daysBack}`);
5445
+ }
5446
+ const { data, shortened } = shapeToolCatalogDetail(raw, { daysBack, shorten: agentMode && params.full !== true });
5447
+ const warnings = [];
5448
+ if (shortened > 0) {
5449
+ warnings.push(`Agent output capped ${shortened} list(s) or value(s): at most 20 observed fields with 3 common values each, 5 recent calls, and 200 characters per input or sample error (the *_total fields give the full counts). Add --full for everything. The registered schema is never cut.`);
5450
+ }
5451
+ const definition = asRecord(data.definition);
5452
+ if (definition && definition.registered === null) {
5453
+ warnings.push(`No registered definition for "${params.tool_name}"; definition.observed_fields is the payload shape seen in recorded calls. Register tools with \`moda registry push\`.`);
5454
+ }
5455
+ const failureBlock = asRecord(data.failure_categories);
5456
+ const totalFailures = asNumber(failureBlock?.total_failures) ?? 0;
5457
+ const nextCommands = [];
5458
+ if (totalFailures > 0) {
5459
+ nextCommands.push({ command: toolFailureExamplesCommand(params.tool_name, daysBack), purpose: `Read the ${totalFailures} failure detection row(s) of ${params.tool_name}, with error text and tool input.`, mutability: "read", requires_approval: false });
5460
+ const first = asRecord(Array.isArray(failureBlock?.categories) ? failureBlock.categories[0] : undefined);
5461
+ const contextCommand = asString(first?.context_command);
5462
+ if (contextCommand) {
5463
+ nextCommands.push({ command: contextCommand, purpose: `Open the newest failure of the top category (${asString(first?.category) ?? "unknown"}) in its trace.`, mutability: "read", requires_approval: false });
5464
+ }
5465
+ }
5466
+ context.output.writeData(data, {
5467
+ ...warnings.length > 0 ? { warnings } : {},
5468
+ ...nextCommands.length > 0 ? { nextCommands } : {}
5469
+ });
5350
5470
  break;
5351
5471
  }
5352
5472
  case "tool-failure-detail": {
@@ -5401,7 +5521,12 @@ async function runCommand(command, positional, flags, positionals = positional ?
5401
5521
  out.push(`Showing the ${TOOL_FAILURE_AGENT_SUBTYPES} most frequent of ${subtypes.length} failure subtypes; --json lists all of them.`);
5402
5522
  }
5403
5523
  return trimmed;
5404
- });
5524
+ }, [{
5525
+ command: toolCatalogGetCommand(params.tool_name, params.days_back ?? 7),
5526
+ purpose: subtypeCount === 0 && exampleCount === 0 ? `Check whether ${params.tool_name} was called at all in this window (it answers not found when it was not).` : `Call count, success rate, recorded schema and usage over time of ${params.tool_name}.`,
5527
+ mutability: "read",
5528
+ requires_approval: false
5529
+ }]);
5405
5530
  break;
5406
5531
  }
5407
5532
  case "problem-impact": {
@@ -6143,7 +6268,7 @@ var commandRegistry = createCommandRegistry([
6143
6268
  resetApiRequestCountBeforeRun: true,
6144
6269
  telemetry: "result-and-error",
6145
6270
  handler: async (context) => {
6146
- const { runInit } = await import("./index-75vcntpe.js");
6271
+ const { runInit } = await import("./index-4w5szrnw.js");
6147
6272
  if (context.outputMode === "agent-stream") {
6148
6273
  context.output.writeEvent({
6149
6274
  event: "started",
@@ -6193,7 +6318,7 @@ var commandRegistry = createCommandRegistry([
6193
6318
  resetApiRequestCountBeforeRun: true,
6194
6319
  telemetry: "result-and-error",
6195
6320
  handler: async (context) => {
6196
- const { runProvision } = await import("./provision-y5bdbh4y.js");
6321
+ const { runProvision } = await import("./provision-8c4s6vgg.js");
6197
6322
  return runProvision(context, {
6198
6323
  resumeCommand: buildResumeCommand("provision", context.rawFlags)
6199
6324
  });
@@ -6919,6 +7044,33 @@ var commandRegistry = createCommandRegistry([
6919
7044
  telemetry: "result-and-error",
6920
7045
  handler: canonicalNounHandler
6921
7046
  },
7047
+ {
7048
+ name: "tools",
7049
+ description: NOUN_SUMMARIES.tools,
7050
+ examples: [...leavesOf("tools").flatMap((leaf) => leaf.examples.slice(0, 2))],
7051
+ subcommands: treeSubcommandHelp("tools"),
7052
+ auth: "api-key",
7053
+ outputModes: ["human", "json", "agent"],
7054
+ mutability: "read",
7055
+ validateConfigBeforeRun: false,
7056
+ resetApiRequestCountBeforeRun: false,
7057
+ telemetry: "result-and-error",
7058
+ handler: canonicalNounHandler
7059
+ },
7060
+ legacyCommand({
7061
+ name: "tool-catalog",
7062
+ description: "The Tool catalog: every tool called in the window with calls, failed calls, success rate, effect direction and last seen",
7063
+ examples: ["moda tools list --sort=failure_rate --limit=10"],
7064
+ hidden: true,
7065
+ ...dataApiDefaults
7066
+ }),
7067
+ legacyCommand({
7068
+ name: "tool-catalog-detail",
7069
+ description: "One tool's calls, recorded schema and observed payload fields, usage over time and top failure categories",
7070
+ examples: ["moda tools get <tool_name>"],
7071
+ hidden: true,
7072
+ ...dataApiDefaults
7073
+ }),
6922
7074
  {
6923
7075
  name: "review",
6924
7076
  description: NOUN_SUMMARIES.review,
@@ -3,15 +3,15 @@ import {
3
3
  promptsDiscoveredCheck,
4
4
  runDoctorCommand,
5
5
  runStatusCommand
6
- } from "./cli-5fstvkva.js";
7
- import"./cli-9bgnvth2.js";
8
- import"./cli-6j8h2ave.js";
6
+ } from "./cli-cr44672e.js";
7
+ import"./cli-gjzr7jq5.js";
8
+ import"./cli-npkb08xt.js";
9
9
  import"./cli-mm48br00.js";
10
10
  import"./cli-xq45etg1.js";
11
- import"./cli-dr6x0zv7.js";
12
- import"./cli-n2hng3gv.js";
13
- import"./cli-e23g9ywa.js";
14
- import"./cli-99p2jh28.js";
11
+ import"./cli-4d92a450.js";
12
+ import"./cli-cdx6yd7m.js";
13
+ import"./cli-s72pph9c.js";
14
+ import"./cli-wg6e2a1g.js";
15
15
  import"./cli-k4tqwah4.js";
16
16
  import"./cli-9kfxkxmk.js";
17
17
  import"./cli-ns5fcnkz.js";
@@ -2,13 +2,13 @@ import {
2
2
  DEFAULT_POLL_INTERVAL_MS,
3
3
  DEFAULT_WAIT_TIMEOUT_MS,
4
4
  fetchLatestRun
5
- } from "./cli-yz8xcpyk.js";
5
+ } from "./cli-nzx7rqjs.js";
6
6
  import {
7
7
  assertFlags
8
- } from "./cli-n2hng3gv.js";
8
+ } from "./cli-cdx6yd7m.js";
9
9
  import {
10
10
  callControlAPI
11
- } from "./cli-e23g9ywa.js";
11
+ } from "./cli-s72pph9c.js";
12
12
  import {
13
13
  EXIT_DEGRADED,
14
14
  EXIT_ERROR,
@@ -17,7 +17,7 @@ import {
17
17
  resolveApiTenantId,
18
18
  shellArg,
19
19
  validateConfig
20
- } from "./cli-99p2jh28.js";
20
+ } from "./cli-wg6e2a1g.js";
21
21
  import {
22
22
  CliInputError
23
23
  } from "./cli-k4tqwah4.js";
@@ -40,17 +40,17 @@ import {
40
40
  writeHarnessAnalyzeResult,
41
41
  writeHarnessArtifacts,
42
42
  writeHumanProgress
43
- } from "./cli-x9cwat4a.js";
43
+ } from "./cli-x605txan.js";
44
44
  import"./cli-xq45etg1.js";
45
45
  import"./cli-97fnztpy.js";
46
46
  import {
47
47
  HARNESS_ANALYZE_CONCERNS
48
48
  } from "./cli-cesds766.js";
49
49
  import"./cli-qpq84eee.js";
50
- import"./cli-dr6x0zv7.js";
51
- import"./cli-n2hng3gv.js";
52
- import"./cli-e23g9ywa.js";
53
- import"./cli-99p2jh28.js";
50
+ import"./cli-4d92a450.js";
51
+ import"./cli-cdx6yd7m.js";
52
+ import"./cli-s72pph9c.js";
53
+ import"./cli-wg6e2a1g.js";
54
54
  import"./cli-k4tqwah4.js";
55
55
  import"./cli-9kfxkxmk.js";
56
56
  import"./cli-ns5fcnkz.js";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  buildSourceSnapshot
3
- } from "./cli-x9cwat4a.js";
3
+ } from "./cli-x605txan.js";
4
4
  import"./cli-xq45etg1.js";
5
5
  import"./cli-97fnztpy.js";
6
6
  import"./cli-cesds766.js";
7
7
  import"./cli-qpq84eee.js";
8
- import"./cli-dr6x0zv7.js";
9
- import"./cli-n2hng3gv.js";
10
- import"./cli-e23g9ywa.js";
8
+ import"./cli-4d92a450.js";
9
+ import"./cli-cdx6yd7m.js";
10
+ import"./cli-s72pph9c.js";
11
11
  import {
12
12
  recordApiRequest
13
- } from "./cli-99p2jh28.js";
13
+ } from "./cli-wg6e2a1g.js";
14
14
  import"./cli-k4tqwah4.js";
15
15
  import"./cli-9kfxkxmk.js";
16
16
  import"./cli-ns5fcnkz.js";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  buildDoctorReport
3
- } from "./cli-5fstvkva.js";
3
+ } from "./cli-cr44672e.js";
4
4
  import {
5
5
  selectTenantAndCreateKey
6
- } from "./cli-9bgk5jeh.js";
7
- import"./cli-97jew729.js";
6
+ } from "./cli-w3ckvma5.js";
7
+ import"./cli-ef9eagsc.js";
8
8
  import {
9
9
  ConnectCodeError,
10
10
  connectWithCode,
11
11
  loadAuthSession,
12
12
  loadToken,
13
13
  login
14
- } from "./cli-9bgnvth2.js";
14
+ } from "./cli-gjzr7jq5.js";
15
15
  import {
16
16
  bundledSkillsDir,
17
17
  installIntegrationSkill,
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  agentsMdProblem,
22
22
  runSkillSync
23
- } from "./cli-k007ztbs.js";
23
+ } from "./cli-wh83c3ss.js";
24
24
  import"./cli-qm5b1vck.js";
25
25
  import {
26
26
  detectAgents
@@ -32,7 +32,7 @@ import {
32
32
  import {
33
33
  initPrompts,
34
34
  runPromptSync
35
- } from "./cli-6j8h2ave.js";
35
+ } from "./cli-npkb08xt.js";
36
36
  import"./cli-mm48br00.js";
37
37
  import {
38
38
  codingAgentDisplayName,
@@ -46,7 +46,7 @@ import {
46
46
  runCodingAgent,
47
47
  runHarnessCommand,
48
48
  startRemoteAnalyze
49
- } from "./cli-x9cwat4a.js";
49
+ } from "./cli-x605txan.js";
50
50
  import {
51
51
  canonicalText,
52
52
  renderInitBanner,
@@ -62,16 +62,16 @@ import"./cli-cesds766.js";
62
62
  import"./cli-qpq84eee.js";
63
63
  import {
64
64
  createCommandContext
65
- } from "./cli-dr6x0zv7.js";
66
- import"./cli-n2hng3gv.js";
67
- import"./cli-e23g9ywa.js";
65
+ } from "./cli-4d92a450.js";
66
+ import"./cli-cdx6yd7m.js";
67
+ import"./cli-s72pph9c.js";
68
68
  import {
69
69
  VERSION,
70
70
  recordApiRequest,
71
71
  resolveIngestUrl,
72
72
  resolveModaBaseUrl,
73
73
  shellArg
74
- } from "./cli-99p2jh28.js";
74
+ } from "./cli-wg6e2a1g.js";
75
75
  import {
76
76
  CliAuthError,
77
77
  CliInputError
@@ -6,7 +6,7 @@ import {
6
6
  contextTarget,
7
7
  frustrationAnchorIndex,
8
8
  frustrationsFromEmotions
9
- } from "./cli-fwpqghgc.js";
9
+ } from "./cli-nqgyz74b.js";
10
10
  import {
11
11
  renderMarkdownForTerminal,
12
12
  shouldColorTerminalOutput,
@@ -16,7 +16,7 @@ import {
16
16
  import {
17
17
  callControlAPI,
18
18
  callDataAPI
19
- } from "./cli-e23g9ywa.js";
19
+ } from "./cli-s72pph9c.js";
20
20
  import {
21
21
  EXIT_DEGRADED,
22
22
  EXIT_OK,
@@ -26,7 +26,7 @@ import {
26
26
  resolveModaBaseUrl,
27
27
  safeWriteStderr,
28
28
  shellArg
29
- } from "./cli-99p2jh28.js";
29
+ } from "./cli-wg6e2a1g.js";
30
30
  import {
31
31
  CliAuthError,
32
32
  CliInputError,
@@ -2,7 +2,7 @@ import {
2
2
  probeApiKey,
3
3
  redactApiKey,
4
4
  resolveApiKeyCredential
5
- } from "./cli-97jew729.js";
5
+ } from "./cli-ef9eagsc.js";
6
6
  import {
7
7
  authFetch,
8
8
  clearAuthSession,
@@ -10,7 +10,7 @@ import {
10
10
  loadAuthSession,
11
11
  login,
12
12
  revokeCliSessionToken
13
- } from "./cli-9bgnvth2.js";
13
+ } from "./cli-gjzr7jq5.js";
14
14
  import {
15
15
  DEFAULT_INGEST_URL,
16
16
  EXIT_AUTH_REQUIRED,
@@ -35,7 +35,7 @@ import {
35
35
  setActiveProfile,
36
36
  shellArg,
37
37
  upsertProfile
38
- } from "./cli-99p2jh28.js";
38
+ } from "./cli-wg6e2a1g.js";
39
39
  import {
40
40
  CliInputError
41
41
  } from "./cli-k4tqwah4.js";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  inventoryFiles,
3
3
  safePromptEvidencePath
4
- } from "./cli-x9cwat4a.js";
4
+ } from "./cli-x605txan.js";
5
5
  import"./cli-xq45etg1.js";
6
6
  import"./cli-97fnztpy.js";
7
7
  import"./cli-cesds766.js";
8
8
  import {
9
9
  require_typescript
10
10
  } from "./cli-qpq84eee.js";
11
- import"./cli-dr6x0zv7.js";
12
- import"./cli-n2hng3gv.js";
13
- import"./cli-e23g9ywa.js";
14
- import"./cli-99p2jh28.js";
11
+ import"./cli-4d92a450.js";
12
+ import"./cli-cdx6yd7m.js";
13
+ import"./cli-s72pph9c.js";
14
+ import"./cli-wg6e2a1g.js";
15
15
  import"./cli-k4tqwah4.js";
16
16
  import"./cli-9kfxkxmk.js";
17
17
  import"./cli-ns5fcnkz.js";
@@ -3,7 +3,7 @@ import {
3
3
  checkPromptMapping,
4
4
  discoverHarnessPromptSources,
5
5
  safePromptEvidencePath
6
- } from "./cli-x9cwat4a.js";
6
+ } from "./cli-x605txan.js";
7
7
  import"./cli-xq45etg1.js";
8
8
  import"./cli-97fnztpy.js";
9
9
  import"./cli-cesds766.js";
@@ -11,10 +11,10 @@ import {
11
11
  inspectCodeSelectors,
12
12
  inspectPythonSelectors
13
13
  } from "./cli-qpq84eee.js";
14
- import"./cli-dr6x0zv7.js";
15
- import"./cli-n2hng3gv.js";
16
- import"./cli-e23g9ywa.js";
17
- import"./cli-99p2jh28.js";
14
+ import"./cli-4d92a450.js";
15
+ import"./cli-cdx6yd7m.js";
16
+ import"./cli-s72pph9c.js";
17
+ import"./cli-wg6e2a1g.js";
18
18
  import"./cli-k4tqwah4.js";
19
19
  import"./cli-9kfxkxmk.js";
20
20
  import"./cli-ns5fcnkz.js";
@@ -11,14 +11,14 @@ import {
11
11
  runPromptSync,
12
12
  runPromptsCommand,
13
13
  writePromptSyncProgress
14
- } from "./cli-6j8h2ave.js";
14
+ } from "./cli-npkb08xt.js";
15
15
  import {
16
16
  promptSourceHashPayload
17
17
  } from "./cli-mm48br00.js";
18
- import"./cli-dr6x0zv7.js";
19
- import"./cli-n2hng3gv.js";
20
- import"./cli-e23g9ywa.js";
21
- import"./cli-99p2jh28.js";
18
+ import"./cli-4d92a450.js";
19
+ import"./cli-cdx6yd7m.js";
20
+ import"./cli-s72pph9c.js";
21
+ import"./cli-wg6e2a1g.js";
22
22
  import"./cli-k4tqwah4.js";
23
23
  import"./cli-9kfxkxmk.js";
24
24
  import"./cli-ns5fcnkz.js";
@@ -23,14 +23,14 @@ import {
23
23
  runPromptAb,
24
24
  selectProblemCases,
25
25
  waitLabel
26
- } from "./cli-602yx84w.js";
27
- import"./cli-6j8h2ave.js";
28
- import"./cli-yz8xcpyk.js";
26
+ } from "./cli-xkcy9wns.js";
27
+ import"./cli-npkb08xt.js";
28
+ import"./cli-nzx7rqjs.js";
29
29
  import"./cli-mm48br00.js";
30
- import"./cli-dr6x0zv7.js";
31
- import"./cli-n2hng3gv.js";
32
- import"./cli-e23g9ywa.js";
33
- import"./cli-99p2jh28.js";
30
+ import"./cli-4d92a450.js";
31
+ import"./cli-cdx6yd7m.js";
32
+ import"./cli-s72pph9c.js";
33
+ import"./cli-wg6e2a1g.js";
34
34
  import"./cli-k4tqwah4.js";
35
35
  import"./cli-9kfxkxmk.js";
36
36
  import"./cli-ns5fcnkz.js";