@anna-ai/cli 0.1.32 → 0.1.34
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-CrBRnzf4.js} +3 -3
- package/dist/{apps-dvknZYI2.js → apps-C_Oln_om.js} +1 -1
- package/dist/apps-cut-C14A3V93.js +159 -0
- package/dist/{apps-destructive-B6RFjokU.js → apps-destructive-a2YBmWFm.js} +2 -2
- package/dist/{apps-discard-hVZxAQyj.js → apps-discard-B49iiOX6.js} +12 -10
- package/dist/{apps-grants-DnXCnkH5.js → apps-grants-lmllFB02.js} +1 -1
- package/dist/apps-publish-B9CnifEx.js +17 -0
- package/dist/{apps-publish-BKqVsS1W.js → apps-publish-qc_E4b_R.js} +7 -7
- package/dist/{apps-push-B3wZr9B4.js → apps-push-DnINd0Cx.js} +14 -12
- package/dist/{apps-release-DZK30eF_.js → apps-release--7R2cmPg.js} +7 -6
- package/dist/{apps-rename-slug-D2BrWasG.js → apps-rename-slug-CGykNHM5.js} +3 -3
- package/dist/{apps-status-Ca6MdXZd.js → apps-status-CcCoYu6i.js} +2 -2
- 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-dy9j-5n8.js} +4 -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 +74 -41
- 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-Ah6J7jYd.js → executa-publish-CGz5wM1Q.js} +20 -4
- package/dist/executa-publish-DHICU6S0.js +11 -0
- 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-CYMtWJU7.js +9 -0
- package/dist/executa-upload-binaries-Do5Sq64E.js +277 -0
- package/dist/{manifest-DOMrcdCK.js → manifest-DlIcwLQs.js} +56 -1
- package/dist/{publish-GpvkaBIx.js → publish-DW_D3uQ4.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-B8KdAh5S.js} +5 -5
- 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/{listing-meta-BlY7XMrw.js → listing-meta-C0HsNjIB.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-CGykNHM5.js");
|
|
652
652
|
process.exit(await runAppsRenameSlug({
|
|
653
653
|
newSlug,
|
|
654
654
|
cwd: opts.cwd,
|
|
@@ -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-B9CnifEx.js");
|
|
670
670
|
process.exit(await runAppsPublish({
|
|
671
671
|
cwd: opts.cwd,
|
|
672
672
|
manifest: opts.manifest,
|
|
@@ -699,7 +699,7 @@ apps.command("push").description("Upsert the mutable working draft (manifest + b
|
|
|
699
699
|
process.exit(2);
|
|
700
700
|
}
|
|
701
701
|
}
|
|
702
|
-
const { runAppsPush } = await import("./apps-push-
|
|
702
|
+
const { runAppsPush } = await import("./apps-push-DnINd0Cx.js");
|
|
703
703
|
process.exit(await runAppsPush({
|
|
704
704
|
cwd: opts.cwd,
|
|
705
705
|
manifest: opts.manifest,
|
|
@@ -718,7 +718,7 @@ apps.command("push").description("Upsert the mutable working draft (manifest + b
|
|
|
718
718
|
}));
|
|
719
719
|
});
|
|
720
720
|
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-
|
|
721
|
+
const { runAppsCut } = await import("./apps-cut-C14A3V93.js");
|
|
722
722
|
process.exit(await runAppsCut({
|
|
723
723
|
version,
|
|
724
724
|
changelog: opts.changelog,
|
|
@@ -730,7 +730,7 @@ apps.command("cut <version>").description("Snapshot the working draft into an im
|
|
|
730
730
|
}));
|
|
731
731
|
});
|
|
732
732
|
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-
|
|
733
|
+
const { runAppsDiscard } = await import("./apps-discard-B49iiOX6.js");
|
|
734
734
|
process.exit(await runAppsDiscard({
|
|
735
735
|
slug: opts.slug,
|
|
736
736
|
cwd: opts.cwd,
|
|
@@ -740,7 +740,7 @@ apps.command("discard").description("Drop the mutable working draft (leaves cut
|
|
|
740
740
|
}));
|
|
741
741
|
});
|
|
742
742
|
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
|
|
743
|
+
const { runAppsRelease } = await import("./apps-release--7R2cmPg.js");
|
|
744
744
|
process.exit(await runAppsRelease({
|
|
745
745
|
version,
|
|
746
746
|
slug: opts.slug,
|
|
@@ -752,7 +752,7 @@ apps.command("release <version>").description("Freeze & publish an existing remo
|
|
|
752
752
|
}));
|
|
753
753
|
});
|
|
754
754
|
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-
|
|
755
|
+
const { runAppsSyncMeta } = await import("./apps-sync-meta-dy9j-5n8.js");
|
|
756
756
|
process.exit(await runAppsSyncMeta({
|
|
757
757
|
cwd: opts.cwd,
|
|
758
758
|
manifest: opts.manifest,
|
|
@@ -763,7 +763,7 @@ apps.command("sync-meta").description("Push mutable store metadata (name/tagline
|
|
|
763
763
|
}));
|
|
764
764
|
});
|
|
765
765
|
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-
|
|
766
|
+
const { runAppsSubmitReview } = await import("./apps-submit-review-DNrQc2ws.js");
|
|
767
767
|
process.exit(await runAppsSubmitReview({
|
|
768
768
|
slug,
|
|
769
769
|
cwd: opts.cwd,
|
|
@@ -772,7 +772,7 @@ apps.command("submit-review [slug]").description("Move an app into review (DRAFT
|
|
|
772
772
|
}));
|
|
773
773
|
});
|
|
774
774
|
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-
|
|
775
|
+
const { runAppsStatus } = await import("./apps-status-CcCoYu6i.js");
|
|
776
776
|
process.exit(await runAppsStatus({
|
|
777
777
|
slug,
|
|
778
778
|
account: opts.account,
|
|
@@ -780,7 +780,7 @@ apps.command("status <slug>").description("Show server-known state for one Anna
|
|
|
780
780
|
}));
|
|
781
781
|
});
|
|
782
782
|
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-
|
|
783
|
+
const { runAppsVersions } = await import("./apps-versions-2BR8xo7C.js");
|
|
784
784
|
process.exit(await runAppsVersions({
|
|
785
785
|
slug,
|
|
786
786
|
account: opts.account,
|
|
@@ -788,7 +788,7 @@ apps.command("versions <slug>").description("List all server versions of one Ann
|
|
|
788
788
|
}));
|
|
789
789
|
});
|
|
790
790
|
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-
|
|
791
|
+
const { runAppsGrants } = await import("./apps-grants-lmllFB02.js");
|
|
792
792
|
process.exit(await runAppsGrants({
|
|
793
793
|
slug,
|
|
794
794
|
account: opts.account,
|
|
@@ -796,7 +796,7 @@ apps.command("grants <slug>").description("Show currently granted scopes/quota f
|
|
|
796
796
|
}));
|
|
797
797
|
});
|
|
798
798
|
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-
|
|
799
|
+
const { runAppsUnpublish } = await import("./apps-destructive-a2YBmWFm.js");
|
|
800
800
|
process.exit(await runAppsUnpublish({
|
|
801
801
|
slug,
|
|
802
802
|
yes: opts.yes,
|
|
@@ -806,7 +806,7 @@ apps.command("unpublish <slug>").description("Flip a PUBLISHED app back to APPRO
|
|
|
806
806
|
}));
|
|
807
807
|
});
|
|
808
808
|
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-
|
|
809
|
+
const { runAppsArchive } = await import("./apps-destructive-a2YBmWFm.js");
|
|
810
810
|
process.exit(await runAppsArchive({
|
|
811
811
|
slug,
|
|
812
812
|
yes: opts.yes,
|
|
@@ -816,7 +816,7 @@ apps.command("archive <slug>").description("Archive an Anna App (hides it from e
|
|
|
816
816
|
}));
|
|
817
817
|
});
|
|
818
818
|
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-
|
|
819
|
+
const { runAppsUnarchive } = await import("./apps-destructive-a2YBmWFm.js");
|
|
820
820
|
process.exit(await runAppsUnarchive({
|
|
821
821
|
slug,
|
|
822
822
|
yes: opts.yes,
|
|
@@ -825,7 +825,7 @@ apps.command("unarchive <slug>").description("Restore an archived Anna App back
|
|
|
825
825
|
}));
|
|
826
826
|
});
|
|
827
827
|
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-
|
|
828
|
+
const { runAppsDelete } = await import("./apps-destructive-a2YBmWFm.js");
|
|
829
829
|
process.exit(await runAppsDelete({
|
|
830
830
|
slug,
|
|
831
831
|
yes: opts.yes,
|
|
@@ -835,14 +835,14 @@ apps.command("delete <slug>").description("Hard-delete an Anna App (refused by s
|
|
|
835
835
|
}));
|
|
836
836
|
});
|
|
837
837
|
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-
|
|
838
|
+
const { runExecutaList } = await import("./executa-reads-BmwT_Yjp.js");
|
|
839
839
|
process.exit(await runExecutaList({
|
|
840
840
|
account: opts.account,
|
|
841
841
|
json: opts.json
|
|
842
842
|
}));
|
|
843
843
|
});
|
|
844
844
|
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-
|
|
845
|
+
const { runExecutaStatus } = await import("./executa-reads-BmwT_Yjp.js");
|
|
846
846
|
process.exit(await runExecutaStatus({
|
|
847
847
|
ref,
|
|
848
848
|
account: opts.account,
|
|
@@ -850,7 +850,7 @@ executa.command("status <ref>").description("Show server-known state for one Exe
|
|
|
850
850
|
}));
|
|
851
851
|
});
|
|
852
852
|
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-
|
|
853
|
+
const { runExecutaVersions } = await import("./executa-reads-BmwT_Yjp.js");
|
|
854
854
|
process.exit(await runExecutaVersions({
|
|
855
855
|
ref,
|
|
856
856
|
account: opts.account,
|
|
@@ -866,7 +866,7 @@ executa.command("publish").description("Mint or update an Executa (executa.json
|
|
|
866
866
|
console.error(`✗ --bump must be patch|minor|major (got: ${opts.bump})`);
|
|
867
867
|
process.exit(2);
|
|
868
868
|
}
|
|
869
|
-
const { runExecutaPublish } = await import("./executa-publish-
|
|
869
|
+
const { runExecutaPublish } = await import("./executa-publish-DHICU6S0.js");
|
|
870
870
|
process.exit(await runExecutaPublish({
|
|
871
871
|
cwd: opts.cwd,
|
|
872
872
|
manifest: opts.manifest,
|
|
@@ -878,8 +878,41 @@ executa.command("publish").description("Mint or update an Executa (executa.json
|
|
|
878
878
|
json: opts.json
|
|
879
879
|
}));
|
|
880
880
|
});
|
|
881
|
+
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) => {
|
|
882
|
+
const { runExecutaUploadBinaries } = await import("./executa-upload-binaries-CYMtWJU7.js");
|
|
883
|
+
process.exit(await runExecutaUploadBinaries({
|
|
884
|
+
dir: opts.dir,
|
|
885
|
+
dryRun: opts.dryRun,
|
|
886
|
+
oidc: opts.oidc,
|
|
887
|
+
toolId: opts.toolId,
|
|
888
|
+
host: opts.host,
|
|
889
|
+
account: opts.account,
|
|
890
|
+
json: opts.json
|
|
891
|
+
}));
|
|
892
|
+
});
|
|
893
|
+
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`)");
|
|
894
|
+
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) => {
|
|
895
|
+
const { runTrustedPublisherAdd } = await import("./executa-trusted-publisher-tVwzjI2d.js");
|
|
896
|
+
process.exit(await runTrustedPublisherAdd(opts));
|
|
897
|
+
});
|
|
898
|
+
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) => {
|
|
899
|
+
const { runTrustedPublisherList } = await import("./executa-trusted-publisher-tVwzjI2d.js");
|
|
900
|
+
process.exit(await runTrustedPublisherList(opts));
|
|
901
|
+
});
|
|
902
|
+
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) => {
|
|
903
|
+
const id = Number(publisherId);
|
|
904
|
+
if (!Number.isInteger(id) || id <= 0) {
|
|
905
|
+
console.error(`✗ publisher-id must be a positive integer (got "${publisherId}")`);
|
|
906
|
+
process.exit(2);
|
|
907
|
+
}
|
|
908
|
+
const { runTrustedPublisherRemove } = await import("./executa-trusted-publisher-tVwzjI2d.js");
|
|
909
|
+
process.exit(await runTrustedPublisherRemove({
|
|
910
|
+
...opts,
|
|
911
|
+
publisherId: id
|
|
912
|
+
}));
|
|
913
|
+
});
|
|
881
914
|
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-
|
|
915
|
+
const { runExecutaUnpublish } = await import("./executa-destructive-DCfQ1ez5.js");
|
|
883
916
|
process.exit(await runExecutaUnpublish({
|
|
884
917
|
slug,
|
|
885
918
|
yes: opts.yes,
|
|
@@ -889,7 +922,7 @@ executa.command("unpublish <slug>").description("Flip an Executa's visibility ba
|
|
|
889
922
|
}));
|
|
890
923
|
});
|
|
891
924
|
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-
|
|
925
|
+
const { runExecutaYank } = await import("./executa-destructive-DCfQ1ez5.js");
|
|
893
926
|
process.exit(await runExecutaYank({
|
|
894
927
|
ref,
|
|
895
928
|
yes: opts.yes,
|
|
@@ -899,7 +932,7 @@ executa.command("yank <ref>").description("Hard-delete one Executa version (<slu
|
|
|
899
932
|
}));
|
|
900
933
|
});
|
|
901
934
|
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-
|
|
935
|
+
const { runExecutaDelete } = await import("./executa-destructive-DCfQ1ez5.js");
|
|
903
936
|
process.exit(await runExecutaDelete({
|
|
904
937
|
slug,
|
|
905
938
|
yes: opts.yes,
|
|
@@ -911,7 +944,7 @@ executa.command("delete <slug>").description("Hard-delete an Executa").option("-
|
|
|
911
944
|
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
945
|
const { resolve: resolve$1 } = await import("node:path");
|
|
913
946
|
const { existsSync: existsSync$1 } = await import("node:fs");
|
|
914
|
-
const { executaCachePath, invalidateExecutaCache } = await import("./executa-cache-
|
|
947
|
+
const { executaCachePath, invalidateExecutaCache } = await import("./executa-cache-WBkCLic7.js");
|
|
915
948
|
const cwd = resolve$1(opts.cwd ?? process.cwd());
|
|
916
949
|
const p = executaCachePath(cwd);
|
|
917
950
|
if (!existsSync$1(p)) {
|
|
@@ -924,7 +957,7 @@ executa.command("cache-clear").description("Delete the local `.anna/executa.json
|
|
|
924
957
|
});
|
|
925
958
|
const token = program.command("token").description("Manage developer PATs (list / revoke / scopes)");
|
|
926
959
|
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-
|
|
960
|
+
const { runTokenList } = await import("./token-COnYMRB-.js");
|
|
928
961
|
process.exit(await runTokenList({
|
|
929
962
|
includeRevoked: opts.includeRevoked,
|
|
930
963
|
account: opts.account,
|
|
@@ -937,7 +970,7 @@ token.command("revoke <id>").description("Revoke one of the caller's PATs by id"
|
|
|
937
970
|
console.error(`✗ token id must be a positive integer (got: ${id})`);
|
|
938
971
|
process.exit(2);
|
|
939
972
|
}
|
|
940
|
-
const { runTokenRevoke } = await import("./token-
|
|
973
|
+
const { runTokenRevoke } = await import("./token-COnYMRB-.js");
|
|
941
974
|
process.exit(await runTokenRevoke({
|
|
942
975
|
id: idNum,
|
|
943
976
|
account: opts.account,
|
|
@@ -945,7 +978,7 @@ token.command("revoke <id>").description("Revoke one of the caller's PATs by id"
|
|
|
945
978
|
}));
|
|
946
979
|
});
|
|
947
980
|
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-
|
|
981
|
+
const { runTokenScopes } = await import("./token-COnYMRB-.js");
|
|
949
982
|
process.exit(await runTokenScopes({
|
|
950
983
|
account: opts.account,
|
|
951
984
|
json: opts.json
|
|
@@ -960,7 +993,7 @@ program.command("publish").description("Auto-detect cwd and publish (apps publis
|
|
|
960
993
|
console.error(`✗ --bump must be patch|minor|major (got: ${opts.bump})`);
|
|
961
994
|
process.exit(2);
|
|
962
995
|
}
|
|
963
|
-
const { runTopLevelPublish } = await import("./publish-
|
|
996
|
+
const { runTopLevelPublish } = await import("./publish-DW_D3uQ4.js");
|
|
964
997
|
process.exit(await runTopLevelPublish({
|
|
965
998
|
cwd: opts.cwd,
|
|
966
999
|
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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./nexus-root-BlPwOusj.js";
|
|
2
|
-
import { parseExecutaSpec } from "./dev-
|
|
2
|
+
import { parseExecutaSpec } from "./dev-GUFWek03.js";
|
|
3
3
|
import { isAbsolute, resolve } from "node:path";
|
|
4
4
|
import { existsSync } from "node:fs";
|
|
5
5
|
import { bold, cyan, dim, green, red, yellow } from "kleur/colors";
|
|
@@ -35,7 +35,7 @@ async function runExecutaDev(opts) {
|
|
|
35
35
|
const oneShot = !!(opts.describe || opts.health || opts.invoke);
|
|
36
36
|
const quiet = oneShot && (opts.json ?? false);
|
|
37
37
|
const { getAccount } = await import("./credentials-Chkoidh5.js");
|
|
38
|
-
const { ensureDevExecutaRegistered } = await import("./dev-app-cache-
|
|
38
|
+
const { ensureDevExecutaRegistered } = await import("./dev-app-cache-B3Wa5t6X.js");
|
|
39
39
|
const needsRealMint = !opts.noSampling && !opts.mockSampling || !opts.noAgent && !opts.mockAgent || !opts.noImage && !opts.mockImage || !opts.noUpload && !opts.mockUpload || opts.storage === "real";
|
|
40
40
|
let effectiveAppSlug = opts.appSlug;
|
|
41
41
|
let autoRegistered = false;
|
|
@@ -57,7 +57,7 @@ async function runExecutaDev(opts) {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
const { SamplingBridge } = await import("./sampling-
|
|
60
|
+
const { SamplingBridge } = await import("./sampling-BpJcd6BC.js");
|
|
61
61
|
const simulateUnsupportedResponseFormat = opts.samplingUnsupportedFormat;
|
|
62
62
|
const sampling = opts.noSampling ? new SamplingBridge({ mode: "off" }) : opts.mockSampling ? new SamplingBridge({
|
|
63
63
|
mode: "mock",
|
|
@@ -69,7 +69,7 @@ async function runExecutaDev(opts) {
|
|
|
69
69
|
appSlug: effectiveAppSlug,
|
|
70
70
|
simulateUnsupportedResponseFormat
|
|
71
71
|
}) : new SamplingBridge({ mode: "off" });
|
|
72
|
-
const { AgentBridge } = await import("./agent-
|
|
72
|
+
const { AgentBridge } = await import("./agent-DAOr_aiE.js");
|
|
73
73
|
const agent = opts.noAgent ? new AgentBridge({ mode: "off" }) : opts.mockAgent ? new AgentBridge({
|
|
74
74
|
mode: "mock",
|
|
75
75
|
mockFile: opts.mockAgent
|
|
@@ -78,7 +78,7 @@ async function runExecutaDev(opts) {
|
|
|
78
78
|
account: opts.agentAccount ?? opts.samplingAccount,
|
|
79
79
|
appSlug: effectiveAppSlug
|
|
80
80
|
}) : new AgentBridge({ mode: "off" });
|
|
81
|
-
const { StorageBridge } = await import("./storage-
|
|
81
|
+
const { StorageBridge } = await import("./storage-aii8EyPC.js");
|
|
82
82
|
const storageMode = opts.storage ?? (opts.mockStorage ? "mock" : "memory");
|
|
83
83
|
const storage = new StorageBridge({
|
|
84
84
|
mode: storageMode,
|
|
@@ -88,8 +88,8 @@ async function runExecutaDev(opts) {
|
|
|
88
88
|
scopes: opts.storageScopes ? opts.storageScopes.split(",").map((s) => s.trim()).filter(Boolean) : void 0,
|
|
89
89
|
pluginName: parsed.tool_id
|
|
90
90
|
});
|
|
91
|
-
const { ExecutaRunner } = await import("./runner-
|
|
92
|
-
const { ImageBridge } = await import("./image-
|
|
91
|
+
const { ExecutaRunner } = await import("./runner-Bka_coxb.js");
|
|
92
|
+
const { ImageBridge } = await import("./image-B4UrufYH.js");
|
|
93
93
|
const image = opts.noImage ? new ImageBridge({ mode: "off" }) : opts.mockImage ? new ImageBridge({
|
|
94
94
|
mode: "mock",
|
|
95
95
|
mockFile: opts.mockImage
|
|
@@ -98,7 +98,7 @@ async function runExecutaDev(opts) {
|
|
|
98
98
|
account: opts.imageAccount ?? opts.samplingAccount,
|
|
99
99
|
appSlug: effectiveAppSlug
|
|
100
100
|
}) : new ImageBridge({ mode: "off" });
|
|
101
|
-
const { HostUploadBridge } = await import("./host_upload-
|
|
101
|
+
const { HostUploadBridge } = await import("./host_upload-DrbQ-vk2.js");
|
|
102
102
|
const hostUpload = opts.noUpload ? new HostUploadBridge({ mode: "off" }) : opts.mockUpload ? new HostUploadBridge({
|
|
103
103
|
mode: "mock",
|
|
104
104
|
mockFile: opts.mockUpload
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { readExecutaIdentity } from "./executa-cache-
|
|
2
|
-
import { parseExecutaSpec } from "./dev-
|
|
1
|
+
import { readExecutaIdentity } from "./executa-cache-BFoUtb4J.js";
|
|
2
|
+
import { parseExecutaSpec } from "./dev-GUFWek03.js";
|
|
3
3
|
import { isAbsolute, join, resolve } from "node:path";
|
|
4
4
|
import { chmodSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { bold, cyan, dim, green, red, yellow } from "kleur/colors";
|