@anna-ai/cli 0.1.1 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,7 +25,6 @@ Local dev (this repo):
25
25
 
26
26
  ```bash
27
27
  pnpm install
28
- pnpm sync:schema # vendors @anna-ai/app-schema from sibling matrix-nexus checkout
29
28
  pnpm build
30
29
  node dist/cli.js --help
31
30
  ```
@@ -115,14 +114,21 @@ For executa authors. Lives in matrix-nexus at
115
114
  `packages/anna-executa-test/`. Provides `executa_session` /
116
115
  `executa_invoke` fixtures — see that package's README.
117
116
 
118
- ## Schema bundle sync
117
+ ## Schema bundle
119
118
 
120
- The CLI vendors `@anna-ai/app-schema` until the npm bundle ships:
119
+ [`@anna-ai/app-schema`](https://www.npmjs.com/package/@anna-ai/app-schema)
120
+ is a regular npm dependency. Set `ANNA_APP_SCHEMA_DIR` to point at a
121
+ local checkout (e.g. `matrix-nexus/packages/anna-app-schema/`) to
122
+ iterate on the protocol without publishing.
121
123
 
122
- ```bash
123
- pnpm sync:schema # default: ../matrix-nexus
124
- pnpm sync:schema -- --from /path/to/... # override
125
- ```
124
+ ## Browser SDK
125
+
126
+ End-user app bundles load `AnnaAppRuntime` from
127
+ `/static/anna-apps/_sdk/<version>/index.js`. Both the matrix-nexus
128
+ production server and this CLI's harness serve that URL from the
129
+ public npm package [`@anna-ai/app-runtime`](https://www.npmjs.com/package/@anna-ai/app-runtime),
130
+ which is declared as a normal dependency. No vendored copy, no sync
131
+ step.
126
132
 
127
133
  ## Roadmap
128
134
 
package/dist/cli.js CHANGED
@@ -69,7 +69,7 @@ program.command("init <dir>").description("Scaffold a new Anna App project").opt
69
69
  process.exit(code);
70
70
  });
71
71
  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)").action(async (opts) => {
72
- const { runDev } = await import("./dev-rBqMTjjY.js");
72
+ const { runDev } = await import("./dev-DImwL-ql.js");
73
73
  const code = await runDev({
74
74
  cwd: opts.cwd ?? process.cwd(),
75
75
  manifestPath: opts.manifest,
@@ -31,7 +31,7 @@ async function runDev(opts) {
31
31
  const matrixNexusRoot = await resolveMatrixNexusRoot(opts.matrixNexusRoot, cwd);
32
32
  const mode = matrixNexusRoot ? "nexus-source" : "uvx";
33
33
  const { PythonBridge, PINNED_RUNTIME_VERSION } = await import("./bridge-BDBECvV1.js");
34
- const { HarnessServer } = await import("./server-B6-Qdluv.js");
34
+ const { HarnessServer } = await import("./server-BZULnh6k.js");
35
35
  const bridge = new PythonBridge({
36
36
  mode,
37
37
  matrixNexusRoot: matrixNexusRoot ?? void 0,
@@ -3,6 +3,7 @@ import { dirname, join, normalize, resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { readFile } from "node:fs/promises";
5
5
  import { createServer } from "node:http";
6
+ import { createRequire } from "node:module";
6
7
  import { WebSocketServer } from "ws";
7
8
 
8
9
  //#region src/harness/server.ts
@@ -197,11 +198,16 @@ var HarnessServer = class {
197
198
  }
198
199
  }
199
200
  async serveSdk(pathname, res) {
200
- const root = this.cfg.matrixNexusRoot;
201
- if (!root) return this.text(res, 404, "SDK assets not available in uvx mode");
202
- const rel = pathname.replace(/^\/static\//, "");
203
- const abs = resolve(root, "static", rel);
204
- if (!abs.startsWith(resolve(root, "static"))) return this.text(res, 403, "forbidden");
201
+ const sdkRel = pathname.replace(/^\/static\/anna-apps\/_sdk\/[^/]+\//, "");
202
+ let distRoot;
203
+ try {
204
+ const req = createRequire(import.meta.url);
205
+ distRoot = dirname(req.resolve("@anna-ai/app-runtime"));
206
+ } catch (e) {
207
+ return this.text(res, 500, `@anna-ai/app-runtime is not installed: ${e.message}`);
208
+ }
209
+ const abs = resolve(distRoot, sdkRel);
210
+ if (!abs.startsWith(distRoot)) return this.text(res, 403, "forbidden");
205
211
  return this.serveFile(abs, res);
206
212
  }
207
213
  async serveBundleAsset(rel, res) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anna-ai/cli",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Anna App developer CLI: scaffold, validate, harness (Phase 2 MVP: init + validate).",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -20,7 +20,6 @@
20
20
  "files": [
21
21
  "dist/",
22
22
  "templates/",
23
- "vendor/",
24
23
  "README.md"
25
24
  ],
26
25
  "scripts": {
@@ -29,11 +28,12 @@
29
28
  "test": "vitest run",
30
29
  "test:watch": "vitest",
31
30
  "lint": "tsc --noEmit",
32
- "sync:schema": "node scripts/sync-schema.mjs",
33
31
  "check:runtime-pin": "node scripts/check-runtime-pin.mjs",
34
32
  "prepublishOnly": "pnpm lint && pnpm test && pnpm build"
35
33
  },
36
34
  "dependencies": {
35
+ "@anna-ai/app-runtime": "^0.1.0",
36
+ "@anna-ai/app-schema": "^0.1.0",
37
37
  "ajv": "^8.17.1",
38
38
  "ajv-formats": "^3.0.1",
39
39
  "commander": "^12.1.0",
@@ -1,22 +0,0 @@
1
- # @anna/app-schema (v0.1.0)
2
-
3
- Versioned schema bundle for the Anna App platform. Generated by
4
- `scripts/export_app_schema.py` in matrix-nexus; do not edit by hand.
5
-
6
- ## Contents
7
-
8
- * `manifest/AppManifest.json` — JSON Schema for the app manifest.
9
- * `manifest/UiManifestSection.json` — JSON Schema for the `ui` block.
10
- * `host_api/methods.json` — Flat `(namespace, method)` table mirroring
11
- the dispatcher's `_DISPATCH` map. `no_auth=true` methods skip the
12
- `host_api` ACL gate.
13
- * `events/AnnaAppEvent.json` — SSE event union (the `kind` enum).
14
- * `dispatcher_version.txt` — Single source-of-truth bundle version;
15
- harnesses must refuse to start when their copy disagrees.
16
-
17
- ## Regenerate
18
-
19
- ```bash
20
- uv run python scripts/export_app_schema.py # write
21
- uv run python scripts/export_app_schema.py --check # CI gate
22
- ```
@@ -1 +0,0 @@
1
- 0.1.0
@@ -1,38 +0,0 @@
1
- {
2
- "$id": "https://schemas.anna.partners/anna-app-event.json",
3
- "$schema": "https://json-schema.org/draft/2020-12/schema",
4
- "additionalProperties": true,
5
- "description": "SSE envelope union for `event: data_model/AnnaAppEvent` frames. Bundle consumers should treat unknown `kind` values as forward-compatible additions and ignore them.",
6
- "properties": {
7
- "by_client_id": {
8
- "type": [
9
- "string",
10
- "null"
11
- ]
12
- },
13
- "kind": {
14
- "enum": [
15
- "artifact_appended",
16
- "chat_message_from_app",
17
- "close_view",
18
- "geometry_changed",
19
- "open_view",
20
- "ping",
21
- "runtime_state_synced",
22
- "status_changed",
23
- "title_changed",
24
- "window_focus_changed"
25
- ],
26
- "type": "string"
27
- },
28
- "window_uuid": {
29
- "type": "string"
30
- }
31
- },
32
- "required": [
33
- "kind"
34
- ],
35
- "title": "AnnaAppEvent",
36
- "type": "object",
37
- "version": "0.1.0"
38
- }
@@ -1,170 +0,0 @@
1
- {
2
- "$id": "https://schemas.anna.partners/host-api-methods.json",
3
- "$schema": "https://json-schema.org/draft/2020-12/schema",
4
- "description": "Flat (namespace, method) table extracted from the dispatcher's _DISPATCH map. `no_auth=true` methods bypass the host_api ACL.",
5
- "methods": [
6
- {
7
- "handler": "_h_not_implemented",
8
- "method": "create",
9
- "namespace": "artifact",
10
- "no_auth": false,
11
- "stub": true
12
- },
13
- {
14
- "handler": "_h_not_implemented",
15
- "method": "delete",
16
- "namespace": "artifact",
17
- "no_auth": false,
18
- "stub": true
19
- },
20
- {
21
- "handler": "_h_not_implemented",
22
- "method": "update",
23
- "namespace": "artifact",
24
- "no_auth": false,
25
- "stub": true
26
- },
27
- {
28
- "handler": "_h_chat_append_artifact",
29
- "method": "append_artifact",
30
- "namespace": "chat",
31
- "no_auth": false,
32
- "stub": false
33
- },
34
- {
35
- "handler": "_h_chat_read_history",
36
- "method": "read_history",
37
- "namespace": "chat",
38
- "no_auth": false,
39
- "stub": false
40
- },
41
- {
42
- "handler": "_h_chat_write_message",
43
- "method": "write_message",
44
- "namespace": "chat",
45
- "no_auth": false,
46
- "stub": false
47
- },
48
- {
49
- "handler": "_h_not_implemented",
50
- "method": "read",
51
- "namespace": "fs",
52
- "no_auth": false,
53
- "stub": true
54
- },
55
- {
56
- "handler": "_h_not_implemented",
57
- "method": "write",
58
- "namespace": "fs",
59
- "no_auth": false,
60
- "stub": true
61
- },
62
- {
63
- "handler": "_h_not_implemented",
64
- "method": "complete",
65
- "namespace": "llm",
66
- "no_auth": false,
67
- "stub": true
68
- },
69
- {
70
- "handler": "_h_not_implemented",
71
- "method": "get",
72
- "namespace": "prefs",
73
- "no_auth": false,
74
- "stub": true
75
- },
76
- {
77
- "handler": "_h_storage_delete",
78
- "method": "delete",
79
- "namespace": "storage",
80
- "no_auth": false,
81
- "stub": false
82
- },
83
- {
84
- "handler": "_h_storage_get",
85
- "method": "get",
86
- "namespace": "storage",
87
- "no_auth": false,
88
- "stub": false
89
- },
90
- {
91
- "handler": "_h_storage_set",
92
- "method": "set",
93
- "namespace": "storage",
94
- "no_auth": false,
95
- "stub": false
96
- },
97
- {
98
- "handler": "_h_tools_invoke",
99
- "method": "invoke",
100
- "namespace": "tools",
101
- "no_auth": false,
102
- "stub": false
103
- },
104
- {
105
- "handler": "_h_tools_list",
106
- "method": "list",
107
- "namespace": "tools",
108
- "no_auth": false,
109
- "stub": false
110
- },
111
- {
112
- "handler": "_h_window_close",
113
- "method": "close",
114
- "namespace": "window",
115
- "no_auth": false,
116
- "stub": false
117
- },
118
- {
119
- "handler": "_h_window_focus",
120
- "method": "focus",
121
- "namespace": "window",
122
- "no_auth": false,
123
- "stub": false
124
- },
125
- {
126
- "handler": "_h_window_hello",
127
- "method": "hello",
128
- "namespace": "window",
129
- "no_auth": true,
130
- "stub": false
131
- },
132
- {
133
- "handler": "_h_window_open_view",
134
- "method": "open_view",
135
- "namespace": "window",
136
- "no_auth": false,
137
- "stub": false
138
- },
139
- {
140
- "handler": "_h_window_ready",
141
- "method": "ready",
142
- "namespace": "window",
143
- "no_auth": true,
144
- "stub": false
145
- },
146
- {
147
- "handler": "_h_window_report_error",
148
- "method": "report_error",
149
- "namespace": "window",
150
- "no_auth": true,
151
- "stub": false
152
- },
153
- {
154
- "handler": "_h_window_resize",
155
- "method": "resize",
156
- "namespace": "window",
157
- "no_auth": false,
158
- "stub": false
159
- },
160
- {
161
- "handler": "_h_window_set_title",
162
- "method": "set_title",
163
- "namespace": "window",
164
- "no_auth": false,
165
- "stub": false
166
- }
167
- ],
168
- "title": "HostApiMethodTable",
169
- "version": "0.1.0"
170
- }
@@ -1,471 +0,0 @@
1
- {
2
- "$defs": {
3
- "AppDevConfig": {
4
- "additionalProperties": true,
5
- "description": "Optional ``manifest.dev`` block — local-harness-only configuration.\n\nProduction dispatcher ignores this field at runtime (it is declared here\nso ``extra=\"forbid\"`` doesn't reject it). ``anna-app publish`` SHOULD\nstrip ``dev`` from the manifest before upload; mirroring nexus's\nhistorical \"drop unknown keys\" behaviour.\n\nSee design doc §8 for field semantics. All fields are intentionally loose\n(`Any`) so the harness can evolve independently from the wire schema.",
6
- "properties": {
7
- "fixtures": {
8
- "anyOf": [
9
- {
10
- "items": {
11
- "type": "string"
12
- },
13
- "type": "array"
14
- },
15
- {
16
- "type": "null"
17
- }
18
- ],
19
- "default": null,
20
- "description": "Glob patterns for fixture JSONL files relative to manifest dir.",
21
- "title": "Fixtures"
22
- },
23
- "mocks": {
24
- "anyOf": [
25
- {
26
- "additionalProperties": true,
27
- "type": "object"
28
- },
29
- {
30
- "type": "null"
31
- }
32
- ],
33
- "default": null,
34
- "description": "Per-(ns,method) static response mocks, keyed by 'ns.method'.",
35
- "title": "Mocks"
36
- },
37
- "seed_storage": {
38
- "anyOf": [
39
- {
40
- "additionalProperties": true,
41
- "type": "object"
42
- },
43
- {
44
- "type": "null"
45
- }
46
- ],
47
- "default": null,
48
- "description": "Initial runtime_state for `anna-app dev` sessions.",
49
- "title": "Seed Storage"
50
- },
51
- "user_id": {
52
- "anyOf": [
53
- {
54
- "type": "integer"
55
- },
56
- {
57
- "type": "null"
58
- }
59
- ],
60
- "default": null,
61
- "description": "Override the default harness user_id (default: 1).",
62
- "title": "User Id"
63
- }
64
- },
65
- "title": "AppDevConfig",
66
- "type": "object"
67
- },
68
- "ManifestExecutaRef": {
69
- "properties": {
70
- "min_version": {
71
- "anyOf": [
72
- {
73
- "maxLength": 40,
74
- "type": "string"
75
- },
76
- {
77
- "type": "null"
78
- }
79
- ],
80
- "default": null,
81
- "title": "Min Version"
82
- },
83
- "tool_id": {
84
- "maxLength": 200,
85
- "minLength": 1,
86
- "title": "Tool Id",
87
- "type": "string"
88
- },
89
- "version": {
90
- "anyOf": [
91
- {
92
- "maxLength": 40,
93
- "type": "string"
94
- },
95
- {
96
- "type": "null"
97
- }
98
- ],
99
- "default": null,
100
- "description": "Executa snapshot version to pin. Omit or use 'latest' to auto-freeze the current Executa state at publish time.",
101
- "title": "Version"
102
- }
103
- },
104
- "required": [
105
- "tool_id"
106
- ],
107
- "title": "ManifestExecutaRef",
108
- "type": "object"
109
- },
110
- "UiBundleSection": {
111
- "additionalProperties": false,
112
- "properties": {
113
- "entry": {
114
- "maxLength": 200,
115
- "minLength": 1,
116
- "title": "Entry",
117
- "type": "string"
118
- },
119
- "external_origins": {
120
- "items": {
121
- "type": "string"
122
- },
123
- "title": "External Origins",
124
- "type": "array"
125
- },
126
- "format": {
127
- "default": "static-spa",
128
- "maxLength": 20,
129
- "title": "Format",
130
- "type": "string"
131
- }
132
- },
133
- "required": [
134
- "entry"
135
- ],
136
- "title": "UiBundleSection",
137
- "type": "object"
138
- },
139
- "UiHostApiSpec": {
140
- "additionalProperties": false,
141
- "properties": {
142
- "artifact": {
143
- "items": {
144
- "type": "string"
145
- },
146
- "title": "Artifact",
147
- "type": "array"
148
- },
149
- "chat": {
150
- "items": {
151
- "type": "string"
152
- },
153
- "title": "Chat",
154
- "type": "array"
155
- },
156
- "fs": {
157
- "items": {
158
- "type": "string"
159
- },
160
- "title": "Fs",
161
- "type": "array"
162
- },
163
- "llm": {
164
- "items": {
165
- "type": "string"
166
- },
167
- "title": "Llm",
168
- "type": "array"
169
- },
170
- "prefs": {
171
- "items": {
172
- "type": "string"
173
- },
174
- "title": "Prefs",
175
- "type": "array"
176
- },
177
- "storage": {
178
- "items": {
179
- "type": "string"
180
- },
181
- "title": "Storage",
182
- "type": "array"
183
- },
184
- "tools": {
185
- "items": {
186
- "type": "string"
187
- },
188
- "title": "Tools",
189
- "type": "array"
190
- },
191
- "window": {
192
- "items": {
193
- "type": "string"
194
- },
195
- "title": "Window",
196
- "type": "array"
197
- }
198
- },
199
- "title": "UiHostApiSpec",
200
- "type": "object"
201
- },
202
- "UiManifestSection": {
203
- "additionalProperties": false,
204
- "properties": {
205
- "bundle": {
206
- "$ref": "#/$defs/UiBundleSection"
207
- },
208
- "csp_overrides": {
209
- "additionalProperties": {
210
- "items": {
211
- "type": "string"
212
- },
213
- "type": "array"
214
- },
215
- "title": "Csp Overrides",
216
- "type": "object"
217
- },
218
- "host_api": {
219
- "$ref": "#/$defs/UiHostApiSpec"
220
- },
221
- "state_merge": {
222
- "default": "last_writer_wins",
223
- "maxLength": 20,
224
- "title": "State Merge",
225
- "type": "string"
226
- },
227
- "views": {
228
- "items": {
229
- "$ref": "#/$defs/UiViewSpec"
230
- },
231
- "title": "Views",
232
- "type": "array"
233
- }
234
- },
235
- "required": [
236
- "bundle"
237
- ],
238
- "title": "UiManifestSection",
239
- "type": "object"
240
- },
241
- "UiSize": {
242
- "additionalProperties": false,
243
- "properties": {
244
- "h": {
245
- "maximum": 4096,
246
- "minimum": 120,
247
- "title": "H",
248
- "type": "integer"
249
- },
250
- "w": {
251
- "maximum": 4096,
252
- "minimum": 120,
253
- "title": "W",
254
- "type": "integer"
255
- }
256
- },
257
- "required": [
258
- "w",
259
- "h"
260
- ],
261
- "title": "UiSize",
262
- "type": "object"
263
- },
264
- "UiViewSpec": {
265
- "additionalProperties": false,
266
- "properties": {
267
- "default": {
268
- "default": false,
269
- "title": "Default",
270
- "type": "boolean"
271
- },
272
- "default_size": {
273
- "anyOf": [
274
- {
275
- "$ref": "#/$defs/UiSize"
276
- },
277
- {
278
- "type": "null"
279
- }
280
- ],
281
- "default": null
282
- },
283
- "entry": {
284
- "anyOf": [
285
- {
286
- "maxLength": 300,
287
- "type": "string"
288
- },
289
- {
290
- "type": "null"
291
- }
292
- ],
293
- "default": null,
294
- "title": "Entry"
295
- },
296
- "icon": {
297
- "anyOf": [
298
- {
299
- "maxLength": 200,
300
- "type": "string"
301
- },
302
- {
303
- "type": "null"
304
- }
305
- ],
306
- "default": null,
307
- "title": "Icon"
308
- },
309
- "max_size": {
310
- "anyOf": [
311
- {
312
- "$ref": "#/$defs/UiSize"
313
- },
314
- {
315
- "type": "null"
316
- }
317
- ],
318
- "default": null
319
- },
320
- "min_size": {
321
- "anyOf": [
322
- {
323
- "$ref": "#/$defs/UiSize"
324
- },
325
- {
326
- "type": "null"
327
- }
328
- ],
329
- "default": null
330
- },
331
- "movable": {
332
- "default": true,
333
- "title": "Movable",
334
- "type": "boolean"
335
- },
336
- "name": {
337
- "maxLength": 40,
338
- "minLength": 1,
339
- "title": "Name",
340
- "type": "string"
341
- },
342
- "resizable": {
343
- "default": true,
344
- "title": "Resizable",
345
- "type": "boolean"
346
- },
347
- "single_instance": {
348
- "default": false,
349
- "title": "Single Instance",
350
- "type": "boolean"
351
- },
352
- "summary_template": {
353
- "anyOf": [
354
- {
355
- "maxLength": 400,
356
- "type": "string"
357
- },
358
- {
359
- "type": "null"
360
- }
361
- ],
362
- "default": null,
363
- "title": "Summary Template"
364
- },
365
- "title": {
366
- "maxLength": 120,
367
- "minLength": 1,
368
- "title": "Title",
369
- "type": "string"
370
- }
371
- },
372
- "required": [
373
- "name",
374
- "title"
375
- ],
376
- "title": "UiViewSpec",
377
- "type": "object"
378
- }
379
- },
380
- "$id": "https://schemas.anna.partners/app-manifest.json",
381
- "$schema": "https://json-schema.org/draft/2020-12/schema",
382
- "additionalProperties": false,
383
- "description": "App Manifest schema (stored in ``anna_app_versions.manifest``).\n\nAdding a field here MUST be coordinated with ``anna-app-schema`` JSON\nSchema bundle and ``DISPATCHER_VERSION`` in `versions.py`.",
384
- "properties": {
385
- "dev": {
386
- "anyOf": [
387
- {
388
- "$ref": "#/$defs/AppDevConfig"
389
- },
390
- {
391
- "type": "null"
392
- }
393
- ],
394
- "default": null
395
- },
396
- "optional_executas": {
397
- "items": {
398
- "$ref": "#/$defs/ManifestExecutaRef"
399
- },
400
- "title": "Optional Executas",
401
- "type": "array"
402
- },
403
- "permissions": {
404
- "items": {
405
- "type": "string"
406
- },
407
- "title": "Permissions",
408
- "type": "array"
409
- },
410
- "required_executas": {
411
- "items": {
412
- "$ref": "#/$defs/ManifestExecutaRef"
413
- },
414
- "title": "Required Executas",
415
- "type": "array"
416
- },
417
- "schema": {
418
- "default": 1,
419
- "maximum": 2,
420
- "minimum": 1,
421
- "title": "Schema",
422
- "type": "integer"
423
- },
424
- "system_prompt_addendum": {
425
- "anyOf": [
426
- {
427
- "maxLength": 4000,
428
- "type": "string"
429
- },
430
- {
431
- "type": "null"
432
- }
433
- ],
434
- "default": null,
435
- "title": "System Prompt Addendum"
436
- },
437
- "tags": {
438
- "items": {
439
- "type": "string"
440
- },
441
- "title": "Tags",
442
- "type": "array"
443
- },
444
- "ui": {
445
- "anyOf": [
446
- {
447
- "$ref": "#/$defs/UiManifestSection"
448
- },
449
- {
450
- "type": "null"
451
- }
452
- ],
453
- "default": null
454
- },
455
- "user_message_prefix_template": {
456
- "anyOf": [
457
- {
458
- "maxLength": 500,
459
- "type": "string"
460
- },
461
- {
462
- "type": "null"
463
- }
464
- ],
465
- "default": null,
466
- "title": "User Message Prefix Template"
467
- }
468
- },
469
- "title": "AppManifest",
470
- "type": "object"
471
- }
@@ -1,273 +0,0 @@
1
- {
2
- "$defs": {
3
- "UiBundleSection": {
4
- "additionalProperties": false,
5
- "properties": {
6
- "entry": {
7
- "maxLength": 200,
8
- "minLength": 1,
9
- "title": "Entry",
10
- "type": "string"
11
- },
12
- "external_origins": {
13
- "items": {
14
- "type": "string"
15
- },
16
- "title": "External Origins",
17
- "type": "array"
18
- },
19
- "format": {
20
- "default": "static-spa",
21
- "maxLength": 20,
22
- "title": "Format",
23
- "type": "string"
24
- }
25
- },
26
- "required": [
27
- "entry"
28
- ],
29
- "title": "UiBundleSection",
30
- "type": "object"
31
- },
32
- "UiHostApiSpec": {
33
- "additionalProperties": false,
34
- "properties": {
35
- "artifact": {
36
- "items": {
37
- "type": "string"
38
- },
39
- "title": "Artifact",
40
- "type": "array"
41
- },
42
- "chat": {
43
- "items": {
44
- "type": "string"
45
- },
46
- "title": "Chat",
47
- "type": "array"
48
- },
49
- "fs": {
50
- "items": {
51
- "type": "string"
52
- },
53
- "title": "Fs",
54
- "type": "array"
55
- },
56
- "llm": {
57
- "items": {
58
- "type": "string"
59
- },
60
- "title": "Llm",
61
- "type": "array"
62
- },
63
- "prefs": {
64
- "items": {
65
- "type": "string"
66
- },
67
- "title": "Prefs",
68
- "type": "array"
69
- },
70
- "storage": {
71
- "items": {
72
- "type": "string"
73
- },
74
- "title": "Storage",
75
- "type": "array"
76
- },
77
- "tools": {
78
- "items": {
79
- "type": "string"
80
- },
81
- "title": "Tools",
82
- "type": "array"
83
- },
84
- "window": {
85
- "items": {
86
- "type": "string"
87
- },
88
- "title": "Window",
89
- "type": "array"
90
- }
91
- },
92
- "title": "UiHostApiSpec",
93
- "type": "object"
94
- },
95
- "UiSize": {
96
- "additionalProperties": false,
97
- "properties": {
98
- "h": {
99
- "maximum": 4096,
100
- "minimum": 120,
101
- "title": "H",
102
- "type": "integer"
103
- },
104
- "w": {
105
- "maximum": 4096,
106
- "minimum": 120,
107
- "title": "W",
108
- "type": "integer"
109
- }
110
- },
111
- "required": [
112
- "w",
113
- "h"
114
- ],
115
- "title": "UiSize",
116
- "type": "object"
117
- },
118
- "UiViewSpec": {
119
- "additionalProperties": false,
120
- "properties": {
121
- "default": {
122
- "default": false,
123
- "title": "Default",
124
- "type": "boolean"
125
- },
126
- "default_size": {
127
- "anyOf": [
128
- {
129
- "$ref": "#/$defs/UiSize"
130
- },
131
- {
132
- "type": "null"
133
- }
134
- ],
135
- "default": null
136
- },
137
- "entry": {
138
- "anyOf": [
139
- {
140
- "maxLength": 300,
141
- "type": "string"
142
- },
143
- {
144
- "type": "null"
145
- }
146
- ],
147
- "default": null,
148
- "title": "Entry"
149
- },
150
- "icon": {
151
- "anyOf": [
152
- {
153
- "maxLength": 200,
154
- "type": "string"
155
- },
156
- {
157
- "type": "null"
158
- }
159
- ],
160
- "default": null,
161
- "title": "Icon"
162
- },
163
- "max_size": {
164
- "anyOf": [
165
- {
166
- "$ref": "#/$defs/UiSize"
167
- },
168
- {
169
- "type": "null"
170
- }
171
- ],
172
- "default": null
173
- },
174
- "min_size": {
175
- "anyOf": [
176
- {
177
- "$ref": "#/$defs/UiSize"
178
- },
179
- {
180
- "type": "null"
181
- }
182
- ],
183
- "default": null
184
- },
185
- "movable": {
186
- "default": true,
187
- "title": "Movable",
188
- "type": "boolean"
189
- },
190
- "name": {
191
- "maxLength": 40,
192
- "minLength": 1,
193
- "title": "Name",
194
- "type": "string"
195
- },
196
- "resizable": {
197
- "default": true,
198
- "title": "Resizable",
199
- "type": "boolean"
200
- },
201
- "single_instance": {
202
- "default": false,
203
- "title": "Single Instance",
204
- "type": "boolean"
205
- },
206
- "summary_template": {
207
- "anyOf": [
208
- {
209
- "maxLength": 400,
210
- "type": "string"
211
- },
212
- {
213
- "type": "null"
214
- }
215
- ],
216
- "default": null,
217
- "title": "Summary Template"
218
- },
219
- "title": {
220
- "maxLength": 120,
221
- "minLength": 1,
222
- "title": "Title",
223
- "type": "string"
224
- }
225
- },
226
- "required": [
227
- "name",
228
- "title"
229
- ],
230
- "title": "UiViewSpec",
231
- "type": "object"
232
- }
233
- },
234
- "$id": "https://schemas.anna.partners/ui-manifest-section.json",
235
- "$schema": "https://json-schema.org/draft/2020-12/schema",
236
- "additionalProperties": false,
237
- "properties": {
238
- "bundle": {
239
- "$ref": "#/$defs/UiBundleSection"
240
- },
241
- "csp_overrides": {
242
- "additionalProperties": {
243
- "items": {
244
- "type": "string"
245
- },
246
- "type": "array"
247
- },
248
- "title": "Csp Overrides",
249
- "type": "object"
250
- },
251
- "host_api": {
252
- "$ref": "#/$defs/UiHostApiSpec"
253
- },
254
- "state_merge": {
255
- "default": "last_writer_wins",
256
- "maxLength": 20,
257
- "title": "State Merge",
258
- "type": "string"
259
- },
260
- "views": {
261
- "items": {
262
- "$ref": "#/$defs/UiViewSpec"
263
- },
264
- "title": "Views",
265
- "type": "array"
266
- }
267
- },
268
- "required": [
269
- "bundle"
270
- ],
271
- "title": "UiManifestSection",
272
- "type": "object"
273
- }
@@ -1,25 +0,0 @@
1
- {
2
- "description": "Versioned schema bundle for the Anna App platform (manifest, host RPC table, SSE event union).",
3
- "exports": {
4
- ".": {
5
- "default": "./host_api/methods.json"
6
- },
7
- "./events": "./events/AnnaAppEvent.json",
8
- "./manifest": "./manifest/AppManifest.json",
9
- "./methods": "./host_api/methods.json",
10
- "./ui": "./manifest/UiManifestSection.json"
11
- },
12
- "files": [
13
- "manifest/",
14
- "host_api/",
15
- "events/",
16
- "dispatcher_version.txt",
17
- "README.md"
18
- ],
19
- "license": "MIT",
20
- "name": "@anna/app-schema",
21
- "publishConfig": {
22
- "access": "public"
23
- },
24
- "version": "0.1.0"
25
- }
@@ -1,13 +0,0 @@
1
- [build-system]
2
- requires = ["hatchling"]
3
- build-backend = "hatchling.build"
4
-
5
- [project]
6
- name = "anna-app-schema"
7
- version = "0.1.0"
8
- description = "Versioned schema bundle for the Anna App platform."
9
- license = { text = "MIT" }
10
- requires-python = ">=3.10"
11
-
12
- [tool.hatch.build]
13
- include = ["manifest/**", "host_api/**", "events/**", "dispatcher_version.txt", "README.md"]