@moda-ai/cli 1.55.102 → 1.55.104
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.
- package/README.md +37 -0
- package/dist/{agent-wa8tx02f.js → agent-8z1k639g.js} +5 -5
- package/dist/{change-impact-3n23nhd8.js → change-impact-tda0d76m.js} +3 -3
- package/dist/{cli-abfcqf4p.js → cli-25yzb3wd.js} +3 -3
- package/dist/{cli-92zfpz9f.js → cli-2qcedyw0.js} +5 -5
- package/dist/{cli-6ga6kmdp.js → cli-37z2f5wa.js} +2 -2
- package/dist/{cli-1sdz17sn.js → cli-82fxwm0m.js} +11 -11
- package/dist/{cli-9kxz65fe.js → cli-ap7wfbnk.js} +1 -1
- package/dist/{cli-gcqpbes6.js → cli-ev54s4wy.js} +4 -4
- package/dist/{cli-dxajrq9h.js → cli-n9ng8mym.js} +2 -0
- package/dist/{cli-f1sx9dsa.js → cli-n9wt2k8t.js} +1 -1
- package/dist/{cli-4t3zznhh.js → cli-pae8jxe9.js} +2 -2
- package/dist/cli.js +55 -33
- package/dist/{doctor-ec2cqgnv.js → doctor-knvvpcjg.js} +4 -4
- package/dist/{harness-jka07f99.js → harness-d92py0t2.js} +3 -3
- package/dist/{harness-github-actions-h9b973z0.js → harness-github-actions-1x0bfww6.js} +3 -3
- package/dist/{index-0na4ydkc.js → index-2z6m9gq4.js} +3 -3
- package/dist/{index-zp7y6mft.js → index-8v6zbm1m.js} +4 -4
- package/dist/{index-wdttmhsg.js → index-dmhrtv9c.js} +6 -6
- package/dist/{production-intelligence-3fdpsxce.js → production-intelligence-8w7an97c.js} +2 -2
- package/dist/{profile-commands-tav5q639.js → profile-commands-zgq8dja0.js} +1 -1
- package/dist/{prompt-attribution-armk5gqt.js → prompt-attribution-sftw2s9g.js} +3 -3
- package/dist/prompt-source-mcp.js +3 -3
- package/dist/{prompts-x3vdeax6.js → prompts-mtptqs7c.js} +3 -3
- package/dist/{registry-4mhr7xsd.js → registry-w50mdzsb.js} +2 -2
- package/dist/{skills-9c1xvp2s.js → skills-0kkps03j.js} +3 -3
- package/dist/{sync-skzdw9fb.js → sync-q5n028df.js} +5 -5
- package/package.json +1 -1
- package/skills/integration/index.json +2 -2
- package/skills/moda-cli/SKILL.md +1 -1
- package/skills/moda-cli/references/commands.md +1 -1
- package/skills/moda-cli/references/dashboard-parity.md +1 -1
- package/skills/moda-cli/references/output-protocol.md +1 -1
package/README.md
CHANGED
|
@@ -512,3 +512,40 @@ with migration guidance. Read problem evidence with `moda problems get <id>
|
|
|
512
512
|
--evidence`, make changes in your project, and use `moda prompts status`,
|
|
513
513
|
`moda prompts diff`, and `moda prompts sync --dry-run` to review prompt versions.
|
|
514
514
|
The retired names stay out of help and the manifest.
|
|
515
|
+
|
|
516
|
+
### Server warnings for legacy installations
|
|
517
|
+
|
|
518
|
+
Current buffered API requests send `x-moda-cli-version`; their output is unchanged.
|
|
519
|
+
The Data API can prepend an upgrade line to an existing `warnings` array for an
|
|
520
|
+
unversioned request whose authenticated tenant/key has recently reported an old
|
|
521
|
+
CLI. The line describes an observed install on the key, not the current request.
|
|
522
|
+
|
|
523
|
+
This uses two nullable fields on the existing API-key row, not ClickHouse reads.
|
|
524
|
+
There is no historical backfill: the first new legacy telemetry submission warms
|
|
525
|
+
that key; subsequent reads can show the line, with up to 60 seconds of auth-cache
|
|
526
|
+
delay on other instances. Observations expire after seven days. Current telemetry
|
|
527
|
+
never clears evidence of another old install on the same key. Missing, invalid,
|
|
528
|
+
future or expired observations are unknown and produce no hint. Platform keys
|
|
529
|
+
are excluded. Version-header requests and `x-moda-cli-update-check: 0` suppress
|
|
530
|
+
it. Existing telemetry/update opt-outs are unchanged; old binaries cannot transmit
|
|
531
|
+
new opt-out headers, so a prior observation expires normally if telemetry stops.
|
|
532
|
+
No API keys or tenant content appear in the line or its failure logs.
|
|
533
|
+
|
|
534
|
+
Frozen 1.34.1 forwards this warning through JSON and agent warnings for
|
|
535
|
+
`frustrations`, `emotions`, `search`, `hallucinations`, `problem-impact`,
|
|
536
|
+
`conversations` and `context`. **Overview is best-effort:** its frozen wrapper
|
|
537
|
+
nests the warning under `rawOverview`, does not promote it to envelope warnings,
|
|
538
|
+
and can lose it under the 200 KB agent data limit. Response metrics, useful data
|
|
539
|
+
and status codes are never changed to force delivery.
|
|
540
|
+
|
|
541
|
+
The offline boundary regression asserts that limitation as well as the seven
|
|
542
|
+
positive cases. Build source `aff167ef1f` separately without modifying it, then run:
|
|
543
|
+
|
|
544
|
+
```bash
|
|
545
|
+
python3 scripts/verify-legacy-upgrade-warning.py \
|
|
546
|
+
--frozen-cli /path/to/frozen/apps/moda-cli/dist/cli.js \
|
|
547
|
+
--current-cli "$PWD/dist/cli.js"
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
Both builds use temporary local profiles, a loopback-only transport guard and
|
|
551
|
+
telemetry disabled. No customer key, production request or paid evaluation is needed.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildDoctorReport
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-25yzb3wd.js";
|
|
4
4
|
import"./cli-qwnkv4jy.js";
|
|
5
|
-
import"./cli-
|
|
5
|
+
import"./cli-2qcedyw0.js";
|
|
6
6
|
import"./cli-mm48br00.js";
|
|
7
7
|
import"./cli-764m5azg.js";
|
|
8
8
|
import {
|
|
@@ -17,9 +17,9 @@ import {
|
|
|
17
17
|
validateHarnessReport
|
|
18
18
|
} from "./cli-krm4w2v9.js";
|
|
19
19
|
import"./cli-13zdcv4w.js";
|
|
20
|
-
import"./cli-
|
|
20
|
+
import"./cli-37z2f5wa.js";
|
|
21
21
|
import"./cli-e0kbye4s.js";
|
|
22
|
-
import"./cli-
|
|
22
|
+
import"./cli-n9ng8mym.js";
|
|
23
23
|
import {
|
|
24
24
|
resolveApiKey,
|
|
25
25
|
resolveIngestUrl,
|
|
@@ -96,7 +96,7 @@ async function buildAgentContext(context) {
|
|
|
96
96
|
const graph = readHarnessGraphIfPresent(context.cwd);
|
|
97
97
|
const reportState = readHarnessReportState(context.cwd);
|
|
98
98
|
const syncState = readHarnessSyncState(context.cwd);
|
|
99
|
-
const harness = graph ? await import("./harness-
|
|
99
|
+
const harness = graph ? await import("./harness-d92py0t2.js") : undefined;
|
|
100
100
|
const topFindings = doctor.checks.filter((check) => check.status === "fail" || check.status === "warning").slice(0, 12).map(checkToFinding);
|
|
101
101
|
const evidenceRefs = [
|
|
102
102
|
...doctor.checks.map(checkToEvidenceRef),
|
|
@@ -11,16 +11,16 @@ import {
|
|
|
11
11
|
resolvedSymbol,
|
|
12
12
|
returnExpressions,
|
|
13
13
|
valueDeclaration
|
|
14
|
-
} from "./cli-
|
|
14
|
+
} from "./cli-82fxwm0m.js";
|
|
15
15
|
import"./cli-k0vxtzxb.js";
|
|
16
16
|
import"./cli-97fnztpy.js";
|
|
17
17
|
import {
|
|
18
18
|
detectBoundRuntimeClasses
|
|
19
19
|
} from "./cli-krm4w2v9.js";
|
|
20
20
|
import"./cli-13zdcv4w.js";
|
|
21
|
-
import"./cli-
|
|
21
|
+
import"./cli-37z2f5wa.js";
|
|
22
22
|
import"./cli-e0kbye4s.js";
|
|
23
|
-
import"./cli-
|
|
23
|
+
import"./cli-n9ng8mym.js";
|
|
24
24
|
import"./cli-1nd4339b.js";
|
|
25
25
|
import"./cli-k4tqwah4.js";
|
|
26
26
|
import {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./cli-qwnkv4jy.js";
|
|
5
5
|
import {
|
|
6
6
|
inspectPromptManifest
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-2qcedyw0.js";
|
|
8
8
|
import {
|
|
9
9
|
readHarnessSyncState,
|
|
10
10
|
renderDoctorHuman,
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "./cli-k0vxtzxb.js";
|
|
13
13
|
import {
|
|
14
14
|
callDataAPI
|
|
15
|
-
} from "./cli-
|
|
15
|
+
} from "./cli-n9ng8mym.js";
|
|
16
16
|
import {
|
|
17
17
|
describeModaBaseUrl,
|
|
18
18
|
ensureSecretFilePermissions,
|
|
@@ -395,7 +395,7 @@ async function harnessCurrentCheck(cwd, manifestPath, manifestExists, tenantId)
|
|
|
395
395
|
};
|
|
396
396
|
}
|
|
397
397
|
try {
|
|
398
|
-
const { scanHarness } = await import("./harness-
|
|
398
|
+
const { scanHarness } = await import("./harness-d92py0t2.js");
|
|
399
399
|
const current = scanHarness({
|
|
400
400
|
rootDir: cwd,
|
|
401
401
|
scannerVersion: "doctor",
|
|
@@ -11,10 +11,10 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
assertFlags,
|
|
13
13
|
assertPositionals
|
|
14
|
-
} from "./cli-
|
|
14
|
+
} from "./cli-37z2f5wa.js";
|
|
15
15
|
import {
|
|
16
16
|
callControlAPI
|
|
17
|
-
} from "./cli-
|
|
17
|
+
} from "./cli-n9ng8mym.js";
|
|
18
18
|
import {
|
|
19
19
|
CliInputError
|
|
20
20
|
} from "./cli-k4tqwah4.js";
|
|
@@ -270,7 +270,7 @@ async function runPromptSyncExclusive(flags, profileOptions, options) {
|
|
|
270
270
|
const analyzedDefinitions = new Map;
|
|
271
271
|
if (flags["no-analyze"] !== "true") {
|
|
272
272
|
options.onProgress?.("Analyzing prompt sources before sync.");
|
|
273
|
-
const { analyzeHarnessPrompts } = await import("./harness-
|
|
273
|
+
const { analyzeHarnessPrompts } = await import("./harness-d92py0t2.js");
|
|
274
274
|
const result = await analyzeHarnessPrompts({
|
|
275
275
|
rootDir: process.cwd(),
|
|
276
276
|
existing: established.flatMap((prompt) => prompt.sourceDefinition ? [prompt.sourceDefinition.source] : []),
|
|
@@ -298,7 +298,7 @@ async function runPromptSyncExclusive(flags, profileOptions, options) {
|
|
|
298
298
|
const mergedSources = mergePromptSources(manifest.sources, extraSources);
|
|
299
299
|
const manifestUpdate = stableJson(mergedSources) === stableJson(mergePromptSources(manifest.sources, [])) ? undefined : $stringify({ version: 2, prompt_paths: manifest.promptPaths, sources: mergedSources });
|
|
300
300
|
const prompts = await discoverPrompts(extraSources);
|
|
301
|
-
const { checkPromptAttribution } = await import("./prompt-attribution-
|
|
301
|
+
const { checkPromptAttribution } = await import("./prompt-attribution-sftw2s9g.js");
|
|
302
302
|
const attribution = checkPromptAttribution(process.cwd(), prompts.map((prompt) => prompt.key));
|
|
303
303
|
const brokenAttribution = attribution.references.filter((reference) => reference.status === "missing");
|
|
304
304
|
if (brokenAttribution.length) {
|
|
@@ -604,7 +604,7 @@ async function migratePromptManifest(options = {}) {
|
|
|
604
604
|
let addedSources = [];
|
|
605
605
|
let pendingSources = [];
|
|
606
606
|
if (options.discover) {
|
|
607
|
-
const { analyzeHarnessPrompts } = await import("./harness-
|
|
607
|
+
const { analyzeHarnessPrompts } = await import("./harness-d92py0t2.js");
|
|
608
608
|
const result = await analyzeHarnessPrompts({
|
|
609
609
|
rootDir: root,
|
|
610
610
|
existing: manifest.sources,
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
ApiError,
|
|
3
3
|
callControlAPI,
|
|
4
4
|
callDataAPI
|
|
5
|
-
} from "./cli-
|
|
5
|
+
} from "./cli-n9ng8mym.js";
|
|
6
6
|
import {
|
|
7
7
|
continuationCommand,
|
|
8
8
|
embeddedTenantIdFromApiKey,
|
|
@@ -429,7 +429,7 @@ var TOOL_CATALOG_SORTS = ["calls", "failure_rate", "failures", "traces", "last_s
|
|
|
429
429
|
var TOOL_EFFECT_DIRECTIONS = ["read", "write", "send", "spawn", "compute", "unknown"];
|
|
430
430
|
var ToolCatalogSchema = z.object({
|
|
431
431
|
days_back: daysBackFlag(7),
|
|
432
|
-
sort: z.enum(TOOL_CATALOG_SORTS).default("calls").optional().describe("Sort
|
|
432
|
+
sort: z.enum(TOOL_CATALOG_SORTS).default("calls").optional().describe("Sort descending: failures = recorded failed receipts (failed_calls), not classified failure events. For classified failure_count ranking use moda detections tools. traces = traces that called the tool"),
|
|
433
433
|
search: z.string().min(1).max(200).optional().describe("Only tools whose name contains this text"),
|
|
434
434
|
direction: z.enum(TOOL_EFFECT_DIRECTIONS).optional().describe("Only tools with this effect direction"),
|
|
435
435
|
limit: z.number().int().min(1).max(200).default(25).optional().describe("Maximum tools to return"),
|
|
@@ -44,11 +44,11 @@ import {
|
|
|
44
44
|
assertFlags,
|
|
45
45
|
assertPositionals,
|
|
46
46
|
requireTenant
|
|
47
|
-
} from "./cli-
|
|
47
|
+
} from "./cli-37z2f5wa.js";
|
|
48
48
|
import {
|
|
49
49
|
ApiError,
|
|
50
50
|
callControlAPI
|
|
51
|
-
} from "./cli-
|
|
51
|
+
} from "./cli-n9ng8mym.js";
|
|
52
52
|
import {
|
|
53
53
|
EXIT_DEGRADED,
|
|
54
54
|
embeddedTenantIdFromApiKey,
|
|
@@ -21010,7 +21010,7 @@ async function runHarnessCommand(context) {
|
|
|
21010
21010
|
throw new CliInputError(`'moda harness ${subcommand}' has no dry-run mode, so nothing was sent.`, `Remove --dry-run to run it for real. Harness commands with a real dry-run: ${[...HARNESS_DRY_RUN_SUBCOMMANDS].join(", ")}.`);
|
|
21011
21011
|
}
|
|
21012
21012
|
if (subcommand === "skeleton" || subcommand === "skeleton-diff") {
|
|
21013
|
-
const { runSkeletonCommand } = await import("./cli-
|
|
21013
|
+
const { runSkeletonCommand } = await import("./cli-ev54s4wy.js");
|
|
21014
21014
|
return runSkeletonCommand(context);
|
|
21015
21015
|
}
|
|
21016
21016
|
if (subcommand === "register")
|
|
@@ -21022,7 +21022,7 @@ async function runHarnessCommand(context) {
|
|
|
21022
21022
|
assertPositionals("harness impact", context.positionals, 1, "moda harness impact --from=<commit> --to=<commit>");
|
|
21023
21023
|
if (!context.flags.from)
|
|
21024
21024
|
throw new CliInputError("harness impact requires --from=<old-commit>.");
|
|
21025
|
-
const { localChangeImpact, readRecordedImpactCalls } = await import("./change-impact-
|
|
21025
|
+
const { localChangeImpact, readRecordedImpactCalls } = await import("./change-impact-tda0d76m.js");
|
|
21026
21026
|
const result = localChangeImpact({
|
|
21027
21027
|
checkout: resolve10(context.cwd, context.flags.path ?? "."),
|
|
21028
21028
|
from: context.flags.from,
|
|
@@ -21294,7 +21294,7 @@ async function runHarnessCommand(context) {
|
|
|
21294
21294
|
throw new CliInputError("Focused remote prompt analysis is not supported yet.", "Use local --analyst=claude|codex|cursor|local-scan, or drop --concern for a full remote report.");
|
|
21295
21295
|
}
|
|
21296
21296
|
if (context.flags["github-actions"] === "true") {
|
|
21297
|
-
const { runGithubActionsAnalyze } = await import("./harness-github-actions-
|
|
21297
|
+
const { runGithubActionsAnalyze } = await import("./harness-github-actions-1x0bfww6.js");
|
|
21298
21298
|
const result = await runGithubActionsAnalyze(rootDir, {
|
|
21299
21299
|
writeReport: (report2) => {
|
|
21300
21300
|
const normalized = normalizeHarnessReport(report2);
|
|
@@ -21445,8 +21445,8 @@ async function runHarnessCommand(context) {
|
|
|
21445
21445
|
}
|
|
21446
21446
|
const { artifacts, unknowns, canonicalAgentIdentities } = deterministicGraphItems(rootDir, promote === "all" ? undefined : promote);
|
|
21447
21447
|
tagComponentStatus({ runtimeAgents: [], artifacts }, rootDir);
|
|
21448
|
-
const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-
|
|
21449
|
-
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-
|
|
21448
|
+
const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-2z6m9gq4.js");
|
|
21449
|
+
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-8v6zbm1m.js");
|
|
21450
21450
|
let components = { runtimeAgents: [], artifacts: [], warnings: [] };
|
|
21451
21451
|
if (promote === "all" || promote === "topology" || promote === "tools") {
|
|
21452
21452
|
const { result, ctx } = extractHarnessWithContext2(rootDir);
|
|
@@ -21518,8 +21518,8 @@ async function runHarnessCommand(context) {
|
|
|
21518
21518
|
}
|
|
21519
21519
|
case "extract": {
|
|
21520
21520
|
writeHumanProgress(context, "Harness extract: tracing model call sites (no LLM, no network)...");
|
|
21521
|
-
const { extractHarnessWithContext: extractHarnessWithContext2, serializeExtractResult } = await import("./index-
|
|
21522
|
-
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-
|
|
21521
|
+
const { extractHarnessWithContext: extractHarnessWithContext2, serializeExtractResult } = await import("./index-2z6m9gq4.js");
|
|
21522
|
+
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-8v6zbm1m.js");
|
|
21523
21523
|
const { result, ctx } = extractHarnessWithContext2(rootDir, { fresh: true });
|
|
21524
21524
|
const items = deterministicGraphItems(rootDir);
|
|
21525
21525
|
const artifacts = items.artifacts;
|
|
@@ -22426,8 +22426,8 @@ var CONCERN_PROMOTED_ARTIFACT_TYPES = {
|
|
|
22426
22426
|
evals: new Set(["model_config", "eval"])
|
|
22427
22427
|
};
|
|
22428
22428
|
async function deterministicFloorGraph(rootDir, options = {}) {
|
|
22429
|
-
const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-
|
|
22430
|
-
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-
|
|
22429
|
+
const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-2z6m9gq4.js");
|
|
22430
|
+
const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-8v6zbm1m.js");
|
|
22431
22431
|
const { result, ctx } = extractHarnessWithContext2(rootDir);
|
|
22432
22432
|
const items = deterministicGraphItems(rootDir);
|
|
22433
22433
|
const components = mergeEnumeratedComponents(items.artifacts, enumerateHarnessComponents(result, ctx));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
enumerateToolCatalog,
|
|
3
3
|
enumerateWorkflows
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-n9wt2k8t.js";
|
|
5
5
|
import {
|
|
6
6
|
require_out
|
|
7
7
|
} from "./cli-764m5azg.js";
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
unwrap,
|
|
35
35
|
valueDeclaration,
|
|
36
36
|
visit
|
|
37
|
-
} from "./cli-
|
|
37
|
+
} from "./cli-82fxwm0m.js";
|
|
38
38
|
import"./cli-k0vxtzxb.js";
|
|
39
39
|
import"./cli-97fnztpy.js";
|
|
40
40
|
import {
|
|
@@ -42,9 +42,9 @@ import {
|
|
|
42
42
|
isTestWorkerConfig
|
|
43
43
|
} from "./cli-krm4w2v9.js";
|
|
44
44
|
import"./cli-13zdcv4w.js";
|
|
45
|
-
import"./cli-
|
|
45
|
+
import"./cli-37z2f5wa.js";
|
|
46
46
|
import"./cli-e0kbye4s.js";
|
|
47
|
-
import"./cli-
|
|
47
|
+
import"./cli-n9ng8mym.js";
|
|
48
48
|
import {
|
|
49
49
|
EXIT_DEGRADED,
|
|
50
50
|
VERSION
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
VERSION,
|
|
2
3
|
apiKeyHeaders,
|
|
3
4
|
recordApiRequest,
|
|
4
5
|
resolveApiKey,
|
|
@@ -134,6 +135,7 @@ async function callModaAPI(url, options, profileOptions = {}, requestOptions = {
|
|
|
134
135
|
headers: {
|
|
135
136
|
...apiKeyHeaders(resolveApiKey(profileOptions) ?? "", profileOptions, url),
|
|
136
137
|
"Content-Type": "application/json",
|
|
138
|
+
"x-moda-cli-version": VERSION,
|
|
137
139
|
...options.headers ?? {},
|
|
138
140
|
...connectionClose ? { Connection: "close" } : {}
|
|
139
141
|
},
|
|
@@ -18,10 +18,10 @@ import {
|
|
|
18
18
|
assertFlags,
|
|
19
19
|
assertPositionals,
|
|
20
20
|
writeDryRun
|
|
21
|
-
} from "./cli-
|
|
21
|
+
} from "./cli-37z2f5wa.js";
|
|
22
22
|
import {
|
|
23
23
|
callControlAPI
|
|
24
|
-
} from "./cli-
|
|
24
|
+
} from "./cli-n9ng8mym.js";
|
|
25
25
|
import {
|
|
26
26
|
recordApiRequest,
|
|
27
27
|
resolveApiKey,
|
package/dist/cli.js
CHANGED
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
withSummaryCompare,
|
|
27
27
|
withToolFailureAnchors,
|
|
28
28
|
withoutDetectionWindows
|
|
29
|
-
} from "./cli-
|
|
29
|
+
} from "./cli-ap7wfbnk.js";
|
|
30
30
|
import {
|
|
31
31
|
createCommandContext
|
|
32
32
|
} from "./cli-13zdcv4w.js";
|
|
@@ -78,7 +78,7 @@ import {
|
|
|
78
78
|
unknownSignalsSubcommandError,
|
|
79
79
|
usageLine,
|
|
80
80
|
writeDryRun
|
|
81
|
-
} from "./cli-
|
|
81
|
+
} from "./cli-37z2f5wa.js";
|
|
82
82
|
import {
|
|
83
83
|
envOptOutSet,
|
|
84
84
|
envSwitchedOff,
|
|
@@ -89,7 +89,7 @@ import {
|
|
|
89
89
|
import {
|
|
90
90
|
ApiError,
|
|
91
91
|
callDataAPI
|
|
92
|
-
} from "./cli-
|
|
92
|
+
} from "./cli-n9ng8mym.js";
|
|
93
93
|
import {
|
|
94
94
|
AGENT_ERROR_CODES,
|
|
95
95
|
EXIT_AUTH_REQUIRED,
|
|
@@ -1319,7 +1319,7 @@ var CANONICAL_LEAVES = [
|
|
|
1319
1319
|
path: "detections tools",
|
|
1320
1320
|
args: "[<tool_name>]",
|
|
1321
1321
|
routes: ["tool-failures", "tool-failure-detail"],
|
|
1322
|
-
summary: "
|
|
1322
|
+
summary: "Classified failure events (failure_count): which tool fails most, or its failure examples. For recorded failed receipts, use moda tools list|get",
|
|
1323
1323
|
examples: ["moda detections tools --days-back=14", "moda detections tools <tool_name> --limit=3"]
|
|
1324
1324
|
},
|
|
1325
1325
|
{
|
|
@@ -1328,7 +1328,7 @@ var CANONICAL_LEAVES = [
|
|
|
1328
1328
|
path: "tools list",
|
|
1329
1329
|
args: "",
|
|
1330
1330
|
handler: "tool-catalog",
|
|
1331
|
-
summary: "
|
|
1331
|
+
summary: "Recorded tool receipts: calls, failed_calls, receipt success rate. For classified failure-event ranking (failure_count), use moda detections tools",
|
|
1332
1332
|
examples: ["moda tools list --days-back=7", "moda tools list --sort=failure_rate --limit=10", "moda tools list --search=calendar --direction=write"]
|
|
1333
1333
|
},
|
|
1334
1334
|
{
|
|
@@ -1337,7 +1337,7 @@ var CANONICAL_LEAVES = [
|
|
|
1337
1337
|
path: "tools get",
|
|
1338
1338
|
args: "<tool_name>",
|
|
1339
1339
|
handler: "tool-catalog-detail",
|
|
1340
|
-
summary: "One tool: calls,
|
|
1340
|
+
summary: "One tool: recorded receipt calls/failed_calls, schema and usage; failure_detections/categories count classified events. For classified failure ranking (failure_count), use moda detections tools",
|
|
1341
1341
|
examples: ["moda tools get <tool_name>", "moda tools get <tool_name> --days-back=30 --full"]
|
|
1342
1342
|
},
|
|
1343
1343
|
{
|
|
@@ -1432,7 +1432,7 @@ var CANONICAL_LEAVES = [
|
|
|
1432
1432
|
args: "",
|
|
1433
1433
|
handler: "skills",
|
|
1434
1434
|
handlerSubcommand: "sync",
|
|
1435
|
-
summary: "Upload locally authored .claude/skills/**/SKILL.md files to Moda
|
|
1435
|
+
summary: "Upload locally authored .claude/skills/**/SKILL.md files to Moda",
|
|
1436
1436
|
examples: ["moda skills push --dry-run", "moda skills push"]
|
|
1437
1437
|
}
|
|
1438
1438
|
];
|
|
@@ -1994,6 +1994,7 @@ var SIGNALS_SUBCOMMAND_HELP = [
|
|
|
1994
1994
|
var SKILLS_SUBCOMMAND_HELP = [
|
|
1995
1995
|
{
|
|
1996
1996
|
name: "gen",
|
|
1997
|
+
hidden: true,
|
|
1997
1998
|
description: "Generate skills from production traces (paid: clustering + LLM distillation; no dry-run)",
|
|
1998
1999
|
usage: "moda skills gen [--source=all|sdk] [--max-sessions=N] [--lookback-hours=N] [--max-traces=N] [--start-at=ISO] [--end-at=ISO] [--wait]",
|
|
1999
2000
|
flags: [
|
|
@@ -2013,12 +2014,14 @@ var SKILLS_SUBCOMMAND_HELP = [
|
|
|
2013
2014
|
},
|
|
2014
2015
|
{
|
|
2015
2016
|
name: "status",
|
|
2017
|
+
hidden: true,
|
|
2016
2018
|
description: "Show a skill generation run (default: the latest) and its events",
|
|
2017
2019
|
usage: "moda skills status [<run_id>] [--run-id=<id>]",
|
|
2018
2020
|
examples: ["moda skills status", "moda skills status <run_id>"]
|
|
2019
2021
|
},
|
|
2020
2022
|
{
|
|
2021
2023
|
name: "pull",
|
|
2024
|
+
hidden: true,
|
|
2022
2025
|
description: "Write generated skills into the detected coding agents' skill directories",
|
|
2023
2026
|
usage: "moda skills pull [--status=approved|proposed|all]",
|
|
2024
2027
|
flags: [{ name: "--status=approved|proposed|all", description: "Which skills to pull (default approved)." }],
|
|
@@ -2056,6 +2059,7 @@ var SKILLS_SUBCOMMAND_HELP = [
|
|
|
2056
2059
|
},
|
|
2057
2060
|
{
|
|
2058
2061
|
name: "proposals",
|
|
2062
|
+
hidden: true,
|
|
2059
2063
|
description: "List skill improvement proposals (read-only)",
|
|
2060
2064
|
usage: "moda skills proposals list [--status=ready_for_pr|all] [--generation-run-id=<id>]",
|
|
2061
2065
|
flags: [
|
|
@@ -2067,6 +2071,7 @@ var SKILLS_SUBCOMMAND_HELP = [
|
|
|
2067
2071
|
},
|
|
2068
2072
|
{
|
|
2069
2073
|
name: "proposal",
|
|
2074
|
+
hidden: true,
|
|
2070
2075
|
description: "Apply a skill proposal: write its SKILL.md locally and acknowledge it on the server",
|
|
2071
2076
|
usage: "moda skills proposal apply <proposal_id>",
|
|
2072
2077
|
flags: [TENANT_ID],
|
|
@@ -2099,6 +2104,7 @@ var PROMPTS_REGISTRY_SUBCOMMAND_HELP = [
|
|
|
2099
2104
|
},
|
|
2100
2105
|
{
|
|
2101
2106
|
name: "proposals",
|
|
2107
|
+
hidden: true,
|
|
2102
2108
|
description: "List revision proposals for a prompt (read-only)",
|
|
2103
2109
|
usage: "moda prompts proposals <key_or_id>",
|
|
2104
2110
|
examples: ["moda prompts proposals support.triage"]
|
|
@@ -2111,6 +2117,7 @@ var PROMPTS_REGISTRY_SUBCOMMAND_HELP = [
|
|
|
2111
2117
|
},
|
|
2112
2118
|
{
|
|
2113
2119
|
name: "decide",
|
|
2120
|
+
hidden: true,
|
|
2114
2121
|
description: "Merge, reject, or reopen a prompt revision proposal",
|
|
2115
2122
|
usage: "moda prompts decide <key_or_id> <proposal_id> --action=merge|reject|reopen [--dry-run]",
|
|
2116
2123
|
flags: [
|
|
@@ -2945,6 +2952,21 @@ function deprecatedFormsOf(name) {
|
|
|
2945
2952
|
return visibleLegacyNames().filter((entry) => entry.legacy.startsWith(`${name} `)).map((entry) => ({ form: `moda ${entry.legacy}`, use: entry.use }));
|
|
2946
2953
|
}
|
|
2947
2954
|
function treeFields(name, commands) {
|
|
2955
|
+
if (name === "prompts" || name === "skills") {
|
|
2956
|
+
return { subcommands: (commands.find((command) => command.name === name)?.subcommands ?? []).filter((subcommand) => !subcommand.hidden).map((subcommand) => {
|
|
2957
|
+
const leaf = leavesOf(name).find((leaf2) => leaf2.verb === subcommand.name);
|
|
2958
|
+
return leaf ? leafManifestFields(leaf, commands) : {
|
|
2959
|
+
name: subcommand.name,
|
|
2960
|
+
path: `moda ${name} ${subcommand.name}`,
|
|
2961
|
+
runs: [name],
|
|
2962
|
+
mutability: ["list", "show", "usage", "status", "diff"].includes(subcommand.name) ? "read" : "write",
|
|
2963
|
+
summary: subcommand.description,
|
|
2964
|
+
usage: subcommand.usage,
|
|
2965
|
+
flags: subcommand.flags?.map(documentedFlag),
|
|
2966
|
+
examples: subcommand.examples
|
|
2967
|
+
};
|
|
2968
|
+
}) };
|
|
2969
|
+
}
|
|
2948
2970
|
if (!CANONICAL_NOUNS.includes(name) || name === "review")
|
|
2949
2971
|
return {};
|
|
2950
2972
|
return { subcommands: leavesOf(name).map((leaf) => leafManifestFields(leaf, commands)) };
|
|
@@ -3066,40 +3088,40 @@ function leafManifestFields(leaf, commands) {
|
|
|
3066
3088
|
import { fileURLToPath } from "url";
|
|
3067
3089
|
import { realpathSync } from "fs";
|
|
3068
3090
|
async function runPromptsCommand(...args) {
|
|
3069
|
-
return (await import("./prompts-
|
|
3091
|
+
return (await import("./prompts-mtptqs7c.js")).runPromptsCommand(...args);
|
|
3070
3092
|
}
|
|
3071
3093
|
async function runSkillsCommand(...args) {
|
|
3072
|
-
return (await import("./skills-
|
|
3094
|
+
return (await import("./skills-0kkps03j.js")).runSkillsCommand(...args);
|
|
3073
3095
|
}
|
|
3074
3096
|
async function runHarnessCommand(...args) {
|
|
3075
|
-
return (await import("./harness-
|
|
3097
|
+
return (await import("./harness-d92py0t2.js")).runHarnessCommand(...args);
|
|
3076
3098
|
}
|
|
3077
3099
|
async function runSyncCommand(...args) {
|
|
3078
|
-
return (await import("./sync-
|
|
3100
|
+
return (await import("./sync-q5n028df.js")).runSyncCommand(...args);
|
|
3079
3101
|
}
|
|
3080
3102
|
async function runRegistryCommand(...args) {
|
|
3081
|
-
return (await import("./registry-
|
|
3103
|
+
return (await import("./registry-w50mdzsb.js")).runRegistryCommand(...args);
|
|
3082
3104
|
}
|
|
3083
3105
|
async function runDoctorCommand(...args) {
|
|
3084
|
-
return (await import("./doctor-
|
|
3106
|
+
return (await import("./doctor-knvvpcjg.js")).runDoctorCommand(...args);
|
|
3085
3107
|
}
|
|
3086
3108
|
async function runStatusCommand(...args) {
|
|
3087
|
-
return (await import("./doctor-
|
|
3109
|
+
return (await import("./doctor-knvvpcjg.js")).runStatusCommand(...args);
|
|
3088
3110
|
}
|
|
3089
3111
|
async function runAuthCommand(...args) {
|
|
3090
|
-
return (await import("./profile-commands-
|
|
3112
|
+
return (await import("./profile-commands-zgq8dja0.js")).runAuthCommand(...args);
|
|
3091
3113
|
}
|
|
3092
3114
|
async function runConfigCommand(...args) {
|
|
3093
|
-
return (await import("./profile-commands-
|
|
3115
|
+
return (await import("./profile-commands-zgq8dja0.js")).runConfigCommand(...args);
|
|
3094
3116
|
}
|
|
3095
3117
|
async function runProfilesCommand(...args) {
|
|
3096
|
-
return (await import("./profile-commands-
|
|
3118
|
+
return (await import("./profile-commands-zgq8dja0.js")).runProfilesCommand(...args);
|
|
3097
3119
|
}
|
|
3098
3120
|
async function runAgentCommand(...args) {
|
|
3099
|
-
return (await import("./agent-
|
|
3121
|
+
return (await import("./agent-8z1k639g.js")).runAgentCommand(...args);
|
|
3100
3122
|
}
|
|
3101
3123
|
async function runProductionCommand(...args) {
|
|
3102
|
-
return (await import("./production-intelligence-
|
|
3124
|
+
return (await import("./production-intelligence-8w7an97c.js")).runProductionCommand(...args);
|
|
3103
3125
|
}
|
|
3104
3126
|
function parseArgs(argv) {
|
|
3105
3127
|
const args = argv.slice(2);
|
|
@@ -3414,7 +3436,7 @@ Setup:
|
|
|
3414
3436
|
Groups with their own subcommands (run 'moda <group> --help'):
|
|
3415
3437
|
harness Analyze, scan, validate, approve, sync and register the agent harness
|
|
3416
3438
|
prompts Code-first prompt versions: init, status, sync, promote, list, show
|
|
3417
|
-
skills
|
|
3439
|
+
skills Read, push, and install skills
|
|
3418
3440
|
sync Sync the harness graph and prompts to Moda Cloud
|
|
3419
3441
|
registry Push prompts, skills, tools and agent wiring from one JSON manifest
|
|
3420
3442
|
|
|
@@ -3467,10 +3489,11 @@ function printCommandHelp(definition) {
|
|
|
3467
3489
|
${" ".repeat(width)} ${flag.description}` : ` ${flag.name.padEnd(width)} ${flag.description}`);
|
|
3468
3490
|
}
|
|
3469
3491
|
}
|
|
3470
|
-
|
|
3492
|
+
const visibleSubcommands = definition.subcommands?.filter((entry) => !entry.hidden) ?? [];
|
|
3493
|
+
if (visibleSubcommands.length > 0) {
|
|
3471
3494
|
lines.push("", "Subcommands:");
|
|
3472
|
-
const width = Math.max(...
|
|
3473
|
-
for (const entry of
|
|
3495
|
+
const width = Math.max(...visibleSubcommands.map((entry) => entry.name.length));
|
|
3496
|
+
for (const entry of visibleSubcommands) {
|
|
3474
3497
|
lines.push(` ${entry.name.padEnd(width)} ${entry.description}`);
|
|
3475
3498
|
}
|
|
3476
3499
|
lines.push("", `Run 'moda ${definition.name} <subcommand> --help' for that subcommand's flags.`);
|
|
@@ -3740,6 +3763,8 @@ async function attachWindows(rows, windowSize, budgetBytes) {
|
|
|
3740
3763
|
}
|
|
3741
3764
|
var TOOL_FAILURE_DETAIL_DEFAULT_LIMIT = 5;
|
|
3742
3765
|
var TOOL_FAILURE_AGENT_SUBTYPES = 20;
|
|
3766
|
+
var TOOL_RECEIPT_METRIC_NOTE = "calls and failed_calls count recorded tool receipts; failure_rate_pct and success_rate_pct use those receipts. --sort=failures ranks failed_calls, not classified failure events. To answer which tool fails most by classified failure events, use `moda detections tools` (failure_count). In tool detail, failure_detections and failure_categories use classified failure events; these counts can differ.";
|
|
3767
|
+
var CLASSIFIED_TOOL_FAILURE_METRIC_NOTE = "failure_count and failure categories count classified tool failure events. Use `moda detections tools` to answer which tool fails most by classified failures. For recorded receipt calls, failed_calls and receipt failure rates, use `moda tools list` or `moda tools get <tool_name>`; the counts can differ.";
|
|
3743
3768
|
var TOOL_FAILURE_CATALOG_LINKS = 3;
|
|
3744
3769
|
var TOOL_CATALOG_DEFAULT_LIMIT = 25;
|
|
3745
3770
|
async function printWithOptionalWindows(enriched, listKey, includeWindow, windowSize, output, warnings, finalize, nextCommands = [], summary) {
|
|
@@ -5916,7 +5941,7 @@ async function runCommand(command, positional, flags, positionals = positional ?
|
|
|
5916
5941
|
callDataAPI(`/tool-failures${queryString}`),
|
|
5917
5942
|
params.compare === true ? loadFamilyCompare("tool-failures", params) : Promise.resolve(undefined)
|
|
5918
5943
|
]);
|
|
5919
|
-
const data = withSummaryCompare(listed, compare);
|
|
5944
|
+
const data = { ...asRecord(withSummaryCompare(listed, compare)), metric_note: CLASSIFIED_TOOL_FAILURE_METRIC_NOTE };
|
|
5920
5945
|
const daysBack = params.days_back ?? 7;
|
|
5921
5946
|
const failing = (Array.isArray(asRecord(data)?.tools) ? asRecord(data).tools : []).map((row) => asString(asRecord(row)?.tool_name)).filter((name) => Boolean(name)).slice(0, TOOL_FAILURE_CATALOG_LINKS);
|
|
5922
5947
|
const nextCommands = failing.flatMap((name, index) => [
|
|
@@ -5937,7 +5962,7 @@ async function runCommand(command, positional, flags, positionals = positional ?
|
|
|
5937
5962
|
query.set("search", params.search);
|
|
5938
5963
|
if (params.direction)
|
|
5939
5964
|
query.set("direction", params.direction);
|
|
5940
|
-
const data = asRecord(await callDataAPI(`/tools?${query.toString()}`))
|
|
5965
|
+
const data = { ...asRecord(await callDataAPI(`/tools?${query.toString()}`)), metric_note: TOOL_RECEIPT_METRIC_NOTE };
|
|
5941
5966
|
const pagination = asRecord(data.pagination);
|
|
5942
5967
|
const tools = Array.isArray(data.tools) ? data.tools.map((row) => asRecord(row)).filter((row) => row !== null) : [];
|
|
5943
5968
|
const listFlags = [
|
|
@@ -5985,7 +6010,7 @@ async function runCommand(command, positional, flags, positionals = positional ?
|
|
|
5985
6010
|
throw error;
|
|
5986
6011
|
throw new CliNotFoundError("tool", params.tool_name, `Tool "${params.tool_name}" has no recorded calls in the last ${daysBack} day(s): the name may be mistyped, or the tool was not called in this window.`, `moda tools list --search=${shellArg(params.tool_name)} --days-back=${daysBack}`);
|
|
5987
6012
|
}
|
|
5988
|
-
const { data, shortened } = shapeToolCatalogDetail(raw, { daysBack, shorten: agentMode && params.full !== true });
|
|
6013
|
+
const { data, shortened } = shapeToolCatalogDetail({ ...raw, metric_note: TOOL_RECEIPT_METRIC_NOTE }, { daysBack, shorten: agentMode && params.full !== true });
|
|
5989
6014
|
const warnings = [];
|
|
5990
6015
|
if (shortened > 0) {
|
|
5991
6016
|
warnings.push(`Agent output capped ${shortened} list(s) or value(s): at most 20 observed fields with 3 common values each, 5 recent calls, and 200 characters per input or sample error (the *_total fields give the full counts). Add --full for everything. The registered schema is never cut.`);
|
|
@@ -6039,7 +6064,7 @@ async function runCommand(command, positional, flags, positionals = positional ?
|
|
|
6039
6064
|
if (dropConversation)
|
|
6040
6065
|
query.set("include_context", "0");
|
|
6041
6066
|
const queryString = query.toString() ? `?${query.toString()}` : "";
|
|
6042
|
-
const data = await callDataAPI(`/tool-failures/${encodeURIComponent(params.tool_name)}${queryString}`);
|
|
6067
|
+
const data = { ...asRecord(await callDataAPI(`/tool-failures/${encodeURIComponent(params.tool_name)}${queryString}`)), metric_note: CLASSIFIED_TOOL_FAILURE_METRIC_NOTE };
|
|
6043
6068
|
const tfRecord = asRecord(data) ?? {};
|
|
6044
6069
|
const subtypeCount = Array.isArray(tfRecord.subtypes) ? tfRecord.subtypes.length : 0;
|
|
6045
6070
|
const exampleCount = Array.isArray(tfRecord.examples) ? tfRecord.examples.length : 0;
|
|
@@ -6860,7 +6885,7 @@ var commandRegistry = createCommandRegistry([
|
|
|
6860
6885
|
resetApiRequestCountBeforeRun: true,
|
|
6861
6886
|
telemetry: "result-and-error",
|
|
6862
6887
|
handler: async (context) => {
|
|
6863
|
-
const { runInit } = await import("./index-
|
|
6888
|
+
const { runInit } = await import("./index-dmhrtv9c.js");
|
|
6864
6889
|
if (context.outputMode === "agent-stream") {
|
|
6865
6890
|
context.output.writeEvent({
|
|
6866
6891
|
event: "started",
|
|
@@ -7802,11 +7827,8 @@ var commandRegistry = createCommandRegistry([
|
|
|
7802
7827
|
}),
|
|
7803
7828
|
{
|
|
7804
7829
|
name: "skills",
|
|
7805
|
-
description: "
|
|
7830
|
+
description: "Read registered skills, upload locally authored skills, and install guides",
|
|
7806
7831
|
examples: [
|
|
7807
|
-
"moda skills gen",
|
|
7808
|
-
"moda skills status",
|
|
7809
|
-
"moda skills pull",
|
|
7810
7832
|
"moda skills push",
|
|
7811
7833
|
"moda skills install moda-cli",
|
|
7812
7834
|
"moda skills install --list",
|
|
@@ -7814,7 +7836,7 @@ var commandRegistry = createCommandRegistry([
|
|
|
7814
7836
|
],
|
|
7815
7837
|
subcommands: SKILLS_SUBCOMMAND_HELP,
|
|
7816
7838
|
auth: "api-key",
|
|
7817
|
-
authNote: "install is local;
|
|
7839
|
+
authNote: "install is local; push, list, show, and policy need the API key.",
|
|
7818
7840
|
outputModes: ["human", "json", "agent"],
|
|
7819
7841
|
mutability: "write",
|
|
7820
7842
|
validateConfigBeforeRun: false,
|
|
@@ -3,16 +3,16 @@ import {
|
|
|
3
3
|
promptsDiscoveredCheck,
|
|
4
4
|
runDoctorCommand,
|
|
5
5
|
runStatusCommand
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-25yzb3wd.js";
|
|
7
7
|
import"./cli-qwnkv4jy.js";
|
|
8
|
-
import"./cli-
|
|
8
|
+
import"./cli-2qcedyw0.js";
|
|
9
9
|
import"./cli-mm48br00.js";
|
|
10
10
|
import"./cli-764m5azg.js";
|
|
11
11
|
import"./cli-k0vxtzxb.js";
|
|
12
12
|
import"./cli-13zdcv4w.js";
|
|
13
|
-
import"./cli-
|
|
13
|
+
import"./cli-37z2f5wa.js";
|
|
14
14
|
import"./cli-e0kbye4s.js";
|
|
15
|
-
import"./cli-
|
|
15
|
+
import"./cli-n9ng8mym.js";
|
|
16
16
|
import"./cli-1nd4339b.js";
|
|
17
17
|
import"./cli-k4tqwah4.js";
|
|
18
18
|
import"./cli-9kfxkxmk.js";
|
|
@@ -48,16 +48,16 @@ import {
|
|
|
48
48
|
writeHarnessAnalyzeResult,
|
|
49
49
|
writeHarnessArtifacts,
|
|
50
50
|
writeHumanProgress
|
|
51
|
-
} from "./cli-
|
|
51
|
+
} from "./cli-82fxwm0m.js";
|
|
52
52
|
import"./cli-k0vxtzxb.js";
|
|
53
53
|
import"./cli-97fnztpy.js";
|
|
54
54
|
import {
|
|
55
55
|
HARNESS_ANALYZE_CONCERNS
|
|
56
56
|
} from "./cli-krm4w2v9.js";
|
|
57
57
|
import"./cli-13zdcv4w.js";
|
|
58
|
-
import"./cli-
|
|
58
|
+
import"./cli-37z2f5wa.js";
|
|
59
59
|
import"./cli-e0kbye4s.js";
|
|
60
|
-
import"./cli-
|
|
60
|
+
import"./cli-n9ng8mym.js";
|
|
61
61
|
import"./cli-1nd4339b.js";
|
|
62
62
|
import"./cli-k4tqwah4.js";
|
|
63
63
|
import"./cli-r0pkdy83.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildSourceSnapshot
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-82fxwm0m.js";
|
|
4
4
|
import"./cli-k0vxtzxb.js";
|
|
5
5
|
import"./cli-97fnztpy.js";
|
|
6
6
|
import"./cli-krm4w2v9.js";
|
|
7
7
|
import"./cli-13zdcv4w.js";
|
|
8
|
-
import"./cli-
|
|
8
|
+
import"./cli-37z2f5wa.js";
|
|
9
9
|
import"./cli-e0kbye4s.js";
|
|
10
|
-
import"./cli-
|
|
10
|
+
import"./cli-n9ng8mym.js";
|
|
11
11
|
import {
|
|
12
12
|
recordApiRequest
|
|
13
13
|
} from "./cli-1nd4339b.js";
|
|
@@ -20,14 +20,14 @@ import {
|
|
|
20
20
|
serializeExtractResult,
|
|
21
21
|
toolNamesOf,
|
|
22
22
|
valueChildren
|
|
23
|
-
} from "./cli-
|
|
23
|
+
} from "./cli-82fxwm0m.js";
|
|
24
24
|
import"./cli-k0vxtzxb.js";
|
|
25
25
|
import"./cli-97fnztpy.js";
|
|
26
26
|
import"./cli-krm4w2v9.js";
|
|
27
27
|
import"./cli-13zdcv4w.js";
|
|
28
|
-
import"./cli-
|
|
28
|
+
import"./cli-37z2f5wa.js";
|
|
29
29
|
import"./cli-e0kbye4s.js";
|
|
30
|
-
import"./cli-
|
|
30
|
+
import"./cli-n9ng8mym.js";
|
|
31
31
|
import"./cli-1nd4339b.js";
|
|
32
32
|
import"./cli-k4tqwah4.js";
|
|
33
33
|
import"./cli-r0pkdy83.js";
|
|
@@ -3,18 +3,18 @@ import {
|
|
|
3
3
|
enumerateToolCatalog,
|
|
4
4
|
enumerateWorkflows,
|
|
5
5
|
mergeEnumeratedComponents
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-n9wt2k8t.js";
|
|
7
7
|
import {
|
|
8
8
|
createAgentScopeResolver,
|
|
9
9
|
enumerateAgents
|
|
10
|
-
} from "./cli-
|
|
10
|
+
} from "./cli-82fxwm0m.js";
|
|
11
11
|
import"./cli-k0vxtzxb.js";
|
|
12
12
|
import"./cli-97fnztpy.js";
|
|
13
13
|
import"./cli-krm4w2v9.js";
|
|
14
14
|
import"./cli-13zdcv4w.js";
|
|
15
|
-
import"./cli-
|
|
15
|
+
import"./cli-37z2f5wa.js";
|
|
16
16
|
import"./cli-e0kbye4s.js";
|
|
17
|
-
import"./cli-
|
|
17
|
+
import"./cli-n9ng8mym.js";
|
|
18
18
|
import"./cli-1nd4339b.js";
|
|
19
19
|
import"./cli-k4tqwah4.js";
|
|
20
20
|
import"./cli-r0pkdy83.js";
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
agentsMdProblem,
|
|
6
6
|
runSkillSync
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-pae8jxe9.js";
|
|
8
8
|
import"./cli-998n4kz9.js";
|
|
9
9
|
import {
|
|
10
10
|
buildDoctorReport
|
|
11
|
-
} from "./cli-
|
|
11
|
+
} from "./cli-25yzb3wd.js";
|
|
12
12
|
import {
|
|
13
13
|
ConnectCodeError,
|
|
14
14
|
connectWithCode,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
import {
|
|
20
20
|
initPrompts,
|
|
21
21
|
runPromptSync
|
|
22
|
-
} from "./cli-
|
|
22
|
+
} from "./cli-2qcedyw0.js";
|
|
23
23
|
import {
|
|
24
24
|
bundledSkillsDir,
|
|
25
25
|
installIntegrationSkill,
|
|
@@ -47,7 +47,7 @@ import {
|
|
|
47
47
|
runCodingAgent,
|
|
48
48
|
runHarnessCommand,
|
|
49
49
|
startRemoteAnalyze
|
|
50
|
-
} from "./cli-
|
|
50
|
+
} from "./cli-82fxwm0m.js";
|
|
51
51
|
import {
|
|
52
52
|
canonicalText,
|
|
53
53
|
renderInitBanner,
|
|
@@ -63,9 +63,9 @@ import"./cli-krm4w2v9.js";
|
|
|
63
63
|
import {
|
|
64
64
|
createCommandContext
|
|
65
65
|
} from "./cli-13zdcv4w.js";
|
|
66
|
-
import"./cli-
|
|
66
|
+
import"./cli-37z2f5wa.js";
|
|
67
67
|
import"./cli-e0kbye4s.js";
|
|
68
|
-
import"./cli-
|
|
68
|
+
import"./cli-n9ng8mym.js";
|
|
69
69
|
import {
|
|
70
70
|
VERSION,
|
|
71
71
|
recordApiRequest,
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
overviewTrendsQuery,
|
|
11
11
|
renderTrendsHuman,
|
|
12
12
|
trendsSummaryText
|
|
13
|
-
} from "./cli-
|
|
13
|
+
} from "./cli-ap7wfbnk.js";
|
|
14
14
|
import {
|
|
15
15
|
renderMarkdownForTerminal,
|
|
16
16
|
shouldColorTerminalOutput,
|
|
@@ -21,7 +21,7 @@ import"./cli-e0kbye4s.js";
|
|
|
21
21
|
import {
|
|
22
22
|
callControlAPI,
|
|
23
23
|
callDataAPI
|
|
24
|
-
} from "./cli-
|
|
24
|
+
} from "./cli-n9ng8mym.js";
|
|
25
25
|
import {
|
|
26
26
|
EXIT_DEGRADED,
|
|
27
27
|
EXIT_OK,
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
inventoryFiles,
|
|
3
3
|
safePromptEvidencePath
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-82fxwm0m.js";
|
|
5
5
|
import"./cli-k0vxtzxb.js";
|
|
6
6
|
import"./cli-97fnztpy.js";
|
|
7
7
|
import"./cli-krm4w2v9.js";
|
|
8
8
|
import"./cli-13zdcv4w.js";
|
|
9
|
-
import"./cli-
|
|
9
|
+
import"./cli-37z2f5wa.js";
|
|
10
10
|
import"./cli-e0kbye4s.js";
|
|
11
|
-
import"./cli-
|
|
11
|
+
import"./cli-n9ng8mym.js";
|
|
12
12
|
import"./cli-1nd4339b.js";
|
|
13
13
|
import"./cli-k4tqwah4.js";
|
|
14
14
|
import {
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
checkPromptMapping,
|
|
4
4
|
discoverHarnessPromptSources,
|
|
5
5
|
safePromptEvidencePath
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-82fxwm0m.js";
|
|
7
7
|
import"./cli-k0vxtzxb.js";
|
|
8
8
|
import"./cli-97fnztpy.js";
|
|
9
9
|
import"./cli-krm4w2v9.js";
|
|
10
10
|
import"./cli-13zdcv4w.js";
|
|
11
|
-
import"./cli-
|
|
11
|
+
import"./cli-37z2f5wa.js";
|
|
12
12
|
import"./cli-e0kbye4s.js";
|
|
13
|
-
import"./cli-
|
|
13
|
+
import"./cli-n9ng8mym.js";
|
|
14
14
|
import"./cli-1nd4339b.js";
|
|
15
15
|
import"./cli-k4tqwah4.js";
|
|
16
16
|
import {
|
|
@@ -9,15 +9,15 @@ import {
|
|
|
9
9
|
runPromptSync,
|
|
10
10
|
runPromptsCommand,
|
|
11
11
|
writePromptSyncProgress
|
|
12
|
-
} from "./cli-
|
|
12
|
+
} from "./cli-2qcedyw0.js";
|
|
13
13
|
import {
|
|
14
14
|
promptSourceHashPayload
|
|
15
15
|
} from "./cli-mm48br00.js";
|
|
16
16
|
import"./cli-764m5azg.js";
|
|
17
17
|
import"./cli-13zdcv4w.js";
|
|
18
|
-
import"./cli-
|
|
18
|
+
import"./cli-37z2f5wa.js";
|
|
19
19
|
import"./cli-e0kbye4s.js";
|
|
20
|
-
import"./cli-
|
|
20
|
+
import"./cli-n9ng8mym.js";
|
|
21
21
|
import"./cli-1nd4339b.js";
|
|
22
22
|
import"./cli-k4tqwah4.js";
|
|
23
23
|
import"./cli-9kfxkxmk.js";
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
pullSkills,
|
|
4
4
|
runSkillSync,
|
|
5
5
|
runSkillsCommand
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-pae8jxe9.js";
|
|
7
7
|
import"./cli-qm5b1vck.js";
|
|
8
8
|
import"./cli-rjav0vj1.js";
|
|
9
9
|
import"./cli-hcwdz9sd.js";
|
|
10
10
|
import"./cli-13zdcv4w.js";
|
|
11
|
-
import"./cli-
|
|
11
|
+
import"./cli-37z2f5wa.js";
|
|
12
12
|
import"./cli-e0kbye4s.js";
|
|
13
|
-
import"./cli-
|
|
13
|
+
import"./cli-n9ng8mym.js";
|
|
14
14
|
import"./cli-1nd4339b.js";
|
|
15
15
|
import"./cli-k4tqwah4.js";
|
|
16
16
|
import"./cli-0semcakc.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runSkillsCommand
|
|
3
|
-
} from "./cli-
|
|
3
|
+
} from "./cli-pae8jxe9.js";
|
|
4
4
|
import {
|
|
5
5
|
runPromptsCommand
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-2qcedyw0.js";
|
|
7
7
|
import"./cli-qm5b1vck.js";
|
|
8
8
|
import"./cli-rjav0vj1.js";
|
|
9
9
|
import"./cli-hcwdz9sd.js";
|
|
@@ -11,14 +11,14 @@ import"./cli-mm48br00.js";
|
|
|
11
11
|
import"./cli-764m5azg.js";
|
|
12
12
|
import {
|
|
13
13
|
runHarnessCommand
|
|
14
|
-
} from "./cli-
|
|
14
|
+
} from "./cli-82fxwm0m.js";
|
|
15
15
|
import"./cli-k0vxtzxb.js";
|
|
16
16
|
import"./cli-97fnztpy.js";
|
|
17
17
|
import"./cli-krm4w2v9.js";
|
|
18
18
|
import"./cli-13zdcv4w.js";
|
|
19
|
-
import"./cli-
|
|
19
|
+
import"./cli-37z2f5wa.js";
|
|
20
20
|
import"./cli-e0kbye4s.js";
|
|
21
|
-
import"./cli-
|
|
21
|
+
import"./cli-n9ng8mym.js";
|
|
22
22
|
import"./cli-1nd4339b.js";
|
|
23
23
|
import {
|
|
24
24
|
CliInputError
|
package/package.json
CHANGED
package/skills/moda-cli/SKILL.md
CHANGED
|
@@ -136,7 +136,7 @@ moda detections list --family=frustration --limit=5 --json \
|
|
|
136
136
|
| while read id idx; do moda traces get "$id" --msg-index="$idx" --window=2; done
|
|
137
137
|
```
|
|
138
138
|
|
|
139
|
-
Which tool fails most,
|
|
139
|
+
Which tool fails most: rank **classified failure events** with `moda detections tools` (`failure_count`), then read an example. `moda tools list --sort=failures` ranks **recorded failed receipts** (`failed_calls`); it answers a different question and can give a different ranking. `tools list|get` calls and receipt success/failure rates are for usage, not the classified failure leaderboard:
|
|
140
140
|
|
|
141
141
|
```bash
|
|
142
142
|
moda detections tools --json | jq '.tools[] | {tool: .tool_name, failures: .failure_count}'
|
|
@@ -62,7 +62,7 @@ Loaded on demand from the moda-cli skill. This table can lag the CLI: `moda <com
|
|
|
62
62
|
| `--cohort=<ref>` | Scope `problems list`, `traces list`, `detections list` (emotion/frustration/hallucination per trace, laziness, custom_signal hits), `detections tools` and `clusters` to one cohort (`builtin:<key>` or a saved id from `moda cohorts list`). The summary names the cohort; a warning means the server did not confirm the scope |
|
|
63
63
|
| `moda problems reopen <pid>` | Reopen a Problem marked fixed |
|
|
64
64
|
| `moda signals <create\|update\|activate\|pause\|delete\|examples\|refine\|revise\|proposals\|accept\|reject\|search\|preview>` | Manage custom signals (writes take `--dry-run`; LLM-backed ones are rate-limited per key) |
|
|
65
|
-
| `moda prompts list\|show\|
|
|
65
|
+
| `moda prompts list\|show\|usage` | Read registered prompt versions and usage |
|
|
66
66
|
| `moda skills list\|show\|policy` / `moda harness list\|show\|versions\|diff` | Skill library and synced harnesses |
|
|
67
67
|
|
|
68
68
|
`moda traces search` flags: `--mode=keyword|semantic|hybrid` (default `hybrid`),
|
|
@@ -29,7 +29,7 @@ Writes listed here accept `--dry-run`: it validates the call, prints the exact r
|
|
|
29
29
|
| Custom signals: edit, lifecycle | `moda signals update <id> …`, `moda signals activate\|pause\|delete <id>` (delete: drafts only; archiving is dashboard-only) |
|
|
30
30
|
| Custom signals: review & tune | `moda signals examples <id> add\|update\|remove --conversation-id=…`, `refine <id> --request="…"`, `revise <id> --conversation-ids=…`, `proposals <id>`, `accept\|reject <id> <proposal_id>` |
|
|
31
31
|
| Custom signals: find matches | `moda signals search <id>`, `search-status <id> <search_id>`, `search-stop <id> <search_id>`, `preview --file=detector.json` |
|
|
32
|
-
| Prompts registry | `moda prompts list [--label --search]`, `show <key>`, `
|
|
32
|
+
| Prompts registry | `moda prompts list [--label --search]`, `show <key>`, `usage <key>` |
|
|
33
33
|
| Skills library | `moda skills list`, `show <key>`, `policy <key> --live\|--local` |
|
|
34
34
|
| Harness pages | `moda harness list`, `show <id>`, `versions <id>`, `diff <id> --from=… --to=…` |
|
|
35
35
|
|
|
@@ -225,7 +225,7 @@ Treat an answer as degraded if **any** of these hold:
|
|
|
225
225
|
and `skills policy` validate fully, send nothing, and return
|
|
226
226
|
`data.planned` (method, endpoint, body) plus a `next_commands` entry
|
|
227
227
|
that runs the write for real (`requires_approval: true`).
|
|
228
|
-
- `registry push`, `harness sync|delete|register`, `prompts sync
|
|
228
|
+
- `registry push`, `harness sync|delete|register`, `prompts sync`
|
|
229
229
|
and `skills sync` return their own preview. Some ask the server to
|
|
230
230
|
compute it (`skills sync --dry-run` sends the local skills marked
|
|
231
231
|
`dryRun: true`), but none of them applies a change.
|