@moda-ai/cli 1.55.37 → 1.55.39

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 (39) hide show
  1. package/dist/{agent-4pyeecf7.js → agent-bhe95ae8.js} +8 -8
  2. package/dist/{cli-nqgyz74b.js → cli-1vqq24qh.js} +1 -1
  3. package/dist/{cli-nzx7rqjs.js → cli-2h2nvq6w.js} +1 -1
  4. package/dist/{cli-w3ckvma5.js → cli-39617gab.js} +3 -3
  5. package/dist/{cli-ef9eagsc.js → cli-4hkesrkq.js} +1 -1
  6. package/dist/{cli-wh83c3ss.js → cli-6gtgm2gx.js} +4 -4
  7. package/dist/{cli-xkcy9wns.js → cli-as4c1xwm.js} +5 -5
  8. package/dist/{cli-x605txan.js → cli-c7vj8tq1.js} +5 -5
  9. package/dist/{cli-4d92a450.js → cli-jkza0bj6.js} +1 -1
  10. package/dist/{cli-npkb08xt.js → cli-jmbt1hf9.js} +8 -8
  11. package/dist/{cli-cdx6yd7m.js → cli-k9se46y4.js} +81 -10
  12. package/dist/{cli-cr44672e.js → cli-msgp78ag.js} +5 -5
  13. package/dist/{cli-gjzr7jq5.js → cli-ptm7pwqg.js} +1 -1
  14. package/dist/{cli-s72pph9c.js → cli-qzag917n.js} +1 -1
  15. package/dist/{cli-wg6e2a1g.js → cli-wr6f0kyw.js} +70 -20
  16. package/dist/cli.js +436 -60
  17. package/dist/{doctor-w8z3wj1e.js → doctor-3v20hc26.js} +7 -7
  18. package/dist/{fix-667fyx00.js → fix-s3zkjt69.js} +4 -4
  19. package/dist/{harness-github-actions-7s41s1vg.js → harness-github-actions-mcy21e4d.js} +5 -5
  20. package/dist/{harness-fb0083ap.js → harness-n4569wbm.js} +5 -5
  21. package/dist/{index-4w5szrnw.js → index-2qm3h7v2.js} +11 -11
  22. package/dist/{production-intelligence-v2wq2aqv.js → production-intelligence-z2cad1hv.js} +61 -4
  23. package/dist/{profile-commands-3hw4trwk.js → profile-commands-7ck1tqfv.js} +3 -3
  24. package/dist/{prompt-attribution-g7md8hzc.js → prompt-attribution-dm50am6e.js} +5 -5
  25. package/dist/prompt-source-mcp.js +5 -5
  26. package/dist/{prompts-ab-59r52mxw.js → prompts-ab-9e0dsmce.js} +7 -7
  27. package/dist/{prompts-90v9eg2k.js → prompts-p9hhxx0c.js} +5 -5
  28. package/dist/{prompts-propose-cbenbk8w.js → prompts-propose-91qrjpd0.js} +7 -7
  29. package/dist/{provision-8c4s6vgg.js → provision-x4wkyw60.js} +5 -5
  30. package/dist/{registry-qvjyvbk8.js → registry-nq8qsqtv.js} +3 -3
  31. package/dist/{skills-z7w5x7jj.js → skills-rk2pmwx8.js} +5 -5
  32. package/dist/{sync-r32tgpar.js → sync-xxbfjcz5.js} +7 -7
  33. package/package.json +1 -1
  34. package/skills/integration/index.json +2 -2
  35. package/skills/moda-cli/SKILL.md +4 -2
  36. package/skills/moda-cli/references/commands.md +3 -2
  37. package/skills/moda-cli/references/dashboard-parity.md +5 -0
  38. package/skills/moda-cli/references/detections.md +53 -0
  39. package/skills/moda-cli/references/production-intelligence.md +1 -1
@@ -3,15 +3,15 @@ import {
3
3
  promptsDiscoveredCheck,
4
4
  runDoctorCommand,
5
5
  runStatusCommand
6
- } from "./cli-cr44672e.js";
7
- import"./cli-gjzr7jq5.js";
8
- import"./cli-npkb08xt.js";
6
+ } from "./cli-msgp78ag.js";
7
+ import"./cli-ptm7pwqg.js";
8
+ import"./cli-jmbt1hf9.js";
9
9
  import"./cli-mm48br00.js";
10
10
  import"./cli-xq45etg1.js";
11
- import"./cli-4d92a450.js";
12
- import"./cli-cdx6yd7m.js";
13
- import"./cli-s72pph9c.js";
14
- import"./cli-wg6e2a1g.js";
11
+ import"./cli-jkza0bj6.js";
12
+ import"./cli-k9se46y4.js";
13
+ import"./cli-qzag917n.js";
14
+ import"./cli-wr6f0kyw.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-nzx7rqjs.js";
5
+ } from "./cli-2h2nvq6w.js";
6
6
  import {
7
7
  assertFlags
8
- } from "./cli-cdx6yd7m.js";
8
+ } from "./cli-k9se46y4.js";
9
9
  import {
10
10
  callControlAPI
11
- } from "./cli-s72pph9c.js";
11
+ } from "./cli-qzag917n.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-wg6e2a1g.js";
20
+ } from "./cli-wr6f0kyw.js";
21
21
  import {
22
22
  CliInputError
23
23
  } from "./cli-k4tqwah4.js";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  buildSourceSnapshot
3
- } from "./cli-x605txan.js";
3
+ } from "./cli-c7vj8tq1.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-4d92a450.js";
9
- import"./cli-cdx6yd7m.js";
10
- import"./cli-s72pph9c.js";
8
+ import"./cli-jkza0bj6.js";
9
+ import"./cli-k9se46y4.js";
10
+ import"./cli-qzag917n.js";
11
11
  import {
12
12
  recordApiRequest
13
- } from "./cli-wg6e2a1g.js";
13
+ } from "./cli-wr6f0kyw.js";
14
14
  import"./cli-k4tqwah4.js";
15
15
  import"./cli-9kfxkxmk.js";
16
16
  import"./cli-ns5fcnkz.js";
@@ -40,17 +40,17 @@ import {
40
40
  writeHarnessAnalyzeResult,
41
41
  writeHarnessArtifacts,
42
42
  writeHumanProgress
43
- } from "./cli-x605txan.js";
43
+ } from "./cli-c7vj8tq1.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-4d92a450.js";
51
- import"./cli-cdx6yd7m.js";
52
- import"./cli-s72pph9c.js";
53
- import"./cli-wg6e2a1g.js";
50
+ import"./cli-jkza0bj6.js";
51
+ import"./cli-k9se46y4.js";
52
+ import"./cli-qzag917n.js";
53
+ import"./cli-wr6f0kyw.js";
54
54
  import"./cli-k4tqwah4.js";
55
55
  import"./cli-9kfxkxmk.js";
56
56
  import"./cli-ns5fcnkz.js";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  buildDoctorReport
3
- } from "./cli-cr44672e.js";
3
+ } from "./cli-msgp78ag.js";
4
4
  import {
5
5
  selectTenantAndCreateKey
6
- } from "./cli-w3ckvma5.js";
7
- import"./cli-ef9eagsc.js";
6
+ } from "./cli-39617gab.js";
7
+ import"./cli-4hkesrkq.js";
8
8
  import {
9
9
  ConnectCodeError,
10
10
  connectWithCode,
11
11
  loadAuthSession,
12
12
  loadToken,
13
13
  login
14
- } from "./cli-gjzr7jq5.js";
14
+ } from "./cli-ptm7pwqg.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-wh83c3ss.js";
23
+ } from "./cli-6gtgm2gx.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-npkb08xt.js";
35
+ } from "./cli-jmbt1hf9.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-x605txan.js";
49
+ } from "./cli-c7vj8tq1.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-4d92a450.js";
66
- import"./cli-cdx6yd7m.js";
67
- import"./cli-s72pph9c.js";
65
+ } from "./cli-jkza0bj6.js";
66
+ import"./cli-k9se46y4.js";
67
+ import"./cli-qzag917n.js";
68
68
  import {
69
69
  VERSION,
70
70
  recordApiRequest,
71
71
  resolveIngestUrl,
72
72
  resolveModaBaseUrl,
73
73
  shellArg
74
- } from "./cli-wg6e2a1g.js";
74
+ } from "./cli-wr6f0kyw.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-nqgyz74b.js";
9
+ } from "./cli-1vqq24qh.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-s72pph9c.js";
19
+ } from "./cli-qzag917n.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-wg6e2a1g.js";
29
+ } from "./cli-wr6f0kyw.js";
30
30
  import {
31
31
  CliAuthError,
32
32
  CliInputError,
@@ -494,12 +494,58 @@ async function loadOverviewBriefing(options) {
494
494
  promptSync: localSyncBrief(options.cwd, ".moda/prompts.lock.json", "Prompt versions"),
495
495
  skillSync: localSkillBrief(options.cwd),
496
496
  metrics: overviewMetrics(overview),
497
+ detectors: overviewDetectors(overview),
497
498
  topFinding,
498
499
  evidenceRefs,
499
500
  nextCommand,
500
501
  rawOverview: overview
501
502
  };
502
503
  }
504
+ var DETECTOR_LABELS = {
505
+ emotion: "Emotion",
506
+ frustration: "Frustration",
507
+ custom_signal: "Custom signals",
508
+ laziness: "Laziness",
509
+ hallucination: "Hallucination",
510
+ tool_failure: "Tool failures"
511
+ };
512
+ function overviewDetectors(overview) {
513
+ const list = valueAt(overview, ["processing", "detectors"]);
514
+ if (!Array.isArray(list))
515
+ return [];
516
+ return list.flatMap((item) => {
517
+ const row = asRecord(item);
518
+ const family = asString(row?.family);
519
+ if (!row || !family)
520
+ return [];
521
+ const enabled = row.enabled === true ? true : row.enabled === false ? false : null;
522
+ const reason = asString(row.reason);
523
+ return [{ family, enabled, setting: asString(row.setting) ?? null, ...reason ? { reason } : {} }];
524
+ });
525
+ }
526
+ function detectorWarnings(detectors) {
527
+ const hasEmotion = detectors.some((detector) => detector.family === "emotion");
528
+ return detectors.flatMap((detector) => {
529
+ if (detector.family === "frustration" && hasEmotion)
530
+ return [];
531
+ const label = detector.family === "emotion" && detectors.some((d) => d.family === "frustration") ? "Emotion (including frustration)" : DETECTOR_LABELS[detector.family] ?? detector.family;
532
+ if (detector.enabled === false) {
533
+ const why = detector.reason === "dogfood_tenant" ? "is skipped for this internal (dogfood) tenant" : `is switched off for this tenant (${detector.setting ?? "processing setting"} = false)`;
534
+ return [`${label} detection ${why}, so zero ${label.toLowerCase()} detections do NOT mean traces are clean.`];
535
+ }
536
+ if (detector.enabled === null) {
537
+ return [`Could not confirm whether ${label.toLowerCase()} detection runs for this tenant; treat zero detections with caution.`];
538
+ }
539
+ return [];
540
+ });
541
+ }
542
+ function detectorStateText(detector) {
543
+ if (detector.enabled === null)
544
+ return "unknown";
545
+ if (detector.enabled === false)
546
+ return detector.reason === "dogfood_tenant" ? "off (dogfood tenant)" : `off (${detector.setting ?? "setting"})`;
547
+ return detector.setting ? `on (${detector.setting})` : "on (no tenant switch)";
548
+ }
503
549
  async function investigateProduction(options) {
504
550
  const warnings = [];
505
551
  const sourceStatus = {};
@@ -1325,7 +1371,8 @@ function overviewAgentOptions(briefing) {
1325
1371
  findings: briefing.topFinding ? [agentFinding(briefing.topFinding)] : [],
1326
1372
  evidenceRefs: briefing.evidenceRefs.map(agentEvidence),
1327
1373
  recommendedActions: briefing.topFinding ? briefing.topFinding.recommendedActions.map(agentAction) : [],
1328
- nextCommands: [nextCommand(briefing.nextCommand)]
1374
+ nextCommands: [nextCommand(briefing.nextCommand)],
1375
+ ...detectorWarnings(briefing.detectors).length > 0 ? { warnings: detectorWarnings(briefing.detectors) } : {}
1329
1376
  };
1330
1377
  }
1331
1378
  function askAgentOptions(result) {
@@ -1402,6 +1449,15 @@ function renderOverviewBriefingHuman(briefing) {
1402
1449
  for (const [label, value] of overviewSignalPairs(briefing.metrics)) {
1403
1450
  lines.push(` ${label.padEnd(18)} ${String(value)}`);
1404
1451
  }
1452
+ if (briefing.detectors.length > 0) {
1453
+ lines.push("");
1454
+ lines.push("Detectors");
1455
+ for (const detector of briefing.detectors) {
1456
+ lines.push(` ${(DETECTOR_LABELS[detector.family] ?? detector.family).padEnd(18)} ${detectorStateText(detector)}`);
1457
+ }
1458
+ for (const warning of detectorWarnings(briefing.detectors))
1459
+ lines.push(` Warning: ${warning}`);
1460
+ }
1405
1461
  lines.push("");
1406
1462
  lines.push("Top signal");
1407
1463
  if (briefing.topFinding) {
@@ -1852,6 +1908,7 @@ export {
1852
1908
  renderAskHuman,
1853
1909
  loadOverviewBriefing,
1854
1910
  investigateProduction,
1911
+ detectorWarnings,
1855
1912
  daysBackFlag,
1856
1913
  askResultFromStreamOutcome,
1857
1914
  askModa
@@ -2,7 +2,7 @@ import {
2
2
  probeApiKey,
3
3
  redactApiKey,
4
4
  resolveApiKeyCredential
5
- } from "./cli-ef9eagsc.js";
5
+ } from "./cli-4hkesrkq.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-gjzr7jq5.js";
13
+ } from "./cli-ptm7pwqg.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-wg6e2a1g.js";
38
+ } from "./cli-wr6f0kyw.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-x605txan.js";
4
+ } from "./cli-c7vj8tq1.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-4d92a450.js";
12
- import"./cli-cdx6yd7m.js";
13
- import"./cli-s72pph9c.js";
14
- import"./cli-wg6e2a1g.js";
11
+ import"./cli-jkza0bj6.js";
12
+ import"./cli-k9se46y4.js";
13
+ import"./cli-qzag917n.js";
14
+ import"./cli-wr6f0kyw.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-x605txan.js";
6
+ } from "./cli-c7vj8tq1.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-4d92a450.js";
15
- import"./cli-cdx6yd7m.js";
16
- import"./cli-s72pph9c.js";
17
- import"./cli-wg6e2a1g.js";
14
+ import"./cli-jkza0bj6.js";
15
+ import"./cli-k9se46y4.js";
16
+ import"./cli-qzag917n.js";
17
+ import"./cli-wr6f0kyw.js";
18
18
  import"./cli-k4tqwah4.js";
19
19
  import"./cli-9kfxkxmk.js";
20
20
  import"./cli-ns5fcnkz.js";
@@ -23,14 +23,14 @@ import {
23
23
  runPromptAb,
24
24
  selectProblemCases,
25
25
  waitLabel
26
- } from "./cli-xkcy9wns.js";
27
- import"./cli-npkb08xt.js";
28
- import"./cli-nzx7rqjs.js";
26
+ } from "./cli-as4c1xwm.js";
27
+ import"./cli-jmbt1hf9.js";
28
+ import"./cli-2h2nvq6w.js";
29
29
  import"./cli-mm48br00.js";
30
- import"./cli-4d92a450.js";
31
- import"./cli-cdx6yd7m.js";
32
- import"./cli-s72pph9c.js";
33
- import"./cli-wg6e2a1g.js";
30
+ import"./cli-jkza0bj6.js";
31
+ import"./cli-k9se46y4.js";
32
+ import"./cli-qzag917n.js";
33
+ import"./cli-wr6f0kyw.js";
34
34
  import"./cli-k4tqwah4.js";
35
35
  import"./cli-9kfxkxmk.js";
36
36
  import"./cli-ns5fcnkz.js";
@@ -11,14 +11,14 @@ import {
11
11
  runPromptSync,
12
12
  runPromptsCommand,
13
13
  writePromptSyncProgress
14
- } from "./cli-npkb08xt.js";
14
+ } from "./cli-jmbt1hf9.js";
15
15
  import {
16
16
  promptSourceHashPayload
17
17
  } from "./cli-mm48br00.js";
18
- import"./cli-4d92a450.js";
19
- import"./cli-cdx6yd7m.js";
20
- import"./cli-s72pph9c.js";
21
- import"./cli-wg6e2a1g.js";
18
+ import"./cli-jkza0bj6.js";
19
+ import"./cli-k9se46y4.js";
20
+ import"./cli-qzag917n.js";
21
+ import"./cli-wr6f0kyw.js";
22
22
  import"./cli-k4tqwah4.js";
23
23
  import"./cli-9kfxkxmk.js";
24
24
  import"./cli-ns5fcnkz.js";
@@ -7,20 +7,20 @@ import {
7
7
  formatVerdict,
8
8
  rerunWithYes,
9
9
  resolvePromptArmSpec
10
- } from "./cli-xkcy9wns.js";
11
- import"./cli-npkb08xt.js";
12
- import"./cli-nzx7rqjs.js";
10
+ } from "./cli-as4c1xwm.js";
11
+ import"./cli-jmbt1hf9.js";
12
+ import"./cli-2h2nvq6w.js";
13
13
  import"./cli-mm48br00.js";
14
- import"./cli-4d92a450.js";
15
- import"./cli-cdx6yd7m.js";
14
+ import"./cli-jkza0bj6.js";
15
+ import"./cli-k9se46y4.js";
16
16
  import {
17
17
  callControlAPI
18
- } from "./cli-s72pph9c.js";
18
+ } from "./cli-qzag917n.js";
19
19
  import {
20
20
  resolveApiTenantId,
21
21
  shellArg,
22
22
  validateConfig
23
- } from "./cli-wg6e2a1g.js";
23
+ } from "./cli-wr6f0kyw.js";
24
24
  import {
25
25
  CliInputError
26
26
  } from "./cli-k4tqwah4.js";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  selectTenantAndCreateKey
3
- } from "./cli-w3ckvma5.js";
4
- import"./cli-ef9eagsc.js";
3
+ } from "./cli-39617gab.js";
4
+ import"./cli-4hkesrkq.js";
5
5
  import {
6
6
  loadAuthSession
7
- } from "./cli-gjzr7jq5.js";
7
+ } from "./cli-ptm7pwqg.js";
8
8
  import {
9
9
  stringOption
10
- } from "./cli-4d92a450.js";
10
+ } from "./cli-jkza0bj6.js";
11
11
  import {
12
12
  resolveIngestUrl,
13
13
  resolveModaBaseUrl
14
- } from "./cli-wg6e2a1g.js";
14
+ } from "./cli-wr6f0kyw.js";
15
15
  import {
16
16
  CliAuthError
17
17
  } from "./cli-k4tqwah4.js";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  assertFlags
3
- } from "./cli-cdx6yd7m.js";
3
+ } from "./cli-k9se46y4.js";
4
4
  import {
5
5
  callControlAPI
6
- } from "./cli-s72pph9c.js";
6
+ } from "./cli-qzag917n.js";
7
7
  import {
8
8
  explicitOutputMode,
9
9
  resolveApiKey
10
- } from "./cli-wg6e2a1g.js";
10
+ } from "./cli-wr6f0kyw.js";
11
11
  import {
12
12
  CliInputError
13
13
  } from "./cli-k4tqwah4.js";
@@ -3,14 +3,14 @@ import {
3
3
  pullSkills,
4
4
  runSkillSync,
5
5
  runSkillsCommand
6
- } from "./cli-wh83c3ss.js";
6
+ } from "./cli-6gtgm2gx.js";
7
7
  import"./cli-qm5b1vck.js";
8
8
  import"./cli-rjav0vj1.js";
9
9
  import"./cli-hcwdz9sd.js";
10
- import"./cli-4d92a450.js";
11
- import"./cli-cdx6yd7m.js";
12
- import"./cli-s72pph9c.js";
13
- import"./cli-wg6e2a1g.js";
10
+ import"./cli-jkza0bj6.js";
11
+ import"./cli-k9se46y4.js";
12
+ import"./cli-qzag917n.js";
13
+ import"./cli-wr6f0kyw.js";
14
14
  import"./cli-k4tqwah4.js";
15
15
  import"./cli-ns5fcnkz.js";
16
16
  import"./cli-0v6na3yp.js";
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  runSkillsCommand
3
- } from "./cli-wh83c3ss.js";
3
+ } from "./cli-6gtgm2gx.js";
4
4
  import"./cli-qm5b1vck.js";
5
5
  import"./cli-rjav0vj1.js";
6
6
  import"./cli-hcwdz9sd.js";
7
7
  import {
8
8
  runPromptsCommand
9
- } from "./cli-npkb08xt.js";
9
+ } from "./cli-jmbt1hf9.js";
10
10
  import"./cli-mm48br00.js";
11
11
  import {
12
12
  runHarnessCommand
13
- } from "./cli-x605txan.js";
13
+ } from "./cli-c7vj8tq1.js";
14
14
  import"./cli-xq45etg1.js";
15
15
  import"./cli-97fnztpy.js";
16
16
  import"./cli-cesds766.js";
17
17
  import"./cli-qpq84eee.js";
18
- import"./cli-4d92a450.js";
19
- import"./cli-cdx6yd7m.js";
20
- import"./cli-s72pph9c.js";
21
- import"./cli-wg6e2a1g.js";
18
+ import"./cli-jkza0bj6.js";
19
+ import"./cli-k9se46y4.js";
20
+ import"./cli-qzag917n.js";
21
+ import"./cli-wr6f0kyw.js";
22
22
  import {
23
23
  CliInputError
24
24
  } from "./cli-k4tqwah4.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moda-ai/cli",
3
- "version": "1.55.37",
3
+ "version": "1.55.39",
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-18T00:25:21.733Z",
4
- "cli_version": "1.55.37",
3
+ "bundled_at": "2026-10-18T01:16:14.799Z",
4
+ "cli_version": "1.55.39",
5
5
  "skills": [
6
6
  {
7
7
  "id": "integration-cloudflare-think",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: moda-cli
3
- version: 3.0.3
3
+ version: 3.0.5
4
4
  description: Investigate a production AI agent with the Moda CLI (`moda`) - find where something happened in real traces (traces search, then traces get), check agent health, rank what to fix (investigate, problems), and dig into tool failures, user frustration, and hallucinations. Also prompt registry sync/promote, replays, custom signals, and false-positive marking. Use when the user mentions Moda, production traces or conversations of their agent, agent failures, or asks what to fix.
5
5
  ---
6
6
 
@@ -60,11 +60,13 @@ Details: `references/output-protocol.md`.
60
60
  | Where did X happen / traces about Y | `moda traces search "<words>"` (`--mode=keyword` for ids, error codes, exact strings; `--include-tool-io` for tool inputs/outputs) | `moda traces get <conversation_id> --msg-index=<message_index> --window=3` |
61
61
  | Search returned nothing | Read `.warnings` (degraded mode, reason). Try a shorter phrase, `--mode=keyword`, a wider `--time-range` | `moda traces --search="<words>"` |
62
62
  | Is the agent healthy? | `moda overview --days-back=7` | `moda investigate` |
63
- | What to fix first? | `moda investigate` or `moda problems` (free) | `moda problems get <problem_id>`, then `--evidence` / `--traces` |
63
+ | What to fix first? | `moda investigate` or `moda problems list` (free; the same list the dashboard shows) | `moda problems get <problem_id>` (`--view=dream` on a dream-grouped tenant), then `--evidence` / `--traces` |
64
64
  | Why is tool T failing? | `moda detections tools` | `moda detections tools <T>` (use each row's `anchor`) |
65
65
  | How often is tool T called / what is its schema? | `moda tools list` (every tool: calls, failed calls, success rate; `--sort=failure_rate`) | `moda tools get <T>` (registered schema, observed payload fields, usage over time, top failure categories) |
66
66
  | What frustrates users? | `moda detections list --family=frustration --limit=10` | `moda traces get <anchor.conversation_id> --msg-index=<anchor.msg_index>` |
67
67
  | Other emotions, laziness, hallucinations | `moda detections list --family=emotion:<f>`, `moda detections list --family=laziness`, `moda detections list --family=hallucination --kind=contradicted` | context on the row's anchor |
68
+ | Counts that match the dashboard, dashboard filters | `moda detections list --family=<f> --group-by=trace` (`--trajectory`, `--elicitor`, `--signal`, `--rule`, `--sort`, ...) | `references/detections.md` 5a |
69
+ | Is an empty result really clean? | `moda overview` → `detectors` (is the detector on?); `traces` rows → `processing_status` (pending = not fully processed; detections may be incomplete) | `references/detections.md` 5b |
68
70
  | Read one whole trace | `moda traces get <id> --all` (pages of up to 500 messages) | `moda traces spans <id>` for raw spans |
69
71
  | Read several traces or turns | `moda traces get <id1>@<msg_index> <id2>@<msg_index> ...` (up to 25; or one per line via `--ids-from=-`) | Same for `moda traces spans <id1> <id2> ...` |
70
72
  | One user's experience | `moda users`, `moda user <user_id>` | `moda traces search "<words>" --user-id=<id>` |
@@ -29,12 +29,13 @@ Loaded on demand from the moda-cli skill. This table can lag the CLI: `moda <com
29
29
  | `moda detections tools <tool_name>` | Per-tool failure breakdown + examples |
30
30
  | `moda tools list` | Tool catalog: every tool called in the window with calls, failed calls, success rate, traces, effect direction, last seen (`--sort=calls\|failure_rate\|failures\|traces\|last_seen`, `--search`, `--direction`, `--limit` 1-200, `--offset`) |
31
31
  | `moda tools get <tool_name>` | One tool: call stats, registered description and schema, observed payload fields, usage over time, top failure categories with the newest failure (`--days-back`, `--full`) |
32
- | `moda problems` | Rank cross-signal Problems by root cause (what to fix first); takes only `--days-back`/`--limit`. Filter by family with `moda problems unexplained --family=F` or `moda problems get <problem_id> --traces --family=F` |
33
- | `moda problems get <problem_id>` | One Problem: dossier, or `--evidence`/`--reports`/`--traces`/`--feedback` pages (`--conversations` is a legacy alias of `--traces`) (`--limit` 1–50, `--cursor` verbatim keyset token) |
32
+ | `moda problems list` | The Problems the dashboard shows, ranked: the dream grouping when the tenant has one published, else the Book (`view` in the output says which; `--view=book\|dream` forces one). `--days-back`, `--limit` (1-200, default 10), `--offset` + `--list-version` (from the previous page; `next_commands` has the next page), `--sort=rank\|users` (dream: `severity\|silent`; Book: `signals\|problems\|signal:<family>`), `--dir`, `--cohort=builtin:<key>\|<saved id>`. Filter by family with `moda problems unexplained --family=F` or `moda problems get <problem_id> --traces --family=F` |
33
+ | `moda problems get <problem_id>` | One Problem: dossier, or `--evidence`/`--reports`/`--traces`/`--feedback` pages (`--conversations` is a legacy alias of `--traces`) (`--limit` 1–50, `--cursor` verbatim keyset token). `--view=dream`: the dashboard's dream page of it (definition, fix, severity, incidents with verdicts; `--limit` default 3, `--offset`). Dream problem ids are Book ids, so the dossier works for ids from either list view |
34
34
  | `moda problems feedback <problem_id>` | Write: `--action=mark_fixed\|dismiss\|flag_attribution\|rename`. `--reason` required for flag_attribution, optional for dismiss; `--new-name` for rename; `--attribution-id` (UUID) required for flag_attribution |
35
35
  | `moda review <kind> <target>` | Write: kinds `problem\|problem-detection\|quote\|tool\|laziness\|hallucination\|custom-signal`; `--reason` optional; problem-detection needs `--conversation-id` + `--attribution-id`; quote needs `--family`, `--turn`, `--quote`; tool needs `--tool` plus `--tool-use-id` or `--msg-index`; custom-signal needs `--conversation-id`; `--verdict=clear` removes a mark (not for problem) |
36
36
  | `moda reviews list [conversation_id]` | Current false-positive marks: all (`--kind=quote\|tool\|laziness\|hallucination\|custom-signal`, `--all` to include removed, `--limit`) or one trace with its problem detection reviews. Problem dismissals are read with `moda problems get <problem_id> --feedback`, detection reviews with `moda reviews list <conversation_id> --kind=problem-detection` |
37
37
  | `moda detections list --family=laziness` | Laziness detections per trace (`--days-back`, `--limit` 1-50, `--conversation-id`, `--family`) |
38
+ | `moda detections list --family=<f> --group-by=trace` | The dashboard's per-trace list for emotion, frustration and hallucination: totals count traces. Dashboard filters imply it: emotion/frustration `--search --status --elicitor --trajectory --signal --sort --order`; hallucination `--search --status --rule --source --sort --order`; laziness (always per trace) `--search --status --sort --order`. See detections.md 5a |
38
39
  | `moda problems linear <problem_id>` | The Problem's linked Linear issue (key, state, URL) or `link: null`; needs Linear connected (Integrations → Linear) |
39
40
  | `moda problems link <problem_id>` | Write: file the Problem as a Linear issue (`--team-id`, `--title`, `--priority=0-4`), or link an existing one with `--issue=ENG-123\|URL` (exclusive with the others). Idempotent per Problem |
40
41
  | `moda reviews list <conversation_id> --kind=problem-detection` | Problem detections on a trace with review state (`--attribution-id=UUID` narrows to one) |
@@ -11,8 +11,13 @@ Writes listed here accept `--dry-run`: it validates the call, prints the exact r
11
11
  |---|---|
12
12
  | Traces list: sort, page | `moda traces --sort=recent\|longest\|slowest --offset=N` |
13
13
  | Trace detail: whole transcript | `moda traces get <id> --all` (ordered, with tool calls/results) |
14
+ | Traces list: Processed, Use case confidence, Indexed columns | `moda traces` rows: `processing_status`, `error_message`, `membership_score`, `indexed_at`; `moda traces get <id>`: `trace_state` |
15
+ | Signals tabs: per-trace list, filters, sort | `moda detections list --family=<f> --group-by=trace` plus `--trajectory --elicitor --signal --status --search --sort --order` (emotion), `--rule --source` (hallucination) |
16
+ | Settings: which detectors run | `moda overview` → `detectors` (read-only; switching one is dashboard-only) |
14
17
  | Users page / user profile | `moda users [--window --cohort --sort --order --health-status]`, `moda user <id>` |
15
18
  | Tool catalog: every tool, its schema and usage | `moda tools list [--sort=calls\|failure_rate\|failures\|traces\|last_seen --search --direction --offset]`, `moda tools get <tool_name>` |
19
+ | Problems list (dream grouping or Book, as the page decides): sort, cohort, page | `moda problems list [--sort=users --cohort=builtin:<key> --offset=N --list-version=V]`; `--view=book\|dream` forces one |
20
+ | Problem page (dream view): severity, incidents with verdicts | `moda problems get <problem_id> --view=dream [--offset=N]` |
16
21
  | Problems: unexplained remainder | `moda problems unexplained [--family=emotion\|tool_failure\|laziness\|… --cursor]` |
17
22
  | Reopen a problem marked fixed | `moda problems reopen <problem_id> --reason="…"` (resolved ones return only via re-detection) |
18
23
  | Custom signals: create | `moda signals draft --note="…"`, then `moda signals create --name --description --pass-criteria --fail-criteria [--tool-names=a,b]` or `--file=body.json` |