@moda-ai/cli 1.55.42 → 1.55.43

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 (33) hide show
  1. package/dist/{agent-86hghww1.js → agent-x1gwrrvd.js} +6 -5
  2. package/dist/{cli-xddtv3yn.js → cli-5fhqfx04.js} +1 -39
  3. package/dist/{cli-gt3yq1y5.js → cli-5y9tj6cb.js} +183 -1
  4. package/dist/{cli-4sy4tytm.js → cli-9a0a3v13.js} +17 -3
  5. package/dist/cli-e0kbye4s.js +39 -0
  6. package/dist/{cli-hjm9151g.js → cli-fpd1pfvt.js} +2 -2
  7. package/dist/{cli-srwzar82.js → cli-h62j4jn7.js} +2 -2
  8. package/dist/{cli-he8csgsr.js → cli-k5drmy8r.js} +7 -7
  9. package/dist/{cli-vwpbspr5.js → cli-s1w5phms.js} +3 -3
  10. package/dist/{cli-mxfyq5nq.js → cli-stfpr2ct.js} +2 -2
  11. package/dist/cli.js +65 -28
  12. package/dist/{doctor-c05njdv8.js → doctor-wrgajgev.js} +5 -4
  13. package/dist/{fix-aghp304m.js → fix-7aajsdbf.js} +1 -1
  14. package/dist/{harness-vabp33ak.js → harness-1rn1hqzz.js} +4 -3
  15. package/dist/{harness-github-actions-112503xs.js → harness-github-actions-m95qvgbs.js} +4 -3
  16. package/dist/{index-dtxvvcq2.js → index-svfzq5rb.js} +7 -6
  17. package/dist/{production-intelligence-e5vsc6cw.js → production-intelligence-7jvfdz6b.js} +22 -5
  18. package/dist/{prompt-attribution-pbns1ya3.js → prompt-attribution-hc6mcvee.js} +4 -3
  19. package/dist/prompt-source-mcp.js +4 -3
  20. package/dist/{prompts-ab-f5qrvpkt.js → prompts-ab-ws66335h.js} +5 -4
  21. package/dist/{prompts-propose-jg2j41wx.js → prompts-propose-a9m0p9nr.js} +5 -4
  22. package/dist/{prompts-qppk0mhp.js → prompts-xe5bgbx8.js} +4 -3
  23. package/dist/{provision-cya5rpxa.js → provision-a9kkfvp7.js} +2 -1
  24. package/dist/{registry-8a1940sr.js → registry-j2dsfh6v.js} +1 -1
  25. package/dist/{skills-sh93b156.js → skills-vveagdwe.js} +4 -3
  26. package/dist/{sync-0pp1c8hs.js → sync-yy3fgnxe.js} +6 -5
  27. package/package.json +1 -1
  28. package/skills/integration/index.json +2 -2
  29. package/skills/moda-cli/SKILL.md +3 -1
  30. package/skills/moda-cli/references/commands.md +4 -2
  31. package/skills/moda-cli/references/dashboard-parity.md +3 -0
  32. package/skills/moda-cli/references/detections.md +20 -0
  33. package/skills/moda-cli/references/production-intelligence.md +48 -0
@@ -15,7 +15,7 @@ Loaded on demand from the moda-cli skill. This table can lag the CLI: `moda <com
15
15
  | `moda auth status` | Both credentials; exit `0` if either is usable, `4` if neither (expected, not an error) |
16
16
  | `moda auth token` | Print the raw bearer token for `$(moda auth token)` composition |
17
17
  | `moda traces search "<query>"` | **Message-grain semantic/keyword/hybrid search (incl. tool calls); primary content-discovery path** |
18
- | `moda overview` | Dashboard KPIs, top clusters, recent activity |
18
+ | `moda overview` | Dashboard KPIs, top clusters, recent activity. `--compare` adds `trends`: overview KPIs, per-unit rates, Problems and each detector family against the previous window of equal length; `--series` adds `[bucket, value]` arrays; `--since=<ISO> [--until=<ISO>]` sets the window (before/after a deploy); `--agent-name=<sub-agent>`; `--unit=conversation\|segment\|turn` |
19
19
  | `moda ask "<question>"` | Natural-language production/harness answer with evidence (exit `3` = degraded local fallback) |
20
20
  | `moda investigate` | Rank production issues (tool failures, frustrations, top Problems) with evidence + next commands |
21
21
  | `moda clusters` | Browse topic cluster hierarchy; `--search="q"` finds clusters by meaning, `--node-id=ID` resolves a deep link |
@@ -25,7 +25,7 @@ Loaded on demand from the moda-cli skill. This table can lag the CLI: `moda <com
25
25
  | `moda detections list --family=frustration` | User frustration detections with evidence (the frustration family of `emotions`, legacy field names) |
26
26
  | `moda detections list --family=emotion` | Multi-family emotion detections: frustration, disapproval, sadness, confusion, anxiety, trust, positive (`--family=F`, `--user-id`, `--conversation-id`, limit 1–20) |
27
27
  | `moda detections list --family=hallucination` | Grounding detections: contradicted/verified outputs, rule breakdown (`--kind=contradicted\|verified`, `--conversation-id=ID`) |
28
- | `moda detections tools` | Tool failure overview |
28
+ | `moda detections tools` | Tool failure overview (`--compare` adds `summary.compare`) |
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`) |
@@ -35,6 +35,8 @@ Loaded on demand from the moda-cli skill. This table can lag the CLI: `moda <com
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> --compare` | Adds `summary.compare`: the family's dashboard KPI tiles and per-trace rate for the list's `--days-back` window against the previous window of equal length (whole family; not with `--conversation-id`/`--user-id`) |
39
+ | `moda problems get <problem_id> --trend` | Incidents and users per day (`[date, value]`) and incidents/signals against the previous window of equal length (`--days-back`, default 30; no comparison above 45) |
38
40
  | `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 |
39
41
  | `moda problems linear <problem_id>` | The Problem's linked Linear issue (key, state, URL) or `link: null`; needs Linear connected (Integrations → Linear) |
40
42
  | `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 |
@@ -14,6 +14,9 @@ Writes listed here accept `--dry-run`: it validates the call, prints the exact r
14
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
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
16
  | Settings: which detectors run | `moda overview` → `detectors` (read-only; switching one is dashboard-only) |
17
+ | Home / Analytics / Signals KPI cards: change against the previous period, sparklines, agent selector | `moda overview --compare [--series] [--since=<ISO> --until=<ISO>] [--agent-name=<sub-agent>] [--unit=turn]` |
18
+ | Detector tab KPI tiles with deltas | `moda detections list --family=<f> --compare` (`summary.compare`) |
19
+ | Problem history per day | `moda problems get <problem_id> --trend [--days-back=N]` |
17
20
  | Users page / user profile | `moda users [--window --cohort --sort --order --health-status]`, `moda user <id>` (`--cohort` takes `builtin:<key>`, a saved cohort id, or a bare built-in key) |
18
21
  | Cohort selector on Problems, Traces, Signals tabs, custom signals, Topics | `--cohort=builtin:<key>\|<saved id>` on `problems list`, `traces list`, `detections list` (emotion, frustration and hallucination read the per-trace list; laziness; custom_signal `--signal-id`), `detections tools`, `clusters` (`--time-range=all\|3d\|7d\|30d`, also with `--search`). Output says which cohort scoped it (summary line and `cohort` in the data). `traces search` has no cohort scope |
19
22
  | Cohort builder: list, fields, preview, compare, save, edit | `moda cohorts list [--include-archived]`, `get <ref>`, `fields`, `preview --file=<definition.json>`, `compare <a> <b> [--days=7\|30\|90]`, `create --name --file [--dry-run]`, `update <cohort_id> [--name --file --note] [--dry-run]` (archiving is dashboard-only) |
@@ -126,6 +126,26 @@ An empty detection list is not proof a trace is clean:
126
126
  pending or errored traces: a pending trace may already have some detections,
127
127
  but its detections may be incomplete.
128
128
 
129
+ ### 5c. Is a family getting worse? (`--compare`)
130
+
131
+ ```bash
132
+ moda detections list --family=frustration --compare --days-back=7
133
+ moda detections list --family=laziness:stub_body --compare
134
+ moda detections tools --compare --days-back=14
135
+ ```
136
+
137
+ `--compare` adds `summary.compare`, one more read (GET `/v1/data/trends`)
138
+ with the dashboard's KPI tiles for the family: `kpis` (for example emotion
139
+ analyzed traces, negative rate, negative detections, affected users and traces
140
+ per family) and `rate` (share of traces with a detection, the Signals rate
141
+ card; left out for `frustration` and a sub-family, since the card counts the
142
+ whole detector, and `notes` says so). Each figure is `{current, previous, delta, delta_pct, spike?}` for the
143
+ list's `--days-back` window against the window of equal length just before it.
144
+ It covers the whole family, so it rejects `--conversation-id` and `--user-id`;
145
+ other list filters do not narrow it. For a before/after-deploy window, or a
146
+ series per hour or day, use `moda overview --compare --since=<deploy time>`
147
+ and `--series` (see production-intelligence.md).
148
+
129
149
  ### 6. Tool failure investigation
130
150
 
131
151
  ```bash
@@ -12,6 +12,54 @@ moda overview --days-back=30
12
12
  Returns total traces, trend, frustration rate, tool failure summary,
13
13
  top clusters, recent activity.
14
14
 
15
+ #### Before/after and trends (`--compare`, `--series`)
16
+
17
+ ```bash
18
+ moda overview --compare # last 7 days against the 7 days before
19
+ moda overview --compare --since=2026-10-17T14:00:00Z # after a deploy against the same span before it
20
+ moda overview --compare --since=2026-10-10 --until=2026-10-12 # a fixed window against the one before it
21
+ moda overview --series --days-back=14 # adds [bucket, value] series (implies --compare)
22
+ moda overview --compare --agent-name=planner # one sub-agent (names in trends.agent.options)
23
+ moda overview --compare --unit=turn # rates per user turn (or segment) instead of per trace
24
+ ```
25
+
26
+ Adds `trends` (GET `/v1/data/trends`), read from the dashboard's own loaders.
27
+ The previous window is always the span of equal length just before the window,
28
+ as the dashboard defines it. So `--since=<deploy time>` (to now) compares after
29
+ the deploy with the same length of time before it. There is no separate
30
+ `--compare-to` flag: every dashboard loader computes "previous" this way.
31
+ `--days-back` and `--since` are exclusive; `--until` needs `--since`; a window
32
+ can be up to 90 days.
33
+
34
+ Each figure is `{current, previous, delta, delta_pct, spike?}`. `delta` is
35
+ current minus previous (percentage points for a `_pct` rate). `delta_pct` is the
36
+ relative change. `spike` is the dashboard's spike rule. Sections:
37
+
38
+ | Section | Dashboard source | Figures |
39
+ |---|---|---|
40
+ | `overview` | Analytics overview | traces, messages, negative emotion rate (per analyzed trace), failed tool calls (per call), ungrounded claims (per scored message); `n` gives numerator and denominator |
41
+ | `problems` | Problems trend card | analysed traces, traces with any signal, signal rate (`--days-back` only) |
42
+ | `rates` | Signals overview rate cards | each detector's share of units with a detection (`--unit=conversation\|segment\|turn`) |
43
+ | `detectors` | Detector tab KPI tiles | emotion (analyzed, negative rate, detections, affected users, traces per family), tool_failure (failed traces, classified failures, failure rate, calls, users, tools), laziness, hallucination |
44
+
45
+ The same detector can show different rates in different sections because each
46
+ uses its own denominator (`rate_note` says which). `detectors.tool_failure.failure_rate_pct`
47
+ counts classified failures per call and is higher than `overview.tool_failure_rate_pct`
48
+ (failed call records per call).
49
+
50
+ `--series` adds `trends.series`: compact `[bucket, value]` arrays, per hour for
51
+ windows up to 2 days and per day above. Bucket keys are `YYYY-MM-DD` or
52
+ `YYYY-MM-DDTHH:00Z`.
53
+
54
+ `--agent-name` scopes the `overview` section only. The Problems, rates and
55
+ detector loaders have no sub-agent filter, so those sections are left out and
56
+ `trends.notes` says so.
57
+
58
+ The `overview` section is the slow part: on a large workspace a 30-day window
59
+ can take about 40 seconds, and the CLI waits up to 90. A figure whose read
60
+ failed is `null` with `unavailable: true` (never zero), and `trends.notes`
61
+ names it.
62
+
15
63
  ### 2b. Ask & investigate (production intelligence)
16
64
 
17
65
  `moda ask` answers a natural-language production/harness question (a paid