@moda-ai/cli 1.55.24 → 1.55.26

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 (34) hide show
  1. package/dist/{agent-b4tdzy9q.js → agent-nqmha8ck.js} +8 -8
  2. package/dist/{cli-9hc5bg2r.js → cli-1mbb0ct0.js} +1 -1
  3. package/dist/{cli-vg88mg20.js → cli-5g1tv80h.js} +5 -5
  4. package/dist/{cli-rt26sbz7.js → cli-8tfk8qeb.js} +10 -6
  5. package/dist/{cli-y2ty9vtv.js → cli-b4740tnv.js} +210 -23
  6. package/dist/{cli-qvg26twp.js → cli-cdrvjva5.js} +11 -8
  7. package/dist/{cli-7xc585hc.js → cli-d577kq6h.js} +5 -5
  8. package/dist/{cli-dn91fb56.js → cli-jgfm7w1r.js} +89 -47
  9. package/dist/{cli-9btx12wp.js → cli-jtyvbd8d.js} +1 -1
  10. package/dist/{cli-qycsmxev.js → cli-k6q8dbpk.js} +3 -3
  11. package/dist/{cli-0wr3483h.js → cli-q6f6vrrr.js} +1 -1
  12. package/dist/{cli-dve50x7p.js → cli-sqsjd08w.js} +784 -725
  13. package/dist/cli.js +713 -234
  14. package/dist/{doctor-3r19ry92.js → doctor-w913fj4g.js} +8 -8
  15. package/dist/{fix-exvxzvtz.js → fix-crkwdkt4.js} +6 -6
  16. package/dist/{harness-github-actions-atc5bbkj.js → harness-github-actions-fjhvhgpj.js} +5 -5
  17. package/dist/{harness-vzy7n7ea.js → harness-x3e7d68b.js} +5 -5
  18. package/dist/{index-e1pf1qz2.js → index-2kf3fnnb.js} +11 -11
  19. package/dist/{production-intelligence-c8e0xw3n.js → production-intelligence-7n83c701.js} +75 -15
  20. package/dist/{profile-commands-6e2dgv72.js → profile-commands-ct2t0bfr.js} +3 -3
  21. package/dist/prompt-source-mcp.js +5 -5
  22. package/dist/{prompts-cvzt994j.js → prompts-92aqqb2k.js} +6 -6
  23. package/dist/{provision-q86phh4a.js → provision-gn8raqpt.js} +5 -5
  24. package/dist/{registry-s2vdsfw8.js → registry-ex162j5y.js} +3 -3
  25. package/dist/{skills-tadh1jss.js → skills-2mbsj9bt.js} +5 -5
  26. package/dist/{sync-g8wtecz1.js → sync-kghmmmk5.js} +7 -7
  27. package/package.json +1 -1
  28. package/skills/integration/index.json +2 -2
  29. package/skills/moda-cli/SKILL.md +8 -2
  30. package/skills/moda-cli/references/dashboard-parity.md +1 -1
  31. package/skills/moda-cli/references/output-protocol.md +35 -10
  32. package/skills/moda-cli/references/production-intelligence.md +3 -2
  33. package/skills/moda-cli/references/prompts.md +6 -2
  34. package/skills/moda-cli/references/search-and-traces.md +20 -2
@@ -2,16 +2,17 @@ import {
2
2
  ApiError,
3
3
  callControlAPI,
4
4
  callDataAPI
5
- } from "./cli-9btx12wp.js";
5
+ } from "./cli-jtyvbd8d.js";
6
6
  import {
7
7
  CliAccessError,
8
8
  CliInputError,
9
+ continuationCommand,
9
10
  embeddedTenantIdFromApiKey,
10
11
  isPlatformApiKey,
11
12
  resolveApiKey,
12
13
  resolveApiTenantId,
13
14
  setPlatformTenantOverride
14
- } from "./cli-dve50x7p.js";
15
+ } from "./cli-sqsjd08w.js";
15
16
 
16
17
  // src/schemas.ts
17
18
  import { z } from "zod";
@@ -41,12 +42,12 @@ var ClustersSchema = z.object({
41
42
  search: z.string().min(2).max(200).optional().describe("Find clusters by name or meaning"),
42
43
  node_id: z.string().min(1).max(512).optional().describe("Resolve one cluster node by id (deep link)"),
43
44
  mode: z.enum(["fuzzy", "semantic", "hybrid"]).optional().describe("Cluster search mode (server default hybrid)"),
44
- limit: z.number().min(1).max(50).optional().describe("Maximum clusters to return (with --search/--node-id)")
45
+ limit: z.number().int().min(1).max(50).optional().describe("Maximum clusters to return (with --search/--node-id)")
45
46
  });
46
47
  var ClusterConversationsSchema = z.object({
47
48
  node_id: z.string().describe("Cluster node id (from moda clusters)"),
48
- limit: z.number().min(1).max(100).default(10).optional().describe("Maximum traces to return"),
49
- offset: z.number().min(0).default(0).optional().describe("Number of traces to skip")
49
+ limit: z.number().int().min(1).max(100).default(10).optional().describe("Maximum traces to return"),
50
+ offset: z.number().int().min(0).default(0).optional().describe("Number of traces to skip")
50
51
  });
51
52
  var ConversationsSchema = z.object({
52
53
  search: z.string().optional().describe("Ranked trace search (hybrid when embeddings exist, else keyword)"),
@@ -60,20 +61,20 @@ var ConversationsSchema = z.object({
60
61
  outcome: z.enum(["any", "positive", "negative"]).default("any").optional().describe("Filter by trace outcome (trajectory + frustration)"),
61
62
  include_world_state: boolFlag().describe("Attach each result's world-state summary"),
62
63
  sort: z.enum(["recent", "longest", "slowest"]).optional().describe("recent = newest activity, longest = most messages, slowest = longest span"),
63
- limit: z.number().min(1).max(100).default(20).optional().describe("Maximum traces to return"),
64
- offset: z.number().min(0).default(0).optional().describe("Number of traces to skip")
64
+ limit: z.number().int().min(1).max(100).default(20).optional().describe("Maximum traces to return"),
65
+ offset: z.number().int().min(0).default(0).optional().describe("Number of traces to skip")
65
66
  });
66
67
  var WorldStateSchema = z.object({
67
68
  conversation_id: z.string().describe("Trace ID"),
68
69
  summary_only: boolFlag().describe("Segment summaries only (omit the event stream)"),
69
- event_limit: z.number().min(1).max(5000).default(2000).optional().describe("Maximum world-state events to return"),
70
+ event_limit: z.number().int().min(1).max(5000).default(2000).optional().describe("Maximum world-state events to return"),
70
71
  snapshot: boolFlag().describe("Folded slots at one tick (what the agent believed at that turn)"),
71
- msg_index: z.number().min(0).max(1e5).optional().describe("Snapshot tick: message index (default 0)"),
72
- block_index: z.number().min(0).max(1e5).optional().describe("Snapshot tick: content block index (default 0)"),
73
- segment_index: z.number().min(0).max(65535).optional().describe("Scope the snapshot to one segment"),
72
+ msg_index: z.number().int().min(0).max(1e5).optional().describe("Snapshot tick: message index (default 0)"),
73
+ block_index: z.number().int().min(0).max(1e5).optional().describe("Snapshot tick: content block index (default 0)"),
74
+ segment_index: z.number().int().min(0).max(65535).optional().describe("Scope the snapshot to one segment"),
74
75
  replay: boolFlag().describe("State-over-time replay (frames mode needs --message-count)"),
75
76
  format: z.enum(["frames", "fold-inputs"]).optional().describe("Replay format (default frames)"),
76
- message_count: z.number().min(1).max(1e6).optional().describe("Messages to fold in frames mode")
77
+ message_count: z.number().int().min(1).max(1e6).optional().describe("Messages to fold in frames mode")
77
78
  });
78
79
  var ContextSchema = z.object({
79
80
  conversation_id: z.string().min(1).describe("Trace ID"),
@@ -87,10 +88,10 @@ var ContextSchema = z.object({
87
88
  });
88
89
  var FrustrationsSchema = z.object({
89
90
  days_back: daysBackFlag(7),
90
- limit: z.number().min(1).max(20).default(10).optional().describe("Maximum detections to return"),
91
- offset: z.number().min(0).default(0).optional().describe("Number of detections to skip"),
91
+ limit: z.number().int().min(1).max(20).default(10).optional().describe("Maximum detections to return"),
92
+ offset: z.number().int().min(0).default(0).optional().describe("Number of detections to skip"),
92
93
  include_window: boolFlag().describe("Attach the surrounding messages to each detection (agent output omits them by default)"),
93
- window: z.number().min(1).max(5).default(1).optional().describe("Messages on each side with --include-window"),
94
+ window: z.number().int().min(1).max(5).default(1).optional().describe("Messages on each side with --include-window"),
94
95
  user_id: z.string().min(1).max(256).optional().describe("Scope everything to one end user"),
95
96
  conversation_id: z.string().min(1).max(256).optional().describe("Scope everything to one trace ID")
96
97
  });
@@ -99,7 +100,7 @@ var ToolFailuresSchema = z.object({
99
100
  });
100
101
  var ProblemsSchema = z.object({
101
102
  days_back: daysBackFlag(30),
102
- limit: z.number().min(1).max(25).default(25).optional().describe("Maximum Problems to return")
103
+ limit: z.number().int().min(1).max(25).default(25).optional().describe("Maximum Problems to return")
103
104
  });
104
105
  var REMAINDER_FAMILIES = [
105
106
  "tool_failure",
@@ -112,7 +113,7 @@ var REMAINDER_FAMILIES = [
112
113
  ];
113
114
  var ProblemsRemainderSchema = z.object({
114
115
  days_back: daysBackFlag(30),
115
- limit: z.number().min(1).max(25).default(25).optional().describe("Maximum groups to return"),
116
+ limit: z.number().int().min(1).max(25).default(25).optional().describe("Maximum groups to return"),
116
117
  family: z.enum(REMAINDER_FAMILIES).optional().describe("Only this signal family (frustration is under emotion)"),
117
118
  cursor: z.string().min(1).max(4096).optional().describe("next_cursor from the previous page, verbatim")
118
119
  });
@@ -150,7 +151,7 @@ var ProblemSchema = z.object({
150
151
  conversations: boolFlag().describe("Legacy alias of --traces"),
151
152
  feedback: boolFlag().describe("Feedback history page"),
152
153
  full: boolFlag().describe("Complete dossier in agent output (default is a compact dossier)"),
153
- limit: z.number().min(1).max(50).optional().describe("Page size for a sub-resource page"),
154
+ limit: z.number().int().min(1).max(50).optional().describe("Page size for a sub-resource page"),
154
155
  cursor: z.string().optional().describe("next_cursor from the previous page, verbatim"),
155
156
  family: z.enum(PROBLEM_FAMILIES).optional().describe("With --traces: only this signal family"),
156
157
  door: z.enum(PROBLEM_DOORS).optional().describe("With --traces: only this attribution door")
@@ -180,8 +181,8 @@ var SignalSchema = z.object({
180
181
  id: z.string().min(1).max(255).describe("Custom signal id"),
181
182
  detections: boolFlag().describe("List recent hits instead of the summary"),
182
183
  days_back: daysBackFlag(),
183
- limit: z.number().min(1).max(20).optional().describe("Hits page size (server default 10)"),
184
- offset: z.number().min(0).max(1e4).optional().describe("Number of hits to skip")
184
+ limit: z.number().int().min(1).max(20).optional().describe("Hits page size (server default 10)"),
185
+ offset: z.number().int().min(0).max(1e4).optional().describe("Number of hits to skip")
185
186
  });
186
187
  var SIGNAL_LABELS = ["fits", "does_not_fit"];
187
188
  var SignalLabelSchema = z.object({
@@ -251,8 +252,8 @@ var EMOTION_FAMILIES = [
251
252
  ];
252
253
  var EmotionsSchema = z.object({
253
254
  days_back: daysBackFlag(7),
254
- limit: z.number().min(1).max(20).default(10).optional().describe("Maximum detections to return"),
255
- offset: z.number().min(0).max(1e4).optional().describe("Number of detections to skip"),
255
+ limit: z.number().int().min(1).max(20).default(10).optional().describe("Maximum detections to return"),
256
+ offset: z.number().int().min(0).max(1e4).optional().describe("Number of detections to skip"),
256
257
  family: z.enum(EMOTION_FAMILIES).optional().describe("Only this family in the detections list (summary covers all)"),
257
258
  user_id: z.string().min(1).max(256).optional().describe("Scope everything to one end user"),
258
259
  conversation_id: z.string().min(1).max(256).optional().describe("Scope everything to one trace ID"),
@@ -260,8 +261,8 @@ var EmotionsSchema = z.object({
260
261
  });
261
262
  var HallucinationsSchema = z.object({
262
263
  days_back: daysBackFlag(7),
263
- limit: z.number().min(1).max(20).default(10).optional().describe("Maximum detections to return"),
264
- offset: z.number().min(0).max(1e4).optional().describe("Number of detections to skip"),
264
+ limit: z.number().int().min(1).max(20).default(10).optional().describe("Maximum detections to return"),
265
+ offset: z.number().int().min(0).max(1e4).optional().describe("Number of detections to skip"),
265
266
  conversation_id: z.string().max(200).optional().describe("Scope summary and list to one trace ID"),
266
267
  kind: z.enum(["contradicted", "verified"]).optional().describe("Only this kind in the detections list")
267
268
  });
@@ -288,8 +289,8 @@ var LAZINESS_FAMILIES = [
288
289
  ];
289
290
  var LazinessSchema = z.object({
290
291
  days_back: daysBackFlag(7),
291
- limit: z.number().min(1).max(50).default(10).optional().describe("Maximum detections to return"),
292
- offset: z.number().min(0).max(1e4).optional().describe("Number of detections to skip"),
292
+ limit: z.number().int().min(1).max(50).default(10).optional().describe("Maximum detections to return"),
293
+ offset: z.number().int().min(0).max(1e4).optional().describe("Number of detections to skip"),
293
294
  conversation_id: z.string().max(200).optional().describe("One trace's detections"),
294
295
  family: z.enum(LAZINESS_FAMILIES).optional().describe("Only this laziness family")
295
296
  });
@@ -298,30 +299,32 @@ var StepScoresSchema = z.object({
298
299
  });
299
300
  var TAIL_SIGNALS = ["traces", "conversations", "emotions", "all"];
300
301
  var TailSchema = z.object({
301
- interval: z.number().min(5).max(3600).default(15).optional().describe("Seconds between polls"),
302
+ interval: z.number().int().min(5).max(3600).default(15).optional().describe("Seconds between polls"),
302
303
  signal: z.enum(TAIL_SIGNALS).default("traces").optional().describe("What to tail (conversations = legacy alias of traces)"),
303
304
  once: boolFlag().describe("Poll once, then exit (baseline page)"),
304
- limit: z.number().min(1).max(50).default(20).optional().describe("Page size per poll"),
305
- max_events: z.number().min(1).max(1e5).optional().describe("Stop after this many stdout records"),
305
+ limit: z.number().int().min(1).max(50).default(20).optional().describe("Page size per poll"),
306
+ max_events: z.number().int().min(1).max(1e5).optional().describe("Stop after this many stdout records"),
306
307
  full_scan: boolFlag().describe("Emotions: scan the whole window, not the top-scoring prefix (many more requests)")
307
308
  });
308
309
  var ToolFailureDetailSchema = z.object({
309
310
  tool_name: z.string().describe("Tool name (from moda detections tools)"),
310
311
  subtype: z.string().optional().describe("Only this failure subtype"),
311
312
  days_back: daysBackFlag(7),
312
- limit: z.number().min(1).max(20).default(5).optional().describe("Maximum examples to return"),
313
- offset: z.number().min(0).default(0).optional().describe("Number of examples to skip"),
313
+ limit: z.number().int().min(1).max(20).default(5).optional().describe("Maximum examples to return"),
314
+ offset: z.number().int().min(0).default(0).optional().describe("Number of examples to skip"),
314
315
  include_window: boolFlag().describe("Embed each example's surrounding messages (on by default)"),
315
316
  compact: boolFlag().describe("Drop each example's embedded messages (same as --include-window=false)"),
316
- window: z.number().min(1).max(5).default(1).optional().describe("Messages on each side of the anchor")
317
+ window: z.number().int().min(1).max(5).default(1).optional().describe("Messages on each side of the anchor")
317
318
  });
318
319
  var AuditSchema = z.object({
319
320
  id: z.string().min(1).describe("Trace ID or OTLP trace_id"),
320
321
  kind: z.enum(["auto", "trace", "conversation"]).default("auto").optional().describe("How to read the id (auto tries trace, then conversation)"),
321
322
  include_raw: boolFlag().describe("Include raw span rows"),
322
323
  include_bodies: boolFlag().describe("Keep prompt/response bodies (omitted by default; long strings truncated)"),
323
- limit: z.number().min(1).max(1000).default(200).optional().describe("Ingest rows to read; warns when capped"),
324
+ limit: z.number().int().min(1).max(1000).default(200).optional().describe("Ingest rows to read; warns when capped"),
324
325
  cursor: z.string().min(1).max(512).optional().describe("next_cursor from the previous page"),
326
+ span_offset: z.number().int().min(0).max(1e5).optional().describe("Skip this many spans of the page (continues a page cut to the agent output limit)"),
327
+ page_bytes: z.number().int().min(1).max(1e7).optional().describe("Server page size in bytes (keeps a --span-offset continuation on the same page)"),
325
328
  ids_from: z.string().min(1).optional().describe("Read several trace ids, one per line, from a file or - for stdin (batch mode, up to 25)")
326
329
  });
327
330
  var TIME_RANGES = ["all", "1h", "3d", "7d", "24h", "30d", "90d"];
@@ -334,9 +337,9 @@ var SearchSchema = z.object({
334
337
  time_range: z.enum(TIME_RANGES).default("all").optional().describe("Time window"),
335
338
  since: isoBoundFlag().describe("Absolute UTC start, inclusive (ISO date or datetime); intersected with --time-range"),
336
339
  until: isoBoundFlag().describe("Absolute UTC end, inclusive (ISO date or datetime; a date covers that whole day)"),
337
- limit: z.number().min(1).max(100).default(20).optional().describe("Maximum results to return"),
340
+ limit: z.number().int().min(1).max(100).default(20).optional().describe("Maximum results to return"),
338
341
  include_tool_io: boolFlag().describe("Also search tool inputs and outputs"),
339
- offset: z.number().min(0).max(1e4).optional().describe("Skip results (pages the trace-level fallback only)")
342
+ offset: z.number().int().min(0).max(1e4).optional().describe("Skip results (pages the trace-level fallback only)")
340
343
  });
341
344
  var InvestigateSchema = z.object({
342
345
  days_back: daysBackFlag(7),
@@ -500,19 +503,58 @@ function dedicatedCommandHint(category, rawCategory) {
500
503
  return "Feedback is read by the Moda team but does not change the problem. To act on it directly, use " + "`moda problems feedback <problem_id> --action=flag_attribution --attribution-id=<uuid> --reason=TEXT` (a trace wrongly " + "attributed to a problem), `moda review <kind> <target> --reason=TEXT` (a detection that should not " + "have fired), or `moda fix dismiss <fix_id> --reason=TEXT` (a fix aimed at the wrong problem).";
501
504
  }
502
505
 
506
+ // src/dry-run.ts
507
+ function plannedEndpoint(plane, path) {
508
+ return plane === "data" ? `/api/v1/data${path}` : `/api${path}`;
509
+ }
510
+ function realRunCommand(context) {
511
+ const invocation = context.invocation ?? {
512
+ command: context.command,
513
+ positionals: context.positionals,
514
+ flags: context.rawFlags,
515
+ ...context.bareFlags ? { bareFlags: context.bareFlags } : {}
516
+ };
517
+ const flags = Object.fromEntries(Object.entries(invocation.flags).filter(([key]) => key.replace(/_/g, "-") !== "dry-run"));
518
+ return continuationCommand({ ...invocation, flags }, {});
519
+ }
520
+ function writeDryRun(context, request) {
521
+ const endpoint = plannedEndpoint(request.plane, request.path);
522
+ const command = realRunCommand(context);
523
+ context.output.writeData({
524
+ dryRun: true,
525
+ planned: {
526
+ method: request.method,
527
+ endpoint,
528
+ ...request.body !== undefined ? { body: request.body } : {},
529
+ ...request.generatedFields?.length ? { generated_at_send: request.generatedFields } : {}
530
+ }
531
+ }, {
532
+ summary: { text: `Dry run: would ${request.method} ${endpoint}. Nothing was sent.`, confidence: "high" },
533
+ nextCommands: [{
534
+ command,
535
+ purpose: "Send this write for real (the same command without --dry-run).",
536
+ mutability: "write",
537
+ requires_approval: true
538
+ }]
539
+ });
540
+ }
541
+
503
542
  // src/command-flags.ts
504
543
  import { z as z3 } from "zod";
544
+ var DRY_RUN = z3.object({
545
+ dry_run: z3.boolean().optional().describe("Validate and print the exact request (method, path, body); send nothing")
546
+ });
505
547
  var TRACE_ID = { name: "conversation_id", key: "conversation_id", required: true };
506
548
  var PROBLEM_ID = { name: "problem_id", key: "id", required: true };
507
549
  var COMMAND_FLAG_SPECS = {
508
550
  overview: { schema: OverviewSchema, extra: z3.object({ raw: z3.boolean().optional().describe("Print the raw briefing data") }) },
509
551
  investigate: { schema: InvestigateSchema, handParsed: true },
510
552
  failures: { schema: FailuresSchema, handParsed: true },
511
- ask: { schema: AskSchema, handParsed: true, positionals: [{ name: "question", key: "question", required: true }] },
553
+ ask: { schema: AskSchema, handParsed: true, positionals: [{ name: "question", key: "question", required: true, variadic: true }] },
512
554
  clusters: { schema: ClustersSchema },
513
555
  "cluster-traces": { schema: ClusterConversationsSchema, positionals: [{ name: "node_id", key: "node_id", required: true }] },
514
556
  traces: { schema: ConversationsSchema },
515
- search: { schema: SearchSchema, positionals: [{ name: "query", key: "q", required: true }] },
557
+ search: { schema: SearchSchema, positionals: [{ name: "query", key: "q", required: true, variadic: true }] },
516
558
  "world-state": { schema: WorldStateSchema, positionals: [TRACE_ID] },
517
559
  context: {
518
560
  schema: ContextSchema,
@@ -529,14 +571,15 @@ var COMMAND_FLAG_SPECS = {
529
571
  },
530
572
  "problem-impact": { schema: ProblemImpactSchema, handParsed: true },
531
573
  problem: { schema: ProblemSchema, positionals: [PROBLEM_ID] },
532
- "problem-feedback": { schema: ProblemFeedbackSchema, handParsed: true, positionals: [PROBLEM_ID] },
574
+ "problem-feedback": { schema: ProblemFeedbackSchema, extra: DRY_RUN, handParsed: true, positionals: [PROBLEM_ID] },
533
575
  "problem-reopen": { schema: ProblemReopenSchema, handParsed: true, positionals: [PROBLEM_ID] },
534
576
  "problem-linear": { schema: ProblemLinearSchema, handParsed: true, positionals: [PROBLEM_ID] },
535
- "problem-linear-file": { schema: ProblemLinearFileSchema, handParsed: true, positionals: [PROBLEM_ID] },
577
+ "problem-linear-file": { schema: ProblemLinearFileSchema, extra: DRY_RUN, handParsed: true, positionals: [PROBLEM_ID] },
536
578
  "detection-reviews": { schema: DetectionReviewsSchema, handParsed: true, positionals: [TRACE_ID] },
537
- "detection-review": { schema: DetectionReviewSchema, handParsed: true, positionals: [PROBLEM_ID] },
579
+ "detection-review": { schema: DetectionReviewSchema, extra: DRY_RUN, handParsed: true, positionals: [PROBLEM_ID] },
538
580
  "false-positive": {
539
581
  schema: FalsePositiveSchema,
582
+ extra: DRY_RUN,
540
583
  handParsed: true,
541
584
  positionals: [
542
585
  { name: "kind", key: "kind", required: true },
@@ -551,7 +594,7 @@ var COMMAND_FLAG_SPECS = {
551
594
  signals: { schema: SignalsListSchema, handParsed: true },
552
595
  signal: { schema: SignalSchema, positionals: [{ name: "signal_id", key: "id", required: true }] },
553
596
  "trace-signals": { schema: TraceSignalsSchema, handParsed: true, positionals: [TRACE_ID] },
554
- "signal-label": { schema: SignalLabelSchema, handParsed: true, positionals: [{ name: "signal_id", key: "id", required: true }] },
597
+ "signal-label": { schema: SignalLabelSchema, extra: DRY_RUN, handParsed: true, positionals: [{ name: "signal_id", key: "id", required: true }] },
555
598
  emotions: { schema: EmotionsSchema },
556
599
  laziness: { schema: LazinessSchema },
557
600
  hallucinations: { schema: HallucinationsSchema },
@@ -559,6 +602,7 @@ var COMMAND_FLAG_SPECS = {
559
602
  tail: { schema: TailSchema },
560
603
  feedback: {
561
604
  schema: FeedbackSchema,
605
+ extra: DRY_RUN,
562
606
  handParsed: true,
563
607
  idRefFlags: true,
564
608
  positionals: [{ name: "note", key: "note", required: true, variadic: true, alsoFlag: true }]
@@ -878,7 +922,8 @@ function assertFlags(command, flags, allowed) {
878
922
  "stream",
879
923
  "no-stream",
880
924
  "tui",
881
- "no-tui"
925
+ "no-tui",
926
+ "pretty"
882
927
  ];
883
928
  const known = new Set([...allowed, ...globals]);
884
929
  const unknown = Object.keys(flags).filter((flag) => !known.has(flag));
@@ -939,10 +984,7 @@ var LLM_WRITE_TIMEOUT_MS = 180000;
939
984
  async function send(context, plane, method, endpoint, body, options = {}) {
940
985
  const init = { method, ...body !== undefined ? { body: JSON.stringify(body) } : {} };
941
986
  if (method !== "GET" && context.dryRun) {
942
- context.output.writeData({
943
- dryRun: true,
944
- planned: { method, endpoint: plane === "data" ? `/api/v1/data${endpoint}` : `/api${endpoint}`, ...body !== undefined ? { body } : {} }
945
- }, { summary: { text: `Dry run: would ${method} ${endpoint}. Nothing was sent.`, confidence: "high" } });
987
+ writeDryRun(context, { plane, method, path: endpoint, ...body !== undefined ? { body } : {} });
946
988
  return;
947
989
  }
948
990
  const requestOptions = method === "GET" ? {} : { retries: 0, ...options.slow ? { timeoutMs: LLM_WRITE_TIMEOUT_MS } : {} };
@@ -1297,4 +1339,4 @@ function unknownSignalsSubcommandError(sub, args = []) {
1297
1339
  ${SIGNAL_USAGE}`);
1298
1340
  }
1299
1341
 
1300
- export { ProblemsRemainderSchema, UUID_RE, ProblemImpactSchema, PROBLEM_FEEDBACK_ACTIONS, ProblemFeedbackSchema, ProblemLinearFileSchema, SignalLabelSchema, DETECTION_VERDICTS, DetectionReviewSchema, FALSE_POSITIVE_KINDS, FalsePositiveSchema, EMOTION_FAMILIES, LAZINESS_FAMILIES, StepScoresSchema, AuditSchema, FEEDBACK_USAGE, isFeedbackRefFlag, buildFeedbackRequest, COMMAND_FLAG_SPECS, flagSpecFor, kebabFlag, schemaShape, specFlagKeys, specFlagNames, describeSpecFlags, closestMatches, renderFlagHelp, subcommandHelpFlags, manifestFlagFields, requireTenant, assertFlags, assertPositionals, runUsersCommand, runUserCommand, runProblemReopenCommand, runSignalsManagementCommand, SIGNALS_MANAGEMENT_SUBCOMMANDS, unknownSignalsSubcommandError };
1342
+ export { ProblemsRemainderSchema, UUID_RE, ProblemImpactSchema, PROBLEM_FEEDBACK_ACTIONS, ProblemFeedbackSchema, ProblemLinearFileSchema, SignalLabelSchema, DETECTION_VERDICTS, DetectionReviewSchema, FALSE_POSITIVE_KINDS, FalsePositiveSchema, EMOTION_FAMILIES, LAZINESS_FAMILIES, StepScoresSchema, AuditSchema, FEEDBACK_USAGE, isFeedbackRefFlag, buildFeedbackRequest, writeDryRun, COMMAND_FLAG_SPECS, flagSpecFor, kebabFlag, schemaShape, describeField, specFlagKeys, specFlagNames, describeSpecFlags, closestMatches, usageLine, renderFlagHelp, subcommandHelpFlags, manifestFlagFields, requireTenant, assertFlags, assertPositionals, runUsersCommand, runUserCommand, runProblemReopenCommand, runSignalsManagementCommand, SIGNALS_MANAGEMENT_SUBCOMMANDS, unknownSignalsSubcommandError };
@@ -3,7 +3,7 @@ import {
3
3
  recordApiRequest,
4
4
  resolveApiKey,
5
5
  resolveModaBaseUrl
6
- } from "./cli-dve50x7p.js";
6
+ } from "./cli-sqsjd08w.js";
7
7
 
8
8
  // src/api-client.ts
9
9
  var REQUEST_TIMEOUT_MS = 30000;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  fetchApiKeyProbe
3
- } from "./cli-9hc5bg2r.js";
3
+ } from "./cli-1mbb0ct0.js";
4
4
  import {
5
5
  authFetch,
6
6
  getCachedLoginContext
7
- } from "./cli-0wr3483h.js";
7
+ } from "./cli-q6f6vrrr.js";
8
8
  import {
9
9
  CliAccessError,
10
10
  CliInputError,
@@ -18,7 +18,7 @@ import {
18
18
  resolveTenantIdFromActiveProfile,
19
19
  saveCliConfig,
20
20
  writeSecretJsonFile
21
- } from "./cli-dve50x7p.js";
21
+ } from "./cli-sqsjd08w.js";
22
22
 
23
23
  // src/init/tenant.ts
24
24
  import { randomUUID } from "node:crypto";
@@ -8,7 +8,7 @@ import {
8
8
  saveProfileConfig,
9
9
  secretFilePathFromRef,
10
10
  writeSecretJsonFile
11
- } from "./cli-dve50x7p.js";
11
+ } from "./cli-sqsjd08w.js";
12
12
  import {
13
13
  __require
14
14
  } from "./cli-0v6na3yp.js";