@anna-ai/cli 0.1.49 → 0.1.52

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 (63) hide show
  1. package/dist/{account-CPnwqXeh.js → account-C-IeQNNr.js} +1 -1
  2. package/dist/{agent-DAOr_aiE.js → agent-CX2VzG7e.js} +1 -1
  3. package/dist/{apps-HbfURK6y.js → apps-BRBufSyX.js} +1 -41
  4. package/dist/{apps-CzqMRLbS.js → apps-CTIiH6a_.js} +1 -1
  5. package/dist/{apps-cut-BhTJwILv.js → apps-cut-BLtUBokD.js} +20 -22
  6. package/dist/apps-cut-eOVb1-0y.js +19 -0
  7. package/dist/{apps-destructive-PlaU93EX.js → apps-destructive-DcG3T1Mx.js} +2 -2
  8. package/dist/{apps-discard-CFi-GzpU.js → apps-discard-7ERq2pmS.js} +7 -7
  9. package/dist/{apps-grants-DqaX8UTy.js → apps-grants-DVoSb6-r.js} +7 -2
  10. package/dist/apps-publish-AdXryRYo.js +22 -0
  11. package/dist/apps-publish-BzaoSyFn.js +92 -0
  12. package/dist/{app-bundle-upload-Ca0r-kPy.js → apps-push-DZ1LHDJW.js} +144 -69
  13. package/dist/apps-push-WBfD0JyE.js +20 -0
  14. package/dist/{apps-release-DGQv6DDl.js → apps-release-DAV-DB_Q.js} +2 -2
  15. package/dist/{apps-rename-slug-CCEU_7JJ.js → apps-rename-slug-4_5lsDwg.js} +2 -2
  16. package/dist/{apps-status-C4Cxc2DF.js → apps-status-hMrRz356.js} +1 -1
  17. package/dist/{apps-submit-review--hZFZRJ3.js → apps-submit-review-CxoKgexX.js} +1 -1
  18. package/dist/{apps-sync-meta-DnFwFNl5.js → apps-sync-meta-BwN8g6TO.js} +3 -3
  19. package/dist/{apps-versions-C7NzG5Dk.js → apps-versions-gfG_sBFv.js} +1 -1
  20. package/dist/{bridge-sFHqOOat.js → bridge-Bo8eu3-d.js} +1 -1
  21. package/dist/bridge-nv-le8ff.js +3 -0
  22. package/dist/cli.js +180 -55
  23. package/dist/dev-CQIZHt7u.js +4 -0
  24. package/dist/{dev-Bfv3WQC0.js → dev-uagVfV9Y.js} +7 -5
  25. package/dist/{doctor-CHnkbamq.js → doctor-qFe9sXxR.js} +1 -1
  26. package/dist/{executa-destructive-Du7RGJgn.js → executa-destructive-C06mgvfJ.js} +1 -1
  27. package/dist/{executa-dev-DYO87dzg.js → executa-dev-BeYhrj-n.js} +8 -8
  28. package/dist/executa-install-Dnerah9u.js +7 -0
  29. package/dist/{executa-install-DAposiBw.js → executa-install-u0nXcyy7.js} +1 -1
  30. package/dist/{executa-publish-BKnsUoZq.js → executa-publish-BuakG1RK.js} +38 -11
  31. package/dist/{executa-publish-6awuH4Ma.js → executa-publish-CVlMaHIY.js} +3 -3
  32. package/dist/{executa-upload-binaries-FWM2yXfB.js → executa-upload-binaries-BVWs6MFF.js} +2 -2
  33. package/dist/{executa-upload-binaries-DwWQ18Dq.js → executa-upload-binaries-D0JWYOtK.js} +1 -1
  34. package/dist/{listing-meta-DgweMStT.js → listing-meta-rIni8tjd.js} +1 -1
  35. package/dist/{manifest-B_DjigtQ.js → manifest-BCHiC184.js} +49 -3
  36. package/dist/{publish-D5O5JKRb.js → publish-4C5_TgyZ.js} +13 -10
  37. package/dist/{server-Dr_htFv8.js → server-CBx61J7s.js} +91 -1
  38. package/dist/{storage-aii8EyPC.js → storage-CZ4c4ibf.js} +1 -1
  39. package/dist/{working-orchestration-CpBJLs50.js → working-orchestration-BPMFemcH.js} +9 -5
  40. package/package.json +5 -4
  41. package/templates/minimal/manifest.json +0 -1
  42. package/dist/apps-publish-4IIbF2xr.js +0 -17
  43. package/dist/apps-publish-8N9x4VEM.js +0 -272
  44. package/dist/apps-push-CnSeLwdo.js +0 -152
  45. package/dist/bridge-BP28T06H.js +0 -3
  46. package/dist/dev-CnDh2_7r.js +0 -4
  47. package/dist/executa-install-LaAOSkY0.js +0 -7
  48. /package/dist/{confirm-ChZAVrZe.js → confirm-DplLyBSG.js} +0 -0
  49. /package/dist/{dev-account-CfVdGa9j.js → dev-account-IrYL4u4F.js} +0 -0
  50. /package/dist/{dev-app-cache-Dw2JESld.js → dev-app-cache-CScRa7c3.js} +0 -0
  51. /package/dist/{executa-init-DKy7DMSD.js → executa-init-BM0HR-K7.js} +0 -0
  52. /package/dist/{executa-reads-BYKUADoL.js → executa-reads-BJpmB-B1.js} +0 -0
  53. /package/dist/{executa-register-CmqKsoAU.js → executa-register-CDKG3L5c.js} +0 -0
  54. /package/dist/{executa-trusted-publisher-BGqz6hMt.js → executa-trusted-publisher-n9IbAO5D.js} +0 -0
  55. /package/dist/{fixture-BF1Z0Rry.js → fixture-CizypXzX.js} +0 -0
  56. /package/dist/{host_upload-CW_2Fxg6.js → host_upload-BvzJZKAO.js} +0 -0
  57. /package/dist/{image-B4UrufYH.js → image-C61zRJC8.js} +0 -0
  58. /package/dist/{login-DbETuUxy.js → login-BleVDjXE.js} +0 -0
  59. /package/dist/{logout-BzIEf-HU.js → logout-BO4brBaY.js} +0 -0
  60. /package/dist/{runner-Dq3cluPM.js → runner-aq0n-pdr.js} +0 -0
  61. /package/dist/{sampling-BpJcd6BC.js → sampling-BQwF3O-4.js} +0 -0
  62. /package/dist/{token-TgBQumgy.js → token-DeAZLyVz.js} +0 -0
  63. /package/dist/{whoami-Bn38ns8r.js → whoami-rvVc_nQ9.js} +0 -0
@@ -1,10 +1,10 @@
1
1
  import { canonicalHost } from "./credentials-BTv2IfUZ.js";
2
- import { findAppBySlug, getApp } from "./apps-HbfURK6y.js";
2
+ import { findAppBySlug, getApp } from "./apps-BRBufSyX.js";
3
3
  import { CliError } from "./client-sMzq2PWG.js";
4
4
  import { resolveClient, withErrorHandling } from "./_lifecycle-shared-_9BzQ9Y2.js";
5
- import { loadAppManifest } from "./manifest-B_DjigtQ.js";
5
+ import { loadAppManifest } from "./manifest-BCHiC184.js";
6
6
  import { readAppIdentity } from "./app-cache-Cr3tKbux.js";
7
- import { syncAppListingMeta } from "./listing-meta-DgweMStT.js";
7
+ import { syncAppListingMeta } from "./listing-meta-rIni8tjd.js";
8
8
  import { resolve } from "node:path";
9
9
  import { bold, cyan, dim, green } from "kleur/colors";
10
10
 
@@ -1,5 +1,5 @@
1
1
  import "./credentials-BTv2IfUZ.js";
2
- import { findAppBySlug, listVersions } from "./apps-HbfURK6y.js";
2
+ import { findAppBySlug, listVersions } from "./apps-BRBufSyX.js";
3
3
  import { CliError } from "./client-sMzq2PWG.js";
4
4
  import { resolveClient, withErrorHandling } from "./_lifecycle-shared-_9BzQ9Y2.js";
5
5
  import { bold, cyan, dim, green, red, yellow } from "kleur/colors";
@@ -9,7 +9,7 @@ import { createInterface } from "node:readline";
9
9
  * `uvx <pkg>@<version>` so end users always run the dispatcher version
10
10
  * the CLI was tested against.
11
11
  */
12
- const PINNED_RUNTIME_VERSION = "0.2.0a21";
12
+ const PINNED_RUNTIME_VERSION = "0.2.0a23";
13
13
  /**
14
14
  * Throwable from a {@link RequestHandler} to send a structured JSON-RPC
15
15
  * error back to the python bridge with a stable string ``code`` (e.g.
@@ -0,0 +1,3 @@
1
+ import { BridgeRequestError, PINNED_RUNTIME_VERSION, PythonBridge } from "./bridge-Bo8eu3-d.js";
2
+
3
+ export { PINNED_RUNTIME_VERSION, PythonBridge };
package/dist/cli.js CHANGED
@@ -111,18 +111,132 @@ function validateManifestSchema(bundle, manifest) {
111
111
  message: `${e.message ?? "invalid"}${e.params ? " " + JSON.stringify(e.params) : ""}`
112
112
  }));
113
113
  }
114
- const ANNA_CALL_RE = /\banna\.([a-z]+)\.([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/g;
114
+ /**
115
+ * Blank out string-literal and comment contents (same length, newlines
116
+ * kept, so offsets/line numbers stay exact). Template interpolation bodies
117
+ * (`${…}`) are code and are preserved. Regex literals are NOT recognised
118
+ * (the `/` division ambiguity): a quote delimiter inside one can at worst
119
+ * blank the rest of that line — quoted strings cannot span lines — which
120
+ * errs toward missing a call, never toward a false report.
121
+ */
122
+ function stripStringsAndComments(source) {
123
+ const out = source.split("");
124
+ const n = source.length;
125
+ const blank = (idx) => {
126
+ const ch = out[idx];
127
+ if (ch !== "\n" && ch !== "\r") out[idx] = " ";
128
+ };
129
+ const stack = [{
130
+ kind: "code",
131
+ braces: 0
132
+ }];
133
+ let i = 0;
134
+ while (i < n) {
135
+ const top = stack[stack.length - 1];
136
+ const c = source[i];
137
+ if (top.kind === "tpl") {
138
+ if (c === "\\") {
139
+ blank(i);
140
+ if (i + 1 < n) blank(i + 1);
141
+ i += 2;
142
+ continue;
143
+ }
144
+ if (c === "`") {
145
+ blank(i);
146
+ stack.pop();
147
+ i++;
148
+ continue;
149
+ }
150
+ if (c === "$" && source[i + 1] === "{") {
151
+ i += 2;
152
+ stack.push({
153
+ kind: "code",
154
+ braces: 0
155
+ });
156
+ continue;
157
+ }
158
+ blank(i);
159
+ i++;
160
+ continue;
161
+ }
162
+ const next = source[i + 1];
163
+ if (c === "/" && next === "/") {
164
+ while (i < n && source[i] !== "\n") {
165
+ blank(i);
166
+ i++;
167
+ }
168
+ continue;
169
+ }
170
+ if (c === "/" && next === "*") {
171
+ blank(i);
172
+ blank(i + 1);
173
+ i += 2;
174
+ while (i < n && !(source[i] === "*" && source[i + 1] === "/")) {
175
+ blank(i);
176
+ i++;
177
+ }
178
+ if (i < n) {
179
+ blank(i);
180
+ blank(i + 1);
181
+ i += 2;
182
+ }
183
+ continue;
184
+ }
185
+ if (c === "'" || c === "\"") {
186
+ blank(i);
187
+ i++;
188
+ while (i < n && source[i] !== c && source[i] !== "\n") {
189
+ if (source[i] === "\\") {
190
+ blank(i);
191
+ i++;
192
+ if (i < n) blank(i);
193
+ i++;
194
+ continue;
195
+ }
196
+ blank(i);
197
+ i++;
198
+ }
199
+ if (i < n && source[i] === c) {
200
+ blank(i);
201
+ i++;
202
+ }
203
+ continue;
204
+ }
205
+ if (c === "`") {
206
+ blank(i);
207
+ stack.push({ kind: "tpl" });
208
+ i++;
209
+ continue;
210
+ }
211
+ if (c === "{") {
212
+ top.braces++;
213
+ i++;
214
+ continue;
215
+ }
216
+ if (c === "}") {
217
+ if (top.braces > 0) top.braces--;
218
+ else if (stack.length > 1) stack.pop();
219
+ i++;
220
+ continue;
221
+ }
222
+ i++;
223
+ }
224
+ return out.join("");
225
+ }
226
+ const ANNA_CALL_RE = /\banna\s*\.\s*([a-z]+)\s*\.\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/g;
115
227
  function scanHostApiCalls(files) {
116
228
  const out = [];
117
229
  for (const f of files) {
118
- const lines = f.content.split("\n");
119
- for (let i = 0; i < lines.length; i++) {
120
- const line = lines[i];
121
- ANNA_CALL_RE.lastIndex = 0;
122
- let m;
123
- while ((m = ANNA_CALL_RE.exec(line)) !== null) out.push({
230
+ const code = stripStringsAndComments(f.content);
231
+ ANNA_CALL_RE.lastIndex = 0;
232
+ let m;
233
+ let line = 1;
234
+ let cursor = 0;
235
+ while ((m = ANNA_CALL_RE.exec(code)) !== null) {
236
+ for (; cursor < m.index; cursor++) if (code.charCodeAt(cursor) === 10) line++;
237
+ out.push({
124
238
  file: f.path,
125
- line: i + 1,
239
+ line,
126
240
  ns: m[1],
127
241
  method: m[2]
128
242
  });
@@ -237,7 +351,17 @@ function validateUiSectionStatic(manifest) {
237
351
  const cspOverrides = ui.csp_overrides ?? {};
238
352
  const badDirectives = Object.keys(cspOverrides).filter((d) => !CSP_OVERRIDABLE_DIRECTIVES.has(d)).sort();
239
353
  if (badDirectives.length) errors.push(`csp_overrides 含不允许的 directive: ${JSON.stringify(badDirectives)}`);
240
- for (const d of ["script-src", "style-src"]) for (const v of cspOverrides[d] ?? []) if (v !== "'self'" && !v.startsWith("'sha256-") && !v.startsWith("'nonce-")) errors.push(`csp_overrides[${d}] 仅允许 'self' / 'sha256-...' / 'nonce-...': ${v}`);
354
+ for (const d of ["script-src", "style-src"]) {
355
+ const literals = d === "script-src" ? ["'self'", "'wasm-unsafe-eval'"] : ["'self'"];
356
+ for (const v of cspOverrides[d] ?? []) if (!literals.includes(v) && !v.startsWith("'sha256-") && !v.startsWith("'nonce-")) {
357
+ const allowed = [
358
+ ...literals,
359
+ "'sha256-...'",
360
+ "'nonce-...'"
361
+ ].join(" / ");
362
+ errors.push(`csp_overrides[${d}] 仅允许 ${allowed}: ${v}`);
363
+ }
364
+ }
241
365
  return errors;
242
366
  }
243
367
 
@@ -473,8 +597,8 @@ program.command("validate").description("Run schema + ACL checks on a manifest+b
473
597
  const code = printResult(result);
474
598
  process.exit(code);
475
599
  });
476
- program.command("dev").description("Run a local harness (in-process dispatcher + iframe + SSE relay)").option("--manifest <path>", "manifest.json path", "manifest.json").option("--bundle <dir>", "bundle directory (default: ./bundle)").option("--slug <slug>", "App slug (overrides manifest.slug/name)").option("--view <name>", "View name to open (default: manifest default)").option("--matrix-nexus-root <path>", "matrix-nexus checkout (auto-detected if omitted; can also use $ANNA_NEXUS_ROOT)").option("--port <number>", "HTTP port", "5180").option("--user-id <id>", "Harness user_id", "1").option("--cwd <dir>", "Project root (default: cwd)").option("--no-watch", "Disable bundle file watcher (default: enabled)").option("--executa <spec>", "Explicit executa registration; repeatable. Spec: comma-separated key=value (dir=<path>[,tool_id=<id>][,type=python|node|go|binary][,command=\"<argv>\"]). When only `dir=` is given, the executa is auto-detected from executa.json / pyproject.toml / package.json / go.mod. Overrides directory auto-discovery under <manifest-dir>/executas/.", (val, prev) => prev ? [...prev, val] : [val]).option("--no-llm", "Disable LLM bridge (anna.llm/agent return llm_disabled)").option("--mock-llm <fixture>", "Serve canned LLM responses from a JSONL fixture").option("--llm-account <host>", "Saved account host to use (default: current)").option("--llm-app-slug <slug>", "Override the manifest slug used to register / look up the dev AnnaApp (default: manifest.slug)").option("--storage <mode>", "Storage backend: \"legacy\" (in-memory runtime_state, default) or \"aps\" (real nexus APS via /api/v1/storage/* — requires `anna-app login`).", "legacy").option("--web <mode>", "Web backend: \"local\" (keyless ddgs + stdlib fetcher, free, default) or \"real\" (platform web service via /api/v1/copilot/app/web/* — production provider chain + normal CU billing; requires `anna-app login`).", "local").action(async (opts) => {
477
- const { runDev, parseExecutaSpec } = await import("./dev-CnDh2_7r.js");
600
+ program.command("dev").description("Run a local harness (in-process dispatcher + iframe + SSE relay)").option("--manifest <path>", "manifest.json path", "manifest.json").option("--bundle <dir>", "bundle directory (default: ./bundle)").option("--slug <slug>", "App slug (overrides manifest.slug/name)").option("--view <name>", "View name to open (default: manifest default)").option("--matrix-nexus-root <path>", "matrix-nexus checkout (auto-detected if omitted; can also use $ANNA_NEXUS_ROOT)").option("--port <number>", "HTTP port", "5180").option("--user-id <id>", "Harness user_id", "1").option("--cwd <dir>", "Project root (default: cwd)").option("--no-watch", "Disable bundle file watcher (default: enabled)").option("--executa <spec>", "Explicit executa registration; repeatable. Spec: comma-separated key=value (dir=<path>[,tool_id=<id>][,type=python|node|go|binary][,command=\"<argv>\"]). When only `dir=` is given, the executa is auto-detected from executa.json / pyproject.toml / package.json / go.mod. Overrides directory auto-discovery under <manifest-dir>/executas/.", (val, prev) => prev ? [...prev, val] : [val]).option("--no-llm", "Disable LLM bridge (anna.llm/agent return llm_disabled)").option("--mock-llm <fixture>", "Serve canned LLM responses from a JSONL fixture").option("--llm-account <host>", "Saved account host to use (default: current)").option("--llm-app-slug <slug>", "Override the manifest slug used to register / look up the dev AnnaApp (default: manifest.slug)").option("--storage <mode>", "Storage backend: \"legacy\" (in-memory runtime_state, default) or \"aps\" (real nexus APS via /api/v1/storage/* — requires `anna-app login`).", "legacy").option("--no-strict-caps", "Downgrade the production-parity storage capability gate to a warning (by default, storage/* fails with -32021 when host_capabilities declares no aps.* entry — exactly like production).").option("--web <mode>", "Web backend: \"local\" (keyless ddgs + stdlib fetcher, free, default) or \"real\" (platform web service via /api/v1/copilot/app/web/* — production provider chain + normal CU billing; requires `anna-app login`).", "local").action(async (opts) => {
601
+ const { runDev, parseExecutaSpec } = await import("./dev-CQIZHt7u.js");
478
602
  const cwd = opts.cwd ?? process.cwd();
479
603
  let executas;
480
604
  if (opts.executa && opts.executa.length > 0) {
@@ -504,13 +628,14 @@ program.command("dev").description("Run a local harness (in-process dispatcher +
504
628
  llmAccount: opts.llmAccount,
505
629
  llmAppSlug: opts.llmAppSlug,
506
630
  storageMode: opts.storage,
631
+ strictCaps: opts.strictCaps !== false,
507
632
  webMode: opts.web
508
633
  });
509
634
  process.exit(code);
510
635
  });
511
636
  const fixture = program.command("fixture").description("Inspect / replay harness recordings (Phase 6)");
512
637
  fixture.command("verify <file>").description("Schema + invariant checks on a harness JSONL recording").option("--json", "Emit machine-readable JSON", false).action(async (file, opts) => {
513
- const { runFixtureVerify } = await import("./fixture-BF1Z0Rry.js");
638
+ const { runFixtureVerify } = await import("./fixture-CizypXzX.js");
514
639
  const code = await runFixtureVerify({
515
640
  file,
516
641
  json: opts.json
@@ -518,7 +643,7 @@ fixture.command("verify <file>").description("Schema + invariant checks on a har
518
643
  process.exit(code);
519
644
  });
520
645
  fixture.command("summarize <file>").description("Print a human-readable digest of a harness recording").option("--json", "Emit machine-readable JSON", false).action(async (file, opts) => {
521
- const { runFixtureSummarize } = await import("./fixture-BF1Z0Rry.js");
646
+ const { runFixtureSummarize } = await import("./fixture-CizypXzX.js");
522
647
  const code = await runFixtureSummarize({
523
648
  file,
524
649
  json: opts.json
@@ -526,7 +651,7 @@ fixture.command("summarize <file>").description("Print a human-readable digest o
526
651
  process.exit(code);
527
652
  });
528
653
  fixture.command("replay <file>").description("Dry-run replay of a harness recording (Phase 6 MVP)").option("--manifest <path>", "manifest.json path", "manifest.json").action(async (file, opts) => {
529
- const { runFixtureReplay } = await import("./fixture-BF1Z0Rry.js");
654
+ const { runFixtureReplay } = await import("./fixture-CizypXzX.js");
530
655
  const code = await runFixtureReplay({
531
656
  file,
532
657
  manifest: opts.manifest
@@ -534,12 +659,12 @@ fixture.command("replay <file>").description("Dry-run replay of a harness record
534
659
  process.exit(code);
535
660
  });
536
661
  program.command("doctor").description("Check environment for `anna-app dev` (uv, matrix-nexus, dev key)").option("--matrix-nexus-root <path>", "matrix-nexus checkout (optional)").action(async (opts) => {
537
- const { runDoctor } = await import("./doctor-CHnkbamq.js");
662
+ const { runDoctor } = await import("./doctor-qFe9sXxR.js");
538
663
  const code = await runDoctor({ matrixNexusRoot: opts.matrixNexusRoot });
539
664
  process.exit(code);
540
665
  });
541
666
  program.command("login").description("Device-flow login against a nexus host; saves a PAT to ~/.config/anna/credentials.json").requiredOption("--host <url>", "nexus base URL, e.g. https://nexus.example.com").option("--no-browser", "Do not open a browser window automatically", false).action(async (opts) => {
542
- const { runLogin } = await import("./login-DbETuUxy.js");
667
+ const { runLogin } = await import("./login-BleVDjXE.js");
543
668
  const code = await runLogin({
544
669
  host: opts.host,
545
670
  noBrowser: opts.browser === false
@@ -547,7 +672,7 @@ program.command("login").description("Device-flow login against a nexus host; sa
547
672
  process.exit(code);
548
673
  });
549
674
  program.command("logout").description("Remove a saved PAT entry").option("--host <url>", "Account to remove (default: current)").option("--all", "Remove every saved account", false).action(async (opts) => {
550
- const { runLogout } = await import("./logout-BzIEf-HU.js");
675
+ const { runLogout } = await import("./logout-BO4brBaY.js");
551
676
  const code = await runLogout({
552
677
  host: opts.host,
553
678
  all: opts.all
@@ -555,13 +680,13 @@ program.command("logout").description("Remove a saved PAT entry").option("--host
555
680
  process.exit(code);
556
681
  });
557
682
  program.command("whoami").description("Show the current account (and any others)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
558
- const { runWhoami } = await import("./whoami-Bn38ns8r.js");
683
+ const { runWhoami } = await import("./whoami-rvVc_nQ9.js");
559
684
  const code = await runWhoami({ json: opts.json });
560
685
  process.exit(code);
561
686
  });
562
687
  const account = program.command("account").description("Manage your developer account (handle / namespace)");
563
688
  account.command("set-handle <handle>").description("Set or rename your developer handle — the @handle namespace your apps publish under (@handle/slug). Required before creating your first app.").option("--host <url>", "Account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (handle, opts) => {
564
- const { runAccountSetHandle } = await import("./account-CPnwqXeh.js");
689
+ const { runAccountSetHandle } = await import("./account-C-IeQNNr.js");
565
690
  const code = await runAccountSetHandle({
566
691
  handle,
567
692
  account: opts.host,
@@ -581,7 +706,7 @@ executa.command("init <dir>").description("Scaffold a standalone Executa plugin
581
706
  console.error(`✗ unknown template "${opts.template}" — expected python | node | go`);
582
707
  process.exit(2);
583
708
  }
584
- const { runExecutaInit } = await import("./executa-init-DKy7DMSD.js");
709
+ const { runExecutaInit } = await import("./executa-init-BM0HR-K7.js");
585
710
  const code = runExecutaInit({
586
711
  targetDir: dir,
587
712
  slug,
@@ -592,12 +717,12 @@ executa.command("init <dir>").description("Scaffold a standalone Executa plugin
592
717
  process.exit(code);
593
718
  });
594
719
  executa.command("register").description("Register a HARNESS AnnaApp(kind=executa) so `executa dev --storage real` (and agent / sampling / image / upload real-mode flows) can mint tokens for a local executa subprocess. Does NOT publish the executa itself — use `executa publish` for that. Lists/deletes via `apps list` / `apps delete`.").requiredOption("--tool-id <id>", "Executa tool_id (matches executa.json tool_id / executable_name)").option("--slug <slug>", "App slug (default: executa-<tool_id>; must be lowercase + hyphens)").option("--name <name>", "Human-readable display name (default: <tool_id>)").option("--account <host>", "Saved account host (default: current)").action(async (opts) => {
595
- const { runExecutaRegister } = await import("./executa-register-CmqKsoAU.js");
720
+ const { runExecutaRegister } = await import("./executa-register-CDKG3L5c.js");
596
721
  const code = await runExecutaRegister(opts);
597
722
  process.exit(code);
598
723
  });
599
724
  executa.command("install").description("Install a local-dev shim for an Executa under its minted tool_id so the Agent can discover it via 'Rediscover Local' (for distribution_type: local). Resolves the tool_id from .anna/executa.json (written by `executa publish` / `apps push`) unless --tool-id is given.").option("--dir <path>", "Executa project dir (default: CWD)").option("--tool-id <id>", "Install the shim under this exact id (default: minted id from .anna/executa.json, else executa.json tool_id)").option("--bin-dir <path>", "Install dir for the shim (default: ~/.anna/executa/bin)").option("--force", "Overwrite an existing shim of the same name", false).option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
600
- const { runExecutaInstall } = await import("./executa-install-LaAOSkY0.js");
725
+ const { runExecutaInstall } = await import("./executa-install-Dnerah9u.js");
601
726
  const code = await runExecutaInstall({
602
727
  dir: opts.dir,
603
728
  toolId: opts.toolId,
@@ -608,7 +733,7 @@ executa.command("install").description("Install a local-dev shim for an Executa
608
733
  process.exit(code);
609
734
  });
610
735
  executa.command("dev").description("Run one Executa plugin in isolation (REPL or one-shot describe/invoke)").option("--dir <path>", "Executa project dir (default: CWD)").option("--spec <spec>", "Override discovery: comma-separated key=value (tool_id=...,type=...,command=\"...\")").option("--describe", "Print MANIFEST and exit", false).option("--health", "Print health and exit", false).option("--invoke <tool>", "Invoke one tool and exit").option("--args <json>", "JSON object passed as tool arguments", "{}").option("--json", "One-shot: emit compact JSON (no banners)", false).option("--no-sampling", "Hard-disable sampling reverse RPC (returns sampling_disabled)").option("--mock-sampling <fixture>", "Serve canned sampling responses from a JSONL fixture (offline)").option("--sampling-unsupported-format", "Simulate a model without json_schema support — exercises responseFormat onUnsupported branches (-32010 / downgrade)").option("--app-slug <slug>", "Forward sampling to nexus on behalf of this dev AnnaApp slug").option("--sampling-account <host>", "Saved account host for nexus sampling (default: current)").option("--no-agent", "Hard-disable agent reverse RPC (returns agent_not_granted)").option("--mock-agent <fixture>", "Serve canned agent/* responses from a JSONL fixture (offline)").option("--agent-account <host>", "Saved account host for nexus agent (default: --sampling-account or current)").option("--storage <mode>", "Storage backend: off | memory | mock | real (default: memory)").option("--mock-storage <fixture>", "Serve canned storage/* + files/* responses from a JSONL fixture").option("--storage-account <host>", "Saved account host for nexus storage (default: --sampling-account or current)").option("--storage-scopes <list>", "Comma-separated scopes for real storage tokens (default: user,app,tool)").option("--no-image", "Hard-disable image reverse RPC (returns image_not_granted)").option("--mock-image <fixture>", "Serve canned image/generate + image/edit responses from a JSONL fixture").option("--image-account <host>", "Saved account host for nexus image (default: --sampling-account or current)").option("--no-upload", "Hard-disable host/uploadFile reverse RPC (returns upload_not_granted)").option("--mock-upload <fixture>", "Serve canned host/uploadFile responses from a JSONL fixture").option("--upload-account <host>", "Saved account host for nexus uploads (default: --sampling-account or current)").action(async (opts) => {
611
- const { runExecutaDev } = await import("./executa-dev-DYO87dzg.js");
736
+ const { runExecutaDev } = await import("./executa-dev-BeYhrj-n.js");
612
737
  const storageMode = opts.storage === void 0 ? void 0 : (() => {
613
738
  const m = opts.storage;
614
739
  if (m === "off" || m === "memory" || m === "mock" || m === "real") return m;
@@ -646,14 +771,14 @@ executa.command("dev").description("Run one Executa plugin in isolation (REPL or
646
771
  });
647
772
  const apps = program.command("apps").description("Anna App publish lifecycle commands");
648
773
  apps.command("list").description("List the Anna Apps you authored, with lifecycle status").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
649
- const { runAppsList } = await import("./apps-CzqMRLbS.js");
774
+ const { runAppsList } = await import("./apps-CTIiH6a_.js");
650
775
  process.exit(await runAppsList({
651
776
  account: opts.account,
652
777
  json: opts.json
653
778
  }));
654
779
  });
655
780
  apps.command("rename-slug <new-slug>").description("Rename an app's public slug (DRAFT/REJECTED, never-published, zero installs only). Updates local app.json + .anna/app.json on success.").option("--cwd <dir>", "Project root (default: cwd)").option("--manifest <path>", "manifest.json path", "manifest.json").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (newSlug, opts) => {
656
- const { runAppsRenameSlug } = await import("./apps-rename-slug-CCEU_7JJ.js");
781
+ const { runAppsRenameSlug } = await import("./apps-rename-slug-4_5lsDwg.js");
657
782
  process.exit(await runAppsRenameSlug({
658
783
  newSlug,
659
784
  cwd: opts.cwd,
@@ -662,7 +787,7 @@ apps.command("rename-slug <new-slug>").description("Rename an app's public slug
662
787
  json: opts.json
663
788
  }));
664
789
  });
665
- apps.command("publish").description("Publish or update an Anna App (manifest.json in cwd)").option("--cwd <dir>", "Project root (default: cwd)").option("--manifest <path>", "manifest.json path", "manifest.json").option("--bump <kind>", "Bump version: patch|minor|major").option("--no-write", "Skip writing the bumped version back to disk", false).option("--dry-run", "Resolve identity + diff but don't upload", false).option("--executa-id <handle=id>", "Override a bundled executa handle with a real tool_id (repeatable)", (val, prev) => [...prev, val], []).option("--skip-executa-publish", "Use cached/overridden tool_ids; don't recursively publish bundled executas", false).option("--no-bundled-executas", "Disable bundled-executa orchestration (legacy behaviour)").option("--no-bundle", "Skip UI bundle upload even if the manifest declares a UI").option("--bundle-dir <dir>", "UI bundle directory (default: <cwd>/bundle)").option("--profile <name>", "Select a bundled executa `distribution.profiles` entry for this run (overrides each executa.json `active`, e.g. --profile local)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
790
+ apps.command("publish").description("Publish an Anna App version (composite: push + cut, freeze at cut)").option("--cwd <dir>", "Project root (default: cwd)").option("--manifest <path>", "manifest.json path", "manifest.json").option("--bump <kind>", "Bump version: patch|minor|major").option("--no-write", "Skip writing the bumped version back to disk", false).option("--dry-run", "Resolve identity + diff but don't upload", false).option("--executa-id <handle=id>", "Override a bundled executa handle with a real tool_id (repeatable)", (val, prev) => [...prev, val], []).option("--skip-executa-publish", "Use cached/overridden tool_ids; don't recursively publish bundled executas", false).option("--no-bundled-executas", "Disable bundled-executa orchestration (legacy behaviour)").option("--no-bundle", "Skip UI bundle upload even if the manifest declares a UI").option("--bundle-dir <dir>", "UI bundle directory (default: <cwd>/bundle)").option("--profile <name>", "Select a bundled executa `distribution.profiles` entry for this run (overrides each executa.json `active`, e.g. --profile local)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
666
791
  if (opts.bump && ![
667
792
  "patch",
668
793
  "minor",
@@ -671,7 +796,7 @@ apps.command("publish").description("Publish or update an Anna App (manifest.jso
671
796
  console.error(`✗ --bump must be patch|minor|major (got: ${opts.bump})`);
672
797
  process.exit(2);
673
798
  }
674
- const { runAppsPublish } = await import("./apps-publish-4IIbF2xr.js");
799
+ const { runAppsPublish } = await import("./apps-publish-AdXryRYo.js");
675
800
  process.exit(await runAppsPublish({
676
801
  cwd: opts.cwd,
677
802
  manifest: opts.manifest,
@@ -705,7 +830,7 @@ apps.command("push").description("Upsert the mutable working draft (manifest + b
705
830
  process.exit(2);
706
831
  }
707
832
  }
708
- const { runAppsPush } = await import("./apps-push-CnSeLwdo.js");
833
+ const { runAppsPush } = await import("./apps-push-WBfD0JyE.js");
709
834
  process.exit(await runAppsPush({
710
835
  cwd: opts.cwd,
711
836
  manifest: opts.manifest,
@@ -725,7 +850,7 @@ apps.command("push").description("Upsert the mutable working draft (manifest + b
725
850
  }));
726
851
  });
727
852
  apps.command("cut <version>").description("Snapshot the working draft into an immutable version (freeze deps)").option("--changelog <text>", "Override the working draft changelog for this version").option("--slug <slug>", "App slug (default: resolve from .anna/app.json cache)").option("--cwd <dir>", "Project root for identity cache (default: cwd)").option("--dry-run", "Resolve target but don't cut", false).option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (version, opts) => {
728
- const { runAppsCut } = await import("./apps-cut-BhTJwILv.js");
853
+ const { runAppsCut } = await import("./apps-cut-eOVb1-0y.js");
729
854
  process.exit(await runAppsCut({
730
855
  version,
731
856
  changelog: opts.changelog,
@@ -737,7 +862,7 @@ apps.command("cut <version>").description("Snapshot the working draft into an im
737
862
  }));
738
863
  });
739
864
  apps.command("discard").description("Drop the mutable working draft (leaves cut versions intact)").option("--slug <slug>", "App slug (default: resolve from .anna/app.json cache)").option("--cwd <dir>", "Project root for identity cache (default: cwd)").option("--dry-run", "Resolve target but don't discard", false).option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
740
- const { runAppsDiscard } = await import("./apps-discard-CFi-GzpU.js");
865
+ const { runAppsDiscard } = await import("./apps-discard-7ERq2pmS.js");
741
866
  process.exit(await runAppsDiscard({
742
867
  slug: opts.slug,
743
868
  cwd: opts.cwd,
@@ -747,7 +872,7 @@ apps.command("discard").description("Drop the mutable working draft (leaves cut
747
872
  }));
748
873
  });
749
874
  apps.command("release <version>").description("Freeze & publish an existing remote version (go live)").option("--slug <slug>", "App slug (default: resolve from .anna/app.json cache)").option("--cwd <dir>", "Project root for identity cache (default: cwd)").option("--allow-create", "If the version isn't on the server, run 'apps publish' first, then release", false).option("--dry-run", "Resolve target + pre-flight but don't publish", false).option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (version, opts) => {
750
- const { runAppsRelease } = await import("./apps-release-DGQv6DDl.js");
875
+ const { runAppsRelease } = await import("./apps-release-DAV-DB_Q.js");
751
876
  process.exit(await runAppsRelease({
752
877
  version,
753
878
  slug: opts.slug,
@@ -759,7 +884,7 @@ apps.command("release <version>").description("Freeze & publish an existing remo
759
884
  }));
760
885
  });
761
886
  apps.command("sync-meta").description("Push mutable store metadata (name/tagline/…) from the manifest").option("--cwd <dir>", "Project root (default: cwd)").option("--manifest <path>", "manifest.json path", "manifest.json").option("--logo <path>", "Local logo file to upload (overrides app.json logo_file)").option("--dry-run", "Print the metadata diff but don't PATCH", false).option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
762
- const { runAppsSyncMeta } = await import("./apps-sync-meta-DnFwFNl5.js");
887
+ const { runAppsSyncMeta } = await import("./apps-sync-meta-BwN8g6TO.js");
763
888
  process.exit(await runAppsSyncMeta({
764
889
  cwd: opts.cwd,
765
890
  manifest: opts.manifest,
@@ -770,7 +895,7 @@ apps.command("sync-meta").description("Push mutable store metadata (name/tagline
770
895
  }));
771
896
  });
772
897
  apps.command("submit-review [slug]").description("Move an app into review (DRAFT/REJECTED → PENDING_REVIEW)").option("--cwd <dir>", "Project root for identity cache (default: cwd)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (slug, opts) => {
773
- const { runAppsSubmitReview } = await import("./apps-submit-review--hZFZRJ3.js");
898
+ const { runAppsSubmitReview } = await import("./apps-submit-review-CxoKgexX.js");
774
899
  process.exit(await runAppsSubmitReview({
775
900
  slug,
776
901
  cwd: opts.cwd,
@@ -779,7 +904,7 @@ apps.command("submit-review [slug]").description("Move an app into review (DRAFT
779
904
  }));
780
905
  });
781
906
  apps.command("status <slug>").description("Show server-known state for one Anna App").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (slug, opts) => {
782
- const { runAppsStatus } = await import("./apps-status-C4Cxc2DF.js");
907
+ const { runAppsStatus } = await import("./apps-status-hMrRz356.js");
783
908
  process.exit(await runAppsStatus({
784
909
  slug,
785
910
  account: opts.account,
@@ -787,7 +912,7 @@ apps.command("status <slug>").description("Show server-known state for one Anna
787
912
  }));
788
913
  });
789
914
  apps.command("versions <slug>").description("List all server versions of one Anna App").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (slug, opts) => {
790
- const { runAppsVersions } = await import("./apps-versions-C7NzG5Dk.js");
915
+ const { runAppsVersions } = await import("./apps-versions-gfG_sBFv.js");
791
916
  process.exit(await runAppsVersions({
792
917
  slug,
793
918
  account: opts.account,
@@ -795,7 +920,7 @@ apps.command("versions <slug>").description("List all server versions of one Ann
795
920
  }));
796
921
  });
797
922
  apps.command("grants <slug>").description("Show currently granted scopes/quota for one Anna App").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (slug, opts) => {
798
- const { runAppsGrants } = await import("./apps-grants-DqaX8UTy.js");
923
+ const { runAppsGrants } = await import("./apps-grants-DVoSb6-r.js");
799
924
  process.exit(await runAppsGrants({
800
925
  slug,
801
926
  account: opts.account,
@@ -803,7 +928,7 @@ apps.command("grants <slug>").description("Show currently granted scopes/quota f
803
928
  }));
804
929
  });
805
930
  apps.command("unpublish <slug>").description("Flip a PUBLISHED app back to APPROVED (private)").option("--yes", "Acknowledge the destructive operation", false).option("--confirm <slug>", "Slug confirmation (must match target)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (slug, opts) => {
806
- const { runAppsUnpublish } = await import("./apps-destructive-PlaU93EX.js");
931
+ const { runAppsUnpublish } = await import("./apps-destructive-DcG3T1Mx.js");
807
932
  process.exit(await runAppsUnpublish({
808
933
  slug,
809
934
  yes: opts.yes,
@@ -813,7 +938,7 @@ apps.command("unpublish <slug>").description("Flip a PUBLISHED app back to APPRO
813
938
  }));
814
939
  });
815
940
  apps.command("archive <slug>").description("Archive an Anna App (hides it from end users)").option("--yes", "Acknowledge the destructive operation", false).option("--confirm <slug>", "Slug confirmation (must match target)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (slug, opts) => {
816
- const { runAppsArchive } = await import("./apps-destructive-PlaU93EX.js");
941
+ const { runAppsArchive } = await import("./apps-destructive-DcG3T1Mx.js");
817
942
  process.exit(await runAppsArchive({
818
943
  slug,
819
944
  yes: opts.yes,
@@ -823,7 +948,7 @@ apps.command("archive <slug>").description("Archive an Anna App (hides it from e
823
948
  }));
824
949
  });
825
950
  apps.command("unarchive <slug>").description("Restore an archived Anna App back to APPROVED").option("--yes", "Acknowledge the operation", false).option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (slug, opts) => {
826
- const { runAppsUnarchive } = await import("./apps-destructive-PlaU93EX.js");
951
+ const { runAppsUnarchive } = await import("./apps-destructive-DcG3T1Mx.js");
827
952
  process.exit(await runAppsUnarchive({
828
953
  slug,
829
954
  yes: opts.yes,
@@ -832,7 +957,7 @@ apps.command("unarchive <slug>").description("Restore an archived Anna App back
832
957
  }));
833
958
  });
834
959
  apps.command("delete <slug>").description("Hard-delete an Anna App (refused by server if installs exist)").option("--yes", "Acknowledge the destructive operation", false).option("--confirm <slug>", "Slug confirmation (must match target)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (slug, opts) => {
835
- const { runAppsDelete } = await import("./apps-destructive-PlaU93EX.js");
960
+ const { runAppsDelete } = await import("./apps-destructive-DcG3T1Mx.js");
836
961
  process.exit(await runAppsDelete({
837
962
  slug,
838
963
  yes: opts.yes,
@@ -842,14 +967,14 @@ apps.command("delete <slug>").description("Hard-delete an Anna App (refused by s
842
967
  }));
843
968
  });
844
969
  executa.command("list").description("List Executas owned by the current PAT").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
845
- const { runExecutaList } = await import("./executa-reads-BYKUADoL.js");
970
+ const { runExecutaList } = await import("./executa-reads-BJpmB-B1.js");
846
971
  process.exit(await runExecutaList({
847
972
  account: opts.account,
848
973
  json: opts.json
849
974
  }));
850
975
  });
851
976
  executa.command("status <ref>").description("Show server-known state for one Executa (slug or tool_id)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (ref, opts) => {
852
- const { runExecutaStatus } = await import("./executa-reads-BYKUADoL.js");
977
+ const { runExecutaStatus } = await import("./executa-reads-BJpmB-B1.js");
853
978
  process.exit(await runExecutaStatus({
854
979
  ref,
855
980
  account: opts.account,
@@ -857,7 +982,7 @@ executa.command("status <ref>").description("Show server-known state for one Exe
857
982
  }));
858
983
  });
859
984
  executa.command("versions <ref>").description("List immutable version snapshots for one Executa").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (ref, opts) => {
860
- const { runExecutaVersions } = await import("./executa-reads-BYKUADoL.js");
985
+ const { runExecutaVersions } = await import("./executa-reads-BJpmB-B1.js");
861
986
  process.exit(await runExecutaVersions({
862
987
  ref,
863
988
  account: opts.account,
@@ -873,7 +998,7 @@ executa.command("publish").description("Mint or update an Executa (executa.json
873
998
  console.error(`✗ --bump must be patch|minor|major (got: ${opts.bump})`);
874
999
  process.exit(2);
875
1000
  }
876
- const { runExecutaPublish } = await import("./executa-publish-6awuH4Ma.js");
1001
+ const { runExecutaPublish } = await import("./executa-publish-CVlMaHIY.js");
877
1002
  process.exit(await runExecutaPublish({
878
1003
  cwd: opts.cwd,
879
1004
  manifest: opts.manifest,
@@ -887,7 +1012,7 @@ executa.command("publish").description("Mint or update an Executa (executa.json
887
1012
  }));
888
1013
  });
889
1014
  executa.command("upload-binaries").description("Push the local binary_artifacts declared in executa.json straight to the platform CDN (no public source URL needed — works for private repos). Requires a minted identity (.anna/executa.json from `executa publish` / `apps push`) or --tool-id.").option("--dir <path>", "Executa project dir (default: CWD)").option("--dry-run", "Hash artifacts + validate the plan server-side without uploading", false).option("--oidc", "Mint the upload token from the GitHub Actions OIDC id-token instead of a PAT (zero long-term secrets; needs `permissions: id-token: write` and a registered trusted publisher)", false).option("--tool-id <id>", "Explicit tool_id (skip the identity cache)").option("--host <url>", "Nexus host (required with --oidc unless ANNA_APP_HOST is set)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
890
- const { runExecutaUploadBinaries } = await import("./executa-upload-binaries-FWM2yXfB.js");
1015
+ const { runExecutaUploadBinaries } = await import("./executa-upload-binaries-BVWs6MFF.js");
891
1016
  process.exit(await runExecutaUploadBinaries({
892
1017
  dir: opts.dir,
893
1018
  dryRun: opts.dryRun,
@@ -900,11 +1025,11 @@ executa.command("upload-binaries").description("Push the local binary_artifacts
900
1025
  });
901
1026
  const trustedPublisher = executa.command("trusted-publisher").description("Manage the GitHub Actions identities allowed to publish binaries for an executa via OIDC (zero-secret CI; pairs with `executa upload-binaries --oidc`)");
902
1027
  trustedPublisher.command("add").description("Register a {repository, workflow, environment?} triple").requiredOption("--repository <owner/repo>", "GitHub repository").requiredOption("--workflow <file>", "Workflow file, e.g. \"publish.yml\"").option("--environment <name>", "GitHub Environment gate (default: any)").option("--dir <path>", "Executa project dir (default: CWD)").option("--tool-id <id>", "Explicit tool_id (skip the identity cache)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
903
- const { runTrustedPublisherAdd } = await import("./executa-trusted-publisher-BGqz6hMt.js");
1028
+ const { runTrustedPublisherAdd } = await import("./executa-trusted-publisher-n9IbAO5D.js");
904
1029
  process.exit(await runTrustedPublisherAdd(opts));
905
1030
  });
906
1031
  trustedPublisher.command("list").description("List registered trusted publishers").option("--dir <path>", "Executa project dir (default: CWD)").option("--tool-id <id>", "Explicit tool_id (skip the identity cache)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
907
- const { runTrustedPublisherList } = await import("./executa-trusted-publisher-BGqz6hMt.js");
1032
+ const { runTrustedPublisherList } = await import("./executa-trusted-publisher-n9IbAO5D.js");
908
1033
  process.exit(await runTrustedPublisherList(opts));
909
1034
  });
910
1035
  trustedPublisher.command("remove <publisher-id>").description("Remove a trusted publisher registration by id").option("--dir <path>", "Executa project dir (default: CWD)").option("--tool-id <id>", "Explicit tool_id (skip the identity cache)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (publisherId, opts) => {
@@ -913,14 +1038,14 @@ trustedPublisher.command("remove <publisher-id>").description("Remove a trusted
913
1038
  console.error(`✗ publisher-id must be a positive integer (got "${publisherId}")`);
914
1039
  process.exit(2);
915
1040
  }
916
- const { runTrustedPublisherRemove } = await import("./executa-trusted-publisher-BGqz6hMt.js");
1041
+ const { runTrustedPublisherRemove } = await import("./executa-trusted-publisher-n9IbAO5D.js");
917
1042
  process.exit(await runTrustedPublisherRemove({
918
1043
  ...opts,
919
1044
  publisherId: id
920
1045
  }));
921
1046
  });
922
1047
  executa.command("unpublish <slug>").description("Flip an Executa's visibility back to private").option("--yes", "Acknowledge the destructive operation", false).option("--confirm <slug>", "Slug confirmation (must match target)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (slug, opts) => {
923
- const { runExecutaUnpublish } = await import("./executa-destructive-Du7RGJgn.js");
1048
+ const { runExecutaUnpublish } = await import("./executa-destructive-C06mgvfJ.js");
924
1049
  process.exit(await runExecutaUnpublish({
925
1050
  slug,
926
1051
  yes: opts.yes,
@@ -930,7 +1055,7 @@ executa.command("unpublish <slug>").description("Flip an Executa's visibility ba
930
1055
  }));
931
1056
  });
932
1057
  executa.command("yank <ref>").description("Hard-delete one Executa version (<slug>@<version>)").option("--yes", "Acknowledge the destructive operation", false).option("--confirm <slug>", "Slug confirmation (must match target)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (ref, opts) => {
933
- const { runExecutaYank } = await import("./executa-destructive-Du7RGJgn.js");
1058
+ const { runExecutaYank } = await import("./executa-destructive-C06mgvfJ.js");
934
1059
  process.exit(await runExecutaYank({
935
1060
  ref,
936
1061
  yes: opts.yes,
@@ -940,7 +1065,7 @@ executa.command("yank <ref>").description("Hard-delete one Executa version (<slu
940
1065
  }));
941
1066
  });
942
1067
  executa.command("delete <slug>").description("Hard-delete an Executa").option("--yes", "Acknowledge the destructive operation", false).option("--confirm <slug>", "Slug confirmation (must match target)").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (slug, opts) => {
943
- const { runExecutaDelete } = await import("./executa-destructive-Du7RGJgn.js");
1068
+ const { runExecutaDelete } = await import("./executa-destructive-C06mgvfJ.js");
944
1069
  process.exit(await runExecutaDelete({
945
1070
  slug,
946
1071
  yes: opts.yes,
@@ -965,7 +1090,7 @@ executa.command("cache-clear").description("Delete the local `.anna/executa.json
965
1090
  });
966
1091
  const token = program.command("token").description("Manage developer PATs (list / revoke / scopes)");
967
1092
  token.command("list").description("List the caller's PATs (most-recent first)").option("--include-revoked", "Also show revoked PATs", false).option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
968
- const { runTokenList } = await import("./token-TgBQumgy.js");
1093
+ const { runTokenList } = await import("./token-DeAZLyVz.js");
969
1094
  process.exit(await runTokenList({
970
1095
  includeRevoked: opts.includeRevoked,
971
1096
  account: opts.account,
@@ -978,7 +1103,7 @@ token.command("revoke <id>").description("Revoke one of the caller's PATs by id"
978
1103
  console.error(`✗ token id must be a positive integer (got: ${id})`);
979
1104
  process.exit(2);
980
1105
  }
981
- const { runTokenRevoke } = await import("./token-TgBQumgy.js");
1106
+ const { runTokenRevoke } = await import("./token-DeAZLyVz.js");
982
1107
  process.exit(await runTokenRevoke({
983
1108
  id: idNum,
984
1109
  account: opts.account,
@@ -986,7 +1111,7 @@ token.command("revoke <id>").description("Revoke one of the caller's PATs by id"
986
1111
  }));
987
1112
  });
988
1113
  token.command("scopes").description("Print the available PAT scope catalogue").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
989
- const { runTokenScopes } = await import("./token-TgBQumgy.js");
1114
+ const { runTokenScopes } = await import("./token-DeAZLyVz.js");
990
1115
  process.exit(await runTokenScopes({
991
1116
  account: opts.account,
992
1117
  json: opts.json
@@ -1001,7 +1126,7 @@ program.command("publish").description("Auto-detect cwd and publish (apps publis
1001
1126
  console.error(`✗ --bump must be patch|minor|major (got: ${opts.bump})`);
1002
1127
  process.exit(2);
1003
1128
  }
1004
- const { runTopLevelPublish } = await import("./publish-D5O5JKRb.js");
1129
+ const { runTopLevelPublish } = await import("./publish-4C5_TgyZ.js");
1005
1130
  process.exit(await runTopLevelPublish({
1006
1131
  cwd: opts.cwd,
1007
1132
  bump: opts.bump,
@@ -0,0 +1,4 @@
1
+ import "./nexus-root-BlPwOusj.js";
2
+ import { parseExecutaSpec, runDev } from "./dev-uagVfV9Y.js";
3
+
4
+ export { parseExecutaSpec, runDev };