@moda-ai/cli 1.55.13 → 1.55.15

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 (31) hide show
  1. package/README.md +12 -0
  2. package/dist/{agent-rd9deae9.js → agent-a2xwfeeh.js} +9 -9
  3. package/dist/{cli-ryd7nzke.js → cli-2ars875d.js} +2 -2
  4. package/dist/{cli-bfmn3bsk.js → cli-3gwbg0xp.js} +2 -2
  5. package/dist/{cli-4qe6n8am.js → cli-438g4nwh.js} +122 -2
  6. package/dist/{cli-k7vwt56h.js → cli-53mvsfgn.js} +3 -3
  7. package/dist/{cli-ssqb8bfw.js → cli-6ca1sz0a.js} +1 -1
  8. package/dist/{cli-m0fa54ny.js → cli-7fc44hhq.js} +2258 -383
  9. package/dist/{cli-90hb4ng0.js → cli-86q35fpq.js} +8 -8
  10. package/dist/{cli-09rr5smg.js → cli-atx672xv.js} +1 -1
  11. package/dist/{cli-kwz900s4.js → cli-b3cxcxgn.js} +5 -4
  12. package/dist/{cli-4x9w6ey7.js → cli-kf3d6y8c.js} +1 -1
  13. package/dist/{cli-34zdvcpg.js → cli-xy6zn80e.js} +5 -5
  14. package/dist/{cli-y8gbbe9k.js → cli-zdeywyn9.js} +4 -4
  15. package/dist/cli.js +299 -94
  16. package/dist/{doctor-8yb6r66e.js → doctor-e2xrbpmp.js} +9 -9
  17. package/dist/{fix-bt5zn07e.js → fix-v8xka487.js} +7 -7
  18. package/dist/{harness-9psndqtm.js → harness-28wbzncq.js} +6 -6
  19. package/dist/{harness-github-actions-nph5t2s7.js → harness-github-actions-301nak95.js} +6 -6
  20. package/dist/{index-qjaprhrv.js → index-ccdpy9ma.js} +11 -11
  21. package/dist/{production-intelligence-mg3qp2dg.js → production-intelligence-0wqcvvxk.js} +6 -5
  22. package/dist/{profile-commands-2g5bjzj2.js → profile-commands-f5kysjrv.js} +3 -3
  23. package/dist/prompt-source-mcp.js +6 -6
  24. package/dist/{prompts-mzazn8ce.js → prompts-jg0stjfb.js} +7 -7
  25. package/dist/{provision-rm0yc08f.js → provision-25bw5rd7.js} +4 -4
  26. package/dist/{registry-mbz65bjy.js → registry-39xzetsc.js} +4 -4
  27. package/dist/{skills-sagxq9sc.js → skills-gjesa81c.js} +6 -6
  28. package/dist/{sync-gkwexz68.js → sync-7ts9psky.js} +8 -8
  29. package/package.json +1 -1
  30. package/skills/integration/index.json +2 -2
  31. package/skills/moda-cli/SKILL.md +31 -4
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  buildSourceSnapshot
3
- } from "./cli-m0fa54ny.js";
3
+ } from "./cli-7fc44hhq.js";
4
4
  import"./cli-97fnztpy.js";
5
- import"./cli-4x9w6ey7.js";
6
- import"./cli-k7vwt56h.js";
7
- import"./cli-ryd7nzke.js";
8
- import"./cli-09rr5smg.js";
5
+ import"./cli-kf3d6y8c.js";
6
+ import"./cli-53mvsfgn.js";
7
+ import"./cli-2ars875d.js";
8
+ import"./cli-atx672xv.js";
9
9
  import {
10
10
  recordApiRequest
11
- } from "./cli-kwz900s4.js";
11
+ } from "./cli-b3cxcxgn.js";
12
12
  import"./cli-0v6na3yp.js";
13
13
 
14
14
  // src/harness-github-actions.ts
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  selectTenantAndCreateKey
3
- } from "./cli-bfmn3bsk.js";
3
+ } from "./cli-3gwbg0xp.js";
4
4
  import {
5
5
  buildDoctorReport
6
- } from "./cli-34zdvcpg.js";
6
+ } from "./cli-xy6zn80e.js";
7
7
  import {
8
8
  ConnectCodeError,
9
9
  connectWithCode,
10
10
  loadAuthSession,
11
11
  loadToken,
12
12
  login
13
- } from "./cli-ssqb8bfw.js";
13
+ } from "./cli-6ca1sz0a.js";
14
14
  import {
15
15
  initPrompts,
16
16
  runPromptSync
17
- } from "./cli-90hb4ng0.js";
17
+ } from "./cli-86q35fpq.js";
18
18
  import"./cli-mm48br00.js";
19
19
  import {
20
20
  canonicalText,
@@ -34,7 +34,7 @@ import {
34
34
  runCodingAgent,
35
35
  runHarnessCommand,
36
36
  startRemoteAnalyze
37
- } from "./cli-m0fa54ny.js";
37
+ } from "./cli-7fc44hhq.js";
38
38
  import {
39
39
  stripAnsi
40
40
  } from "./cli-97fnztpy.js";
@@ -45,13 +45,13 @@ import {
45
45
  } from "./cli-c5c6f0yw.js";
46
46
  import {
47
47
  runSkillSync
48
- } from "./cli-y8gbbe9k.js";
48
+ } from "./cli-zdeywyn9.js";
49
49
  import {
50
50
  createCommandContext
51
- } from "./cli-4x9w6ey7.js";
52
- import"./cli-k7vwt56h.js";
53
- import"./cli-ryd7nzke.js";
54
- import"./cli-09rr5smg.js";
51
+ } from "./cli-kf3d6y8c.js";
52
+ import"./cli-53mvsfgn.js";
53
+ import"./cli-2ars875d.js";
54
+ import"./cli-atx672xv.js";
55
55
  import {
56
56
  CliAuthError,
57
57
  CliInputError,
@@ -59,7 +59,7 @@ import {
59
59
  recordApiRequest,
60
60
  resolveIngestUrl,
61
61
  resolveModaBaseUrl
62
- } from "./cli-kwz900s4.js";
62
+ } from "./cli-b3cxcxgn.js";
63
63
  import {
64
64
  detectAgents,
65
65
  installRules
@@ -3,10 +3,11 @@ import {
3
3
  asNumber,
4
4
  asRecord,
5
5
  asString,
6
+ contextTarget,
6
7
  frustrationAnchorIndex,
7
8
  frustrationsFromEmotions,
8
9
  shellWord
9
- } from "./cli-4qe6n8am.js";
10
+ } from "./cli-438g4nwh.js";
10
11
  import {
11
12
  renderMarkdownForTerminal,
12
13
  shouldColorTerminalOutput,
@@ -16,10 +17,10 @@ import {
16
17
  import {
17
18
  callControlAPI,
18
19
  callDataAPI
19
- } from "./cli-ryd7nzke.js";
20
+ } from "./cli-2ars875d.js";
20
21
  import {
21
22
  apiKeyHeaders
22
- } from "./cli-09rr5smg.js";
23
+ } from "./cli-atx672xv.js";
23
24
  import {
24
25
  CliAuthError,
25
26
  CliInputError,
@@ -29,7 +30,7 @@ import {
29
30
  resolveApiKey,
30
31
  resolveModaBaseUrl,
31
32
  safeWriteStderr
32
- } from "./cli-kwz900s4.js";
33
+ } from "./cli-b3cxcxgn.js";
33
34
  import"./cli-0v6na3yp.js";
34
35
 
35
36
  // src/production-intelligence.ts
@@ -889,7 +890,7 @@ function frustrationFindings(data, daysBack, evidenceRefs) {
889
890
  id: "action_frustration_window",
890
891
  title: "Read the frustration window.",
891
892
  rationale: "The user quote and nearby turns reveal what confused or blocked the user.",
892
- command: conversationId ? `moda context ${shellWord(conversationId)}${anchorIndex !== null ? ` --msg-index=${anchorIndex}` : ""} --window=3` : `moda frustrations --days-back=${daysBack} --include-window`,
893
+ command: conversationId ? `moda context ${shellWord(contextTarget(conversationId))}${anchorIndex !== null ? ` --msg-index=${anchorIndex}` : ""} --window=3` : `moda frustrations --days-back=${daysBack} --include-window`,
893
894
  mutability: "read",
894
895
  requiresApproval: false
895
896
  }]
@@ -5,10 +5,10 @@ import {
5
5
  loadAuthSession,
6
6
  login,
7
7
  revokeCliSessionToken
8
- } from "./cli-ssqb8bfw.js";
8
+ } from "./cli-6ca1sz0a.js";
9
9
  import {
10
10
  apiKeyHeaders
11
- } from "./cli-09rr5smg.js";
11
+ } from "./cli-atx672xv.js";
12
12
  import {
13
13
  CliInputError,
14
14
  DEFAULT_INGEST_URL,
@@ -34,7 +34,7 @@ import {
34
34
  secretFilePathFromRef,
35
35
  setActiveProfile,
36
36
  upsertProfile
37
- } from "./cli-kwz900s4.js";
37
+ } from "./cli-b3cxcxgn.js";
38
38
  import"./cli-0v6na3yp.js";
39
39
 
40
40
  // src/api-key-auth.ts
@@ -5,13 +5,13 @@ import {
5
5
  inspectCodeSelectors,
6
6
  inspectPythonSelectors,
7
7
  safePromptEvidencePath
8
- } from "./cli-m0fa54ny.js";
8
+ } from "./cli-7fc44hhq.js";
9
9
  import"./cli-97fnztpy.js";
10
- import"./cli-4x9w6ey7.js";
11
- import"./cli-k7vwt56h.js";
12
- import"./cli-ryd7nzke.js";
13
- import"./cli-09rr5smg.js";
14
- import"./cli-kwz900s4.js";
10
+ import"./cli-kf3d6y8c.js";
11
+ import"./cli-53mvsfgn.js";
12
+ import"./cli-2ars875d.js";
13
+ import"./cli-atx672xv.js";
14
+ import"./cli-b3cxcxgn.js";
15
15
  import {
16
16
  __commonJS,
17
17
  __toESM
@@ -11,17 +11,17 @@ import {
11
11
  runPromptSync,
12
12
  runPromptsCommand,
13
13
  writePromptSyncProgress
14
- } from "./cli-90hb4ng0.js";
14
+ } from "./cli-86q35fpq.js";
15
15
  import {
16
16
  promptSourceHashPayload
17
17
  } from "./cli-mm48br00.js";
18
- import"./cli-m0fa54ny.js";
18
+ import"./cli-7fc44hhq.js";
19
19
  import"./cli-97fnztpy.js";
20
- import"./cli-4x9w6ey7.js";
21
- import"./cli-k7vwt56h.js";
22
- import"./cli-ryd7nzke.js";
23
- import"./cli-09rr5smg.js";
24
- import"./cli-kwz900s4.js";
20
+ import"./cli-kf3d6y8c.js";
21
+ import"./cli-53mvsfgn.js";
22
+ import"./cli-2ars875d.js";
23
+ import"./cli-atx672xv.js";
24
+ import"./cli-b3cxcxgn.js";
25
25
  import"./cli-0v6na3yp.js";
26
26
  export {
27
27
  writePromptSyncProgress,
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  selectTenantAndCreateKey
3
- } from "./cli-bfmn3bsk.js";
3
+ } from "./cli-3gwbg0xp.js";
4
4
  import {
5
5
  loadAuthSession
6
- } from "./cli-ssqb8bfw.js";
6
+ } from "./cli-6ca1sz0a.js";
7
7
  import {
8
8
  stringOption
9
- } from "./cli-4x9w6ey7.js";
9
+ } from "./cli-kf3d6y8c.js";
10
10
  import {
11
11
  CliAuthError,
12
12
  resolveIngestUrl,
13
13
  resolveModaBaseUrl
14
- } from "./cli-kwz900s4.js";
14
+ } from "./cli-b3cxcxgn.js";
15
15
  import"./cli-0v6na3yp.js";
16
16
 
17
17
  // src/provision.ts
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  assertFlags
3
- } from "./cli-k7vwt56h.js";
3
+ } from "./cli-53mvsfgn.js";
4
4
  import {
5
5
  callControlAPI
6
- } from "./cli-ryd7nzke.js";
7
- import"./cli-09rr5smg.js";
6
+ } from "./cli-2ars875d.js";
7
+ import"./cli-atx672xv.js";
8
8
  import {
9
9
  CliInputError,
10
10
  explicitOutputMode,
11
11
  resolveApiKey
12
- } from "./cli-kwz900s4.js";
12
+ } from "./cli-b3cxcxgn.js";
13
13
  import"./cli-0v6na3yp.js";
14
14
 
15
15
  // src/registry.ts
@@ -3,12 +3,12 @@ import {
3
3
  pullSkills,
4
4
  runSkillSync,
5
5
  runSkillsCommand
6
- } from "./cli-y8gbbe9k.js";
7
- import"./cli-4x9w6ey7.js";
8
- import"./cli-k7vwt56h.js";
9
- import"./cli-ryd7nzke.js";
10
- import"./cli-09rr5smg.js";
11
- import"./cli-kwz900s4.js";
6
+ } from "./cli-zdeywyn9.js";
7
+ import"./cli-kf3d6y8c.js";
8
+ import"./cli-53mvsfgn.js";
9
+ import"./cli-2ars875d.js";
10
+ import"./cli-atx672xv.js";
11
+ import"./cli-b3cxcxgn.js";
12
12
  import"./cli-ssfq84k5.js";
13
13
  import"./cli-0v6na3yp.js";
14
14
  export {
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  runPromptsCommand
3
- } from "./cli-90hb4ng0.js";
3
+ } from "./cli-86q35fpq.js";
4
4
  import"./cli-mm48br00.js";
5
5
  import {
6
6
  runHarnessCommand
7
- } from "./cli-m0fa54ny.js";
7
+ } from "./cli-7fc44hhq.js";
8
8
  import"./cli-97fnztpy.js";
9
9
  import {
10
10
  runSkillsCommand
11
- } from "./cli-y8gbbe9k.js";
12
- import"./cli-4x9w6ey7.js";
13
- import"./cli-k7vwt56h.js";
14
- import"./cli-ryd7nzke.js";
15
- import"./cli-09rr5smg.js";
11
+ } from "./cli-zdeywyn9.js";
12
+ import"./cli-kf3d6y8c.js";
13
+ import"./cli-53mvsfgn.js";
14
+ import"./cli-2ars875d.js";
15
+ import"./cli-atx672xv.js";
16
16
  import {
17
17
  CliInputError
18
- } from "./cli-kwz900s4.js";
18
+ } from "./cli-b3cxcxgn.js";
19
19
  import"./cli-ssfq84k5.js";
20
20
  import"./cli-0v6na3yp.js";
21
21
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moda-ai/cli",
3
- "version": "1.55.13",
3
+ "version": "1.55.15",
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-15T05:16:13.004Z",
4
- "cli_version": "1.55.13",
3
+ "bundled_at": "2026-10-15T06:17:15.907Z",
4
+ "cli_version": "1.55.15",
5
5
  "skills": [
6
6
  {
7
7
  "id": "integration-cloudflare-think",
@@ -668,6 +668,26 @@ moda context <conversation_id> --all --from=500 --max-messages=500 # continue (
668
668
  `--all` returns `has_more`/`next_from`; when it stops at the cap, the warning
669
669
  prints the exact `--from` command to continue.
670
670
 
671
+ **Several traces? Batch them in one call instead of looping `moda context`
672
+ per id.** Pass up to 25 targets as positionals or one per line with
673
+ `--ids-from=-` (stdin) or `--ids-from=<file>`. A target is `<id>` or
674
+ `<id>@<msg_index>` (the anchor; ids may contain `:`), and the shared flags
675
+ (`--window`, `--metadata-only`, `--all`) apply to every target. Lines may also
676
+ be JSON (`{"id":"...","msg_index":N}`), the only spelling for an id that itself
677
+ ends in `@<digits>`.
678
+
679
+ ```bash
680
+ moda context telegram:8565459080@12 linq:c6f88988-aa@3 web:conv-9 --window=2
681
+ printf '%s\n' telegram:8565459080@12 web:conv-9 | moda context --ids-from=- --window=1
682
+ ```
683
+
684
+ A batch returns `data.results: [{ target, ok, data | error }]` in input order,
685
+ plus `succeeded`/`failed` counts. A missing trace is a per-item
686
+ `error.code: "not_found"`, not a failed call; the exit code is 1 only when
687
+ every target failed. When the agent byte budget would overflow, the items that
688
+ fit are returned and `remaining_targets` plus a `next_commands` entry read the
689
+ rest. One positional id keeps the single-trace output above.
690
+
671
691
  `moda context` is turn-windowed (≤5 turns, deduped, no tool spans). For the raw,
672
692
  complete picture of what was captured — every span, the parent/child hierarchy,
673
693
  tool calls, prompt/response bodies, and `gen_ai.*` attributes — use `moda audit`.
@@ -681,8 +701,15 @@ moda audit <conversation_id> --include-raw # attach verbatim raw_event bodies
681
701
  moda audit <conversation_id> --include-bodies # keep prompt/response/attribute bodies
682
702
  moda audit <conversation_id> --limit=1000 # ingest rows to read (default 200, max 1000)
683
703
  moda audit <conversation_id> --cursor=<next_cursor> # next page of a capped audit
704
+ moda audit <id1> <id2> <id3> # batch: up to 25 ids, one envelope
684
705
  ```
685
706
 
707
+ Auditing several traces? Batch the ids (positionals or `--ids-from=-|<file>`)
708
+ instead of looping `moda audit`: the result is `data.results: [{ target, ok,
709
+ data | error }]` with the same per-item errors and byte-budget rules as batch
710
+ `moda context`. Ids are taken verbatim (no `@` anchors); `--cursor` pages one
711
+ trace, so follow each item's `next_commands` for it.
712
+
686
713
  `truncated` / `has_more` at the top level say whether the audit is complete.
687
714
  A full `--limit` page of ingest rows, the server's ~3 MB response budget
688
715
  (`summary.truncated_reason: "byte_limit"`) or a span cap sets both, and a
@@ -1244,10 +1271,10 @@ envelope, where the payload sits under `.data`.
1244
1271
  # Pull primary causes of recent frustrations
1245
1272
  moda frustrations --days-back=7 --json | jq -r '.frustrations[].primary_cause'
1246
1273
 
1247
- # Get trace IDs for a search and fetch context for each
1248
- for id in $(moda traces --search="timeout" --limit=3 --json | jq -r '.conversations[].conversation_id'); do
1249
- moda context "$id"
1250
- done
1274
+ # Get trace IDs for a search and fetch context for all of them in one call
1275
+ moda traces --search="timeout" --limit=3 --json \
1276
+ | jq -r '.conversations[].conversation_id' \
1277
+ | moda context --ids-from=-
1251
1278
 
1252
1279
  # Tool failure leaderboard
1253
1280
  moda tool-failures --json | jq '.tools[] | {tool: .tool_name, failures: .failure_count}'