@anna-ai/cli 0.1.33 → 0.1.35
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/dist/{_lifecycle-shared-CUK2CE76.js → _lifecycle-shared-RyiRITI5.js} +4 -2
- package/dist/{account-bqao7Gp5.js → account-B4rdVDyg.js} +1 -1
- package/dist/{agent-CzPryLi6.js → agent-DAOr_aiE.js} +1 -1
- package/dist/{app-bundle-upload-CqT9KUOl.js → app-bundle-upload-DmVKWAj9.js} +3 -3
- package/dist/{apps-dvknZYI2.js → apps-C_Oln_om.js} +1 -1
- package/dist/apps-cut-MjSe2ph7.js +159 -0
- package/dist/{apps-destructive-B6RFjokU.js → apps-destructive-a2YBmWFm.js} +2 -2
- package/dist/{apps-discard-hVZxAQyj.js → apps-discard-BWLVVMu7.js} +12 -10
- package/dist/{apps-grants-DnXCnkH5.js → apps-grants-lmllFB02.js} +1 -1
- package/dist/{apps-publish-BKqVsS1W.js → apps-publish--EmBa0zN.js} +8 -7
- package/dist/apps-publish-B7reDBe1.js +17 -0
- package/dist/{apps-push-B3wZr9B4.js → apps-push-CkJ1gtpy.js} +16 -12
- package/dist/{apps-release-CyAPmWPU.js → apps-release-J-Sjkoym.js} +3 -3
- package/dist/{apps-rename-slug-D2BrWasG.js → apps-rename-slug-DYrk4Zpt.js} +3 -3
- package/dist/{apps-status-DV8V_y35.js → apps-status-CcCoYu6i.js} +1 -1
- package/dist/{apps-submit-review-DMFQI8JZ.js → apps-submit-review-DNrQc2ws.js} +2 -2
- package/dist/{apps-sync-meta-BOb6J_wz.js → apps-sync-meta-CL2PCMCv.js} +6 -4
- package/dist/{apps-versions-D1lixrmM.js → apps-versions-2BR8xo7C.js} +1 -1
- package/dist/binary-upload-CKMU5Rfw.js +181 -0
- package/dist/bridge-CzeSuRRL.js +3 -0
- package/dist/{bridge-CbjqAm0H.js → bridge-Dvck0e9c.js} +1 -1
- package/dist/{bundled-executas-06keEPP_.js → bundled-executas-Bp9Z6aiR.js} +1 -1
- package/dist/cli.js +80 -44
- package/dist/dev-CZLOk2qE.js +4 -0
- package/dist/{dev-Re6NyNDS.js → dev-GUFWek03.js} +5 -5
- package/dist/{dev-app-cache-Dv1dZ_bw.js → dev-app-cache-B3Wa5t6X.js} +18 -3
- package/dist/{doctor-VrfEkedz.js → doctor-C3Nx8E2L.js} +1 -1
- package/dist/{executa-cache-B0O79Hpb.js → executa-cache-WBkCLic7.js} +1 -1
- package/dist/{executa-destructive-Bz7vWxEO.js → executa-destructive-DCfQ1ez5.js} +3 -3
- package/dist/{executa-dev-B5Uz982M.js → executa-dev-CAw5X64R.js} +8 -8
- package/dist/{executa-install-BW9jjY7u.js → executa-install-Dz7hBUsn.js} +2 -2
- package/dist/executa-install-nOFLBwxv.js +7 -0
- package/dist/executa-publish-B_7k1gOf.js +11 -0
- package/dist/{executa-publish-Ah6J7jYd.js → executa-publish-kh4Ucd3o.js} +21 -5
- package/dist/{executa-reads-BXDJWWw6.js → executa-reads-BmwT_Yjp.js} +2 -2
- package/dist/executa-trusted-publisher-tVwzjI2d.js +91 -0
- package/dist/executa-upload-binaries-DURJTXRI.js +277 -0
- package/dist/executa-upload-binaries-DrwpzQp3.js +9 -0
- package/dist/{listing-meta-BlY7XMrw.js → listing-meta-CtVtyaWu.js} +13 -4
- package/dist/{manifest-DOMrcdCK.js → manifest-CAF3_r1T.js} +88 -11
- package/dist/{publish-GpvkaBIx.js → publish-DwIJWl46.js} +12 -10
- package/dist/{server-BMcGaUTy.js → server-BHWGGZsf.js} +1 -1
- package/dist/{storage-BkF4XyI0.js → storage-aii8EyPC.js} +1 -1
- package/dist/{token-uedeaAy7.js → token-COnYMRB-.js} +1 -1
- package/dist/{working-orchestration-1jzRuk34.js → working-orchestration-D7cW2Bf2.js} +7 -6
- package/package.json +1 -1
- package/dist/apps-cut-8870xpk-.js +0 -86
- package/dist/apps-publish-Djpw5cfG.js +0 -15
- package/dist/bridge-CzHB_IsQ.js +0 -3
- package/dist/dev-C3yWhzAp.js +0 -4
- package/dist/executa-install-Cyid8R7r.js +0 -7
- package/dist/executa-publish-DI_6M_ea.js +0 -9
- /package/dist/{app-cache-BqnTkxUw.js → app-cache-Cr3tKbux.js} +0 -0
- /package/dist/{bundled-executas-_H1A9M50.js → bundled-executas-rSIkaA6-.js} +0 -0
- /package/dist/{confirm-BuT56E_B.js → confirm-BSoOy1X2.js} +0 -0
- /package/dist/{dev-account-DqEFCmVg.js → dev-account-CfVdGa9j.js} +0 -0
- /package/dist/{executa-cache-Do1D7xC0.js → executa-cache-BFoUtb4J.js} +0 -0
- /package/dist/{executa-init-D-kWINZ3.js → executa-init-DKy7DMSD.js} +0 -0
- /package/dist/{executa-register-D5kvSSz_.js → executa-register-CmqKsoAU.js} +0 -0
- /package/dist/{executas-BhFed1B-.js → executas-CvQY_w2U.js} +0 -0
- /package/dist/{fixture-BUKQYR5e.js → fixture-BF1Z0Rry.js} +0 -0
- /package/dist/{host_upload-BVzAqvX1.js → host_upload-DrbQ-vk2.js} +0 -0
- /package/dist/{image-BLPyUbGQ.js → image-B4UrufYH.js} +0 -0
- /package/dist/{login-DhgBgsfx.js → login-DbETuUxy.js} +0 -0
- /package/dist/{logout-VYDkLYAx.js → logout-BzIEf-HU.js} +0 -0
- /package/dist/{runner-BxYjAmih.js → runner-Bka_coxb.js} +0 -0
- /package/dist/{sampling-XBIEYU4A.js → sampling-BpJcd6BC.js} +0 -0
- /package/dist/{whoami-C_x26b_k.js → whoami-Bn38ns8r.js} +0 -0
|
@@ -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.
|
|
12
|
+
const PINNED_RUNTIME_VERSION = "0.2.0a12";
|
|
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.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./credentials-BTv2IfUZ.js";
|
|
2
2
|
import "./client-D-_z1ALk.js";
|
|
3
|
-
import { collectBundledHandles, lockPath, parseExecutaIdOverrides, readExecutasLock, substituteBundledRefs, validateBundledHandles, writeBundleToolIdSidecar, writeExecutasLock } from "./bundled-executas-
|
|
3
|
+
import { collectBundledHandles, lockPath, parseExecutaIdOverrides, readExecutasLock, substituteBundledRefs, validateBundledHandles, writeBundleToolIdSidecar, writeExecutasLock } from "./bundled-executas-rSIkaA6-.js";
|
|
4
4
|
|
|
5
5
|
export { substituteBundledRefs, writeBundleToolIdSidecar };
|
package/dist/cli.js
CHANGED
|
@@ -470,7 +470,7 @@ program.command("validate").description("Run schema + ACL checks on a manifest+b
|
|
|
470
470
|
process.exit(code);
|
|
471
471
|
});
|
|
472
472
|
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").action(async (opts) => {
|
|
473
|
-
const { runDev, parseExecutaSpec } = await import("./dev-
|
|
473
|
+
const { runDev, parseExecutaSpec } = await import("./dev-CZLOk2qE.js");
|
|
474
474
|
const cwd = opts.cwd ?? process.cwd();
|
|
475
475
|
let executas;
|
|
476
476
|
if (opts.executa && opts.executa.length > 0) {
|
|
@@ -505,7 +505,7 @@ program.command("dev").description("Run a local harness (in-process dispatcher +
|
|
|
505
505
|
});
|
|
506
506
|
const fixture = program.command("fixture").description("Inspect / replay harness recordings (Phase 6)");
|
|
507
507
|
fixture.command("verify <file>").description("Schema + invariant checks on a harness JSONL recording").option("--json", "Emit machine-readable JSON", false).action(async (file, opts) => {
|
|
508
|
-
const { runFixtureVerify } = await import("./fixture-
|
|
508
|
+
const { runFixtureVerify } = await import("./fixture-BF1Z0Rry.js");
|
|
509
509
|
const code = await runFixtureVerify({
|
|
510
510
|
file,
|
|
511
511
|
json: opts.json
|
|
@@ -513,7 +513,7 @@ fixture.command("verify <file>").description("Schema + invariant checks on a har
|
|
|
513
513
|
process.exit(code);
|
|
514
514
|
});
|
|
515
515
|
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) => {
|
|
516
|
-
const { runFixtureSummarize } = await import("./fixture-
|
|
516
|
+
const { runFixtureSummarize } = await import("./fixture-BF1Z0Rry.js");
|
|
517
517
|
const code = await runFixtureSummarize({
|
|
518
518
|
file,
|
|
519
519
|
json: opts.json
|
|
@@ -521,7 +521,7 @@ fixture.command("summarize <file>").description("Print a human-readable digest o
|
|
|
521
521
|
process.exit(code);
|
|
522
522
|
});
|
|
523
523
|
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) => {
|
|
524
|
-
const { runFixtureReplay } = await import("./fixture-
|
|
524
|
+
const { runFixtureReplay } = await import("./fixture-BF1Z0Rry.js");
|
|
525
525
|
const code = await runFixtureReplay({
|
|
526
526
|
file,
|
|
527
527
|
manifest: opts.manifest
|
|
@@ -529,12 +529,12 @@ fixture.command("replay <file>").description("Dry-run replay of a harness record
|
|
|
529
529
|
process.exit(code);
|
|
530
530
|
});
|
|
531
531
|
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) => {
|
|
532
|
-
const { runDoctor } = await import("./doctor-
|
|
532
|
+
const { runDoctor } = await import("./doctor-C3Nx8E2L.js");
|
|
533
533
|
const code = await runDoctor({ matrixNexusRoot: opts.matrixNexusRoot });
|
|
534
534
|
process.exit(code);
|
|
535
535
|
});
|
|
536
536
|
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) => {
|
|
537
|
-
const { runLogin } = await import("./login-
|
|
537
|
+
const { runLogin } = await import("./login-DbETuUxy.js");
|
|
538
538
|
const code = await runLogin({
|
|
539
539
|
host: opts.host,
|
|
540
540
|
noBrowser: opts.browser === false
|
|
@@ -542,7 +542,7 @@ program.command("login").description("Device-flow login against a nexus host; sa
|
|
|
542
542
|
process.exit(code);
|
|
543
543
|
});
|
|
544
544
|
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) => {
|
|
545
|
-
const { runLogout } = await import("./logout-
|
|
545
|
+
const { runLogout } = await import("./logout-BzIEf-HU.js");
|
|
546
546
|
const code = await runLogout({
|
|
547
547
|
host: opts.host,
|
|
548
548
|
all: opts.all
|
|
@@ -550,13 +550,13 @@ program.command("logout").description("Remove a saved PAT entry").option("--host
|
|
|
550
550
|
process.exit(code);
|
|
551
551
|
});
|
|
552
552
|
program.command("whoami").description("Show the current account (and any others)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
|
|
553
|
-
const { runWhoami } = await import("./whoami-
|
|
553
|
+
const { runWhoami } = await import("./whoami-Bn38ns8r.js");
|
|
554
554
|
const code = await runWhoami({ json: opts.json });
|
|
555
555
|
process.exit(code);
|
|
556
556
|
});
|
|
557
557
|
const account = program.command("account").description("Manage your developer account (handle / namespace)");
|
|
558
558
|
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) => {
|
|
559
|
-
const { runAccountSetHandle } = await import("./account-
|
|
559
|
+
const { runAccountSetHandle } = await import("./account-B4rdVDyg.js");
|
|
560
560
|
const code = await runAccountSetHandle({
|
|
561
561
|
handle,
|
|
562
562
|
account: opts.host,
|
|
@@ -576,7 +576,7 @@ executa.command("init <dir>").description("Scaffold a standalone Executa plugin
|
|
|
576
576
|
console.error(`✗ unknown template "${opts.template}" — expected python | node | go`);
|
|
577
577
|
process.exit(2);
|
|
578
578
|
}
|
|
579
|
-
const { runExecutaInit } = await import("./executa-init-
|
|
579
|
+
const { runExecutaInit } = await import("./executa-init-DKy7DMSD.js");
|
|
580
580
|
const code = runExecutaInit({
|
|
581
581
|
targetDir: dir,
|
|
582
582
|
slug,
|
|
@@ -587,12 +587,12 @@ executa.command("init <dir>").description("Scaffold a standalone Executa plugin
|
|
|
587
587
|
process.exit(code);
|
|
588
588
|
});
|
|
589
589
|
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) => {
|
|
590
|
-
const { runExecutaRegister } = await import("./executa-register-
|
|
590
|
+
const { runExecutaRegister } = await import("./executa-register-CmqKsoAU.js");
|
|
591
591
|
const code = await runExecutaRegister(opts);
|
|
592
592
|
process.exit(code);
|
|
593
593
|
});
|
|
594
594
|
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) => {
|
|
595
|
-
const { runExecutaInstall } = await import("./executa-install-
|
|
595
|
+
const { runExecutaInstall } = await import("./executa-install-nOFLBwxv.js");
|
|
596
596
|
const code = await runExecutaInstall({
|
|
597
597
|
dir: opts.dir,
|
|
598
598
|
toolId: opts.toolId,
|
|
@@ -603,7 +603,7 @@ executa.command("install").description("Install a local-dev shim for an Executa
|
|
|
603
603
|
process.exit(code);
|
|
604
604
|
});
|
|
605
605
|
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) => {
|
|
606
|
-
const { runExecutaDev } = await import("./executa-dev-
|
|
606
|
+
const { runExecutaDev } = await import("./executa-dev-CAw5X64R.js");
|
|
607
607
|
const storageMode = opts.storage === void 0 ? void 0 : (() => {
|
|
608
608
|
const m = opts.storage;
|
|
609
609
|
if (m === "off" || m === "memory" || m === "mock" || m === "real") return m;
|
|
@@ -641,14 +641,14 @@ executa.command("dev").description("Run one Executa plugin in isolation (REPL or
|
|
|
641
641
|
});
|
|
642
642
|
const apps = program.command("apps").description("Anna App publish lifecycle commands");
|
|
643
643
|
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) => {
|
|
644
|
-
const { runAppsList } = await import("./apps-
|
|
644
|
+
const { runAppsList } = await import("./apps-C_Oln_om.js");
|
|
645
645
|
process.exit(await runAppsList({
|
|
646
646
|
account: opts.account,
|
|
647
647
|
json: opts.json
|
|
648
648
|
}));
|
|
649
649
|
});
|
|
650
650
|
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) => {
|
|
651
|
-
const { runAppsRenameSlug } = await import("./apps-rename-slug-
|
|
651
|
+
const { runAppsRenameSlug } = await import("./apps-rename-slug-DYrk4Zpt.js");
|
|
652
652
|
process.exit(await runAppsRenameSlug({
|
|
653
653
|
newSlug,
|
|
654
654
|
cwd: opts.cwd,
|
|
@@ -657,7 +657,7 @@ apps.command("rename-slug <new-slug>").description("Rename an app's public slug
|
|
|
657
657
|
json: opts.json
|
|
658
658
|
}));
|
|
659
659
|
});
|
|
660
|
-
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("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
|
|
660
|
+
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) => {
|
|
661
661
|
if (opts.bump && ![
|
|
662
662
|
"patch",
|
|
663
663
|
"minor",
|
|
@@ -666,7 +666,7 @@ apps.command("publish").description("Publish or update an Anna App (manifest.jso
|
|
|
666
666
|
console.error(`✗ --bump must be patch|minor|major (got: ${opts.bump})`);
|
|
667
667
|
process.exit(2);
|
|
668
668
|
}
|
|
669
|
-
const { runAppsPublish } = await import("./apps-publish-
|
|
669
|
+
const { runAppsPublish } = await import("./apps-publish-B7reDBe1.js");
|
|
670
670
|
process.exit(await runAppsPublish({
|
|
671
671
|
cwd: opts.cwd,
|
|
672
672
|
manifest: opts.manifest,
|
|
@@ -678,11 +678,12 @@ apps.command("publish").description("Publish or update an Anna App (manifest.jso
|
|
|
678
678
|
noBundledExecutas: opts.bundledExecutas === false,
|
|
679
679
|
noBundle: opts.bundle === false,
|
|
680
680
|
bundleDir: opts.bundleDir,
|
|
681
|
+
profile: opts.profile,
|
|
681
682
|
account: opts.account,
|
|
682
683
|
json: opts.json
|
|
683
684
|
}));
|
|
684
685
|
});
|
|
685
|
-
apps.command("push").description("Upsert the mutable working draft (manifest + bundle, no freeze)").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 upsert", 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 register bundled executas", false).option("--no-bundled-executas", "Disable bundled-executa orchestration (legacy behaviour)").option("--no-bundle", "Skip working UI bundle upload even if the manifest declares a UI").option("--bundle-dir <dir>", "UI bundle directory (default: <cwd>/bundle)").option("--no-install-local", "Don't install local-dev shims for bundled `local` executas (skip Rediscover-Local prep)").option("--if-match <revision>", "Optimistic-lock: require this working revision").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
|
|
686
|
+
apps.command("push").description("Upsert the mutable working draft (manifest + bundle, no freeze)").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 upsert", 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 register bundled executas", false).option("--no-bundled-executas", "Disable bundled-executa orchestration (legacy behaviour)").option("--no-bundle", "Skip working UI bundle upload even if the manifest declares a UI").option("--bundle-dir <dir>", "UI bundle directory (default: <cwd>/bundle)").option("--no-install-local", "Don't install local-dev shims for bundled `local` executas (skip Rediscover-Local prep)").option("--profile <name>", "Select a bundled executa `distribution.profiles` entry for this push (overrides each executa.json `active`; e.g. --profile local for a dev push while `active` stays `binary`)").option("--if-match <revision>", "Optimistic-lock: require this working revision").option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
|
|
686
687
|
if (opts.bump && ![
|
|
687
688
|
"patch",
|
|
688
689
|
"minor",
|
|
@@ -699,7 +700,7 @@ apps.command("push").description("Upsert the mutable working draft (manifest + b
|
|
|
699
700
|
process.exit(2);
|
|
700
701
|
}
|
|
701
702
|
}
|
|
702
|
-
const { runAppsPush } = await import("./apps-push-
|
|
703
|
+
const { runAppsPush } = await import("./apps-push-CkJ1gtpy.js");
|
|
703
704
|
process.exit(await runAppsPush({
|
|
704
705
|
cwd: opts.cwd,
|
|
705
706
|
manifest: opts.manifest,
|
|
@@ -712,13 +713,14 @@ apps.command("push").description("Upsert the mutable working draft (manifest + b
|
|
|
712
713
|
noBundle: opts.bundle === false,
|
|
713
714
|
bundleDir: opts.bundleDir,
|
|
714
715
|
noInstallLocal: opts.installLocal === false,
|
|
716
|
+
profile: opts.profile,
|
|
715
717
|
ifMatch,
|
|
716
718
|
account: opts.account,
|
|
717
719
|
json: opts.json
|
|
718
720
|
}));
|
|
719
721
|
});
|
|
720
722
|
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) => {
|
|
721
|
-
const { runAppsCut } = await import("./apps-cut-
|
|
723
|
+
const { runAppsCut } = await import("./apps-cut-MjSe2ph7.js");
|
|
722
724
|
process.exit(await runAppsCut({
|
|
723
725
|
version,
|
|
724
726
|
changelog: opts.changelog,
|
|
@@ -730,7 +732,7 @@ apps.command("cut <version>").description("Snapshot the working draft into an im
|
|
|
730
732
|
}));
|
|
731
733
|
});
|
|
732
734
|
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) => {
|
|
733
|
-
const { runAppsDiscard } = await import("./apps-discard-
|
|
735
|
+
const { runAppsDiscard } = await import("./apps-discard-BWLVVMu7.js");
|
|
734
736
|
process.exit(await runAppsDiscard({
|
|
735
737
|
slug: opts.slug,
|
|
736
738
|
cwd: opts.cwd,
|
|
@@ -740,7 +742,7 @@ apps.command("discard").description("Drop the mutable working draft (leaves cut
|
|
|
740
742
|
}));
|
|
741
743
|
});
|
|
742
744
|
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) => {
|
|
743
|
-
const { runAppsRelease } = await import("./apps-release-
|
|
745
|
+
const { runAppsRelease } = await import("./apps-release-J-Sjkoym.js");
|
|
744
746
|
process.exit(await runAppsRelease({
|
|
745
747
|
version,
|
|
746
748
|
slug: opts.slug,
|
|
@@ -752,7 +754,7 @@ apps.command("release <version>").description("Freeze & publish an existing remo
|
|
|
752
754
|
}));
|
|
753
755
|
});
|
|
754
756
|
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) => {
|
|
755
|
-
const { runAppsSyncMeta } = await import("./apps-sync-meta-
|
|
757
|
+
const { runAppsSyncMeta } = await import("./apps-sync-meta-CL2PCMCv.js");
|
|
756
758
|
process.exit(await runAppsSyncMeta({
|
|
757
759
|
cwd: opts.cwd,
|
|
758
760
|
manifest: opts.manifest,
|
|
@@ -763,7 +765,7 @@ apps.command("sync-meta").description("Push mutable store metadata (name/tagline
|
|
|
763
765
|
}));
|
|
764
766
|
});
|
|
765
767
|
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) => {
|
|
766
|
-
const { runAppsSubmitReview } = await import("./apps-submit-review-
|
|
768
|
+
const { runAppsSubmitReview } = await import("./apps-submit-review-DNrQc2ws.js");
|
|
767
769
|
process.exit(await runAppsSubmitReview({
|
|
768
770
|
slug,
|
|
769
771
|
cwd: opts.cwd,
|
|
@@ -772,7 +774,7 @@ apps.command("submit-review [slug]").description("Move an app into review (DRAFT
|
|
|
772
774
|
}));
|
|
773
775
|
});
|
|
774
776
|
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) => {
|
|
775
|
-
const { runAppsStatus } = await import("./apps-status-
|
|
777
|
+
const { runAppsStatus } = await import("./apps-status-CcCoYu6i.js");
|
|
776
778
|
process.exit(await runAppsStatus({
|
|
777
779
|
slug,
|
|
778
780
|
account: opts.account,
|
|
@@ -780,7 +782,7 @@ apps.command("status <slug>").description("Show server-known state for one Anna
|
|
|
780
782
|
}));
|
|
781
783
|
});
|
|
782
784
|
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) => {
|
|
783
|
-
const { runAppsVersions } = await import("./apps-versions-
|
|
785
|
+
const { runAppsVersions } = await import("./apps-versions-2BR8xo7C.js");
|
|
784
786
|
process.exit(await runAppsVersions({
|
|
785
787
|
slug,
|
|
786
788
|
account: opts.account,
|
|
@@ -788,7 +790,7 @@ apps.command("versions <slug>").description("List all server versions of one Ann
|
|
|
788
790
|
}));
|
|
789
791
|
});
|
|
790
792
|
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) => {
|
|
791
|
-
const { runAppsGrants } = await import("./apps-grants-
|
|
793
|
+
const { runAppsGrants } = await import("./apps-grants-lmllFB02.js");
|
|
792
794
|
process.exit(await runAppsGrants({
|
|
793
795
|
slug,
|
|
794
796
|
account: opts.account,
|
|
@@ -796,7 +798,7 @@ apps.command("grants <slug>").description("Show currently granted scopes/quota f
|
|
|
796
798
|
}));
|
|
797
799
|
});
|
|
798
800
|
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) => {
|
|
799
|
-
const { runAppsUnpublish } = await import("./apps-destructive-
|
|
801
|
+
const { runAppsUnpublish } = await import("./apps-destructive-a2YBmWFm.js");
|
|
800
802
|
process.exit(await runAppsUnpublish({
|
|
801
803
|
slug,
|
|
802
804
|
yes: opts.yes,
|
|
@@ -806,7 +808,7 @@ apps.command("unpublish <slug>").description("Flip a PUBLISHED app back to APPRO
|
|
|
806
808
|
}));
|
|
807
809
|
});
|
|
808
810
|
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) => {
|
|
809
|
-
const { runAppsArchive } = await import("./apps-destructive-
|
|
811
|
+
const { runAppsArchive } = await import("./apps-destructive-a2YBmWFm.js");
|
|
810
812
|
process.exit(await runAppsArchive({
|
|
811
813
|
slug,
|
|
812
814
|
yes: opts.yes,
|
|
@@ -816,7 +818,7 @@ apps.command("archive <slug>").description("Archive an Anna App (hides it from e
|
|
|
816
818
|
}));
|
|
817
819
|
});
|
|
818
820
|
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) => {
|
|
819
|
-
const { runAppsUnarchive } = await import("./apps-destructive-
|
|
821
|
+
const { runAppsUnarchive } = await import("./apps-destructive-a2YBmWFm.js");
|
|
820
822
|
process.exit(await runAppsUnarchive({
|
|
821
823
|
slug,
|
|
822
824
|
yes: opts.yes,
|
|
@@ -825,7 +827,7 @@ apps.command("unarchive <slug>").description("Restore an archived Anna App back
|
|
|
825
827
|
}));
|
|
826
828
|
});
|
|
827
829
|
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) => {
|
|
828
|
-
const { runAppsDelete } = await import("./apps-destructive-
|
|
830
|
+
const { runAppsDelete } = await import("./apps-destructive-a2YBmWFm.js");
|
|
829
831
|
process.exit(await runAppsDelete({
|
|
830
832
|
slug,
|
|
831
833
|
yes: opts.yes,
|
|
@@ -835,14 +837,14 @@ apps.command("delete <slug>").description("Hard-delete an Anna App (refused by s
|
|
|
835
837
|
}));
|
|
836
838
|
});
|
|
837
839
|
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) => {
|
|
838
|
-
const { runExecutaList } = await import("./executa-reads-
|
|
840
|
+
const { runExecutaList } = await import("./executa-reads-BmwT_Yjp.js");
|
|
839
841
|
process.exit(await runExecutaList({
|
|
840
842
|
account: opts.account,
|
|
841
843
|
json: opts.json
|
|
842
844
|
}));
|
|
843
845
|
});
|
|
844
846
|
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) => {
|
|
845
|
-
const { runExecutaStatus } = await import("./executa-reads-
|
|
847
|
+
const { runExecutaStatus } = await import("./executa-reads-BmwT_Yjp.js");
|
|
846
848
|
process.exit(await runExecutaStatus({
|
|
847
849
|
ref,
|
|
848
850
|
account: opts.account,
|
|
@@ -850,14 +852,14 @@ executa.command("status <ref>").description("Show server-known state for one Exe
|
|
|
850
852
|
}));
|
|
851
853
|
});
|
|
852
854
|
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) => {
|
|
853
|
-
const { runExecutaVersions } = await import("./executa-reads-
|
|
855
|
+
const { runExecutaVersions } = await import("./executa-reads-BmwT_Yjp.js");
|
|
854
856
|
process.exit(await runExecutaVersions({
|
|
855
857
|
ref,
|
|
856
858
|
account: opts.account,
|
|
857
859
|
json: opts.json
|
|
858
860
|
}));
|
|
859
861
|
});
|
|
860
|
-
executa.command("publish").description("Mint or update an Executa (executa.json in cwd)").option("--cwd <dir>", "Project root (default: cwd)").option("--manifest <path>", "executa.json path", "executa.json").option("--bump <kind>", "Bump version: patch|minor|major").option("--no-write", "Skip writing the bumped version back to disk", false).option("--publish", "After freezing the version, flip visibility to PUBLIC", false).option("--dry-run", "Resolve identity + diff but don't upload", false).option("--account <host>", "Saved account host (default: current)").option("--json", "Emit machine-readable JSON", false).action(async (opts) => {
|
|
862
|
+
executa.command("publish").description("Mint or update an Executa (executa.json in cwd)").option("--cwd <dir>", "Project root (default: cwd)").option("--manifest <path>", "executa.json path", "executa.json").option("--bump <kind>", "Bump version: patch|minor|major").option("--no-write", "Skip writing the bumped version back to disk", false).option("--publish", "After freezing the version, flip visibility to PUBLIC", false).option("--dry-run", "Resolve identity + diff but don't upload", false).option("--profile <name>", "Select a `distribution.profiles` entry for this run (overrides 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) => {
|
|
861
863
|
if (opts.bump && ![
|
|
862
864
|
"patch",
|
|
863
865
|
"minor",
|
|
@@ -866,7 +868,7 @@ executa.command("publish").description("Mint or update an Executa (executa.json
|
|
|
866
868
|
console.error(`✗ --bump must be patch|minor|major (got: ${opts.bump})`);
|
|
867
869
|
process.exit(2);
|
|
868
870
|
}
|
|
869
|
-
const { runExecutaPublish } = await import("./executa-publish-
|
|
871
|
+
const { runExecutaPublish } = await import("./executa-publish-B_7k1gOf.js");
|
|
870
872
|
process.exit(await runExecutaPublish({
|
|
871
873
|
cwd: opts.cwd,
|
|
872
874
|
manifest: opts.manifest,
|
|
@@ -874,12 +876,46 @@ executa.command("publish").description("Mint or update an Executa (executa.json
|
|
|
874
876
|
noWrite: opts.write === false,
|
|
875
877
|
publish: opts.publish,
|
|
876
878
|
dryRun: opts.dryRun,
|
|
879
|
+
profile: opts.profile,
|
|
877
880
|
account: opts.account,
|
|
878
881
|
json: opts.json
|
|
879
882
|
}));
|
|
880
883
|
});
|
|
884
|
+
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) => {
|
|
885
|
+
const { runExecutaUploadBinaries } = await import("./executa-upload-binaries-DrwpzQp3.js");
|
|
886
|
+
process.exit(await runExecutaUploadBinaries({
|
|
887
|
+
dir: opts.dir,
|
|
888
|
+
dryRun: opts.dryRun,
|
|
889
|
+
oidc: opts.oidc,
|
|
890
|
+
toolId: opts.toolId,
|
|
891
|
+
host: opts.host,
|
|
892
|
+
account: opts.account,
|
|
893
|
+
json: opts.json
|
|
894
|
+
}));
|
|
895
|
+
});
|
|
896
|
+
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`)");
|
|
897
|
+
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) => {
|
|
898
|
+
const { runTrustedPublisherAdd } = await import("./executa-trusted-publisher-tVwzjI2d.js");
|
|
899
|
+
process.exit(await runTrustedPublisherAdd(opts));
|
|
900
|
+
});
|
|
901
|
+
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) => {
|
|
902
|
+
const { runTrustedPublisherList } = await import("./executa-trusted-publisher-tVwzjI2d.js");
|
|
903
|
+
process.exit(await runTrustedPublisherList(opts));
|
|
904
|
+
});
|
|
905
|
+
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) => {
|
|
906
|
+
const id = Number(publisherId);
|
|
907
|
+
if (!Number.isInteger(id) || id <= 0) {
|
|
908
|
+
console.error(`✗ publisher-id must be a positive integer (got "${publisherId}")`);
|
|
909
|
+
process.exit(2);
|
|
910
|
+
}
|
|
911
|
+
const { runTrustedPublisherRemove } = await import("./executa-trusted-publisher-tVwzjI2d.js");
|
|
912
|
+
process.exit(await runTrustedPublisherRemove({
|
|
913
|
+
...opts,
|
|
914
|
+
publisherId: id
|
|
915
|
+
}));
|
|
916
|
+
});
|
|
881
917
|
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) => {
|
|
882
|
-
const { runExecutaUnpublish } = await import("./executa-destructive-
|
|
918
|
+
const { runExecutaUnpublish } = await import("./executa-destructive-DCfQ1ez5.js");
|
|
883
919
|
process.exit(await runExecutaUnpublish({
|
|
884
920
|
slug,
|
|
885
921
|
yes: opts.yes,
|
|
@@ -889,7 +925,7 @@ executa.command("unpublish <slug>").description("Flip an Executa's visibility ba
|
|
|
889
925
|
}));
|
|
890
926
|
});
|
|
891
927
|
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) => {
|
|
892
|
-
const { runExecutaYank } = await import("./executa-destructive-
|
|
928
|
+
const { runExecutaYank } = await import("./executa-destructive-DCfQ1ez5.js");
|
|
893
929
|
process.exit(await runExecutaYank({
|
|
894
930
|
ref,
|
|
895
931
|
yes: opts.yes,
|
|
@@ -899,7 +935,7 @@ executa.command("yank <ref>").description("Hard-delete one Executa version (<slu
|
|
|
899
935
|
}));
|
|
900
936
|
});
|
|
901
937
|
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) => {
|
|
902
|
-
const { runExecutaDelete } = await import("./executa-destructive-
|
|
938
|
+
const { runExecutaDelete } = await import("./executa-destructive-DCfQ1ez5.js");
|
|
903
939
|
process.exit(await runExecutaDelete({
|
|
904
940
|
slug,
|
|
905
941
|
yes: opts.yes,
|
|
@@ -911,7 +947,7 @@ executa.command("delete <slug>").description("Hard-delete an Executa").option("-
|
|
|
911
947
|
executa.command("cache-clear").description("Delete the local `.anna/executa.json` identity cache. Use after the server-side Executa has been deleted/recreated, or when switching host. Next `executa publish` will re-mint via the idempotency key.").option("--cwd <dir>", "Project root (default: cwd)").action(async (opts) => {
|
|
912
948
|
const { resolve: resolve$1 } = await import("node:path");
|
|
913
949
|
const { existsSync: existsSync$1 } = await import("node:fs");
|
|
914
|
-
const { executaCachePath, invalidateExecutaCache } = await import("./executa-cache-
|
|
950
|
+
const { executaCachePath, invalidateExecutaCache } = await import("./executa-cache-WBkCLic7.js");
|
|
915
951
|
const cwd = resolve$1(opts.cwd ?? process.cwd());
|
|
916
952
|
const p = executaCachePath(cwd);
|
|
917
953
|
if (!existsSync$1(p)) {
|
|
@@ -924,7 +960,7 @@ executa.command("cache-clear").description("Delete the local `.anna/executa.json
|
|
|
924
960
|
});
|
|
925
961
|
const token = program.command("token").description("Manage developer PATs (list / revoke / scopes)");
|
|
926
962
|
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) => {
|
|
927
|
-
const { runTokenList } = await import("./token-
|
|
963
|
+
const { runTokenList } = await import("./token-COnYMRB-.js");
|
|
928
964
|
process.exit(await runTokenList({
|
|
929
965
|
includeRevoked: opts.includeRevoked,
|
|
930
966
|
account: opts.account,
|
|
@@ -937,7 +973,7 @@ token.command("revoke <id>").description("Revoke one of the caller's PATs by id"
|
|
|
937
973
|
console.error(`✗ token id must be a positive integer (got: ${id})`);
|
|
938
974
|
process.exit(2);
|
|
939
975
|
}
|
|
940
|
-
const { runTokenRevoke } = await import("./token-
|
|
976
|
+
const { runTokenRevoke } = await import("./token-COnYMRB-.js");
|
|
941
977
|
process.exit(await runTokenRevoke({
|
|
942
978
|
id: idNum,
|
|
943
979
|
account: opts.account,
|
|
@@ -945,7 +981,7 @@ token.command("revoke <id>").description("Revoke one of the caller's PATs by id"
|
|
|
945
981
|
}));
|
|
946
982
|
});
|
|
947
983
|
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) => {
|
|
948
|
-
const { runTokenScopes } = await import("./token-
|
|
984
|
+
const { runTokenScopes } = await import("./token-COnYMRB-.js");
|
|
949
985
|
process.exit(await runTokenScopes({
|
|
950
986
|
account: opts.account,
|
|
951
987
|
json: opts.json
|
|
@@ -960,7 +996,7 @@ program.command("publish").description("Auto-detect cwd and publish (apps publis
|
|
|
960
996
|
console.error(`✗ --bump must be patch|minor|major (got: ${opts.bump})`);
|
|
961
997
|
process.exit(2);
|
|
962
998
|
}
|
|
963
|
-
const { runTopLevelPublish } = await import("./publish-
|
|
999
|
+
const { runTopLevelPublish } = await import("./publish-DwIJWl46.js");
|
|
964
1000
|
process.exit(await runTopLevelPublish({
|
|
965
1001
|
cwd: opts.cwd,
|
|
966
1002
|
bump: opts.bump,
|
|
@@ -49,8 +49,8 @@ async function runDev(opts) {
|
|
|
49
49
|
}
|
|
50
50
|
process.env.ANNA_APP_RUNTIME_STORAGE_MODE = "aps";
|
|
51
51
|
}
|
|
52
|
-
const { PythonBridge, PINNED_RUNTIME_VERSION } = await import("./bridge-
|
|
53
|
-
const { HarnessServer } = await import("./server-
|
|
52
|
+
const { PythonBridge, PINNED_RUNTIME_VERSION } = await import("./bridge-CzeSuRRL.js");
|
|
53
|
+
const { HarnessServer } = await import("./server-BHWGGZsf.js");
|
|
54
54
|
const bridge = new PythonBridge({
|
|
55
55
|
mode,
|
|
56
56
|
matrixNexusRoot: matrixNexusRoot ?? void 0,
|
|
@@ -90,7 +90,7 @@ async function runDev(opts) {
|
|
|
90
90
|
if (executas.length > 0) console.log(` executas ${dim(executas.map((e) => e.tool_id).join(", "))}`);
|
|
91
91
|
const bundledResolved = resolveBundledHandles(dirname(manifestPath), executas);
|
|
92
92
|
if (Object.keys(bundledResolved).length > 0) {
|
|
93
|
-
const { substituteBundledRefs, writeBundleToolIdSidecar } = await import("./bundled-executas-
|
|
93
|
+
const { substituteBundledRefs, writeBundleToolIdSidecar } = await import("./bundled-executas-Bp9Z6aiR.js");
|
|
94
94
|
try {
|
|
95
95
|
manifest = substituteBundledRefs(manifest, bundledResolved);
|
|
96
96
|
writeBundleToolIdSidecar(bundleDir, bundledResolved);
|
|
@@ -161,7 +161,7 @@ async function runDev(opts) {
|
|
|
161
161
|
*/
|
|
162
162
|
async function resolveRealLlm(args) {
|
|
163
163
|
const { getAccount } = await import("./credentials-Chkoidh5.js");
|
|
164
|
-
const { ensureDevAppRegistered } = await import("./dev-app-cache-
|
|
164
|
+
const { ensureDevAppRegistered } = await import("./dev-app-cache-B3Wa5t6X.js");
|
|
165
165
|
const acc = getAccount(args.account);
|
|
166
166
|
if (!acc) {
|
|
167
167
|
console.error(red("✗ no developer PAT on disk — run `anna-app login --host <nexus-url>` first.\n (or use `--no-llm` / `--mock-llm <fixture>` to develop offline.)"));
|
|
@@ -190,7 +190,7 @@ async function resolveRealLlm(args) {
|
|
|
190
190
|
account: args.account,
|
|
191
191
|
appSlug: entry.slug,
|
|
192
192
|
onAppSlugNotFound: async () => {
|
|
193
|
-
const { invalidateDevAppCache } = await import("./dev-app-cache-
|
|
193
|
+
const { invalidateDevAppCache } = await import("./dev-app-cache-B3Wa5t6X.js");
|
|
194
194
|
invalidateDevAppCache(args.cwd);
|
|
195
195
|
const fresh = getAccount(args.account);
|
|
196
196
|
if (!fresh) throw new Error("PAT not found while re-registering dev app — run `anna-app login` again");
|
|
@@ -5,6 +5,19 @@ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "
|
|
|
5
5
|
//#region src/dev-app-cache.ts
|
|
6
6
|
const CACHE_DIR = ".anna";
|
|
7
7
|
const CACHE_FILE = "dev-app.json";
|
|
8
|
+
/**
|
|
9
|
+
* Bump this whenever the server-side dev-app grant shape changes in a way
|
|
10
|
+
* that requires a re-register to pick up (registration is idempotent and
|
|
11
|
+
* refreshes the grant bundle server-side). Cached entries written with a
|
|
12
|
+
* lower `cache_version` are treated as stale and re-POSTed.
|
|
13
|
+
*
|
|
14
|
+
* 1 — initial (implicit: entries without `cache_version`; server wrote
|
|
15
|
+
* `llm_grant` only)
|
|
16
|
+
* 2 — server now writes the full dev grant bundle (llm + image + upload);
|
|
17
|
+
* re-register so pre-existing dev apps pick up `upload_grant` /
|
|
18
|
+
* `image_grant` (fixes host/uploadFile → APP_NOT_GRANTED, forum #159)
|
|
19
|
+
*/
|
|
20
|
+
const DEV_APP_CACHE_VERSION = 2;
|
|
8
21
|
function cachePath(cwd) {
|
|
9
22
|
return resolve(cwd, CACHE_DIR, CACHE_FILE);
|
|
10
23
|
}
|
|
@@ -18,7 +31,8 @@ function readDevAppCache(cwd) {
|
|
|
18
31
|
slug: raw.slug,
|
|
19
32
|
app_id: raw.app_id,
|
|
20
33
|
name: raw.name ?? raw.slug,
|
|
21
|
-
registered_at: raw.registered_at ?? ""
|
|
34
|
+
registered_at: raw.registered_at ?? "",
|
|
35
|
+
cache_version: typeof raw.cache_version === "number" ? raw.cache_version : 0
|
|
22
36
|
};
|
|
23
37
|
} catch {}
|
|
24
38
|
return null;
|
|
@@ -83,7 +97,7 @@ async function listDevApps(args) {
|
|
|
83
97
|
async function ensureDevAppRegistered(args) {
|
|
84
98
|
const canonical = canonicalHost(args.host);
|
|
85
99
|
const cached = readDevAppCache(args.cwd);
|
|
86
|
-
if (cached && cached.host === canonical && cached.slug === args.input.slug) try {
|
|
100
|
+
if (cached && cached.host === canonical && cached.slug === args.input.slug && cached.cache_version >= DEV_APP_CACHE_VERSION) try {
|
|
87
101
|
const apps = await listDevApps({
|
|
88
102
|
host: args.host,
|
|
89
103
|
pat: args.pat
|
|
@@ -103,7 +117,8 @@ async function ensureDevAppRegistered(args) {
|
|
|
103
117
|
slug: r.slug,
|
|
104
118
|
app_id: r.app_id,
|
|
105
119
|
name: r.name,
|
|
106
|
-
registered_at: new Date().toISOString()
|
|
120
|
+
registered_at: new Date().toISOString(),
|
|
121
|
+
cache_version: DEV_APP_CACHE_VERSION
|
|
107
122
|
};
|
|
108
123
|
writeDevAppCache(args.cwd, entry);
|
|
109
124
|
return entry;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { findMatrixNexusRoot, nexusSchemaDir } from "./nexus-root-BlPwOusj.js";
|
|
2
|
-
import { PINNED_RUNTIME_VERSION } from "./bridge-
|
|
2
|
+
import { PINNED_RUNTIME_VERSION } from "./bridge-Dvck0e9c.js";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
4
|
import { existsSync, statSync } from "node:fs";
|
|
5
5
|
import { spawnSync } from "node:child_process";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import "./credentials-BTv2IfUZ.js";
|
|
2
|
-
import { executaCacheMatches, executaCachePath, invalidateExecutaCache, mintIdempotencyKey, readExecutaIdentity, writeExecutaIdentity } from "./executa-cache-
|
|
2
|
+
import { executaCacheMatches, executaCachePath, invalidateExecutaCache, mintIdempotencyKey, readExecutaIdentity, writeExecutaIdentity } from "./executa-cache-BFoUtb4J.js";
|
|
3
3
|
|
|
4
4
|
export { executaCachePath, invalidateExecutaCache };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import "./credentials-BTv2IfUZ.js";
|
|
2
2
|
import { CliError } from "./client-D-_z1ALk.js";
|
|
3
|
-
import { resolveClient, withErrorHandling } from "./_lifecycle-shared-
|
|
4
|
-
import { deleteMyTool, listMyTools, listToolVersions, unpublishTool, yankToolVersion } from "./executas-
|
|
5
|
-
import { ensureDestructiveAllowed } from "./confirm-
|
|
3
|
+
import { resolveClient, withErrorHandling } from "./_lifecycle-shared-RyiRITI5.js";
|
|
4
|
+
import { deleteMyTool, listMyTools, listToolVersions, unpublishTool, yankToolVersion } from "./executas-CvQY_w2U.js";
|
|
5
|
+
import { ensureDestructiveAllowed } from "./confirm-BSoOy1X2.js";
|
|
6
6
|
import { dim, green, yellow } from "kleur/colors";
|
|
7
7
|
|
|
8
8
|
//#region src/commands/executa-destructive.ts
|