@fungi.computer/oyster 0.2.0 → 0.3.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 (287) hide show
  1. package/README.md +376 -72
  2. package/dist/agents.d.ts +3 -2
  3. package/dist/agents.js +4 -2
  4. package/dist/app-builds.d.ts +81 -8
  5. package/dist/app-builds.js +210 -60
  6. package/dist/app-storage.d.ts +3 -3
  7. package/dist/approval-capability.d.ts +5 -0
  8. package/dist/approval-capability.js +46 -0
  9. package/dist/approval-home.d.ts +51 -0
  10. package/dist/approval-home.js +226 -0
  11. package/dist/apps/catalog.d.ts +335 -0
  12. package/dist/apps/catalog.js +46 -0
  13. package/dist/apps/gate.d.ts +20 -6
  14. package/dist/apps/gate.js +42 -16
  15. package/dist/apps/index.d.ts +3 -1
  16. package/dist/apps/index.js +3 -1
  17. package/dist/apps/installation.d.ts +132 -51
  18. package/dist/apps/installation.js +176 -70
  19. package/dist/apps/permissions.d.ts +247 -0
  20. package/dist/apps/permissions.js +255 -0
  21. package/dist/boot-capability-route.d.ts +15 -0
  22. package/dist/boot-capability-route.js +196 -0
  23. package/dist/boot-capability.d.ts +103 -0
  24. package/dist/boot-capability.js +141 -0
  25. package/dist/boot-construction.d.ts +12 -0
  26. package/dist/boot-construction.js +175 -0
  27. package/dist/boot-gate.d.ts +267 -0
  28. package/dist/boot-gate.js +236 -0
  29. package/dist/boot-host-script.d.ts +2 -0
  30. package/dist/boot-host-script.js +1 -0
  31. package/dist/boot-mount.d.ts +21 -0
  32. package/dist/boot-mount.js +65 -0
  33. package/dist/browser/boot.d.ts +73 -0
  34. package/dist/browser/boot.js +502 -0
  35. package/dist/browser/browser.d.ts +104 -0
  36. package/dist/browser/browser.js +374 -0
  37. package/dist/browser/capability-source.d.ts +76 -0
  38. package/dist/browser/capability-source.js +338 -0
  39. package/dist/browser/cdp-client.d.ts +56 -0
  40. package/dist/browser/cdp-client.js +184 -0
  41. package/dist/browser/errors.d.ts +79 -0
  42. package/dist/browser/errors.js +32 -0
  43. package/dist/browser/index.d.ts +16 -0
  44. package/dist/browser/index.js +14 -0
  45. package/dist/browser/lease-registry.d.ts +61 -0
  46. package/dist/browser/lease-registry.js +101 -0
  47. package/dist/browser/operations.d.ts +225 -0
  48. package/dist/browser/operations.js +137 -0
  49. package/dist/browser/page.d.ts +25 -0
  50. package/dist/browser/page.js +172 -0
  51. package/dist/browser/quick-reads.d.ts +29 -0
  52. package/dist/browser/quick-reads.js +160 -0
  53. package/dist/browser/sessions.d.ts +52 -0
  54. package/dist/browser/sessions.js +118 -0
  55. package/dist/browser/url-policy.d.ts +18 -0
  56. package/dist/browser/url-policy.js +58 -0
  57. package/dist/build/app-imports.d.ts +12 -0
  58. package/dist/build/app-imports.js +105 -0
  59. package/dist/build/build-policy.d.ts +5 -3
  60. package/dist/build/build-policy.js +5 -3
  61. package/dist/build/candidate-builder.d.ts +1 -1
  62. package/dist/build/candidate-cli.mjs +8375 -334
  63. package/dist/build/local-build.d.ts +2 -0
  64. package/dist/build/local-build.js +28 -6
  65. package/dist/build/snapshot-package-store.d.ts +1 -1
  66. package/dist/build/snapshot-package-store.js +7 -2
  67. package/dist/build/workspace-build.d.ts +92 -5
  68. package/dist/build/workspace-build.js +93 -19
  69. package/dist/build.d.ts +1 -1
  70. package/dist/build.js +1 -1
  71. package/dist/catalog-frame.js +1 -1
  72. package/dist/cloudflare.d.ts +13 -3
  73. package/dist/cloudflare.js +102 -4
  74. package/dist/frame-binding-wire-script.js +1 -1
  75. package/dist/frame-binding-wire.js +4 -2
  76. package/dist/git-auth.d.ts +0 -2
  77. package/dist/git-auth.js +0 -2
  78. package/dist/git.d.ts +0 -1
  79. package/dist/git.js +0 -2
  80. package/dist/host.d.ts +39 -13
  81. package/dist/host.js +268 -142
  82. package/dist/index.d.ts +25 -15
  83. package/dist/index.js +39 -16
  84. package/dist/install-release-cli.d.ts +2 -0
  85. package/dist/install-release-cli.js +46 -0
  86. package/dist/installation-client.d.ts +43 -0
  87. package/dist/installation-client.js +178 -0
  88. package/dist/installation-execution.d.ts +11 -0
  89. package/dist/installation-execution.js +184 -0
  90. package/dist/installation-operations.d.ts +1437 -0
  91. package/dist/installation-operations.js +664 -0
  92. package/dist/installation-store-generation.d.ts +3 -0
  93. package/dist/installation-store-generation.js +16 -0
  94. package/dist/instance-id.d.ts +10 -0
  95. package/dist/instance-id.js +10 -0
  96. package/dist/instance-refusal.d.ts +11 -0
  97. package/dist/instance-refusal.js +21 -0
  98. package/dist/internal/delivery.js +4 -2
  99. package/dist/internal/host-gate.js +7 -1
  100. package/dist/internal/registry-installations.js +4 -4
  101. package/dist/keys.d.ts +5 -1
  102. package/dist/keys.js +10 -2
  103. package/dist/machine-link/authority.d.ts +89 -0
  104. package/dist/machine-link/authority.js +37 -0
  105. package/dist/machine-link/client.d.ts +66 -0
  106. package/dist/machine-link/client.js +94 -0
  107. package/dist/machine-link/delivery.d.ts +18 -0
  108. package/dist/machine-link/delivery.js +55 -0
  109. package/dist/machine-link/enrollment.d.ts +111 -0
  110. package/dist/machine-link/enrollment.js +286 -0
  111. package/dist/machine-link/fences.d.ts +37 -0
  112. package/dist/machine-link/fences.js +166 -0
  113. package/dist/machine-link/home.d.ts +20 -0
  114. package/dist/machine-link/home.js +24 -0
  115. package/dist/machine-link/host.d.ts +43 -0
  116. package/dist/machine-link/host.js +189 -0
  117. package/dist/machine-link/index.d.ts +15 -0
  118. package/dist/machine-link/index.js +15 -0
  119. package/dist/machine-link/link.d.ts +48 -0
  120. package/dist/machine-link/link.js +223 -0
  121. package/dist/machine-link/presence.d.ts +10 -0
  122. package/dist/machine-link/presence.js +25 -0
  123. package/dist/machine-link/workers.d.ts +6 -0
  124. package/dist/machine-link/workers.js +6 -0
  125. package/dist/mcp-owner.d.ts +2 -2
  126. package/dist/mcp-owner.js +41 -33
  127. package/dist/mcp.d.ts +15 -3
  128. package/dist/mcp.js +146 -25
  129. package/dist/pack.d.ts +14 -3
  130. package/dist/pack.js +44 -19
  131. package/dist/page/app-access.d.ts +7 -0
  132. package/dist/page/app-access.js +75 -0
  133. package/dist/page/boot-host.js +57 -0
  134. package/dist/page/capabilities.d.ts +3 -3
  135. package/dist/page/capabilities.js +16 -12
  136. package/dist/page/computer-handles.d.ts +3 -3
  137. package/dist/page/computer-target.d.ts +3 -0
  138. package/dist/page/computer-target.js +9 -0
  139. package/dist/page/mount.d.ts +23 -3
  140. package/dist/page/mount.js +152 -16
  141. package/dist/page-assets.d.ts +22 -0
  142. package/dist/page-assets.js +28 -0
  143. package/dist/page-script.d.ts +3 -0
  144. package/dist/page-script.js +5 -4
  145. package/dist/release.d.ts +13 -6
  146. package/dist/release.js +10 -7
  147. package/dist/root-data.d.ts +16 -6
  148. package/dist/root-data.js +2 -2
  149. package/dist/source/index.d.ts +1 -1
  150. package/dist/source/team-source.d.ts +20 -8
  151. package/dist/source/team-source.js +39 -10
  152. package/dist/source/template-seed.d.ts +2 -2
  153. package/dist/standalone/agent-mail.d.ts +24 -0
  154. package/dist/standalone/agent-mail.js +62 -0
  155. package/dist/standalone/agent-store.d.ts +9 -0
  156. package/dist/standalone/agent-store.js +30 -0
  157. package/dist/standalone/agents.d.ts +68 -9
  158. package/dist/standalone/agents.js +428 -56
  159. package/dist/standalone/app-builds-binding.d.ts +20 -2
  160. package/dist/standalone/app-builds-binding.js +147 -23
  161. package/dist/standalone/app-set.d.ts +5 -2
  162. package/dist/standalone/app-set.js +174 -143
  163. package/dist/standalone/browser.d.ts +11 -0
  164. package/dist/standalone/browser.js +72 -0
  165. package/dist/standalone/builds.d.ts +13 -4
  166. package/dist/standalone/builds.js +28 -44
  167. package/dist/standalone/computer-egress.d.ts +2 -0
  168. package/dist/standalone/computer-egress.js +13 -4
  169. package/dist/standalone/computer-fleet.d.ts +43 -0
  170. package/dist/standalone/computer-fleet.js +200 -0
  171. package/dist/standalone/computer.d.ts +44 -9
  172. package/dist/standalone/computer.js +129 -22
  173. package/dist/standalone/install-apps-cli.js +43 -6
  174. package/dist/standalone/instance.d.ts +2 -2
  175. package/dist/standalone/instance.js +8 -11
  176. package/dist/standalone/machine-link.d.ts +354 -0
  177. package/dist/standalone/machine-link.js +368 -0
  178. package/dist/standalone/media.d.ts +2 -2
  179. package/dist/standalone/media.js +19 -16
  180. package/dist/standalone/preview.d.ts +2 -2
  181. package/dist/standalone/preview.js +37 -10
  182. package/dist/standalone/registry.d.ts +149 -9
  183. package/dist/standalone/registry.js +299 -8
  184. package/dist/standalone/worker.d.ts +19 -5
  185. package/dist/standalone/worker.js +90 -54
  186. package/dist/standalone/workflow-binding.d.ts +18 -22
  187. package/dist/standalone/workflow-binding.js +18 -18
  188. package/dist/standalone/workflow-control.d.ts +4 -0
  189. package/dist/standalone/workflow-control.js +40 -0
  190. package/dist/standalone/workflow-events.d.ts +2 -2
  191. package/dist/standalone/workflow-events.js +9 -10
  192. package/dist/standalone/workflow-git-capture.js +4 -3
  193. package/dist/standalone/workflow-host.d.ts +162 -161
  194. package/dist/standalone/workflow-host.js +101 -21
  195. package/dist/standalone/workflow-node-capture.js +11 -4
  196. package/dist/standalone/workflow-schedules.d.ts +5 -2
  197. package/dist/standalone/workflow-schedules.js +9 -10
  198. package/dist/standalone/workflow-trigger-host.d.ts +65 -5
  199. package/dist/standalone/workflow-trigger-host.js +2 -2
  200. package/dist/standalone/workflow-webhooks.d.ts +22 -0
  201. package/dist/standalone/workflow-webhooks.js +39 -0
  202. package/dist/standalone/workflows.d.ts +140 -43
  203. package/dist/standalone/workflows.js +198 -39
  204. package/dist/storage-frame.d.ts +6 -6
  205. package/dist/testing/capabilities.js +14 -3
  206. package/dist/testing/installation.js +26 -2
  207. package/dist/testing/worker.js +1 -1
  208. package/dist/testing/workers-runtime.d.ts +8 -2
  209. package/dist/testing/workers-runtime.js +20 -2
  210. package/dist/webhook-abuse.d.ts +25 -0
  211. package/dist/webhook-abuse.js +54 -0
  212. package/dist/webhook-custody.d.ts +144 -0
  213. package/dist/webhook-custody.js +222 -0
  214. package/dist/webhook-ingress.d.ts +36 -0
  215. package/dist/webhook-ingress.js +146 -0
  216. package/dist/webhooks.d.ts +111 -0
  217. package/dist/webhooks.js +189 -0
  218. package/dist/workers-git.d.ts +12 -17
  219. package/dist/workers-git.js +60 -52
  220. package/dist/workers.d.ts +224 -13
  221. package/dist/workers.js +351 -51
  222. package/dist/workflow-agent-authority.d.ts +8 -0
  223. package/dist/workflow-agent-authority.js +42 -0
  224. package/dist/workflows.d.ts +66 -0
  225. package/dist/workflows.js +97 -0
  226. package/docs/api/README.md +63 -37
  227. package/docs/api/agents.md +17 -0
  228. package/docs/api/app-storage.md +1 -1
  229. package/docs/api/apps.md +1394 -543
  230. package/docs/api/browser/boot.md +132 -0
  231. package/docs/api/browser.md +1440 -0
  232. package/docs/api/build-contract.md +38 -25
  233. package/docs/api/build.md +263 -84
  234. package/docs/api/cloudflare.md +93 -7
  235. package/docs/api/git.md +3 -13
  236. package/docs/api/host.md +944 -118
  237. package/docs/api/index.md +320 -18
  238. package/docs/api/keys.md +24 -1
  239. package/docs/api/mcp.md +59 -12
  240. package/docs/api/modules.md +33 -40
  241. package/docs/api/pack.md +57 -8
  242. package/docs/api/page/mount.md +92 -4
  243. package/docs/api/workers-git.md +103 -24
  244. package/docs/api/workers.md +1581 -244
  245. package/docs/site/agent-quickstart.mdx +28 -14
  246. package/examples/standalone/worker.ts +3 -1
  247. package/examples/standalone/wrangler.jsonc +2 -0
  248. package/package.json +73 -71
  249. package/dist/installation-consent.d.ts +0 -81
  250. package/dist/installation-consent.js +0 -84
  251. package/dist/shell/app-directory.d.ts +0 -542
  252. package/dist/shell/app-directory.js +0 -196
  253. package/dist/shell/browser-actions.d.ts +0 -7
  254. package/dist/shell/browser-actions.js +0 -56
  255. package/dist/shell/command-host.d.ts +0 -112
  256. package/dist/shell/command-host.js +0 -502
  257. package/dist/shell/commands.d.ts +0 -25
  258. package/dist/shell/commands.js +0 -78
  259. package/dist/shell/index.d.ts +0 -8
  260. package/dist/shell/index.js +0 -8
  261. package/dist/shell/keys.d.ts +0 -41
  262. package/dist/shell/keys.js +0 -134
  263. package/dist/shell/shell-module.d.ts +0 -55
  264. package/dist/shell/shell-module.js +0 -86
  265. package/dist/shell/window-manager.d.ts +0 -128
  266. package/dist/shell/window-manager.js +0 -730
  267. package/dist/shell/workbench-contract.d.ts +0 -68
  268. package/dist/shell/workbench-directory.d.ts +0 -332
  269. package/dist/shell/workbench-directory.js +0 -35
  270. package/dist/shell/workbench-host-types.d.ts +0 -96
  271. package/dist/shell/workbench-host-types.js +0 -1
  272. package/dist/shell/workbench-host.d.ts +0 -34
  273. package/dist/shell/workbench-host.js +0 -352
  274. package/dist/shell/workbench-model.d.ts +0 -194
  275. package/dist/shell/workbench-model.js +0 -53
  276. package/dist/shell/workbench.d.ts +0 -4
  277. package/dist/shell/workbench.js +0 -2
  278. package/docs/api/shell/app-directory.md +0 -599
  279. package/docs/api/shell/command-host.md +0 -224
  280. package/docs/api/shell/commands.md +0 -197
  281. package/docs/api/shell/keys.md +0 -183
  282. package/docs/api/shell/shell-module.md +0 -204
  283. package/docs/api/shell/window-manager.md +0 -267
  284. package/docs/api/shell/workbench-directory.md +0 -119
  285. package/docs/api/shell/workbench.md +0 -205
  286. package/docs/api/shell.md +0 -1915
  287. /package/dist/{shell/workbench-contract.js → page/boot-host.d.ts} +0 -0
package/docs/api/host.md CHANGED
@@ -179,10 +179,12 @@ A serializable registry commit result, including across native DO RPC.
179
179
  ```ts
180
180
  type InstallationStore = InstallationReader &
181
181
  Readonly<{
182
- put: (installation) => Promise<void>;
182
+ operations?: InstallationOperations;
183
+ generation: () => Promise<string>;
183
184
  compareAndPut: (
184
185
  installation,
185
186
  expectedAuthorityVersion,
187
+ expectedGeneration,
186
188
  ) => Promise<InstallationCommit>;
187
189
  }>;
188
190
  ```
@@ -237,6 +239,10 @@ The result of one Instance operation; refusals carry Oyster's error code.
237
239
 
238
240
  ```ts
239
241
  type InstanceHandle = Readonly<{
242
+ prepare: (
243
+ state,
244
+ release,
245
+ ) => Promise<InstanceResult<UiBootCheckOutcome | null>>;
240
246
  apply: (state, release) => Promise<InstanceResult<Instance>>;
241
247
  onGitPush: (facts, fact) => Promise<void>;
242
248
  syncRefused: (facts, refusal) => Promise<void>;
@@ -412,11 +418,63 @@ Variables: OysterVariables;
412
418
 
413
419
  ```ts
414
420
  type OysterHost = Readonly<{
421
+ approvals?: Readonly<{
422
+ submit: Promise<
423
+ | {
424
+ kind: Schema.Literal<"pending_approval">;
425
+ recordId: Schema.String;
426
+ description: Schema.Struct<{
427
+ title: Schema.String;
428
+ inputBytes: Schema.Int;
429
+ inputSha256: Schema.String;
430
+ }>;
431
+ }
432
+ | ApprovalApplyResult>;
433
+ }>;
434
+ workflows?: (principal) => Promise<
435
+ | {
436
+ status: Promise<
437
+ | {
438
+ runId: z.ZodString;
439
+ planDigest: z.ZodString;
440
+ outcome: z.ZodEnum<{
441
+ cancelled: ...;
442
+ terminal: ...;
443
+ active: ...;
444
+ }>;
445
+ title: z.ZodString;
446
+ events: z.ZodArray<z.ZodRecord<..., ...>>;
447
+ reviews: z.ZodArray<z.ZodRecord<..., ...>>;
448
+ status: z.ZodString;
449
+ output: z.ZodJSONSchema;
450
+ error: z.ZodJSONSchema;
451
+ }
452
+ | {
453
+ error: z.ZodString;
454
+ }
455
+ | null>;
456
+ cancel: Promise<
457
+ | {
458
+ kind: z.ZodEnum<{
459
+ cancelled: ...;
460
+ terminal: ...;
461
+ }>;
462
+ }
463
+ | {
464
+ kind: z.ZodLiteral<"refused">;
465
+ reason: z.ZodLiteral<"denied">;
466
+ }
467
+ | {
468
+ error: z.ZodString;
469
+ }>;
470
+ }
471
+ | null>;
415
472
  auth: OysterAuth;
416
473
  backgroundOriginKey?: () => Promise<CryptoKey>;
417
474
  artifacts: ArtifactStore;
418
475
  installations: InstallationStore;
419
476
  instances: InstanceDirectory;
477
+ bootUi: (release) => Promise<UiBootCheckOutcome>;
420
478
  computerId?: string;
421
479
  computer?: (principal) => KnapsackComputer | null | Promise<KnapsackComputer | null>;
422
480
  appToolPolicy?: (actor) =>
@@ -453,6 +511,14 @@ type OysterHost = Readonly<{
453
511
  }>;
454
512
  homeInstallationId?: string;
455
513
  pageScript?: string;
514
+ pageAssets?: () => Promise<{
515
+ pageScript: string;
516
+ publicHomeScript: string;
517
+ fontStyles: string;
518
+ loginFontStyles: string;
519
+ shellStyles: string;
520
+ grantConsentScript: string;
521
+ }>;
456
522
  title?: string;
457
523
  }>;
458
524
  ```
@@ -461,6 +527,746 @@ Everything a host supplies to run Oyster.
461
527
 
462
528
  ---
463
529
 
530
+ ### InstallationOperations
531
+
532
+ ```ts
533
+ type InstallationOperations = Readonly<{
534
+ admit: Promise<
535
+ | {
536
+ requestId: string;
537
+ requestedInstallationId: string;
538
+ installationId: string;
539
+ release: {
540
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
541
+ appId: Schema.refine<AppId, Schema.String>;
542
+ artifact: Schema.Struct<{
543
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
544
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
545
+ provenance: Schema.Struct<{
546
+ sourceRevision: Schema.refine<..., ...>;
547
+ sourceTreeDigest: Schema.refine<..., ...>;
548
+ buildRecipeDigest: Schema.refine<..., ...>;
549
+ }>;
550
+ }>;
551
+ };
552
+ state: "refused";
553
+ status: number;
554
+ code: string;
555
+ }
556
+ | {
557
+ requestId: string;
558
+ requestedInstallationId: string;
559
+ installationId: string;
560
+ release: {
561
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
562
+ appId: Schema.refine<AppId, Schema.String>;
563
+ artifact: Schema.Struct<{
564
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
565
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
566
+ provenance: Schema.Struct<{
567
+ sourceRevision: Schema.refine<..., ...>;
568
+ sourceTreeDigest: Schema.refine<..., ...>;
569
+ buildRecipeDigest: Schema.refine<..., ...>;
570
+ }>;
571
+ }>;
572
+ };
573
+ state: "unconfirmed";
574
+ outcome: "cancelled" | "outcome_unknown" | "interrupted";
575
+ }
576
+ | {
577
+ requestId: string;
578
+ requestedInstallationId: string;
579
+ installationId: string;
580
+ release: {
581
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
582
+ appId: Schema.refine<AppId, Schema.String>;
583
+ artifact: Schema.Struct<{
584
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
585
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
586
+ provenance: Schema.Struct<{
587
+ sourceRevision: Schema.refine<..., ...>;
588
+ sourceTreeDigest: Schema.refine<..., ...>;
589
+ buildRecipeDigest: Schema.refine<..., ...>;
590
+ }>;
591
+ }>;
592
+ };
593
+ state: "succeeded";
594
+ reference: {
595
+ generation: string;
596
+ instanceId: InstanceId;
597
+ authorityVersion: number;
598
+ status: "enabled" | "disabled" | "deleted";
599
+ };
600
+ creation: "fresh" | "replacement" | "reminted";
601
+ uiCheck: | {
602
+ kind: "passed";
603
+ }
604
+ | {
605
+ kind: "failed";
606
+ code: "ui_mount_failed";
607
+ diagnostics?: {
608
+ failedPredicate: | "unexpected_candidate_request"
609
+ | "response_status"
610
+ | "request_failed"
611
+ | "page_error"
612
+ | "candidate_not_mounted";
613
+ errorName?: | "TypeError"
614
+ | "RangeError"
615
+ | "SyntaxError"
616
+ | "AbortError"
617
+ | "TimeoutError"
618
+ | "Other"
619
+ | "Error";
620
+ finalUrlPath: string;
621
+ consoleErrors: string[];
622
+ pageErrors: string[];
623
+ failedRequests: object[];
624
+ droppedCount: number;
625
+ };
626
+ }
627
+ | {
628
+ kind: "not_checked";
629
+ code: | "boot_runner_unavailable"
630
+ | "boot_browser_binding_missing"
631
+ | "boot_clone_unavailable"
632
+ | "boot_timeout"
633
+ | "boot_cleanup_failed"
634
+ | "ui_check_not_run_on_host";
635
+ }
636
+ | null;
637
+ installation: | {
638
+ installationId: string;
639
+ instanceId: InstanceId | null;
640
+ appId: AppId;
641
+ release: {
642
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
643
+ appId: Schema.refine<AppId, Schema.String>;
644
+ artifact: Schema.Struct<{
645
+ artifactRef: Schema.refine<..., ...>;
646
+ artifactDigest: Schema.refine<..., ...>;
647
+ provenance: Schema.Struct<...>;
648
+ }>;
649
+ };
650
+ releasePin: "pinned" | "floating";
651
+ authority: {
652
+ authorityVersion: number;
653
+ declaredOperationsDigest: Sha256Digest;
654
+ approvedGrants: readonly Readonly<{
655
+ capability: ...;
656
+ capabilityApproved: ...;
657
+ operations: ...;
658
+ resources: ...;
659
+ }>[];
660
+ approval: | Readonly<{
661
+ by: ...;
662
+ at: ...;
663
+ authorityVersion: ...;
664
+ }>
665
+ | null;
666
+ };
667
+ status: "enabled" | "disabled" | "deleted";
668
+ visibility: "private" | "public";
669
+ approvedAnonymousMethods: readonly Readonly<{
670
+ name: string;
671
+ digest: Sha256Digest;
672
+ }>[];
673
+ anonymousApproval: | Readonly<{
674
+ by: ... | ... | ...;
675
+ at: number;
676
+ authorityVersion: number;
677
+ }>
678
+ | null;
679
+ }
680
+ | null;
681
+ }
682
+ | {
683
+ requestId: string;
684
+ requestedInstallationId: string;
685
+ installationId: string;
686
+ release: {
687
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
688
+ appId: Schema.refine<AppId, Schema.String>;
689
+ artifact: Schema.Struct<{
690
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
691
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
692
+ provenance: Schema.Struct<{
693
+ sourceRevision: Schema.refine<..., ...>;
694
+ sourceTreeDigest: Schema.refine<..., ...>;
695
+ buildRecipeDigest: Schema.refine<..., ...>;
696
+ }>;
697
+ }>;
698
+ };
699
+ state: "pending";
700
+ }>;
701
+ read: Promise<
702
+ | {
703
+ requestId: string;
704
+ requestedInstallationId: string;
705
+ installationId: string;
706
+ release: {
707
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
708
+ appId: Schema.refine<AppId, Schema.String>;
709
+ artifact: Schema.Struct<{
710
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
711
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
712
+ provenance: Schema.Struct<{
713
+ sourceRevision: Schema.refine<..., ...>;
714
+ sourceTreeDigest: Schema.refine<..., ...>;
715
+ buildRecipeDigest: Schema.refine<..., ...>;
716
+ }>;
717
+ }>;
718
+ };
719
+ state: "refused";
720
+ status: number;
721
+ code: string;
722
+ }
723
+ | {
724
+ requestId: string;
725
+ requestedInstallationId: string;
726
+ installationId: string;
727
+ release: {
728
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
729
+ appId: Schema.refine<AppId, Schema.String>;
730
+ artifact: Schema.Struct<{
731
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
732
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
733
+ provenance: Schema.Struct<{
734
+ sourceRevision: Schema.refine<..., ...>;
735
+ sourceTreeDigest: Schema.refine<..., ...>;
736
+ buildRecipeDigest: Schema.refine<..., ...>;
737
+ }>;
738
+ }>;
739
+ };
740
+ state: "unconfirmed";
741
+ outcome: "cancelled" | "outcome_unknown" | "interrupted";
742
+ }
743
+ | {
744
+ requestId: string;
745
+ requestedInstallationId: string;
746
+ installationId: string;
747
+ release: {
748
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
749
+ appId: Schema.refine<AppId, Schema.String>;
750
+ artifact: Schema.Struct<{
751
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
752
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
753
+ provenance: Schema.Struct<{
754
+ sourceRevision: Schema.refine<..., ...>;
755
+ sourceTreeDigest: Schema.refine<..., ...>;
756
+ buildRecipeDigest: Schema.refine<..., ...>;
757
+ }>;
758
+ }>;
759
+ };
760
+ state: "succeeded";
761
+ reference: {
762
+ generation: string;
763
+ instanceId: InstanceId;
764
+ authorityVersion: number;
765
+ status: "enabled" | "disabled" | "deleted";
766
+ };
767
+ creation: "fresh" | "replacement" | "reminted";
768
+ uiCheck: | {
769
+ kind: "passed";
770
+ }
771
+ | {
772
+ kind: "failed";
773
+ code: "ui_mount_failed";
774
+ diagnostics?: {
775
+ failedPredicate: | "unexpected_candidate_request"
776
+ | "response_status"
777
+ | "request_failed"
778
+ | "page_error"
779
+ | "candidate_not_mounted";
780
+ errorName?: | "TypeError"
781
+ | "RangeError"
782
+ | "SyntaxError"
783
+ | "AbortError"
784
+ | "TimeoutError"
785
+ | "Other"
786
+ | "Error";
787
+ finalUrlPath: string;
788
+ consoleErrors: string[];
789
+ pageErrors: string[];
790
+ failedRequests: object[];
791
+ droppedCount: number;
792
+ };
793
+ }
794
+ | {
795
+ kind: "not_checked";
796
+ code: | "boot_runner_unavailable"
797
+ | "boot_browser_binding_missing"
798
+ | "boot_clone_unavailable"
799
+ | "boot_timeout"
800
+ | "boot_cleanup_failed"
801
+ | "ui_check_not_run_on_host";
802
+ }
803
+ | null;
804
+ installation: | {
805
+ installationId: string;
806
+ instanceId: InstanceId | null;
807
+ appId: AppId;
808
+ release: {
809
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
810
+ appId: Schema.refine<AppId, Schema.String>;
811
+ artifact: Schema.Struct<{
812
+ artifactRef: Schema.refine<..., ...>;
813
+ artifactDigest: Schema.refine<..., ...>;
814
+ provenance: Schema.Struct<...>;
815
+ }>;
816
+ };
817
+ releasePin: "pinned" | "floating";
818
+ authority: {
819
+ authorityVersion: number;
820
+ declaredOperationsDigest: Sha256Digest;
821
+ approvedGrants: readonly Readonly<{
822
+ capability: ...;
823
+ capabilityApproved: ...;
824
+ operations: ...;
825
+ resources: ...;
826
+ }>[];
827
+ approval: | Readonly<{
828
+ by: ...;
829
+ at: ...;
830
+ authorityVersion: ...;
831
+ }>
832
+ | null;
833
+ };
834
+ status: "enabled" | "disabled" | "deleted";
835
+ visibility: "private" | "public";
836
+ approvedAnonymousMethods: readonly Readonly<{
837
+ name: string;
838
+ digest: Sha256Digest;
839
+ }>[];
840
+ anonymousApproval: | Readonly<{
841
+ by: ... | ... | ...;
842
+ at: number;
843
+ authorityVersion: number;
844
+ }>
845
+ | null;
846
+ }
847
+ | null;
848
+ }
849
+ | {
850
+ requestId: string;
851
+ requestedInstallationId: string;
852
+ installationId: string;
853
+ release: {
854
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
855
+ appId: Schema.refine<AppId, Schema.String>;
856
+ artifact: Schema.Struct<{
857
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
858
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
859
+ provenance: Schema.Struct<{
860
+ sourceRevision: Schema.refine<..., ...>;
861
+ sourceTreeDigest: Schema.refine<..., ...>;
862
+ buildRecipeDigest: Schema.refine<..., ...>;
863
+ }>;
864
+ }>;
865
+ };
866
+ state: "pending";
867
+ }
868
+ | null>;
869
+ load: Promise<
870
+ | {
871
+ admission: {
872
+ requestId: string;
873
+ installationId: string;
874
+ release: {
875
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
876
+ appId: Schema.refine<AppId, Schema.String>;
877
+ artifact: Schema.Struct<{
878
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
879
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
880
+ provenance: Schema.Struct<{
881
+ sourceRevision: ...;
882
+ sourceTreeDigest: ...;
883
+ buildRecipeDigest: ...;
884
+ }>;
885
+ }>;
886
+ };
887
+ actor: | {
888
+ kind: z.ZodMiniLiteral<"member">;
889
+ memberId: z.ZodMiniString<string>;
890
+ }
891
+ | {
892
+ kind: z.ZodMiniLiteral<"agent">;
893
+ agentId: z.ZodMiniString<string>;
894
+ }
895
+ | {
896
+ kind: z.ZodMiniLiteral<"team-key">;
897
+ keyId: z.ZodMiniString<string>;
898
+ };
899
+ intent: "install-or-select" | "install-or-remint" | "create-only";
900
+ origin: "workflow" | "owner-direct";
901
+ };
902
+ scope: {
903
+ tenantId: string & Brand<"OysterTenantId">;
904
+ origin: string;
905
+ };
906
+ installationId: string;
907
+ instanceId: InstanceId;
908
+ generation: string;
909
+ baseline: | {
910
+ installationId: string;
911
+ instanceId: InstanceId | null;
912
+ appId: AppId;
913
+ release: {
914
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
915
+ appId: Schema.refine<AppId, Schema.String>;
916
+ artifact: Schema.Struct<{
917
+ artifactRef: Schema.refine<..., ...>;
918
+ artifactDigest: Schema.refine<..., ...>;
919
+ provenance: Schema.Struct<...>;
920
+ }>;
921
+ };
922
+ releasePin: "pinned" | "floating";
923
+ authority: {
924
+ authorityVersion: number;
925
+ declaredOperationsDigest: Sha256Digest;
926
+ approvedGrants: readonly Readonly<{
927
+ capability: ...;
928
+ capabilityApproved: ...;
929
+ operations: ...;
930
+ resources: ...;
931
+ }>[];
932
+ approval: | Readonly<{
933
+ by: ...;
934
+ at: ...;
935
+ authorityVersion: ...;
936
+ }>
937
+ | null;
938
+ };
939
+ status: "enabled" | "disabled" | "deleted";
940
+ visibility: "private" | "public";
941
+ approvedAnonymousMethods: readonly Readonly<{
942
+ name: string;
943
+ digest: Sha256Digest;
944
+ }>[];
945
+ anonymousApproval: | Readonly<{
946
+ by: ... | ... | ...;
947
+ at: number;
948
+ authorityVersion: number;
949
+ }>
950
+ | null;
951
+ }
952
+ | null;
953
+ acceptedAt: number;
954
+ creation: "fresh" | "replacement" | "reminted";
955
+ plan: | {
956
+ installation: {
957
+ installationId: string;
958
+ instanceId: InstanceId | null;
959
+ appId: AppId;
960
+ release: {
961
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
962
+ appId: Schema.refine<AppId, Schema.String>;
963
+ artifact: Schema.Struct<{
964
+ artifactRef: ...;
965
+ artifactDigest: ...;
966
+ provenance: ...;
967
+ }>;
968
+ };
969
+ releasePin: "pinned" | "floating";
970
+ authority: {
971
+ authorityVersion: number;
972
+ declaredOperationsDigest: Sha256Digest;
973
+ approvedGrants: readonly Readonly<...>[];
974
+ approval: Readonly<...> | null;
975
+ };
976
+ status: "enabled" | "disabled" | "deleted";
977
+ visibility: "private" | "public";
978
+ approvedAnonymousMethods: readonly Readonly<{
979
+ name: ...;
980
+ digest: ...;
981
+ }>[];
982
+ anonymousApproval: | Readonly<{
983
+ by: ...;
984
+ at: ...;
985
+ authorityVersion: ...;
986
+ }>
987
+ | null;
988
+ };
989
+ hasBackend: boolean;
990
+ prepared: boolean;
991
+ uiCheck?: | {
992
+ kind: "passed";
993
+ }
994
+ | {
995
+ kind: "failed";
996
+ code: "ui_mount_failed";
997
+ diagnostics?: {
998
+ failedPredicate: ...;
999
+ errorName?: ...;
1000
+ finalUrlPath: ...;
1001
+ consoleErrors: ...;
1002
+ pageErrors: ...;
1003
+ failedRequests: ...;
1004
+ droppedCount: ...;
1005
+ };
1006
+ }
1007
+ | {
1008
+ kind: "not_checked";
1009
+ code: | "boot_runner_unavailable"
1010
+ | "boot_browser_binding_missing"
1011
+ | "boot_clone_unavailable"
1012
+ | "boot_timeout"
1013
+ | "boot_cleanup_failed"
1014
+ | "ui_check_not_run_on_host";
1015
+ }
1016
+ | null;
1017
+ }
1018
+ | null;
1019
+ operation: {
1020
+ requestId: string;
1021
+ requestedInstallationId: string;
1022
+ installationId: string;
1023
+ release: {
1024
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
1025
+ appId: Schema.refine<AppId, Schema.String>;
1026
+ artifact: Schema.Struct<{
1027
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
1028
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
1029
+ provenance: Schema.Struct<{
1030
+ sourceRevision: ...;
1031
+ sourceTreeDigest: ...;
1032
+ buildRecipeDigest: ...;
1033
+ }>;
1034
+ }>;
1035
+ };
1036
+ state: "pending";
1037
+ };
1038
+ }
1039
+ | null>;
1040
+ plan: Promise<{
1041
+ admission: {
1042
+ requestId: string;
1043
+ installationId: string;
1044
+ release: {
1045
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
1046
+ appId: Schema.refine<AppId, Schema.String>;
1047
+ artifact: Schema.Struct<{
1048
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
1049
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
1050
+ provenance: Schema.Struct<{
1051
+ sourceRevision: Schema.refine<..., ...>;
1052
+ sourceTreeDigest: Schema.refine<..., ...>;
1053
+ buildRecipeDigest: Schema.refine<..., ...>;
1054
+ }>;
1055
+ }>;
1056
+ };
1057
+ actor: | {
1058
+ kind: z.ZodMiniLiteral<"member">;
1059
+ memberId: z.ZodMiniString<string>;
1060
+ }
1061
+ | {
1062
+ kind: z.ZodMiniLiteral<"agent">;
1063
+ agentId: z.ZodMiniString<string>;
1064
+ }
1065
+ | {
1066
+ kind: z.ZodMiniLiteral<"team-key">;
1067
+ keyId: z.ZodMiniString<string>;
1068
+ };
1069
+ intent: "install-or-select" | "install-or-remint" | "create-only";
1070
+ origin: "workflow" | "owner-direct";
1071
+ };
1072
+ scope: {
1073
+ tenantId: string & Brand<"OysterTenantId">;
1074
+ origin: string;
1075
+ };
1076
+ installationId: string;
1077
+ instanceId: InstanceId;
1078
+ generation: string;
1079
+ baseline: | {
1080
+ installationId: string;
1081
+ instanceId: InstanceId | null;
1082
+ appId: AppId;
1083
+ release: {
1084
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
1085
+ appId: Schema.refine<AppId, Schema.String>;
1086
+ artifact: Schema.Struct<{
1087
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
1088
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
1089
+ provenance: Schema.Struct<{
1090
+ sourceRevision: ...;
1091
+ sourceTreeDigest: ...;
1092
+ buildRecipeDigest: ...;
1093
+ }>;
1094
+ }>;
1095
+ };
1096
+ releasePin: "pinned" | "floating";
1097
+ authority: {
1098
+ authorityVersion: number;
1099
+ declaredOperationsDigest: Sha256Digest;
1100
+ approvedGrants: readonly Readonly<{
1101
+ capability: | ...
1102
+ | ...
1103
+ | ...
1104
+ | ...
1105
+ | ...
1106
+ | ...
1107
+ | ...
1108
+ | ...
1109
+ | ...
1110
+ | ...
1111
+ | ...
1112
+ | ...
1113
+ | ...
1114
+ | ...
1115
+ | ...
1116
+ | ...
1117
+ | ...
1118
+ | ...
1119
+ | ...
1120
+ | ...
1121
+ | ...
1122
+ | ...
1123
+ | ...
1124
+ | ...
1125
+ | ...
1126
+ | ...
1127
+ | ...
1128
+ | ...
1129
+ | ...;
1130
+ capabilityApproved: true;
1131
+ operations: readonly ...[];
1132
+ resources: ... | ...;
1133
+ }>[];
1134
+ approval: | Readonly<{
1135
+ by: ... | ... | ...;
1136
+ at: number;
1137
+ authorityVersion: number;
1138
+ }>
1139
+ | null;
1140
+ };
1141
+ status: "enabled" | "disabled" | "deleted";
1142
+ visibility: "private" | "public";
1143
+ approvedAnonymousMethods: readonly Readonly<{
1144
+ name: string;
1145
+ digest: Sha256Digest;
1146
+ }>[];
1147
+ anonymousApproval: | Readonly<{
1148
+ by: | {
1149
+ kind: ...;
1150
+ memberId: ...;
1151
+ }
1152
+ | {
1153
+ kind: ...;
1154
+ agentId: ...;
1155
+ }
1156
+ | {
1157
+ kind: ...;
1158
+ keyId: ...;
1159
+ };
1160
+ at: number;
1161
+ authorityVersion: number;
1162
+ }>
1163
+ | null;
1164
+ }
1165
+ | null;
1166
+ acceptedAt: number;
1167
+ creation: "fresh" | "replacement" | "reminted";
1168
+ plan: | {
1169
+ installation: {
1170
+ installationId: string;
1171
+ instanceId: InstanceId | null;
1172
+ appId: AppId;
1173
+ release: {
1174
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
1175
+ appId: Schema.refine<AppId, Schema.String>;
1176
+ artifact: Schema.Struct<{
1177
+ artifactRef: Schema.refine<..., ...>;
1178
+ artifactDigest: Schema.refine<..., ...>;
1179
+ provenance: Schema.Struct<...>;
1180
+ }>;
1181
+ };
1182
+ releasePin: "pinned" | "floating";
1183
+ authority: {
1184
+ authorityVersion: number;
1185
+ declaredOperationsDigest: Sha256Digest;
1186
+ approvedGrants: readonly Readonly<{
1187
+ capability: ...;
1188
+ capabilityApproved: ...;
1189
+ operations: ...;
1190
+ resources: ...;
1191
+ }>[];
1192
+ approval: | Readonly<{
1193
+ by: ...;
1194
+ at: ...;
1195
+ authorityVersion: ...;
1196
+ }>
1197
+ | null;
1198
+ };
1199
+ status: "enabled" | "disabled" | "deleted";
1200
+ visibility: "private" | "public";
1201
+ approvedAnonymousMethods: readonly Readonly<{
1202
+ name: string;
1203
+ digest: Sha256Digest;
1204
+ }>[];
1205
+ anonymousApproval: | Readonly<{
1206
+ by: ... | ... | ...;
1207
+ at: number;
1208
+ authorityVersion: number;
1209
+ }>
1210
+ | null;
1211
+ };
1212
+ hasBackend: boolean;
1213
+ prepared: boolean;
1214
+ uiCheck?: | {
1215
+ kind: "passed";
1216
+ }
1217
+ | {
1218
+ kind: "failed";
1219
+ code: "ui_mount_failed";
1220
+ diagnostics?: {
1221
+ failedPredicate: ... | ... | ... | ... | ...;
1222
+ errorName?: ... | ... | ... | ... | ... | ... | ... | ...;
1223
+ finalUrlPath: string;
1224
+ consoleErrors: ...[];
1225
+ pageErrors: ...[];
1226
+ failedRequests: ...[];
1227
+ droppedCount: number;
1228
+ };
1229
+ }
1230
+ | {
1231
+ kind: "not_checked";
1232
+ code: | "boot_runner_unavailable"
1233
+ | "boot_browser_binding_missing"
1234
+ | "boot_clone_unavailable"
1235
+ | "boot_timeout"
1236
+ | "boot_cleanup_failed"
1237
+ | "ui_check_not_run_on_host";
1238
+ }
1239
+ | null;
1240
+ }
1241
+ | null;
1242
+ operation: {
1243
+ requestId: string;
1244
+ requestedInstallationId: string;
1245
+ installationId: string;
1246
+ release: {
1247
+ releaseId: Schema.refine<ReleaseId, Schema.String>;
1248
+ appId: Schema.refine<AppId, Schema.String>;
1249
+ artifact: Schema.Struct<{
1250
+ artifactRef: Schema.refine<ArtifactRef, Schema.String>;
1251
+ artifactDigest: Schema.refine<Sha256Digest, Schema.String>;
1252
+ provenance: Schema.Struct<{
1253
+ sourceRevision: Schema.refine<..., ...>;
1254
+ sourceTreeDigest: Schema.refine<..., ...>;
1255
+ buildRecipeDigest: Schema.refine<..., ...>;
1256
+ }>;
1257
+ }>;
1258
+ };
1259
+ state: "pending";
1260
+ };
1261
+ }>;
1262
+ commit: Promise<InstallationCommit>;
1263
+ }>;
1264
+ ```
1265
+
1266
+ Host-side port; RPC transport and tenant context belong to the adapter.
1267
+
1268
+ ---
1269
+
464
1270
  ### ArtifactStore
465
1271
 
466
1272
  ```ts
@@ -689,23 +1495,27 @@ function installOrSelect(
689
1495
  installationId,
690
1496
  release,
691
1497
  principal,
1498
+ intent,
1499
+ origin,
1500
+ requestId?,
1501
+ signal?,
692
1502
  ): Promise<Response>;
693
1503
  ```
694
1504
 
695
- Install a Release at `installationId`, or switch an already-live one onto it:
696
- the one path the POST install and PUT release-select routes share, and that a
697
- build owner's own install call reaches too. Nothing there (or only a deleted
698
- installation) is a fresh install; a live installation is switched in place,
699
- refusing a change of the installation's App identity.
1505
+ Completed selection, without re-deriving or executing outside Watchdog.
700
1506
 
701
1507
  #### Parameters
702
1508
 
703
- | Parameter | Type |
704
- | ---------------- | ------------------------------------- |
705
- | `host` | [`OysterHost`](#oysterhost) |
706
- | `installationId` | `string` |
707
- | `release` | `Release` |
708
- | `principal` | [`OysterPrincipal`](#oysterprincipal) |
1509
+ | Parameter | Type |
1510
+ | ---------------- | ----------------------------------------------------------------- |
1511
+ | `host` | [`OysterHost`](#oysterhost) |
1512
+ | `installationId` | `string` |
1513
+ | `release` | `Release` |
1514
+ | `principal` | [`OysterPrincipal`](#oysterprincipal) |
1515
+ | `intent` | `"install-or-select"` \| `"install-or-remint"` \| `"create-only"` |
1516
+ | `origin` | `"workflow"` \| `"owner-direct"` \| `"app"` |
1517
+ | `requestId` | `string` |
1518
+ | `signal` | `AbortSignal` |
709
1519
 
710
1520
  #### Returns
711
1521
 
@@ -795,9 +1605,11 @@ function verifyRelease(
795
1605
  }>;
796
1606
  displayName?: string;
797
1607
  capabilities: readonly (
1608
+ | "approvals"
798
1609
  | "agent.list"
799
1610
  | "agent.manage"
800
1611
  | "agent.rename"
1612
+ | "agent.avatar"
801
1613
  | "agent.toolPolicy"
802
1614
  | "agent.read"
803
1615
  | "agent.send"
@@ -861,9 +1673,11 @@ function verifyRelease(
861
1673
  }>;
862
1674
  displayName?: string;
863
1675
  capabilities: readonly (
1676
+ | "approvals"
864
1677
  | "agent.list"
865
1678
  | "agent.manage"
866
1679
  | "agent.rename"
1680
+ | "agent.avatar"
867
1681
  | "agent.toolPolicy"
868
1682
  | "agent.read"
869
1683
  | "agent.send"
@@ -920,9 +1734,11 @@ function verifyRelease(
920
1734
  }>;
921
1735
  displayName?: string;
922
1736
  capabilities: readonly (
1737
+ | "approvals"
923
1738
  | "agent.list"
924
1739
  | "agent.manage"
925
1740
  | "agent.rename"
1741
+ | "agent.avatar"
926
1742
  | "agent.toolPolicy"
927
1743
  | "agent.read"
928
1744
  | "agent.send"
@@ -980,6 +1796,7 @@ function verifyRelease(
980
1796
  pending?: ... | ...;
981
1797
  hidden?: ... | ...;
982
1798
  anonymous?: ... | ...;
1799
+ present?: ... | ...;
983
1800
  }>>>;
984
1801
  toolFamily?: Readonly<{
985
1802
  name: string;
@@ -1000,9 +1817,11 @@ function verifyRelease(
1000
1817
  }>;
1001
1818
  displayName?: string;
1002
1819
  capabilities: readonly (
1820
+ | "approvals"
1003
1821
  | "agent.list"
1004
1822
  | "agent.manage"
1005
1823
  | "agent.rename"
1824
+ | "agent.avatar"
1006
1825
  | "agent.toolPolicy"
1007
1826
  | "agent.read"
1008
1827
  | "agent.send"
@@ -1085,29 +1904,54 @@ function verifyRelease(
1085
1904
  }>>;
1086
1905
  ```
1087
1906
 
1088
- Read a Release root and verify every artifact it names: the UI document or asset
1089
- build (and each asset object), and the backend descriptor.
1907
+ Read a Release root and verify its UI build and backend descriptor. `readAssets`
1908
+ verifies UI object bodies when true. When false, it reads the asset manifest
1909
+ needed to resolve references but does not read any UI object body, including
1910
+ standalone HTML.
1090
1911
 
1091
1912
  #### Parameters
1092
1913
 
1093
- | Parameter | Type | Default value | Description |
1094
- | ------------------------- | ------------------------------------------------------------------------------------------------------------------ | -------------------- | -------------------------------------------------------------------------------------------------------------------- |
1095
- | `store` | [`ArtifactStore`](#artifactstore) | `undefined` | - |
1096
- | `release` | `Release` | `undefined` | - |
1097
- | `policy` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \} | `defaultAssetPolicy` | - |
1098
- | `policy.maxManifestBytes` | `number` | `undefined` | - |
1099
- | `policy.maxObjects` | `number` | `undefined` | - |
1100
- | `policy.maxObjectBytes` | `number` | `undefined` | - |
1101
- | `policy.maxTotalBytes` | `number` | `undefined` | - |
1102
- | `readAssets` | `boolean` | `true` | Read and check every UI asset now. Serving can skip this: each asset is verified against its digest when it is read. |
1914
+ | Parameter | Type | Default value | Description |
1915
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------ | -------------------- | -------------------------------------------------------------------- |
1916
+ | `store` | [`ArtifactStore`](#artifactstore) | `undefined` | - |
1917
+ | `release` | `Release` | `undefined` | - |
1918
+ | `policy` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \} | `defaultAssetPolicy` | - |
1919
+ | `policy.maxManifestBytes` | `number` | `undefined` | - |
1920
+ | `policy.maxObjects` | `number` | `undefined` | - |
1921
+ | `policy.maxObjectBytes` | `number` | `undefined` | - |
1922
+ | `policy.maxTotalBytes` | `number` | `undefined` | - |
1923
+ | `readAssets` | `boolean` | `true` | Read and check every UI object now. Serving verifies each on demand. |
1103
1924
 
1104
1925
  #### Returns
1105
1926
 
1106
1927
  `Promise`\<`Readonly`\<\{ `release`: `Release`; `build`: \| \{ `declaration?`:
1107
1928
  `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: ...; `toolFamily?`: ...;
1108
1929
  `events?`: ...; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \|
1109
- `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"`
1110
- \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \|
1930
+ `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \|
1931
+ `"agent.avatar"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \|
1932
+ `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \|
1933
+ `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \|
1934
+ `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \|
1935
+ `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \|
1936
+ `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \|
1937
+ `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \|
1938
+ `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<...\>[];
1939
+ `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`:
1940
+ readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \|
1941
+ `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[];
1942
+ `storage?`: readonly `Readonly`\<...\>[]; `commands?`: readonly
1943
+ `Readonly`\<...\>[]; `gills?`: readonly `Readonly`\<...\>[]; `backend?`:
1944
+ `Readonly`\<\{ `bindings`: ...; `sync?`: ...; \}\>; \}\>; `format`:
1945
+ `"fungi-app-v1"`; `ui`: \{ `mediaType`: `"text/html; charset=utf-8"` \|
1946
+ `"application/vnd.fungi.app-assets+json"`; `artifactRef`: `ArtifactRef`;
1947
+ `digest`: `Sha256Digest`; `version`: `string`; `byteLength`: `number`; \};
1948
+ `backend`: \{ `mediaType`: `"application/vnd.fungi.app-backend+json"`;
1949
+ `artifactRef`: `ArtifactRef`; `digest`: `Sha256Digest`; `version`: `string`;
1950
+ `byteLength`: `number`; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`:
1951
+ `Readonly`\<\{ `methods`: ...; `toolFamily?`: ...; `events?`: ...; \}\>;
1952
+ `displayName?`: `string`; `capabilities`: readonly ( \| `"approvals"` \|
1953
+ `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \|
1954
+ `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \|
1111
1955
  `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \|
1112
1956
  `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \|
1113
1957
  `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \|
@@ -1123,84 +1967,63 @@ readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \|
1123
1967
  `Readonly`\<\{ `bindings`: ...; `sync?`: ...; \}\>; \}\>; `format`:
1124
1968
  `"fungi-app-v1"`; `ui`: \{ `mediaType`: `"text/html; charset=utf-8"` \|
1125
1969
  `"application/vnd.fungi.app-assets+json"`; `artifactRef`: `ArtifactRef`;
1126
- `digest`: `Sha256Digest`; `version`: `string`; `byteLength`: `number`; \};
1127
- `backend`: \{ `mediaType`: `"application/vnd.fungi.app-backend+json"`;
1128
- `artifactRef`: `ArtifactRef`; `digest`: `Sha256Digest`; `version`: `string`;
1129
- `byteLength`: `number`; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`:
1130
- `Readonly`\<\{ `methods`: ...; `toolFamily?`: ...; `events?`: ...; \}\>;
1131
- `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \|
1132
- `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"`
1133
- \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \|
1134
- `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \|
1135
- `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"`
1136
- \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \|
1137
- `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \|
1138
- `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \|
1139
- `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly
1140
- `Readonly`\<...\>[]; `guidance?`: `string`; `handlers`: readonly
1141
- `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`;
1142
- `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \|
1143
- `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<...\>[];
1144
- `commands?`: readonly `Readonly`\<...\>[]; `gills?`: readonly
1145
- `Readonly`\<...\>[]; `backend?`: `Readonly`\<\{ `bindings`: ...; `sync?`: ...;
1146
- \}\>; \}\>; `format`: `"fungi-app-v1"`; `ui`: \{ `mediaType`:
1147
- `"text/html; charset=utf-8"` \| `"application/vnd.fungi.app-assets+json"`;
1148
- `artifactRef`: `ArtifactRef`; `digest`: `Sha256Digest`; `version`: `string`;
1149
- `byteLength`: `number`; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`:
1150
- `Readonly`\<\{ `methods`: ...; `toolFamily?`: ...; `events?`: ...; \}\>;
1151
- `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \|
1152
- `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"`
1153
- \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \|
1154
- `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \|
1155
- `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"`
1156
- \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \|
1157
- `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \|
1158
- `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \|
1159
- `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly
1160
- `Readonly`\<...\>[]; `guidance?`: `string`; `handlers`: readonly
1161
- `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`;
1162
- `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \|
1163
- `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<...\>[];
1164
- `commands?`: readonly `Readonly`\<...\>[]; `gills?`: readonly
1165
- `Readonly`\<...\>[]; `backend?`: `Readonly`\<\{ `bindings`: ...; `sync?`: ...;
1166
- \}\>; \}\>; `format`: `"fungi-app-v1"`; `backend`: \{ `mediaType`:
1970
+ `digest`: `Sha256Digest`; `version`: `string`; `byteLength`: `number`; \}; \} \|
1971
+ \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: ...;
1972
+ `toolFamily?`: ...; `events?`: ...; \}\>; `displayName?`: `string`;
1973
+ `capabilities`: readonly ( \| `"approvals"` \| `"agent.list"` \|
1974
+ `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"agent.toolPolicy"`
1975
+ \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \|
1976
+ `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \|
1977
+ `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \|
1978
+ `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \|
1979
+ `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \|
1980
+ `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \|
1981
+ `"workflow.arm"` \| `"world"` \| `"channels.read"` \|
1982
+ `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<...\>[];
1983
+ `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`:
1984
+ readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \|
1985
+ `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[];
1986
+ `storage?`: readonly `Readonly`\<...\>[]; `commands?`: readonly
1987
+ `Readonly`\<...\>[]; `gills?`: readonly `Readonly`\<...\>[]; `backend?`:
1988
+ `Readonly`\<\{ `bindings`: ...; `sync?`: ...; \}\>; \}\>; `format`:
1989
+ `"fungi-app-v1"`; `backend`: \{ `mediaType`:
1167
1990
  `"application/vnd.fungi.app-backend+json"`; `artifactRef`: `ArtifactRef`;
1168
1991
  `digest`: `Sha256Digest`; `version`: `string`; `byteLength`: `number`; \}; \};
1169
1992
  `api`: \| `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<`string`,
1170
1993
  `Readonly`\<\{ `description`: `string`; `input`: `object`; `output`: `object`;
1171
1994
  `effect`: ... \| ... \| ...; `requires`: readonly ...; `pending?`: ... \| ...;
1172
- `hidden?`: ... \| ...; `anonymous?`: ... \| ...; \}\>\>\>; `toolFamily?`:
1173
- `Readonly`\<\{ `name`: `string`; `list`: `string`; `call`: `string`; \}\>;
1174
- `events?`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `description`: ...;
1175
- `payload`: ...; \}\>\>\>; \}\> \| `null`; `declaration`: \| `Readonly`\<\{
1176
- `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<..., ...\>\>;
1177
- `toolFamily?`: `Readonly`\<...\>; `events?`: `Readonly`\<...\>; \}\>;
1178
- `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \|
1179
- `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"`
1180
- \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \|
1181
- `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \|
1182
- `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"`
1183
- \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \|
1184
- `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \|
1185
- `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \|
1186
- `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly
1187
- `Readonly`\<\{ `appId`: `string`; `methods`: readonly ...[]; \}\>[];
1188
- `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`:
1189
- readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \|
1190
- `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[];
1191
- `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[];
1192
- `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`:
1193
- `string`; `title`: `string`; `category`: `string`; `description?`: ... \| ...;
1194
- `sigil?`: ... \| ...; `projections?`: ... \| ...; \}\>[]; `gills?`: readonly
1195
- `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`:
1196
- ... \| ...; `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`:
1197
- `Readonly`\<\{ `bindings`: readonly `Readonly`\<...\>[]; `sync?`:
1198
- `Readonly`\<...\>; \}\>; \}\> \| `null`; `ui`: \| `Readonly`\<\{ `kind`:
1199
- `"html"`; `artifactRef`: `ArtifactRef`; `digest`: `Sha256Digest`; \}\> \|
1200
- `Readonly`\<\{ `kind`: `"assets"`; `build`: \{ `format`: `"fungi-assets-v1"`;
1201
- `base`: `string`; `assets`: readonly `object`[]; \}; \}\> \| `null`; `backend`:
1202
- \| `Readonly`\<\{ `artifactRef`: `ArtifactRef`; `digest`: `Sha256Digest`; \}\>
1203
- \| `null`; \}\>\>
1995
+ `hidden?`: ... \| ...; `anonymous?`: ... \| ...; `present?`: ... \| ...;
1996
+ \}\>\>\>; `toolFamily?`: `Readonly`\<\{ `name`: `string`; `list`: `string`;
1997
+ `call`: `string`; \}\>; `events?`: `Readonly`\<`Record`\<`string`,
1998
+ `Readonly`\<\{ `description`: ...; `payload`: ...; \}\>\>\>; \}\> \| `null`;
1999
+ `declaration`: \| `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`:
2000
+ `Readonly`\<`Record`\<..., ...\>\>; `toolFamily?`: `Readonly`\<...\>; `events?`:
2001
+ `Readonly`\<...\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \|
2002
+ `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \|
2003
+ `"agent.avatar"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \|
2004
+ `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \|
2005
+ `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \|
2006
+ `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \|
2007
+ `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \|
2008
+ `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \|
2009
+ `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \|
2010
+ `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`:
2011
+ `string`; `methods`: readonly ...[]; \}\>[]; `guidance?`: `string`; `handlers`:
2012
+ readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`:
2013
+ `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \|
2014
+ `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly
2015
+ `Readonly`\<\{ `key`: `string`; `scopes`: readonly ...[]; `maxBytes`: `number`;
2016
+ \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`;
2017
+ `category`: `string`; `description?`: ... \| ...; `sigil?`: ... \| ...;
2018
+ `projections?`: ... \| ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`:
2019
+ `string`; `source`: `string`; `title`: `string`; `params?`: ... \| ...;
2020
+ `watch?`: ... \| ...; `desktop?`: ... \| ...; \}\>[]; `backend?`: `Readonly`\<\{
2021
+ `bindings`: readonly `Readonly`\<...\>[]; `sync?`: `Readonly`\<...\>; \}\>; \}\>
2022
+ \| `null`; `ui`: \| `Readonly`\<\{ `kind`: `"html"`; `artifactRef`:
2023
+ `ArtifactRef`; `digest`: `Sha256Digest`; \}\> \| `Readonly`\<\{ `kind`:
2024
+ `"assets"`; `build`: \{ `format`: `"fungi-assets-v1"`; `base`: `string`;
2025
+ `assets`: readonly `object`[]; \}; \}\> \| `null`; `backend`: \| `Readonly`\<\{
2026
+ `artifactRef`: `ArtifactRef`; `digest`: `Sha256Digest`; \}\> \| `null`; \}\>\>
1204
2027
 
1205
2028
  ---
1206
2029
 
@@ -1219,9 +2042,11 @@ function resolveBackend(store, release): Promise<
1219
2042
  }>;
1220
2043
  displayName?: string;
1221
2044
  capabilities: readonly (
2045
+ | "approvals"
1222
2046
  | "agent.list"
1223
2047
  | "agent.manage"
1224
2048
  | "agent.rename"
2049
+ | "agent.avatar"
1225
2050
  | "agent.toolPolicy"
1226
2051
  | "agent.read"
1227
2052
  | "agent.send"
@@ -1301,25 +2126,26 @@ root artifact, then the backend descriptor it names.
1301
2126
  `Promise`\< \| `Readonly`\<\{ `digest`: `Sha256Digest`; `backend`:
1302
2127
  `DurableBackend`; `declaration`: \| `Readonly`\<\{ `api?`: `Readonly`\<\{
1303
2128
  `methods`: `Readonly`\<...\>; `toolFamily?`: ... \| ...; `events?`: ... \| ...;
1304
- \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \|
1305
- `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"`
1306
- \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \|
1307
- `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \|
1308
- `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"`
1309
- \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \|
1310
- `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \|
1311
- `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \|
1312
- `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly
1313
- `Readonly`\<\{ `appId`: ...; `methods`: ...; \}\>[]; `guidance?`: `string`;
1314
- `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[];
1315
- `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \|
1316
- `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly
1317
- `Readonly`\<\{ `key`: ...; `scopes`: ...; `maxBytes`: ...; \}\>[]; `commands?`:
1318
- readonly `Readonly`\<\{ `id`: ...; `title`: ...; `category`: ...;
1319
- `description?`: ...; `sigil?`: ...; `projections?`: ...; \}\>[]; `gills?`:
1320
- readonly `Readonly`\<\{ `id`: ...; `source`: ...; `title`: ...; `params?`: ...;
1321
- `watch?`: ...; `desktop?`: ...; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`:
1322
- readonly ...[]; `sync?`: ... \| ...; \}\>; \}\> \| `null`; \}\> \| `null`\>
2129
+ \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"approvals"` \|
2130
+ `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \|
2131
+ `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \|
2132
+ `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \|
2133
+ `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \|
2134
+ `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \|
2135
+ `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \|
2136
+ `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \|
2137
+ `"workflow.arm"` \| `"world"` \| `"channels.read"` \|
2138
+ `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: ...;
2139
+ `methods`: ...; \}\>[]; `guidance?`: `string`; `handlers`: readonly
2140
+ `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`;
2141
+ `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \|
2142
+ `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: ...;
2143
+ `scopes`: ...; `maxBytes`: ...; \}\>[]; `commands?`: readonly `Readonly`\<\{
2144
+ `id`: ...; `title`: ...; `category`: ...; `description?`: ...; `sigil?`: ...;
2145
+ `projections?`: ...; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: ...;
2146
+ `source`: ...; `title`: ...; `params?`: ...; `watch?`: ...; `desktop?`: ...;
2147
+ \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly ...[]; `sync?`: ... \|
2148
+ ...; \}\>; \}\> \| `null`; \}\> \| `null`\>
1323
2149
 
1324
2150
  ## References
1325
2151