@anna-ai/cli 0.1.30 → 0.1.32
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/{account-B6n0XkpV.js → account-bqao7Gp5.js} +1 -1
- package/dist/{agent-J2bELWfv.js → agent-CzPryLi6.js} +1 -1
- package/dist/{app-bundle-upload-CPf_nGou.js → app-bundle-upload-CqT9KUOl.js} +2 -2
- package/dist/{apps-73pdBAFE.js → apps-DlVsVHQ5.js} +30 -1
- package/dist/{apps-cut-C5SH9qZN.js → apps-cut-8870xpk-.js} +6 -6
- package/dist/{apps-destructive-PY0wKjqu.js → apps-destructive-B6RFjokU.js} +1 -1
- package/dist/{apps-discard-CfdkwUZ_.js → apps-discard-hVZxAQyj.js} +6 -6
- package/dist/{apps-BpJ-TvHP.js → apps-dvknZYI2.js} +1 -1
- package/dist/{apps-grants-BtXXiuJt.js → apps-grants-DnXCnkH5.js} +1 -1
- package/dist/{apps-publish-B-ZVNmgn.js → apps-publish-BKqVsS1W.js} +10 -4
- package/dist/apps-publish-Djpw5cfG.js +15 -0
- package/dist/{apps-push-Bh8zwT--.js → apps-push-B3wZr9B4.js} +13 -7
- package/dist/{apps-release-DNlN_8gz.js → apps-release-DZK30eF_.js} +2 -2
- package/dist/{apps-rename-slug-Bp-nQ_6I.js → apps-rename-slug-D2BrWasG.js} +2 -2
- package/dist/{apps-status-5DV9cY4A.js → apps-status-Ca6MdXZd.js} +1 -1
- package/dist/{apps-submit-review-DH-bzbDZ.js → apps-submit-review-DMFQI8JZ.js} +1 -1
- package/dist/{apps-sync-meta-DdPnXuIU.js → apps-sync-meta-BOb6J_wz.js} +25 -16
- package/dist/{apps-versions-vGihRRje.js → apps-versions-D1lixrmM.js} +1 -1
- package/dist/{bridge-DXH59CmP.js → bridge-CbjqAm0H.js} +1 -1
- package/dist/bridge-CzHB_IsQ.js +3 -0
- package/dist/cli.js +42 -41
- package/dist/dev-C3yWhzAp.js +4 -0
- package/dist/{dev-aWkfWGLD.js → dev-Re6NyNDS.js} +4 -4
- package/dist/{doctor-DnCYaREu.js → doctor-VrfEkedz.js} +1 -1
- package/dist/{executa-dev-0XdBPTDy.js → executa-dev-B5Uz982M.js} +8 -8
- package/dist/{executa-install-A-BgavhA.js → executa-install-BW9jjY7u.js} +1 -1
- package/dist/executa-install-Cyid8R7r.js +7 -0
- package/dist/{executa-publish-Xmm4DMO9.js → executa-publish-Ah6J7jYd.js} +1 -1
- package/dist/{executa-publish-9XQRncyN.js → executa-publish-DI_6M_ea.js} +2 -2
- package/dist/listing-meta-BlY7XMrw.js +117 -0
- package/dist/{manifest-CMc7RM57.js → manifest-DOMrcdCK.js} +16 -1
- package/dist/{publish-NTT1Libd.js → publish-GpvkaBIx.js} +6 -5
- package/dist/{runner-DVu-o_U8.js → runner-BxYjAmih.js} +9 -3
- package/dist/{server-DtnMLKQS.js → server-BMcGaUTy.js} +229 -5
- package/dist/{storage-C95wApr2.js → storage-BkF4XyI0.js} +3 -3
- package/dist/{working-orchestration-CX0ONKIq.js → working-orchestration-1jzRuk34.js} +4 -4
- package/package.json +3 -3
- package/templates/executa/go/main.go +1 -1
- package/templates/executa/node/plugin.mjs +1 -1
- package/templates/executa/python/__SLUG_PY___plugin.py +1 -1
- package/templates/minimal/executas/__SLUG__/__SLUG_PY___plugin.py +1 -1
- package/dist/apps-publish-3wbhXfAg.js +0 -14
- package/dist/bridge-CmoKMMcG.js +0 -3
- package/dist/dev-C9VpI_AL.js +0 -4
- package/dist/executa-install-Bc1WRrWu.js +0 -7
- /package/dist/{dev-account-WXEjIE16.js → dev-account-DqEFCmVg.js} +0 -0
- /package/dist/{dev-app-cache-CP2P8SCZ.js → dev-app-cache-Dv1dZ_bw.js} +0 -0
- /package/dist/{executa-destructive-8iSnfmcn.js → executa-destructive-Bz7vWxEO.js} +0 -0
- /package/dist/{executa-init-BCqJUZXT.js → executa-init-D-kWINZ3.js} +0 -0
- /package/dist/{executa-reads-CjIr8BuD.js → executa-reads-BXDJWWw6.js} +0 -0
- /package/dist/{executa-register-CMmlKyKB.js → executa-register-D5kvSSz_.js} +0 -0
- /package/dist/{fixture-BJqc1IfX.js → fixture-BUKQYR5e.js} +0 -0
- /package/dist/{host_upload-sfo4UHlR.js → host_upload-BVzAqvX1.js} +0 -0
- /package/dist/{image-Bdi4Hu0m.js → image-BLPyUbGQ.js} +0 -0
- /package/dist/{login-CslsHbsq.js → login-DhgBgsfx.js} +0 -0
- /package/dist/{logout-B4_b9ZL0.js → logout-VYDkLYAx.js} +0 -0
- /package/dist/{sampling-Cc0qaj8a.js → sampling-XBIEYU4A.js} +0 -0
- /package/dist/{token-hGGfoge2.js → token-uedeaAy7.js} +0 -0
- /package/dist/{whoami-ChzwOaN2.js → whoami-C_x26b_k.js} +0 -0
|
@@ -42,6 +42,7 @@ function loadAppManifest(cwd, manifestPath) {
|
|
|
42
42
|
const metadataRaw = appJsonRaw ?? raw;
|
|
43
43
|
const metadataLabel = hasAppJson ? "app.json" : "manifest.json";
|
|
44
44
|
const pickMeta = (k) => (appJsonRaw && pickString(appJsonRaw, k)) ?? pickString(raw, k);
|
|
45
|
+
const pickMetaArray = (k) => (appJsonRaw && pickStringArray(appJsonRaw, k)) ?? pickStringArray(raw, k);
|
|
45
46
|
const slug = pickMeta("slug");
|
|
46
47
|
const name = pickMeta("name") ?? slug ?? "";
|
|
47
48
|
const version = pickMeta("version") ?? "0.1.0";
|
|
@@ -63,7 +64,15 @@ function loadAppManifest(cwd, manifestPath) {
|
|
|
63
64
|
category: pickMeta("category"),
|
|
64
65
|
tagline: pickMeta("tagline"),
|
|
65
66
|
description: pickMeta("description"),
|
|
66
|
-
changelog: pickMeta("changelog")
|
|
67
|
+
changelog: pickMeta("changelog"),
|
|
68
|
+
logoUrl: pickMeta("logo_url"),
|
|
69
|
+
logoFile: pickMeta("logo_file"),
|
|
70
|
+
coverUrl: pickMeta("cover_url"),
|
|
71
|
+
screenshots: pickMetaArray("screenshots"),
|
|
72
|
+
homepageUrl: pickMeta("homepage_url"),
|
|
73
|
+
supportUrl: pickMeta("support_url"),
|
|
74
|
+
privacyUrl: pickMeta("privacy_url"),
|
|
75
|
+
pricingModel: pickMeta("pricing_model")
|
|
67
76
|
};
|
|
68
77
|
}
|
|
69
78
|
const HANDLE_RE = /^[a-z0-9][a-z0-9-]{0,62}$/;
|
|
@@ -242,6 +251,12 @@ function pickString(o, k) {
|
|
|
242
251
|
const v = o[k];
|
|
243
252
|
return typeof v === "string" ? v : void 0;
|
|
244
253
|
}
|
|
254
|
+
function pickStringArray(o, k) {
|
|
255
|
+
const v = o[k];
|
|
256
|
+
if (!Array.isArray(v)) return void 0;
|
|
257
|
+
const out = v.filter((x) => typeof x === "string");
|
|
258
|
+
return out.length > 0 ? out : void 0;
|
|
259
|
+
}
|
|
245
260
|
|
|
246
261
|
//#endregion
|
|
247
262
|
export { loadAppManifest, loadExecutaManifest };
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import "./credentials-BTv2IfUZ.js";
|
|
2
|
-
import "./apps-
|
|
2
|
+
import "./apps-DlVsVHQ5.js";
|
|
3
3
|
import { CliError } from "./client-D-_z1ALk.js";
|
|
4
4
|
import { withErrorHandling } from "./_lifecycle-shared-CUK2CE76.js";
|
|
5
5
|
import "./bundled-executas-_H1A9M50.js";
|
|
6
6
|
import "./executas-BhFed1B-.js";
|
|
7
7
|
import "./executa-cache-Do1D7xC0.js";
|
|
8
|
-
import { runExecutaPublish } from "./executa-publish-
|
|
9
|
-
import "./manifest-
|
|
8
|
+
import { runExecutaPublish } from "./executa-publish-Ah6J7jYd.js";
|
|
9
|
+
import "./manifest-DOMrcdCK.js";
|
|
10
10
|
import "./app-cache-BqnTkxUw.js";
|
|
11
|
-
import "./
|
|
12
|
-
import
|
|
11
|
+
import "./listing-meta-BlY7XMrw.js";
|
|
12
|
+
import "./app-bundle-upload-CqT9KUOl.js";
|
|
13
|
+
import { runAppsPublish } from "./apps-publish-BKqVsS1W.js";
|
|
13
14
|
import { resolve } from "node:path";
|
|
14
15
|
import { existsSync } from "node:fs";
|
|
15
16
|
import { red, yellow } from "kleur/colors";
|
|
@@ -2,10 +2,16 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { createInterface } from "node:readline";
|
|
3
3
|
|
|
4
4
|
//#region src/executa/runner.ts
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Host `initialize` request params. Mirrors the production matrix Agent
|
|
7
|
+
* (`matrix/src/executa/loader.py::negotiate`), which sends camelCase
|
|
8
|
+
* `clientInfo` + `capabilities`. The CLI advertises a richer capability
|
|
9
|
+
* set because the dev runner also brokers agent/storage/image/upload
|
|
10
|
+
* reverse RPCs.
|
|
11
|
+
*/
|
|
6
12
|
const HOST_INITIALIZE_PARAMS = {
|
|
7
13
|
protocolVersion: "2.0",
|
|
8
|
-
|
|
14
|
+
capabilities: {
|
|
9
15
|
sampling: {},
|
|
10
16
|
agent: {},
|
|
11
17
|
storage: {},
|
|
@@ -13,7 +19,7 @@ const HOST_INITIALIZE_PARAMS = {
|
|
|
13
19
|
"image.edit": {},
|
|
14
20
|
upload: {}
|
|
15
21
|
},
|
|
16
|
-
|
|
22
|
+
clientInfo: {
|
|
17
23
|
name: "anna-app-cli",
|
|
18
24
|
version: "executa-dev"
|
|
19
25
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { canonicalHost, getAccount } from "./credentials-BTv2IfUZ.js";
|
|
2
|
-
import { BridgeRequestError } from "./bridge-
|
|
2
|
+
import { BridgeRequestError } from "./bridge-CbjqAm0H.js";
|
|
3
3
|
import { dirname, join, normalize, resolve } from "node:path";
|
|
4
4
|
import { createRequire } from "node:module";
|
|
5
5
|
import { createReadStream, existsSync, readFileSync, statSync, watch } from "node:fs";
|
|
@@ -128,7 +128,7 @@ var LlmBridge = class {
|
|
|
128
128
|
* - ``aps``: the bridge claims storage and forwards to real nexus APS
|
|
129
129
|
* via ``/api/v1/storage/*`` with a Bearer ``storage_token``. */
|
|
130
130
|
handles(ns, method) {
|
|
131
|
-
if (ns === "llm" && (method === "complete" || method === "embed")) return true;
|
|
131
|
+
if (ns === "llm" && (method === "complete" || method === "embed" || method === "stream")) return true;
|
|
132
132
|
if (ns === "agent" && method.startsWith("session.")) return true;
|
|
133
133
|
if (ns === "image" && (method === "generate" || method === "edit")) return true;
|
|
134
134
|
if (ns === "upload" && (method === "inline" || method === "negotiate" || method === "confirm")) return true;
|
|
@@ -140,7 +140,7 @@ var LlmBridge = class {
|
|
|
140
140
|
* ``LlmBridge.handles(ns, method)`` without an instance. Returns the
|
|
141
141
|
* legacy (no-storage) decision since options aren't available here. */
|
|
142
142
|
static handles(ns, method) {
|
|
143
|
-
if (ns === "llm" && (method === "complete" || method === "embed")) return true;
|
|
143
|
+
if (ns === "llm" && (method === "complete" || method === "embed" || method === "stream")) return true;
|
|
144
144
|
if (ns === "agent" && method.startsWith("session.")) return true;
|
|
145
145
|
if (ns === "image" && (method === "generate" || method === "edit")) return true;
|
|
146
146
|
if (ns === "upload" && (method === "inline" || method === "negotiate" || method === "confirm")) return true;
|
|
@@ -453,6 +453,25 @@ var LlmBridge = class {
|
|
|
453
453
|
result
|
|
454
454
|
};
|
|
455
455
|
}
|
|
456
|
+
if (args.ns === "llm" && args.method === "stream") {
|
|
457
|
+
const ms = await this.mintComplete(args.windowUuid);
|
|
458
|
+
const sid = `dev-${++this.streamCounter}`;
|
|
459
|
+
this.pumpCompleteStream({
|
|
460
|
+
host: acc.host,
|
|
461
|
+
token: ms.appSessionToken,
|
|
462
|
+
body: args.args,
|
|
463
|
+
streamId: sid,
|
|
464
|
+
windowUuid: args.windowUuid,
|
|
465
|
+
onEvent: args.onEvent
|
|
466
|
+
});
|
|
467
|
+
return {
|
|
468
|
+
ok: true,
|
|
469
|
+
result: {
|
|
470
|
+
stream_id: sid,
|
|
471
|
+
run_id: String(args.args.run_id ?? sid)
|
|
472
|
+
}
|
|
473
|
+
};
|
|
474
|
+
}
|
|
456
475
|
if (args.ns === "agent") switch (args.method) {
|
|
457
476
|
case "session.create": {
|
|
458
477
|
const ms = await this.mintAgent(args.args);
|
|
@@ -846,7 +865,24 @@ var LlmBridge = class {
|
|
|
846
865
|
}
|
|
847
866
|
/** Consume an SSE response and forward each frame as `rpc.stream`. */
|
|
848
867
|
async pumpAgentRun(args) {
|
|
849
|
-
|
|
868
|
+
await this.pumpSse({
|
|
869
|
+
...args,
|
|
870
|
+
url: `${canonicalHost(args.host)}/api/v1/copilot/app/agent`
|
|
871
|
+
});
|
|
872
|
+
}
|
|
873
|
+
/** L1 streaming: consume ``/app/complete/stream`` SSE and forward each
|
|
874
|
+
* ``{event:"model_token"|"complete"}`` frame as ``rpc.stream`` (mirrors
|
|
875
|
+
* ``pumpAgentRun``). */
|
|
876
|
+
async pumpCompleteStream(args) {
|
|
877
|
+
await this.pumpSse({
|
|
878
|
+
...args,
|
|
879
|
+
url: `${canonicalHost(args.host)}/api/v1/copilot/app/complete/stream`
|
|
880
|
+
});
|
|
881
|
+
}
|
|
882
|
+
/** Shared SSE→rpc.stream pump used by both L1 (`llm.stream`) and L2
|
|
883
|
+
* (`agent.session.run`) — POSTs the body, reassembles `data:` frames,
|
|
884
|
+
* and re-emits each as an ordered `rpc.stream` event. */
|
|
885
|
+
async pumpSse(args) {
|
|
850
886
|
let seq = 0;
|
|
851
887
|
const emit = (payload, done) => {
|
|
852
888
|
seq += 1;
|
|
@@ -859,7 +895,7 @@ var LlmBridge = class {
|
|
|
859
895
|
});
|
|
860
896
|
};
|
|
861
897
|
try {
|
|
862
|
-
const res = await fetch(url, {
|
|
898
|
+
const res = await fetch(args.url, {
|
|
863
899
|
method: "POST",
|
|
864
900
|
headers: {
|
|
865
901
|
"content-type": "application/json",
|
|
@@ -951,6 +987,187 @@ const MIME = {
|
|
|
951
987
|
".woff2": "font/woff2",
|
|
952
988
|
".map": "application/json"
|
|
953
989
|
};
|
|
990
|
+
function makeAppsStub() {
|
|
991
|
+
const catalog = [
|
|
992
|
+
{
|
|
993
|
+
id: 1,
|
|
994
|
+
slug: "finder",
|
|
995
|
+
qualified_ref: "@anna/finder",
|
|
996
|
+
name: "Finder",
|
|
997
|
+
tagline: "Browse, preview and curate APS storage.",
|
|
998
|
+
logo_url: null,
|
|
999
|
+
category: "utilities",
|
|
1000
|
+
is_enabled: true,
|
|
1001
|
+
installed_version: "0.0.1",
|
|
1002
|
+
latest_version: "0.0.1",
|
|
1003
|
+
update_available: false,
|
|
1004
|
+
deck_pinned: true,
|
|
1005
|
+
deck_order: 0
|
|
1006
|
+
},
|
|
1007
|
+
{
|
|
1008
|
+
id: 2,
|
|
1009
|
+
slug: "avalon",
|
|
1010
|
+
qualified_ref: "@anna/avalon",
|
|
1011
|
+
name: "Avalon",
|
|
1012
|
+
tagline: "A 5-player social-deduction game.",
|
|
1013
|
+
logo_url: null,
|
|
1014
|
+
category: "game",
|
|
1015
|
+
is_enabled: true,
|
|
1016
|
+
installed_version: "0.0.1",
|
|
1017
|
+
latest_version: "0.0.1",
|
|
1018
|
+
update_available: false,
|
|
1019
|
+
deck_pinned: false,
|
|
1020
|
+
deck_order: null
|
|
1021
|
+
},
|
|
1022
|
+
{
|
|
1023
|
+
id: 3,
|
|
1024
|
+
slug: "apps",
|
|
1025
|
+
qualified_ref: "@anna/apps",
|
|
1026
|
+
name: "Apps",
|
|
1027
|
+
tagline: "A Launchpad-style launcher for your installed apps.",
|
|
1028
|
+
logo_url: null,
|
|
1029
|
+
category: "utilities",
|
|
1030
|
+
is_enabled: true,
|
|
1031
|
+
installed_version: "0.0.1",
|
|
1032
|
+
latest_version: "0.0.1",
|
|
1033
|
+
update_available: false,
|
|
1034
|
+
deck_pinned: true,
|
|
1035
|
+
deck_order: 1
|
|
1036
|
+
}
|
|
1037
|
+
];
|
|
1038
|
+
const resolve$1 = (ref) => {
|
|
1039
|
+
if (typeof ref === "number") return catalog.find((a) => a.id === ref);
|
|
1040
|
+
const s = String(ref ?? "").trim();
|
|
1041
|
+
if (/^\d+$/.test(s)) return catalog.find((a) => a.id === Number(s));
|
|
1042
|
+
return catalog.find((a) => a.qualified_ref === s || a.slug === s);
|
|
1043
|
+
};
|
|
1044
|
+
const deck = () => catalog.filter((a) => a.deck_pinned).sort((a, b) => (a.deck_order ?? 0) - (b.deck_order ?? 0));
|
|
1045
|
+
const nextOrder = () => deck().reduce((m, a) => Math.max(m, a.deck_order ?? 0), -1) + 1;
|
|
1046
|
+
const handle = (method, args) => {
|
|
1047
|
+
switch (method) {
|
|
1048
|
+
case "list": {
|
|
1049
|
+
const q = String(args.search ?? args.query ?? "").trim().toLowerCase();
|
|
1050
|
+
const items = q ? catalog.filter((a) => a.name.toLowerCase().includes(q) || a.slug.toLowerCase().includes(q) || a.tagline.toLowerCase().includes(q) || a.category.toLowerCase().includes(q)) : catalog;
|
|
1051
|
+
return {
|
|
1052
|
+
ok: true,
|
|
1053
|
+
result: { items }
|
|
1054
|
+
};
|
|
1055
|
+
}
|
|
1056
|
+
case "search": {
|
|
1057
|
+
const q = String(args.query ?? args.search ?? "").trim().toLowerCase();
|
|
1058
|
+
const items = catalog.filter((a) => a.name.toLowerCase().includes(q) || a.slug.toLowerCase().includes(q) || a.tagline.toLowerCase().includes(q));
|
|
1059
|
+
return {
|
|
1060
|
+
ok: true,
|
|
1061
|
+
result: { items }
|
|
1062
|
+
};
|
|
1063
|
+
}
|
|
1064
|
+
case "get": {
|
|
1065
|
+
const hit = resolve$1(args.app_ref ?? args.app_id);
|
|
1066
|
+
return hit ? {
|
|
1067
|
+
ok: true,
|
|
1068
|
+
result: hit
|
|
1069
|
+
} : {
|
|
1070
|
+
ok: false,
|
|
1071
|
+
error: {
|
|
1072
|
+
code: "app_not_installed",
|
|
1073
|
+
message: "not installed"
|
|
1074
|
+
}
|
|
1075
|
+
};
|
|
1076
|
+
}
|
|
1077
|
+
case "launch": {
|
|
1078
|
+
const hit = resolve$1(args.app_ref ?? args.app_id);
|
|
1079
|
+
if (!hit) return {
|
|
1080
|
+
ok: false,
|
|
1081
|
+
error: {
|
|
1082
|
+
code: "app_not_installed",
|
|
1083
|
+
message: "not installed"
|
|
1084
|
+
}
|
|
1085
|
+
};
|
|
1086
|
+
return {
|
|
1087
|
+
ok: true,
|
|
1088
|
+
result: {
|
|
1089
|
+
window_uuid: `dev-win-${hit.slug}`,
|
|
1090
|
+
app: {
|
|
1091
|
+
id: hit.id,
|
|
1092
|
+
slug: hit.slug,
|
|
1093
|
+
name: hit.name
|
|
1094
|
+
},
|
|
1095
|
+
opened_new: true
|
|
1096
|
+
}
|
|
1097
|
+
};
|
|
1098
|
+
}
|
|
1099
|
+
case "deck.list": return {
|
|
1100
|
+
ok: true,
|
|
1101
|
+
result: { items: deck() }
|
|
1102
|
+
};
|
|
1103
|
+
case "deck.add": {
|
|
1104
|
+
const hit = resolve$1(args.app_ref ?? args.app_id);
|
|
1105
|
+
if (!hit) return {
|
|
1106
|
+
ok: false,
|
|
1107
|
+
error: {
|
|
1108
|
+
code: "app_not_installed",
|
|
1109
|
+
message: "not installed"
|
|
1110
|
+
}
|
|
1111
|
+
};
|
|
1112
|
+
if (!hit.deck_pinned) {
|
|
1113
|
+
hit.deck_pinned = true;
|
|
1114
|
+
hit.deck_order = nextOrder();
|
|
1115
|
+
}
|
|
1116
|
+
return {
|
|
1117
|
+
ok: true,
|
|
1118
|
+
result: { items: deck() }
|
|
1119
|
+
};
|
|
1120
|
+
}
|
|
1121
|
+
case "deck.remove": {
|
|
1122
|
+
const hit = resolve$1(args.app_ref ?? args.app_id);
|
|
1123
|
+
if (!hit) return {
|
|
1124
|
+
ok: false,
|
|
1125
|
+
error: {
|
|
1126
|
+
code: "app_not_installed",
|
|
1127
|
+
message: "not installed"
|
|
1128
|
+
}
|
|
1129
|
+
};
|
|
1130
|
+
if (hit.deck_pinned) {
|
|
1131
|
+
hit.deck_pinned = false;
|
|
1132
|
+
hit.deck_order = null;
|
|
1133
|
+
}
|
|
1134
|
+
return {
|
|
1135
|
+
ok: true,
|
|
1136
|
+
result: { items: deck() }
|
|
1137
|
+
};
|
|
1138
|
+
}
|
|
1139
|
+
case "deck.reorder": {
|
|
1140
|
+
const ordered = args.ordered ?? args.app_refs;
|
|
1141
|
+
if (!Array.isArray(ordered)) return {
|
|
1142
|
+
ok: false,
|
|
1143
|
+
error: {
|
|
1144
|
+
code: "invalid_arg",
|
|
1145
|
+
message: "ordered must be a list"
|
|
1146
|
+
}
|
|
1147
|
+
};
|
|
1148
|
+
ordered.forEach((ref, i) => {
|
|
1149
|
+
const hit = resolve$1(ref);
|
|
1150
|
+
if (hit) {
|
|
1151
|
+
hit.deck_pinned = true;
|
|
1152
|
+
hit.deck_order = i;
|
|
1153
|
+
}
|
|
1154
|
+
});
|
|
1155
|
+
return {
|
|
1156
|
+
ok: true,
|
|
1157
|
+
result: { items: deck() }
|
|
1158
|
+
};
|
|
1159
|
+
}
|
|
1160
|
+
default: return {
|
|
1161
|
+
ok: false,
|
|
1162
|
+
error: {
|
|
1163
|
+
code: "not_implemented",
|
|
1164
|
+
message: `apps.${method} stub missing`
|
|
1165
|
+
}
|
|
1166
|
+
};
|
|
1167
|
+
}
|
|
1168
|
+
};
|
|
1169
|
+
return { handle };
|
|
1170
|
+
}
|
|
954
1171
|
var HarnessServer = class {
|
|
955
1172
|
server = createServer((req, res) => this.handle(req, res));
|
|
956
1173
|
wss = null;
|
|
@@ -961,6 +1178,8 @@ var HarnessServer = class {
|
|
|
961
1178
|
/** Pending events queued by the LLM bridge — drained alongside Python events. */
|
|
962
1179
|
llmEventQueue = [];
|
|
963
1180
|
llmBridge;
|
|
1181
|
+
/** In-memory `apps.*` dev stub (Apps launcher). */
|
|
1182
|
+
appsStub = makeAppsStub();
|
|
964
1183
|
constructor(cfg, bridge) {
|
|
965
1184
|
this.cfg = cfg;
|
|
966
1185
|
this.bridge = bridge;
|
|
@@ -1242,6 +1461,11 @@ var HarnessServer = class {
|
|
|
1242
1461
|
}
|
|
1243
1462
|
});
|
|
1244
1463
|
}
|
|
1464
|
+
if (parsed.ns === "apps") {
|
|
1465
|
+
const out = this.appsStub.handle(parsed.method, parsed.args ?? {});
|
|
1466
|
+
this.json(res, 200, out);
|
|
1467
|
+
return;
|
|
1468
|
+
}
|
|
1245
1469
|
if (this.llmBridge != null && this.llmBridge.handles(parsed.ns, parsed.method)) {
|
|
1246
1470
|
const out = await this.llmBridge.dispatch({
|
|
1247
1471
|
windowUuid: this.sessionId ?? "harness",
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { canonicalHost } from "./credentials-BTv2IfUZ.js";
|
|
2
|
-
import { hostOf, requireAccount, withCode } from "./dev-account-
|
|
2
|
+
import { hostOf, requireAccount, withCode } from "./dev-account-DqEFCmVg.js";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
|
|
6
6
|
//#region src/executa/storage.ts
|
|
7
7
|
/** JSON-RPC error codes from matrix/src/executa/protocol.py. */
|
|
8
|
-
const STORAGE_ERR_INVALID_REQUEST = -32020;
|
|
9
8
|
const STORAGE_ERR_NOT_GRANTED = -32021;
|
|
10
9
|
const STORAGE_ERR_NOT_FOUND = -32022;
|
|
11
10
|
const STORAGE_ERR_PRECONDITION_FAILED = -32023;
|
|
12
|
-
const
|
|
11
|
+
const STORAGE_ERR_INVALID_REQUEST = -32028;
|
|
12
|
+
const STORAGE_ERR_UPSTREAM = -32029;
|
|
13
13
|
/** Method → (http_method, sub_path, payload_kind). Mirrors matrix/storage.py. */
|
|
14
14
|
const ROUTING = {
|
|
15
15
|
"storage/get": [
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { canonicalHost } from "./credentials-BTv2IfUZ.js";
|
|
2
|
-
import { createApp, findAppBySlug, getApp } from "./apps-
|
|
2
|
+
import { createApp, findAppBySlug, getApp } from "./apps-DlVsVHQ5.js";
|
|
3
3
|
import { CliError } from "./client-D-_z1ALk.js";
|
|
4
4
|
import { parseExecutaIdOverrides, readExecutasLock, substituteBundledRefs, validateBundledHandles, writeBundleToolIdSidecar, writeExecutasLock } from "./bundled-executas-_H1A9M50.js";
|
|
5
|
-
import { runExecutaPublish } from "./executa-publish-
|
|
6
|
-
import { loadExecutaManifest } from "./manifest-
|
|
7
|
-
import { runExecutaInstall } from "./executa-install-
|
|
5
|
+
import { runExecutaPublish } from "./executa-publish-Ah6J7jYd.js";
|
|
6
|
+
import { loadExecutaManifest } from "./manifest-DOMrcdCK.js";
|
|
7
|
+
import { runExecutaInstall } from "./executa-install-BW9jjY7u.js";
|
|
8
8
|
import { appCacheMatches, readAppIdentity, writeAppIdentity } from "./app-cache-BqnTkxUw.js";
|
|
9
9
|
import { join, resolve } from "node:path";
|
|
10
10
|
import { dim, green, yellow } from "kleur/colors";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anna-ai/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.32",
|
|
4
4
|
"description": "Anna App developer CLI: scaffold, validate, harness (Phase 2 MVP: init + validate).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"prepublishOnly": "pnpm lint && pnpm test && pnpm build && node scripts/check-runtime-pin.mjs && node scripts/check-sdk-pin.mjs"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@anna-ai/app-runtime": "^0.
|
|
37
|
-
"@anna-ai/app-schema": "^0.
|
|
36
|
+
"@anna-ai/app-runtime": "^0.10.0",
|
|
37
|
+
"@anna-ai/app-schema": "^0.12.0",
|
|
38
38
|
"ajv": "^8.17.1",
|
|
39
39
|
"ajv-formats": "^3.0.1",
|
|
40
40
|
"commander": "^12.1.0",
|
|
@@ -85,7 +85,7 @@ async function dispatch(env) {
|
|
|
85
85
|
} else if (method === "describe") {
|
|
86
86
|
result = MANIFEST;
|
|
87
87
|
} else if (method === "health") {
|
|
88
|
-
result = { status: "
|
|
88
|
+
result = { status: "ready" };
|
|
89
89
|
} else if (method === "invoke") {
|
|
90
90
|
result = await invoke(params.tool, params.arguments ?? {});
|
|
91
91
|
} else {
|
|
@@ -119,7 +119,7 @@ def _dispatch(env: dict[str, Any]) -> None:
|
|
|
119
119
|
elif method == "describe":
|
|
120
120
|
result = MANIFEST
|
|
121
121
|
elif method == "health":
|
|
122
|
-
result = {"status": "
|
|
122
|
+
result = {"status": "ready"}
|
|
123
123
|
elif method == "invoke":
|
|
124
124
|
params = env.get("params", {})
|
|
125
125
|
result = invoke(params.get("tool", ""), params.get("arguments", {}))
|
|
@@ -40,7 +40,7 @@ def main() -> None:
|
|
|
40
40
|
if req.get("method") == "describe":
|
|
41
41
|
result = MANIFEST
|
|
42
42
|
elif req.get("method") == "health":
|
|
43
|
-
result = {"status": "
|
|
43
|
+
result = {"status": "ready"}
|
|
44
44
|
elif req.get("method") == "invoke":
|
|
45
45
|
result = invoke(req["params"]["tool"], req["params"].get("arguments", {}))
|
|
46
46
|
else:
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import "./credentials-BTv2IfUZ.js";
|
|
2
|
-
import "./apps-73pdBAFE.js";
|
|
3
|
-
import "./client-D-_z1ALk.js";
|
|
4
|
-
import "./_lifecycle-shared-CUK2CE76.js";
|
|
5
|
-
import "./bundled-executas-_H1A9M50.js";
|
|
6
|
-
import "./executas-BhFed1B-.js";
|
|
7
|
-
import "./executa-cache-Do1D7xC0.js";
|
|
8
|
-
import "./executa-publish-Xmm4DMO9.js";
|
|
9
|
-
import "./manifest-CMc7RM57.js";
|
|
10
|
-
import "./app-cache-BqnTkxUw.js";
|
|
11
|
-
import "./app-bundle-upload-CPf_nGou.js";
|
|
12
|
-
import { runAppsPublish } from "./apps-publish-B-ZVNmgn.js";
|
|
13
|
-
|
|
14
|
-
export { runAppsPublish };
|
package/dist/bridge-CmoKMMcG.js
DELETED
package/dist/dev-C9VpI_AL.js
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|