@moda-ai/cli 1.24.0 → 1.26.0

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,7 +1,7 @@
1
1
  import {
2
2
  buildSourceSnapshot
3
- } from "./cli-f2f0twjw.js";
4
- import"./cli-vc7zddj1.js";
3
+ } from "./cli-g931ntph.js";
4
+ import"./cli-59yacef3.js";
5
5
 
6
6
  // src/harness-github-actions.ts
7
7
  var DEFAULT_MODA_GITHUB_URL = "https://moda-github.modas.workers.dev";
@@ -9,7 +9,7 @@ import {
9
9
  runPromptSync,
10
10
  runSkillSync,
11
11
  upsertSkillManifestRecord
12
- } from "./cli-0t9z27pc.js";
12
+ } from "./cli-xf5nx5hc.js";
13
13
  import {
14
14
  codingAgentDisplayName,
15
15
  describeCodingAgentEvent,
@@ -27,14 +27,14 @@ import {
27
27
  runHarnessCommand,
28
28
  startRemoteAnalyze,
29
29
  stripAnsi
30
- } from "./cli-f2f0twjw.js";
30
+ } from "./cli-g931ntph.js";
31
31
  import {
32
32
  selectTenantAndCreateKey
33
- } from "./cli-tdttb4cv.js";
33
+ } from "./cli-pq6rte0w.js";
34
34
  import {
35
35
  loadToken,
36
36
  login
37
- } from "./cli-8s69sg7f.js";
37
+ } from "./cli-9xw5bq1j.js";
38
38
  import {
39
39
  CliAuthError,
40
40
  CliInputError,
@@ -42,7 +42,7 @@ import {
42
42
  createCommandContext,
43
43
  resolveIngestUrl,
44
44
  resolveModaBaseUrl
45
- } from "./cli-vc7zddj1.js";
45
+ } from "./cli-59yacef3.js";
46
46
 
47
47
  // src/init/index.ts
48
48
  import { existsSync as existsSync6, mkdirSync as mkdirSync5, readdirSync as readdirSync4, readFileSync as readFileSync5, writeFileSync as writeFileSync4 } from "node:fs";
@@ -1792,6 +1792,7 @@ async function runInit(flags, options = {}) {
1792
1792
  const nestedHarnessFlags = (extra) => commandFlags({
1793
1793
  summary: true,
1794
1794
  yes: true,
1795
+ experimental: true,
1795
1796
  json: json || agent,
1796
1797
  agent,
1797
1798
  quiet: true,
@@ -2406,6 +2407,9 @@ function writeHarnessRescanWorkflow(cwd = process.cwd(), paths) {
2406
2407
  " env:",
2407
2408
  " MODA_API_KEY: ${{ secrets.MODA_API_KEY }}",
2408
2409
  " MODA_TENANT_ID: ${{ secrets.MODA_TENANT_ID }}",
2410
+ " # `moda harness analyze` is opt-in (the Moda GitHub App is the default",
2411
+ " # path); this workflow drives the CLI analyze directly, so it opts in.",
2412
+ ' MODA_HARNESS_ANALYZE_CLI: "1"',
2409
2413
  " steps:",
2410
2414
  " - uses: actions/checkout@v4",
2411
2415
  " - uses: actions/setup-node@v4",
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  selectTenantAndCreateKey
3
- } from "./cli-tdttb4cv.js";
3
+ } from "./cli-pq6rte0w.js";
4
4
  import {
5
5
  loadAuthSession
6
- } from "./cli-8s69sg7f.js";
6
+ } from "./cli-9xw5bq1j.js";
7
7
  import {
8
8
  CliAuthError,
9
9
  resolveIngestUrl,
10
10
  resolveModaBaseUrl,
11
11
  stringOption
12
- } from "./cli-vc7zddj1.js";
12
+ } from "./cli-59yacef3.js";
13
13
 
14
14
  // src/provision.ts
15
15
  async function runProvision(context, options = {}) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moda-ai/cli",
3
- "version": "1.24.0",
3
+ "version": "1.26.0",
4
4
  "description": "CLI for Moda - AI agent analytics and observability",
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-07-26T21:30:49.760Z",
4
- "cli_version": "1.24.0",
3
+ "bundled_at": "2026-08-17T00:50:53.917Z",
4
+ "cli_version": "1.26.0",
5
5
  "skills": [
6
6
  {
7
7
  "id": "integration-node-anthropic",
@@ -16,7 +16,7 @@ or promote remote state (`prompts sync`, `prompts promote`).
16
16
 
17
17
  **`moda search` is the primary way to find anything by content.** It runs
18
18
  message-grain semantic, keyword, or hybrid retrieval across every message —
19
- including tool calls and tool results — and returns ranked snippets with
19
+ including tool calls and tool results with `--include-tool-io` — and returns ranked snippets with
20
20
  direct anchors (`conversation_id` + `message_index`) you can hand straight to
21
21
  `moda context`. Reach for it first whenever the question is "where did X
22
22
  happen?" or "find conversations/tool calls about Y". Use `moda conversations`
@@ -55,9 +55,9 @@ Optional:
55
55
 
56
56
  - `MODA_BASE_URL` defaults to `https://moda.dev`; override only for
57
57
  self-hosted or staging.
58
- - `MODA_SKILL_VERSION` — export to `2.0.0` so search-adoption telemetry can
58
+ - `MODA_SKILL_VERSION` — export to `2.2.0` so search-adoption telemetry can
59
59
  attribute usage to this skill version. Set it once per session:
60
- `export MODA_SKILL_VERSION=2.0.0`.
60
+ `export MODA_SKILL_VERSION=2.2.0`.
61
61
 
62
62
  ## Setup
63
63
 
@@ -391,9 +391,10 @@ moda search "checkout error" --time-range=7d --limit=10
391
391
  moda search "stripe.charges.create failed" --user-id=<id>
392
392
  ```
393
393
 
394
- Searches conversation messages at message grain, **including tool calls and
395
- tool results** (tool name, input arguments, and output previews are embedded),
396
- so it finds where an agent *did* something, not just where it talked about it.
394
+ Searches conversation messages at message grain. Pass `--include-tool-io` to
395
+ also search **tool calls and tool results** (tool name, input arguments, and
396
+ output previews), so it finds where an agent *did* something, not just where
397
+ it talked about it — tool-IO search is opt-in, not the default.
397
398
 
398
399
  Flags: `--mode=keyword|semantic|hybrid` (default `hybrid`), `--user-id`,
399
400
  `--time-range` (`all|1h|3d|7d|24h|30d|90d`, default `all`), `--limit` (1–100,
@@ -710,9 +711,10 @@ moda feedback "a cancelled call is counted as a tool failure" \
710
711
  ## Validation — how to know it worked
711
712
 
712
713
  - Every successful command exits 0 and prints valid JSON to stdout.
713
- - `moda ask` / `moda investigate` may exit `3` (degraded): a real,
714
- lower-trust answer synthesized from local evidence — not a failure. Treat
715
- exit `1` as the only hard error (see [Agent protocol](#agent-protocol)).
714
+ - `moda ask` may exit `3` (degraded): a real, lower-trust answer synthesized
715
+ from local evidence — not a failure (`investigate`/`failures` always exit
716
+ `0` on success). Treat exit `1` as the only hard error (see
717
+ [Agent protocol](#agent-protocol)).
716
718
  - Errors print to stderr with non-zero exit. Check stderr before claiming
717
719
  success.
718
720
  - If the JSON has `"conversations": []` or `"frustrations": []`, the call
@@ -768,13 +770,22 @@ npx: `npx -p @moda-ai/cli moda <command>`.
768
770
  | `moda overview` | Dashboard KPIs, top clusters, recent activity |
769
771
  | `moda ask "<question>"` | Natural-language production/harness answer with evidence (exit `3` = degraded local fallback) |
770
772
  | `moda investigate` | Rank production issues with evidence + next commands |
771
- | `moda clusters` | Browse topic cluster hierarchy |
773
+ | `moda clusters` | Browse topic cluster hierarchy; `--search="q"` finds clusters by meaning, `--node-id=ID` resolves a deep link |
772
774
  | `moda cluster-conversations <node_id>` | Conversations in a cluster |
773
775
  | `moda conversations` | List/filter conversations by structured fields |
774
776
  | `moda context <conversation_id>` | Windowed message context (max 5 per side) |
775
- | `moda frustrations` | User frustration detections with evidence |
777
+ | `moda frustrations` | User frustration detections with evidence (legacy single-family; prefer `emotions`) |
778
+ | `moda emotions` | Multi-family emotion detections: frustration, sadness, confusion, anxiety, trust, positive (`--family=F`, limit 1–20) |
779
+ | `moda hallucinations` | Grounding detections: contradicted/verified outputs, rule breakdown (`--kind=contradicted\|verified`, `--conversation-id=ID`) |
776
780
  | `moda tool-failures` | Tool failure overview |
777
781
  | `moda tool-failure-detail <tool_name>` | Per-tool failure breakdown + examples |
782
+ | `moda problems` | Rank cross-signal Problems by root cause (what to fix first) |
783
+ | `moda problem <problem_id>` | One Problem: dossier, or `--evidence`/`--reports`/`--conversations`/`--feedback` pages (`--limit` 1–50, `--cursor` verbatim keyset token) |
784
+ | `moda problem-feedback <problem_id>` | Write: `--action=mark_fixed\|dismiss\|flag_attribution\|rename`. `--reason` required for dismiss/flag_attribution; `--new-name` for rename; `--attribution-id` (UUID) required for flag_attribution |
785
+ | `moda step-scores <conversation_id>` | Graph-PRM step scores: per-segment curves, first bad step, rollup |
786
+ | `moda world-state <conversation_id>` | Agent memory: slots/threads/events; `--summary-only`; `--snapshot --msg-index=N` (state at a turn); `--replay --message-count=N` (state over time) |
787
+ | `moda failures` | Production failures worth fixing first |
788
+ | `moda tail` | Live tail: one JSON line per new conversation/detection (`--signal=conversations\|emotions\|all`, `--interval=N`, `--once`, `--max-events=N`). **Emotions caveat:** `/emotions` is ranked by score with no time ordering or cursor, so the tail follows the *highest-scoring* detections rather than everything; each poll emits a `tail_coverage` line with `scanned`/`total`/`coverage_pct`/`complete`. Pass `--full-scan` for a complete window scan (many more requests, capped by the API's offset ceiling of 10000). |
778
789
  | `moda feedback "<note>"` | Flag wrong/missing data or CLI quirks to the Moda team |
779
790
  | `moda prompts status` | Read-only local prompt status |
780
791
  | `moda prompts diff` | Read-only local prompt diff/status |