anna-app-schema 0.1.0__tar.gz

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.
@@ -0,0 +1,167 @@
1
+ # matrix agent repository
2
+ matrix/
3
+
4
+ # git diff files
5
+ git.diff
6
+
7
+ # Byte-compiled / optimized / DLL files
8
+ __pycache__/
9
+ *.py[cod]
10
+ *$py.class
11
+
12
+ # C extensions
13
+ *.so
14
+
15
+ # Distribution / packaging
16
+ .Python
17
+ build/
18
+ develop-eggs/
19
+ dist/
20
+ downloads/
21
+ eggs/
22
+ .eggs/
23
+ lib/
24
+ lib64/
25
+ parts/
26
+ sdist/
27
+ var/
28
+ wheels/
29
+ share/python-wheels/
30
+ *.egg-info/
31
+ .installed.cfg
32
+ *.egg
33
+ # setuptools sdist MANIFEST (only at repo root — must NOT swallow the
34
+ # packages/anna-app-schema/manifest/ schema bundle directory).
35
+ /MANIFEST
36
+
37
+ # PyInstaller
38
+ # Anchored to repo root for the same reason — `*.manifest` is too broad
39
+ # and was matching schema bundle files. Re-add specific paths if a real
40
+ # PyInstaller .manifest ever ships.
41
+ /*.manifest
42
+ *.spec
43
+
44
+ # Installer logs
45
+ pip-log.txt
46
+ pip-delete-this-directory.txt
47
+
48
+ # Unit test / coverage reports
49
+ htmlcov/
50
+ .tox/
51
+ .nox/
52
+ .coverage
53
+ .coverage.*
54
+ .cache
55
+ nosetests.xml
56
+ coverage.xml
57
+ *.cover
58
+ *.py,cover
59
+ .hypothesis/
60
+ .pytest_cache/
61
+ cover/
62
+
63
+ # Translations
64
+ *.mo
65
+ *.pot
66
+
67
+ # Django stuff:
68
+ *.log
69
+ local_settings.py
70
+ db.sqlite3
71
+ db.sqlite3-journal
72
+
73
+ # Flask stuff:
74
+ instance/
75
+ .webassets-cache
76
+
77
+ # Scrapy stuff:
78
+ .scrapy
79
+
80
+ # Sphinx documentation
81
+ docs/_build/
82
+
83
+ # PyBuilder
84
+ .pybuilder/
85
+ target/
86
+
87
+ # Jupyter Notebook
88
+ .ipynb_checkpoints
89
+
90
+ # IPython
91
+ profile_default/
92
+ ipython_config.py
93
+
94
+ # pyenv
95
+ .python-version
96
+
97
+ # pipenv
98
+ Pipfile.lock
99
+
100
+ # poetry
101
+ poetry.lock
102
+
103
+ # pdm
104
+ .pdm.toml
105
+
106
+ # PEP 582
107
+ __pypackages__/
108
+
109
+ # Celery stuff
110
+ celerybeat-schedule
111
+ celerybeat.pid
112
+
113
+ # SageMath parsed files
114
+ *.sage.py
115
+
116
+ # Environments
117
+ .env
118
+ .venv
119
+ env/
120
+ venv/
121
+ ENV/
122
+ env.bak/
123
+ venv.bak/
124
+
125
+ # Spyder project settings
126
+ .spyderproject
127
+ .spyproject
128
+
129
+ # Rope project settings
130
+ .ropeproject
131
+
132
+ # mkdocs documentation
133
+ /site
134
+
135
+ # mypy
136
+ .mypy_cache/
137
+ .dmypy.json
138
+ dmypy.json
139
+
140
+ # Pyre type checker
141
+ .pyre/
142
+
143
+ # pytype static type analyzer
144
+ .pytype/
145
+
146
+ # Cython debug symbols
147
+ cython_debug/
148
+
149
+ # IDE
150
+ .idea/
151
+ *.swp
152
+ *.swo
153
+ *~
154
+ .DS_Store
155
+
156
+ # Project specific
157
+ *.tmp
158
+ *.bak
159
+
160
+ # Security - RSA keys
161
+ private_key.pem
162
+ *.pem
163
+ !public_key.pem
164
+
165
+ scripts/nats_auth
166
+ # Anna App runtime cache
167
+ static/anna-apps-cache/
@@ -0,0 +1,6 @@
1
+ Metadata-Version: 2.4
2
+ Name: anna-app-schema
3
+ Version: 0.1.0
4
+ Summary: Versioned schema bundle for the Anna App platform.
5
+ License: MIT
6
+ Requires-Python: >=3.10
@@ -0,0 +1,22 @@
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
+ ```
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,38 @@
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
+ }
@@ -0,0 +1,170 @@
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
+ }
@@ -0,0 +1,471 @@
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
+ }
@@ -0,0 +1,273 @@
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
+ }
@@ -0,0 +1,13 @@
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"]