@fungi.computer/oyster 0.0.1 → 0.2.0

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.
Files changed (195) hide show
  1. package/README.md +228 -176
  2. package/dist/agent-avatars.d.ts +103 -0
  3. package/dist/agent-avatars.js +66 -0
  4. package/dist/agents.d.ts +12 -2
  5. package/dist/agents.js +39 -2
  6. package/dist/app-builds.d.ts +76 -17
  7. package/dist/app-builds.js +207 -63
  8. package/dist/app-sources.d.ts +7 -22
  9. package/dist/app-sources.js +49 -14
  10. package/dist/apps/gate.d.ts +7 -7
  11. package/dist/apps/gate.js +6 -6
  12. package/dist/apps/installation.d.ts +35 -35
  13. package/dist/apps/installation.js +20 -19
  14. package/dist/build/artifact-writer.d.ts +40 -0
  15. package/dist/build/artifact-writer.js +181 -0
  16. package/dist/build/build-jobs.js +7 -1
  17. package/dist/build/build-policy.d.ts +10 -0
  18. package/dist/build/build-policy.js +10 -0
  19. package/dist/build/build-step.d.ts +12 -1
  20. package/dist/build/build-step.js +9 -1
  21. package/dist/build/candidate-builder.d.ts +68 -0
  22. package/dist/build/candidate-builder.js +91 -0
  23. package/dist/build/candidate-cli.d.ts +1 -0
  24. package/dist/build/candidate-cli.js +119 -0
  25. package/dist/build/candidate-cli.mjs +28220 -0
  26. package/dist/build/content-objects.d.ts +37 -0
  27. package/dist/build/content-objects.js +53 -0
  28. package/dist/build/effect.d.ts +18 -0
  29. package/dist/build/effect.js +52 -12
  30. package/dist/build/git-environment.d.ts +3 -0
  31. package/dist/build/git-environment.js +21 -9
  32. package/dist/build/local-build.d.ts +13 -3
  33. package/dist/build/local-build.js +149 -99
  34. package/dist/build/snapshot-package-store.d.ts +10 -0
  35. package/dist/build/snapshot-package-store.js +15 -0
  36. package/dist/build/snapshot-program-scripts.js +1 -1
  37. package/dist/build/snapshot-programs/snapshot-path.d.ts +2 -0
  38. package/dist/build/snapshot-programs/snapshot-path.js +6 -0
  39. package/dist/build/submission-contract.d.ts +461 -17
  40. package/dist/build/submission-contract.js +136 -26
  41. package/dist/build/workspace-build.d.ts +7 -2
  42. package/dist/build/workspace-build.js +55 -11
  43. package/dist/build-contract.d.ts +3 -0
  44. package/dist/build-contract.js +3 -0
  45. package/dist/build-egress.d.ts +62 -0
  46. package/dist/build-egress.js +148 -0
  47. package/dist/build.d.ts +1 -0
  48. package/dist/build.js +1 -0
  49. package/dist/cloudflare.js +4 -4
  50. package/dist/frame-binding-wire-script.js +1 -1
  51. package/dist/frame-binding-wire.d.ts +1 -1
  52. package/dist/frame-binding-wire.js +1 -1
  53. package/dist/git-journal.js +4 -4
  54. package/dist/index.d.ts +1 -0
  55. package/dist/index.js +1 -0
  56. package/dist/installation-consent.d.ts +3 -1
  57. package/dist/installation-consent.js +2 -0
  58. package/dist/mcp-owner.js +20 -8
  59. package/dist/pack.d.ts +6 -3
  60. package/dist/pack.js +28 -11
  61. package/dist/page/gill-observation.d.ts +4 -0
  62. package/dist/page/gill-observation.js +31 -0
  63. package/dist/page/mount.d.ts +4 -8
  64. package/dist/page/window-launch.d.ts +18 -0
  65. package/dist/page/window-launch.js +11 -0
  66. package/dist/page-script.js +4 -4
  67. package/dist/release.d.ts +11 -0
  68. package/dist/release.js +4 -1
  69. package/dist/shell/app-directory.d.ts +50 -45
  70. package/dist/shell/app-directory.js +19 -18
  71. package/dist/shell/shell-module.d.ts +26 -2
  72. package/dist/shell/shell-module.js +51 -2
  73. package/dist/shell/window-manager.d.ts +5 -1
  74. package/dist/shell/window-manager.js +21 -2
  75. package/dist/shell/workbench-directory.d.ts +332 -0
  76. package/dist/shell/workbench-directory.js +35 -0
  77. package/dist/shell/workbench-host-types.d.ts +1 -1
  78. package/dist/shell/workbench-host.js +5 -0
  79. package/dist/shell/workbench-model.d.ts +3 -1
  80. package/dist/source/index.d.ts +6 -7
  81. package/dist/source/index.js +6 -7
  82. package/dist/source/template-push.d.ts +33 -0
  83. package/dist/source/template-push.js +223 -0
  84. package/dist/source/template-repository.d.ts +2 -0
  85. package/dist/source/template-repository.js +13 -0
  86. package/dist/source/{template-write.d.ts → template-seed.d.ts} +19 -20
  87. package/dist/source/template-seed.js +80 -0
  88. package/dist/standalone/agent-directory.d.ts +4 -0
  89. package/dist/standalone/agent-directory.js +4 -0
  90. package/dist/standalone/agents.d.ts +227 -0
  91. package/dist/standalone/agents.js +834 -0
  92. package/dist/standalone/app-builds-binding.d.ts +36 -0
  93. package/dist/standalone/app-builds-binding.js +119 -0
  94. package/dist/standalone/app-set.d.ts +91 -0
  95. package/dist/standalone/app-set.js +395 -0
  96. package/dist/standalone/app-source.d.ts +41 -0
  97. package/dist/standalone/app-source.js +59 -0
  98. package/dist/standalone/builds.d.ts +18 -0
  99. package/dist/standalone/builds.js +101 -0
  100. package/dist/standalone/computer-egress.d.ts +37 -0
  101. package/dist/standalone/computer-egress.js +111 -0
  102. package/dist/standalone/computer.d.ts +122 -0
  103. package/dist/standalone/computer.js +714 -0
  104. package/dist/standalone/install-apps-cli.d.ts +2 -0
  105. package/dist/standalone/install-apps-cli.js +126 -0
  106. package/dist/standalone/instance.d.ts +35 -0
  107. package/dist/standalone/instance.js +74 -0
  108. package/dist/standalone/media.d.ts +76 -0
  109. package/dist/standalone/media.js +227 -0
  110. package/dist/standalone/preview.d.ts +51 -0
  111. package/dist/standalone/preview.js +167 -0
  112. package/dist/standalone/registry.d.ts +102 -0
  113. package/dist/standalone/registry.js +193 -0
  114. package/dist/standalone/tenancy.d.ts +42 -0
  115. package/dist/standalone/tenancy.js +241 -0
  116. package/dist/standalone/worker.d.ts +55 -0
  117. package/dist/standalone/worker.js +147 -0
  118. package/dist/standalone/workflow-authority-readers.d.ts +16 -0
  119. package/dist/standalone/workflow-authority-readers.js +35 -0
  120. package/dist/standalone/workflow-binding.d.ts +216 -0
  121. package/dist/standalone/workflow-binding.js +217 -0
  122. package/dist/standalone/workflow-events.d.ts +46 -0
  123. package/dist/standalone/workflow-events.js +39 -0
  124. package/dist/standalone/workflow-git-capture.d.ts +7 -0
  125. package/dist/standalone/workflow-git-capture.js +62 -0
  126. package/dist/standalone/workflow-host.d.ts +955 -0
  127. package/dist/standalone/workflow-host.js +778 -0
  128. package/dist/standalone/workflow-node-capture.d.ts +13 -0
  129. package/dist/standalone/workflow-node-capture.js +72 -0
  130. package/dist/standalone/workflow-root-authority.d.ts +27 -0
  131. package/dist/standalone/workflow-root-authority.js +87 -0
  132. package/dist/standalone/workflow-schedules.d.ts +52 -0
  133. package/dist/standalone/workflow-schedules.js +40 -0
  134. package/dist/standalone/workflow-trigger-host.d.ts +1716 -0
  135. package/dist/standalone/workflow-trigger-host.js +52 -0
  136. package/dist/standalone/workflows.d.ts +713 -0
  137. package/dist/standalone/workflows.js +554 -0
  138. package/dist/tenancy/auth0.d.ts +64 -0
  139. package/dist/tenancy/auth0.js +198 -0
  140. package/dist/tenancy/cloudflare/rate-limit.d.ts +8 -0
  141. package/dist/tenancy/cloudflare/rate-limit.js +19 -0
  142. package/dist/tenancy/cloudflare/registry.d.ts +50 -0
  143. package/dist/tenancy/cloudflare/registry.js +301 -0
  144. package/dist/tenancy/cloudflare.d.ts +2 -0
  145. package/dist/tenancy/cloudflare.js +2 -0
  146. package/dist/tenancy/cold-directory.d.ts +13 -0
  147. package/dist/tenancy/cold-directory.js +43 -0
  148. package/dist/tenancy/contracts.d.ts +195 -0
  149. package/dist/tenancy/contracts.js +1 -0
  150. package/dist/tenancy/index.d.ts +19 -0
  151. package/dist/tenancy/index.js +156 -0
  152. package/dist/tenancy/owner-key.d.ts +26 -0
  153. package/dist/tenancy/owner-key.js +63 -0
  154. package/dist/tenancy/oyster.d.ts +4 -0
  155. package/dist/tenancy/oyster.js +25 -0
  156. package/dist/tenancy/registry-record.d.ts +7 -0
  157. package/dist/tenancy/registry-record.js +44 -0
  158. package/dist/tenancy/registry.d.ts +27 -0
  159. package/dist/tenancy/registry.js +138 -0
  160. package/dist/tenancy/resolve.d.ts +7 -0
  161. package/dist/tenancy/resolve.js +64 -0
  162. package/dist/workers-git.js +1 -4
  163. package/dist/workers.d.ts +2 -2
  164. package/dist/workers.js +3 -1
  165. package/docs/api/build-contract.md +829 -32
  166. package/docs/api/build.md +253 -17
  167. package/docs/api/modules.md +40 -32
  168. package/docs/api/pack.md +6 -3
  169. package/docs/api/shell/app-directory.md +267 -0
  170. package/docs/api/shell/shell-module.md +64 -3
  171. package/docs/api/shell/workbench-directory.md +119 -0
  172. package/docs/api/shell/workbench.md +19 -0
  173. package/docs/api/shell.md +127 -0
  174. package/docs/api/tenancy/auth0.md +110 -0
  175. package/docs/api/tenancy/cloudflare.md +221 -0
  176. package/docs/api/tenancy/cold-directory.md +46 -0
  177. package/docs/api/tenancy/owner-key.md +63 -0
  178. package/docs/api/tenancy/registry.md +77 -0
  179. package/docs/api/tenancy/resolve.md +69 -0
  180. package/docs/api/tenancy.md +430 -0
  181. package/docs/api/workers-git.md +140 -21
  182. package/docs/api/workers.md +15 -2
  183. package/docs/site/agent-quickstart.mdx +52 -55
  184. package/examples/standalone/worker.ts +7 -14
  185. package/examples/standalone/wrangler.jsonc +67 -6
  186. package/package.json +78 -25
  187. package/dist/build/r2-artifact-writer.d.ts +0 -31
  188. package/dist/build/r2-artifact-writer.js +0 -179
  189. package/dist/source/template-write.js +0 -344
  190. package/docs/media/architecture.mmd +0 -32
  191. package/docs/media/architecture.png +0 -0
  192. package/docs/media/bonsai-network.png +0 -0
  193. package/docs/media/bonsai-repository.png +0 -0
  194. package/examples/git/worker.ts +0 -39
  195. package/examples/git/wrangler.jsonc +0 -32
@@ -10,44 +10,483 @@
10
10
 
11
11
  ## Type Aliases
12
12
 
13
- ### TeamAppCandidateSubmission
13
+ ### ContentObjectBucket
14
14
 
15
15
  ```ts
16
- type TeamAppCandidateSubmission = Schema.Schema.Type<
17
- typeof teamAppCandidateSubmissionSchema
16
+ type ContentObjectBucket = Readonly<{
17
+ head: Promise<Readonly<{
18
+ size: number;
19
+ checksums: Readonly<{
20
+ sha256?: ArrayBuffer;
21
+ }>;
22
+ }> | null>;
23
+ put: Promise<object | null>;
24
+ }>;
25
+ ```
26
+
27
+ The parts of an R2 bucket a content-object store uses.
28
+
29
+ ---
30
+
31
+ ### CandidateObject
32
+
33
+ ```ts
34
+ type CandidateObject = Schema.Schema.Type<typeof candidateObjectSchema>;
35
+ ```
36
+
37
+ One uploaded object, as a manifest names it.
38
+
39
+ ---
40
+
41
+ ### CandidateOutputManifest
42
+
43
+ ```ts
44
+ type CandidateOutputManifest = Schema.Schema.Type<
45
+ typeof candidateOutputManifestSchema
18
46
  >;
19
47
  ```
20
48
 
21
- One submitted Team App candidate.
49
+ One build output by reference.
22
50
 
23
51
  ---
24
52
 
25
- ### PreparedTeamAppCandidate
53
+ ### TeamAppCandidateManifest
26
54
 
27
55
  ```ts
28
- type PreparedTeamAppCandidate = Schema.Schema.Type<
29
- typeof preparedCandidateSchema
56
+ type TeamAppCandidateManifest = Schema.Schema.Type<
57
+ typeof teamAppCandidateManifestSchema
30
58
  >;
31
59
  ```
32
60
 
33
- One Team App candidate with its reserved Release ID.
61
+ One submitted Team App candidate manifest.
62
+
63
+ ---
64
+
65
+ ### PreparedTeamAppCandidateManifest
66
+
67
+ ```ts
68
+ type PreparedTeamAppCandidateManifest = Schema.Schema.Type<
69
+ typeof preparedCandidateManifestSchema
70
+ >;
71
+ ```
72
+
73
+ One Team App candidate manifest with its reserved Release ID.
74
+
75
+ ---
76
+
77
+ ### CandidateObjectMediaType
78
+
79
+ ```ts
80
+ type CandidateObjectMediaType = (typeof candidateObjectMediaTypes)[number];
81
+ ```
82
+
83
+ One of [candidateObjectMediaTypes](#candidateobjectmediatypes).
84
+
85
+ ---
86
+
87
+ ### CandidateUpload
88
+
89
+ ```ts
90
+ type CandidateUpload = CandidateObject &
91
+ Readonly<{
92
+ mediaType: CandidateObjectMediaType;
93
+ }>;
94
+ ```
95
+
96
+ One object a build uploads, with the media type it is stored under.
34
97
 
35
98
  ## Variables
36
99
 
37
- ### TEAM\_APP\_SUBMISSION\_MAX\_REQUEST\_BYTES
100
+ ### workspaceBuildPolicy
38
101
 
39
102
  ```ts
40
- const TEAM_APP_SUBMISSION_MAX_REQUEST_BYTES: number;
103
+ const workspaceBuildPolicy: "package-json-fungi-build-v2" =
104
+ "package-json-fungi-build-v2";
41
105
  ```
42
106
 
43
- The largest Team App candidate submission request body, in bytes.
107
+ The pinned workspace build policy: how a captured workspace's manifests build
108
+ (`package.json#fungi.build`). v2 lets a dependency name its own package build
109
+ script, which only an admitted Computer build runs.
110
+
111
+ It is part of every workspace HTML recipe's toolchain, so its digest moves with
112
+ it, and the Computer build request carries it at the top level, where a builder
113
+ compiled before it existed refuses the request outright.
44
114
 
45
115
  ---
46
116
 
47
- ### teamAppCandidateSubmissionSchema
117
+ ### TEAM\_APP\_CANDIDATE\_MANIFEST\_MAX\_BYTES
48
118
 
49
119
  ```ts
50
- const teamAppCandidateSubmissionSchema: Struct<{
120
+ const TEAM_APP_CANDIDATE_MANIFEST_MAX_BYTES: number;
121
+ ```
122
+
123
+ The largest candidate manifest request body, in bytes. A manifest names objects;
124
+ their bytes are uploaded one at a time, never inside it.
125
+
126
+ ---
127
+
128
+ ### candidateObjectSchema
129
+
130
+ ```ts
131
+ const candidateObjectSchema: Struct<{
132
+ digest: refine<Sha256Digest, String>;
133
+ byteLength: Number;
134
+ }>;
135
+ ```
136
+
137
+ One content-addressed object a build uploaded before its manifest.
138
+
139
+ ---
140
+
141
+ ### candidateOutputManifestSchema
142
+
143
+ ```ts
144
+ const candidateOutputManifestSchema: Union<readonly [Struct<{
145
+ declaration: optionalKey<Codec<Readonly<{
146
+ api?: Readonly<{
147
+ methods: ...;
148
+ toolFamily?: ...;
149
+ events?: ...;
150
+ }>;
151
+ displayName?: string;
152
+ capabilities: readonly (
153
+ | "agent.list"
154
+ | "agent.manage"
155
+ | "agent.rename"
156
+ | "agent.toolPolicy"
157
+ | "agent.read"
158
+ | "agent.send"
159
+ | "computer.list"
160
+ | "computer.readFile"
161
+ | "computer.writeFile"
162
+ | "computer.execute"
163
+ | "llm.generation"
164
+ | "media.generation"
165
+ | "games:servers"
166
+ | "git.repository"
167
+ | "apps.open"
168
+ | "apps.call"
169
+ | "app.storage"
170
+ | "app.events.emit"
171
+ | "team.workbenchHost"
172
+ | "marketplace.browse"
173
+ | "marketplace.purchase"
174
+ | "workflow.run"
175
+ | "workflow.publish"
176
+ | "workflow.arm"
177
+ | "world"
178
+ | "channels.read"
179
+ | "channels.personal.manage")[];
180
+ calls?: readonly Readonly<...>[];
181
+ guidance?: string;
182
+ handlers: readonly "file.open"[];
183
+ receives?: readonly "git.push"[];
184
+ icon?: string;
185
+ roles: readonly ("dashboard" | "inbox" | "files" | "media" | "sessions" | "terminal")[];
186
+ storage?: readonly Readonly<...>[];
187
+ commands?: readonly Readonly<...>[];
188
+ gills?: readonly Readonly<...>[];
189
+ backend?: Readonly<{
190
+ bindings: ...;
191
+ sync?: ...;
192
+ }>;
193
+ }>, Readonly<{
194
+ api?: Readonly<{
195
+ methods: ...;
196
+ toolFamily?: ...;
197
+ events?: ...;
198
+ }>;
199
+ displayName?: string;
200
+ capabilities: readonly (
201
+ | "agent.list"
202
+ | "agent.manage"
203
+ | "agent.rename"
204
+ | "agent.toolPolicy"
205
+ | "agent.read"
206
+ | "agent.send"
207
+ | "computer.list"
208
+ | "computer.readFile"
209
+ | "computer.writeFile"
210
+ | "computer.execute"
211
+ | "llm.generation"
212
+ | "media.generation"
213
+ | "games:servers"
214
+ | "git.repository"
215
+ | "apps.open"
216
+ | "apps.call"
217
+ | "app.storage"
218
+ | "app.events.emit"
219
+ | "team.workbenchHost"
220
+ | "marketplace.browse"
221
+ | "marketplace.purchase"
222
+ | "workflow.run"
223
+ | "workflow.publish"
224
+ | "workflow.arm"
225
+ | "world"
226
+ | "channels.read"
227
+ | "channels.personal.manage")[];
228
+ calls?: readonly Readonly<...>[];
229
+ guidance?: string;
230
+ handlers: readonly "file.open"[];
231
+ receives?: readonly "git.push"[];
232
+ icon?: string;
233
+ roles: readonly ("dashboard" | "inbox" | "files" | "media" | "sessions" | "terminal")[];
234
+ storage?: readonly Readonly<...>[];
235
+ commands?: readonly Readonly<...>[];
236
+ gills?: readonly Readonly<...>[];
237
+ backend?: Readonly<{
238
+ bindings: ...;
239
+ sync?: ...;
240
+ }>;
241
+ }>, never, never>>;
242
+ kind: Literal<"ui">;
243
+ ui: Union<readonly [Struct<{
244
+ mediaType: Literal<"text/html; charset=utf-8">;
245
+ content: Struct<{
246
+ digest: refine<..., ...>;
247
+ byteLength: Number;
248
+ kind: Literal<...>;
249
+ }>;
250
+ }>, Struct<{
251
+ mediaType: Literal<"application/vnd.fungi.app-assets+json">;
252
+ content: Struct<{
253
+ kind: Literal<...>;
254
+ base: String;
255
+ assets: $Array<...>;
256
+ }>;
257
+ }>]>;
258
+ }>, Struct<{
259
+ declaration: optionalKey<Codec<Readonly<{
260
+ api?: Readonly<{
261
+ methods: ...;
262
+ toolFamily?: ...;
263
+ events?: ...;
264
+ }>;
265
+ displayName?: string;
266
+ capabilities: readonly (
267
+ | "agent.list"
268
+ | "agent.manage"
269
+ | "agent.rename"
270
+ | "agent.toolPolicy"
271
+ | "agent.read"
272
+ | "agent.send"
273
+ | "computer.list"
274
+ | "computer.readFile"
275
+ | "computer.writeFile"
276
+ | "computer.execute"
277
+ | "llm.generation"
278
+ | "media.generation"
279
+ | "games:servers"
280
+ | "git.repository"
281
+ | "apps.open"
282
+ | "apps.call"
283
+ | "app.storage"
284
+ | "app.events.emit"
285
+ | "team.workbenchHost"
286
+ | "marketplace.browse"
287
+ | "marketplace.purchase"
288
+ | "workflow.run"
289
+ | "workflow.publish"
290
+ | "workflow.arm"
291
+ | "world"
292
+ | "channels.read"
293
+ | "channels.personal.manage")[];
294
+ calls?: readonly Readonly<...>[];
295
+ guidance?: string;
296
+ handlers: readonly "file.open"[];
297
+ receives?: readonly "git.push"[];
298
+ icon?: string;
299
+ roles: readonly ("dashboard" | "inbox" | "files" | "media" | "sessions" | "terminal")[];
300
+ storage?: readonly Readonly<...>[];
301
+ commands?: readonly Readonly<...>[];
302
+ gills?: readonly Readonly<...>[];
303
+ backend?: Readonly<{
304
+ bindings: ...;
305
+ sync?: ...;
306
+ }>;
307
+ }>, Readonly<{
308
+ api?: Readonly<{
309
+ methods: ...;
310
+ toolFamily?: ...;
311
+ events?: ...;
312
+ }>;
313
+ displayName?: string;
314
+ capabilities: readonly (
315
+ | "agent.list"
316
+ | "agent.manage"
317
+ | "agent.rename"
318
+ | "agent.toolPolicy"
319
+ | "agent.read"
320
+ | "agent.send"
321
+ | "computer.list"
322
+ | "computer.readFile"
323
+ | "computer.writeFile"
324
+ | "computer.execute"
325
+ | "llm.generation"
326
+ | "media.generation"
327
+ | "games:servers"
328
+ | "git.repository"
329
+ | "apps.open"
330
+ | "apps.call"
331
+ | "app.storage"
332
+ | "app.events.emit"
333
+ | "team.workbenchHost"
334
+ | "marketplace.browse"
335
+ | "marketplace.purchase"
336
+ | "workflow.run"
337
+ | "workflow.publish"
338
+ | "workflow.arm"
339
+ | "world"
340
+ | "channels.read"
341
+ | "channels.personal.manage")[];
342
+ calls?: readonly Readonly<...>[];
343
+ guidance?: string;
344
+ handlers: readonly "file.open"[];
345
+ receives?: readonly "git.push"[];
346
+ icon?: string;
347
+ roles: readonly ("dashboard" | "inbox" | "files" | "media" | "sessions" | "terminal")[];
348
+ storage?: readonly Readonly<...>[];
349
+ commands?: readonly Readonly<...>[];
350
+ gills?: readonly Readonly<...>[];
351
+ backend?: Readonly<{
352
+ bindings: ...;
353
+ sync?: ...;
354
+ }>;
355
+ }>, never, never>>;
356
+ kind: Literal<"backend">;
357
+ backend: Struct<{
358
+ digest: refine<Sha256Digest, String>;
359
+ byteLength: Number;
360
+ }>;
361
+ }>, Struct<{
362
+ declaration: optionalKey<Codec<Readonly<{
363
+ api?: Readonly<{
364
+ methods: ...;
365
+ toolFamily?: ...;
366
+ events?: ...;
367
+ }>;
368
+ displayName?: string;
369
+ capabilities: readonly (
370
+ | "agent.list"
371
+ | "agent.manage"
372
+ | "agent.rename"
373
+ | "agent.toolPolicy"
374
+ | "agent.read"
375
+ | "agent.send"
376
+ | "computer.list"
377
+ | "computer.readFile"
378
+ | "computer.writeFile"
379
+ | "computer.execute"
380
+ | "llm.generation"
381
+ | "media.generation"
382
+ | "games:servers"
383
+ | "git.repository"
384
+ | "apps.open"
385
+ | "apps.call"
386
+ | "app.storage"
387
+ | "app.events.emit"
388
+ | "team.workbenchHost"
389
+ | "marketplace.browse"
390
+ | "marketplace.purchase"
391
+ | "workflow.run"
392
+ | "workflow.publish"
393
+ | "workflow.arm"
394
+ | "world"
395
+ | "channels.read"
396
+ | "channels.personal.manage")[];
397
+ calls?: readonly Readonly<...>[];
398
+ guidance?: string;
399
+ handlers: readonly "file.open"[];
400
+ receives?: readonly "git.push"[];
401
+ icon?: string;
402
+ roles: readonly ("dashboard" | "inbox" | "files" | "media" | "sessions" | "terminal")[];
403
+ storage?: readonly Readonly<...>[];
404
+ commands?: readonly Readonly<...>[];
405
+ gills?: readonly Readonly<...>[];
406
+ backend?: Readonly<{
407
+ bindings: ...;
408
+ sync?: ...;
409
+ }>;
410
+ }>, Readonly<{
411
+ api?: Readonly<{
412
+ methods: ...;
413
+ toolFamily?: ...;
414
+ events?: ...;
415
+ }>;
416
+ displayName?: string;
417
+ capabilities: readonly (
418
+ | "agent.list"
419
+ | "agent.manage"
420
+ | "agent.rename"
421
+ | "agent.toolPolicy"
422
+ | "agent.read"
423
+ | "agent.send"
424
+ | "computer.list"
425
+ | "computer.readFile"
426
+ | "computer.writeFile"
427
+ | "computer.execute"
428
+ | "llm.generation"
429
+ | "media.generation"
430
+ | "games:servers"
431
+ | "git.repository"
432
+ | "apps.open"
433
+ | "apps.call"
434
+ | "app.storage"
435
+ | "app.events.emit"
436
+ | "team.workbenchHost"
437
+ | "marketplace.browse"
438
+ | "marketplace.purchase"
439
+ | "workflow.run"
440
+ | "workflow.publish"
441
+ | "workflow.arm"
442
+ | "world"
443
+ | "channels.read"
444
+ | "channels.personal.manage")[];
445
+ calls?: readonly Readonly<...>[];
446
+ guidance?: string;
447
+ handlers: readonly "file.open"[];
448
+ receives?: readonly "git.push"[];
449
+ icon?: string;
450
+ roles: readonly ("dashboard" | "inbox" | "files" | "media" | "sessions" | "terminal")[];
451
+ storage?: readonly Readonly<...>[];
452
+ commands?: readonly Readonly<...>[];
453
+ gills?: readonly Readonly<...>[];
454
+ backend?: Readonly<{
455
+ bindings: ...;
456
+ sync?: ...;
457
+ }>;
458
+ }>, never, never>>;
459
+ kind: Literal<"app">;
460
+ ui: Union<readonly [Struct<{
461
+ mediaType: Literal<"text/html; charset=utf-8">;
462
+ content: Struct<{
463
+ digest: refine<..., ...>;
464
+ byteLength: Number;
465
+ kind: Literal<...>;
466
+ }>;
467
+ }>, Struct<{
468
+ mediaType: Literal<"application/vnd.fungi.app-assets+json">;
469
+ content: Struct<{
470
+ kind: Literal<...>;
471
+ base: String;
472
+ assets: $Array<...>;
473
+ }>;
474
+ }>]>;
475
+ backend: Struct<{
476
+ digest: refine<Sha256Digest, String>;
477
+ byteLength: Number;
478
+ }>;
479
+ }>]>;
480
+ ```
481
+
482
+ A build's output by reference: the same surfaces as its bytes, sized.
483
+
484
+ ---
485
+
486
+ ### teamAppCandidateManifestSchema
487
+
488
+ ```ts
489
+ const teamAppCandidateManifestSchema: Struct<{
51
490
  appId: refine<AppId, String>;
52
491
  output: Union<readonly [Struct<{
53
492
  declaration: optionalKey<Codec<Readonly<{
@@ -118,7 +557,10 @@ const teamAppCandidateSubmissionSchema: Struct<{
118
557
  backend?: ... | ...;
119
558
  }>, never, never>>;
120
559
  kind: Literal<"backend">;
121
- backend: Uint8ArrayFromBase64;
560
+ backend: Struct<{
561
+ digest: refine<Sha256Digest, String>;
562
+ byteLength: Number;
563
+ }>;
122
564
  }>, Struct<{
123
565
  declaration: optionalKey<Codec<Readonly<{
124
566
  api?: ... | ...;
@@ -157,7 +599,10 @@ const teamAppCandidateSubmissionSchema: Struct<{
157
599
  mediaType: Literal<...>;
158
600
  content: Struct<...>;
159
601
  }>]>;
160
- backend: Uint8ArrayFromBase64;
602
+ backend: Struct<{
603
+ digest: refine<Sha256Digest, String>;
604
+ byteLength: Number;
605
+ }>;
161
606
  }>]>;
162
607
  provenance: Struct<{
163
608
  sourceRevision: refine<SourceRevision, String>;
@@ -167,8 +612,142 @@ const teamAppCandidateSubmissionSchema: Struct<{
167
612
  }>;
168
613
  ```
169
614
 
170
- Exact submitted output and provenance before the Team assigns a stable Release
171
- ID.
615
+ A submitted Team App candidate: its output's objects by digest and size, and its
616
+ provenance, before the Team assigns a stable Release ID.
617
+
618
+ ---
619
+
620
+ ### preparedCandidateManifestSchema
621
+
622
+ ```ts
623
+ const preparedCandidateManifestSchema: Struct<{
624
+ appId: refine<AppId, String>;
625
+ output: Union<readonly [Struct<{
626
+ declaration: optionalKey<Codec<Readonly<{
627
+ api?: ... | ...;
628
+ displayName?: ... | ...;
629
+ capabilities: readonly ...[];
630
+ calls?: ... | ...;
631
+ guidance?: ... | ...;
632
+ handlers: readonly ...[];
633
+ receives?: ... | ...;
634
+ icon?: ... | ...;
635
+ roles: readonly ...[];
636
+ storage?: ... | ...;
637
+ commands?: ... | ...;
638
+ gills?: ... | ...;
639
+ backend?: ... | ...;
640
+ }>, Readonly<{
641
+ api?: ... | ...;
642
+ displayName?: ... | ...;
643
+ capabilities: readonly ...[];
644
+ calls?: ... | ...;
645
+ guidance?: ... | ...;
646
+ handlers: readonly ...[];
647
+ receives?: ... | ...;
648
+ icon?: ... | ...;
649
+ roles: readonly ...[];
650
+ storage?: ... | ...;
651
+ commands?: ... | ...;
652
+ gills?: ... | ...;
653
+ backend?: ... | ...;
654
+ }>, never, never>>;
655
+ kind: Literal<"ui">;
656
+ ui: Union<readonly [Struct<{
657
+ mediaType: Literal<...>;
658
+ content: Struct<...>;
659
+ }>, Struct<{
660
+ mediaType: Literal<...>;
661
+ content: Struct<...>;
662
+ }>]>;
663
+ }>, Struct<{
664
+ declaration: optionalKey<Codec<Readonly<{
665
+ api?: ... | ...;
666
+ displayName?: ... | ...;
667
+ capabilities: readonly ...[];
668
+ calls?: ... | ...;
669
+ guidance?: ... | ...;
670
+ handlers: readonly ...[];
671
+ receives?: ... | ...;
672
+ icon?: ... | ...;
673
+ roles: readonly ...[];
674
+ storage?: ... | ...;
675
+ commands?: ... | ...;
676
+ gills?: ... | ...;
677
+ backend?: ... | ...;
678
+ }>, Readonly<{
679
+ api?: ... | ...;
680
+ displayName?: ... | ...;
681
+ capabilities: readonly ...[];
682
+ calls?: ... | ...;
683
+ guidance?: ... | ...;
684
+ handlers: readonly ...[];
685
+ receives?: ... | ...;
686
+ icon?: ... | ...;
687
+ roles: readonly ...[];
688
+ storage?: ... | ...;
689
+ commands?: ... | ...;
690
+ gills?: ... | ...;
691
+ backend?: ... | ...;
692
+ }>, never, never>>;
693
+ kind: Literal<"backend">;
694
+ backend: Struct<{
695
+ digest: refine<Sha256Digest, String>;
696
+ byteLength: Number;
697
+ }>;
698
+ }>, Struct<{
699
+ declaration: optionalKey<Codec<Readonly<{
700
+ api?: ... | ...;
701
+ displayName?: ... | ...;
702
+ capabilities: readonly ...[];
703
+ calls?: ... | ...;
704
+ guidance?: ... | ...;
705
+ handlers: readonly ...[];
706
+ receives?: ... | ...;
707
+ icon?: ... | ...;
708
+ roles: readonly ...[];
709
+ storage?: ... | ...;
710
+ commands?: ... | ...;
711
+ gills?: ... | ...;
712
+ backend?: ... | ...;
713
+ }>, Readonly<{
714
+ api?: ... | ...;
715
+ displayName?: ... | ...;
716
+ capabilities: readonly ...[];
717
+ calls?: ... | ...;
718
+ guidance?: ... | ...;
719
+ handlers: readonly ...[];
720
+ receives?: ... | ...;
721
+ icon?: ... | ...;
722
+ roles: readonly ...[];
723
+ storage?: ... | ...;
724
+ commands?: ... | ...;
725
+ gills?: ... | ...;
726
+ backend?: ... | ...;
727
+ }>, never, never>>;
728
+ kind: Literal<"app">;
729
+ ui: Union<readonly [Struct<{
730
+ mediaType: Literal<...>;
731
+ content: Struct<...>;
732
+ }>, Struct<{
733
+ mediaType: Literal<...>;
734
+ content: Struct<...>;
735
+ }>]>;
736
+ backend: Struct<{
737
+ digest: refine<Sha256Digest, String>;
738
+ byteLength: Number;
739
+ }>;
740
+ }>]>;
741
+ provenance: Struct<{
742
+ sourceRevision: refine<SourceRevision, String>;
743
+ sourceTreeDigest: refine<Sha256Digest, String>;
744
+ buildRecipeDigest: refine<Sha256Digest, String>;
745
+ }>;
746
+ releaseId: refine<ReleaseId, String>;
747
+ }>;
748
+ ```
749
+
750
+ Publisher persistence input after TeamDO reserves retry-stable identities.
172
751
 
173
752
  ---
174
753
 
@@ -177,6 +756,7 @@ ID.
177
756
  ```ts
178
757
  const preparedCandidateSchema: Struct<{
179
758
  appId: refine<AppId, String>;
759
+ releaseId: refine<ReleaseId, String>;
180
760
  output: Union<readonly [Struct<{
181
761
  declaration: optionalKey<Codec<Readonly<{
182
762
  api?: ... | ...;
@@ -292,39 +872,238 @@ const preparedCandidateSchema: Struct<{
292
872
  sourceTreeDigest: refine<Sha256Digest, String>;
293
873
  buildRecipeDigest: refine<Sha256Digest, String>;
294
874
  }>;
295
- releaseId: refine<ReleaseId, String>;
296
875
  }>;
297
876
  ```
298
877
 
299
- Publisher persistence input after TeamDO reserves retry-stable identities.
878
+ A platform App candidate the trusted operator built and packed itself, with its
879
+ bytes inline: the operator's platform publication request only. A Team candidate
880
+ never carries bytes; it is a manifest.
881
+
882
+ ---
883
+
884
+ ### candidateObjectMediaTypes
885
+
886
+ ```ts
887
+ const candidateObjectMediaTypes: readonly [
888
+ "text/html; charset=utf-8",
889
+ "application/vnd.fungi.app-backend+json",
890
+ "application/octet-stream",
891
+ ];
892
+ ```
893
+
894
+ The media type an uploaded object is stored with. A store that reads an HTML
895
+ document or backend descriptor by its stored type (the Publisher's) needs it; an
896
+ asset's type is its manifest's, so it is an octet stream.
300
897
 
301
898
  ## Functions
302
899
 
303
- ### encodeTeamAppCandidateSubmission()
900
+ ### contentObjectRef()
901
+
902
+ ```ts
903
+ function contentObjectRef(digest): ArtifactRef;
904
+ ```
905
+
906
+ The store key of one content-addressed object.
907
+
908
+ #### Parameters
909
+
910
+ | Parameter | Type |
911
+ | --------- | -------------- |
912
+ | `digest` | `Sha256Digest` |
913
+
914
+ #### Returns
915
+
916
+ `ArtifactRef`
917
+
918
+ ---
919
+
920
+ ### headContentObject()
304
921
 
305
922
  ```ts
306
- function encodeTeamAppCandidateSubmission(input): string;
923
+ function headContentObject(
924
+ bucket,
925
+ artifactRef,
926
+ ): Promise<Readonly<{
927
+ byteLength: number;
928
+ digest: Sha256Digest | null;
929
+ }> | null>;
307
930
  ```
308
931
 
309
- Canonical wire bytes make TeamDO's same-request digest independent of JSON
310
- spacing.
932
+ Describe a stored object by its size and the SHA-256 the store verified.
311
933
 
312
934
  #### Parameters
313
935
 
314
- | Parameter | Type |
315
- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
316
- | `input` | \{ `appId`: `AppId`; `output`: \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"ui"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `kind`: `"html"`; `bytes`: `Uint8Array`\<`ArrayBufferLike`\>; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"backend"`; `backend`: `Uint8Array`\<`ArrayBufferLike`\>; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"app"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `kind`: `"html"`; `bytes`: `Uint8Array`\<`ArrayBufferLike`\>; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; `backend`: `Uint8Array`\<`ArrayBufferLike`\>; \}; `provenance`: \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \}; \} |
317
- | `input.appId` | `AppId` |
318
- | `input.output` | \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"ui"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `kind`: `"html"`; `bytes`: `Uint8Array`\<`ArrayBufferLike`\>; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"backend"`; `backend`: `Uint8Array`\<`ArrayBufferLike`\>; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"app"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `kind`: `"html"`; `bytes`: `Uint8Array`\<`ArrayBufferLike`\>; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; `backend`: `Uint8Array`\<`ArrayBufferLike`\>; \} |
319
- | `input.provenance` | \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \} |
320
- | `input.provenance.sourceRevision` | `SourceRevision` |
321
- | `input.provenance.sourceTreeDigest` | `Sha256Digest` |
322
- | `input.provenance.buildRecipeDigest` | `Sha256Digest` |
936
+ | Parameter | Type |
937
+ | ------------- | --------------------------------------------- |
938
+ | `bucket` | [`ContentObjectBucket`](#contentobjectbucket) |
939
+ | `artifactRef` | `ArtifactRef` |
940
+
941
+ #### Returns
942
+
943
+ `Promise`\< \| `Readonly`\<\{ `byteLength`: `number`; `digest`: `Sha256Digest`
944
+ \| `null`; \}\> \| `null`\>
945
+
946
+ ---
947
+
948
+ ### putContentObject()
949
+
950
+ ```ts
951
+ function putContentObject(
952
+ bucket,
953
+ object,
954
+ body,
955
+ mediaType,
956
+ ): Promise<"refused" | "stored">;
957
+ ```
958
+
959
+ Stream one object into the store under its digest. The store refuses a body
960
+ whose SHA-256 differs; an object already stored with the same verified digest
961
+ and size is kept (write-once: a stored version may be pinned by a Release) and
962
+ the body is discarded, never stored.
963
+
964
+ #### Parameters
965
+
966
+ | Parameter | Type |
967
+ | ------------------- | ------------------------------------------------------------------------------------------------------------- |
968
+ | `bucket` | [`ContentObjectBucket`](#contentobjectbucket) |
969
+ | `object` | \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \} |
970
+ | `object.digest` | `Sha256Digest` |
971
+ | `object.byteLength` | `number` |
972
+ | `body` | `ReadableStream`\<`Uint8Array`\<`ArrayBufferLike`\>\> \| `null` |
973
+ | `mediaType` | \| `"text/html; charset=utf-8"` \| `"application/vnd.fungi.app-backend+json"` \| `"application/octet-stream"` |
974
+
975
+ #### Returns
976
+
977
+ `Promise`\<`"refused"` \| `"stored"`\>
978
+
979
+ ---
980
+
981
+ ### encodeTeamAppCandidateManifest()
982
+
983
+ ```ts
984
+ function encodeTeamAppCandidateManifest(manifest): string;
985
+ ```
986
+
987
+ Canonical manifest bytes, so a digest is independent of JSON spacing.
988
+
989
+ #### Parameters
990
+
991
+ | Parameter | Type |
992
+ | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
993
+ | `manifest` | \{ `appId`: `AppId`; `output`: \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"ui"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"backend"`; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"app"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \}; `provenance`: \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \}; \} |
994
+ | `manifest.appId` | `AppId` |
995
+ | `manifest.output` | \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"ui"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"backend"`; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"app"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \} |
996
+ | `manifest.provenance` | \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \} |
997
+ | `manifest.provenance.sourceRevision` | `SourceRevision` |
998
+ | `manifest.provenance.sourceTreeDigest` | `Sha256Digest` |
999
+ | `manifest.provenance.buildRecipeDigest` | `Sha256Digest` |
323
1000
 
324
1001
  #### Returns
325
1002
 
326
1003
  `string`
327
1004
 
1005
+ ---
1006
+
1007
+ ### digestTeamAppCandidateManifest()
1008
+
1009
+ ```ts
1010
+ function digestTeamAppCandidateManifest(manifest): Promise<string>;
1011
+ ```
1012
+
1013
+ The hex SHA-256 of a manifest's canonical bytes: its App root's name.
1014
+
1015
+ #### Parameters
1016
+
1017
+ | Parameter | Type |
1018
+ | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1019
+ | `manifest` | \{ `appId`: `AppId`; `output`: \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"ui"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"backend"`; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"app"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \}; `provenance`: \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \}; \} |
1020
+ | `manifest.appId` | `AppId` |
1021
+ | `manifest.output` | \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"ui"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"backend"`; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>; `kind`: `"app"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \} |
1022
+ | `manifest.provenance` | \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \} |
1023
+ | `manifest.provenance.sourceRevision` | `SourceRevision` |
1024
+ | `manifest.provenance.sourceTreeDigest` | `Sha256Digest` |
1025
+ | `manifest.provenance.buildRecipeDigest` | `Sha256Digest` |
1026
+
1027
+ #### Returns
1028
+
1029
+ `Promise`\<`string`\>
1030
+
1031
+ ---
1032
+
1033
+ ### candidateObjectMediaType()
1034
+
1035
+ ```ts
1036
+ function candidateObjectMediaType(
1037
+ value,
1038
+ ):
1039
+ | "text/html; charset=utf-8"
1040
+ | "application/vnd.fungi.app-backend+json"
1041
+ | "application/octet-stream"
1042
+ | null;
1043
+ ```
1044
+
1045
+ The stored media type a request names, if it is one an object may carry.
1046
+
1047
+ #### Parameters
1048
+
1049
+ | Parameter | Type |
1050
+ | --------- | ------------------ |
1051
+ | `value` | `string` \| `null` |
1052
+
1053
+ #### Returns
1054
+
1055
+ \| `"text/html; charset=utf-8"` \| `"application/vnd.fungi.app-backend+json"` \|
1056
+ `"application/octet-stream"` \| `null`
1057
+
1058
+ ---
1059
+
1060
+ ### candidateManifestObjects()
1061
+
1062
+ ```ts
1063
+ function candidateManifestObjects(output): readonly CandidateUpload[];
1064
+ ```
1065
+
1066
+ Every distinct object a manifest names, each once, in manifest order.
1067
+
1068
+ #### Parameters
1069
+
1070
+ | Parameter | Type |
1071
+ | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1072
+ | `output` | \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<`string`, `Readonly`\<...\>\>\>; `toolFamily?`: `Readonly`\<\{ `name`: ...; `list`: ...; `call`: ...; \}\>; `events?`: `Readonly`\<`Record`\<..., ...\>\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly `string`[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly (... \| ...)[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: `string`; `sigil?`: `string`; `projections?`: `Readonly`\<...\>; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: readonly ...[]; `watch?`: `AppGillWatch`; `desktop?`: `Readonly`\<...\>; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<\{ `name`: ...; `operations`: ...; \}\>[]; `sync?`: `Readonly`\<\{ `method`: ...; \}\>; \}\>; \}\>; `kind`: `"ui"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<`string`, `Readonly`\<...\>\>\>; `toolFamily?`: `Readonly`\<\{ `name`: ...; `list`: ...; `call`: ...; \}\>; `events?`: `Readonly`\<`Record`\<..., ...\>\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly `string`[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly (... \| ...)[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: `string`; `sigil?`: `string`; `projections?`: `Readonly`\<...\>; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: readonly ...[]; `watch?`: `AppGillWatch`; `desktop?`: `Readonly`\<...\>; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<\{ `name`: ...; `operations`: ...; \}\>[]; `sync?`: `Readonly`\<\{ `method`: ...; \}\>; \}\>; \}\>; `kind`: `"backend"`; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<`string`, `Readonly`\<...\>\>\>; `toolFamily?`: `Readonly`\<\{ `name`: ...; `list`: ...; `call`: ...; \}\>; `events?`: `Readonly`\<`Record`\<..., ...\>\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly `string`[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly (... \| ...)[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: `string`; `sigil?`: `string`; `projections?`: `Readonly`\<...\>; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: readonly ...[]; `watch?`: `AppGillWatch`; `desktop?`: `Readonly`\<...\>; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<\{ `name`: ...; `operations`: ...; \}\>[]; `sync?`: `Readonly`\<\{ `method`: ...; \}\>; \}\>; \}\>; `kind`: `"app"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \} |
1073
+
1074
+ #### Returns
1075
+
1076
+ readonly [`CandidateUpload`](#candidateupload)[]
1077
+
1078
+ ---
1079
+
1080
+ ### decodeCandidateBackend()
1081
+
1082
+ ```ts
1083
+ function decodeCandidateBackend(bytes): object;
1084
+ ```
1085
+
1086
+ Decode a stored backend descriptor; a manifest's backend must be one.
1087
+
1088
+ #### Parameters
1089
+
1090
+ | Parameter | Type |
1091
+ | --------- | ------------ |
1092
+ | `bytes` | `Uint8Array` |
1093
+
1094
+ #### Returns
1095
+
1096
+ `object`
1097
+
1098
+ | Name | Type |
1099
+ | --------------------- | ----------------- |
1100
+ | `runtime` | `object` |
1101
+ | `runtime.kind` | `"durable-facet"` |
1102
+ | `runtime.stateSchema` | `number` |
1103
+ | `compatibilityDate` | `string` |
1104
+ | `exportName` | `string` |
1105
+ | `code` | `string` |
1106
+
328
1107
  ## References
329
1108
 
330
1109
  ### pinnedRecipeSchema
@@ -471,6 +1250,12 @@ Re-exports [CapturedConfig](build.md#capturedconfig)
471
1250
 
472
1251
  ---
473
1252
 
1253
+ ### pinsCurrentToolchain
1254
+
1255
+ Re-exports [pinsCurrentToolchain](build.md#pinscurrenttoolchain)
1256
+
1257
+ ---
1258
+
474
1259
  ### digestPinnedRecipe
475
1260
 
476
1261
  Re-exports [digestPinnedRecipe](build.md#digestpinnedrecipe)
@@ -483,6 +1268,18 @@ Re-exports [normalizeAppPublisherRecipe](build.md#normalizeapppublisherrecipe)
483
1268
 
484
1269
  ---
485
1270
 
1271
+ ### pinnedRecipeObjectBound
1272
+
1273
+ Re-exports [pinnedRecipeObjectBound](build.md#pinnedrecipeobjectbound)
1274
+
1275
+ ---
1276
+
1277
+ ### fitsPinnedRecipe
1278
+
1279
+ Re-exports [fitsPinnedRecipe](build.md#fitspinnedrecipe)
1280
+
1281
+ ---
1282
+
486
1283
  ### createAppCandidatePreparer
487
1284
 
488
1285
  Re-exports [createAppCandidatePreparer](build.md#createappcandidatepreparer)