@fungi.computer/oyster 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +396 -72
- package/dist/agents.d.ts +3 -2
- package/dist/agents.js +4 -2
- package/dist/app-builds.d.ts +81 -8
- package/dist/app-builds.js +213 -60
- package/dist/app-storage.d.ts +3 -3
- package/dist/approval-capability.d.ts +5 -0
- package/dist/approval-capability.js +46 -0
- package/dist/approval-home.d.ts +51 -0
- package/dist/approval-home.js +226 -0
- package/dist/apps/catalog.d.ts +335 -0
- package/dist/apps/catalog.js +46 -0
- package/dist/apps/gate.d.ts +20 -6
- package/dist/apps/gate.js +42 -16
- package/dist/apps/index.d.ts +3 -1
- package/dist/apps/index.js +3 -1
- package/dist/apps/installation.d.ts +132 -51
- package/dist/apps/installation.js +176 -70
- package/dist/apps/permissions.d.ts +247 -0
- package/dist/apps/permissions.js +255 -0
- package/dist/boot-capability-route.d.ts +15 -0
- package/dist/boot-capability-route.js +196 -0
- package/dist/boot-capability.d.ts +103 -0
- package/dist/boot-capability.js +141 -0
- package/dist/boot-construction.d.ts +12 -0
- package/dist/boot-construction.js +175 -0
- package/dist/boot-gate.d.ts +267 -0
- package/dist/boot-gate.js +236 -0
- package/dist/boot-host-script.d.ts +2 -0
- package/dist/boot-host-script.js +1 -0
- package/dist/boot-mount.d.ts +21 -0
- package/dist/boot-mount.js +65 -0
- package/dist/browser/boot.d.ts +73 -0
- package/dist/browser/boot.js +502 -0
- package/dist/browser/browser.d.ts +104 -0
- package/dist/browser/browser.js +374 -0
- package/dist/browser/capability-source.d.ts +76 -0
- package/dist/browser/capability-source.js +338 -0
- package/dist/browser/cdp-client.d.ts +56 -0
- package/dist/browser/cdp-client.js +184 -0
- package/dist/browser/errors.d.ts +79 -0
- package/dist/browser/errors.js +32 -0
- package/dist/browser/index.d.ts +16 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/lease-registry.d.ts +61 -0
- package/dist/browser/lease-registry.js +101 -0
- package/dist/browser/operations.d.ts +225 -0
- package/dist/browser/operations.js +137 -0
- package/dist/browser/page.d.ts +25 -0
- package/dist/browser/page.js +172 -0
- package/dist/browser/quick-reads.d.ts +29 -0
- package/dist/browser/quick-reads.js +160 -0
- package/dist/browser/sessions.d.ts +52 -0
- package/dist/browser/sessions.js +118 -0
- package/dist/browser/url-policy.d.ts +18 -0
- package/dist/browser/url-policy.js +58 -0
- package/dist/build/app-imports.d.ts +12 -0
- package/dist/build/app-imports.js +105 -0
- package/dist/build/build-policy.d.ts +5 -3
- package/dist/build/build-policy.js +5 -3
- package/dist/build/candidate-builder.d.ts +1 -1
- package/dist/build/candidate-cli.mjs +8375 -334
- package/dist/build/local-build.d.ts +2 -0
- package/dist/build/local-build.js +28 -6
- package/dist/build/snapshot-package-store.d.ts +1 -1
- package/dist/build/snapshot-package-store.js +7 -2
- package/dist/build/workspace-build.d.ts +92 -5
- package/dist/build/workspace-build.js +93 -19
- package/dist/build.d.ts +1 -1
- package/dist/build.js +1 -1
- package/dist/catalog-frame.js +1 -1
- package/dist/cloudflare.d.ts +13 -3
- package/dist/cloudflare.js +102 -4
- package/dist/frame-binding-wire-script.js +1 -1
- package/dist/frame-binding-wire.js +4 -2
- package/dist/git-auth.d.ts +0 -2
- package/dist/git-auth.js +0 -2
- package/dist/git.d.ts +0 -1
- package/dist/git.js +0 -2
- package/dist/host.d.ts +39 -13
- package/dist/host.js +268 -142
- package/dist/index.d.ts +25 -15
- package/dist/index.js +39 -16
- package/dist/install-release-cli.d.ts +2 -0
- package/dist/install-release-cli.js +46 -0
- package/dist/installation-client.d.ts +43 -0
- package/dist/installation-client.js +178 -0
- package/dist/installation-execution.d.ts +11 -0
- package/dist/installation-execution.js +184 -0
- package/dist/installation-operations.d.ts +1437 -0
- package/dist/installation-operations.js +664 -0
- package/dist/installation-store-generation.d.ts +3 -0
- package/dist/installation-store-generation.js +16 -0
- package/dist/instance-id.d.ts +10 -0
- package/dist/instance-id.js +10 -0
- package/dist/instance-refusal.d.ts +11 -0
- package/dist/instance-refusal.js +21 -0
- package/dist/internal/delivery.js +4 -2
- package/dist/internal/host-gate.js +7 -1
- package/dist/internal/registry-installations.js +4 -4
- package/dist/keys.d.ts +5 -1
- package/dist/keys.js +10 -2
- package/dist/machine-link/authority.d.ts +89 -0
- package/dist/machine-link/authority.js +37 -0
- package/dist/machine-link/client.d.ts +66 -0
- package/dist/machine-link/client.js +94 -0
- package/dist/machine-link/delivery.d.ts +18 -0
- package/dist/machine-link/delivery.js +55 -0
- package/dist/machine-link/enrollment.d.ts +111 -0
- package/dist/machine-link/enrollment.js +286 -0
- package/dist/machine-link/fences.d.ts +37 -0
- package/dist/machine-link/fences.js +166 -0
- package/dist/machine-link/home.d.ts +20 -0
- package/dist/machine-link/home.js +24 -0
- package/dist/machine-link/host.d.ts +43 -0
- package/dist/machine-link/host.js +189 -0
- package/dist/machine-link/index.d.ts +15 -0
- package/dist/machine-link/index.js +15 -0
- package/dist/machine-link/link.d.ts +48 -0
- package/dist/machine-link/link.js +223 -0
- package/dist/machine-link/presence.d.ts +10 -0
- package/dist/machine-link/presence.js +25 -0
- package/dist/machine-link/workers.d.ts +6 -0
- package/dist/machine-link/workers.js +6 -0
- package/dist/mcp-owner.d.ts +2 -2
- package/dist/mcp-owner.js +41 -33
- package/dist/mcp.d.ts +15 -3
- package/dist/mcp.js +146 -25
- package/dist/older-oyster-store-refusal.d.ts +4 -0
- package/dist/older-oyster-store-refusal.js +18 -0
- package/dist/older-oyster-store.d.ts +21 -0
- package/dist/older-oyster-store.js +43 -0
- package/dist/pack.d.ts +14 -3
- package/dist/pack.js +44 -19
- package/dist/page/app-access.d.ts +7 -0
- package/dist/page/app-access.js +75 -0
- package/dist/page/boot-host.js +57 -0
- package/dist/page/capabilities.d.ts +3 -3
- package/dist/page/capabilities.js +16 -12
- package/dist/page/computer-handles.d.ts +3 -3
- package/dist/page/computer-target.d.ts +3 -0
- package/dist/page/computer-target.js +9 -0
- package/dist/page/mount.d.ts +23 -3
- package/dist/page/mount.js +152 -16
- package/dist/page-assets.d.ts +22 -0
- package/dist/page-assets.js +28 -0
- package/dist/page-script.d.ts +3 -0
- package/dist/page-script.js +5 -4
- package/dist/release.d.ts +13 -6
- package/dist/release.js +10 -7
- package/dist/root-data.d.ts +16 -6
- package/dist/root-data.js +2 -2
- package/dist/source/index.d.ts +1 -1
- package/dist/source/team-source.d.ts +20 -8
- package/dist/source/team-source.js +39 -10
- package/dist/source/template-seed.d.ts +2 -2
- package/dist/standalone/agent-mail.d.ts +24 -0
- package/dist/standalone/agent-mail.js +62 -0
- package/dist/standalone/agent-store.d.ts +9 -0
- package/dist/standalone/agent-store.js +30 -0
- package/dist/standalone/agents.d.ts +68 -9
- package/dist/standalone/agents.js +428 -56
- package/dist/standalone/app-builds-binding.d.ts +20 -2
- package/dist/standalone/app-builds-binding.js +147 -23
- package/dist/standalone/app-set.d.ts +5 -2
- package/dist/standalone/app-set.js +186 -144
- package/dist/standalone/browser.d.ts +11 -0
- package/dist/standalone/browser.js +72 -0
- package/dist/standalone/builds.d.ts +13 -4
- package/dist/standalone/builds.js +28 -44
- package/dist/standalone/computer-egress.d.ts +2 -0
- package/dist/standalone/computer-egress.js +13 -4
- package/dist/standalone/computer-fleet.d.ts +43 -0
- package/dist/standalone/computer-fleet.js +200 -0
- package/dist/standalone/computer.d.ts +44 -9
- package/dist/standalone/computer.js +129 -22
- package/dist/standalone/install-apps-cli.js +43 -6
- package/dist/standalone/instance.d.ts +2 -2
- package/dist/standalone/instance.js +8 -11
- package/dist/standalone/machine-link.d.ts +354 -0
- package/dist/standalone/machine-link.js +368 -0
- package/dist/standalone/media.d.ts +2 -2
- package/dist/standalone/media.js +19 -16
- package/dist/standalone/preview.d.ts +2 -2
- package/dist/standalone/preview.js +37 -10
- package/dist/standalone/registry.d.ts +151 -9
- package/dist/standalone/registry.js +305 -8
- package/dist/standalone/worker.d.ts +19 -5
- package/dist/standalone/worker.js +90 -54
- package/dist/standalone/workflow-binding.d.ts +18 -22
- package/dist/standalone/workflow-binding.js +18 -18
- package/dist/standalone/workflow-control.d.ts +4 -0
- package/dist/standalone/workflow-control.js +40 -0
- package/dist/standalone/workflow-events.d.ts +2 -2
- package/dist/standalone/workflow-events.js +9 -10
- package/dist/standalone/workflow-git-capture.js +4 -3
- package/dist/standalone/workflow-host.d.ts +162 -161
- package/dist/standalone/workflow-host.js +101 -21
- package/dist/standalone/workflow-node-capture.js +11 -4
- package/dist/standalone/workflow-schedules.d.ts +5 -2
- package/dist/standalone/workflow-schedules.js +9 -10
- package/dist/standalone/workflow-trigger-host.d.ts +65 -5
- package/dist/standalone/workflow-trigger-host.js +2 -2
- package/dist/standalone/workflow-webhooks.d.ts +22 -0
- package/dist/standalone/workflow-webhooks.js +39 -0
- package/dist/standalone/workflows.d.ts +140 -43
- package/dist/standalone/workflows.js +198 -39
- package/dist/storage-frame.d.ts +6 -6
- package/dist/testing/capabilities.js +14 -3
- package/dist/testing/installation.js +26 -2
- package/dist/testing/worker.js +1 -1
- package/dist/testing/workers-runtime.d.ts +8 -2
- package/dist/testing/workers-runtime.js +20 -2
- package/dist/webhook-abuse.d.ts +25 -0
- package/dist/webhook-abuse.js +54 -0
- package/dist/webhook-custody.d.ts +144 -0
- package/dist/webhook-custody.js +222 -0
- package/dist/webhook-ingress.d.ts +36 -0
- package/dist/webhook-ingress.js +146 -0
- package/dist/webhooks.d.ts +111 -0
- package/dist/webhooks.js +189 -0
- package/dist/workers-git.d.ts +12 -17
- package/dist/workers-git.js +64 -52
- package/dist/workers.d.ts +226 -13
- package/dist/workers.js +363 -51
- package/dist/workflow-agent-authority.d.ts +8 -0
- package/dist/workflow-agent-authority.js +42 -0
- package/dist/workflows.d.ts +66 -0
- package/dist/workflows.js +97 -0
- package/docs/api/README.md +63 -37
- package/docs/api/agents.md +17 -0
- package/docs/api/app-storage.md +1 -1
- package/docs/api/apps.md +1394 -543
- package/docs/api/browser/boot.md +132 -0
- package/docs/api/browser.md +1440 -0
- package/docs/api/build-contract.md +38 -25
- package/docs/api/build.md +263 -84
- package/docs/api/cloudflare.md +93 -7
- package/docs/api/git.md +3 -13
- package/docs/api/host.md +944 -118
- package/docs/api/index.md +320 -18
- package/docs/api/keys.md +24 -1
- package/docs/api/mcp.md +59 -12
- package/docs/api/modules.md +33 -40
- package/docs/api/pack.md +57 -8
- package/docs/api/page/mount.md +92 -4
- package/docs/api/workers-git.md +103 -24
- package/docs/api/workers.md +1594 -244
- package/docs/site/agent-quickstart.mdx +28 -14
- package/examples/standalone/worker.ts +3 -1
- package/examples/standalone/wrangler.jsonc +2 -0
- package/package.json +73 -71
- package/dist/installation-consent.d.ts +0 -81
- package/dist/installation-consent.js +0 -84
- package/dist/shell/app-directory.d.ts +0 -542
- package/dist/shell/app-directory.js +0 -196
- package/dist/shell/browser-actions.d.ts +0 -7
- package/dist/shell/browser-actions.js +0 -56
- package/dist/shell/command-host.d.ts +0 -112
- package/dist/shell/command-host.js +0 -502
- package/dist/shell/commands.d.ts +0 -25
- package/dist/shell/commands.js +0 -78
- package/dist/shell/index.d.ts +0 -8
- package/dist/shell/index.js +0 -8
- package/dist/shell/keys.d.ts +0 -41
- package/dist/shell/keys.js +0 -134
- package/dist/shell/shell-module.d.ts +0 -55
- package/dist/shell/shell-module.js +0 -86
- package/dist/shell/window-manager.d.ts +0 -128
- package/dist/shell/window-manager.js +0 -730
- package/dist/shell/workbench-contract.d.ts +0 -68
- package/dist/shell/workbench-directory.d.ts +0 -332
- package/dist/shell/workbench-directory.js +0 -35
- package/dist/shell/workbench-host-types.d.ts +0 -96
- package/dist/shell/workbench-host-types.js +0 -1
- package/dist/shell/workbench-host.d.ts +0 -34
- package/dist/shell/workbench-host.js +0 -352
- package/dist/shell/workbench-model.d.ts +0 -194
- package/dist/shell/workbench-model.js +0 -53
- package/dist/shell/workbench.d.ts +0 -4
- package/dist/shell/workbench.js +0 -2
- package/docs/api/shell/app-directory.md +0 -599
- package/docs/api/shell/command-host.md +0 -224
- package/docs/api/shell/commands.md +0 -197
- package/docs/api/shell/keys.md +0 -183
- package/docs/api/shell/shell-module.md +0 -204
- package/docs/api/shell/window-manager.md +0 -267
- package/docs/api/shell/workbench-directory.md +0 -119
- package/docs/api/shell/workbench.md +0 -205
- package/docs/api/shell.md +0 -1915
- /package/dist/{shell/workbench-contract.js → page/boot-host.d.ts} +0 -0
package/dist/workers.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
+
import type { ApprovalListInput, ApprovalAnswerInput, AutoApproveInput } from "@fungi.computer/approvals";
|
|
2
|
+
import type { HostActor } from "@fungi.computer/puffball/app";
|
|
3
|
+
import { type OysterApprovalCall } from "./approval-home.js";
|
|
4
|
+
import { type BootCapabilityGrant, type BootCapabilityLease } from "./boot-capability.js";
|
|
1
5
|
import { type Installation } from "./apps/installation.js";
|
|
6
|
+
import { type BrowserBinding } from "./browser/sessions.js";
|
|
7
|
+
import { type InstallationOperationRequest, type InstallationOperationReply } from "./installation-operations.js";
|
|
8
|
+
import { installationWorkerEntrypoint } from "./installation-execution.js";
|
|
9
|
+
export { installationWorkerEntrypoint };
|
|
2
10
|
import { type BackgroundSyncRefusal } from "@fungi.computer/puffball/background-replay";
|
|
3
11
|
import { type TenantScope, type TenantId } from "./tenant.js";
|
|
4
12
|
import { type GillCall, type GillReply } from "@fungi.computer/gills";
|
|
@@ -13,16 +21,15 @@ import { DurableObject, type WorkerEntrypoint } from "cloudflare:workers";
|
|
|
13
21
|
import * as Schema from "effect/Schema";
|
|
14
22
|
import type { Release } from "@fungi.computer/puffball";
|
|
15
23
|
import { type Backend, type Instance, type OwnerState } from "./index.js";
|
|
16
|
-
import { type FrameBindingReply, type FrameBindingMethod, type FrameBindingProps } from "./cloudflare.js";
|
|
24
|
+
import { r2ArtifactStore, type FrameBindingReply, type FrameBindingMethod, type FrameBindingProps } from "./cloudflare.js";
|
|
17
25
|
import { type BackgroundFrameState, type InvocationFacts, type InvocationFrame } from "./invocation.js";
|
|
18
26
|
import { type InstallationCommit, type InstanceResult, type OysterAuth, type OysterHost, type OysterJson } from "./host.js";
|
|
19
27
|
import { type AppStorageResult, type AppStorageWrite, type AppStorageReset, type ResolvedAppStorage } from "@fungi.computer/agar/storage";
|
|
20
28
|
import { type OysterRootDirectory } from "./root-data.js";
|
|
21
|
-
import { type ArtifactHeads, type ArtifactStore } from "./release.js";
|
|
22
29
|
import type { AppApi } from "@fungi.computer/puffball";
|
|
23
30
|
import type { AppDeclaration } from "@fungi.computer/puffball/app";
|
|
24
31
|
import { createOysterAppSourceReceipts, createOysterAppRegistrations, createOysterArtifactsRepositoryMetadataStore } from "./app-sources.js";
|
|
25
|
-
export { r2FileSource, ownerKeyAuth };
|
|
32
|
+
export { r2ArtifactStore, r2FileSource, ownerKeyAuth };
|
|
26
33
|
/** Native values returned by the standalone Git, event and JSON binding owners. */
|
|
27
34
|
export type OysterBindingResult = Awaited<ReturnType<GitBinding[keyof GitBinding]>> | Schema.Json | undefined;
|
|
28
35
|
/** Verified backend custody is captured in the frame, never in a current-context field. */
|
|
@@ -44,6 +51,8 @@ export type OysterStorageAgentDirectory = Readonly<{
|
|
|
44
51
|
}>;
|
|
45
52
|
/** Bindings a standalone Oyster Worker declares in its Wrangler config. */
|
|
46
53
|
export type OysterWorkerEnv = Readonly<{
|
|
54
|
+
/** Cloudflare Browser Run binding for the UI boot check and the agent browser. */
|
|
55
|
+
BROWSER?: BrowserBinding;
|
|
47
56
|
/** The owner's sign-in key, at least 24 characters (a secret). */
|
|
48
57
|
OYSTER_OWNER_KEY: string;
|
|
49
58
|
/** The single-tenant owner's identity, also recorded by the existing fleet creator. */
|
|
@@ -63,18 +72,120 @@ export type OysterWorkerEnv = Readonly<{
|
|
|
63
72
|
/** Worker Loader that runs App backends. */
|
|
64
73
|
LOADER: WorkerLoader;
|
|
65
74
|
}>;
|
|
66
|
-
/** Store Release artifacts in an R2 bucket. */
|
|
67
|
-
export declare function r2ArtifactStore(bucket: R2Bucket): ArtifactStore & ArtifactHeads;
|
|
68
75
|
/** The installation registry: one SQLite-backed Durable Object per Oyster. */
|
|
69
|
-
export declare class OysterRegistry extends DurableObject<
|
|
76
|
+
export declare class OysterRegistry<Env extends OysterWorkerEnv = OysterWorkerEnv> extends DurableObject<Env> {
|
|
70
77
|
#private;
|
|
78
|
+
/** The plain root has the same single owner-key host as OysterInstance. */
|
|
79
|
+
protected hostFor(scope: TenantScope): Promise<OysterHost>;
|
|
80
|
+
/** Trusted host RPC; an operation input cannot select actor, namespace or tenant. */
|
|
81
|
+
approvalSubmit(pin: Readonly<{
|
|
82
|
+
tenantId: string;
|
|
83
|
+
origin: string;
|
|
84
|
+
}>, call: OysterApprovalCall): Promise<{
|
|
85
|
+
readonly kind: "pending_approval";
|
|
86
|
+
readonly recordId: string;
|
|
87
|
+
readonly description: {
|
|
88
|
+
readonly title: string;
|
|
89
|
+
readonly inputBytes: number;
|
|
90
|
+
readonly inputSha256: string;
|
|
91
|
+
};
|
|
92
|
+
} | import("@fungi.computer/approvals").ApprovalApplyResult>;
|
|
93
|
+
private approvalHome;
|
|
94
|
+
/** Recover approved work from the durable home, not a last-request memory pin. */
|
|
95
|
+
private approvalAlarm;
|
|
96
|
+
/** Read a bounded page for the current member of the pinned native home. */
|
|
97
|
+
approvalList(pin: Readonly<{
|
|
98
|
+
tenantId: string;
|
|
99
|
+
origin: string;
|
|
100
|
+
}>, actor: HostActor, input: ApprovalListInput): Promise<Readonly<{
|
|
101
|
+
items: readonly import("@fungi.computer/approvals").ApprovalView[];
|
|
102
|
+
nextCursor: string | null;
|
|
103
|
+
}>>;
|
|
104
|
+
/** Read one member-scoped view; the native home resolves membership again. */
|
|
105
|
+
approvalGet(pin: Readonly<{
|
|
106
|
+
tenantId: string;
|
|
107
|
+
origin: string;
|
|
108
|
+
}>, actor: HostActor, input: Readonly<{
|
|
109
|
+
recordId: string;
|
|
110
|
+
}>): Promise<{
|
|
111
|
+
readonly record: {
|
|
112
|
+
readonly revision: number;
|
|
113
|
+
readonly by: {
|
|
114
|
+
readonly kind: "human";
|
|
115
|
+
readonly memberId: string;
|
|
116
|
+
} | {
|
|
117
|
+
readonly kind: "policy";
|
|
118
|
+
} | null;
|
|
119
|
+
readonly description: {
|
|
120
|
+
readonly title: string;
|
|
121
|
+
readonly inputBytes: number;
|
|
122
|
+
readonly inputSha256: string;
|
|
123
|
+
};
|
|
124
|
+
readonly operation: string;
|
|
125
|
+
readonly access: "write" | "external";
|
|
126
|
+
readonly expiresAt: number;
|
|
127
|
+
readonly reason: "pending" | "expired" | "not-found" | "not-eligible" | "already-answered" | "stale-revision" | "declined" | "fenced" | "not-granted" | "read-only" | "in-flight" | "outcome-unknown" | "identity-conflict" | null;
|
|
128
|
+
readonly updatedAt: number;
|
|
129
|
+
readonly module: string;
|
|
130
|
+
readonly recordId: string;
|
|
131
|
+
readonly authorityFence: string;
|
|
132
|
+
readonly requester: {
|
|
133
|
+
readonly principalId: string;
|
|
134
|
+
readonly agentId: string | null;
|
|
135
|
+
readonly sessionId: string | null;
|
|
136
|
+
readonly displayName: string;
|
|
137
|
+
};
|
|
138
|
+
readonly reversibility: "reversible" | "irreversible-external";
|
|
139
|
+
readonly state: "pending" | "expired" | "denied" | "applied" | "requested" | "approved" | "claimed" | "outcome_unknown";
|
|
140
|
+
readonly requestedAt: number;
|
|
141
|
+
readonly evidence?: readonly {
|
|
142
|
+
readonly kind: "artifact";
|
|
143
|
+
readonly ref: string;
|
|
144
|
+
readonly mediaType: "image/png";
|
|
145
|
+
readonly bytes: number;
|
|
146
|
+
}[] | undefined;
|
|
147
|
+
};
|
|
148
|
+
readonly canAnswer: boolean;
|
|
149
|
+
readonly canSetAutoApprove: boolean;
|
|
150
|
+
} | null>;
|
|
151
|
+
/** Persist an eligible answer and attempt its native decision work once. */
|
|
152
|
+
approvalAnswer(pin: Readonly<{
|
|
153
|
+
tenantId: string;
|
|
154
|
+
origin: string;
|
|
155
|
+
}>, actor: HostActor, input: ApprovalAnswerInput): Promise<Readonly<{
|
|
156
|
+
kind: "refused";
|
|
157
|
+
reason: "pending" | "expired" | "not-found" | "not-eligible" | "already-answered" | "stale-revision" | "declined" | "fenced" | "not-granted" | "read-only" | "in-flight" | "outcome-unknown" | "identity-conflict";
|
|
158
|
+
}> | Readonly<{
|
|
159
|
+
kind: "answered";
|
|
160
|
+
view: import("@fungi.computer/approvals").ApprovalView;
|
|
161
|
+
}>>;
|
|
162
|
+
/** Policy never grants operation authority; only the live Oyster owner may change it. */
|
|
163
|
+
approvalSetAutoApprove(pin: Readonly<{
|
|
164
|
+
tenantId: string;
|
|
165
|
+
origin: string;
|
|
166
|
+
}>, actor: HostActor, input: AutoApproveInput): Promise<Readonly<{
|
|
167
|
+
kind: "refused";
|
|
168
|
+
reason: "pending" | "expired" | "not-found" | "not-eligible" | "already-answered" | "stale-revision" | "declined" | "fenced" | "not-granted" | "read-only" | "in-flight" | "outcome-unknown" | "identity-conflict";
|
|
169
|
+
}> | Readonly<{
|
|
170
|
+
kind: "updated";
|
|
171
|
+
rule: AutoApproveInput;
|
|
172
|
+
}>>;
|
|
71
173
|
/** Append-only App source seed receipts; a Git-capable subclass forks over these. */
|
|
72
174
|
protected readonly appSourceReceipts: ReturnType<typeof createOysterAppSourceReceipts>;
|
|
73
175
|
/** Team-owned fork registrations, one App publisher record per App. */
|
|
74
176
|
protected readonly appRegistrations: ReturnType<typeof createOysterAppRegistrations>;
|
|
75
177
|
/** Durable Artifacts repository provenance for this Oyster's own fork compositions. */
|
|
76
178
|
protected readonly artifactsRepositories: ReturnType<typeof createOysterArtifactsRepositoryMetadataStore>;
|
|
77
|
-
constructor(ctx: DurableObjectState, env:
|
|
179
|
+
constructor(ctx: DurableObjectState, env: Env);
|
|
180
|
+
/** The installation owner's RPC: admit, read, load, plan or commit one
|
|
181
|
+
* retained command for the caller's tenant scope. */
|
|
182
|
+
installationOperation(input: InstallationOperationRequest): Promise<InstallationOperationReply>;
|
|
183
|
+
/**
|
|
184
|
+
* One Registry wake serves both owners: installation work, then the native
|
|
185
|
+
* approval home. Each re-arms only an earlier wake, so neither postpones the
|
|
186
|
+
* other, and one owner's failure never skips the other's quantum.
|
|
187
|
+
*/
|
|
188
|
+
alarm(): Promise<void>;
|
|
78
189
|
/** Current desktop metadata; roles are the ADR's derived default, never Hub's stored choice. */
|
|
79
190
|
directory(): Promise<OysterRootDirectory>;
|
|
80
191
|
/** Read one key for the authenticated root owner, under fresh App admission. */
|
|
@@ -100,16 +211,30 @@ export declare class OysterRegistry extends DurableObject<OysterWorkerEnv> {
|
|
|
100
211
|
*/
|
|
101
212
|
protected currentOwner(memberId: string, tenantId: TenantId): Promise<string | null>;
|
|
102
213
|
private storageView;
|
|
214
|
+
/** Whether this registry's data was written by Oyster 0.2 or earlier; hosts refuse it. */
|
|
215
|
+
storeFromOlderOyster(): boolean;
|
|
103
216
|
/** Every installation record. */
|
|
104
217
|
list(): Installation[];
|
|
105
218
|
/** One installation record, or `null`. */
|
|
106
219
|
get(installationId: string): Installation | null;
|
|
107
|
-
/**
|
|
108
|
-
|
|
220
|
+
/** Durable store identity, regenerated only when the store itself is replaced. */
|
|
221
|
+
generation(): string;
|
|
109
222
|
/** Native RPC returns a closed result; callers never classify a transported Error. */
|
|
110
|
-
compareAndPut(installation: Installation, expectedAuthorityVersion: number, tenantId?: TenantId): Promise<InstallationCommit>;
|
|
223
|
+
compareAndPut(installation: Installation, expectedAuthorityVersion: number, expectedGeneration: string, tenantId?: TenantId): Promise<InstallationCommit>;
|
|
111
224
|
private writeInstallation;
|
|
112
225
|
private decode;
|
|
226
|
+
/** Issue, resolve, or revoke one bounded capability without storing its token. */
|
|
227
|
+
bootCapability(input: Readonly<{
|
|
228
|
+
kind: "issue";
|
|
229
|
+
grant: BootCapabilityGrant;
|
|
230
|
+
}> | Readonly<{
|
|
231
|
+
kind: "resolve";
|
|
232
|
+
tokenDigest: string;
|
|
233
|
+
now: number;
|
|
234
|
+
}> | Readonly<{
|
|
235
|
+
kind: "revoke";
|
|
236
|
+
id: string;
|
|
237
|
+
}>): BootCapabilityLease | null | undefined;
|
|
113
238
|
}
|
|
114
239
|
/** What a binding row may read from the Instance that owns the frame. */
|
|
115
240
|
export type OysterBindingContext<Env> = Readonly<{
|
|
@@ -153,6 +278,10 @@ export declare function oysterBindingEntrypoint<Env extends OysterWorkerEnv>(tab
|
|
|
153
278
|
/** The plain Oyster host's bindings: App storage, the read-only catalog and replay admission. */
|
|
154
279
|
export declare const oysterBindings: OysterBindingTable<OysterWorkerEnv>;
|
|
155
280
|
declare const OysterBinding_base: abstract new (ctx: ExecutionContext, env: Readonly<{
|
|
281
|
+
/** Cloudflare Browser Run binding for the UI boot check and the agent browser. */
|
|
282
|
+
BROWSER?: Readonly<{
|
|
283
|
+
fetch: import("./browser/cdp-client.js").HttpFetch;
|
|
284
|
+
}>;
|
|
156
285
|
/** The owner's sign-in key, at least 24 characters (a secret). */
|
|
157
286
|
OYSTER_OWNER_KEY: string;
|
|
158
287
|
/** The single-tenant owner's identity, also recorded by the existing fleet creator. */
|
|
@@ -178,6 +307,10 @@ declare const OysterBinding_base: abstract new (ctx: ExecutionContext, env: Read
|
|
|
178
307
|
/** Worker Loader that runs App backends. */
|
|
179
308
|
LOADER: WorkerLoader;
|
|
180
309
|
}>) => WorkerEntrypoint<Readonly<{
|
|
310
|
+
/** Cloudflare Browser Run binding for the UI boot check and the agent browser. */
|
|
311
|
+
BROWSER?: Readonly<{
|
|
312
|
+
fetch: import("./browser/cdp-client.js").HttpFetch;
|
|
313
|
+
}>;
|
|
181
314
|
/** The owner's sign-in key, at least 24 characters (a secret). */
|
|
182
315
|
OYSTER_OWNER_KEY: string;
|
|
183
316
|
/** The single-tenant owner's identity, also recorded by the existing fleet creator. */
|
|
@@ -234,7 +367,7 @@ export declare class OysterInstance<Env extends OysterWorkerEnv = OysterWorkerEn
|
|
|
234
367
|
private readonly gitJournal;
|
|
235
368
|
constructor(ctx: DurableObjectState, env: Env);
|
|
236
369
|
/** The deployable root's host for one pinned tenant; this plain root is the single owner key. */
|
|
237
|
-
protected hostFor(scope: TenantScope): OysterHost
|
|
370
|
+
protected hostFor(scope: TenantScope): Promise<OysterHost>;
|
|
238
371
|
/** Reconstruct current host admission for each wake; non-default tenants get no wakes. */
|
|
239
372
|
protected backgroundHost(): Promise<OysterHost | null>;
|
|
240
373
|
private localInstance;
|
|
@@ -263,7 +396,10 @@ export declare class OysterInstance<Env extends OysterWorkerEnv = OysterWorkerEn
|
|
|
263
396
|
private assertCurrent;
|
|
264
397
|
private withFrame;
|
|
265
398
|
private release;
|
|
266
|
-
|
|
399
|
+
private rememberRelease;
|
|
400
|
+
/** Reuse lifecycle preflight without changing the active runtime or its budgets. */
|
|
401
|
+
prepare(state: OwnerState, release: Release, limits?: GuestLimits, tenant?: Pick<TenantScope, "tenantId" | "origin">): Promise<InstanceResult<import("./boot-gate.js").UiBootCheckOutcome | null>>;
|
|
402
|
+
/** Activate the exact committed selection under the host's tenant pin. */
|
|
267
403
|
apply(state: OwnerState, release: Release, limits: GuestLimits | undefined, tenant: Pick<TenantScope, "tenantId" | "origin">): Promise<InstanceResult<Instance>>;
|
|
268
404
|
/** Forward an admitted HTTP request to the App backend. */
|
|
269
405
|
backend(facts: InvocationFacts, request: Request, limits?: GuestLimits, tenantId?: TenantId): Promise<Response>;
|
|
@@ -286,12 +422,21 @@ export type OysterWorkspace = Readonly<{
|
|
|
286
422
|
/** Caller-scoped Computer calls; file-only workspaces omit it. */
|
|
287
423
|
computer?: OysterHost["computer"];
|
|
288
424
|
}>;
|
|
289
|
-
/**
|
|
425
|
+
/** Resolve a scoped boot URL through the registry-backed HTTPS asset route. */
|
|
426
|
+
export declare function serveOysterBootCapability(request: Request, env: OysterWorkerEnv, scope: TenantScope): Promise<Response | null>;
|
|
427
|
+
/**
|
|
428
|
+
* Create an Oyster host backed by this Worker environment's registry,
|
|
429
|
+
* artifacts, Instances, and boot-check service.
|
|
430
|
+
*/
|
|
290
431
|
export declare function oysterWorkerHost(env: OysterWorkerEnv, auth: OysterAuth, options?: Pick<OysterHost, "guestLimits" | "appToolPolicy"> & Readonly<{
|
|
291
432
|
workspace?: OysterWorkspace;
|
|
292
433
|
scope?: TenantScope;
|
|
293
434
|
}>): OysterHost;
|
|
294
435
|
declare const OysterMcp_base: new (ctx: DurableObjectState, env: Readonly<{
|
|
436
|
+
/** Cloudflare Browser Run binding for the UI boot check and the agent browser. */
|
|
437
|
+
BROWSER?: Readonly<{
|
|
438
|
+
fetch: import("./browser/cdp-client.js").HttpFetch;
|
|
439
|
+
}>;
|
|
295
440
|
/** The owner's sign-in key, at least 24 characters (a secret). */
|
|
296
441
|
OYSTER_OWNER_KEY: string;
|
|
297
442
|
/** The single-tenant owner's identity, also recorded by the existing fleet creator. */
|
|
@@ -317,6 +462,10 @@ declare const OysterMcp_base: new (ctx: DurableObjectState, env: Readonly<{
|
|
|
317
462
|
/** Worker Loader that runs App backends. */
|
|
318
463
|
LOADER: WorkerLoader;
|
|
319
464
|
}>) => OysterMcpOwner<Readonly<{
|
|
465
|
+
/** Cloudflare Browser Run binding for the UI boot check and the agent browser. */
|
|
466
|
+
BROWSER?: Readonly<{
|
|
467
|
+
fetch: import("./browser/cdp-client.js").HttpFetch;
|
|
468
|
+
}>;
|
|
320
469
|
/** The owner's sign-in key, at least 24 characters (a secret). */
|
|
321
470
|
OYSTER_OWNER_KEY: string;
|
|
322
471
|
/** The single-tenant owner's identity, also recorded by the existing fleet creator. */
|
|
@@ -345,6 +494,70 @@ declare const OysterMcp_base: new (ctx: DurableObjectState, env: Readonly<{
|
|
|
345
494
|
/** The non-git standalone root's MCP owner. */
|
|
346
495
|
export declare class OysterMcp extends OysterMcp_base {
|
|
347
496
|
}
|
|
497
|
+
declare const OysterInstallationExecutor_base: new (ctx: ExecutionContext, env: Readonly<{
|
|
498
|
+
/** Cloudflare Browser Run binding for the UI boot check and the agent browser. */
|
|
499
|
+
BROWSER?: Readonly<{
|
|
500
|
+
fetch: import("./browser/cdp-client.js").HttpFetch;
|
|
501
|
+
}>;
|
|
502
|
+
/** The owner's sign-in key, at least 24 characters (a secret). */
|
|
503
|
+
OYSTER_OWNER_KEY: string;
|
|
504
|
+
/** The single-tenant owner's identity, also recorded by the existing fleet creator. */
|
|
505
|
+
OYSTER_OWNER_NAME?: string;
|
|
506
|
+
/** Optional existing fleet owner; absence grants no Agent storage authority. */
|
|
507
|
+
AGENT_DIRECTORY?: Readonly<{
|
|
508
|
+
/** Resolve the host-owned fleet directory by its existing durable name. */
|
|
509
|
+
getByName(name: string): Readonly<{
|
|
510
|
+
/** Return the recorded creator, or null when the Agent has no owner record. */
|
|
511
|
+
readCreator(agentId: string): Promise<string | null>;
|
|
512
|
+
}>;
|
|
513
|
+
}>;
|
|
514
|
+
/** Canonical configured origin; requests cannot choose the owner tenant. */
|
|
515
|
+
OYSTER_ORIGIN: string;
|
|
516
|
+
/** One tenant-scoped MCP session owner. Required when serving /mcp. */
|
|
517
|
+
MCP: DurableObjectNamespace<OysterMcpOwner>;
|
|
518
|
+
/** Release artifacts, keyed by artifact reference. */
|
|
519
|
+
RELEASES: R2Bucket;
|
|
520
|
+
/** The installation registry. */
|
|
521
|
+
REGISTRY: DurableObjectNamespace<OysterRegistry>;
|
|
522
|
+
/** One Durable Object per App Instance. */
|
|
523
|
+
INSTANCES: DurableObjectNamespace<OysterInstance>;
|
|
524
|
+
/** Worker Loader that runs App backends. */
|
|
525
|
+
LOADER: WorkerLoader;
|
|
526
|
+
}>) => WorkerEntrypoint<Readonly<{
|
|
527
|
+
/** Cloudflare Browser Run binding for the UI boot check and the agent browser. */
|
|
528
|
+
BROWSER?: Readonly<{
|
|
529
|
+
fetch: import("./browser/cdp-client.js").HttpFetch;
|
|
530
|
+
}>;
|
|
531
|
+
/** The owner's sign-in key, at least 24 characters (a secret). */
|
|
532
|
+
OYSTER_OWNER_KEY: string;
|
|
533
|
+
/** The single-tenant owner's identity, also recorded by the existing fleet creator. */
|
|
534
|
+
OYSTER_OWNER_NAME?: string;
|
|
535
|
+
/** Optional existing fleet owner; absence grants no Agent storage authority. */
|
|
536
|
+
AGENT_DIRECTORY?: Readonly<{
|
|
537
|
+
/** Resolve the host-owned fleet directory by its existing durable name. */
|
|
538
|
+
getByName(name: string): Readonly<{
|
|
539
|
+
/** Return the recorded creator, or null when the Agent has no owner record. */
|
|
540
|
+
readCreator(agentId: string): Promise<string | null>;
|
|
541
|
+
}>;
|
|
542
|
+
}>;
|
|
543
|
+
/** Canonical configured origin; requests cannot choose the owner tenant. */
|
|
544
|
+
OYSTER_ORIGIN: string;
|
|
545
|
+
/** One tenant-scoped MCP session owner. Required when serving /mcp. */
|
|
546
|
+
MCP: DurableObjectNamespace<OysterMcpOwner>;
|
|
547
|
+
/** Release artifacts, keyed by artifact reference. */
|
|
548
|
+
RELEASES: R2Bucket;
|
|
549
|
+
/** The installation registry. */
|
|
550
|
+
REGISTRY: DurableObjectNamespace<OysterRegistry>;
|
|
551
|
+
/** One Durable Object per App Instance. */
|
|
552
|
+
INSTANCES: DurableObjectNamespace<OysterInstance>;
|
|
553
|
+
/** Worker Loader that runs App backends. */
|
|
554
|
+
LOADER: WorkerLoader;
|
|
555
|
+
}>, unknown> & {
|
|
556
|
+
run(): Promise<import("./installation-operations.js").InstallationOutcome>;
|
|
557
|
+
};
|
|
558
|
+
/** Ordinary Worker execution; REGISTRY receives references and receipts only. */
|
|
559
|
+
export declare class OysterInstallationExecutor extends OysterInstallationExecutor_base {
|
|
560
|
+
}
|
|
348
561
|
/**
|
|
349
562
|
* The standalone Worker's `fetch` handler; frontend hosts are cached per env.
|
|
350
563
|
* MCP transports belong to the tenant Durable Object, independent of that cache.
|