@fungi.computer/oyster 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +133 -78
- package/dist/agent-archive-projection.d.ts +8 -0
- package/dist/agent-archive-projection.js +49 -0
- package/dist/agent-schedules.d.ts +61 -0
- package/dist/agent-schedules.js +19 -0
- package/dist/agents.d.ts +35 -14
- package/dist/agents.js +93 -144
- package/dist/app-builds.d.ts +7 -2
- package/dist/app-builds.js +19 -2
- package/dist/approval-capability.d.ts +1 -1
- package/dist/approval-capability.js +11 -16
- package/dist/approval-home.d.ts +2 -1
- package/dist/approval-home.js +5 -3
- package/dist/apps/catalog.js +1 -1
- package/dist/apps/gate.d.ts +4 -7
- package/dist/apps/gate.js +14 -29
- package/dist/apps/index.d.ts +1 -1
- package/dist/apps/installation.d.ts +4 -42
- package/dist/apps/installation.js +7 -75
- package/dist/apps/operations.js +0 -10
- package/dist/apps/permissions.d.ts +18 -8
- package/dist/apps/permissions.js +7 -1
- package/dist/auth.d.ts +1 -24
- package/dist/auth.js +9 -39
- package/dist/authorization.d.ts +307 -0
- package/dist/authorization.js +542 -0
- package/dist/boot-host-script.js +1 -1
- package/dist/build/build-jobs.d.ts +2 -2
- package/dist/build/candidate-builder.d.ts +2 -0
- package/dist/build/candidate-builder.js +5 -1
- package/dist/build/candidate-cli.js +3 -0
- package/dist/build/candidate-cli.mjs +70 -22
- package/dist/build/job-log.d.ts +23 -0
- package/dist/build/job-log.js +88 -0
- package/dist/build/local-build.d.ts +9 -1
- package/dist/build/local-build.js +11 -9
- package/dist/cloudflare.d.ts +4 -1
- package/dist/cloudflare.js +1 -1
- package/dist/files.js +9 -8
- package/dist/git-admission.d.ts +3 -3
- package/dist/git-admission.js +4 -6
- package/dist/git-door.d.ts +8 -7
- package/dist/git-door.js +18 -17
- package/dist/git.d.ts +1 -1
- package/dist/host.d.ts +33 -40
- package/dist/host.js +156 -275
- package/dist/installation-execution.js +14 -5
- package/dist/installation-operations.d.ts +4 -180
- package/dist/installation-operations.js +1 -5
- package/dist/installation-store-generation.d.ts +4 -1
- package/dist/installation-store-generation.js +59 -6
- package/dist/internal/delivery.js +0 -1
- package/dist/internal/host-gate.d.ts +3 -2
- package/dist/internal/host-gate.js +5 -18
- package/dist/internal/invocation-timing.d.ts +16 -0
- package/dist/internal/invocation-timing.js +23 -0
- package/dist/internal/registry-installations.js +1 -0
- package/dist/invocation.d.ts +15 -14
- package/dist/invocation.js +58 -26
- package/dist/keys.d.ts +2 -19
- package/dist/keys.js +1 -37
- package/dist/mcp.d.ts +15 -27
- package/dist/mcp.js +105 -155
- package/dist/page/agent-browser.d.ts +15 -0
- package/dist/page/agent-browser.js +162 -0
- package/dist/page/app-permissions-port.d.ts +3 -0
- package/dist/page/app-permissions-port.js +43 -0
- package/dist/page/app-permissions.d.ts +11 -0
- package/dist/page/app-permissions.js +296 -0
- package/dist/page/isolated-page-theme.d.ts +2 -0
- package/dist/page/isolated-page-theme.js +11 -0
- package/dist/page/mount.d.ts +2 -13
- package/dist/page/mount.js +7 -93
- package/dist/page-script.d.ts +0 -3
- package/dist/page-script.js +3 -4
- package/dist/standalone/agent-archive-owner.d.ts +42 -0
- package/dist/standalone/agent-archive-owner.js +116 -0
- package/dist/standalone/agent-archive-schedules.d.ts +6 -0
- package/dist/standalone/agent-archive-schedules.js +76 -0
- package/dist/standalone/agent-archive.d.ts +31 -0
- package/dist/standalone/agent-archive.js +67 -0
- package/dist/standalone/agent-computers.d.ts +7 -6
- package/dist/standalone/agent-computers.js +4 -7
- package/dist/standalone/agent-mail.d.ts +2 -2
- package/dist/standalone/agents.d.ts +186 -20
- package/dist/standalone/agents.js +251 -30
- package/dist/standalone/app-builds-binding.js +1 -1
- package/dist/standalone/app-set.js +2 -54
- package/dist/standalone/app-source.d.ts +3 -4
- package/dist/standalone/app-source.js +12 -9
- package/dist/standalone/builds.d.ts +2 -14
- package/dist/standalone/builds.js +15 -13
- package/dist/standalone/computer-fleet.d.ts +4 -4
- package/dist/standalone/computer-fleet.js +13 -42
- package/dist/standalone/computer.d.ts +4 -3
- package/dist/standalone/computer.js +52 -53
- package/dist/standalone/dashboard-approval.d.ts +10 -0
- package/dist/standalone/dashboard-approval.js +66 -0
- package/dist/standalone/machine-link.d.ts +4 -221
- package/dist/standalone/machine-link.js +21 -15
- package/dist/standalone/media.d.ts +1 -0
- package/dist/standalone/media.js +20 -14
- package/dist/standalone/owner-routes.d.ts +16 -0
- package/dist/standalone/owner-routes.js +21 -0
- package/dist/standalone/permission-resources.d.ts +5 -0
- package/dist/standalone/permission-resources.js +31 -0
- package/dist/standalone/registry.d.ts +7 -0
- package/dist/standalone/registry.js +3 -0
- package/dist/standalone/tenancy.d.ts +0 -3
- package/dist/standalone/tenancy.js +2 -5
- package/dist/standalone/worker-routes.d.ts +19 -0
- package/dist/standalone/worker-routes.js +9 -0
- package/dist/standalone/worker.d.ts +1 -1
- package/dist/standalone/worker.js +27 -35
- package/dist/standalone/workflow-binding.d.ts +10 -3
- package/dist/standalone/workflow-binding.js +22 -5
- package/dist/standalone/workflow-git-capture.js +2 -1
- package/dist/standalone/workflow-host.d.ts +8 -103
- package/dist/standalone/workflow-host.js +1 -1
- package/dist/standalone/workflow-node-capture.js +2 -2
- package/dist/standalone/workflow-root-authority.d.ts +1 -1
- package/dist/standalone/workflow-root-authority.js +1 -1
- package/dist/standalone/workflow-schedules.d.ts +31 -4
- package/dist/standalone/workflow-schedules.js +18 -5
- package/dist/standalone/workflow-webhooks.d.ts +4 -18
- package/dist/standalone/workflow-webhooks.js +5 -5
- package/dist/standalone/workflows.d.ts +53 -27
- package/dist/standalone/workflows.js +9 -3
- package/dist/storage-frame.d.ts +6 -6
- package/dist/testing/capabilities.d.ts +7 -6
- package/dist/testing/capabilities.js +3 -6
- package/dist/testing/installation.d.ts +0 -1
- package/dist/testing/installation.js +2 -5
- package/dist/workers-git.d.ts +12 -4
- package/dist/workers-git.js +38 -35
- package/dist/workers.d.ts +9 -1
- package/dist/workers.js +44 -8
- package/dist/workflows.d.ts +4 -0
- package/dist/workflows.js +2 -0
- package/docs/api/README.md +7 -0
- package/docs/api/agent-schedules.md +176 -0
- package/docs/api/agents.md +34 -13
- package/docs/api/app-storage.md +1 -1
- package/docs/api/apps.md +323 -225
- package/docs/api/auth.md +0 -55
- package/docs/api/authorization.md +1300 -0
- package/docs/api/build.md +42 -38
- package/docs/api/cloudflare.md +3 -3
- package/docs/api/git.md +20 -11
- package/docs/api/host.md +64 -192
- package/docs/api/index.md +1 -1
- package/docs/api/invocation.md +14 -14
- package/docs/api/keys.md +1 -98
- package/docs/api/mcp.md +43 -40
- package/docs/api/modules.md +2 -0
- package/docs/api/page/mount.md +16 -19
- package/docs/api/workers-git.md +46 -12
- package/docs/api/workers.md +111 -222
- package/package.json +41 -22
- package/dist/page/computer-target.d.ts +0 -3
- package/dist/page/computer-target.js +0 -9
- package/dist/standalone/channel-session-door.d.ts +0 -4
- package/dist/standalone/channel-session-door.js +0 -72
package/docs/api/build.md
CHANGED
|
@@ -580,10 +580,14 @@ type LocalBuildExecutorOptions = Readonly<{
|
|
|
580
580
|
packageCacheDirectory?: string;
|
|
581
581
|
packageScripts?: "run";
|
|
582
582
|
onPhase?: (phase, milliseconds) => void;
|
|
583
|
+
onOutput?: (stream, bytes) => void;
|
|
583
584
|
}>;
|
|
584
585
|
```
|
|
585
586
|
|
|
586
|
-
How one build executor is composed; never part of a recipe or request.
|
|
587
|
+
How one build executor is composed; never part of a recipe or request. Build-log
|
|
588
|
+
stdout/stderr are interleaved in arrival order and unlabelled. The job log is
|
|
589
|
+
credential-bearing by design; it must never flow to diagnostics, Releases, agent
|
|
590
|
+
surfaces, or support bundles without a recorded decision.
|
|
587
591
|
|
|
588
592
|
---
|
|
589
593
|
|
|
@@ -975,7 +979,7 @@ dependency hydration, URL rewriting, or access to the producer's live build.
|
|
|
975
979
|
| Parameter | Type |
|
|
976
980
|
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
977
981
|
| `snapshot` | `string` |
|
|
978
|
-
| `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`: `"
|
|
982
|
+
| `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`: `"neutral"` \| `"browser"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} |
|
|
979
983
|
| `recipe.kind?` | `"bundled-html"` \| `"source-html"` |
|
|
980
984
|
| `recipe.bundle` | `true` |
|
|
981
985
|
| `recipe.entry` | `string` |
|
|
@@ -988,7 +992,7 @@ dependency hydration, URL rewriting, or access to the producer's live build.
|
|
|
988
992
|
| `recipe.assetBase?` | `string` |
|
|
989
993
|
| `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} |
|
|
990
994
|
| `recipe.maxOutputBytes` | `number` |
|
|
991
|
-
| `recipe.platform` | `"
|
|
995
|
+
| `recipe.platform` | `"neutral"` \| `"browser"` |
|
|
992
996
|
| `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` |
|
|
993
997
|
| `recipe.target` | readonly \[`"es2022"`\] |
|
|
994
998
|
|
|
@@ -1106,7 +1110,7 @@ runtime.
|
|
|
1106
1110
|
| Parameter | Type |
|
|
1107
1111
|
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1108
1112
|
| `source` | [`CapturedSource`](#capturedsource) |
|
|
1109
|
-
| `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`: `"
|
|
1113
|
+
| `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`: `"neutral"` \| `"browser"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} |
|
|
1110
1114
|
| `recipe.kind?` | `"bundled-html"` \| `"source-html"` |
|
|
1111
1115
|
| `recipe.bundle` | `true` |
|
|
1112
1116
|
| `recipe.entry` | `string` |
|
|
@@ -1119,7 +1123,7 @@ runtime.
|
|
|
1119
1123
|
| `recipe.assetBase?` | `string` |
|
|
1120
1124
|
| `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} |
|
|
1121
1125
|
| `recipe.maxOutputBytes` | `number` |
|
|
1122
|
-
| `recipe.platform` | `"
|
|
1126
|
+
| `recipe.platform` | `"neutral"` \| `"browser"` |
|
|
1123
1127
|
| `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` |
|
|
1124
1128
|
| `recipe.target` | readonly \[`"es2022"`\] |
|
|
1125
1129
|
|
|
@@ -1171,7 +1175,7 @@ policy describes a build this code does not perform.
|
|
|
1171
1175
|
|
|
1172
1176
|
| Parameter | Type |
|
|
1173
1177
|
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1174
|
-
| `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`: `"
|
|
1178
|
+
| `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`: `"neutral"` \| `"browser"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} |
|
|
1175
1179
|
| `recipe.kind?` | `"bundled-html"` \| `"source-html"` |
|
|
1176
1180
|
| `recipe.bundle` | `true` |
|
|
1177
1181
|
| `recipe.entry` | `string` |
|
|
@@ -1184,7 +1188,7 @@ policy describes a build this code does not perform.
|
|
|
1184
1188
|
| `recipe.assetBase?` | `string` |
|
|
1185
1189
|
| `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} |
|
|
1186
1190
|
| `recipe.maxOutputBytes` | `number` |
|
|
1187
|
-
| `recipe.platform` | `"
|
|
1191
|
+
| `recipe.platform` | `"neutral"` \| `"browser"` |
|
|
1188
1192
|
| `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` |
|
|
1189
1193
|
| `recipe.target` | readonly \[`"es2022"`\] |
|
|
1190
1194
|
|
|
@@ -1206,7 +1210,7 @@ Hash every captured build and output-policy input in the Publisher recipe.
|
|
|
1206
1210
|
|
|
1207
1211
|
| Parameter | Type |
|
|
1208
1212
|
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1209
|
-
| `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`: `"
|
|
1213
|
+
| `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`: `"neutral"` \| `"browser"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} |
|
|
1210
1214
|
| `recipe.kind?` | `"bundled-html"` \| `"source-html"` |
|
|
1211
1215
|
| `recipe.bundle` | `true` |
|
|
1212
1216
|
| `recipe.entry` | `string` |
|
|
@@ -1219,7 +1223,7 @@ Hash every captured build and output-policy input in the Publisher recipe.
|
|
|
1219
1223
|
| `recipe.assetBase?` | `string` |
|
|
1220
1224
|
| `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} |
|
|
1221
1225
|
| `recipe.maxOutputBytes` | `number` |
|
|
1222
|
-
| `recipe.platform` | `"
|
|
1226
|
+
| `recipe.platform` | `"neutral"` \| `"browser"` |
|
|
1223
1227
|
| `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` |
|
|
1224
1228
|
| `recipe.target` | readonly \[`"es2022"`\] |
|
|
1225
1229
|
|
|
@@ -1278,7 +1282,7 @@ the largest output bound the recipe could assign it under.
|
|
|
1278
1282
|
|
|
1279
1283
|
| Parameter | Type |
|
|
1280
1284
|
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1281
|
-
| `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`: `"
|
|
1285
|
+
| `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`: `"neutral"` \| `"browser"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} |
|
|
1282
1286
|
| `recipe.kind?` | `"bundled-html"` \| `"source-html"` |
|
|
1283
1287
|
| `recipe.bundle` | `true` |
|
|
1284
1288
|
| `recipe.entry` | `string` |
|
|
@@ -1291,7 +1295,7 @@ the largest output bound the recipe could assign it under.
|
|
|
1291
1295
|
| `recipe.assetBase?` | `string` |
|
|
1292
1296
|
| `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} |
|
|
1293
1297
|
| `recipe.maxOutputBytes` | `number` |
|
|
1294
|
-
| `recipe.platform` | `"
|
|
1298
|
+
| `recipe.platform` | `"neutral"` \| `"browser"` |
|
|
1295
1299
|
| `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` |
|
|
1296
1300
|
| `recipe.target` | readonly \[`"es2022"`\] |
|
|
1297
1301
|
|
|
@@ -1316,7 +1320,7 @@ applies here. Asset sizes stay the artifact writer's policy.
|
|
|
1316
1320
|
| Parameter | Type |
|
|
1317
1321
|
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
1318
1322
|
| `output` | \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<`string`, `Readonly`\<...\>\>\>; `toolFamily?`: `Readonly`\<\{ `name`: ...; `list`: ...; `call`: ...; \}\>; `events?`: `Readonly`\<`Record`\<..., ...\>\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"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 (`"files"` \| `"dashboard"` \| `"inbox"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly (... \| ...)[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: `string`; `sigil?`: `string`; `projections?`: `Readonly`\<...\>; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: readonly ...[]; `watch?`: `AppGillWatch`; `desktop?`: `Readonly`\<...\>; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<\{ `name`: ...; `operations`: ...; \}\>[]; `sync?`: `Readonly`\<\{ `method`: ...; \}\>; \}\>; \}\>; `kind`: `"ui"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<`string`, `Readonly`\<...\>\>\>; `toolFamily?`: `Readonly`\<\{ `name`: ...; `list`: ...; `call`: ...; \}\>; `events?`: `Readonly`\<`Record`\<..., ...\>\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"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 (`"files"` \| `"dashboard"` \| `"inbox"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly (... \| ...)[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: `string`; `sigil?`: `string`; `projections?`: `Readonly`\<...\>; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: readonly ...[]; `watch?`: `AppGillWatch`; `desktop?`: `Readonly`\<...\>; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<\{ `name`: ...; `operations`: ...; \}\>[]; `sync?`: `Readonly`\<\{ `method`: ...; \}\>; \}\>; \}\>; `kind`: `"backend"`; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \} \| \{ `declaration?`: `Readonly`\<\{ `api?`: `Readonly`\<\{ `methods`: `Readonly`\<`Record`\<`string`, `Readonly`\<...\>\>\>; `toolFamily?`: `Readonly`\<\{ `name`: ...; `list`: ...; `call`: ...; \}\>; `events?`: `Readonly`\<`Record`\<..., ...\>\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"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 (`"files"` \| `"dashboard"` \| `"inbox"` \| `"media"` \| `"sessions"` \| `"terminal"`)[]; `storage?`: readonly `Readonly`\<\{ `key`: `string`; `scopes`: readonly (... \| ...)[]; `maxBytes`: `number`; \}\>[]; `commands?`: readonly `Readonly`\<\{ `id`: `string`; `title`: `string`; `category`: `string`; `description?`: `string`; `sigil?`: `string`; `projections?`: `Readonly`\<...\>; \}\>[]; `gills?`: readonly `Readonly`\<\{ `id`: `string`; `source`: `string`; `title`: `string`; `params?`: readonly ...[]; `watch?`: `AppGillWatch`; `desktop?`: `Readonly`\<...\>; \}\>[]; `backend?`: `Readonly`\<\{ `bindings`: readonly `Readonly`\<\{ `name`: ...; `operations`: ...; \}\>[]; `sync?`: `Readonly`\<\{ `method`: ...; \}\>; \}\>; \}\>; `kind`: `"app"`; `ui`: \| \{ `mediaType`: `"text/html; charset=utf-8"`; `content`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; `kind`: `"html"`; \}; \} \| \{ `mediaType`: `"application/vnd.fungi.app-assets+json"`; `content`: \{ `kind`: `"assets"`; `base`: `string`; `assets`: readonly `object`[]; \}; \}; `backend`: \{ `digest`: `Sha256Digest`; `byteLength`: `number`; \}; \} |
|
|
1319
|
-
| `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`: `"
|
|
1323
|
+
| `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`: `"neutral"` \| `"browser"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} |
|
|
1320
1324
|
| `recipe.kind?` | `"bundled-html"` \| `"source-html"` |
|
|
1321
1325
|
| `recipe.bundle` | `true` |
|
|
1322
1326
|
| `recipe.entry` | `string` |
|
|
@@ -1329,7 +1333,7 @@ applies here. Asset sizes stay the artifact writer's policy.
|
|
|
1329
1333
|
| `recipe.assetBase?` | `string` |
|
|
1330
1334
|
| `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} |
|
|
1331
1335
|
| `recipe.maxOutputBytes` | `number` |
|
|
1332
|
-
| `recipe.platform` | `"
|
|
1336
|
+
| `recipe.platform` | `"neutral"` \| `"browser"` |
|
|
1333
1337
|
| `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` |
|
|
1334
1338
|
| `recipe.target` | readonly \[`"es2022"`\] |
|
|
1335
1339
|
|
|
@@ -1644,31 +1648,31 @@ Exact pinned esbuild options shared by local builds and artifact-budget proofs.
|
|
|
1644
1648
|
|
|
1645
1649
|
#### Parameters
|
|
1646
1650
|
|
|
1647
|
-
| Parameter | Type
|
|
1648
|
-
| -------------------------------- |
|
|
1649
|
-
| `source` | [`CapturedSource`](#capturedsource)
|
|
1650
|
-
| `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`: `"
|
|
1651
|
-
| `recipe.kind?` | `"bundled-html"` \| `"source-html"`
|
|
1652
|
-
| `recipe.bundle` | `true`
|
|
1653
|
-
| `recipe.entry` | `string`
|
|
1654
|
-
| `recipe.format` | `"html"` \| `"assets"` \| `"esm"`
|
|
1655
|
-
| `recipe.assets?` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \}
|
|
1656
|
-
| `recipe.assets.maxManifestBytes` | `number`
|
|
1657
|
-
| `recipe.assets.maxObjects` | `number`
|
|
1658
|
-
| `recipe.assets.maxObjectBytes` | `number`
|
|
1659
|
-
| `recipe.assets.maxTotalBytes` | `number`
|
|
1660
|
-
| `recipe.assetBase?` | `string`
|
|
1661
|
-
| `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \}
|
|
1662
|
-
| `recipe.maxOutputBytes` | `number`
|
|
1663
|
-
| `recipe.platform` | `"
|
|
1664
|
-
| `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`
|
|
1665
|
-
| `recipe.target` | readonly \[`"es2022"`\]
|
|
1666
|
-
| `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?`: ...; `
|
|
1667
|
-
| `emission.entryPoints` | (`entry`) => `Record`\<`string`, `string`\>
|
|
1668
|
-
| `emission.outdir` | `string`
|
|
1669
|
-
| `emission.plugins` | `Plugin`[]
|
|
1670
|
-
| `emission.worker` | -
|
|
1671
|
-
| `emission.declare` | -
|
|
1651
|
+
| Parameter | Type | Description |
|
|
1652
|
+
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- |
|
|
1653
|
+
| `source` | [`CapturedSource`](#capturedsource) | - |
|
|
1654
|
+
| `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`: `"neutral"` \| `"browser"`; `backend`: \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null`; `target`: readonly \[`"es2022"`\]; \} | - |
|
|
1655
|
+
| `recipe.kind?` | `"bundled-html"` \| `"source-html"` | - |
|
|
1656
|
+
| `recipe.bundle` | `true` | - |
|
|
1657
|
+
| `recipe.entry` | `string` | - |
|
|
1658
|
+
| `recipe.format` | `"html"` \| `"assets"` \| `"esm"` | - |
|
|
1659
|
+
| `recipe.assets?` | \{ `maxManifestBytes`: `number`; `maxObjects`: `number`; `maxObjectBytes`: `number`; `maxTotalBytes`: `number`; \} | - |
|
|
1660
|
+
| `recipe.assets.maxManifestBytes` | `number` | - |
|
|
1661
|
+
| `recipe.assets.maxObjects` | `number` | - |
|
|
1662
|
+
| `recipe.assets.maxObjectBytes` | `number` | - |
|
|
1663
|
+
| `recipe.assets.maxTotalBytes` | `number` | - |
|
|
1664
|
+
| `recipe.assetBase?` | `string` | - |
|
|
1665
|
+
| `recipe.toolchain` | \{ \[`key`: `string`\]: `string`; \} | - |
|
|
1666
|
+
| `recipe.maxOutputBytes` | `number` | - |
|
|
1667
|
+
| `recipe.platform` | `"neutral"` \| `"browser"` | - |
|
|
1668
|
+
| `recipe.backend` | \| \{ `entry?`: `string`; `runtime`: \{ `kind`: `"durable-facet"`; `stateSchema`: `number`; \}; `compatibilityDate`: `string`; `exportName`: `string`; \} \| `null` | - |
|
|
1669
|
+
| `recipe.target` | readonly \[`"es2022"`\] | - |
|
|
1670
|
+
| `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?`: ...; `present?`: ...; \}\>\>\>; `toolFamily?`: `Readonly`\<\{ `name`: `string`; `list`: `string`; `call`: `string`; \}\>; `events?`: `Readonly`\<`Record`\<`string`, `Readonly`\<...\>\>\>; \}\>; `displayName?`: `string`; `capabilities`: readonly ( \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"approvals"` \| `"agent.list"` \| `"agent.manage"` \| `"agent.rename"` \| `"agent.avatar"` \| `"agent.toolPolicy"` \| `"agent.read"` \| `"agent.send"` \| `"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 (`"files"` \| `"dashboard"` \| `"inbox"` \| `"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`; \}\>; \}\>; \}\>\>; \} | - |
|
|
1671
|
+
| `emission.entryPoints` | (`entry`) => `Record`\<`string`, `string`\> | Entries for the one backend build: the Worker and, if defined, its declaration. |
|
|
1672
|
+
| `emission.outdir` | `string` | - |
|
|
1673
|
+
| `emission.plugins` | `Plugin`[] | - |
|
|
1674
|
+
| `emission.worker` | - |
|
|
1675
|
+
| `emission.declare` | - |
|
|
1672
1676
|
|
|
1673
1677
|
#### Returns
|
|
1674
1678
|
|