@fungi.computer/oyster 0.2.0 → 0.3.1

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 (291) hide show
  1. package/README.md +396 -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 +213 -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/older-oyster-store-refusal.d.ts +4 -0
  130. package/dist/older-oyster-store-refusal.js +18 -0
  131. package/dist/older-oyster-store.d.ts +21 -0
  132. package/dist/older-oyster-store.js +43 -0
  133. package/dist/pack.d.ts +14 -3
  134. package/dist/pack.js +44 -19
  135. package/dist/page/app-access.d.ts +7 -0
  136. package/dist/page/app-access.js +75 -0
  137. package/dist/page/boot-host.js +57 -0
  138. package/dist/page/capabilities.d.ts +3 -3
  139. package/dist/page/capabilities.js +16 -12
  140. package/dist/page/computer-handles.d.ts +3 -3
  141. package/dist/page/computer-target.d.ts +3 -0
  142. package/dist/page/computer-target.js +9 -0
  143. package/dist/page/mount.d.ts +23 -3
  144. package/dist/page/mount.js +152 -16
  145. package/dist/page-assets.d.ts +22 -0
  146. package/dist/page-assets.js +28 -0
  147. package/dist/page-script.d.ts +3 -0
  148. package/dist/page-script.js +5 -4
  149. package/dist/release.d.ts +13 -6
  150. package/dist/release.js +10 -7
  151. package/dist/root-data.d.ts +16 -6
  152. package/dist/root-data.js +2 -2
  153. package/dist/source/index.d.ts +1 -1
  154. package/dist/source/team-source.d.ts +20 -8
  155. package/dist/source/team-source.js +39 -10
  156. package/dist/source/template-seed.d.ts +2 -2
  157. package/dist/standalone/agent-mail.d.ts +24 -0
  158. package/dist/standalone/agent-mail.js +62 -0
  159. package/dist/standalone/agent-store.d.ts +9 -0
  160. package/dist/standalone/agent-store.js +30 -0
  161. package/dist/standalone/agents.d.ts +68 -9
  162. package/dist/standalone/agents.js +428 -56
  163. package/dist/standalone/app-builds-binding.d.ts +20 -2
  164. package/dist/standalone/app-builds-binding.js +147 -23
  165. package/dist/standalone/app-set.d.ts +5 -2
  166. package/dist/standalone/app-set.js +186 -144
  167. package/dist/standalone/browser.d.ts +11 -0
  168. package/dist/standalone/browser.js +72 -0
  169. package/dist/standalone/builds.d.ts +13 -4
  170. package/dist/standalone/builds.js +28 -44
  171. package/dist/standalone/computer-egress.d.ts +2 -0
  172. package/dist/standalone/computer-egress.js +13 -4
  173. package/dist/standalone/computer-fleet.d.ts +43 -0
  174. package/dist/standalone/computer-fleet.js +200 -0
  175. package/dist/standalone/computer.d.ts +44 -9
  176. package/dist/standalone/computer.js +129 -22
  177. package/dist/standalone/install-apps-cli.js +43 -6
  178. package/dist/standalone/instance.d.ts +2 -2
  179. package/dist/standalone/instance.js +8 -11
  180. package/dist/standalone/machine-link.d.ts +354 -0
  181. package/dist/standalone/machine-link.js +368 -0
  182. package/dist/standalone/media.d.ts +2 -2
  183. package/dist/standalone/media.js +19 -16
  184. package/dist/standalone/preview.d.ts +2 -2
  185. package/dist/standalone/preview.js +37 -10
  186. package/dist/standalone/registry.d.ts +151 -9
  187. package/dist/standalone/registry.js +305 -8
  188. package/dist/standalone/worker.d.ts +19 -5
  189. package/dist/standalone/worker.js +90 -54
  190. package/dist/standalone/workflow-binding.d.ts +18 -22
  191. package/dist/standalone/workflow-binding.js +18 -18
  192. package/dist/standalone/workflow-control.d.ts +4 -0
  193. package/dist/standalone/workflow-control.js +40 -0
  194. package/dist/standalone/workflow-events.d.ts +2 -2
  195. package/dist/standalone/workflow-events.js +9 -10
  196. package/dist/standalone/workflow-git-capture.js +4 -3
  197. package/dist/standalone/workflow-host.d.ts +162 -161
  198. package/dist/standalone/workflow-host.js +101 -21
  199. package/dist/standalone/workflow-node-capture.js +11 -4
  200. package/dist/standalone/workflow-schedules.d.ts +5 -2
  201. package/dist/standalone/workflow-schedules.js +9 -10
  202. package/dist/standalone/workflow-trigger-host.d.ts +65 -5
  203. package/dist/standalone/workflow-trigger-host.js +2 -2
  204. package/dist/standalone/workflow-webhooks.d.ts +22 -0
  205. package/dist/standalone/workflow-webhooks.js +39 -0
  206. package/dist/standalone/workflows.d.ts +140 -43
  207. package/dist/standalone/workflows.js +198 -39
  208. package/dist/storage-frame.d.ts +6 -6
  209. package/dist/testing/capabilities.js +14 -3
  210. package/dist/testing/installation.js +26 -2
  211. package/dist/testing/worker.js +1 -1
  212. package/dist/testing/workers-runtime.d.ts +8 -2
  213. package/dist/testing/workers-runtime.js +20 -2
  214. package/dist/webhook-abuse.d.ts +25 -0
  215. package/dist/webhook-abuse.js +54 -0
  216. package/dist/webhook-custody.d.ts +144 -0
  217. package/dist/webhook-custody.js +222 -0
  218. package/dist/webhook-ingress.d.ts +36 -0
  219. package/dist/webhook-ingress.js +146 -0
  220. package/dist/webhooks.d.ts +111 -0
  221. package/dist/webhooks.js +189 -0
  222. package/dist/workers-git.d.ts +12 -17
  223. package/dist/workers-git.js +64 -52
  224. package/dist/workers.d.ts +226 -13
  225. package/dist/workers.js +363 -51
  226. package/dist/workflow-agent-authority.d.ts +8 -0
  227. package/dist/workflow-agent-authority.js +42 -0
  228. package/dist/workflows.d.ts +66 -0
  229. package/dist/workflows.js +97 -0
  230. package/docs/api/README.md +63 -37
  231. package/docs/api/agents.md +17 -0
  232. package/docs/api/app-storage.md +1 -1
  233. package/docs/api/apps.md +1394 -543
  234. package/docs/api/browser/boot.md +132 -0
  235. package/docs/api/browser.md +1440 -0
  236. package/docs/api/build-contract.md +38 -25
  237. package/docs/api/build.md +263 -84
  238. package/docs/api/cloudflare.md +93 -7
  239. package/docs/api/git.md +3 -13
  240. package/docs/api/host.md +944 -118
  241. package/docs/api/index.md +320 -18
  242. package/docs/api/keys.md +24 -1
  243. package/docs/api/mcp.md +59 -12
  244. package/docs/api/modules.md +33 -40
  245. package/docs/api/pack.md +57 -8
  246. package/docs/api/page/mount.md +92 -4
  247. package/docs/api/workers-git.md +103 -24
  248. package/docs/api/workers.md +1594 -244
  249. package/docs/site/agent-quickstart.mdx +28 -14
  250. package/examples/standalone/worker.ts +3 -1
  251. package/examples/standalone/wrangler.jsonc +2 -0
  252. package/package.json +73 -71
  253. package/dist/installation-consent.d.ts +0 -81
  254. package/dist/installation-consent.js +0 -84
  255. package/dist/shell/app-directory.d.ts +0 -542
  256. package/dist/shell/app-directory.js +0 -196
  257. package/dist/shell/browser-actions.d.ts +0 -7
  258. package/dist/shell/browser-actions.js +0 -56
  259. package/dist/shell/command-host.d.ts +0 -112
  260. package/dist/shell/command-host.js +0 -502
  261. package/dist/shell/commands.d.ts +0 -25
  262. package/dist/shell/commands.js +0 -78
  263. package/dist/shell/index.d.ts +0 -8
  264. package/dist/shell/index.js +0 -8
  265. package/dist/shell/keys.d.ts +0 -41
  266. package/dist/shell/keys.js +0 -134
  267. package/dist/shell/shell-module.d.ts +0 -55
  268. package/dist/shell/shell-module.js +0 -86
  269. package/dist/shell/window-manager.d.ts +0 -128
  270. package/dist/shell/window-manager.js +0 -730
  271. package/dist/shell/workbench-contract.d.ts +0 -68
  272. package/dist/shell/workbench-directory.d.ts +0 -332
  273. package/dist/shell/workbench-directory.js +0 -35
  274. package/dist/shell/workbench-host-types.d.ts +0 -96
  275. package/dist/shell/workbench-host-types.js +0 -1
  276. package/dist/shell/workbench-host.d.ts +0 -34
  277. package/dist/shell/workbench-host.js +0 -352
  278. package/dist/shell/workbench-model.d.ts +0 -194
  279. package/dist/shell/workbench-model.js +0 -53
  280. package/dist/shell/workbench.d.ts +0 -4
  281. package/dist/shell/workbench.js +0 -2
  282. package/docs/api/shell/app-directory.md +0 -599
  283. package/docs/api/shell/command-host.md +0 -224
  284. package/docs/api/shell/commands.md +0 -197
  285. package/docs/api/shell/keys.md +0 -183
  286. package/docs/api/shell/shell-module.md +0 -204
  287. package/docs/api/shell/window-manager.md +0 -267
  288. package/docs/api/shell/workbench-directory.md +0 -119
  289. package/docs/api/shell/workbench.md +0 -205
  290. package/docs/api/shell.md +0 -1915
  291. /package/dist/{shell/workbench-contract.js → page/boot-host.d.ts} +0 -0
package/docs/api/apps.md CHANGED
@@ -10,6 +10,36 @@
10
10
 
11
11
  ## Type Aliases
12
12
 
13
+ ### PermissionCatalogEntry
14
+
15
+ ```ts
16
+ type PermissionCatalogEntry = Readonly<{
17
+ group:
18
+ | "computers"
19
+ | "agents"
20
+ | "generation"
21
+ | "bazaar"
22
+ | "data"
23
+ | "workflows"
24
+ | "git"
25
+ | "channels"
26
+ | "apps"
27
+ | "shell"
28
+ | "other";
29
+ label: string;
30
+ caption: string;
31
+ description: string;
32
+ sigil: SigilName;
33
+ consent: "affordance" | "install" | "ask";
34
+ scope: "computer" | "agent" | null;
35
+ warning: string | null;
36
+ }>;
37
+ ```
38
+
39
+ Consent and resource semantics belong to the grant owner, not its UI.
40
+
41
+ ---
42
+
13
43
  ### HostPrincipal
14
44
 
15
45
  ```ts
@@ -42,7 +72,10 @@ One decoded method, route, binding or catalog admission request.
42
72
  ```ts
43
73
  type GateFacts = Readonly<{
44
74
  principal: HostPrincipal;
45
- installation: Installation;
75
+ installation: Readonly<
76
+ Pick<Installation, "status" | "visibility" | "instanceId" | "authority"> &
77
+ object
78
+ >;
46
79
  declaration: AppDeclaration;
47
80
  declaredOperations: DeclaredOperations;
48
81
  api: AppApi | null;
@@ -133,15 +166,10 @@ host-owned.
133
166
 
134
167
  ---
135
168
 
136
- ### GrantRequest
169
+ ### GrantChange
137
170
 
138
171
  ```ts
139
- type GrantRequest = Extract<
140
- InstallationCommand,
141
- {
142
- kind: "install";
143
- }
144
- >["grants"];
172
+ type GrantChange = z.output<typeof grantChangeSchema>;
145
173
  ```
146
174
 
147
175
  Installation records and pure admission rules; tenant state and commits stay
@@ -152,7 +180,63 @@ host-owned.
152
180
  ### Approval
153
181
 
154
182
  ```ts
155
- type Approval = NonNullable<Installation["approval"]>;
183
+ type Approval = Readonly<{
184
+ by: HostActor;
185
+ at: number;
186
+ authorityVersion: number;
187
+ }>;
188
+ ```
189
+
190
+ The owner and version that approved a fixed operation snapshot.
191
+
192
+ ---
193
+
194
+ ### AppAuthority
195
+
196
+ ```ts
197
+ type AppAuthority = z.output<typeof appAuthoritySchema>;
198
+ ```
199
+
200
+ Installation records and pure admission rules; tenant state and commits stay
201
+ host-owned.
202
+
203
+ ---
204
+
205
+ ### GrantCommand
206
+
207
+ ```ts
208
+ type GrantCommand = z.output<typeof grantCommandSchema>;
209
+ ```
210
+
211
+ Installation records and pure admission rules; tenant state and commits stay
212
+ host-owned.
213
+
214
+ ---
215
+
216
+ ### GrantContext
217
+
218
+ ```ts
219
+ type GrantContext = Readonly<{
220
+ principal: HostPrincipal;
221
+ expectedVersion: number | null;
222
+ declaration: AppDeclaration;
223
+ declaredOperations: DeclaredOperations;
224
+ now: number;
225
+ }>;
226
+ ```
227
+
228
+ Installation records and pure admission rules; tenant state and commits stay
229
+ host-owned.
230
+
231
+ ---
232
+
233
+ ### GrantRefusal
234
+
235
+ ```ts
236
+ type GrantRefusal = Readonly<{
237
+ kind: "refused";
238
+ code: "stale_authority" | "not_owner" | "not_declared" | "invalid_command";
239
+ }>;
156
240
  ```
157
241
 
158
242
  Installation records and pure admission rules; tenant state and commits stay
@@ -279,59 +363,52 @@ type InstallationReader = Readonly<{
279
363
  }>;
280
364
  };
281
365
  releasePin: "pinned" | "floating";
282
- authorityVersion: number;
366
+ authority: {
367
+ authorityVersion: number;
368
+ declaredOperationsDigest: Sha256Digest;
369
+ approvedGrants: readonly Readonly<{
370
+ capability: | ...
371
+ | ...
372
+ | ...
373
+ | ...
374
+ | ...
375
+ | ...
376
+ | ...
377
+ | ...
378
+ | ...
379
+ | ...
380
+ | ...
381
+ | ...
382
+ | ...
383
+ | ...
384
+ | ...
385
+ | ...
386
+ | ...
387
+ | ...
388
+ | ...
389
+ | ...
390
+ | ...
391
+ | ...
392
+ | ...
393
+ | ...
394
+ | ...
395
+ | ...
396
+ | ...
397
+ | ...
398
+ | ...;
399
+ capabilityApproved: true;
400
+ operations: readonly ...[];
401
+ resources: ... | ...;
402
+ }>[];
403
+ approval: | Readonly<{
404
+ by: ... | ... | ...;
405
+ at: number;
406
+ authorityVersion: number;
407
+ }>
408
+ | null;
409
+ };
283
410
  status: "enabled" | "disabled" | "deleted";
284
411
  visibility: "private" | "public";
285
- declaredOperationsDigest: Sha256Digest;
286
- approvedGrants: readonly Readonly<{
287
- capability: | "agent.list"
288
- | "agent.manage"
289
- | "agent.rename"
290
- | "agent.toolPolicy"
291
- | "agent.read"
292
- | "agent.send"
293
- | "computer.list"
294
- | "computer.readFile"
295
- | "computer.writeFile"
296
- | "computer.execute"
297
- | "llm.generation"
298
- | "media.generation"
299
- | "games:servers"
300
- | "git.repository"
301
- | "apps.open"
302
- | "apps.call"
303
- | "app.storage"
304
- | "app.events.emit"
305
- | "team.workbenchHost"
306
- | "marketplace.browse"
307
- | "marketplace.purchase"
308
- | "workflow.run"
309
- | "workflow.publish"
310
- | "workflow.arm"
311
- | "world"
312
- | "channels.read"
313
- | "channels.personal.manage";
314
- capabilityApproved: true;
315
- operations: readonly string[];
316
- resources: "tenant-scope" | readonly ...[];
317
- }>[];
318
- approval: | Readonly<{
319
- by: | {
320
- kind: ...;
321
- memberId: ...;
322
- }
323
- | {
324
- kind: ...;
325
- agentId: ...;
326
- }
327
- | {
328
- kind: ...;
329
- keyId: ...;
330
- };
331
- at: number;
332
- authorityVersion: number;
333
- }>
334
- | null;
335
412
  approvedAnonymousMethods: readonly Readonly<{
336
413
  name: string;
337
414
  digest: Sha256Digest;
@@ -373,59 +450,52 @@ type InstallationReader = Readonly<{
373
450
  }>;
374
451
  };
375
452
  releasePin: "pinned" | "floating";
376
- authorityVersion: number;
453
+ authority: {
454
+ authorityVersion: number;
455
+ declaredOperationsDigest: Sha256Digest;
456
+ approvedGrants: readonly Readonly<{
457
+ capability: | ...
458
+ | ...
459
+ | ...
460
+ | ...
461
+ | ...
462
+ | ...
463
+ | ...
464
+ | ...
465
+ | ...
466
+ | ...
467
+ | ...
468
+ | ...
469
+ | ...
470
+ | ...
471
+ | ...
472
+ | ...
473
+ | ...
474
+ | ...
475
+ | ...
476
+ | ...
477
+ | ...
478
+ | ...
479
+ | ...
480
+ | ...
481
+ | ...
482
+ | ...
483
+ | ...
484
+ | ...
485
+ | ...;
486
+ capabilityApproved: true;
487
+ operations: readonly ...[];
488
+ resources: ... | ...;
489
+ }>[];
490
+ approval: | Readonly<{
491
+ by: ... | ... | ...;
492
+ at: number;
493
+ authorityVersion: number;
494
+ }>
495
+ | null;
496
+ };
377
497
  status: "enabled" | "disabled" | "deleted";
378
498
  visibility: "private" | "public";
379
- declaredOperationsDigest: Sha256Digest;
380
- approvedGrants: readonly Readonly<{
381
- capability: | "agent.list"
382
- | "agent.manage"
383
- | "agent.rename"
384
- | "agent.toolPolicy"
385
- | "agent.read"
386
- | "agent.send"
387
- | "computer.list"
388
- | "computer.readFile"
389
- | "computer.writeFile"
390
- | "computer.execute"
391
- | "llm.generation"
392
- | "media.generation"
393
- | "games:servers"
394
- | "git.repository"
395
- | "apps.open"
396
- | "apps.call"
397
- | "app.storage"
398
- | "app.events.emit"
399
- | "team.workbenchHost"
400
- | "marketplace.browse"
401
- | "marketplace.purchase"
402
- | "workflow.run"
403
- | "workflow.publish"
404
- | "workflow.arm"
405
- | "world"
406
- | "channels.read"
407
- | "channels.personal.manage";
408
- capabilityApproved: true;
409
- operations: readonly string[];
410
- resources: "tenant-scope" | readonly ...[];
411
- }>[];
412
- approval: | Readonly<{
413
- by: | {
414
- kind: ...;
415
- memberId: ...;
416
- }
417
- | {
418
- kind: ...;
419
- agentId: ...;
420
- }
421
- | {
422
- kind: ...;
423
- keyId: ...;
424
- };
425
- at: number;
426
- authorityVersion: number;
427
- }>
428
- | null;
429
499
  approvedAnonymousMethods: readonly Readonly<{
430
500
  name: string;
431
501
  digest: Sha256Digest;
@@ -457,6 +527,163 @@ host.
457
527
 
458
528
  ---
459
529
 
530
+ ### ResourceOption
531
+
532
+ ```ts
533
+ type ResourceOption = object;
534
+ ```
535
+
536
+ A host-provided resource identity and its display label.
537
+
538
+ #### Properties
539
+
540
+ ##### kind
541
+
542
+ ```ts
543
+ kind: string;
544
+ ```
545
+
546
+ ##### id
547
+
548
+ ```ts
549
+ id: string;
550
+ ```
551
+
552
+ ##### label
553
+
554
+ ```ts
555
+ label: string;
556
+ ```
557
+
558
+ ---
559
+
560
+ ### GrantRequestDecision
561
+
562
+ ```ts
563
+ type GrantRequestDecision =
564
+ | Readonly<{
565
+ kind: "covered";
566
+ }>
567
+ | Readonly<{
568
+ kind: "customize";
569
+ }>
570
+ | Readonly<{
571
+ kind: "refused";
572
+ code: "not_declared" | "stale_authority" | "window_scope_unavailable";
573
+ }>
574
+ | Readonly<{
575
+ kind: "ask";
576
+ adds: readonly GrantChange[];
577
+ command: Extract<
578
+ GrantCommand,
579
+ {
580
+ kind: "change-grants";
581
+ }
582
+ >;
583
+ }>;
584
+ ```
585
+
586
+ How an App's runtime permission request relates to the owner's stored grants.
587
+
588
+ ---
589
+
590
+ ### PermissionDraft
591
+
592
+ ```ts
593
+ type PermissionDraft = ReadonlyMap<
594
+ AppCapabilityId,
595
+ {
596
+ operations: readonly string[];
597
+ resources:
598
+ | "tenant-scope"
599
+ | readonly Readonly<{
600
+ kind: string;
601
+ id: string;
602
+ }>[];
603
+ } | null
604
+ >;
605
+ ```
606
+
607
+ Capability approvals being edited; null removes the capability's grant.
608
+
609
+ ---
610
+
611
+ ### PermissionEdit
612
+
613
+ ```ts
614
+ type PermissionEdit =
615
+ | Readonly<{
616
+ kind: "switch" | "all";
617
+ capability: AppCapabilityId;
618
+ on: boolean;
619
+ }>
620
+ | Readonly<{
621
+ kind: "resource";
622
+ capability: AppCapabilityId;
623
+ resource: ResourceRef;
624
+ on: boolean;
625
+ }>
626
+ | Readonly<{
627
+ kind: "operation";
628
+ capability: AppCapabilityId;
629
+ operation: string;
630
+ on: boolean;
631
+ }>;
632
+ ```
633
+
634
+ One switch, scope, resource or operation change applied to a draft.
635
+
636
+ ---
637
+
638
+ ### AppPermissionsWire
639
+
640
+ ```ts
641
+ type AppPermissionsWire = z.output<typeof appPermissionsWireSchema>;
642
+ ```
643
+
644
+ Host-supplied authority and declared operations used to derive permission UI.
645
+
646
+ ---
647
+
648
+ ### PermissionScreen
649
+
650
+ ```ts
651
+ type PermissionScreen = Readonly<{
652
+ canEdit: boolean;
653
+ pending: readonly AppCapabilityId[];
654
+ groups: readonly Readonly<{
655
+ id: PermissionCatalogEntry["group"];
656
+ scope: "computer" | "agent" | null;
657
+ columns: readonly object[];
658
+ rows: readonly Readonly<{
659
+ resource: ... | ...;
660
+ label: string;
661
+ cells: readonly ...;
662
+ }>[];
663
+ switches: readonly object & Readonly<...>[];
664
+ operations: readonly Readonly<{
665
+ capability: "apps.call";
666
+ operation: string;
667
+ on: boolean;
668
+ }>[];
669
+ }>[];
670
+ }>;
671
+ ```
672
+
673
+ Catalog-derived permission groups, resource cells and operation switches.
674
+
675
+ ---
676
+
677
+ ### PermissionPins
678
+
679
+ ```ts
680
+ type PermissionPins = z.output<typeof permissionPinsSchema>;
681
+ ```
682
+
683
+ Generation, authority version and artifact digest fencing a permission edit.
684
+
685
+ ---
686
+
460
687
  ### AppToolPolicy
461
688
 
462
689
  ```ts
@@ -494,103 +721,138 @@ host.
494
721
 
495
722
  ## Variables
496
723
 
724
+ ### permissionCatalog
725
+
726
+ ```ts
727
+ const permissionCatalog: object;
728
+ ```
729
+
730
+ Every capability selects one consent class and one resource grammar.
731
+
732
+ #### Type Declaration
733
+
734
+ | Name | Type |
735
+ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
736
+ | <a id="property-approvals"></a> `approvals` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
737
+ | <a id="property-agentlist"></a> `agent.list` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
738
+ | <a id="property-agentmanage"></a> `agent.manage` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
739
+ | <a id="property-agentrename"></a> `agent.rename` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
740
+ | <a id="property-agentavatar"></a> `agent.avatar` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
741
+ | <a id="property-agenttoolpolicy"></a> `agent.toolPolicy` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
742
+ | <a id="property-agentread"></a> `agent.read` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
743
+ | <a id="property-agentsend"></a> `agent.send` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
744
+ | <a id="property-computerlist"></a> `computer.list` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
745
+ | <a id="property-computerreadfile"></a> `computer.readFile` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
746
+ | <a id="property-computerwritefile"></a> `computer.writeFile` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
747
+ | <a id="property-computerexecute"></a> `computer.execute` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
748
+ | <a id="property-llmgeneration"></a> `llm.generation` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
749
+ | <a id="property-mediageneration"></a> `media.generation` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
750
+ | <a id="property-gamesservers"></a> `games:servers` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
751
+ | <a id="property-gitrepository"></a> `git.repository` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
752
+ | <a id="property-appsopen"></a> `apps.open` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
753
+ | <a id="property-appscall"></a> `apps.call` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
754
+ | <a id="property-appstorage"></a> `app.storage` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
755
+ | <a id="property-appeventsemit"></a> `app.events.emit` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
756
+ | <a id="property-teamworkbenchhost"></a> `team.workbenchHost` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
757
+ | <a id="property-marketplacebrowse"></a> `marketplace.browse` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
758
+ | <a id="property-marketplacepurchase"></a> `marketplace.purchase` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
759
+ | <a id="property-workflowrun"></a> `workflow.run` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
760
+ | <a id="property-workflowpublish"></a> `workflow.publish` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
761
+ | <a id="property-workflowarm"></a> `workflow.arm` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
762
+ | <a id="property-world"></a> `world` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
763
+ | <a id="property-channelsread"></a> `channels.read` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
764
+ | <a id="property-channelspersonalmanage"></a> `channels.personal.manage` | `Readonly`\<\{ `group`: \| `"agents"` \| `"generation"` \| `"other"` \| `"apps"` \| `"workflows"` \| `"git"` \| `"computers"` \| `"bazaar"` \| `"data"` \| `"channels"` \| `"shell"`; `label`: `string`; `caption`: `string`; `description`: `string`; `sigil`: \| `"error"` \| `"read"` \| `"write"` \| `"run"` \| `"agent"` \| `"computer"` \| `"list"` \| `"schedule"` \| `"search"` \| `"complete"` \| `"oyster"` \| `"bonsai"` \| `"prints"` \| `"inkcap"` \| `"vishnu"` \| `"generateText"` \| `"generateMedia"` \| `"buyApps"` \| `"browseBazaar"` \| `"chat"` \| `"readConversations"` \| `"listAgents"` \| `"createAgents"` \| `"sendPrompts"` \| `"connected"` \| `"working"` \| `"installApps"` \| `"restricted"` \| `"trellis"` \| `"games"` \| `"tourtois"` \| `"allApps"` \| `"browser"` \| `"internet"` \| `"members"` \| `"sell"` \| `"fungi"`; `consent`: `"affordance"` \| `"install"` \| `"ask"`; `scope`: `"agent"` \| `"computer"` \| `null`; `warning`: `string` \| `null`; \}\> |
765
+
766
+ ---
767
+
497
768
  ### gateRequestSchema
498
769
 
499
770
  ```ts
500
- const gateRequestSchema: ZodDiscriminatedUnion<
501
- [
502
- ZodObject<
503
- {
504
- kind: ZodLiteral<"method">;
505
- name: ZodString;
506
- input: ZodUnknown;
507
- via: ZodEnum<{
508
- ui: "ui";
509
- agent: "agent";
510
- mcp: "mcp";
511
- workflow: "workflow";
512
- }>;
513
- },
514
- $strict
515
- >,
516
- ZodObject<
517
- {
518
- kind: ZodLiteral<"capability-route">;
519
- capability: ZodPipe<
520
- ZodUnknown,
521
- ZodTransform<
522
- | "agent.list"
523
- | "agent.manage"
524
- | "agent.rename"
525
- | "agent.toolPolicy"
526
- | "agent.read"
527
- | "agent.send"
528
- | "computer.list"
529
- | "computer.readFile"
530
- | "computer.writeFile"
531
- | "computer.execute"
532
- | "llm.generation"
533
- | "media.generation"
534
- | "games:servers"
535
- | "git.repository"
536
- | "apps.open"
537
- | "apps.call"
538
- | "app.storage"
539
- | "app.events.emit"
540
- | "team.workbenchHost"
541
- | "marketplace.browse"
542
- | "marketplace.purchase"
543
- | "workflow.run"
544
- | "workflow.publish"
545
- | "workflow.arm"
546
- | "world"
547
- | "channels.read"
548
- | "channels.personal.manage",
549
- unknown
550
- >
551
- >;
552
- operation: ZodString;
553
- },
554
- $strict
555
- >,
556
- ZodObject<
557
- {
558
- kind: ZodLiteral<"binding">;
559
- binding: ZodPipe<
560
- ZodUnknown,
561
- ZodTransform<
562
- | "BACKGROUND"
563
- | "GIT"
564
- | "EVENTS"
565
- | "APPS"
566
- | "WORKFLOWS"
567
- | "APP_STORAGE"
568
- | "MEDIA"
569
- | "COMPUTER"
570
- | "INBOX"
571
- | "AGENTS",
572
- unknown
573
- >
574
- >;
575
- operation: ZodString;
576
- },
577
- $strict
578
- >,
579
- ZodObject<
580
- {
581
- kind: ZodLiteral<"list-tools">;
582
- },
583
- $strict
584
- >,
585
- ZodObject<
586
- {
587
- kind: ZodLiteral<"backend">;
588
- },
589
- $strict
590
- >,
591
- ],
592
- "kind"
593
- >;
771
+ const gateRequestSchema: ZodLazy<ZodDiscriminatedUnion<[ZodObject<{
772
+ kind: ZodLiteral<"method">;
773
+ name: ZodString;
774
+ input: ZodUnknown;
775
+ via: ZodEnum<{
776
+ agent: "agent";
777
+ mcp: "mcp";
778
+ ui: "ui";
779
+ workflow: "workflow";
780
+ }>;
781
+ resource: ZodOptional<ZodLazy<ZodReadonly<ZodObject<{
782
+ kind: ZodString;
783
+ id: ZodString;
784
+ }, $strict>>>>;
785
+ }, $strict>, ZodObject<{
786
+ kind: ZodLiteral<"capability">;
787
+ capability: ZodPipe<ZodUnknown, ZodTransform<
788
+ | "approvals"
789
+ | "agent.list"
790
+ | "agent.manage"
791
+ | "agent.rename"
792
+ | "agent.avatar"
793
+ | "agent.toolPolicy"
794
+ | "agent.read"
795
+ | "agent.send"
796
+ | "computer.list"
797
+ | "computer.readFile"
798
+ | "computer.writeFile"
799
+ | "computer.execute"
800
+ | "llm.generation"
801
+ | "media.generation"
802
+ | "games:servers"
803
+ | "git.repository"
804
+ | "apps.open"
805
+ | "apps.call"
806
+ | "app.storage"
807
+ | "app.events.emit"
808
+ | "team.workbenchHost"
809
+ | "marketplace.browse"
810
+ | "marketplace.purchase"
811
+ | "workflow.run"
812
+ | "workflow.publish"
813
+ | "workflow.arm"
814
+ | "world"
815
+ | "channels.read"
816
+ | "channels.personal.manage", unknown>>;
817
+ operation: ZodOptional<ZodString>;
818
+ resource: ZodUnion<readonly [ZodLazy<ZodReadonly<ZodObject<{
819
+ kind: ...;
820
+ id: ...;
821
+ }, $strict>>>, ZodLiteral<"any">]>;
822
+ }, $strict>, ZodObject<{
823
+ kind: ZodLiteral<"capability-route">;
824
+ capability: ZodPipe<ZodUnknown, ZodTransform<
825
+ | "approvals"
826
+ | "agent.list"
827
+ | "agent.manage"
828
+ | "agent.rename"
829
+ | "agent.avatar"
830
+ | "agent.toolPolicy"
831
+ | "agent.read"
832
+ | "agent.send"
833
+ | "computer.list"
834
+ | "computer.readFile"
835
+ | "computer.writeFile"
836
+ | "computer.execute"
837
+ | "llm.generation"
838
+ | "media.generation"
839
+ | "games:servers"
840
+ | "git.repository"
841
+ | "apps.open"
842
+ | "apps.call"
843
+ | "app.storage"
844
+ | "app.events.emit"
845
+ | "team.workbenchHost"
846
+ | "marketplace.browse"
847
+ | "marketplace.purchase"
848
+ | "workflow.run"
849
+ | "workflow.publish"
850
+ | "workflow.arm"
851
+ | "world"
852
+ | "channels.read"
853
+ | "channels.personal.manage", unknown>>;
854
+ operation: ZodString;
855
+ }, $strict>], "kind">>;
594
856
  ```
595
857
 
596
858
  Requests select existing SDK methods, opaque backend calls and derived operation
@@ -601,29 +863,31 @@ identities.
601
863
  ### invocationGrantsSchema
602
864
 
603
865
  ```ts
604
- const invocationGrantsSchema: ZodReadonly<
605
- ZodArray<
606
- ZodObject<
607
- {
608
- binding: ZodPipe<
609
- ZodUnknown,
610
- ZodTransform<
611
- | "BACKGROUND"
612
- | "GIT"
613
- | "EVENTS"
614
- | "APPS"
615
- | "WORKFLOWS"
616
- | "APP_STORAGE"
617
- | "MEDIA"
618
- | "COMPUTER"
619
- | "INBOX"
620
- | "AGENTS",
621
- unknown
622
- >
623
- >;
624
- operations: ZodReadonly<ZodArray<ZodString>>;
625
- },
626
- $strict
866
+ const invocationGrantsSchema: ZodLazy<
867
+ ZodReadonly<
868
+ ZodArray<
869
+ ZodObject<
870
+ {
871
+ binding: ZodPipe<
872
+ ZodUnknown,
873
+ ZodTransform<
874
+ | "BACKGROUND"
875
+ | "GIT"
876
+ | "EVENTS"
877
+ | "APPS"
878
+ | "WORKFLOWS"
879
+ | "APP_STORAGE"
880
+ | "MEDIA"
881
+ | "COMPUTER"
882
+ | "INBOX"
883
+ | "AGENTS",
884
+ unknown
885
+ >
886
+ >;
887
+ operations: ZodReadonly<ZodArray<ZodString>>;
888
+ },
889
+ $strict
890
+ >
627
891
  >
628
892
  >
629
893
  >;
@@ -637,22 +901,24 @@ registry grammar.
637
901
  ### gateRefusalSchema
638
902
 
639
903
  ```ts
640
- const gateRefusalSchema: ZodObject<
641
- {
642
- kind: ZodLiteral<"refused">;
643
- code: ZodEnum<{
644
- unavailable: "unavailable";
645
- stale_authority: "stale_authority";
646
- not_declared: "not_declared";
647
- not_approved: "not_approved";
648
- level_too_low: "level_too_low";
649
- approval_required: "approval_required";
650
- requires_not_granted: "requires_not_granted";
651
- invalid_input: "invalid_input";
652
- visitor_read_only: "visitor_read_only";
653
- }>;
654
- },
655
- $strict
904
+ const gateRefusalSchema: ZodLazy<
905
+ ZodObject<
906
+ {
907
+ kind: ZodLiteral<"refused">;
908
+ code: ZodEnum<{
909
+ unavailable: "unavailable";
910
+ stale_authority: "stale_authority";
911
+ not_declared: "not_declared";
912
+ not_approved: "not_approved";
913
+ level_too_low: "level_too_low";
914
+ approval_required: "approval_required";
915
+ requires_not_granted: "requires_not_granted";
916
+ invalid_input: "invalid_input";
917
+ visitor_read_only: "visitor_read_only";
918
+ }>;
919
+ },
920
+ $strict
921
+ >
656
922
  >;
657
923
  ```
658
924
 
@@ -663,7 +929,7 @@ Ordered, closed refusal vocabulary; external methods always require approval.
663
929
  ### installationIdSchema
664
930
 
665
931
  ```ts
666
- const installationIdSchema: ZodString;
932
+ const installationIdSchema: ZodLazy<ZodString>;
667
933
  ```
668
934
 
669
935
  Installation names cannot contain the tenant separator.
@@ -673,66 +939,44 @@ Installation names cannot contain the tenant separator.
673
939
  ### approvedGrantSchema
674
940
 
675
941
  ```ts
676
- const approvedGrantSchema: ZodReadonly<
677
- ZodObject<
678
- {
679
- capability: ZodPipe<
680
- ZodUnknown,
681
- ZodTransform<
682
- | "agent.list"
683
- | "agent.manage"
684
- | "agent.rename"
685
- | "agent.toolPolicy"
686
- | "agent.read"
687
- | "agent.send"
688
- | "computer.list"
689
- | "computer.readFile"
690
- | "computer.writeFile"
691
- | "computer.execute"
692
- | "llm.generation"
693
- | "media.generation"
694
- | "games:servers"
695
- | "git.repository"
696
- | "apps.open"
697
- | "apps.call"
698
- | "app.storage"
699
- | "app.events.emit"
700
- | "team.workbenchHost"
701
- | "marketplace.browse"
702
- | "marketplace.purchase"
703
- | "workflow.run"
704
- | "workflow.publish"
705
- | "workflow.arm"
706
- | "world"
707
- | "channels.read"
708
- | "channels.personal.manage",
709
- unknown
710
- >
711
- >;
712
- capabilityApproved: ZodLiteral<true>;
713
- operations: ZodReadonly<ZodArray<ZodString>>;
714
- resources: ZodUnion<
715
- readonly [
716
- ZodLiteral<"tenant-scope">,
717
- ZodReadonly<
718
- ZodArray<
719
- ZodReadonly<
720
- ZodObject<
721
- {
722
- kind: ZodString;
723
- id: ZodString;
724
- },
725
- $strict
726
- >
727
- >
728
- >
729
- >,
730
- ]
731
- >;
732
- },
733
- $strict
734
- >
735
- >;
942
+ const approvedGrantSchema: ZodReadonly<ZodObject<{
943
+ capability: ZodPipe<ZodUnknown, ZodTransform<
944
+ | "approvals"
945
+ | "agent.list"
946
+ | "agent.manage"
947
+ | "agent.rename"
948
+ | "agent.avatar"
949
+ | "agent.toolPolicy"
950
+ | "agent.read"
951
+ | "agent.send"
952
+ | "computer.list"
953
+ | "computer.readFile"
954
+ | "computer.writeFile"
955
+ | "computer.execute"
956
+ | "llm.generation"
957
+ | "media.generation"
958
+ | "games:servers"
959
+ | "git.repository"
960
+ | "apps.open"
961
+ | "apps.call"
962
+ | "app.storage"
963
+ | "app.events.emit"
964
+ | "team.workbenchHost"
965
+ | "marketplace.browse"
966
+ | "marketplace.purchase"
967
+ | "workflow.run"
968
+ | "workflow.publish"
969
+ | "workflow.arm"
970
+ | "world"
971
+ | "channels.read"
972
+ | "channels.personal.manage", unknown>>;
973
+ capabilityApproved: ZodLiteral<true>;
974
+ operations: ZodLazy<ZodReadonly<ZodArray<ZodString>>>;
975
+ resources: ZodUnion<readonly [ZodLiteral<"tenant-scope">, ZodReadonly<ZodArray<ZodLazy<ZodReadonly<ZodObject<{
976
+ kind: ...;
977
+ id: ...;
978
+ }, $strict>>>>>]>;
979
+ }, $strict>>;
736
980
  ```
737
981
 
738
982
  Consent approves capabilities, with explicit operation and resource ceilings. A
@@ -740,224 +984,202 @@ Release adding a method that requires an already-approved capability needs no
740
984
  new consent; a new capability does. Release selection intersects stored
741
985
  operations instead of adding approvals. Each Worker call is still restricted to
742
986
  that method's declared requires, never the App's complete capability set. Only
743
- an approved install or set-grants command mints capabilityApproved. Empty
987
+ an approved install or change-grants command mints capabilityApproved. Empty
744
988
  operation rows retain that consent; removing the capability revokes it.
745
989
  route:app.methods rows record approval detail, not a method allowlist: narrowing
746
- them in set-grants does not restrict methods using an approved capability. Exact
747
- operation rows are enforced for capability routes and backend bindings.
990
+ them in change-grants does not restrict methods using an approved capability.
991
+ Exact operation rows are enforced for capability routes and backend bindings.
748
992
 
749
993
  ---
750
994
 
751
- ### declaredOperationsSchema
995
+ ### grantChangeSchema
752
996
 
753
997
  ```ts
754
- const declaredOperationsSchema: ZodObject<
755
- {
756
- artifactDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
757
- digest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
758
- anonymousMethods: ZodReadonly<
759
- ZodArray<
760
- ZodReadonly<
761
- ZodObject<
762
- {
763
- name: ZodPipe<ZodUnknown, ZodTransform<string, unknown>>;
764
- digest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
765
- },
766
- $strict
767
- >
768
- >
769
- >
770
- >;
771
- capabilities: ZodReadonly<
772
- ZodArray<
773
- ZodReadonly<
774
- ZodObject<
775
- {
776
- capability: ZodPipe<
777
- ZodUnknown,
778
- ZodTransform<
779
- | "agent.list"
780
- | "agent.manage"
781
- | "agent.rename"
782
- | "agent.toolPolicy"
783
- | "agent.read"
784
- | "agent.send"
785
- | "computer.list"
786
- | "computer.readFile"
787
- | "computer.writeFile"
788
- | "computer.execute"
789
- | "llm.generation"
790
- | "media.generation"
791
- | "games:servers"
792
- | "git.repository"
793
- | "apps.open"
794
- | "apps.call"
795
- | "app.storage"
796
- | "app.events.emit"
797
- | "team.workbenchHost"
798
- | "marketplace.browse"
799
- | "marketplace.purchase"
800
- | "workflow.run"
801
- | "workflow.publish"
802
- | "workflow.arm"
803
- | "world"
804
- | "channels.read"
805
- | "channels.personal.manage",
806
- unknown
807
- >
808
- >;
809
- operations: ZodReadonly<ZodArray<ZodString>>;
810
- },
811
- $strict
812
- >
813
- >
814
- >
815
- >;
816
- },
817
- $strict
818
- >;
998
+ const grantChangeSchema: ZodReadonly<ZodObject<{
999
+ capability: ZodPipe<ZodUnknown, ZodTransform<
1000
+ | "approvals"
1001
+ | "agent.list"
1002
+ | "agent.manage"
1003
+ | "agent.rename"
1004
+ | "agent.avatar"
1005
+ | "agent.toolPolicy"
1006
+ | "agent.read"
1007
+ | "agent.send"
1008
+ | "computer.list"
1009
+ | "computer.readFile"
1010
+ | "computer.writeFile"
1011
+ | "computer.execute"
1012
+ | "llm.generation"
1013
+ | "media.generation"
1014
+ | "games:servers"
1015
+ | "git.repository"
1016
+ | "apps.open"
1017
+ | "apps.call"
1018
+ | "app.storage"
1019
+ | "app.events.emit"
1020
+ | "team.workbenchHost"
1021
+ | "marketplace.browse"
1022
+ | "marketplace.purchase"
1023
+ | "workflow.run"
1024
+ | "workflow.publish"
1025
+ | "workflow.arm"
1026
+ | "world"
1027
+ | "channels.read"
1028
+ | "channels.personal.manage", unknown>>;
1029
+ grant: ZodNullable<ZodReadonly<ZodObject<{
1030
+ operations: ZodLazy<ZodReadonly<ZodArray<ZodString>>>;
1031
+ resources: ZodUnion<readonly [ZodLiteral<"tenant-scope">, ZodReadonly<ZodArray<...>>]>;
1032
+ }, $strict>>>;
1033
+ }, $strict>>;
819
1034
  ```
820
1035
 
821
- Immutable operation facts derived from descriptor methods and the binding
822
- registry.
1036
+ A bounded owner edit. Unnamed approvals are not part of the command.
823
1037
 
824
1038
  ---
825
1039
 
826
- ### installationSchema
1040
+ ### appAuthoritySchema
827
1041
 
828
1042
  ```ts
829
- const installationSchema: ZodObject<{
830
- installationId: ZodString;
831
- instanceId: ZodNullable<ZodPipe<ZodUnknown, ZodTransform<InstanceId, unknown>>>;
832
- appId: ZodPipe<ZodUnknown, ZodTransform<AppId, unknown>>;
833
- release: ZodPipe<ZodUnknown, ZodTransform<{
834
- releaseId: ReleaseId;
835
- appId: AppId;
836
- artifact: {
837
- artifactRef: ArtifactRef;
838
- artifactDigest: Sha256Digest;
839
- provenance: {
840
- sourceRevision: SourceRevision;
841
- sourceTreeDigest: Sha256Digest;
842
- buildRecipeDigest: Sha256Digest;
843
- };
844
- };
845
- }, unknown>>;
846
- releasePin: ZodEnum<{
847
- pinned: "pinned";
848
- floating: "floating";
849
- }>;
850
- authorityVersion: ZodNumber;
851
- status: ZodEnum<{
852
- enabled: "enabled";
853
- disabled: "disabled";
854
- deleted: "deleted";
855
- }>;
856
- visibility: ZodEnum<{
857
- private: "private";
858
- public: "public";
859
- }>;
1043
+ const appAuthoritySchema: ZodObject<{
1044
+ authorityVersion: ZodLazy<ZodNumber>;
860
1045
  declaredOperationsDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
861
- approvedGrants: ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
1046
+ approvedGrants: ZodLazy<ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
862
1047
  capability: ZodPipe<ZodUnknown, ZodTransform<
863
- | "agent.list"
864
- | "agent.manage"
865
- | "agent.rename"
866
- | "agent.toolPolicy"
867
- | "agent.read"
868
- | "agent.send"
869
- | "computer.list"
870
- | "computer.readFile"
871
- | "computer.writeFile"
872
- | "computer.execute"
873
- | "llm.generation"
874
- | "media.generation"
875
- | "games:servers"
876
- | "git.repository"
877
- | "apps.open"
878
- | "apps.call"
879
- | "app.storage"
880
- | "app.events.emit"
881
- | "team.workbenchHost"
882
- | "marketplace.browse"
883
- | "marketplace.purchase"
884
- | "workflow.run"
885
- | "workflow.publish"
886
- | "workflow.arm"
887
- | "world"
888
- | "channels.read"
889
- | "channels.personal.manage", unknown>>;
1048
+ | ...
1049
+ | ...
1050
+ | ...
1051
+ | ...
1052
+ | ...
1053
+ | ...
1054
+ | ...
1055
+ | ...
1056
+ | ...
1057
+ | ...
1058
+ | ...
1059
+ | ...
1060
+ | ...
1061
+ | ...
1062
+ | ...
1063
+ | ...
1064
+ | ...
1065
+ | ...
1066
+ | ...
1067
+ | ...
1068
+ | ...
1069
+ | ...
1070
+ | ...
1071
+ | ...
1072
+ | ...
1073
+ | ...
1074
+ | ...
1075
+ | ...
1076
+ | ..., unknown>>;
890
1077
  capabilityApproved: ZodLiteral<true>;
891
- operations: ZodReadonly<ZodArray<ZodString>>;
892
- resources: ZodUnion<readonly [ZodLiteral<"tenant-scope">, ZodReadonly<ZodArray<...>>]>;
893
- }, $strict>>>>;
894
- approval: ZodNullable<ZodReadonly<ZodObject<{
1078
+ operations: ZodLazy<ZodReadonly<ZodArray<...>>>;
1079
+ resources: ZodUnion<readonly [ZodLiteral<...>, ZodReadonly<...>]>;
1080
+ }, $strict>>>>>;
1081
+ approval: ZodNullable<ZodLazy<ZodReadonly<ZodObject<{
895
1082
  by: ZodMiniDiscriminatedUnion<[ZodMiniObject<{
896
- kind: ZodMiniLiteral<...>;
897
- memberId: ZodMiniString<...>;
1083
+ kind: ...;
1084
+ memberId: ...;
898
1085
  }, $strip>, ZodMiniObject<{
899
- kind: ZodMiniLiteral<...>;
900
- agentId: ZodMiniString<...>;
1086
+ kind: ...;
1087
+ agentId: ...;
901
1088
  }, $strip>, ZodMiniObject<{
902
- kind: ZodMiniLiteral<...>;
903
- keyId: ZodMiniString<...>;
1089
+ kind: ...;
1090
+ keyId: ...;
904
1091
  }, $strip>], "kind">;
905
1092
  at: ZodNumber;
906
- authorityVersion: ZodNumber;
907
- }, $strict>>>;
908
- approvedAnonymousMethods: ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
909
- name: ZodPipe<ZodUnknown, ZodTransform<string, unknown>>;
910
- digest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1093
+ authorityVersion: ZodLazy<ZodNumber>;
911
1094
  }, $strict>>>>;
912
- anonymousApproval: ZodNullable<ZodReadonly<ZodObject<{
913
- by: ZodMiniDiscriminatedUnion<[ZodMiniObject<{
914
- kind: ZodMiniLiteral<...>;
915
- memberId: ZodMiniString<...>;
916
- }, $strip>, ZodMiniObject<{
917
- kind: ZodMiniLiteral<...>;
918
- agentId: ZodMiniString<...>;
919
- }, $strip>, ZodMiniObject<{
920
- kind: ZodMiniLiteral<...>;
921
- keyId: ZodMiniString<...>;
922
- }, $strip>], "kind">;
923
- at: ZodNumber;
924
- authorityVersion: ZodNumber;
925
- }, $strict>>>;
926
1095
  }, $strict>;
927
1096
  ```
928
1097
 
929
- Resolved immutable Release plus host-owned installation and approval state.
1098
+ The complete grant state. Hosts own storage and compare-and-set commits.
930
1099
 
931
1100
  ---
932
1101
 
933
- ### installationCommandSchema
1102
+ ### grantCommandSchema
934
1103
 
935
1104
  ```ts
936
- const installationCommandSchema: ZodDiscriminatedUnion<[ZodObject<{
937
- release: ZodPipe<ZodUnknown, ZodTransform<{
938
- releaseId: ReleaseId;
939
- appId: AppId;
940
- artifact: {
941
- artifactRef: ArtifactRef;
942
- artifactDigest: Sha256Digest;
943
- provenance: {
944
- sourceRevision: SourceRevision;
945
- sourceTreeDigest: Sha256Digest;
946
- buildRecipeDigest: Sha256Digest;
947
- };
948
- };
949
- }, unknown>>;
950
- releasePin: ZodEnum<{
951
- pinned: "pinned";
952
- floating: "floating";
953
- }>;
1105
+ const grantCommandSchema: ZodDiscriminatedUnion<[ZodObject<{
954
1106
  kind: ZodLiteral<"install">;
955
- grants: ZodUnion<readonly [ZodLiteral<"none">, ZodLiteral<"declared">, ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
956
- capability: ...;
957
- operations: ...;
958
- resources: ...;
959
- }, $strict>>>>]>;
960
1107
  }, $strict>, ZodObject<{
1108
+ kind: ZodLiteral<"change-grants">;
1109
+ changes: ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
1110
+ capability: ZodPipe<ZodUnknown, ZodTransform<..., ...>>;
1111
+ grant: ZodNullable<ZodReadonly<...>>;
1112
+ }, $strict>>>>;
1113
+ }, $strict>, ZodObject<{
1114
+ kind: ZodLiteral<"select-release">;
1115
+ }, $strict>, ZodObject<{
1116
+ kind: ZodLiteral<"delete">;
1117
+ }, $strict>], "kind">;
1118
+ ```
1119
+
1120
+ Installation records and pure admission rules; tenant state and commits stay
1121
+ host-owned.
1122
+
1123
+ ---
1124
+
1125
+ ### declaredOperationsSchema
1126
+
1127
+ ```ts
1128
+ const declaredOperationsSchema: ZodLazy<ZodObject<{
1129
+ artifactDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1130
+ digest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1131
+ anonymousMethods: ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
1132
+ name: ZodPipe<ZodUnknown, ZodTransform<string, unknown>>;
1133
+ digest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1134
+ }, $strict>>>>;
1135
+ capabilities: ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
1136
+ capability: ZodPipe<ZodUnknown, ZodTransform<
1137
+ | ...
1138
+ | ...
1139
+ | ...
1140
+ | ...
1141
+ | ...
1142
+ | ...
1143
+ | ...
1144
+ | ...
1145
+ | ...
1146
+ | ...
1147
+ | ...
1148
+ | ...
1149
+ | ...
1150
+ | ...
1151
+ | ...
1152
+ | ...
1153
+ | ...
1154
+ | ...
1155
+ | ...
1156
+ | ...
1157
+ | ...
1158
+ | ...
1159
+ | ...
1160
+ | ...
1161
+ | ...
1162
+ | ...
1163
+ | ...
1164
+ | ...
1165
+ | ..., unknown>>;
1166
+ operations: ZodLazy<ZodReadonly<ZodArray<...>>>;
1167
+ }, $strict>>>>;
1168
+ }, $strict>>;
1169
+ ```
1170
+
1171
+ Immutable operation facts derived from descriptor methods and the binding
1172
+ registry.
1173
+
1174
+ ---
1175
+
1176
+ ### installationSchema
1177
+
1178
+ ```ts
1179
+ const installationSchema: ZodObject<{
1180
+ installationId: ZodLazy<ZodString>;
1181
+ instanceId: ZodNullable<ZodPipe<ZodUnknown, ZodTransform<InstanceId, unknown>>>;
1182
+ appId: ZodPipe<ZodUnknown, ZodTransform<AppId, unknown>>;
961
1183
  release: ZodPipe<ZodUnknown, ZodTransform<{
962
1184
  releaseId: ReleaseId;
963
1185
  appId: AppId;
@@ -975,15 +1197,134 @@ const installationCommandSchema: ZodDiscriminatedUnion<[ZodObject<{
975
1197
  pinned: "pinned";
976
1198
  floating: "floating";
977
1199
  }>;
978
- kind: ZodLiteral<"select-release">;
979
- }, $strict>, ZodObject<{
980
- kind: ZodLiteral<"set-status">;
1200
+ authority: ZodObject<{
1201
+ authorityVersion: ZodLazy<ZodNumber>;
1202
+ declaredOperationsDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1203
+ approvedGrants: ZodLazy<ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
1204
+ capability: ZodPipe<..., ...>;
1205
+ capabilityApproved: ZodLiteral<...>;
1206
+ operations: ZodLazy<...>;
1207
+ resources: ZodUnion<...>;
1208
+ }, $strict>>>>>;
1209
+ approval: ZodNullable<ZodLazy<ZodReadonly<ZodObject<{
1210
+ by: ZodMiniDiscriminatedUnion<[..., ..., ...], "kind">;
1211
+ at: ZodNumber;
1212
+ authorityVersion: ZodLazy<ZodNumber>;
1213
+ }, $strict>>>>;
1214
+ }, $strict>;
981
1215
  status: ZodEnum<{
982
1216
  enabled: "enabled";
983
1217
  disabled: "disabled";
984
1218
  deleted: "deleted";
985
1219
  }>;
986
- }, $strict>], "kind">;
1220
+ visibility: ZodEnum<{
1221
+ private: "private";
1222
+ public: "public";
1223
+ }>;
1224
+ approvedAnonymousMethods: ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
1225
+ name: ZodPipe<ZodUnknown, ZodTransform<string, unknown>>;
1226
+ digest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1227
+ }, $strict>>>>;
1228
+ anonymousApproval: ZodNullable<ZodLazy<ZodReadonly<ZodObject<{
1229
+ by: ZodMiniDiscriminatedUnion<[ZodMiniObject<{
1230
+ kind: ...;
1231
+ memberId: ...;
1232
+ }, $strip>, ZodMiniObject<{
1233
+ kind: ...;
1234
+ agentId: ...;
1235
+ }, $strip>, ZodMiniObject<{
1236
+ kind: ...;
1237
+ keyId: ...;
1238
+ }, $strip>], "kind">;
1239
+ at: ZodNumber;
1240
+ authorityVersion: ZodLazy<ZodNumber>;
1241
+ }, $strict>>>>;
1242
+ }, $strict>;
1243
+ ```
1244
+
1245
+ Resolved immutable Release plus host-owned installation and approval state.
1246
+
1247
+ ---
1248
+
1249
+ ### installationCommandSchema
1250
+
1251
+ ```ts
1252
+ const installationCommandSchema: ZodLazy<
1253
+ ZodDiscriminatedUnion<
1254
+ [
1255
+ ZodObject<
1256
+ {
1257
+ release: ZodPipe<
1258
+ ZodUnknown,
1259
+ ZodTransform<
1260
+ {
1261
+ releaseId: ReleaseId;
1262
+ appId: AppId;
1263
+ artifact: {
1264
+ artifactRef: ArtifactRef;
1265
+ artifactDigest: Sha256Digest;
1266
+ provenance: {
1267
+ sourceRevision: SourceRevision;
1268
+ sourceTreeDigest: Sha256Digest;
1269
+ buildRecipeDigest: Sha256Digest;
1270
+ };
1271
+ };
1272
+ },
1273
+ unknown
1274
+ >
1275
+ >;
1276
+ releasePin: ZodEnum<{
1277
+ pinned: "pinned";
1278
+ floating: "floating";
1279
+ }>;
1280
+ kind: ZodLiteral<"install">;
1281
+ },
1282
+ $strict
1283
+ >,
1284
+ ZodObject<
1285
+ {
1286
+ release: ZodPipe<
1287
+ ZodUnknown,
1288
+ ZodTransform<
1289
+ {
1290
+ releaseId: ReleaseId;
1291
+ appId: AppId;
1292
+ artifact: {
1293
+ artifactRef: ArtifactRef;
1294
+ artifactDigest: Sha256Digest;
1295
+ provenance: {
1296
+ sourceRevision: SourceRevision;
1297
+ sourceTreeDigest: Sha256Digest;
1298
+ buildRecipeDigest: Sha256Digest;
1299
+ };
1300
+ };
1301
+ },
1302
+ unknown
1303
+ >
1304
+ >;
1305
+ releasePin: ZodEnum<{
1306
+ pinned: "pinned";
1307
+ floating: "floating";
1308
+ }>;
1309
+ kind: ZodLiteral<"select-release">;
1310
+ },
1311
+ $strict
1312
+ >,
1313
+ ZodObject<
1314
+ {
1315
+ kind: ZodLiteral<"set-status">;
1316
+ status: ZodEnum<{
1317
+ enabled: "enabled";
1318
+ disabled: "disabled";
1319
+ deleted: "deleted";
1320
+ }>;
1321
+ },
1322
+ $strict
1323
+ >,
1324
+ ],
1325
+ "kind"
1326
+ >
1327
+ >;
987
1328
  ```
988
1329
 
989
1330
  Host commands; floating targets have already been resolved to immutable
@@ -994,23 +1335,141 @@ Releases.
994
1335
  ### installationRefusalSchema
995
1336
 
996
1337
  ```ts
997
- const installationRefusalSchema: ZodObject<
1338
+ const installationRefusalSchema: ZodLazy<
1339
+ ZodObject<
1340
+ {
1341
+ kind: ZodLiteral<"refused">;
1342
+ code: ZodEnum<{
1343
+ unavailable: "unavailable";
1344
+ stale_authority: "stale_authority";
1345
+ not_declared: "not_declared";
1346
+ release_app_mismatch: "release_app_mismatch";
1347
+ not_owner: "not_owner";
1348
+ invalid_command: "invalid_command";
1349
+ }>;
1350
+ },
1351
+ $strict
1352
+ >
1353
+ >;
1354
+ ```
1355
+
1356
+ Closed refusals: failed commands produce no installation update.
1357
+
1358
+ ---
1359
+
1360
+ ### appPermissionsWireSchema
1361
+
1362
+ ```ts
1363
+ const appPermissionsWireSchema: ZodObject<{
1364
+ authority: ZodObject<{
1365
+ authorityVersion: ZodLazy<ZodNumber>;
1366
+ declaredOperationsDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1367
+ approvedGrants: ZodLazy<ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
1368
+ capability: ZodPipe<..., ...>;
1369
+ capabilityApproved: ZodLiteral<...>;
1370
+ operations: ZodLazy<...>;
1371
+ resources: ZodUnion<...>;
1372
+ }, $strict>>>>>;
1373
+ approval: ZodNullable<ZodLazy<ZodReadonly<ZodObject<{
1374
+ by: ZodMiniDiscriminatedUnion<[..., ..., ...], "kind">;
1375
+ at: ZodNumber;
1376
+ authorityVersion: ZodLazy<ZodNumber>;
1377
+ }, $strict>>>>;
1378
+ }, $strict>;
1379
+ declaredOperations: ZodLazy<ZodObject<{
1380
+ artifactDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1381
+ digest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1382
+ anonymousMethods: ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
1383
+ name: ZodPipe<..., ...>;
1384
+ digest: ZodPipe<..., ...>;
1385
+ }, $strict>>>>;
1386
+ capabilities: ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
1387
+ capability: ZodPipe<..., ...>;
1388
+ operations: ZodLazy<...>;
1389
+ }, $strict>>>>;
1390
+ }, $strict>>;
1391
+ }, $strict>;
1392
+ ```
1393
+
1394
+ Serializable host facts; the browser derives presentation, never authority.
1395
+
1396
+ ---
1397
+
1398
+ ### permissionPinsSchema
1399
+
1400
+ ```ts
1401
+ const permissionPinsSchema: ZodObject<
998
1402
  {
999
- kind: ZodLiteral<"refused">;
1000
- code: ZodEnum<{
1001
- unavailable: "unavailable";
1002
- stale_authority: "stale_authority";
1003
- not_declared: "not_declared";
1004
- release_app_mismatch: "release_app_mismatch";
1005
- not_owner: "not_owner";
1006
- invalid_command: "invalid_command";
1007
- }>;
1403
+ storeGeneration: ZodString;
1404
+ authorityVersion: ZodNumber;
1405
+ artifactDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1008
1406
  },
1009
1407
  $strict
1010
1408
  >;
1011
1409
  ```
1012
1410
 
1013
- Closed refusals: failed commands produce no installation update.
1411
+ Owner-direct permission page and JSON projection. Copy stays in the catalog.
1412
+
1413
+ ---
1414
+
1415
+ ### permissionSaveSchema
1416
+
1417
+ ```ts
1418
+ const permissionSaveSchema: ZodObject<{
1419
+ storeGeneration: ZodString;
1420
+ authorityVersion: ZodNumber;
1421
+ artifactDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1422
+ command: ZodDiscriminatedUnion<[ZodObject<{
1423
+ kind: ZodLiteral<"install">;
1424
+ }, $strict>, ZodObject<{
1425
+ kind: ZodLiteral<"change-grants">;
1426
+ changes: ZodReadonly<ZodArray<ZodReadonly<ZodObject<{
1427
+ capability: ...;
1428
+ grant: ...;
1429
+ }, $strict>>>>;
1430
+ }, $strict>, ZodObject<{
1431
+ kind: ZodLiteral<"select-release">;
1432
+ }, $strict>, ZodObject<{
1433
+ kind: ZodLiteral<"delete">;
1434
+ }, $strict>], "kind">;
1435
+ }, $strict>;
1436
+ ```
1437
+
1438
+ Permission edit command coupled to the version pins read by the owner.
1439
+
1440
+ ---
1441
+
1442
+ ### appPermissionPageSchema
1443
+
1444
+ ```ts
1445
+ const appPermissionPageSchema: ZodObject<{
1446
+ storeGeneration: ZodString;
1447
+ installationId: ZodString;
1448
+ appId: ZodString;
1449
+ appName: ZodString;
1450
+ artifactDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1451
+ permissions: ZodObject<{
1452
+ authority: ZodObject<{
1453
+ authorityVersion: ZodLazy<ZodNumber>;
1454
+ declaredOperationsDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1455
+ approvedGrants: ZodLazy<ZodReadonly<ZodArray<ZodReadonly<ZodObject<..., ...>>>>>;
1456
+ approval: ZodNullable<ZodLazy<ZodReadonly<ZodObject<{
1457
+ by: ...;
1458
+ at: ...;
1459
+ authorityVersion: ...;
1460
+ }, $strict>>>>;
1461
+ }, $strict>;
1462
+ declaredOperations: ZodLazy<ZodObject<{
1463
+ artifactDigest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1464
+ digest: ZodPipe<ZodUnknown, ZodTransform<Sha256Digest, unknown>>;
1465
+ anonymousMethods: ZodReadonly<ZodArray<ZodReadonly<ZodObject<..., ...>>>>;
1466
+ capabilities: ZodReadonly<ZodArray<ZodReadonly<ZodObject<..., ...>>>>;
1467
+ }, $strict>>;
1468
+ }, $strict>;
1469
+ }, $strict>;
1470
+ ```
1471
+
1472
+ Owner permission-page identity, artifact and current permission facts.
1014
1473
 
1015
1474
  ---
1016
1475
 
@@ -1039,12 +1498,15 @@ function grantsFor(
1039
1498
  declaration,
1040
1499
  snapshot,
1041
1500
  capability,
1501
+ resource?,
1042
1502
  ): Readonly<
1043
1503
  Readonly<{
1044
1504
  capability:
1505
+ | "approvals"
1045
1506
  | "agent.list"
1046
1507
  | "agent.manage"
1047
1508
  | "agent.rename"
1509
+ | "agent.avatar"
1048
1510
  | "agent.toolPolicy"
1049
1511
  | "agent.read"
1050
1512
  | "agent.send"
@@ -1086,26 +1548,28 @@ resource selectors.
1086
1548
 
1087
1549
  #### Parameters
1088
1550
 
1089
- | Parameter | Type |
1090
- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1091
- | `installation` | [`Installation`](#installation) |
1092
- | `declaration` | `AppDeclaration` |
1093
- | `snapshot` | [`DeclaredOperations`](#declaredoperations) |
1094
- | `capability` | \| `"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"` |
1551
+ | Parameter | Type | Default value |
1552
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
1553
+ | `installation` | `Pick`\<[`GateFacts`](#gatefacts)\[`"installation"`\], `"status"` \| `"authority"` \| `"artifactDigest"`\> | `undefined` |
1554
+ | `declaration` | `AppDeclaration` | `undefined` |
1555
+ | `snapshot` | [`DeclaredOperations`](#declaredoperations) | `undefined` |
1556
+ | `capability` | \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"` | `undefined` |
1557
+ | `resource` | \| `"any"` \| `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\> | `"any"` |
1095
1558
 
1096
1559
  #### Returns
1097
1560
 
1098
- \| `Readonly`\<`Readonly`\<\{ `capability`: \| `"agent.list"` \|
1099
- `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"`
1100
- \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \|
1101
- `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \|
1102
- `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"`
1103
- \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \|
1104
- `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \|
1105
- `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \|
1106
- `"channels.read"` \| `"channels.personal.manage"`; `capabilityApproved`: `true`;
1107
- `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly
1108
- `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>\> \| `null`
1561
+ \| `Readonly`\<`Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"`
1562
+ \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \|
1563
+ `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \|
1564
+ `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \|
1565
+ `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \|
1566
+ `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \|
1567
+ `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \|
1568
+ `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \|
1569
+ `"workflow.arm"` \| `"world"` \| `"channels.read"` \|
1570
+ `"channels.personal.manage"`; `capabilityApproved`: `true`; `operations`:
1571
+ readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{
1572
+ `kind`: `string`; `id`: `string`; \}\>[]; \}\>\> \| `null`
1109
1573
 
1110
1574
  ---
1111
1575
 
@@ -1120,10 +1584,10 @@ pin the selection/version/artifact and compare running frame grants as a subset.
1120
1584
 
1121
1585
  #### Parameters
1122
1586
 
1123
- | Parameter | Type |
1124
- | -------------- | ------------------------------- |
1125
- | `installation` | [`Installation`](#installation) |
1126
- | `declaration` | `AppDeclaration` |
1587
+ | Parameter | Type |
1588
+ | -------------- | ------------------------------------------------------------------------------------ |
1589
+ | `installation` | `Pick`\<[`GateFacts`](#gatefacts)\[`"installation"`\], `"status"` \| `"authority"`\> |
1590
+ | `declaration` | `AppDeclaration` |
1127
1591
 
1128
1592
  #### Returns
1129
1593
 
@@ -1143,11 +1607,11 @@ resource authority.
1143
1607
 
1144
1608
  #### Parameters
1145
1609
 
1146
- | Parameter | Type | Default value |
1147
- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
1148
- | `captured` | readonly `object`[] | `undefined` |
1149
- | `method?` | `Readonly`\<\{ `description`: `string`; `input`: `object`; `output`: `object`; `effect`: `"read"` \| `"write"` \| `"external"`; `requires`: 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"`)[]; `pending?`: `true`; `hidden?`: `true`; `anonymous?`: `true`; \}\> | `undefined` |
1150
- | `ceiling?` | `"read"` \| `"write"` | `"write"` |
1610
+ | Parameter | Type | Default value |
1611
+ | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
1612
+ | `captured` | readonly `object`[] | `undefined` |
1613
+ | `method?` | `Readonly`\<\{ `description`: `string`; `input`: `object`; `output`: `object`; `effect`: `"read"` \| `"write"` \| `"external"`; `requires`: readonly ( \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`)[]; `pending?`: `true`; `hidden?`: `true`; `anonymous?`: `true`; `present?`: `Readonly`\<\{ `verb`: `string`; \}\>; \}\> | `undefined` |
1614
+ | `ceiling?` | `"read"` \| `"write"` | `"write"` |
1151
1615
 
1152
1616
  #### Returns
1153
1617
 
@@ -1212,10 +1676,10 @@ stay outside this pure gate.
1212
1676
 
1213
1677
  #### Parameters
1214
1678
 
1215
- | Parameter | Type |
1216
- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
1217
- | `facts` | [`GateFacts`](#gatefacts) |
1218
- | `rawRequest` | \| \{ `kind`: `"method"`; `name`: `string`; `input`: `unknown`; `via`: `"ui"` \| `"agent"` \| `"mcp"` \| `"workflow"`; \} \| \{ `kind`: `"capability-route"`; `capability`: \| `"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"`; `operation`: `string`; \} \| \{ `kind`: `"binding"`; `binding`: \| `"BACKGROUND"` \| `"GIT"` \| `"EVENTS"` \| `"APPS"` \| `"WORKFLOWS"` \| `"APP_STORAGE"` \| `"MEDIA"` \| `"COMPUTER"` \| `"INBOX"` \| `"AGENTS"`; `operation`: `string`; \} \| \{ `kind`: `"list-tools"`; \} \| \{ `kind`: `"backend"`; \} |
1679
+ | Parameter | Type |
1680
+ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1681
+ | `facts` | [`GateFacts`](#gatefacts) |
1682
+ | `rawRequest` | \| \{ `kind`: `"method"`; `name`: `string`; `input`: `unknown`; `via`: `"agent"` \| `"mcp"` \| `"ui"` \| `"workflow"`; `resource?`: `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>; \} \| \{ `kind`: `"capability"`; `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `operation?`: `string`; `resource`: \| `"any"` \| `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>; \} \| \{ `kind`: `"capability-route"`; `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `operation`: `string`; \} \| \{ `kind`: `"binding"`; `binding`: \| `"BACKGROUND"` \| `"GIT"` \| `"EVENTS"` \| `"APPS"` \| `"WORKFLOWS"` \| `"APP_STORAGE"` \| `"MEDIA"` \| `"COMPUTER"` \| `"INBOX"` \| `"AGENTS"`; `operation`: `string`; \} \| \{ `kind`: `"list-tools"`; \} \| \{ `kind`: `"backend"`; \} |
1219
1683
 
1220
1684
  #### Returns
1221
1685
 
@@ -1223,6 +1687,115 @@ stay outside this pure gate.
1223
1687
 
1224
1688
  ---
1225
1689
 
1690
+ ### applyGrantCommand()
1691
+
1692
+ ```ts
1693
+ function applyGrantCommand(
1694
+ current,
1695
+ rawCommand,
1696
+ context,
1697
+ ): Result<
1698
+ {
1699
+ authorityVersion: number;
1700
+ declaredOperationsDigest: Sha256Digest;
1701
+ approvedGrants: readonly Readonly<{
1702
+ capability:
1703
+ | "approvals"
1704
+ | "agent.list"
1705
+ | "agent.manage"
1706
+ | "agent.rename"
1707
+ | "agent.avatar"
1708
+ | "agent.toolPolicy"
1709
+ | "agent.read"
1710
+ | "agent.send"
1711
+ | "computer.list"
1712
+ | "computer.readFile"
1713
+ | "computer.writeFile"
1714
+ | "computer.execute"
1715
+ | "llm.generation"
1716
+ | "media.generation"
1717
+ | "games:servers"
1718
+ | "git.repository"
1719
+ | "apps.open"
1720
+ | "apps.call"
1721
+ | "app.storage"
1722
+ | "app.events.emit"
1723
+ | "team.workbenchHost"
1724
+ | "marketplace.browse"
1725
+ | "marketplace.purchase"
1726
+ | "workflow.run"
1727
+ | "workflow.publish"
1728
+ | "workflow.arm"
1729
+ | "world"
1730
+ | "channels.read"
1731
+ | "channels.personal.manage";
1732
+ capabilityApproved: true;
1733
+ operations: readonly string[];
1734
+ resources:
1735
+ | "tenant-scope"
1736
+ | readonly Readonly<{
1737
+ kind: string;
1738
+ id: string;
1739
+ }>[];
1740
+ }>[];
1741
+ approval: Readonly<{
1742
+ by:
1743
+ | {
1744
+ kind: "member";
1745
+ memberId: string;
1746
+ }
1747
+ | {
1748
+ kind: "agent";
1749
+ agentId: string;
1750
+ }
1751
+ | {
1752
+ kind: "team-key";
1753
+ keyId: string;
1754
+ };
1755
+ at: number;
1756
+ authorityVersion: number;
1757
+ }> | null;
1758
+ },
1759
+ Readonly<{
1760
+ kind: "refused";
1761
+ code: "stale_authority" | "not_declared" | "not_owner" | "invalid_command";
1762
+ }>
1763
+ >;
1764
+ ```
1765
+
1766
+ One host-independent approval policy; selection only intersects existing grants.
1767
+
1768
+ #### Parameters
1769
+
1770
+ | Parameter | Type |
1771
+ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1772
+ | `current` | \| \{ `authorityVersion`: `number`; `declaredOperationsDigest`: `Sha256Digest`; `approvedGrants`: readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[]; `approval`: \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; \} \| `null` |
1773
+ | `rawCommand` | \| \{ `kind`: `"install"`; \} \| \{ `kind`: `"change-grants"`; `changes`: readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `grant`: \| `Readonly`\<\{ `operations`: readonly `string`[]; `resources`: `"tenant-scope"` \| readonly `Readonly`\<...\>[]; \}\> \| `null`; \}\>[]; \} \| \{ `kind`: `"select-release"`; \} \| \{ `kind`: `"delete"`; \} |
1774
+ | `context` | [`GrantContext`](#grantcontext) |
1775
+
1776
+ #### Returns
1777
+
1778
+ `Result`\<\{ `authorityVersion`: `number`; `declaredOperationsDigest`:
1779
+ `Sha256Digest`; `approvedGrants`: readonly `Readonly`\<\{ `capability`: \|
1780
+ `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \|
1781
+ `"agent.avatar"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \|
1782
+ `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \|
1783
+ `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \|
1784
+ `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \|
1785
+ `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \|
1786
+ `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \|
1787
+ `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \|
1788
+ `"channels.personal.manage"`; `capabilityApproved`: `true`; `operations`:
1789
+ readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{
1790
+ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[]; `approval`: \| `Readonly`\<\{
1791
+ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`:
1792
+ `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`:
1793
+ `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; \},
1794
+ `Readonly`\<\{ `kind`: `"refused"`; `code`: `"stale_authority"` \|
1795
+ `"not_declared"` \| `"not_owner"` \| `"invalid_command"`; \}\>\>
1796
+
1797
+ ---
1798
+
1226
1799
  ### applyInstallationCommand()
1227
1800
 
1228
1801
  ```ts
@@ -1252,11 +1825,11 @@ Pure transition; hosts retain transactions, receipts, epochs and delivery.
1252
1825
 
1253
1826
  #### Parameters
1254
1827
 
1255
- | Parameter | Type |
1256
- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1257
- | `current` | \| `Readonly`\<\{ `installationId`: `string`; `instanceId`: [`InstanceId`](index.md#instanceid) \| `null`; `appId`: `AppId`; `release`: \{ `releaseId`: `ReleaseId`; `appId`: `AppId`; `artifact`: \{ `artifactRef`: `ArtifactRef`; `artifactDigest`: `Sha256Digest`; `provenance`: \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \}; \}; \}; `releasePin`: `"pinned"` \| `"floating"`; `authorityVersion`: `number`; `status`: `"enabled"` \| `"disabled"` \| `"deleted"`; `visibility`: `"private"` \| `"public"`; `declaredOperationsDigest`: `Sha256Digest`; `approvedGrants`: readonly `Readonly`\<\{ `capability`: \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[]; `approval`: \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; `approvedAnonymousMethods`: readonly `Readonly`\<\{ `name`: `string`; `digest`: `Sha256Digest`; \}\>[]; `anonymousApproval`: \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; \}\> \| `null` |
1258
- | `rawCommand` | \| \{ `release`: \{ `releaseId`: `ReleaseId`; `appId`: `AppId`; `artifact`: \{ `artifactRef`: `ArtifactRef`; `artifactDigest`: `Sha256Digest`; `provenance`: \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \}; \}; \}; `releasePin`: `"pinned"` \| `"floating"`; `kind`: `"install"`; `grants`: \| `"none"` \| `"declared"` \| readonly `Readonly`\<\{ `capability`: \| `"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"`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[]; \} \| \{ `release`: \{ `releaseId`: `ReleaseId`; `appId`: `AppId`; `artifact`: \{ `artifactRef`: `ArtifactRef`; `artifactDigest`: `Sha256Digest`; `provenance`: \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \}; \}; \}; `releasePin`: `"pinned"` \| `"floating"`; `kind`: `"select-release"`; \} \| \{ `kind`: `"set-status"`; `status`: `"enabled"` \| `"disabled"` \| `"deleted"`; \} \| \{ `kind`: `"set-visibility"`; `visibility`: `"private"` \| `"public"`; \} \| \{ `kind`: `"set-grants"`; `grants`: \| `"none"` \| `"declared"` \| readonly `Readonly`\<\{ `capability`: \| `"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"`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[]; \} \| \{ `kind`: `"approve-anonymous"`; `methods`: readonly `Readonly`\<\{ `name`: `string`; `digest`: `Sha256Digest`; \}\>[]; \} |
1259
- | `context` | [`InstallationContext`](#installationcontext) |
1828
+ | Parameter | Type |
1829
+ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1830
+ | `current` | \| `Readonly`\<\{ `installationId`: `string`; `instanceId`: [`InstanceId`](index.md#instanceid) \| `null`; `appId`: `AppId`; `release`: \{ `releaseId`: `ReleaseId`; `appId`: `AppId`; `artifact`: \{ `artifactRef`: `ArtifactRef`; `artifactDigest`: `Sha256Digest`; `provenance`: \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \}; \}; \}; `releasePin`: `"pinned"` \| `"floating"`; `authority`: \{ `authorityVersion`: `number`; `declaredOperationsDigest`: `Sha256Digest`; `approvedGrants`: readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: ...; `id`: ...; \}\>[]; \}\>[]; `approval`: \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; \}; `status`: `"enabled"` \| `"disabled"` \| `"deleted"`; `visibility`: `"private"` \| `"public"`; `approvedAnonymousMethods`: readonly `Readonly`\<\{ `name`: `string`; `digest`: `Sha256Digest`; \}\>[]; `anonymousApproval`: \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; \}\> \| `null` |
1831
+ | `rawCommand` | \| \{ `release`: \{ `releaseId`: `ReleaseId`; `appId`: `AppId`; `artifact`: \{ `artifactRef`: `ArtifactRef`; `artifactDigest`: `Sha256Digest`; `provenance`: \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \}; \}; \}; `releasePin`: `"pinned"` \| `"floating"`; `kind`: `"install"`; \} \| \{ `release`: \{ `releaseId`: `ReleaseId`; `appId`: `AppId`; `artifact`: \{ `artifactRef`: `ArtifactRef`; `artifactDigest`: `Sha256Digest`; `provenance`: \{ `sourceRevision`: `SourceRevision`; `sourceTreeDigest`: `Sha256Digest`; `buildRecipeDigest`: `Sha256Digest`; \}; \}; \}; `releasePin`: `"pinned"` \| `"floating"`; `kind`: `"select-release"`; \} \| \{ `kind`: `"set-status"`; `status`: `"enabled"` \| `"disabled"` \| `"deleted"`; \} \| \{ `kind`: `"set-visibility"`; `visibility`: `"private"` \| `"public"`; \} \| \{ `kind`: `"change-grants"`; `changes`: readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `grant`: \| `Readonly`\<\{ `operations`: readonly `string`[]; `resources`: `"tenant-scope"` \| readonly `Readonly`\<...\>[]; \}\> \| `null`; \}\>[]; \} \| \{ `kind`: `"approve-anonymous"`; `methods`: readonly `Readonly`\<\{ `name`: `string`; `digest`: `Sha256Digest`; \}\>[]; \} |
1832
+ | `context` | [`InstallationContext`](#installationcontext) |
1260
1833
 
1261
1834
  #### Returns
1262
1835
 
@@ -1306,9 +1879,11 @@ function deriveDeclaredOperations(
1306
1879
  }>[];
1307
1880
  capabilities: readonly Readonly<{
1308
1881
  capability:
1882
+ | "approvals"
1309
1883
  | "agent.list"
1310
1884
  | "agent.manage"
1311
1885
  | "agent.rename"
1886
+ | "agent.avatar"
1312
1887
  | "agent.toolPolicy"
1313
1888
  | "agent.read"
1314
1889
  | "agent.send"
@@ -1364,12 +1939,288 @@ host adapters.
1364
1939
  `Promise`\<`Readonly`\<\{ `artifactDigest`: `Sha256Digest`; `digest`:
1365
1940
  `Sha256Digest`; `anonymousMethods`: readonly `Readonly`\<\{ `name`: `string`;
1366
1941
  `digest`: `Sha256Digest`; \}\>[]; `capabilities`: readonly `Readonly`\<\{
1367
- `capability`: \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \|
1368
- `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \|
1942
+ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \|
1943
+ `"agent.rename"` \| `"agent.avatar"` \| `"agent.toolPolicy"` \| `"agent.read"`
1944
+ \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \|
1945
+ `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \|
1946
+ `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"`
1947
+ \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \|
1948
+ `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \|
1949
+ `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \|
1950
+ `"channels.read"` \| `"channels.personal.manage"`; `operations`: readonly
1951
+ `string`[]; \}\>[]; \}\>\>
1952
+
1953
+ ---
1954
+
1955
+ ### pendingCapabilities()
1956
+
1957
+ ```ts
1958
+ function pendingCapabilities(
1959
+ authority,
1960
+ declaration,
1961
+ declaredOperations,
1962
+ ): readonly (
1963
+ | "approvals"
1964
+ | "agent.list"
1965
+ | "agent.manage"
1966
+ | "agent.rename"
1967
+ | "agent.avatar"
1968
+ | "agent.toolPolicy"
1969
+ | "agent.read"
1970
+ | "agent.send"
1971
+ | "computer.list"
1972
+ | "computer.readFile"
1973
+ | "computer.writeFile"
1974
+ | "computer.execute"
1975
+ | "llm.generation"
1976
+ | "media.generation"
1977
+ | "games:servers"
1978
+ | "git.repository"
1979
+ | "apps.open"
1980
+ | "apps.call"
1981
+ | "app.storage"
1982
+ | "app.events.emit"
1983
+ | "team.workbenchHost"
1984
+ | "marketplace.browse"
1985
+ | "marketplace.purchase"
1986
+ | "workflow.run"
1987
+ | "workflow.publish"
1988
+ | "workflow.arm"
1989
+ | "world"
1990
+ | "channels.read"
1991
+ | "channels.personal.manage"
1992
+ )[];
1993
+ ```
1994
+
1995
+ Includes newly declared operations and capabilities the owner has narrowed.
1996
+
1997
+ #### Parameters
1998
+
1999
+ | Parameter | Type |
2000
+ | -------------------- | ------------------------------------------------------------- |
2001
+ | `authority` | `Pick`\<[`AppAuthority`](#appauthority), `"approvedGrants"`\> |
2002
+ | `declaration` | `Pick`\<`AppDeclaration`, `"capabilities"`\> |
2003
+ | `declaredOperations` | [`DeclaredOperations`](#declaredoperations) |
2004
+
2005
+ #### Returns
2006
+
2007
+ readonly ( \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \|
2008
+ `"agent.rename"` \| `"agent.avatar"` \| `"agent.toolPolicy"` \| `"agent.read"`
2009
+ \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \|
2010
+ `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \|
2011
+ `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"`
2012
+ \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \|
2013
+ `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \|
2014
+ `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \|
2015
+ `"channels.read"` \| `"channels.personal.manage"`)[]
2016
+
2017
+ ---
2018
+
2019
+ ### grantRequestFor()
2020
+
2021
+ ```ts
2022
+ function grantRequestFor(
2023
+ authority,
2024
+ facts,
2025
+ request,
2026
+ window,
2027
+ ): GrantRequestDecision;
2028
+ ```
2029
+
2030
+ Bound the real SDK request; an Allow never silently widens selected resources.
2031
+
2032
+ #### Parameters
2033
+
2034
+ | Parameter | Type |
2035
+ | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
2036
+ | `authority` | \{ `authorityVersion`: `number`; `declaredOperationsDigest`: `Sha256Digest`; `approvedGrants`: readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[]; `approval`: \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; \} |
2037
+ | `authority.authorityVersion` | `number` |
2038
+ | `authority.declaredOperationsDigest` | `Sha256Digest` |
2039
+ | `authority.approvedGrants` | readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[] |
2040
+ | `authority.approval` | \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null` |
2041
+ | `facts` | `Readonly`\<\{ `declaration`: `Pick`\<`AppDeclaration`, `"capabilities"`\>; `declaredOperations`: [`DeclaredOperations`](#declaredoperations); \}\> |
2042
+ | `request` | `AppPermissionRequest` |
2043
+ | `window` | `Readonly`\<\{ `computerId`: `string` \| `null`; \}\> |
2044
+
2045
+ #### Returns
2046
+
2047
+ [`GrantRequestDecision`](#grantrequestdecision)
2048
+
2049
+ ---
2050
+
2051
+ ### draftOf()
2052
+
2053
+ ```ts
2054
+ function draftOf(authority): PermissionDraft;
2055
+ ```
2056
+
2057
+ The saved operation ceiling is the starting point, including empty operation
2058
+ rows.
2059
+
2060
+ #### Parameters
2061
+
2062
+ | Parameter | Type |
2063
+ | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
2064
+ | `authority` | \{ `authorityVersion`: `number`; `declaredOperationsDigest`: `Sha256Digest`; `approvedGrants`: readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[]; `approval`: \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; \} |
2065
+ | `authority.authorityVersion` | `number` |
2066
+ | `authority.declaredOperationsDigest` | `Sha256Digest` |
2067
+ | `authority.approvedGrants` | readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[] |
2068
+ | `authority.approval` | \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null` |
2069
+
2070
+ #### Returns
2071
+
2072
+ [`PermissionDraft`](#permissiondraft)
2073
+
2074
+ ---
2075
+
2076
+ ### editPermissions()
2077
+
2078
+ ```ts
2079
+ function editPermissions(draft, edit, declared): PermissionDraft;
2080
+ ```
2081
+
2082
+ An edit changes one capability; unrelated saved operations and scopes are
2083
+ retained.
2084
+
2085
+ #### Parameters
2086
+
2087
+ | Parameter | Type |
2088
+ | ---------- | ------------------------------------------- |
2089
+ | `draft` | [`PermissionDraft`](#permissiondraft) |
2090
+ | `edit` | [`PermissionEdit`](#permissionedit) |
2091
+ | `declared` | [`DeclaredOperations`](#declaredoperations) |
2092
+
2093
+ #### Returns
2094
+
2095
+ [`PermissionDraft`](#permissiondraft)
2096
+
2097
+ ---
2098
+
2099
+ ### planGrantChange()
2100
+
2101
+ ```ts
2102
+ function planGrantChange(
2103
+ baseline,
2104
+ draft,
2105
+ ): readonly Readonly<{
2106
+ capability:
2107
+ | "approvals"
2108
+ | "agent.list"
2109
+ | "agent.manage"
2110
+ | "agent.rename"
2111
+ | "agent.avatar"
2112
+ | "agent.toolPolicy"
2113
+ | "agent.read"
2114
+ | "agent.send"
2115
+ | "computer.list"
2116
+ | "computer.readFile"
2117
+ | "computer.writeFile"
2118
+ | "computer.execute"
2119
+ | "llm.generation"
2120
+ | "media.generation"
2121
+ | "games:servers"
2122
+ | "git.repository"
2123
+ | "apps.open"
2124
+ | "apps.call"
2125
+ | "app.storage"
2126
+ | "app.events.emit"
2127
+ | "team.workbenchHost"
2128
+ | "marketplace.browse"
2129
+ | "marketplace.purchase"
2130
+ | "workflow.run"
2131
+ | "workflow.publish"
2132
+ | "workflow.arm"
2133
+ | "world"
2134
+ | "channels.read"
2135
+ | "channels.personal.manage";
2136
+ grant: Readonly<{
2137
+ operations: readonly string[];
2138
+ resources:
2139
+ | "tenant-scope"
2140
+ | readonly Readonly<{
2141
+ kind: string;
2142
+ id: string;
2143
+ }>[];
2144
+ }> | null;
2145
+ }>[];
2146
+ ```
2147
+
2148
+ Only touched capability rows cross the save boundary.
2149
+
2150
+ #### Parameters
2151
+
2152
+ | Parameter | Type |
2153
+ | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
2154
+ | `baseline` | \{ `authorityVersion`: `number`; `declaredOperationsDigest`: `Sha256Digest`; `approvedGrants`: readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[]; `approval`: \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; \} |
2155
+ | `baseline.authorityVersion` | `number` |
2156
+ | `baseline.declaredOperationsDigest` | `Sha256Digest` |
2157
+ | `baseline.approvedGrants` | readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[] |
2158
+ | `baseline.approval` | \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null` |
2159
+ | `draft` | [`PermissionDraft`](#permissiondraft) |
2160
+
2161
+ #### Returns
2162
+
2163
+ readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \|
2164
+ `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"agent.toolPolicy"`
2165
+ \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \|
1369
2166
  `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \|
1370
2167
  `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \|
1371
2168
  `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \|
1372
2169
  `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \|
1373
2170
  `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \|
1374
2171
  `"workflow.arm"` \| `"world"` \| `"channels.read"` \|
1375
- `"channels.personal.manage"`; `operations`: readonly `string`[]; \}\>[]; \}\>\>
2172
+ `"channels.personal.manage"`; `grant`: \| `Readonly`\<\{ `operations`: readonly
2173
+ `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`:
2174
+ `string`; `id`: `string`; \}\>[]; \}\> \| `null`; \}\>[]
2175
+
2176
+ ---
2177
+
2178
+ ### rebaseDraft()
2179
+
2180
+ ```ts
2181
+ function rebaseDraft(draft, baseline, current): PermissionDraft;
2182
+ ```
2183
+
2184
+ A conflict preserves the person's edits while taking fresh untouched
2185
+ capabilities.
2186
+
2187
+ #### Parameters
2188
+
2189
+ | Parameter | Type |
2190
+ | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
2191
+ | `draft` | [`PermissionDraft`](#permissiondraft) |
2192
+ | `baseline` | \{ `authorityVersion`: `number`; `declaredOperationsDigest`: `Sha256Digest`; `approvedGrants`: readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[]; `approval`: \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; \} |
2193
+ | `baseline.authorityVersion` | `number` |
2194
+ | `baseline.declaredOperationsDigest` | `Sha256Digest` |
2195
+ | `baseline.approvedGrants` | readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[] |
2196
+ | `baseline.approval` | \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null` |
2197
+ | `current` | \{ `authorityVersion`: `number`; `declaredOperationsDigest`: `Sha256Digest`; `approvedGrants`: readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[]; `approval`: \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null`; \} |
2198
+ | `current.authorityVersion` | `number` |
2199
+ | `current.declaredOperationsDigest` | `Sha256Digest` |
2200
+ | `current.approvedGrants` | readonly `Readonly`\<\{ `capability`: \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"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"`; `capabilityApproved`: `true`; `operations`: readonly `string`[]; `resources`: \| `"tenant-scope"` \| readonly `Readonly`\<\{ `kind`: `string`; `id`: `string`; \}\>[]; \}\>[] |
2201
+ | `current.approval` | \| `Readonly`\<\{ `by`: \| \{ `kind`: `"member"`; `memberId`: `string`; \} \| \{ `kind`: `"agent"`; `agentId`: `string`; \} \| \{ `kind`: `"team-key"`; `keyId`: `string`; \}; `at`: `number`; `authorityVersion`: `number`; \}\> \| `null` |
2202
+
2203
+ #### Returns
2204
+
2205
+ [`PermissionDraft`](#permissiondraft)
2206
+
2207
+ ---
2208
+
2209
+ ### permissionScreen()
2210
+
2211
+ ```ts
2212
+ function permissionScreen(input): PermissionScreen;
2213
+ ```
2214
+
2215
+ Every declared permission is visible, including removable saved resources no
2216
+ longer listed by the host.
2217
+
2218
+ #### Parameters
2219
+
2220
+ | Parameter | Type |
2221
+ | --------- | ----------------------------------------------------------------------------------------------------------------- |
2222
+ | `input` | `object` & `Readonly`\<\{ `resources`: readonly [`ResourceOption`](#resourceoption)[]; `canEdit`: `boolean`; \}\> |
2223
+
2224
+ #### Returns
2225
+
2226
+ [`PermissionScreen`](#permissionscreen)