@fungi.computer/oyster 0.0.0-stage → 0.0.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 (242) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1082 -2
  3. package/dist/agents.d.ts +114 -0
  4. package/dist/agents.js +322 -0
  5. package/dist/app-builds.d.ts +151 -0
  6. package/dist/app-builds.js +355 -0
  7. package/dist/app-sandbox.d.ts +2 -0
  8. package/dist/app-sandbox.js +2 -0
  9. package/dist/app-sources.d.ts +46 -0
  10. package/dist/app-sources.js +335 -0
  11. package/dist/app-storage.d.ts +141 -0
  12. package/dist/app-storage.js +281 -0
  13. package/dist/apps/gate.d.ts +105 -0
  14. package/dist/apps/gate.js +273 -0
  15. package/dist/apps/index.d.ts +5 -0
  16. package/dist/apps/index.js +5 -0
  17. package/dist/apps/installation.d.ts +248 -0
  18. package/dist/apps/installation.js +307 -0
  19. package/dist/apps/operations.d.ts +8 -0
  20. package/dist/apps/operations.js +98 -0
  21. package/dist/apps/tools.d.ts +33 -0
  22. package/dist/apps/tools.js +17 -0
  23. package/dist/auth.d.ts +11 -0
  24. package/dist/auth.js +93 -0
  25. package/dist/backend-request.d.ts +3 -0
  26. package/dist/backend-request.js +53 -0
  27. package/dist/build/build-jobs.d.ts +128 -0
  28. package/dist/build/build-jobs.js +197 -0
  29. package/dist/build/build-step.d.ts +26 -0
  30. package/dist/build/build-step.js +20 -0
  31. package/dist/build/bundled-html.d.ts +7 -0
  32. package/dist/build/bundled-html.js +64 -0
  33. package/dist/build/definition-emission.d.ts +34 -0
  34. package/dist/build/definition-emission.js +201 -0
  35. package/dist/build/effect.d.ts +231 -0
  36. package/dist/build/effect.js +396 -0
  37. package/dist/build/git-environment.d.ts +6 -0
  38. package/dist/build/git-environment.js +48 -0
  39. package/dist/build/html-recipe.d.ts +20 -0
  40. package/dist/build/html-recipe.js +51 -0
  41. package/dist/build/local-build.d.ts +57 -0
  42. package/dist/build/local-build.js +1078 -0
  43. package/dist/build/r2-artifact-writer.d.ts +31 -0
  44. package/dist/build/r2-artifact-writer.js +179 -0
  45. package/dist/build/snapshot-package-store.d.ts +2 -0
  46. package/dist/build/snapshot-package-store.js +21 -0
  47. package/dist/build/snapshot-program-scripts.d.ts +6 -0
  48. package/dist/build/snapshot-program-scripts.js +2 -0
  49. package/dist/build/submission-contract.d.ts +384 -0
  50. package/dist/build/submission-contract.js +70 -0
  51. package/dist/build/workspace-build.d.ts +50 -0
  52. package/dist/build/workspace-build.js +156 -0
  53. package/dist/build-contract.d.ts +4 -0
  54. package/dist/build-contract.js +4 -0
  55. package/dist/build-jobs.d.ts +2 -0
  56. package/dist/build-jobs.js +2 -0
  57. package/dist/build.d.ts +11 -0
  58. package/dist/build.js +13 -0
  59. package/dist/capability-descriptor.d.ts +46 -0
  60. package/dist/capability-descriptor.js +51 -0
  61. package/dist/catalog-frame.d.ts +39 -0
  62. package/dist/catalog-frame.js +72 -0
  63. package/dist/cause-class.d.ts +19 -0
  64. package/dist/cause-class.js +54 -0
  65. package/dist/cloudflare.d.ts +123 -0
  66. package/dist/cloudflare.js +391 -0
  67. package/dist/computer-terminal.d.ts +38 -0
  68. package/dist/computer-terminal.js +410 -0
  69. package/dist/computer.d.ts +60 -0
  70. package/dist/computer.js +33 -0
  71. package/dist/event-recipients.d.ts +57 -0
  72. package/dist/event-recipients.js +144 -0
  73. package/dist/facet-invocation.d.ts +4 -0
  74. package/dist/facet-invocation.js +45 -0
  75. package/dist/files.d.ts +42 -0
  76. package/dist/files.js +123 -0
  77. package/dist/frame-binding-wire-script.d.ts +2 -0
  78. package/dist/frame-binding-wire-script.js +1 -0
  79. package/dist/frame-binding-wire.d.ts +28 -0
  80. package/dist/frame-binding-wire.js +54 -0
  81. package/dist/git-admission.d.ts +52 -0
  82. package/dist/git-admission.js +188 -0
  83. package/dist/git-auth.d.ts +11 -0
  84. package/dist/git-auth.js +27 -0
  85. package/dist/git-door.d.ts +35 -0
  86. package/dist/git-door.js +108 -0
  87. package/dist/git-journal.d.ts +31 -0
  88. package/dist/git-journal.js +188 -0
  89. package/dist/git.d.ts +31 -0
  90. package/dist/git.js +64 -0
  91. package/dist/guest-policy.d.ts +9 -0
  92. package/dist/guest-policy.js +13 -0
  93. package/dist/host.d.ts +244 -0
  94. package/dist/host.js +1043 -0
  95. package/dist/index.d.ts +166 -0
  96. package/dist/index.js +320 -0
  97. package/dist/installation-consent.d.ts +79 -0
  98. package/dist/installation-consent.js +82 -0
  99. package/dist/internal/background-origins.d.ts +3 -0
  100. package/dist/internal/background-origins.js +8 -0
  101. package/dist/internal/delivery.d.ts +12 -0
  102. package/dist/internal/delivery.js +167 -0
  103. package/dist/internal/host-gate.d.ts +14 -0
  104. package/dist/internal/host-gate.js +62 -0
  105. package/dist/internal/registry-installations.d.ts +6 -0
  106. package/dist/internal/registry-installations.js +12 -0
  107. package/dist/invocation.d.ts +251 -0
  108. package/dist/invocation.js +377 -0
  109. package/dist/keys.d.ts +48 -0
  110. package/dist/keys.js +52 -0
  111. package/dist/mcp-owner.d.ts +27 -0
  112. package/dist/mcp-owner.js +143 -0
  113. package/dist/mcp.d.ts +89 -0
  114. package/dist/mcp.js +429 -0
  115. package/dist/media.d.ts +23 -0
  116. package/dist/media.js +12 -0
  117. package/dist/pack.d.ts +76 -0
  118. package/dist/pack.js +134 -0
  119. package/dist/page/capabilities.d.ts +23 -0
  120. package/dist/page/capabilities.js +256 -0
  121. package/dist/page/computer-handles.d.ts +79 -0
  122. package/dist/page/computer-handles.js +44 -0
  123. package/dist/page/lifetime.d.ts +6 -0
  124. package/dist/page/lifetime.js +19 -0
  125. package/dist/page/mount.d.ts +163 -0
  126. package/dist/page/mount.js +390 -0
  127. package/dist/page/storage.d.ts +3 -0
  128. package/dist/page/storage.js +82 -0
  129. package/dist/page/terminal.d.ts +5 -0
  130. package/dist/page/terminal.js +7 -0
  131. package/dist/page-script.d.ts +14 -0
  132. package/dist/page-script.js +5 -0
  133. package/dist/r2-files.d.ts +3 -0
  134. package/dist/r2-files.js +79 -0
  135. package/dist/release.d.ts +72 -0
  136. package/dist/release.js +164 -0
  137. package/dist/root-data.d.ts +86 -0
  138. package/dist/root-data.js +69 -0
  139. package/dist/shell/app-directory.d.ts +537 -0
  140. package/dist/shell/app-directory.js +195 -0
  141. package/dist/shell/browser-actions.d.ts +7 -0
  142. package/dist/shell/browser-actions.js +56 -0
  143. package/dist/shell/command-host.d.ts +112 -0
  144. package/dist/shell/command-host.js +502 -0
  145. package/dist/shell/commands.d.ts +25 -0
  146. package/dist/shell/commands.js +78 -0
  147. package/dist/shell/index.d.ts +8 -0
  148. package/dist/shell/index.js +8 -0
  149. package/dist/shell/keys.d.ts +41 -0
  150. package/dist/shell/keys.js +134 -0
  151. package/dist/shell/shell-module.d.ts +31 -0
  152. package/dist/shell/shell-module.js +37 -0
  153. package/dist/shell/window-manager.d.ts +124 -0
  154. package/dist/shell/window-manager.js +711 -0
  155. package/dist/shell/workbench-contract.d.ts +68 -0
  156. package/dist/shell/workbench-contract.js +1 -0
  157. package/dist/shell/workbench-host-types.d.ts +96 -0
  158. package/dist/shell/workbench-host-types.js +1 -0
  159. package/dist/shell/workbench-host.d.ts +34 -0
  160. package/dist/shell/workbench-host.js +347 -0
  161. package/dist/shell/workbench-model.d.ts +192 -0
  162. package/dist/shell/workbench-model.js +53 -0
  163. package/dist/shell/workbench.d.ts +4 -0
  164. package/dist/shell/workbench.js +2 -0
  165. package/dist/source/fork.d.ts +27 -0
  166. package/dist/source/fork.js +46 -0
  167. package/dist/source/index.d.ts +11 -0
  168. package/dist/source/index.js +11 -0
  169. package/dist/source/seed-receipt.d.ts +53 -0
  170. package/dist/source/seed-receipt.js +18 -0
  171. package/dist/source/team-source.d.ts +32 -0
  172. package/dist/source/team-source.js +42 -0
  173. package/dist/source/template-repository.d.ts +2 -0
  174. package/dist/source/template-repository.js +8 -0
  175. package/dist/source/template-write.d.ts +69 -0
  176. package/dist/source/template-write.js +344 -0
  177. package/dist/storage-frame.d.ts +64 -0
  178. package/dist/storage-frame.js +28 -0
  179. package/dist/tenant.d.ts +81 -0
  180. package/dist/tenant.js +71 -0
  181. package/dist/testing/capabilities.d.ts +29 -0
  182. package/dist/testing/capabilities.js +130 -0
  183. package/dist/testing/catalog.d.ts +3 -0
  184. package/dist/testing/catalog.js +53 -0
  185. package/dist/testing/index.d.ts +10 -0
  186. package/dist/testing/index.js +10 -0
  187. package/dist/testing/installation.d.ts +11 -0
  188. package/dist/testing/installation.js +25 -0
  189. package/dist/testing/native-worker.d.ts +21 -0
  190. package/dist/testing/native-worker.js +106 -0
  191. package/dist/testing/worker.d.ts +18 -0
  192. package/dist/testing/worker.js +67 -0
  193. package/dist/testing/workers-runtime.d.ts +24 -0
  194. package/dist/testing/workers-runtime.js +33 -0
  195. package/dist/webhook-delivery.d.ts +14 -0
  196. package/dist/webhook-delivery.js +17 -0
  197. package/dist/workers-git.d.ts +285 -0
  198. package/dist/workers-git.js +1174 -0
  199. package/dist/workers.d.ts +352 -0
  200. package/dist/workers.js +866 -0
  201. package/docs/api/README.md +82 -0
  202. package/docs/api/agents.md +332 -0
  203. package/docs/api/app-storage.md +209 -0
  204. package/docs/api/apps.md +1375 -0
  205. package/docs/api/auth.md +63 -0
  206. package/docs/api/build-contract.md +507 -0
  207. package/docs/api/build.md +1476 -0
  208. package/docs/api/cloudflare.md +421 -0
  209. package/docs/api/computer.md +203 -0
  210. package/docs/api/files.md +117 -0
  211. package/docs/api/git.md +470 -0
  212. package/docs/api/host.md +1328 -0
  213. package/docs/api/index.md +430 -0
  214. package/docs/api/invocation.md +738 -0
  215. package/docs/api/keys.md +175 -0
  216. package/docs/api/mcp.md +301 -0
  217. package/docs/api/media.md +40 -0
  218. package/docs/api/modules.md +42 -0
  219. package/docs/api/pack.md +138 -0
  220. package/docs/api/page/mount.md +298 -0
  221. package/docs/api/root-data.md +111 -0
  222. package/docs/api/shell/app-directory.md +332 -0
  223. package/docs/api/shell/command-host.md +224 -0
  224. package/docs/api/shell/commands.md +197 -0
  225. package/docs/api/shell/keys.md +183 -0
  226. package/docs/api/shell/shell-module.md +143 -0
  227. package/docs/api/shell/window-manager.md +267 -0
  228. package/docs/api/shell/workbench.md +186 -0
  229. package/docs/api/shell.md +1788 -0
  230. package/docs/api/tenant.md +194 -0
  231. package/docs/api/workers-git.md +1527 -0
  232. package/docs/api/workers.md +1678 -0
  233. package/docs/media/architecture.mmd +32 -0
  234. package/docs/media/architecture.png +0 -0
  235. package/docs/media/bonsai-network.png +0 -0
  236. package/docs/media/bonsai-repository.png +0 -0
  237. package/docs/site/agent-quickstart.mdx +349 -0
  238. package/examples/git/worker.ts +39 -0
  239. package/examples/git/wrangler.jsonc +32 -0
  240. package/examples/standalone/worker.ts +14 -0
  241. package/examples/standalone/wrangler.jsonc +21 -0
  242. package/package.json +249 -3
@@ -0,0 +1,1476 @@
1
+ <!-- Generated by Botanical API docs (TypeDoc + typedoc-plugin-markdown). Do not edit. -->
2
+
3
+ [**@fungi.computer/oyster**](README.md)
4
+
5
+ ---
6
+
7
+ [@fungi.computer/oyster](modules.md) / build
8
+
9
+ # build
10
+
11
+ ## Classes
12
+
13
+ ### AppPublisherError
14
+
15
+ Closed failure boundary for the four private composition stages.
16
+
17
+ #### Extends
18
+
19
+ - `Error`
20
+
21
+ #### Constructors
22
+
23
+ ##### Constructor
24
+
25
+ ```ts
26
+ new AppPublisherError(stage, options?): AppPublisherError;
27
+ ```
28
+
29
+ ###### Parameters
30
+
31
+ | Parameter | Type |
32
+ | ---------- | ----------------------------------------- |
33
+ | `stage` | [`AppPublisherStage`](#apppublisherstage) |
34
+ | `options?` | `ErrorOptions` |
35
+
36
+ ###### Returns
37
+
38
+ [`AppPublisherError`](#apppublishererror)
39
+
40
+ ###### Overrides
41
+
42
+ ```ts
43
+ Error.constructor;
44
+ ```
45
+
46
+ #### Properties
47
+
48
+ ##### \_tag
49
+
50
+ ```ts
51
+ readonly _tag: "AppPublisherError";
52
+ ```
53
+
54
+ ##### stage
55
+
56
+ ```ts
57
+ readonly stage: AppPublisherStage;
58
+ ```
59
+
60
+ ## Type Aliases
61
+
62
+ ### WorkspaceBuildStep
63
+
64
+ ```ts
65
+ type WorkspaceBuildStep = Schema.Schema.Type<typeof workspaceBuildStepSchema>;
66
+ ```
67
+
68
+ One captured dependency build step.
69
+
70
+ ---
71
+
72
+ ### AppBackendOutput
73
+
74
+ ```ts
75
+ type AppBackendOutput = Readonly<{
76
+ file: esbuild.OutputFile;
77
+ inputs: readonly string[];
78
+ }>;
79
+ ```
80
+
81
+ The checked Worker output of one App backend build.
82
+
83
+ ---
84
+
85
+ ### DefinitionEmission
86
+
87
+ ```ts
88
+ type DefinitionEmission = Awaited<ReturnType<typeof createDefinitionEmission>>;
89
+ ```
90
+
91
+ One App backend build and the declaration derived from it.
92
+
93
+ ---
94
+
95
+ ### AppPublisherCoreConfigInput
96
+
97
+ ```ts
98
+ type AppPublisherCoreConfigInput = Schema.Codec.Encoded<
99
+ typeof AppPublisherCoreConfigSchema
100
+ >;
101
+ ```
102
+
103
+ App identity and caller-selected recipe inputs before normalization.
104
+
105
+ ---
106
+
107
+ ### PinnedRecipe
108
+
109
+ ```ts
110
+ type PinnedRecipe = Schema.Schema.Type<typeof capturedPinnedRecipeSchema>;
111
+ ```
112
+
113
+ Fully resolved recipe with its pinned toolchain.
114
+
115
+ ---
116
+
117
+ ### CapturedSource
118
+
119
+ ```ts
120
+ type CapturedSource = Readonly<{
121
+ sourceRevision: SourceRevision;
122
+ sourceTreeDigest: Sha256Digest;
123
+ snapshotPath: string;
124
+ }>;
125
+ ```
126
+
127
+ A source tree captured into a scoped local snapshot directory.
128
+
129
+ ---
130
+
131
+ ### RawBuildOutput
132
+
133
+ ```ts
134
+ type RawBuildOutput =
135
+ | Readonly<{
136
+ kind: "bytes";
137
+ bytes: Uint8Array;
138
+ }>
139
+ | Readonly<{
140
+ kind: "assets";
141
+ base: string;
142
+ assets: readonly object[];
143
+ }>;
144
+ ```
145
+
146
+ Compiler bytes or a bounded collection of emitted UI assets.
147
+
148
+ ---
149
+
150
+ ### UiBuildOutput
151
+
152
+ ```ts
153
+ type UiBuildOutput =
154
+ | Readonly<{
155
+ kind: "html";
156
+ bytes: Uint8Array;
157
+ }>
158
+ | Extract<
159
+ RawBuildOutput,
160
+ {
161
+ kind: "assets";
162
+ }
163
+ >;
164
+ ```
165
+
166
+ A complete HTML document or an asset collection.
167
+
168
+ ---
169
+
170
+ ### BuildExecutorOutput
171
+
172
+ ```ts
173
+ type BuildExecutorOutput =
174
+ | RawBuildOutput
175
+ | Readonly<{
176
+ kind: "app";
177
+ ui: PreparedUiOutput | null;
178
+ backend: Uint8Array | null;
179
+ }>;
180
+ ```
181
+
182
+ Raw executor result before the recipe owner assigns App surface meaning.
183
+
184
+ ---
185
+
186
+ ### PreparedUiOutput
187
+
188
+ ```ts
189
+ type PreparedUiOutput =
190
+ | Readonly<{
191
+ content: Extract<
192
+ UiBuildOutput,
193
+ {
194
+ kind: "html";
195
+ }
196
+ >;
197
+ mediaType: "text/html; charset=utf-8";
198
+ }>
199
+ | Readonly<{
200
+ content: Extract<
201
+ UiBuildOutput,
202
+ {
203
+ kind: "assets";
204
+ }
205
+ >;
206
+ mediaType: "application/vnd.fungi.app-assets+json";
207
+ }>;
208
+ ```
209
+
210
+ UI output paired with its immutable artifact media type.
211
+
212
+ ---
213
+
214
+ ### BuildOutput
215
+
216
+ ```ts
217
+ type BuildOutput =
218
+ | Readonly<{
219
+ kind: "ui";
220
+ ui: PreparedUiOutput;
221
+ }>
222
+ | Readonly<{
223
+ kind: "backend";
224
+ backend: Uint8Array;
225
+ }>
226
+ | (Readonly<{
227
+ kind: "app";
228
+ ui: PreparedUiOutput;
229
+ backend: Uint8Array;
230
+ }> &
231
+ Readonly<{
232
+ declaration?: AppDeclaration;
233
+ }>);
234
+ ```
235
+
236
+ Complete, non-empty App content accepted by immutable artifact writers.
237
+
238
+ ---
239
+
240
+ ### StoredArtifact
241
+
242
+ ```ts
243
+ type StoredArtifact = Readonly<{
244
+ artifactRef: ArtifactRef;
245
+ artifactDigest: Sha256Digest;
246
+ }>;
247
+ ```
248
+
249
+ Reference and digest of the persisted App build root.
250
+
251
+ ---
252
+
253
+ ### PreparedCandidate
254
+
255
+ ```ts
256
+ type PreparedCandidate = Readonly<{
257
+ appId: AppId;
258
+ releaseId: ReleaseId;
259
+ output: BuildOutput;
260
+ provenance: Readonly<{
261
+ sourceRevision: SourceRevision;
262
+ sourceTreeDigest: Sha256Digest;
263
+ buildRecipeDigest: Sha256Digest;
264
+ }>;
265
+ }>;
266
+ ```
267
+
268
+ A locally captured and built candidate awaiting native artifact/catalog custody.
269
+
270
+ ---
271
+
272
+ ### SourceCapture
273
+
274
+ ```ts
275
+ type SourceCapture = object;
276
+ ```
277
+
278
+ Four structural roles used by the private composition.
279
+
280
+ #### Properties
281
+
282
+ ##### capture
283
+
284
+ ```ts
285
+ readonly capture: () => Effect.Effect<CapturedSource, unknown, Scope.Scope>;
286
+ ```
287
+
288
+ Acquire a snapshot whose cleanup follows the Effect scope.
289
+
290
+ ###### Returns
291
+
292
+ `Effect.Effect`\<[`CapturedSource`](#capturedsource), `unknown`, `Scope.Scope`\>
293
+
294
+ ---
295
+
296
+ ### BuildExecutor
297
+
298
+ ```ts
299
+ type BuildExecutor = object;
300
+ ```
301
+
302
+ Compiles captured source and reads its matching declaration.
303
+
304
+ #### Properties
305
+
306
+ ##### build
307
+
308
+ ```ts
309
+ readonly build: (source, recipe) => Effect.Effect<BuildExecutorOutput, unknown, Scope.Scope>;
310
+ ```
311
+
312
+ Compile only the captured source under its pinned recipe.
313
+
314
+ ###### Parameters
315
+
316
+ | Parameter | Type |
317
+ | --------- | ----------------------------------- |
318
+ | `source` | [`CapturedSource`](#capturedsource) |
319
+ | `recipe` | [`PinnedRecipe`](#pinnedrecipe) |
320
+
321
+ ###### Returns
322
+
323
+ `Effect.Effect`\<[`BuildExecutorOutput`](#buildexecutoroutput), `unknown`,
324
+ `Scope.Scope`\>
325
+
326
+ ##### declaration?
327
+
328
+ ```ts
329
+ readonly optional declaration?: (source, recipe) => Effect.Effect<AppDeclaration, unknown>;
330
+ ```
331
+
332
+ Read the App's declaration from the same captured tree. Every App, a fork
333
+ included, declares through its own source; there is no other source.
334
+
335
+ ###### Parameters
336
+
337
+ | Parameter | Type |
338
+ | --------- | ----------------------------------- |
339
+ | `source` | [`CapturedSource`](#capturedsource) |
340
+ | `recipe` | [`PinnedRecipe`](#pinnedrecipe) |
341
+
342
+ ###### Returns
343
+
344
+ `Effect.Effect`\<`AppDeclaration`, `unknown`\>
345
+
346
+ ---
347
+
348
+ ### ArtifactWriter
349
+
350
+ ```ts
351
+ type ArtifactWriter = object;
352
+ ```
353
+
354
+ Persists one complete App build as immutable artifacts.
355
+
356
+ #### Properties
357
+
358
+ ##### write
359
+
360
+ ```ts
361
+ readonly write: (output) => Effect.Effect<StoredArtifact, unknown>;
362
+ ```
363
+
364
+ Persist the App root and return its reference and digest.
365
+
366
+ ###### Parameters
367
+
368
+ | Parameter | Type |
369
+ | --------- | ----------------------------- |
370
+ | `output` | [`BuildOutput`](#buildoutput) |
371
+
372
+ ###### Returns
373
+
374
+ `Effect.Effect`\<[`StoredArtifact`](#storedartifact), `unknown`\>
375
+
376
+ ---
377
+
378
+ ### ReleaseCreator
379
+
380
+ ```ts
381
+ type ReleaseCreator = Pick<AppReleaseCatalog, "createRelease">;
382
+ ```
383
+
384
+ Release catalog role needed to record a built candidate.
385
+
386
+ ---
387
+
388
+ ### AppPublisherOptions
389
+
390
+ ```ts
391
+ type AppPublisherOptions = Readonly<{
392
+ config: AppPublisherCoreConfigInput;
393
+ releaseCatalog: ReleaseCreator;
394
+ sourceCapture: SourceCapture;
395
+ buildExecutor: BuildExecutor;
396
+ artifactWriter: ArtifactWriter;
397
+ }>;
398
+ ```
399
+
400
+ Captured build inputs and the resource owners used to publish a candidate.
401
+
402
+ ---
403
+
404
+ ### AppPublisher
405
+
406
+ ```ts
407
+ type AppPublisher = Readonly<{
408
+ createCandidate: (releaseId) => Effect.Effect<Release, AppPublisherError>;
409
+ }>;
410
+ ```
411
+
412
+ Builds and records immutable App Release candidates.
413
+
414
+ ---
415
+
416
+ ### AppCandidatePreparer
417
+
418
+ ```ts
419
+ type AppCandidatePreparer = Readonly<{
420
+ prepareCandidate: (
421
+ releaseId,
422
+ ) => Effect.Effect<PreparedCandidate, AppPublisherError>;
423
+ }>;
424
+ ```
425
+
426
+ Builds a candidate before artifact storage and catalog publication.
427
+
428
+ ---
429
+
430
+ ### AppPublisherStage
431
+
432
+ ```ts
433
+ type AppPublisherStage =
434
+ "configuration" | "source" | "build" | "artifact" | "release";
435
+ ```
436
+
437
+ The bounded stages reported by AppPublisherError.
438
+
439
+ ---
440
+
441
+ ### CapturedConfig
442
+
443
+ ```ts
444
+ type CapturedConfig = Readonly<{
445
+ appId: AppId;
446
+ recipe: PinnedRecipe;
447
+ buildRecipeDigest: Sha256Digest;
448
+ }>;
449
+ ```
450
+
451
+ App identity and normalized recipe with its digest.
452
+
453
+ ---
454
+
455
+ ### FirstPartyAppSourceDistribution
456
+
457
+ ```ts
458
+ type FirstPartyAppSourceDistribution = Readonly<{
459
+ appId: AppId;
460
+ sourceRevision: SourceRevision;
461
+ sourceTreeDigest: ReturnType<typeof parseSha256Digest>;
462
+ appDirectory: string;
463
+ files: readonly Readonly<{
464
+ path: string;
465
+ contents: Uint8Array;
466
+ }>[];
467
+ }>;
468
+ ```
469
+
470
+ A first-party editable source tree ready to seed into an Artifacts template.
471
+
472
+ ---
473
+
474
+ ### LocalAppPublisherOptions
475
+
476
+ ```ts
477
+ type LocalAppPublisherOptions = Readonly<{
478
+ config: unknown;
479
+ releaseCatalog: ReleaseCreator;
480
+ }>;
481
+ ```
482
+
483
+ Local Git, recipe and artifact directory configuration with a Release catalog.
484
+
485
+ ---
486
+
487
+ ### WorkspaceBuildPolicy
488
+
489
+ ```ts
490
+ type WorkspaceBuildPolicy = Schema.Schema.Type<
491
+ typeof workspaceBuildPolicySchema
492
+ >;
493
+ ```
494
+
495
+ The build policy one manifest declares.
496
+
497
+ ---
498
+
499
+ ### WorkspaceBuild
500
+
501
+ ```ts
502
+ type WorkspaceBuild = Readonly<{
503
+ directory: string;
504
+ packageName: string;
505
+ react: boolean;
506
+ shellEntry?: string;
507
+ dependencies: readonly string[];
508
+ steps: readonly WorkspaceBuildStep[];
509
+ }>;
510
+ ```
511
+
512
+ One App page build derived from its manifests and package graph.
513
+
514
+ ## Variables
515
+
516
+ ### workspaceBuildStepSchema
517
+
518
+ ```ts
519
+ const workspaceBuildStepSchema: Union<
520
+ readonly [
521
+ Struct<{
522
+ kind: Literal<"typescript">;
523
+ config: String;
524
+ }>,
525
+ Struct<{
526
+ kind: Literal<"tailwind">;
527
+ input: String;
528
+ output: String;
529
+ }>,
530
+ ]
531
+ >;
532
+ ```
533
+
534
+ One captured dependency build step. Paths are relative to the captured snapshot
535
+ root. A TypeScript step compiles one config; a Tailwind step compiles one
536
+ stylesheet input into its output (the same path for an App's own stylesheet,
537
+ which compiles in place).
538
+
539
+ ---
540
+
541
+ ### pinnedRecipeSchema
542
+
543
+ ```ts
544
+ const pinnedRecipeSchema: Struct<{
545
+ kind: optional<Literals<readonly ["bundled-html", "source-html"]>>;
546
+ entry: String;
547
+ assets: optional<
548
+ Struct<{
549
+ maxManifestBytes: Number;
550
+ maxObjects: Number;
551
+ maxObjectBytes: Number;
552
+ maxTotalBytes: Number;
553
+ }>
554
+ >;
555
+ assetBase: optionalKey<String>;
556
+ backend: Union<
557
+ readonly [
558
+ Null,
559
+ Struct<{
560
+ entry: optional<String>;
561
+ runtime: Struct<{
562
+ kind: Literal<"durable-facet">;
563
+ stateSchema: Number;
564
+ }>;
565
+ compatibilityDate: String;
566
+ exportName: String;
567
+ }>,
568
+ ]
569
+ >;
570
+ maxOutputBytes: Number;
571
+ }>;
572
+ ```
573
+
574
+ Canonical recipe policy shared by core and the local adapter.
575
+
576
+ ---
577
+
578
+ ### AppPublisherCoreConfigSchema
579
+
580
+ ```ts
581
+ const AppPublisherCoreConfigSchema: Struct<{
582
+ appId: refine<AppId, String>;
583
+ recipe: Struct<{
584
+ kind: optional<Literals<readonly ["bundled-html", "source-html"]>>;
585
+ entry: String;
586
+ assets: optional<Struct<{
587
+ maxManifestBytes: Number;
588
+ maxObjects: Number;
589
+ maxObjectBytes: Number;
590
+ maxTotalBytes: Number;
591
+ }>>;
592
+ assetBase: optionalKey<String>;
593
+ backend: Union<readonly [Null, Struct<{
594
+ entry: optional<String>;
595
+ runtime: Struct<{
596
+ kind: Literal<...>;
597
+ stateSchema: Number;
598
+ }>;
599
+ compatibilityDate: String;
600
+ exportName: String;
601
+ }>]>;
602
+ maxOutputBytes: Number;
603
+ }>;
604
+ }>;
605
+ ```
606
+
607
+ Core configuration contains only immutable App identity and recipe policy.
608
+
609
+ ---
610
+
611
+ ### appBackendExportConditions
612
+
613
+ ```ts
614
+ const appBackendExportConditions: readonly string[];
615
+ ```
616
+
617
+ Package-export conditions used by the pinned Workers builder.
618
+
619
+ ---
620
+
621
+ ### capturedPinnedRecipeSchema
622
+
623
+ ```ts
624
+ const capturedPinnedRecipeSchema: Struct<{
625
+ kind: optional<Literals<readonly ["bundled-html", "source-html"]>>;
626
+ bundle: Literal<true>;
627
+ entry: String;
628
+ format: Literals<readonly ["html", "esm", "assets"]>;
629
+ assets: optional<
630
+ Struct<{
631
+ maxManifestBytes: Number;
632
+ maxObjects: Number;
633
+ maxObjectBytes: Number;
634
+ maxTotalBytes: Number;
635
+ }>
636
+ >;
637
+ assetBase: optionalKey<String>;
638
+ toolchain: $Record<String, String>;
639
+ maxOutputBytes: Number;
640
+ platform: Literals<readonly ["browser", "neutral"]>;
641
+ backend: Union<
642
+ readonly [
643
+ Null,
644
+ Struct<{
645
+ entry: optional<String>;
646
+ runtime: Struct<{
647
+ kind: Literal<"durable-facet">;
648
+ stateSchema: Number;
649
+ }>;
650
+ compatibilityDate: String;
651
+ exportName: String;
652
+ }>,
653
+ ]
654
+ >;
655
+ target: Tuple<readonly [Literal<"es2022">]>;
656
+ }>;
657
+ ```
658
+
659
+ Persisted, fully resolved recipe including its code-owned toolchain.
660
+
661
+ ---
662
+
663
+ ### bundledHtmlRecipe
664
+
665
+ ```ts
666
+ const bundledHtmlRecipe: Readonly<{
667
+ kind: "bundled-html";
668
+ toolchain: Readonly<{
669
+ recipe: "captured-bundled-html-v1";
670
+ }>;
671
+ limits: Readonly<{
672
+ maxManifestBytes: 1048576;
673
+ maxObjects: 1024;
674
+ maxObjectBytes: 16777216;
675
+ maxTotalBytes: 67108864;
676
+ }>;
677
+ extensions: readonly string[];
678
+ }>;
679
+ ```
680
+
681
+ Engine/toolchain-independent input: an already bundled, captured directory. The
682
+ producer owns compilation; Publisher never discovers its build scripts. These
683
+ ceilings cannot be raised by a publication request.
684
+
685
+ ---
686
+
687
+ ### dependencyBuildProgram
688
+
689
+ ```ts
690
+ const dependencyBuildProgram: string;
691
+ ```
692
+
693
+ Captured-dependency build program with guarded filesystem access.
694
+
695
+ ---
696
+
697
+ ### workspaceBuildPolicySchema
698
+
699
+ ```ts
700
+ const workspaceBuildPolicySchema: Struct<{
701
+ react: optional<Boolean>;
702
+ shellEntry: optional<String>;
703
+ packageStylesheets: optional<$Array<String>>;
704
+ stylesheets: optional<$Array<String>>;
705
+ typescript: optional<$Array<String>>;
706
+ stylesheet: optional<
707
+ Struct<{
708
+ input: String;
709
+ output: String;
710
+ }>
711
+ >;
712
+ }>;
713
+ ```
714
+
715
+ `package.json#fungi.build`. An App manifest (the manifest nearest the entry)
716
+ declares how its page builds: `react`, `shellEntry`, the workspace packages
717
+ whose declared stylesheets compile first (`packageStylesheets`) and its own
718
+ `stylesheets`, compiled in place, in order. A workspace package declares its
719
+ build products: extra TypeScript configs compiled after its
720
+ `tsconfig.build.json`, and its stylesheet input and output. Every path is
721
+ relative to the manifest that declares it.
722
+
723
+ ---
724
+
725
+ ### workspaceProjectsArguments
726
+
727
+ ```ts
728
+ const workspaceProjectsArguments: readonly string[];
729
+ ```
730
+
731
+ The pnpm arguments that list a source tree's workspace projects.
732
+
733
+ ## Functions
734
+
735
+ ### readBundledHtml()
736
+
737
+ ```ts
738
+ function readBundledHtml(
739
+ snapshot,
740
+ recipe,
741
+ ): Promise<
742
+ Readonly<{
743
+ kind: "assets";
744
+ base: string;
745
+ assets: readonly object[];
746
+ }>
747
+ >;
748
+ ```
749
+
750
+ Read only regular files under the captured entry's directory. No scripts,
751
+ dependency hydration, URL rewriting, or access to the producer's live build.
752
+
753
+ #### Parameters
754
+
755
+ | Parameter | Type |
756
+ | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
757
+ | `snapshot` | `string` |
758
+ | `recipe` | \{ `kind?`: `"bundled-html"` \| `"source-html"`; `bundle`: `true`; `entry`: `string`; `format`: `"html"` \| `"assets"` \| `"esm"`; `assets?`: \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \}; `assetBase?`: `string`; `toolchain`: \{ \[`key`: `string`\]: `string`; \}; `maxOutputBytes`: `number`; `platform`: `"browser"` \| `"neutral"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} |
759
+ | `recipe.kind?` | `"bundled-html"` \| `"source-html"` |
760
+ | `recipe.bundle` | `true` |
761
+ | `recipe.entry` | `string` |
762
+ | `recipe.format` | `"html"` \| `"assets"` \| `"esm"` |
763
+ | `recipe.assets?` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \} |
764
+ | `recipe.assets.maxManifestBytes` | `number` |
765
+ | `recipe.assets.maxObjects` | `number` |
766
+ | `recipe.assets.maxObjectBytes` | `number` |
767
+ | `recipe.assets.maxTotalBytes` | `number` |
768
+ | `recipe.assetBase?` | `string` |
769
+ | `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} |
770
+ | `recipe.maxOutputBytes` | `number` |
771
+ | `recipe.platform` | `"browser"` \| `"neutral"` |
772
+ | `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` |
773
+ | `recipe.target` | readonly \[`"es2022"`\] |
774
+
775
+ #### Returns
776
+
777
+ `Promise`\<`Readonly`\<\{ `kind`: `"assets"`; `base`: `string`; `assets`:
778
+ readonly `object`[]; \}\>\>
779
+
780
+ ---
781
+
782
+ ### createDefinitionEmission()
783
+
784
+ ```ts
785
+ function createDefinitionEmission(source, recipe): Promise<{
786
+ entryPoints: (entry) => Record<string, string>;
787
+ outdir: string;
788
+ plugins: Plugin[];
789
+ worker: AppBackendOutput;
790
+ declare: Promise<Readonly<{
791
+ api?: Readonly<{
792
+ methods: Readonly<Record<string, Readonly<...>>>;
793
+ toolFamily?: Readonly<{
794
+ name: ...;
795
+ list: ...;
796
+ call: ...;
797
+ }>;
798
+ events?: Readonly<Record<..., ...>>;
799
+ }>;
800
+ displayName?: string;
801
+ capabilities: readonly (
802
+ | "agent.list"
803
+ | "agent.manage"
804
+ | "agent.rename"
805
+ | "agent.toolPolicy"
806
+ | "agent.read"
807
+ | "agent.send"
808
+ | "computer.list"
809
+ | "computer.readFile"
810
+ | "computer.writeFile"
811
+ | "computer.execute"
812
+ | "llm.generation"
813
+ | "media.generation"
814
+ | "games:servers"
815
+ | "git.repository"
816
+ | "apps.open"
817
+ | "apps.call"
818
+ | "app.storage"
819
+ | "app.events.emit"
820
+ | "team.workbenchHost"
821
+ | "marketplace.browse"
822
+ | "marketplace.purchase"
823
+ | "workflow.run"
824
+ | "workflow.publish"
825
+ | "workflow.arm"
826
+ | "world"
827
+ | "channels.read"
828
+ | "channels.personal.manage")[];
829
+ calls?: readonly Readonly<{
830
+ appId: string;
831
+ methods: readonly string[];
832
+ }>[];
833
+ guidance?: string;
834
+ handlers: readonly "file.open"[];
835
+ receives?: readonly "git.push"[];
836
+ icon?: string;
837
+ roles: readonly ("dashboard" | "inbox" | "files" | "media" | "sessions" | "terminal")[];
838
+ storage?: readonly Readonly<{
839
+ key: string;
840
+ scopes: readonly (... | ...)[];
841
+ maxBytes: number;
842
+ }>[];
843
+ commands?: readonly Readonly<{
844
+ id: string;
845
+ title: string;
846
+ category: string;
847
+ description?: string;
848
+ sigil?: string;
849
+ projections?: Readonly<...>;
850
+ }>[];
851
+ gills?: readonly Readonly<{
852
+ id: string;
853
+ source: string;
854
+ title: string;
855
+ params?: readonly ...[];
856
+ watch?: AppGillWatch;
857
+ desktop?: Readonly<...>;
858
+ }>[];
859
+ backend?: Readonly<{
860
+ bindings: readonly Readonly<{
861
+ name: ...;
862
+ operations: ...;
863
+ }>[];
864
+ sync?: Readonly<{
865
+ method: ...;
866
+ }>;
867
+ }>;
868
+ }>>;
869
+ }>;
870
+ ```
871
+
872
+ Build one App backend and derive its declaration from that same build.
873
+
874
+ A declared `fungi.backendDefinition` adds a second, build-only entry that
875
+ derives the declaration with `buildAppDeclaration(appBackend, fungi.app)`.
876
+ esbuild loads every path and resolves every import once per build, so the Worker
877
+ serves exactly the definition bytes and module resolution the declaration
878
+ describes. The Worker output is then checked to include that definition and no
879
+ build-only declaration code, and the declaration output to import nothing at
880
+ runtime.
881
+
882
+ #### Parameters
883
+
884
+ | Parameter | Type |
885
+ | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
886
+ | `source` | [`CapturedSource`](#capturedsource) |
887
+ | `recipe` | \{ `kind?`: `"bundled-html"` \| `"source-html"`; `bundle`: `true`; `entry`: `string`; `format`: `"html"` \| `"assets"` \| `"esm"`; `assets?`: \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \}; `assetBase?`: `string`; `toolchain`: \{ \[`key`: `string`\]: `string`; \}; `maxOutputBytes`: `number`; `platform`: `"browser"` \| `"neutral"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} |
888
+ | `recipe.kind?` | `"bundled-html"` \| `"source-html"` |
889
+ | `recipe.bundle` | `true` |
890
+ | `recipe.entry` | `string` |
891
+ | `recipe.format` | `"html"` \| `"assets"` \| `"esm"` |
892
+ | `recipe.assets?` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \} |
893
+ | `recipe.assets.maxManifestBytes` | `number` |
894
+ | `recipe.assets.maxObjects` | `number` |
895
+ | `recipe.assets.maxObjectBytes` | `number` |
896
+ | `recipe.assets.maxTotalBytes` | `number` |
897
+ | `recipe.assetBase?` | `string` |
898
+ | `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} |
899
+ | `recipe.maxOutputBytes` | `number` |
900
+ | `recipe.platform` | `"browser"` \| `"neutral"` |
901
+ | `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` |
902
+ | `recipe.target` | readonly \[`"es2022"`\] |
903
+
904
+ #### Returns
905
+
906
+ `Promise`\<\{ `entryPoints`: (`entry`) => `Record`\<`string`, `string`\>;
907
+ `outdir`: `string`; `plugins`: `Plugin`[]; `worker`:
908
+ [`AppBackendOutput`](#appbackendoutput); `declare`: `Promise`\<`Readonly`\<\{
909
+ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<`string`,
910
+ `Readonly`\<...\>\>\>; `toolFamily?`: `Readonly`\<\{ `name`: ...; `list`: ...;
911
+ `call`: ...; \}\>; `events?`: `Readonly`\<`Record`\<..., ...\>\>; \}\>;
912
+ `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \|
913
+ `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"`
914
+ \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \|
915
+ `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \|
916
+ `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"`
917
+ \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \|
918
+ `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \|
919
+ `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \|
920
+ `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly
921
+ `Readonly`\<\{ `appId`: `string`; `methods`: readonly `string`[]; \}\>[];
922
+ `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`:
923
+ readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \|
924
+ `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[];
925
+ `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly (... \|
926
+ ...)[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`:
927
+ `string`; `title`: `string`; `category`: `string`; `description?`: `string`;
928
+ `sigil?`: `string`; `projections?`: `Readonly`\<...\>; \}\>[]; `gills?`:
929
+ readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`;
930
+ `params?`: readonly ...[]; `watch?`: `AppGillWatch`; `desktop?`:
931
+ `Readonly`\<...\>; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly
932
+ `Readonly`\<\{ `name`: ...; `operations`: ...; \}\>[]; `sync?`: `Readonly`\<\{
933
+ `method`: ...; \}\>; \}\>; \}\>\>; \}\>
934
+
935
+ ---
936
+
937
+ ### digestPinnedRecipe()
938
+
939
+ ```ts
940
+ function digestPinnedRecipe(recipe): Sha256Digest;
941
+ ```
942
+
943
+ Hash every captured build and output-policy input in the Publisher recipe.
944
+
945
+ #### Parameters
946
+
947
+ | Parameter | Type |
948
+ | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
949
+ | `recipe` | \{ `kind?`: `"bundled-html"` \| `"source-html"`; `bundle`: `true`; `entry`: `string`; `format`: `"html"` \| `"assets"` \| `"esm"`; `assets?`: \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \}; `assetBase?`: `string`; `toolchain`: \{ \[`key`: `string`\]: `string`; \}; `maxOutputBytes`: `number`; `platform`: `"browser"` \| `"neutral"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} |
950
+ | `recipe.kind?` | `"bundled-html"` \| `"source-html"` |
951
+ | `recipe.bundle` | `true` |
952
+ | `recipe.entry` | `string` |
953
+ | `recipe.format` | `"html"` \| `"assets"` \| `"esm"` |
954
+ | `recipe.assets?` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \} |
955
+ | `recipe.assets.maxManifestBytes` | `number` |
956
+ | `recipe.assets.maxObjects` | `number` |
957
+ | `recipe.assets.maxObjectBytes` | `number` |
958
+ | `recipe.assets.maxTotalBytes` | `number` |
959
+ | `recipe.assetBase?` | `string` |
960
+ | `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} |
961
+ | `recipe.maxOutputBytes` | `number` |
962
+ | `recipe.platform` | `"browser"` \| `"neutral"` |
963
+ | `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` |
964
+ | `recipe.target` | readonly \[`"es2022"`\] |
965
+
966
+ #### Returns
967
+
968
+ `Sha256Digest`
969
+
970
+ ---
971
+
972
+ ### normalizeAppPublisherRecipe()
973
+
974
+ ```ts
975
+ function normalizeAppPublisherRecipe(input): Readonly<{
976
+ recipe: PinnedRecipe;
977
+ buildRecipeDigest: Sha256Digest;
978
+ }>;
979
+ ```
980
+
981
+ Decode and normalize Publisher-owned recipe policy for durable seed proof.
982
+
983
+ #### Parameters
984
+
985
+ | Parameter | Type |
986
+ | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
987
+ | `input` | \{ `appId`: `string`; `recipe`: \{ `kind?`: `"bundled-html"` \| `"source-html"`; `entry`: `string`; `assets?`: \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \}; `assetBase?`: `string`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `maxOutputBytes`: `number`; \}; \} |
988
+ | `input.appId` | `string` |
989
+ | `input.recipe` | \{ `kind?`: `"bundled-html"` \| `"source-html"`; `entry`: `string`; `assets?`: \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \}; `assetBase?`: `string`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `maxOutputBytes`: `number`; \} |
990
+ | `input.recipe.kind?` | `"bundled-html"` \| `"source-html"` |
991
+ | `input.recipe.entry` | `string` |
992
+ | `input.recipe.assets?` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \} |
993
+ | `input.recipe.assets.maxManifestBytes` | `number` |
994
+ | `input.recipe.assets.maxObjects` | `number` |
995
+ | `input.recipe.assets.maxObjectBytes` | `number` |
996
+ | `input.recipe.assets.maxTotalBytes` | `number` |
997
+ | `input.recipe.assetBase?` | `string` |
998
+ | `input.recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` |
999
+ | `input.recipe.maxOutputBytes` | `number` |
1000
+
1001
+ #### Returns
1002
+
1003
+ `Readonly`\<\{ `recipe`: [`PinnedRecipe`](#pinnedrecipe); `buildRecipeDigest`:
1004
+ `Sha256Digest`; \}\>
1005
+
1006
+ ---
1007
+
1008
+ ### createAppCandidatePreparer()
1009
+
1010
+ ```ts
1011
+ function createAppCandidatePreparer(options): AppCandidatePreparer;
1012
+ ```
1013
+
1014
+ Construct one private App Publisher with copied core configuration and roles.
1015
+
1016
+ #### Parameters
1017
+
1018
+ | Parameter | Type |
1019
+ | --------- | ------------------------------------------------------------------------------------------------------------- |
1020
+ | `options` | `Pick`\<[`AppPublisherOptions`](#apppublisheroptions), `"config"` \| `"sourceCapture"` \| `"buildExecutor"`\> |
1021
+
1022
+ #### Returns
1023
+
1024
+ [`AppCandidatePreparer`](#appcandidatepreparer)
1025
+
1026
+ ---
1027
+
1028
+ ### createCapturedCandidatePreparer()
1029
+
1030
+ ```ts
1031
+ function createCapturedCandidatePreparer(config, options): AppCandidatePreparer;
1032
+ ```
1033
+
1034
+ Prepare a candidate from a previously captured recipe.
1035
+
1036
+ #### Parameters
1037
+
1038
+ | Parameter | Type |
1039
+ | --------- | ----------------------------------------------------------------------------------------------- |
1040
+ | `config` | [`CapturedConfig`](#capturedconfig) |
1041
+ | `options` | `Pick`\<[`AppPublisherOptions`](#apppublisheroptions), `"sourceCapture"` \| `"buildExecutor"`\> |
1042
+
1043
+ #### Returns
1044
+
1045
+ [`AppCandidatePreparer`](#appcandidatepreparer)
1046
+
1047
+ ---
1048
+
1049
+ ### commitPreparedCandidate()
1050
+
1051
+ ```ts
1052
+ function commitPreparedCandidate(
1053
+ prepared,
1054
+ options,
1055
+ ): Effect<Release, AppPublisherError>;
1056
+ ```
1057
+
1058
+ Persist a prepared build through the native artifact and App Release owners.
1059
+
1060
+ #### Parameters
1061
+
1062
+ | Parameter | Type |
1063
+ | ---------- | ------------------------------------------------------------------------------------------------- |
1064
+ | `prepared` | [`PreparedCandidate`](#preparedcandidate) |
1065
+ | `options` | `Pick`\<[`AppPublisherOptions`](#apppublisheroptions), `"artifactWriter"` \| `"releaseCatalog"`\> |
1066
+
1067
+ #### Returns
1068
+
1069
+ `Effect`\<`Release`, [`AppPublisherError`](#apppublishererror)\>
1070
+
1071
+ ---
1072
+
1073
+ ### createAppPublisher()
1074
+
1075
+ ```ts
1076
+ function createAppPublisher(options): AppPublisher;
1077
+ ```
1078
+
1079
+ Compose capture, compilation, immutable writing and Release recording.
1080
+
1081
+ #### Parameters
1082
+
1083
+ | Parameter | Type |
1084
+ | --------- | --------------------------------------------- |
1085
+ | `options` | [`AppPublisherOptions`](#apppublisheroptions) |
1086
+
1087
+ #### Returns
1088
+
1089
+ [`AppPublisher`](#apppublisher)
1090
+
1091
+ ---
1092
+
1093
+ ### repositoryEnvironment()
1094
+
1095
+ ```ts
1096
+ function repositoryEnvironment(): ProcessEnv;
1097
+ ```
1098
+
1099
+ Run a nested repository without inheriting the caller's Git checkout.
1100
+
1101
+ #### Returns
1102
+
1103
+ `ProcessEnv`
1104
+
1105
+ ---
1106
+
1107
+ ### artifactsGitEnvironment()
1108
+
1109
+ ```ts
1110
+ function artifactsGitEnvironment(token): ProcessEnv;
1111
+ ```
1112
+
1113
+ Git environment for one authenticated Artifacts fetch; caller validates token.
1114
+
1115
+ #### Parameters
1116
+
1117
+ | Parameter | Type |
1118
+ | --------- | -------- |
1119
+ | `token` | `string` |
1120
+
1121
+ #### Returns
1122
+
1123
+ `ProcessEnv`
1124
+
1125
+ ---
1126
+
1127
+ ### hostedArtifactsGitRemote()
1128
+
1129
+ ```ts
1130
+ function hostedArtifactsGitRemote(endpoint, repository): string;
1131
+ ```
1132
+
1133
+ Credential-free private route used by the hosted Publisher Git client.
1134
+
1135
+ #### Parameters
1136
+
1137
+ | Parameter | Type |
1138
+ | ------------ | -------- |
1139
+ | `endpoint` | `string` |
1140
+ | `repository` | `string` |
1141
+
1142
+ #### Returns
1143
+
1144
+ `string`
1145
+
1146
+ ---
1147
+
1148
+ ### boundedBundlePolicy()
1149
+
1150
+ ```ts
1151
+ function boundedBundlePolicy(policy, maxOutputBytes): boolean;
1152
+ ```
1153
+
1154
+ Requests may tighten the catalog bounds, never raise them.
1155
+
1156
+ #### Parameters
1157
+
1158
+ | Parameter | Type |
1159
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------ |
1160
+ | `policy` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \} |
1161
+ | `policy.maxManifestBytes` | `number` |
1162
+ | `policy.maxObjects` | `number` |
1163
+ | `policy.maxObjectBytes` | `number` |
1164
+ | `policy.maxTotalBytes` | `number` |
1165
+ | `maxOutputBytes` | `number` |
1166
+
1167
+ #### Returns
1168
+
1169
+ `boolean`
1170
+
1171
+ ---
1172
+
1173
+ ### createLocalSourceCapture()
1174
+
1175
+ ```ts
1176
+ function createLocalSourceCapture(repositoryPath): SourceCapture;
1177
+ ```
1178
+
1179
+ Local proving adapter; accepted source policy is intentionally fixed to main.
1180
+
1181
+ #### Parameters
1182
+
1183
+ | Parameter | Type |
1184
+ | ---------------- | -------- |
1185
+ | `repositoryPath` | `string` |
1186
+
1187
+ #### Returns
1188
+
1189
+ [`SourceCapture`](#sourcecapture)
1190
+
1191
+ ---
1192
+
1193
+ ### createLocalDirectorySourceCapture()
1194
+
1195
+ ```ts
1196
+ function createLocalDirectorySourceCapture(directory): SourceCapture;
1197
+ ```
1198
+
1199
+ Capture saved App files for local authoring without modifying the customer's
1200
+ repository. Provenance names the exact temporary Git snapshot, not an existing
1201
+ customer commit. Dependencies and local credentials are not source inputs.
1202
+
1203
+ #### Parameters
1204
+
1205
+ | Parameter | Type |
1206
+ | ----------- | -------- |
1207
+ | `directory` | `string` |
1208
+
1209
+ #### Returns
1210
+
1211
+ [`SourceCapture`](#sourcecapture)
1212
+
1213
+ ---
1214
+
1215
+ ### createArtifactsSourceCapture()
1216
+
1217
+ ```ts
1218
+ function createArtifactsSourceCapture(options): SourceCapture;
1219
+ ```
1220
+
1221
+ Capture an exact Artifacts commit through a trusted host's credential-free Git
1222
+ URL.
1223
+
1224
+ #### Parameters
1225
+
1226
+ | Parameter | Type |
1227
+ | ------------------------ | -------------------------------------------------------------------------------- |
1228
+ | `options` | \{ `remote`: `string`; `token`: `string`; `sourceRevision`: `SourceRevision`; \} |
1229
+ | `options.remote` | `string` |
1230
+ | `options.token` | `string` |
1231
+ | `options.sourceRevision` | `SourceRevision` |
1232
+
1233
+ #### Returns
1234
+
1235
+ [`SourceCapture`](#sourcecapture)
1236
+
1237
+ ---
1238
+
1239
+ ### createLocalCommitSourceCapture()
1240
+
1241
+ ```ts
1242
+ function createLocalCommitSourceCapture(
1243
+ repositoryPath,
1244
+ sourceRevision,
1245
+ ): SourceCapture;
1246
+ ```
1247
+
1248
+ Capture one explicit committed revision without manufacturing a branch.
1249
+
1250
+ #### Parameters
1251
+
1252
+ | Parameter | Type |
1253
+ | ---------------- | ---------------- |
1254
+ | `repositoryPath` | `string` |
1255
+ | `sourceRevision` | `SourceRevision` |
1256
+
1257
+ #### Returns
1258
+
1259
+ [`SourceCapture`](#sourcecapture)
1260
+
1261
+ ---
1262
+
1263
+ ### createFirstPartyAppSourceDistribution()
1264
+
1265
+ ```ts
1266
+ function createFirstPartyAppSourceDistribution(options): Effect<
1267
+ Readonly<{
1268
+ appId: AppId;
1269
+ sourceRevision: SourceRevision;
1270
+ sourceTreeDigest: Sha256Digest;
1271
+ appDirectory: string;
1272
+ files: readonly Readonly<{
1273
+ path: string;
1274
+ contents: Uint8Array;
1275
+ }>[];
1276
+ }>,
1277
+ unknown
1278
+ >;
1279
+ ```
1280
+
1281
+ Project one pinned first-party App and its pnpm workspace dependency graph
1282
+ without changing upstream files or manufacturing Git history. The caller records
1283
+ the returned provenance on the Artifacts template seed commit.
1284
+
1285
+ #### Parameters
1286
+
1287
+ | Parameter | Type |
1288
+ | ---------------- | ------------------------------------------------------------------------------------------ |
1289
+ | `options` | \{ `appId`: `string`; `source`: [`CapturedSource`](#capturedsource); `entry`: `string`; \} |
1290
+ | `options.appId` | `string` |
1291
+ | `options.source` | [`CapturedSource`](#capturedsource) |
1292
+ | `options.entry` | `string` |
1293
+
1294
+ #### Returns
1295
+
1296
+ `Effect`\<`Readonly`\<\{ `appId`: `AppId`; `sourceRevision`: `SourceRevision`;
1297
+ `sourceTreeDigest`: `Sha256Digest`; `appDirectory`: `string`; `files`: readonly
1298
+ `Readonly`\<\{ `path`: `string`; `contents`: `Uint8Array`; \}\>[]; \}\>,
1299
+ `unknown`\>
1300
+
1301
+ ---
1302
+
1303
+ ### localSnapshotBuildOptions()
1304
+
1305
+ ```ts
1306
+ function localSnapshotBuildOptions(source, recipe, emission): BuildOptions;
1307
+ ```
1308
+
1309
+ Exact pinned esbuild options shared by local builds and artifact-budget proofs.
1310
+
1311
+ #### Parameters
1312
+
1313
+ | Parameter | Type | Description |
1314
+ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
1315
+ | `source` | [`CapturedSource`](#capturedsource) | - |
1316
+ | `recipe` | \{ `kind?`: `"bundled-html"` \| `"source-html"`; `bundle`: `true`; `entry`: `string`; `format`: `"html"` \| `"assets"` \| `"esm"`; `assets?`: \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \}; `assetBase?`: `string`; `toolchain`: \{ \[`key`: `string`\]: `string`; \}; `maxOutputBytes`: `number`; `platform`: `"browser"` \| `"neutral"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} | - |
1317
+ | `recipe.kind?` | `"bundled-html"` \| `"source-html"` | - |
1318
+ | `recipe.bundle` | `true` | - |
1319
+ | `recipe.entry` | `string` | - |
1320
+ | `recipe.format` | `"html"` \| `"assets"` \| `"esm"` | - |
1321
+ | `recipe.assets?` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \} | - |
1322
+ | `recipe.assets.maxManifestBytes` | `number` | - |
1323
+ | `recipe.assets.maxObjects` | `number` | - |
1324
+ | `recipe.assets.maxObjectBytes` | `number` | - |
1325
+ | `recipe.assets.maxTotalBytes` | `number` | - |
1326
+ | `recipe.assetBase?` | `string` | - |
1327
+ | `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} | - |
1328
+ | `recipe.maxOutputBytes` | `number` | - |
1329
+ | `recipe.platform` | `"browser"` \| `"neutral"` | - |
1330
+ | `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` | - |
1331
+ | `recipe.target` | readonly \[`"es2022"`\] | - |
1332
+ | `emission` | \{ `entryPoints`: (`entry`) => `Record`\<`string`, `string`\>; `outdir`: `string`; `plugins`: `Plugin`[]; `worker`: [`AppBackendOutput`](#appbackendoutput); `declare`: `Promise`\<`Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<`string`, `Readonly`\<\{ `description`: ...; `input`: ...; `output`: ...; `effect`: ...; `requires`: ...; `pending?`: ...; `hidden?`: ...; `anonymous?`: ...; \}\>\>\>; `toolFamily?`: `Readonly`\<\{ `name`: `string`; `list`: `string`; `call`: `string`; \}\>; `events?`: `Readonly`\<`Record`\<`string`, `Readonly`\<...\>\>\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"apps.open"` \| `"apps.call"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `calls?`: readonly `Readonly`\<\{ `appId`: `string`; `methods`: readonly `string`[]; \}\>[]; `guidance?`: `string`; `handlers`: readonly `"file.open"`[]; `receives?`: readonly `"git.push"`[]; `icon?`: `string`; `roles`: readonly (`"dashboard"` \| `"inbox"` \| `"files"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly (`"team"` \| `"member"`)[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: `string`; `sigil?`: `string`; `projections?`: `Readonly`\<\{ `bindings?`: ...; `agent?`: ...; `help?`: ...; `menu?`: ...; `palette?`: ...; `slash?`: ...; \}\>; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: readonly `Readonly`\<...\>[]; `watch?`: `AppGillWatch`; `desktop?`: `Readonly`\<\{ `sizes`: ...; \}\>; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<\{ `name`: ... \| ... \| ... \| ... \| ... \| ... \| ... \| ... \| ... \| ...; `operations`: readonly ...[]; \}\>[]; `sync?`: `Readonly`\<\{ `method`: `string`; \}\>; \}\>; \}\>\>; \} | - |
1333
+ | `emission.entryPoints` | (`entry`) => `Record`\<`string`, `string`\> | Entries for the one backend build: the Worker and, if defined, its declaration. |
1334
+ | `emission.outdir` | `string` | - |
1335
+ | `emission.plugins` | `Plugin`[] | - |
1336
+ | `emission.worker` | - |
1337
+ | `emission.declare` | - |
1338
+
1339
+ #### Returns
1340
+
1341
+ `BuildOptions`
1342
+
1343
+ ---
1344
+
1345
+ ### createLocalBuildExecutor()
1346
+
1347
+ ```ts
1348
+ function createLocalBuildExecutor(options?): BuildExecutor;
1349
+ ```
1350
+
1351
+ Local proving adapter; it builds only the captured extracted snapshot.
1352
+
1353
+ #### Parameters
1354
+
1355
+ | Parameter | Type |
1356
+ | --------- | ------------------------------------------------------- |
1357
+ | `options` | `Readonly`\<\{ `packageStoreDirectory?`: `string`; \}\> |
1358
+
1359
+ #### Returns
1360
+
1361
+ [`BuildExecutor`](#buildexecutor)
1362
+
1363
+ ---
1364
+
1365
+ ### createLocalArtifactWriter()
1366
+
1367
+ ```ts
1368
+ function createLocalArtifactWriter(artifactRoot, assetPolicy?): ArtifactWriter;
1369
+ ```
1370
+
1371
+ Local proving adapter; the configured root is private and write-once.
1372
+
1373
+ #### Parameters
1374
+
1375
+ | Parameter | Type |
1376
+ | ------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
1377
+ | `artifactRoot` | `string` |
1378
+ | `assetPolicy?` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \} |
1379
+ | `assetPolicy.maxManifestBytes?` | `number` |
1380
+ | `assetPolicy.maxObjects?` | `number` |
1381
+ | `assetPolicy.maxObjectBytes?` | `number` |
1382
+ | `assetPolicy.maxTotalBytes?` | `number` |
1383
+
1384
+ #### Returns
1385
+
1386
+ [`ArtifactWriter`](#artifactwriter)
1387
+
1388
+ ---
1389
+
1390
+ ### createLocalAppPublisher()
1391
+
1392
+ ```ts
1393
+ function createLocalAppPublisher(options): AppPublisher;
1394
+ ```
1395
+
1396
+ Construct the complete local proving adapter around the provider-neutral core.
1397
+
1398
+ #### Parameters
1399
+
1400
+ | Parameter | Type |
1401
+ | --------- | ------------------------------------------------------- |
1402
+ | `options` | [`LocalAppPublisherOptions`](#localapppublisheroptions) |
1403
+
1404
+ #### Returns
1405
+
1406
+ [`AppPublisher`](#apppublisher)
1407
+
1408
+ ---
1409
+
1410
+ ### frozenSnapshotInstallArguments()
1411
+
1412
+ ```ts
1413
+ function frozenSnapshotInstallArguments(packageStoreDirectory?): string[];
1414
+ ```
1415
+
1416
+ Frozen hydration policy. Cached bytes are verified and copied into each
1417
+ snapshot.
1418
+
1419
+ #### Parameters
1420
+
1421
+ | Parameter | Type |
1422
+ | ------------------------ | -------- |
1423
+ | `packageStoreDirectory?` | `string` |
1424
+
1425
+ #### Returns
1426
+
1427
+ `string`[]
1428
+
1429
+ ---
1430
+
1431
+ ### resolveWorkspaceBuild()
1432
+
1433
+ ```ts
1434
+ function resolveWorkspaceBuild(options): Promise<
1435
+ Readonly<{
1436
+ directory: string;
1437
+ packageName: string;
1438
+ react: boolean;
1439
+ shellEntry?: string;
1440
+ dependencies: readonly string[];
1441
+ steps: readonly (
1442
+ | {
1443
+ kind: "typescript";
1444
+ config: string;
1445
+ }
1446
+ | {
1447
+ kind: "tailwind";
1448
+ input: string;
1449
+ output: string;
1450
+ }
1451
+ )[];
1452
+ }>
1453
+ >;
1454
+ ```
1455
+
1456
+ Derive one App's page build from the captured source alone: the manifest nearest
1457
+ `entry` declares the App policy, the owning pnpm workspace's runtime
1458
+ `workspace:` dependencies give the compile order, and each dependency's manifest
1459
+ declares its own extra build products.
1460
+
1461
+ #### Parameters
1462
+
1463
+ | Parameter | Type | Description |
1464
+ | ------------------ | ---------------------------------------------------------------- | --------------------------------------------------------------- |
1465
+ | `options` | \{ `root`: `string`; `entry`: `string`; `projects`: `string`; \} | - |
1466
+ | `options.root` | `string` | - |
1467
+ | `options.entry` | `string` | - |
1468
+ | `options.projects` | `string` | `pnpm ls -r --depth -1 --json` output for the same source tree. |
1469
+
1470
+ #### Returns
1471
+
1472
+ `Promise`\<`Readonly`\<\{ `directory`: `string`; `packageName`: `string`;
1473
+ `react`: `boolean`; `shellEntry?`: `string`; `dependencies`: readonly
1474
+ `string`[]; `steps`: readonly ( \| \{ `kind`: `"typescript"`; `config`:
1475
+ `string`; \} \| \{ `kind`: `"tailwind"`; `input`: `string`; `output`: `string`;
1476
+ \})[]; \}\>\>