apps 0.0.1-beta.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 +191 -0
- package/check-publish.mjs +10 -0
- package/framework-reference.json +1 -0
- package/js/chunk-22WRQZT7.js +389 -0
- package/js/chunk-2OTCEKL2.js +29480 -0
- package/js/chunk-36DNRFZQ.js +34 -0
- package/js/chunk-3ANFZFCV.js +1799 -0
- package/js/chunk-7JXHF5IF.js +138 -0
- package/js/chunk-BCSNKUAC.js +0 -0
- package/js/chunk-BKVL7XAJ.js +47 -0
- package/js/chunk-BPEFS4YF.js +1323 -0
- package/js/chunk-C24KEZXR.js +59 -0
- package/js/chunk-D6BKYP2L.js +877 -0
- package/js/chunk-EP6AEUZO.js +19 -0
- package/js/chunk-HP7E42X6.js +1719 -0
- package/js/chunk-KWTCHVLT.js +284 -0
- package/js/chunk-LOKGDT6B.js +28 -0
- package/js/chunk-MLKGABMK.js +9 -0
- package/js/chunk-OWD2YICM.js +2486 -0
- package/js/chunk-Q2FD5IBM.js +899 -0
- package/js/chunk-R6JMJSVT.js +590 -0
- package/js/chunk-SBKHUC5L.js +56 -0
- package/js/chunk-VFUZI3NY.js +75 -0
- package/js/chunk-W7Q5EOTS.js +4375 -0
- package/js/chunk-WIDTG42X.js +171 -0
- package/js/chunk-X3YBZCJW.js +246 -0
- package/js/chunk-YDR4CPJA.js +2357 -0
- package/js/client.js +1023 -0
- package/js/contracts.js +163 -0
- package/js/effect.js +44 -0
- package/js/graphql.js +392 -0
- package/js/host.js +193 -0
- package/js/index.js +284 -0
- package/js/mcp/effect.js +23 -0
- package/js/mcp/stdio.js +123 -0
- package/js/mcp.js +37 -0
- package/js/openapi.js +246 -0
- package/js/operations/approval.js +9 -0
- package/js/react.js +37 -0
- package/js/storage/facet.js +546 -0
- package/js/ui/auth/contracts.js +19 -0
- package/js/ui/auth.js +28 -0
- package/js/ui/contracts.js +24 -0
- package/js/ui/serving.js +286 -0
- package/package.json +116 -0
- package/runtime.json +1 -0
- package/types/app-data/src/contracts/database.d.ts +193 -0
- package/types/app-data/src/implementation/cursor.d.ts +10 -0
- package/types/app-data/src/implementation/index-key.d.ts +7 -0
- package/types/app-data/src/implementation/promise.d.ts +68 -0
- package/types/app-data/src/implementation/range.d.ts +8 -0
- package/types/app-data/src/implementation/schema.d.ts +33 -0
- package/types/app-data/src/implementation/sqlite.d.ts +11 -0
- package/types/app-data/src/index.d.ts +4 -0
- package/types/apps/src/approval.d.ts +10 -0
- package/types/apps/src/client.d.ts +5 -0
- package/types/apps/src/contracts/app.d.ts +58 -0
- package/types/apps/src/contracts/approval.d.ts +14 -0
- package/types/apps/src/contracts/context.d.ts +25 -0
- package/types/apps/src/contracts/elicitation.d.ts +86 -0
- package/types/apps/src/contracts/graphql.d.ts +102 -0
- package/types/apps/src/contracts/host.d.ts +568 -0
- package/types/apps/src/contracts/http.d.ts +20 -0
- package/types/apps/src/contracts/live.d.ts +26 -0
- package/types/apps/src/contracts/mcp.d.ts +93 -0
- package/types/apps/src/contracts/openapi.d.ts +105 -0
- package/types/apps/src/contracts/operations.d.ts +30 -0
- package/types/apps/src/contracts/optimistic.d.ts +22 -0
- package/types/apps/src/contracts/provider.d.ts +96 -0
- package/types/apps/src/contracts/schedules.d.ts +51 -0
- package/types/apps/src/contracts/schema.d.ts +20 -0
- package/types/apps/src/contracts/storage.d.ts +68 -0
- package/types/apps/src/contracts/tools.d.ts +11 -0
- package/types/apps/src/contracts/ui-auth.d.ts +28 -0
- package/types/apps/src/contracts/ui.d.ts +90 -0
- package/types/apps/src/contracts/webhook-protocol.d.ts +102 -0
- package/types/apps/src/contracts/webhooks.d.ts +53 -0
- package/types/apps/src/contracts/workflows.d.ts +277 -0
- package/types/apps/src/effect.d.ts +10 -0
- package/types/apps/src/facet.d.ts +5 -0
- package/types/apps/src/graphql.d.ts +10 -0
- package/types/apps/src/host.d.ts +16 -0
- package/types/apps/src/implementation/account-operations.d.ts +32 -0
- package/types/apps/src/implementation/app.d.ts +40 -0
- package/types/apps/src/implementation/authoring.d.ts +12 -0
- package/types/apps/src/implementation/elicitation.d.ts +103 -0
- package/types/apps/src/implementation/graphql.d.ts +5 -0
- package/types/apps/src/implementation/host.d.ts +3 -0
- package/types/apps/src/implementation/http.d.ts +5 -0
- package/types/apps/src/implementation/live.d.ts +18 -0
- package/types/apps/src/implementation/mcp-call.d.ts +19 -0
- package/types/apps/src/implementation/mcp-client.d.ts +50 -0
- package/types/apps/src/implementation/mcp-stdio.d.ts +4 -0
- package/types/apps/src/implementation/mcp-tools.d.ts +6 -0
- package/types/apps/src/implementation/mcp.d.ts +4 -0
- package/types/apps/src/implementation/openapi-request.d.ts +11 -0
- package/types/apps/src/implementation/openapi.d.ts +5 -0
- package/types/apps/src/implementation/operations.d.ts +65 -0
- package/types/apps/src/implementation/optimistic.d.ts +30 -0
- package/types/apps/src/implementation/protocol-operations.d.ts +24 -0
- package/types/apps/src/implementation/provider.d.ts +16 -0
- package/types/apps/src/implementation/query-commit.d.ts +10 -0
- package/types/apps/src/implementation/schedules.d.ts +16 -0
- package/types/apps/src/implementation/schema.d.ts +93 -0
- package/types/apps/src/implementation/storage.d.ts +13 -0
- package/types/apps/src/implementation/ui-auth.d.ts +13 -0
- package/types/apps/src/implementation/ui-client.d.ts +16 -0
- package/types/apps/src/implementation/ui-errors.d.ts +2 -0
- package/types/apps/src/implementation/ui-serving.d.ts +16 -0
- package/types/apps/src/implementation/ui-watch.d.ts +2 -0
- package/types/apps/src/implementation/webhooks.d.ts +29 -0
- package/types/apps/src/implementation/workflow-context.d.ts +8 -0
- package/types/apps/src/implementation/workflow-rpc.d.ts +5 -0
- package/types/apps/src/implementation/workflows.d.ts +27 -0
- package/types/apps/src/index.d.ts +58 -0
- package/types/apps/src/mcp-stdio.d.ts +8 -0
- package/types/apps/src/mcp.d.ts +10 -0
- package/types/apps/src/openapi.d.ts +10 -0
- package/types/apps/src/react.d.ts +7 -0
- package/types/apps/src/ui-auth.d.ts +3 -0
- package/types/apps/src/ui-serving.d.ts +3 -0
- package/types/telemetry/src/browser-operations.d.ts +16 -0
- package/types/telemetry/src/browser-performance.d.ts +11 -0
- package/types/telemetry/src/browser-request-timing.d.ts +2 -0
- package/types/telemetry/src/browser.d.ts +27 -0
- package/types/telemetry/src/config.d.ts +83 -0
- package/types/telemetry/src/context.d.ts +14 -0
- package/types/telemetry/src/index.d.ts +9 -0
- package/types/telemetry/src/layer.d.ts +7 -0
- package/types/telemetry/src/measurements.d.ts +8 -0
- package/types/telemetry/src/pending-span.d.ts +7 -0
- package/types/telemetry/src/relay.d.ts +28 -0
- package/types/telemetry/src/span-attributes.d.ts +29 -0
- package/types/telemetry/src/trace-context.d.ts +20 -0
- package/types/telemetry/src/transport.d.ts +6 -0
package/README.md
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Apps
|
|
2
|
+
|
|
3
|
+
Author apps with ordinary TypeScript and Promises. Framework operations use
|
|
4
|
+
Effect v4 internally. The root export contains declarations and schemas;
|
|
5
|
+
protocol helpers have separate entry points.
|
|
6
|
+
|
|
7
|
+
The Executor package starts at `0.0.1-beta.0`. The first npm beta is being
|
|
8
|
+
prepared; `latest` belongs to the earlier package and is not this framework.
|
|
9
|
+
Once the beta is published, install it with `npm install --save-exact apps@beta`.
|
|
10
|
+
For local testing, install the tarball made by `bun run pack` in this directory.
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import { defineApp } from "apps";
|
|
14
|
+
import { mcpOperations } from "apps/mcp";
|
|
15
|
+
|
|
16
|
+
export default defineApp({ accounts: {} }, async ({ signal }) => ({
|
|
17
|
+
...(await mcpOperations({
|
|
18
|
+
url: "https://mcp.deepwiki.com/mcp",
|
|
19
|
+
...(signal === undefined ? {} : { signal }),
|
|
20
|
+
})),
|
|
21
|
+
}));
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
| Import | Helper | App dependency |
|
|
25
|
+
| ---------------- | ------------------- | --------------------------- |
|
|
26
|
+
| `apps/mcp` | `mcpOperations` | `@modelcontextprotocol/sdk` |
|
|
27
|
+
| `apps/mcp/stdio` | `stdioOperations` | `@modelcontextprotocol/sdk` |
|
|
28
|
+
| `apps/graphql` | `graphqlOperations` | `graphql` |
|
|
29
|
+
| `apps/openapi` | `openapiOperations` | None |
|
|
30
|
+
|
|
31
|
+
MCP and GraphQL are optional peers. Subpath imports isolate their module graphs;
|
|
32
|
+
optional peers keep unused libraries out of the dependency installation. The
|
|
33
|
+
MCP HTTP entry point does not import the stdio process adapter. Stdio requires
|
|
34
|
+
a host with process support.
|
|
35
|
+
|
|
36
|
+
`defineApp` declares behavior, not a name. Package identity lives in
|
|
37
|
+
`package.json.name`; the host separately names each installed copy.
|
|
38
|
+
|
|
39
|
+
Declare the needed peer in the deployed app's `package.json`, for example:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{ "name": "deepwiki", "dependencies": { "@modelcontextprotocol/sdk": "1.30.0" } }
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Product runtimes compile authored source and declared dependencies inside workerd,
|
|
46
|
+
then retain the executable Worker modules. Declare `apps` in `package.json` to
|
|
47
|
+
select its npm version for both server and browser code. Use an exact version to
|
|
48
|
+
keep rebuilds repeatable. Apps with no `apps` dependency use the host's framework.
|
|
49
|
+
In this repository, playground workspaces use `"apps": "workspace:*"` for development;
|
|
50
|
+
replace that workspace reference with a released version before deployment.
|
|
51
|
+
|
|
52
|
+
`openapiOperations` accepts normalized operations from the template generator,
|
|
53
|
+
credential placement metadata, and an optional selected account. It does not
|
|
54
|
+
parse a raw OpenAPI specification. `packages/app-templates` owns that compiler.
|
|
55
|
+
No extra OpenAPI parser is installed in the app.
|
|
56
|
+
|
|
57
|
+
Authenticated templates use `provider.many()` and `accountOperations` from `apps`:
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
export default defineApp({ accounts: { service: provider.many() } }, async ({ accounts, signal }) =>
|
|
61
|
+
accountOperations(
|
|
62
|
+
accounts.service,
|
|
63
|
+
(account) =>
|
|
64
|
+
mcpOperations({
|
|
65
|
+
url: "https://example.com/mcp",
|
|
66
|
+
headers: { Authorization: "Bearer " + account.fields.token },
|
|
67
|
+
signal,
|
|
68
|
+
}),
|
|
69
|
+
{ signal },
|
|
70
|
+
),
|
|
71
|
+
);
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Each combined tool takes `{ accountId, input }`. `input` keeps the upstream shape;
|
|
75
|
+
`accountId` must identify a selected account that exposes that tool. Discovery
|
|
76
|
+
and validation remain specific to each account. An empty selection returns no
|
|
77
|
+
tools. This helper also works with OpenAPI, GraphQL and stdio operations.
|
|
78
|
+
|
|
79
|
+
Contracts live in `src/contracts/`; native operations live in `src/implementation/`.
|
|
80
|
+
Promise conversion happens at the public entry points. `apps/mcp/effect` exposes
|
|
81
|
+
the native HTTP discovery operation for host-side import probing.
|
|
82
|
+
|
|
83
|
+
Helpers are ordinary app libraries. The SDK still builds and invokes one app
|
|
84
|
+
model with the configured account selections; there is no protocol dispatcher.
|
|
85
|
+
Existing retained builds keep their bundled code until a new deployment.
|
|
86
|
+
|
|
87
|
+
The packaged runtime uses host protocol 1. A package missing that runtime or using
|
|
88
|
+
an unsupported protocol fails at build time; it is never replaced silently with
|
|
89
|
+
the host's framework. An unsuccessful update preserves the active deployment.
|
|
90
|
+
Beta compatibility is checked with an earlier package fixture, not a promise to
|
|
91
|
+
support all historical versions indefinitely.
|
|
92
|
+
|
|
93
|
+
Each query or mutation can declare `approval` in its options. Import `always()` or
|
|
94
|
+
`never()` from `apps/operations/approval`, or supply a synchronous/async callback that
|
|
95
|
+
returns `approved`, `denied`, or `user-approval`. It receives `toolName`, decoded
|
|
96
|
+
`toolInput`, and `signal`. Reuse a policy function across tools or attach it when
|
|
97
|
+
composing generated tools. There is no app-level policy.
|
|
98
|
+
The framework enforces the decision before the selected tool body.
|
|
99
|
+
Human approval delivery is separate; Executor SDK call/resume persists the pending invocation. See [tool approvals](../../notes/app-policies.md).
|
|
100
|
+
|
|
101
|
+
## Browser UI
|
|
102
|
+
|
|
103
|
+
React is the only supported app UI framework for now. Add `ui/index.html` with
|
|
104
|
+
a module script such as `./main.tsx`, and declare `react` and `react-dom` in the
|
|
105
|
+
app's dependencies. UI code is compiled into a separate browser bundle; import
|
|
106
|
+
server operation types with `import type`. SSR and React Server Components are
|
|
107
|
+
not supported yet.
|
|
108
|
+
|
|
109
|
+
Use your own React components or browser-compatible npm component libraries.
|
|
110
|
+
Declare library dependencies and include their required styles and assets.
|
|
111
|
+
Libraries that need custom build plugins require additional build support.
|
|
112
|
+
|
|
113
|
+
Tailwind CSS v4 compilation is built in. Import a stylesheet from your React
|
|
114
|
+
entry and put `@import "tailwindcss";` in that stylesheet. No Tailwind package,
|
|
115
|
+
config file or separate build command is required. Ordinary CSS imports and
|
|
116
|
+
stylesheet links continue to work.
|
|
117
|
+
|
|
118
|
+
The build scans complete class names in the browser bundle, including imported
|
|
119
|
+
components and lazy chunks. Use CSS `@theme` for custom tokens and `@source
|
|
120
|
+
inline("...")` for classes that only arrive at runtime. Filesystem `@source`
|
|
121
|
+
paths and JavaScript `@config` or `@plugin` files are not supported.
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
import type { listMessages, receiveMessage } from "./index.ts";
|
|
125
|
+
import { array } from "apps";
|
|
126
|
+
import { createAppClient, queryReference, mutationReference } from "apps/client";
|
|
127
|
+
import { Message } from "./schema.ts";
|
|
128
|
+
|
|
129
|
+
const client = createAppClient();
|
|
130
|
+
const inbox = client.queryAtom(
|
|
131
|
+
queryReference<typeof listMessages>("listMessages"),
|
|
132
|
+
{},
|
|
133
|
+
array(Message),
|
|
134
|
+
);
|
|
135
|
+
await client.mutate(
|
|
136
|
+
mutationReference<typeof receiveMessage>("receiveMessage"),
|
|
137
|
+
{ id: crypto.randomUUID(), subject: "Hello" },
|
|
138
|
+
Message,
|
|
139
|
+
);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
React components use `useAppQuery(inbox)` from `apps/react`. It returns `data`,
|
|
143
|
+
`pending`, and `error`, and owns its Effect Atom subscription until unmount.
|
|
144
|
+
`apps/react` requires the optional React peer; apps without a UI do not need it.
|
|
145
|
+
Use the Promise client methods for one-time reads and explicit writes.
|
|
146
|
+
|
|
147
|
+
The product host supplies authentication and binds the browser to one configured
|
|
148
|
+
app. No app ID, account token or Executor API key belongs in UI code. New
|
|
149
|
+
activations reload open app pages. See [the full example](../../playground/demo-apps/live-inbox/ui/main.tsx)
|
|
150
|
+
and [hosting notes](../../notes/app-ui.md).
|
|
151
|
+
|
|
152
|
+
## Webhooks
|
|
153
|
+
|
|
154
|
+
Expose `webhooks: { issueOpened }` beside queries and mutations. Each definition
|
|
155
|
+
has an `account` requirement, `config` and `state` schemas, and async `register`,
|
|
156
|
+
`handle`, and `unregister` callbacks. Register and unregister must be idempotent;
|
|
157
|
+
handle must verify the provider signature before acting.
|
|
158
|
+
|
|
159
|
+
The SDK creates durable subscriptions with `executor.webhooks.create`. A
|
|
160
|
+
subscription pins its deployment and saved account IDs while resolving fresh
|
|
161
|
+
credentials on each invocation. `.many()` sources use one subscription per
|
|
162
|
+
selected source account. Local, self-host and cloud use the same author API.
|
|
163
|
+
See [the lifecycle and management API](../../notes/webhooks.md) and
|
|
164
|
+
[the GitHub/Gmail example](../../playground/demo-apps/issue-mail/webhooks.ts).
|
|
165
|
+
|
|
166
|
+
Providers without a webhook API can use
|
|
167
|
+
`setup: { instructions: "...", signingSecret: "executor" }`
|
|
168
|
+
instead of `register` and `unregister`. The private setup page collects the
|
|
169
|
+
`state` schema and the signing secret. Agents get a setup link and safe status
|
|
170
|
+
through the normal management API. See [manual setup](../../notes/webhooks.md#manual-registration).
|
|
171
|
+
|
|
172
|
+
## Workflows
|
|
173
|
+
|
|
174
|
+
Declare `workflow(options, handler)` and register it in `defineApp(...).workflows`.
|
|
175
|
+
Use `WorkflowContext<typeof requirements>` for a standalone handler. The body gets
|
|
176
|
+
`runId` and `step`. `step.do` supplies fresh accounts and fetch; `step.runQuery`
|
|
177
|
+
and `step.runMutation` call registered operations. Durable timers use `step.sleep`
|
|
178
|
+
and `step.sleepUntil`.
|
|
179
|
+
|
|
180
|
+
Start and inspect runs through `executor.apps.workflowRuns`. Inside an app,
|
|
181
|
+
queries can inspect `ctx.workflows`; mutations and webhooks can also start and
|
|
182
|
+
terminate runs. Workflow execution has no live `elicit` capability.
|
|
183
|
+
|
|
184
|
+
See [workflow semantics](../../notes/app-workflows.md) for replay, idempotency,
|
|
185
|
+
self-host recovery and v1 limits, and the
|
|
186
|
+
[repository report example](../../playground/demo-apps/workflow-report/) for a full app.
|
|
187
|
+
|
|
188
|
+
Local and self-host products run authored apps in Alchemy/workerd, using the
|
|
189
|
+
same Worker build format and app-data facets as Cloud. Host filesystem and
|
|
190
|
+
subprocess access are unavailable to app code. Agent `execute(code)` continues
|
|
191
|
+
to use OpenCode CodeMode.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Early releases are deliberately beta-only, including direct npm publish calls. */
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
|
|
4
|
+
const manifest = JSON.parse(await readFile(new URL("./package.json", import.meta.url), "utf8"));
|
|
5
|
+
const tag = process.env.npm_config_tag ?? manifest.publishConfig?.tag;
|
|
6
|
+
if (!/^0\.0\.\d+-beta\.\d+$/.test(manifest.version) || tag !== "beta") {
|
|
7
|
+
throw new Error(
|
|
8
|
+
"Publish apps as 0.0.x-beta.N with --tag beta. Stable releases need an explicit policy change.",
|
|
9
|
+
);
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"0.0.1-beta.0","digest":"e1845fd07cf0b9aad33183e3442fced3172a6db7015764cdc5aedcb43effafdf","entries":[{"symbol":"AppClient.dispose","kind":"method","summary":"Close this client when its page or embedding owner is removed.","signatures":["(): Promise<void>"],"tags":[],"docs":"ui.md","source":"apps/src/implementation/ui-client.ts","related":[],"examples":["live-inbox"]},{"symbol":"AppClient.mutate","kind":"method","summary":"Execute a write once in this client's queue. Success acknowledges the write; queries reconcile afterward.","signatures":["<Input, Output>(reference: OperationReference<Input, Output, \"mutation\">, input: NoInfer<Input>, output: Schema<NoInfer<Output>, boolean>): Promise<Output>"],"tags":[],"docs":"ui.md","source":"apps/src/implementation/ui-client.ts","related":["apps.Schema","apps/client.OperationReference","Schema"],"examples":["live-inbox"]},{"symbol":"AppClient.mutation","kind":"method","summary":"Create a callable mutation with optional withOptimisticUpdate projections over mounted queries.","signatures":["<Input, Output>(reference: OperationReference<Input, Output, \"mutation\">, output: Schema<NoInfer<Output>, boolean>): AppMutation<Input, Output>"],"tags":[],"docs":"ui.md","source":"apps/src/implementation/ui-client.ts","related":["AppMutation","apps.Schema","apps/client.AppMutation","apps/client.OperationReference","Schema"],"examples":["live-inbox"]},{"symbol":"AppClient.query","kind":"method","summary":"Query this app once, with a runtime-validated response. Does not populate the mounted query cache.","signatures":["<Input, Output>(reference: OperationReference<Input, Output, \"query\">, input: NoInfer<Input>, output: Schema<NoInfer<Output>, boolean>): Promise<NoInfer<Output>>"],"tags":[],"docs":"ui.md","source":"apps/src/implementation/ui-client.ts","related":["apps.Schema","apps/client.OperationReference","Schema"],"examples":["live-inbox"]},{"symbol":"AppClient.queryAtom","kind":"method","summary":"Share a live query across mounts and reconcile optimistic changes against fresh server reads.","signatures":["<Input, Output>(reference: OperationReference<Input, Output, \"query\">, input: NoInfer<Input>, output: Schema<NoInfer<Output>, boolean>): Atom.Atom<AsyncResult<Output, unknown>>"],"tags":[],"docs":"ui.md","source":"apps/src/implementation/ui-client.ts","related":["apps.Schema","apps/client.OperationReference","Schema"],"examples":["live-inbox"]},{"symbol":"AppContext","kind":"type","summary":"Current credentials for one invocation. Never retained in source or build output.","signatures":[],"definition":"export interface BoundContext<Slots extends AccountSlots> {\n /** Read-only run management, bound to this configured app. */\n readonly workflows: WorkflowReads;\n /** Ask for user input during this tool call. Unavailable during discovery and after the invocation closes. */\n readonly elicit: Elicit;\n /** Invocation-owned HTTP requests with trace propagation and host cancellation. */\n readonly fetch: (input: string | URL | Request, init?: RequestInit) => Promise<Response>;\n /** Host cancellation for this invocation. Pass it to fetch and other interruptible APIs. */\n readonly signal: AbortSignal;\n readonly accounts: {\n readonly [Slot in keyof Slots]: AccountsFor<Slots[Slot]>;\n };\n}","tags":[],"docs":"tools.md","source":"apps/src/contracts/app.ts","related":["apps.AccountSlots","apps.Elicit","apps.WorkflowReads"],"examples":["live-inbox"]},{"symbol":"AppContext.elicit","kind":"method","summary":"Ask for user input during this tool call. Unavailable during discovery and after the invocation closes.","signatures":["(request: FormElicitation): Promise<ElicitationResponse>"],"tags":[],"docs":"tools.md","source":"apps/src/contracts/app.ts","related":["AppContext","apps.ElicitationResponse","apps.FormElicitation"],"examples":["live-inbox"]},{"symbol":"AppContext.fetch","kind":"method","summary":"Invocation-owned HTTP requests with trace propagation and host cancellation.","signatures":["(input: string | URL | Request, init?: RequestInit): Promise<Response>"],"tags":[],"docs":"tools.md","source":"apps/src/contracts/app.ts","related":["AppContext"],"examples":["live-inbox"]},{"symbol":"AppMutation","kind":"type","summary":"A callable mutation. Success means the write was acknowledged; its overlay stays until fresh reads finish.","signatures":[],"definition":"export interface AppMutation<Input, Output> {\n (input: Input): Promise<Output>;\n /** Return a new mutation handle with this projection. Failures remove only this invocation's changes. */\n withOptimisticUpdate(update: OptimisticUpdate<Input>): AppMutation<Input, Output>;\n}","tags":[],"docs":"ui.md","source":"apps/src/contracts/optimistic.ts","related":["apps/client.AppMutation","apps/client.OptimisticUpdate"],"examples":["live-inbox"]},{"symbol":"AppMutation.withOptimisticUpdate","kind":"method","summary":"Return a new mutation handle with this projection. Failures remove only this invocation's changes.","signatures":["(update: OptimisticUpdate<Input>): AppMutation<Input, Output>"],"tags":[],"docs":"ui.md","source":"apps/src/contracts/optimistic.ts","related":["AppMutation","apps/client.AppMutation","apps/client.OptimisticUpdate"],"examples":["live-inbox"]},{"symbol":"apps.AccountOf","kind":"type","summary":"One selected account, discriminated by its author-chosen method name.","signatures":[],"definition":"export type AccountOf<P> =\n P extends Provider<infer Auth>\n ? {\n readonly [Method in keyof Auth & string]: {\n readonly id: AccountId;\n readonly method: Method;\n readonly fields: AuthMethodData<Auth[Method]>;\n };\n }[keyof Auth & string]\n : never;","tags":[],"docs":"tools.md","source":"apps/src/contracts/provider.ts","related":["apps.AuthMethodData","Provider"],"examples":["live-inbox"]},{"symbol":"apps.accountOperations","kind":"function","summary":"Discover each selected account's protocol operations and combine matching names.\nCalls take { accountId, input }; each branch retains its account's input schema,\ncredentials, approval and output validation. Empty selections expose no operations.\nDiscovery is sequential and cancellation follows the caller's signal.","signatures":["<Account extends { readonly id: string; }>(accounts: readonly Account[], discover: (account: Account) => Promise<Operations>, options: { readonly signal: AbortSignal; }): Promise<{ queries: { [k: string]: Operation<{ readonly accountId: string; readonly input: unknown; }, unknown, \"query\", AppContext>; }; mutations: { [k: string]: Operation<{ readonly accountId: string; readonly input: unknown; }, unknown, \"mutation\", AppContext>; }; }>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/account-operations.ts","related":["AppContext","apps.AppContext","apps.Operation"],"examples":["live-inbox"]},{"symbol":"apps.AccountSlots","kind":"type","summary":"Named requirements for one account or a collection from a provider.","signatures":[],"definition":"export type AccountSlots = Readonly<\n Record<string, Provider<AuthMethods> | ManyAccounts<AuthMethods>>\n>;","tags":[],"docs":"tools.md","source":"apps/src/contracts/app.ts","related":["apps.AuthMethods","Provider"],"examples":["live-inbox"]},{"symbol":"apps.App","kind":"type","summary":"Public app handle; the native app is retained for host use without an async round trip.","signatures":[],"definition":"export interface App<\n Requirements extends AppRequirements,\n Def extends AppDefinition<Requirements>,\n> {\n readonly [InternalApp]: NativeApp<Requirements[\"accounts\"], EffectDefinition<Def>>;\n readonly accounts: Requirements[\"accounts\"];\n readonly evaluate: (context: AppContext<Requirements>) => Promise<Def>;\n}","tags":[],"docs":"tools.md","source":"apps/src/implementation/app.ts","related":["AppContext","apps.AppContext","apps.AppDefinition","apps.AppRequirements"],"examples":["live-inbox"]},{"symbol":"apps.AppContext","kind":"type","summary":"Context available during dynamic app evaluation; storage opens only for handlers.","signatures":[],"definition":"export type AppContext<Requirements extends AppRequirements = AppRequirements> = BoundContext<\n Requirements[\"accounts\"]\n>;","tags":[],"docs":"tools.md","source":"apps/src/contracts/context.ts","related":["AppContext","apps.AppRequirements"],"examples":["live-inbox"]},{"symbol":"apps.AppDefinition","kind":"type","summary":"Author definition projected from native capabilities. Excluding callable objects keeps\nfactories from being inferred as definitions and preserves contextual handler inference.","signatures":[],"definition":"export type AppDefinition<Requirements extends AppRequirements> = {\n readonly [Key in keyof NativeDefinition<WebhookContext<Requirements>>]: Key extends \"workflows\"\n ? Readonly<Record<string, WorkflowDeclaration<WorkflowContext<Requirements>>>>\n : Key extends \"schedules\"\n ? Readonly<Record<string, ScheduleDeclaration<MutationContext<Requirements>>>>\n : Key extends \"queries\"\n ? Readonly<Record<string, OperationDeclaration<\"query\", QueryContext<Requirements>>>>\n : Key extends \"mutations\"\n ? Readonly<\n Record<string, OperationDeclaration<\"mutation\", MutationContext<Requirements>>>\n >\n : Key extends \"webhooks\"\n ? PromiseCatalog<NonNullable<NativeDefinition<WebhookContext<Requirements>>[Key]>>\n : NativeDefinition<WebhookContext<Requirements>>[Key];\n} & { readonly name?: never; readonly tools?: never; readonly call?: never };","tags":[],"docs":"tools.md","source":"apps/src/implementation/app.ts","related":["apps.AppRequirements","apps.MutationContext","apps.QueryContext","apps.ScheduleDeclaration","apps.WebhookContext","apps.WorkflowContext","apps.WorkflowDeclaration"],"examples":["live-inbox"]},{"symbol":"apps.AppRequirements","kind":"type","summary":"Requirements are pure values; selected accounts and database sessions belong to invocations.","signatures":[],"definition":"export interface AppRequirements {\n readonly accounts: AccountSlots;\n readonly database?: DatabaseDefinition;\n}","tags":[],"docs":"tools.md","source":"apps/src/contracts/context.ts","related":["apps.AccountSlots","apps.DatabaseDefinition"],"examples":["live-inbox"]},{"symbol":"apps.Approval","kind":"type","summary":"Synchronous or async policy, projected from the framework's native contract.","signatures":[],"definition":"export type Approval<Input = unknown> = (\n ...args: Parameters<NativeApproval<Input>>\n) =>\n | Effect.Success<ReturnType<NativeApproval<Input>>>\n | Promise<Effect.Success<ReturnType<NativeApproval<Input>>>>;","tags":[],"docs":"tools.md","source":"apps/src/approval.ts","related":["apps/operations/approval.Approval"],"examples":["live-inbox"]},{"symbol":"apps.ApprovalContext","kind":"type","summary":"Context for one tool's policy. toolInput is the same decoded value passed to run.","signatures":[],"definition":"export interface ApprovalContext<Input = unknown> {\n readonly toolName: string;\n readonly toolInput: Input;\n readonly signal: AbortSignal;\n}","tags":[],"docs":"tools.md","source":"apps/src/contracts/approval.ts","related":["apps/operations/approval.ApprovalContext"],"examples":["live-inbox"]},{"symbol":"apps.ApprovalDecision","kind":"type","summary":"Approve this call, deny it, or stop for a human decision.\nParsed result of one tool approval policy.","signatures":[],"definition":"ApprovalDecision = Schema.Literals([\"approved\", \"denied\", \"user-approval\"])","tags":[],"docs":"tools.md","source":"apps/src/contracts/approval.ts","related":["apps.Schema","apps/operations/approval.ApprovalDecision","Schema"],"examples":["live-inbox"]},{"symbol":"apps.array","kind":"function","summary":"An array whose elements use the given schema.","signatures":["<T>(item: Schema<T, boolean>): Schema<readonly T[]>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.AuthMethod","kind":"type","summary":"Supported declarations; these acquire credentials rather than normalize them.","signatures":[],"definition":"export type AuthMethod =\n | SecretsMethod<Schema.Decoder<unknown>>\n | OAuth2Method<Schema.Decoder<unknown>>;","tags":[],"docs":"tools.md","source":"apps/src/contracts/provider.ts","related":["apps.OAuth2Method","apps.Schema","apps.SecretsMethod","Schema"],"examples":["live-inbox"]},{"symbol":"apps.AuthMethodData","kind":"type","summary":"Infer the data for one method from its native Effect decoder.","signatures":[],"definition":"export type AuthMethodData<Method> =\n Method extends SecretsMethod<infer Fields>\n ? Fields[\"Type\"]\n : Method extends OAuth2Method<infer Response>\n ? Response[\"Type\"]\n : never;","tags":[],"docs":"tools.md","source":"apps/src/contracts/provider.ts","related":["apps.Fields","apps.OAuth2Method","apps.SecretsMethod"],"examples":["live-inbox"]},{"symbol":"apps.AuthMethods","kind":"type","summary":"Auth method names are chosen by the provider author.","signatures":[],"definition":"export type AuthMethods = Readonly<Record<string, AuthMethod>>;","tags":[],"docs":"tools.md","source":"apps/src/contracts/provider.ts","related":["apps.AuthMethod"],"examples":["live-inbox"]},{"symbol":"apps.boolean","kind":"function","summary":"A boolean. No coercion.","signatures":["(): Schema<boolean>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.cron","kind":"function","summary":"Calendar alternative for wall-clock schedules. UTC is the explicit default when timezone is omitted.","signatures":["<Input, Output, Context>(calendar: { readonly expression: string; readonly timezone?: string; }, operation: Operation<Input, Output, \"mutation\", Context>, input: NoInfer<Input>): ScheduleDeclaration<Context>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schedules.ts","related":["apps.Operation","apps.ScheduleDeclaration"],"examples":["live-inbox"]},{"symbol":"apps.Database","kind":"type","summary":"Mutation methods stay inside one native SQLite transaction.","signatures":[],"definition":"export type Database<T extends Tables> = {\n readonly [K in keyof T]: WriteTable<RowOf<T[K]>, InputValue<T[K][\"fields\"]>, IndexOf<T[K]>>;\n};","tags":[],"docs":"tools.md","source":"apps/src/contracts/storage.ts","related":[],"examples":["live-inbox"]},{"symbol":"apps.DatabaseDefinition","kind":"type","summary":"Pure database declaration shared by requirements and derived handler contexts.","signatures":[],"definition":"export interface DatabaseDefinition<T extends Tables = Tables> {\n readonly schema: DatabaseSchema;\n readonly tables: T;\n}","tags":[],"docs":"tools.md","source":"apps/src/contracts/storage.ts","related":[],"examples":["live-inbox"]},{"symbol":"apps.DatabaseReader","kind":"type","summary":"Queries receive only read methods.","signatures":[],"definition":"export type DatabaseReader<T extends Tables> = {\n readonly [K in keyof T]: ReadTable<RowOf<T[K]>, IndexOf<T[K]>>;\n};","tags":[],"docs":"tools.md","source":"apps/src/contracts/storage.ts","related":[],"examples":["live-inbox"]},{"symbol":"apps.decodeJson","kind":"function","summary":"Decode a fetch response with safe status/body errors. Unexpected reader failures propagate unchanged.","signatures":["<T>(response: JsonResponse, schema: Schema<T, boolean>): Promise<T>"],"tags":[],"docs":"tools.md","source":"apps/src/index.ts","related":["apps.JsonResponse","apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.defineApp","kind":"function","summary":"Assemble app behavior. Package names belong in package.json; hosts name installed copies.","signatures":["<const Requirements extends AppRequirements, Def extends AppDefinition<Requirements>>(requirements: Requirements, definition: (Def & AppDefinition<Requirements>) | ((context: AppContext<Requirements>) => Promise<Def & AppDefinition<Requirements>>)): App<Requirements, Def>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/app.ts","related":["AppContext","apps.App","apps.AppContext","apps.AppDefinition","apps.AppRequirements"],"examples":["live-inbox"]},{"symbol":"apps.defineDatabase","kind":"function","summary":"Declare storage independently of handlers; the host binds each invocation's database.","signatures":["<const T extends Tables>(tables: T): DatabaseDefinition<T>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/storage.ts","related":["apps.DatabaseDefinition"],"examples":["live-inbox"]},{"symbol":"apps.defineProvider","kind":"function","summary":"Retain the provider and literal method names without registering or authenticating it.","signatures":["<const Auth extends AuthMethods>(options: { readonly name: string; readonly auth: Auth; }): Provider<Auth>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/provider.ts","related":["apps.AuthMethods","Provider"],"examples":["live-inbox"]},{"symbol":"apps.Elicit","kind":"type","summary":"App authors await standard MCP form responses without depending on Effect or a particular host.","signatures":[],"definition":"export type Elicit = (request: FormElicitation) => Promise<ElicitationResponse>;","tags":[],"docs":"tools.md","source":"apps/src/contracts/elicitation.ts","related":["apps.ElicitationResponse","apps.FormElicitation"],"examples":["live-inbox"]},{"symbol":"apps.ElicitationResponse","kind":"type","summary":"MCP accept/decline/cancel response, without imposing a client or transport on app code.","signatures":[],"definition":"ElicitationResponse = Schema.Union([\n Schema.Struct({ ...McpSchema.ElicitAcceptResult.fields, _meta: Schema.optional(JsonObject) }),\n Schema.Struct({ ...McpSchema.ElicitDeclineResult.fields, _meta: Schema.optional(JsonObject) }),\n])","tags":[],"docs":"tools.md","source":"apps/src/contracts/elicitation.ts","related":["apps.JsonObject","apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.Fields","kind":"type","summary":"Named author fields.","signatures":[],"definition":"export type Fields = Readonly<Record<string, Schema<unknown, boolean>>>;","tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.FormElicitation","kind":"type","summary":"Plain-data form request derived from the pinned MCP protocol schema.","signatures":[],"definition":"FormElicitation = Schema.Struct({\n ...McpSchema.ElicitRequestFormParams.fields,\n mode: Schema.Literal(\"form\"),\n requestedSchema: Schema.toEncoded(McpSchema.ElicitRequestFormParams.fields.requestedSchema),\n _meta: Schema.optional(JsonObject),\n})","tags":[],"docs":"tools.md","source":"apps/src/contracts/elicitation.ts","related":["apps.JsonObject","apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.id","kind":"function","summary":"A row reference records the target table; existence is not a foreign-key constraint.","signatures":["(table: string): Schema<string>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.Infer","kind":"type","summary":"Infer the parsed author value.","signatures":[],"definition":"export type Infer<S> = S extends Schema<infer T, boolean> ? T : never;","tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.interval","kind":"function","summary":"Run an existing mutation at a fixed interval. Installation enablement belongs to the host.","signatures":["<Input, Output, Context>(duration: Interval, operation: Operation<Input, Output, \"mutation\", Context>, input: NoInfer<Input>): ScheduleDeclaration<Context>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schedules.ts","related":["apps.Operation","apps.ScheduleDeclaration"],"examples":["live-inbox"]},{"symbol":"apps.json","kind":"function","summary":"Any JSON value. Values still cross the native JSON decoder.","signatures":["(): Schema<EffectSchema.Json>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.JsonObject","kind":"type","summary":"A JSON object, distinct from an authored value schema.","signatures":[],"definition":"JsonObject = Schema.Record(Schema.String, JsonValue)","tags":[],"docs":"tools.md","source":"apps/src/contracts/schema.ts","related":["apps.JsonValue","apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.JsonResponse","kind":"type","summary":"Native fetch-compatible response accepted at the author boundary.","signatures":[],"definition":"export type JsonResponse = PromiseMethods<NativeResponse>;","tags":[],"docs":"tools.md","source":"apps/src/index.ts","related":[],"examples":["live-inbox"]},{"symbol":"apps.jsonSchema","kind":"function","summary":"Import JSON metadata now; unsupported schemas and invalid values fail when parsed.","signatures":["(input: unknown): Schema<EffectSchema.Json>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.JsonValue","kind":"type","summary":"JSON values carried by remote protocols such as MCP.","signatures":[],"definition":"JsonValue = Schema.Json","tags":[],"docs":"tools.md","source":"apps/src/contracts/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.literal","kind":"function","summary":"One exact JSON scalar value.","signatures":["<const T extends string | number | boolean | null>(value: T): Schema<T>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.mutation","kind":"function","summary":"Explicit write operation. Database writes roll back on failure; external effects cannot be undone.","signatures":["<Input, Output, Context extends AppContext = MutationContext>(options: OperationOptions<Input, Output>, run: (context: Context, input: Input) => Promise<Output>): Operation<Input, Output, \"mutation\", Context>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/operations.ts","related":["AppContext","apps.AppContext","apps.MutationContext","apps.Operation","apps.OperationOptions"],"examples":["live-inbox"]},{"symbol":"apps.MutationContext","kind":"type","summary":"Interactive mutation context; declared storage belongs to the invocation transaction.","signatures":[],"definition":"export type MutationContext<Requirements extends AppRequirements = AppRequirements> = Omit<\n AppContext<Requirements>,\n \"workflows\"\n> & { readonly workflows: WorkflowControls } & StorageContext<Requirements, true>;","tags":[],"docs":"tools.md","source":"apps/src/contracts/context.ts","related":["AppContext","apps.AppContext","apps.AppRequirements","apps.WorkflowControls","WorkflowControls"],"examples":["live-inbox"]},{"symbol":"apps.number","kind":"function","summary":"A finite JSON number. No coercion.","signatures":["(): Schema<number>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.oauth2","kind":"function","summary":"Declare OAuth discovery/endpoints and an optional app-visible response projection.","signatures":["(options: OAuth2Config): OAuth2Method<typeof OAuth2AccessToken>","<Response extends Schema<unknown, boolean>>(options: OAuth2Config & { readonly response: Response; }): OAuth2Method<Response>"],"tags":[],"docs":"tools.md","source":"apps/src/index.ts","related":["apps.OAuth2Config","apps.OAuth2Method","apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.OAuth2Config","kind":"type","summary":"OAuth endpoints and protocol choices. Omitted grant means authorization code; clients remain host-owned.","signatures":[],"definition":"OAuth2Config = Schema.Union([\n Schema.Struct({\n ...oauthOptions,\n discover: HttpUrl,\n authorizationUrl: Schema.optionalKey(Schema.Never),\n tokenUrl: Schema.optionalKey(Schema.Never),\n scopes: Schema.optionalKey(Schema.Array(Schema.String)),\n }),\n Schema.Struct({\n ...oauthOptions,\n authorizationUrl: HttpUrl,\n tokenUrl: HttpUrl,\n scopes: Schema.Array(Schema.String),\n discover: Schema.optionalKey(Schema.Never),\n }),\n Schema.Struct({\n grant: Schema.Literal(\"client_credentials\"),\n discover: HttpUrl,\n authorizationUrl: Schema.optionalKey(Schema.Never),\n tokenUrl: Schema.optionalKey(Schema.Never),\n scopes: Schema.optionalKey(Schema.Array(Schema.String)),\n tokenEndpointAuthMethod: OAuthSecretClientAuth,\n resource: Schema.optionalKey(Schema.NullOr(HttpUrl)),\n }),\n Schema.Struct({\n grant: Schema.Literal(\"client_credentials\"),\n tokenUrl: HttpUrl,\n scopes: Schema.Array(Schema.String),\n tokenEndpointAuthMethod: OAuthSecretClientAuth,\n resource: Schema.optionalKey(Schema.NullOr(HttpUrl)),\n authorizationUrl: Schema.optionalKey(Schema.Never),\n discover: Schema.optionalKey(Schema.Never),\n }),\n])","tags":[],"docs":"tools.md","source":"apps/src/contracts/provider.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.OAuth2Method","kind":"type","summary":"An OAuth declaration inferred from its author-facing response schema.","signatures":[],"definition":"export type OAuth2Method<Response extends Schema<unknown, boolean>> = NativeOAuth2Method<\n EffectSchema.Decoder<Infer<Response>>\n>;","tags":[],"docs":"tools.md","source":"apps/src/index.ts","related":["apps.Infer","apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.object","kind":"function","summary":"Parse declared fields and omit undeclared fields.","signatures":["<const F extends Fields>(fields: F): ObjectSchema<F>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Fields","apps.ObjectSchema"],"examples":["live-inbox"]},{"symbol":"apps.ObjectSchema","kind":"type","summary":"An author object schema with retained field declarations.","signatures":[],"definition":"export interface ObjectSchema<F extends Fields> extends Schema<ObjectValue<F>> {\n readonly fields: F;\n}","tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Fields","apps.ObjectValue","apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.ObjectValue","kind":"type","summary":"Optional fields may be absent; defaulted fields are present after decoding.","signatures":[],"definition":"export type ObjectValue<F extends Fields> = {\n readonly [Key in keyof F as F[Key][\"optionalValue\"] extends true ? never : Key]: Infer<F[Key]>;\n} & {\n readonly [Key in keyof F as F[Key][\"optionalValue\"] extends true ? Key : never]?: Infer<F[Key]>;\n};","tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Fields","apps.Infer"],"examples":["live-inbox"]},{"symbol":"apps.Operation","kind":"type","summary":"Typed operation handles drive browser reference inference without bundling handlers.","signatures":[],"definition":"export interface Operation<\n Input,\n Output,\n Kind extends \"query\" | \"mutation\",\n Context = AppContext,\n> extends OperationDeclaration<Kind, Context> {\n readonly [NativeOperation]: AppOperation<Input, Output> & { readonly kind: Kind };\n}","tags":[],"docs":"tools.md","source":"apps/src/implementation/operations.ts","related":["AppContext","apps.AppContext"],"examples":["live-inbox"]},{"symbol":"apps.OperationContext","kind":"type","summary":"Host-bound operation capabilities; the author declaration refines accounts and storage.","signatures":[],"definition":"export type OperationContext = BoundContext<AccountSlots> & {\n readonly db?: DatabaseReader<Tables> | Database<Tables>;\n};","tags":[],"docs":"tools.md","source":"apps/src/contracts/operations.ts","related":["apps.AccountSlots","apps.Database","apps.DatabaseReader"],"examples":["live-inbox"]},{"symbol":"apps.OperationOptions","kind":"type","summary":"Options shared by database and external operations. Output defaults to a JSON-safe host check.","signatures":[],"definition":"export interface OperationOptions<Input, Output> {\n readonly description?: string;\n readonly title?: string;\n readonly input: Schema<Input, boolean>;\n readonly output?: Schema<Output, boolean>;\n readonly approval?: Approval<Input>;\n readonly annotations?: ToolAnnotations;\n readonly _meta?: JsonObject;\n}","tags":[],"docs":"tools.md","source":"apps/src/implementation/operations.ts","related":["apps.Approval","apps.JsonObject","apps.Schema","apps/operations/approval.Approval","Schema"],"examples":["live-inbox"]},{"symbol":"apps.query","kind":"function","summary":"Read operation. External reads are allowed; only database writes are mechanically prohibited.","signatures":["<Input, Output, Context extends AppContext = AppContext<AppRequirements>>(options: OperationOptions<Input, Output>, run: (context: Context, input: Input) => Promise<Output>): Operation<Input, Output, \"query\", Context>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/operations.ts","related":["AppContext","apps.AppContext","apps.AppRequirements","apps.Operation","apps.OperationOptions"],"examples":["live-inbox"]},{"symbol":"apps.QueryContext","kind":"type","summary":"Interactive query context; declared storage exposes only read methods.","signatures":[],"definition":"export type QueryContext<Requirements extends AppRequirements = AppRequirements> =\n AppContext<Requirements> & StorageContext<Requirements, false>;","tags":[],"docs":"tools.md","source":"apps/src/contracts/context.ts","related":["AppContext","apps.AppContext","apps.AppRequirements"],"examples":["live-inbox"]},{"symbol":"apps.record","kind":"function","summary":"Named values with a common schema.","signatures":["<T>(value: Schema<T, boolean>): Schema<Readonly<Record<string, T>>>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.ScheduleDeclaration","kind":"type","summary":"The app adapter resolves this operation handle to its declared mutation name.","signatures":[],"definition":"export interface ScheduleDeclaration<Context = never> {\n readonly operation: OperationDeclaration<\"mutation\", Context>;\n readonly timing: ScheduleTiming;\n readonly input: JsonValue;\n}","tags":[],"docs":"tools.md","source":"apps/src/implementation/schedules.ts","related":["apps.JsonValue"],"examples":["live-inbox"]},{"symbol":"apps.Schema","kind":"type","summary":"An author-facing value schema. Effect is never required in author code.","signatures":[],"definition":"export interface Schema<T, Optional extends boolean = false> {\n readonly [StorageField]?: Field;\n readonly [Decoder]: EffectSchema.Decoder<T>;\n readonly optionalValue: Optional;\n /** Parse an unknown value; invalid input throws a safe ValidationError. */\n parse(input: unknown): T;\n /** Accept an absent field without changing the original schema. */\n optional(): Schema<T | undefined, true>;\n /** Validate the default now and use it for undefined input. */\n default(value: T): Schema<T> & { readonly hasDefault: true; readonly inputOptional: Optional };\n}","tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["Schema"],"examples":["live-inbox"]},{"symbol":"apps.secrets","kind":"function","summary":"Declare a secrets method without requiring an Effect schema from the author.","signatures":["<const F extends Fields>(options: { readonly label: string; readonly fields: ObjectSchema<F>; }): SecretsMethod<ObjectSchema<F>>"],"tags":[],"docs":"tools.md","source":"apps/src/index.ts","related":["apps.Fields","apps.ObjectSchema","apps.SecretsMethod"],"examples":["live-inbox"]},{"symbol":"apps.SecretsMethod","kind":"type","summary":"A secrets declaration inferred from an author schema.","signatures":[],"definition":"export type SecretsMethod<Shape extends ObjectSchema<Fields>> = NativeSecretsMethod<\n EffectSchema.Decoder<Infer<Shape>>\n>;","tags":[],"docs":"tools.md","source":"apps/src/index.ts","related":["apps.Fields","apps.Infer","apps.ObjectSchema"],"examples":["live-inbox"]},{"symbol":"apps.string","kind":"function","summary":"A string, optionally with a minimum length. No coercion.","signatures":["(options?: { readonly minLength?: number; }): Schema<string>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.table","kind":"function","summary":"Declare scalar columns using the same schemas as operation inputs.","signatures":["<const F extends Fields>(fields: F): Table<F>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/storage.ts","related":["apps.Fields","apps.Table","Table"],"examples":["live-inbox"]},{"symbol":"apps.Table","kind":"type","summary":"Typed table declaration; indexes refer only to authored or host metadata fields.","signatures":[],"definition":"export interface Table<F extends Fields, Index extends string = never> {\n readonly fields: F;\n readonly indexes: ReadonlyArray<{ readonly name: string; readonly fields: readonly string[] }>;\n readonly index: <Name extends string>(\n name: Name,\n fields: readonly [\n (keyof F & string) | keyof typeof RowMetadata.Type,\n ...((keyof F & string) | keyof typeof RowMetadata.Type)[],\n ],\n ) => Table<F, Index | Name>;\n}","tags":[],"docs":"tools.md","source":"apps/src/contracts/storage.ts","related":["apps.Fields","Table"],"examples":["live-inbox"]},{"symbol":"apps.userId","kind":"function","summary":"A host user identifier, stored as a string without imposing a product auth model.","signatures":["(): Schema<string>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.Webhook","kind":"type","summary":"Author lifecycle methods use async functions and share native decoded context/state types.","signatures":[],"definition":"export type Webhook<\n Context extends WebhookContext,\n Config extends Schema<unknown, boolean>,\n State extends Schema<unknown, boolean>,\n> = AuthorWebhook<\n NativeWebhook<Context, EffectSchema.Decoder<Infer<Config>>, EffectSchema.Decoder<Infer<State>>>,\n Config,\n State\n>;","tags":[],"docs":"tools.md","source":"apps/src/index.ts","related":["apps.Infer","apps.Schema","apps.WebhookContext","Schema"],"examples":["live-inbox"]},{"symbol":"apps.WebhookContext","kind":"type","summary":"Background webhook context has account and storage access without interactive input.","signatures":[],"definition":"export type WebhookContext<Requirements extends AppRequirements = AppRequirements> = Omit<\n MutationContext<Requirements>,\n \"elicit\"\n>;","tags":[],"docs":"tools.md","source":"apps/src/contracts/context.ts","related":["apps.AppRequirements","apps.MutationContext"],"examples":["live-inbox"]},{"symbol":"apps.withApproval","kind":"function","summary":"Attach the same approval function to a generated or shared operation.","signatures":["<Input, Output, Kind extends \"query\" | \"mutation\", Context>(operation: Operation<Input, Output, Kind, Context>, approval: Approval<Input>): Operation<Input, Output, Kind, Context>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/operations.ts","related":["apps.Approval","apps.Operation","apps/operations/approval.Approval"],"examples":["live-inbox"]},{"symbol":"apps.workflow","kind":"function","summary":"Declare durable orchestration without starting a run or performing I/O.","signatures":["<Input, Output, Context extends WorkflowContext = WorkflowContext<AppRequirements>>(options: { readonly input: Schema<Input, boolean>; readonly output?: Schema<Output, boolean>; readonly description?: string; }, run: (context: Context, input: Input) => Promise<Output>): Workflow<Input, Output, Context>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/workflows.ts","related":["apps.AppRequirements","apps.Schema","apps.Workflow","apps.WorkflowContext","Schema"],"examples":["live-inbox"]},{"symbol":"apps.Workflow","kind":"type","summary":"A workflow declaration retains input/output inference and required context compatibility.","signatures":[],"definition":"export interface Workflow<Input, Output, Context extends WorkflowContext = WorkflowContext> {\n readonly [HandlerContext]?: (context: Context) => void;\n readonly [NativeWorkflow]: AppWorkflow<Input, Output>;\n}","tags":[],"docs":"tools.md","source":"apps/src/implementation/workflows.ts","related":["apps.WorkflowContext"],"examples":["live-inbox"]},{"symbol":"apps.WorkflowContext","kind":"type","summary":"The orchestration body gets no account, database or interactive capabilities.","signatures":[],"definition":"export interface WorkflowContext<Requirements extends AppRequirements = AppRequirements> {\n readonly runId: WorkflowRunId;\n readonly step: WorkflowStep<Requirements>;\n}","tags":[],"docs":"tools.md","source":"apps/src/contracts/workflows.ts","related":["apps.AppRequirements","apps.WorkflowStep","WorkflowStep"],"examples":["live-inbox"]},{"symbol":"apps.WorkflowControls","kind":"type","summary":"Mutating handlers may start and terminate runs in their own configured app.","signatures":[],"definition":"export interface WorkflowControls extends WorkflowReads {\n readonly start: (input: {\n readonly workflow: string;\n readonly input: JsonValue;\n readonly key?: string;\n }) => Promise<WorkflowRun>;\n readonly terminate: (input: { readonly run: string }) => Promise<WorkflowRun>;\n}","tags":[],"docs":"tools.md","source":"apps/src/contracts/workflows.ts","related":["apps.JsonValue","apps.WorkflowReads","WorkflowControls"],"examples":["live-inbox"]},{"symbol":"apps.WorkflowDeclaration","kind":"type","summary":"Composition view erases input only after retaining its runtime decoder.","signatures":[],"definition":"export interface WorkflowDeclaration<Context extends WorkflowContext> {\n readonly [HandlerContext]?: (context: Context) => void;\n readonly [NativeWorkflow]: Omit<AppWorkflow<never>, \"input\"> & {\n readonly input: EffectSchema.Decoder<unknown>;\n };\n}","tags":[],"docs":"tools.md","source":"apps/src/implementation/workflows.ts","related":["apps.WorkflowContext"],"examples":["live-inbox"]},{"symbol":"apps.WorkflowDuration","kind":"type","summary":"Numbers are milliseconds; strings use a quantity and full unit, such as \"5 minutes\".","signatures":[],"definition":"WorkflowDuration = Schema.Union([\n Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0)),\n Schema.NonEmptyString,\n]).check(Schema.makeFilter((value) => workflowDurationMillis(value) !== undefined))","tags":[],"docs":"tools.md","source":"apps/src/contracts/workflows.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps.WorkflowReads","kind":"type","summary":"Query and factory contexts may inspect only their own app's runs.","signatures":[],"definition":"export interface WorkflowReads {\n readonly get: (input: { readonly run: string }) => Promise<WorkflowRun>;\n readonly list: (input?: {\n readonly workflow?: string;\n readonly limit?: number;\n readonly cursor?: string;\n }) => Promise<WorkflowRunPage>;\n}","tags":[],"docs":"tools.md","source":"apps/src/contracts/workflows.ts","related":[],"examples":["live-inbox"]},{"symbol":"apps.WorkflowStep","kind":"type","summary":"Explicit durable boundaries; database access passes through registered app operations.","signatures":[],"definition":"export interface WorkflowStep<Requirements extends AppRequirements = AppRequirements> {\n do<Output>(\n name: string,\n run: (context: WorkflowStepContext<Requirements>) => Promise<Output>,\n ): Promise<Output>;\n do<Output>(\n name: string,\n options: WorkflowStepOptions,\n run: (context: WorkflowStepContext<Requirements>) => Promise<Output>,\n ): Promise<Output>;\n runQuery<Input, Output>(\n name: string,\n operation: Operation<Input, Output, \"query\", QueryContext<Requirements>>,\n input: NoInfer<Input>,\n options?: WorkflowStepOptions,\n ): Promise<Output>;\n runMutation<Input, Output>(\n name: string,\n operation: Operation<Input, Output, \"mutation\", MutationContext<Requirements>>,\n input: NoInfer<Input>,\n options?: WorkflowStepOptions,\n ): Promise<Output>;\n readonly sleep: (name: string, duration: WorkflowDuration) => Promise<void>;\n readonly sleepUntil: (name: string, timestamp: number | Date) => Promise<void>;\n}","tags":[],"docs":"tools.md","source":"apps/src/contracts/workflows.ts","related":["apps.AppRequirements","apps.MutationContext","apps.Operation","apps.QueryContext","apps.WorkflowDuration","apps.WorkflowStepContext","apps.WorkflowStepOptions","WorkflowStep"],"examples":["live-inbox"]},{"symbol":"apps.WorkflowStepContext","kind":"type","summary":"External steps get fresh credentials and cancellation, without storage or live elicitation.","signatures":[],"definition":"export type WorkflowStepContext<Requirements extends AppRequirements = AppRequirements> = Omit<\n AppContext<Requirements>,\n \"elicit\" | \"workflows\"\n> & {\n readonly runId: WorkflowRunId;\n readonly stepId: string;\n readonly idempotencyKey: string;\n};","tags":[],"docs":"tools.md","source":"apps/src/contracts/workflows.ts","related":["AppContext","apps.AppContext","apps.AppRequirements"],"examples":["live-inbox"]},{"symbol":"apps.WorkflowStepOptions","kind":"type","summary":"Author retry and timeout options are passed to the durable engine.","signatures":[],"definition":"WorkflowStepOptions = Schema.Struct({\n retries: Schema.optionalKey(\n Schema.Struct({\n limit: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n delay: WorkflowDuration,\n backoff: Schema.optionalKey(Schema.Literals([\"constant\", \"linear\", \"exponential\"])),\n }),\n ),\n timeout: Schema.optionalKey(WorkflowDuration),\n})","tags":[],"docs":"tools.md","source":"apps/src/contracts/workflows.ts","related":["apps.Schema","apps.WorkflowDuration","Schema"],"examples":["live-inbox"]},{"symbol":"apps/client.AppMutation","kind":"type","summary":"A callable mutation. Success means the write was acknowledged; its overlay stays until fresh reads finish.","signatures":[],"definition":"export interface AppMutation<Input, Output> {\n (input: Input): Promise<Output>;\n /** Return a new mutation handle with this projection. Failures remove only this invocation's changes. */\n withOptimisticUpdate(update: OptimisticUpdate<Input>): AppMutation<Input, Output>;\n}","tags":[],"docs":"ui.md","source":"apps/src/contracts/optimistic.ts","related":["AppMutation","apps/client.OptimisticUpdate"],"examples":["live-inbox"]},{"symbol":"apps/client.createAppClient","kind":"function","summary":"A scoped page client. Host-injected context carries only the deployment, never credentials.","signatures":["(): { dispose: () => Promise<void>; query: <Input, Output>(reference: OperationReference<Input, Output, \"query\">, input: NoInfer<Input>, output: Schema<NoInfer<Output>, boolean>) => Promise<NoInfer<Output>>; mutate: <Input, Output>(reference: OperationReference<Input, Output, \"mutation\">, input: NoInfer<Input>, output: Schema<NoInfer<Output>, boolean>) => Promise<Output>; mutation: <Input, Output>(reference: OperationReference<Input, Output, \"mutation\">, output: Schema<NoInfer<Output>, boolean>) => AppMutation<Input, Output>; queryAtom: <Input, Output>(reference: OperationReference<Input, Output, \"query\">, input: NoInfer<Input>, output: Schema<NoInfer<Output>, boolean>) => Atom.Atom<AsyncResult<Output, unknown>>; }"],"tags":[],"docs":"ui.md","source":"apps/src/implementation/ui-client.ts","related":["AppMutation","apps.Schema","apps/client.AppMutation","apps/client.OperationReference","Schema"],"examples":["live-inbox"]},{"symbol":"apps/client.liveQueryAtom","kind":"function","summary":"Subscribe for the atom's mounted lifetime and parse every result using a shared output schema.\nThe host supplies routing, authentication and reconnection behavior through transport.","signatures":["<Input, Output>(reference: OperationReference<Input, Output, \"query\">, input: NoInfer<Input>, options: { readonly output: Schema<NoInfer<Output>, boolean>; readonly transport: QueryTransport; }): Atom.Atom<AsyncResult<NoInfer<Output>, NoSuchElementError | AppQueryFailed>>"],"tags":[],"docs":"ui.md","source":"apps/src/implementation/live.ts","related":["apps.Schema","apps/client.OperationReference","apps/client.QueryTransport","Schema"],"examples":["live-inbox"]},{"symbol":"apps/client.mutationReference","kind":"function","summary":"Make a mutation reference using a type-only server import.","signatures":["<Mutation>(name: Mutation extends Operation<infer _Input, infer _Output, \"mutation\", infer _Context> ? string : never): OperationReference<InputOf<Mutation>, OutputOf<Mutation>, \"mutation\">"],"tags":[],"docs":"ui.md","source":"apps/src/implementation/live.ts","related":["apps.Operation","apps/client.OperationReference"],"examples":["live-inbox"]},{"symbol":"apps/client.OperationReference","kind":"type","summary":"Serializable named reference; the phantom field is never populated at runtime.","signatures":[],"definition":"export interface OperationReference<Input, Output, Kind extends \"query\" | \"mutation\"> {\n readonly name: string;\n readonly kind: Kind;\n readonly _types?: { readonly input: Input; readonly output: Output };\n}","tags":[],"docs":"ui.md","source":"apps/src/contracts/live.ts","related":[],"examples":["live-inbox"]},{"symbol":"apps/client.OptimisticLocalStore","kind":"type","summary":"Read or replace mounted queries during a synchronous optimistic update. Never mutate returned values.","signatures":[],"definition":"export interface OptimisticLocalStore {\n /** Read the projected result, or undefined if this query is not loaded in this client. */\n getQuery<Input, Output>(\n reference: OperationReference<Input, Output, \"query\">,\n input: NoInfer<Input>,\n ): Output | undefined;\n /** Read all mounted argument variants of an operation, including loading queries. */\n getAllQueries<Input, Output>(\n reference: OperationReference<Input, Output, \"query\">,\n ): readonly { readonly input: Input; readonly value: Output | undefined }[];\n /** Replace a mounted query's projected result. The query's output schema validates the new value. */\n setQuery<Input, Output>(\n reference: OperationReference<Input, Output, \"query\">,\n input: NoInfer<Input>,\n value: NoInfer<Output>,\n ): void;\n}","tags":[],"docs":"ui.md","source":"apps/src/contracts/optimistic.ts","related":["apps/client.OperationReference","OptimisticLocalStore"],"examples":["live-inbox"]},{"symbol":"apps/client.OptimisticUpdate","kind":"type","summary":"Pure synchronous projection. Replayed over current data; create temporary IDs before invoking the mutation.","signatures":[],"definition":"export type OptimisticUpdate<Input> = (store: OptimisticLocalStore, input: Input) => undefined;","tags":[],"docs":"ui.md","source":"apps/src/contracts/optimistic.ts","related":["apps/client.OptimisticLocalStore","OptimisticLocalStore"],"examples":["live-inbox"]},{"symbol":"apps/client.QueryDescriptor","kind":"type","summary":"Host-bound subscription request. Authentication and configured app identity belong to the host.","signatures":[],"definition":"export interface QueryDescriptor {\n readonly name: string;\n readonly input: JsonValue;\n}","tags":[],"docs":"ui.md","source":"apps/src/contracts/live.ts","related":["apps.JsonValue"],"examples":["live-inbox"]},{"symbol":"apps/client.queryReference","kind":"function","summary":"Make a query reference using a type-only server import. No handler is passed or bundled.","signatures":["<Query>(name: Query extends Operation<infer _Input, infer _Output, \"query\", infer _Context> ? string : never): OperationReference<InputOf<Query>, OutputOf<Query>, \"query\">"],"tags":[],"docs":"ui.md","source":"apps/src/implementation/live.ts","related":["apps.Operation","apps/client.OperationReference"],"examples":["live-inbox"]},{"symbol":"apps/client.QueryTransport","kind":"type","summary":"Host transport must close its subscription when async iteration ends. Results are parsed by the client.","signatures":[],"definition":"export interface QueryTransport {\n readonly subscribe: (descriptor: QueryDescriptor) => Promise<AsyncIterable<unknown>>;\n}","tags":[],"docs":"ui.md","source":"apps/src/contracts/live.ts","related":["apps/client.QueryDescriptor"],"examples":["live-inbox"]},{"symbol":"apps/graphql.graphqlOperations","kind":"function","summary":"Discover operations for the selected account. Kinds override uncertain upstream read-only hints.","signatures":["(options: GraphqlToolsOptions, kinds?: OperationKinds): Promise<{ queries: Record<string, Operation<Json, unknown, \"query\", OperationContext>>; mutations: Record<string, Operation<Json, unknown, \"mutation\", OperationContext>>; }>"],"tags":[],"docs":"integrations.md","source":"apps/src/graphql.ts","related":["apps.Operation","apps.OperationContext","apps/graphql.GraphqlToolsOptions","apps/graphql.OperationKinds","apps/mcp.OperationKinds","apps/openapi.OperationKinds"],"examples":[]},{"symbol":"apps/graphql.GraphqlToolsOptions","kind":"type","summary":"Endpoint and credential snapshot for one app evaluation.","signatures":[],"definition":"GraphqlToolsOptions = Schema.Struct({\n url: HttpUrl,\n headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),\n signal: Schema.optional(Schema.instanceOf(AbortSignal)),\n timeoutMs: Schema.optional(\n Schema.Int.check(\n Schema.isBetween({ minimum: 1, maximum: defaultGraphqlClientLimits.maxTimeoutMs }),\n ),\n ),\n})","tags":[],"docs":"integrations.md","source":"apps/src/contracts/graphql.ts","related":["apps.Schema","Schema"],"examples":[]},{"symbol":"apps/graphql.OperationKinds","kind":"type","summary":"Explicit corrections for upstream read-only hints or unusual HTTP semantics.","signatures":[],"definition":"export type OperationKinds = Readonly<Record<string, \"query\" | \"mutation\">>;","tags":[],"docs":"integrations.md","source":"apps/src/implementation/protocol-operations.ts","related":["apps/mcp.OperationKinds","apps/openapi.OperationKinds"],"examples":[]},{"symbol":"apps/mcp.mcpOperations","kind":"function","summary":"Discover operations for the selected account. Kinds override uncertain upstream read-only hints.","signatures":["(options: McpToolsOptions, kinds?: OperationKinds): Promise<{ queries: Record<string, Operation<Json, unknown, \"query\", OperationContext>>; mutations: Record<string, Operation<Json, unknown, \"mutation\", OperationContext>>; }>"],"tags":[],"docs":"integrations.md","source":"apps/src/mcp.ts","related":["apps.Operation","apps.OperationContext","apps/graphql.OperationKinds","apps/mcp.McpToolsOptions","apps/mcp.OperationKinds","apps/openapi.OperationKinds"],"examples":[]},{"symbol":"apps/mcp.McpToolContext","kind":"type","summary":"Direct callers can omit interaction capabilities. A server that asks for input then fails explicitly.","signatures":[],"definition":"export interface McpToolContext {\n readonly elicit?: Elicit;\n}","tags":[],"docs":"integrations.md","source":"apps/src/contracts/mcp.ts","related":["apps.Elicit","apps/mcp/stdio.McpToolContext"],"examples":[]},{"symbol":"apps/mcp.McpToolResult","kind":"type","summary":"Native MCP result semantics. Protocol/transport failures use the Effect error channel.","signatures":[],"definition":"McpToolResult = Schema.Struct({\n content: Schema.Array(JsonObject),\n structuredContent: Schema.optional(JsonObject),\n isError: Schema.optional(Schema.Boolean),\n _meta: Schema.optional(JsonObject),\n})","tags":[],"docs":"integrations.md","source":"apps/src/contracts/mcp.ts","related":["apps.JsonObject","apps.Schema","Schema"],"examples":[]},{"symbol":"apps/mcp.McpToolsOptions","kind":"type","summary":"Server and headers for this selected account. Headers are a credential snapshot.","signatures":[],"definition":"McpToolsOptions = Schema.Struct({\n url: HttpUrl,\n headers: Schema.optional(Schema.Record(Schema.String, Schema.String)),\n signal: Schema.optional(Schema.instanceOf(AbortSignal)),\n timeoutMs: Schema.optional(\n Schema.Number.check(\n Schema.isInt(),\n Schema.isBetween({ minimum: 1, maximum: defaultMcpClientLimits.maxTimeoutMs }),\n ),\n ),\n})","tags":[],"docs":"integrations.md","source":"apps/src/contracts/mcp.ts","related":["apps.Schema","Schema"],"examples":[]},{"symbol":"apps/mcp.OperationKinds","kind":"type","summary":"Explicit corrections for upstream read-only hints or unusual HTTP semantics.","signatures":[],"definition":"export type OperationKinds = Readonly<Record<string, \"query\" | \"mutation\">>;","tags":[],"docs":"integrations.md","source":"apps/src/implementation/protocol-operations.ts","related":["apps/graphql.OperationKinds","apps/openapi.OperationKinds"],"examples":[]},{"symbol":"apps/mcp/stdio.McpToolContext","kind":"type","summary":"Direct callers can omit interaction capabilities. A server that asks for input then fails explicitly.","signatures":[],"definition":"export interface McpToolContext {\n readonly elicit?: Elicit;\n}","tags":[],"docs":"integrations.md","source":"apps/src/contracts/mcp.ts","related":["apps.Elicit","apps/mcp.McpToolContext"],"examples":[]},{"symbol":"apps/mcp/stdio.ProcessConfig","kind":"type","summary":"Public process configuration. Credentials arrive through the selected account.","signatures":[],"definition":"ProcessConfig = Schema.Struct({\n command: Schema.NonEmptyString,\n args: Schema.Array(Schema.String),\n cwd: Schema.optional(Schema.String),\n env: Schema.Record(Schema.String, Schema.String),\n timeoutMs: Schema.Int.check(\n Schema.isBetween({ minimum: 1, maximum: defaultMcpClientLimits.maxTimeoutMs }),\n ),\n})","tags":[],"docs":"integrations.md","source":"apps/src/contracts/mcp.ts","related":["apps.Schema","Schema"],"examples":[]},{"symbol":"apps/mcp/stdio.stdioOperations","kind":"function","summary":"Discover an account's tools; each discovery and call owns and closes its subprocess.","signatures":["(config: ProcessConfig, signal?: AbortSignal, kinds?: OperationKinds): Promise<{ queries: Record<string, Operation<Json, unknown, \"query\", OperationContext>>; mutations: Record<string, Operation<Json, unknown, \"mutation\", OperationContext>>; }>"],"tags":[],"docs":"integrations.md","source":"apps/src/mcp-stdio.ts","related":["apps.Operation","apps.OperationContext","apps/graphql.OperationKinds","apps/mcp.OperationKinds","apps/mcp/stdio.ProcessConfig","apps/openapi.OperationKinds"],"examples":[]},{"symbol":"apps/openapi.CredentialBinding","kind":"type","summary":"One field's placement, potentially combined with other fields in an authentication method.","signatures":[],"definition":"CredentialBinding = Schema.Struct({\n scheme: Schema.String,\n field: Schema.String,\n in: Schema.Literals([\"header\", \"query\"]),\n name: Schema.String,\n prefix: Schema.String,\n})","tags":[],"docs":"integrations.md","source":"apps/src/contracts/openapi.ts","related":["apps.Schema","Schema"],"examples":[]},{"symbol":"apps/openapi.OpenapiOperation","kind":"type","summary":"Credential-free operation data emitted by the OpenAPI importer.","signatures":[],"definition":"OpenapiOperation = Schema.Struct({\n name: Schema.NonEmptyString,\n description: Schema.String,\n method: Schema.Literals([\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"HEAD\", \"OPTIONS\"]),\n path: Schema.String,\n baseUrl: HttpUrl,\n parameters: Schema.Array(RequestParameter),\n body: Schema.Literals([\"json\", \"base64\", \"none\"]),\n /** Streams remain in the metadata but cannot run through a single-result tool call. */\n streaming: Schema.optionalKey(Schema.Literal(true)),\n security: Schema.Array(Schema.Array(Schema.String)),\n input: JsonObject,\n outputSchema: Schema.optionalKey(JsonObject),\n})","tags":[],"docs":"integrations.md","source":"apps/src/contracts/openapi.ts","related":["apps.JsonObject","apps.Schema","apps/openapi.RequestParameter","Schema"],"examples":[]},{"symbol":"apps/openapi.openapiOperations","kind":"function","summary":"Discover operations for the selected account. Kinds override uncertain upstream read-only hints.","signatures":["(options: OpenapiToolsOptions, kinds?: OperationKinds): Promise<{ queries: Record<string, Operation<Json, unknown, \"query\", OperationContext>>; mutations: Record<string, Operation<Json, unknown, \"mutation\", OperationContext>>; }>"],"tags":[],"docs":"integrations.md","source":"apps/src/openapi.ts","related":["apps.Operation","apps.OperationContext","apps/graphql.OperationKinds","apps/mcp.OperationKinds","apps/openapi.OpenapiToolsOptions","apps/openapi.OperationKinds"],"examples":[]},{"symbol":"apps/openapi.OpenapiToolsOptions","kind":"type","summary":"Parsed options for one account's evaluation.\nJSON imports are decoded at the helper boundary, without assertions in app source.","signatures":[],"definition":"OpenapiToolsOptions = Schema.Struct({\n operations: Schema.Array(OpenapiOperation),\n methods: Schema.Record(Schema.String, Schema.Array(CredentialBinding)),\n oauth: Schema.Array(Schema.String),\n account: Schema.optional(OpenapiAccount),\n signal: Schema.optional(Schema.instanceOf(AbortSignal)),\n fetch: Schema.optional(\n Schema.declare((value): value is typeof globalThis.fetch => typeof value === \"function\"),\n ),\n})","tags":[],"docs":"integrations.md","source":"apps/src/contracts/openapi.ts","related":["apps.Schema","apps/openapi.CredentialBinding","apps/openapi.OpenapiOperation","Schema"],"examples":[]},{"symbol":"apps/openapi.OperationKinds","kind":"type","summary":"Explicit corrections for upstream read-only hints or unusual HTTP semantics.","signatures":[],"definition":"export type OperationKinds = Readonly<Record<string, \"query\" | \"mutation\">>;","tags":[],"docs":"integrations.md","source":"apps/src/implementation/protocol-operations.ts","related":["apps/graphql.OperationKinds","apps/mcp.OperationKinds"],"examples":[]},{"symbol":"apps/openapi.RequestParameter","kind":"type","summary":"One parameter's HTTP placement and serialization.","signatures":[],"definition":"RequestParameter = Schema.Struct({\n name: Schema.String,\n in: Schema.Literals([\"path\", \"query\", \"header\"]),\n style: Schema.String,\n explode: Schema.Boolean,\n})","tags":[],"docs":"integrations.md","source":"apps/src/contracts/openapi.ts","related":["apps.Schema","Schema"],"examples":[]},{"symbol":"apps/operations/approval.always","kind":"function","summary":"Require human approval for every call to the tool.","signatures":["<Input = unknown>(): Approval<Input>"],"tags":[],"docs":"tools.md","source":"apps/src/approval.ts","related":["apps.Approval","apps/operations/approval.Approval"],"examples":["live-inbox"]},{"symbol":"apps/operations/approval.Approval","kind":"type","summary":"Synchronous or async policy, projected from the framework's native contract.","signatures":[],"definition":"export type Approval<Input = unknown> = (\n ...args: Parameters<NativeApproval<Input>>\n) =>\n | Effect.Success<ReturnType<NativeApproval<Input>>>\n | Promise<Effect.Success<ReturnType<NativeApproval<Input>>>>;","tags":[],"docs":"tools.md","source":"apps/src/approval.ts","related":["apps.Approval"],"examples":["live-inbox"]},{"symbol":"apps/operations/approval.ApprovalContext","kind":"type","summary":"Context for one tool's policy. toolInput is the same decoded value passed to run.","signatures":[],"definition":"export interface ApprovalContext<Input = unknown> {\n readonly toolName: string;\n readonly toolInput: Input;\n readonly signal: AbortSignal;\n}","tags":[],"docs":"tools.md","source":"apps/src/contracts/approval.ts","related":["apps.ApprovalContext"],"examples":["live-inbox"]},{"symbol":"apps/operations/approval.ApprovalDecision","kind":"type","summary":"Approve this call, deny it, or stop for a human decision.\nParsed result of one tool approval policy.","signatures":[],"definition":"ApprovalDecision = Schema.Literals([\"approved\", \"denied\", \"user-approval\"])","tags":[],"docs":"tools.md","source":"apps/src/contracts/approval.ts","related":["apps.ApprovalDecision","apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"apps/operations/approval.never","kind":"function","summary":"Never require human approval for this tool. Product access checks still apply.","signatures":["<Input = unknown>(): Approval<Input>"],"tags":[],"docs":"tools.md","source":"apps/src/approval.ts","related":["apps.Approval","apps/operations/approval.Approval"],"examples":["live-inbox"]},{"symbol":"apps/react.useAppQuery","kind":"function","summary":"Subscribe for the component lifetime. Each mount owns and disposes its registry, including StrictMode remounts.","signatures":["<A, E>(atom: Atom.Atom<AsyncResult.AsyncResult<A, E>>): { data: A | undefined; pending: boolean; error: string | undefined; }"],"tags":[],"docs":"ui.md","source":"apps/src/react.ts","related":[],"examples":["live-inbox"]},{"symbol":"DatabaseTable","kind":"type","summary":"Writes are valid only inside their owning mutation.","signatures":[],"definition":"export interface WriteTable<Row, Insert, Index extends string = string> extends ReadTable<\n Row,\n Index\n> {\n /** Insert authored fields and return the complete row with generated id, createdAt and updatedAt. */\n readonly insert: (value: Insert) => Promise<Row>;\n /** Patch authored fields and return the complete row, or null if the ID does not exist. */\n readonly update: (id: string, patch: Partial<Insert>) => Promise<Row | null>;\n /** Delete the row and return whether it existed. */\n readonly delete: (id: string) => Promise<boolean>;\n}","tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":[],"examples":["live-inbox"]},{"symbol":"DatabaseTable.delete","kind":"method","summary":"Delete the row and return whether it existed.","signatures":["(id: string): Promise<boolean>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["DatabaseTable"],"examples":["live-inbox"]},{"symbol":"DatabaseTable.get","kind":"method","summary":"Read a complete row by ID, or null when it does not exist.","signatures":["(id: string): Promise<Row | null>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["DatabaseTable"],"examples":["live-inbox"]},{"symbol":"DatabaseTable.insert","kind":"method","summary":"Insert authored fields and return the complete row with generated id, createdAt and updatedAt.","signatures":["(value: Insert): Promise<Row>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["DatabaseTable"],"examples":["live-inbox"]},{"symbol":"DatabaseTable.update","kind":"method","summary":"Patch authored fields and return the complete row, or null if the ID does not exist.","signatures":["(id: string, patch: Partial<Insert>): Promise<Row | null>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["DatabaseTable"],"examples":["live-inbox"]},{"symbol":"DatabaseTable.withIndex","kind":"method","summary":"Select a declared index or by_creation, with optional prefix and range constraints.","signatures":["(index: \"by_creation\" | Index, range?: ((query: IndexRange<Row>) => IndexRange<Row>) | undefined): Query<Row>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["DatabaseTable","IndexRange"],"examples":["live-inbox"]},{"symbol":"IndexQuery","kind":"type","summary":"Bounded indexed reads; collect/count reject work beyond the invocation budget.","signatures":[],"definition":"export interface Query<Row> {\n /** Choose ascending or descending index order without changing this query. */\n readonly order: (direction: \"asc\" | \"desc\") => Query<Row>;\n /** Read all matching rows within the invocation budget; exceeding it fails. */\n readonly collect: () => Promise<readonly Row[]>;\n /** Count matching rows within the scan budget; exceeding it fails. */\n readonly count: () => Promise<number>;\n /** Read the first matching row, or null when no row matches. */\n readonly first: () => Promise<Row | null>;\n /** Read at most count matching rows within the invocation budget. */\n readonly take: (count: number) => Promise<readonly Row[]>;\n /** Read one cursor page. Return its rows, continuation cursor and completion flag. */\n readonly paginate: (options: {\n readonly numItems: number;\n readonly cursor: string | null;\n }) => Promise<{\n readonly page: readonly Row[];\n readonly continueCursor: string | null;\n readonly isDone: boolean;\n }>;\n}","tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":[],"examples":["live-inbox"]},{"symbol":"IndexQuery.collect","kind":"method","summary":"Read all matching rows within the invocation budget; exceeding it fails.","signatures":["(): Promise<readonly Row[]>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["IndexQuery"],"examples":["live-inbox"]},{"symbol":"IndexQuery.count","kind":"method","summary":"Count matching rows within the scan budget; exceeding it fails.","signatures":["(): Promise<number>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["IndexQuery"],"examples":["live-inbox"]},{"symbol":"IndexQuery.first","kind":"method","summary":"Read the first matching row, or null when no row matches.","signatures":["(): Promise<Row | null>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["IndexQuery"],"examples":["live-inbox"]},{"symbol":"IndexQuery.order","kind":"method","summary":"Choose ascending or descending index order without changing this query.","signatures":["(direction: \"asc\" | \"desc\"): Query<Row>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["IndexQuery"],"examples":["live-inbox"]},{"symbol":"IndexQuery.paginate","kind":"method","summary":"Read one cursor page. Return its rows, continuation cursor and completion flag.","signatures":["(options: { readonly numItems: number; readonly cursor: string | null; }): Promise<{ readonly page: readonly Row[]; readonly continueCursor: string | null; readonly isDone: boolean; }>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["IndexQuery"],"examples":["live-inbox"]},{"symbol":"IndexQuery.take","kind":"method","summary":"Read at most count matching rows within the invocation budget.","signatures":["(count: number): Promise<readonly Row[]>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["IndexQuery"],"examples":["live-inbox"]},{"symbol":"IndexRange","kind":"type","summary":"Index predicates are accumulated immutably, then checked against the declaration by the engine.","signatures":[],"definition":"export interface IndexRange<Fields> {\n /** Constrain an index prefix field to one value. Null matches a cleared optional field. */\n readonly eq: <Key extends keyof Fields & string>(\n field: Key,\n value: Fields[Key] | null,\n ) => IndexRange<Fields>;\n /** Require a value greater than the bound on the next index field. */\n readonly gt: <Key extends keyof Fields & string>(\n field: Key,\n value: Fields[Key],\n ) => IndexRange<Fields>;\n /** Require a value greater than or equal to the bound on the next index field. */\n readonly gte: <Key extends keyof Fields & string>(\n field: Key,\n value: Fields[Key],\n ) => IndexRange<Fields>;\n /** Require a value less than the bound on the next index field. */\n readonly lt: <Key extends keyof Fields & string>(\n field: Key,\n value: Fields[Key],\n ) => IndexRange<Fields>;\n /** Require a value less than or equal to the bound on the next index field. */\n readonly lte: <Key extends keyof Fields & string>(\n field: Key,\n value: Fields[Key],\n ) => IndexRange<Fields>;\n}","tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["apps.Fields"],"examples":["live-inbox"]},{"symbol":"IndexRange.eq","kind":"method","summary":"Constrain an index prefix field to one value. Null matches a cleared optional field.","signatures":["<Key extends keyof Fields & string>(field: Key, value: Fields[Key] | null): IndexRange<Fields>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["apps.Fields","IndexRange"],"examples":["live-inbox"]},{"symbol":"IndexRange.gt","kind":"method","summary":"Require a value greater than the bound on the next index field.","signatures":["<Key extends keyof Fields & string>(field: Key, value: Fields[Key]): IndexRange<Fields>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["apps.Fields","IndexRange"],"examples":["live-inbox"]},{"symbol":"IndexRange.gte","kind":"method","summary":"Require a value greater than or equal to the bound on the next index field.","signatures":["<Key extends keyof Fields & string>(field: Key, value: Fields[Key]): IndexRange<Fields>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["apps.Fields","IndexRange"],"examples":["live-inbox"]},{"symbol":"IndexRange.lt","kind":"method","summary":"Require a value less than the bound on the next index field.","signatures":["<Key extends keyof Fields & string>(field: Key, value: Fields[Key]): IndexRange<Fields>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["apps.Fields","IndexRange"],"examples":["live-inbox"]},{"symbol":"IndexRange.lte","kind":"method","summary":"Require a value less than or equal to the bound on the next index field.","signatures":["<Key extends keyof Fields & string>(field: Key, value: Fields[Key]): IndexRange<Fields>"],"tags":[],"docs":"storage.md","source":"app-data/src/implementation/promise.ts","related":["apps.Fields","IndexRange"],"examples":["live-inbox"]},{"symbol":"OptimisticLocalStore","kind":"type","summary":"Read or replace mounted queries during a synchronous optimistic update. Never mutate returned values.","signatures":[],"definition":"export interface OptimisticLocalStore {\n /** Read the projected result, or undefined if this query is not loaded in this client. */\n getQuery<Input, Output>(\n reference: OperationReference<Input, Output, \"query\">,\n input: NoInfer<Input>,\n ): Output | undefined;\n /** Read all mounted argument variants of an operation, including loading queries. */\n getAllQueries<Input, Output>(\n reference: OperationReference<Input, Output, \"query\">,\n ): readonly { readonly input: Input; readonly value: Output | undefined }[];\n /** Replace a mounted query's projected result. The query's output schema validates the new value. */\n setQuery<Input, Output>(\n reference: OperationReference<Input, Output, \"query\">,\n input: NoInfer<Input>,\n value: NoInfer<Output>,\n ): void;\n}","tags":[],"docs":"ui.md","source":"apps/src/contracts/optimistic.ts","related":["apps/client.OperationReference","apps/client.OptimisticLocalStore"],"examples":["live-inbox"]},{"symbol":"OptimisticLocalStore.getAllQueries","kind":"method","summary":"Read all mounted argument variants of an operation, including loading queries.","signatures":["<Input, Output>(reference: OperationReference<Input, Output, \"query\">): readonly { readonly input: Input; readonly value: Output | undefined; }[]"],"tags":[],"docs":"ui.md","source":"apps/src/contracts/optimistic.ts","related":["apps/client.OperationReference","OptimisticLocalStore"],"examples":["live-inbox"]},{"symbol":"OptimisticLocalStore.getQuery","kind":"method","summary":"Read the projected result, or undefined if this query is not loaded in this client.","signatures":["<Input, Output>(reference: OperationReference<Input, Output, \"query\">, input: NoInfer<Input>): Output | undefined"],"tags":[],"docs":"ui.md","source":"apps/src/contracts/optimistic.ts","related":["apps/client.OperationReference","OptimisticLocalStore"],"examples":["live-inbox"]},{"symbol":"OptimisticLocalStore.setQuery","kind":"method","summary":"Replace a mounted query's projected result. The query's output schema validates the new value.","signatures":["<Input, Output>(reference: OperationReference<Input, Output, \"query\">, input: NoInfer<Input>, value: NoInfer<Output>): void"],"tags":[],"docs":"ui.md","source":"apps/src/contracts/optimistic.ts","related":["apps/client.OperationReference","OptimisticLocalStore"],"examples":["live-inbox"]},{"symbol":"Provider","kind":"type","summary":"A provider declaration. The future host derives its identity from normalized content.","signatures":[],"definition":"export class Provider<Auth extends AuthMethods> extends Data.Class<{\n readonly name: string;\n readonly auth: Auth;\n}> {\n /** Declare zero or more accounts from this provider without performing I/O. */\n many(): ManyAccounts<Auth> {\n return new ManyAccounts({ provider: this });\n }\n}","tags":[],"docs":"accounts.md","source":"apps/src/contracts/provider.ts","related":["apps.AuthMethods"],"examples":[]},{"symbol":"Provider.many","kind":"method","summary":"Declare zero or more accounts from this provider without performing I/O.","signatures":["(): ManyAccounts<Auth>"],"tags":[],"docs":"accounts.md","source":"apps/src/contracts/provider.ts","related":["Provider"],"examples":[]},{"symbol":"Provider.pipe","kind":"method","summary":"","signatures":["<A>(this: A): A","<A, B = never>(this: A, ab: (_: A) => B): B","<A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C","<A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D","<A, B = never, C = never, D = never, E = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E): E","<A, B = never, C = never, D = never, E = never, F = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F): F","<A, B = never, C = never, D = never, E = never, F = never, G = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G): G","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H): H","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I): I","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J): J","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K): K","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L): L","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M): M","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N): N","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O): O","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P): P","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q): Q","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never, R = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q, qr: (_: Q) => R): R","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never, R = never, S = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q, qr: (_: Q) => R, rs: (_: R) => S): S","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never, R = never, S = never, T = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q, qr: (_: Q) => R, rs: (_: R) => S, st: (_: S) => T): T","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never, R = never, S = never, T = never, U = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q, qr: (_: Q) => R, rs: (_: R) => S, st: (_: S) => T, tu: (_: T) => U): U","<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never, R = never, S = never, T = never, U = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q, qr: (_: Q) => R, rs: (_: R) => S, st: (_: S) => T, tu: (_: T) => U): U"],"tags":[],"docs":"accounts.md","source":"../node_modules/.bun/effect@https+++pkg.pr.new+Effect-TS+effect+effect@c7d1ffff31a3e2ae0b0b0796b742bddeb797269d/node_modules/effect/dist/Pipeable.d.ts","related":["Provider"],"examples":[]},{"symbol":"Schema","kind":"type","summary":"An author-facing value schema. Effect is never required in author code.","signatures":[],"definition":"export interface Schema<T, Optional extends boolean = false> {\n readonly [StorageField]?: Field;\n readonly [Decoder]: EffectSchema.Decoder<T>;\n readonly optionalValue: Optional;\n /** Parse an unknown value; invalid input throws a safe ValidationError. */\n parse(input: unknown): T;\n /** Accept an absent field without changing the original schema. */\n optional(): Schema<T | undefined, true>;\n /** Validate the default now and use it for undefined input. */\n default(value: T): Schema<T> & { readonly hasDefault: true; readonly inputOptional: Optional };\n}","tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema"],"examples":["live-inbox"]},{"symbol":"Schema.default","kind":"method","summary":"Validate the default now and use it for undefined input.","signatures":["(value: T): Schema<T> & { readonly hasDefault: true; readonly inputOptional: Optional; }"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"Schema.optional","kind":"method","summary":"Accept an absent field without changing the original schema.","signatures":["(): Schema<T | undefined, true>"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["apps.Schema","Schema"],"examples":["live-inbox"]},{"symbol":"Schema.parse","kind":"method","summary":"Parse an unknown value; invalid input throws a safe ValidationError.","signatures":["(input: unknown): T"],"tags":[],"docs":"tools.md","source":"apps/src/implementation/schema.ts","related":["Schema"],"examples":["live-inbox"]},{"symbol":"Table","kind":"type","summary":"Typed table declaration; indexes refer only to authored or host metadata fields.","signatures":[],"definition":"export interface Table<F extends Fields, Index extends string = never> {\n readonly fields: F;\n readonly indexes: ReadonlyArray<{ readonly name: string; readonly fields: readonly string[] }>;\n readonly index: <Name extends string>(\n name: Name,\n fields: readonly [\n (keyof F & string) | keyof typeof RowMetadata.Type,\n ...((keyof F & string) | keyof typeof RowMetadata.Type)[],\n ],\n ) => Table<F, Index | Name>;\n}","tags":[],"docs":"storage.md","source":"apps/src/contracts/storage.ts","related":["apps.Fields","apps.Table"],"examples":["live-inbox"]},{"symbol":"Table.index","kind":"method","summary":"","signatures":["<Name extends string>(name: Name, fields: readonly [(keyof F & string) | keyof typeof RowMetadata.Type, ...((keyof F & string) | keyof typeof RowMetadata.Type)[]]): Table<F, Index | Name>"],"tags":[],"docs":"storage.md","source":"apps/src/contracts/storage.ts","related":["apps.Table","Table"],"examples":["live-inbox"]},{"symbol":"WorkflowControls","kind":"type","summary":"Mutating handlers may start and terminate runs in their own configured app.","signatures":[],"definition":"export interface WorkflowControls extends WorkflowReads {\n readonly start: (input: {\n readonly workflow: string;\n readonly input: JsonValue;\n readonly key?: string;\n }) => Promise<WorkflowRun>;\n readonly terminate: (input: { readonly run: string }) => Promise<WorkflowRun>;\n}","tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["apps.JsonValue","apps.WorkflowControls","apps.WorkflowReads"],"examples":[]},{"symbol":"WorkflowControls.get","kind":"method","summary":"","signatures":["(input: { readonly run: string; }): Promise<WorkflowRun>"],"tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["WorkflowControls"],"examples":[]},{"symbol":"WorkflowControls.list","kind":"method","summary":"","signatures":["(input?: { readonly workflow?: string; readonly limit?: number; readonly cursor?: string; }): Promise<WorkflowRunPage>"],"tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["WorkflowControls"],"examples":[]},{"symbol":"WorkflowControls.start","kind":"method","summary":"","signatures":["(input: { readonly workflow: string; readonly input: JsonValue; readonly key?: string; }): Promise<WorkflowRun>"],"tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["apps.JsonValue","WorkflowControls"],"examples":[]},{"symbol":"WorkflowControls.terminate","kind":"method","summary":"","signatures":["(input: { readonly run: string; }): Promise<WorkflowRun>"],"tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["WorkflowControls"],"examples":[]},{"symbol":"WorkflowStep","kind":"type","summary":"Explicit durable boundaries; database access passes through registered app operations.","signatures":[],"definition":"export interface WorkflowStep<Requirements extends AppRequirements = AppRequirements> {\n do<Output>(\n name: string,\n run: (context: WorkflowStepContext<Requirements>) => Promise<Output>,\n ): Promise<Output>;\n do<Output>(\n name: string,\n options: WorkflowStepOptions,\n run: (context: WorkflowStepContext<Requirements>) => Promise<Output>,\n ): Promise<Output>;\n runQuery<Input, Output>(\n name: string,\n operation: Operation<Input, Output, \"query\", QueryContext<Requirements>>,\n input: NoInfer<Input>,\n options?: WorkflowStepOptions,\n ): Promise<Output>;\n runMutation<Input, Output>(\n name: string,\n operation: Operation<Input, Output, \"mutation\", MutationContext<Requirements>>,\n input: NoInfer<Input>,\n options?: WorkflowStepOptions,\n ): Promise<Output>;\n readonly sleep: (name: string, duration: WorkflowDuration) => Promise<void>;\n readonly sleepUntil: (name: string, timestamp: number | Date) => Promise<void>;\n}","tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["apps.AppRequirements","apps.MutationContext","apps.Operation","apps.QueryContext","apps.WorkflowDuration","apps.WorkflowStep","apps.WorkflowStepContext","apps.WorkflowStepOptions"],"examples":[]},{"symbol":"WorkflowStep.do","kind":"method","summary":"","signatures":["<Output>(name: string, run: (context: WorkflowStepContext<Requirements>) => Promise<Output>): Promise<Output>","<Output>(name: string, options: WorkflowStepOptions, run: (context: WorkflowStepContext<Requirements>) => Promise<Output>): Promise<Output>"],"tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["apps.WorkflowStepContext","apps.WorkflowStepOptions","WorkflowStep"],"examples":[]},{"symbol":"WorkflowStep.runMutation","kind":"method","summary":"","signatures":["<Input, Output>(name: string, operation: Operation<Input, Output, \"mutation\", MutationContext<Requirements>>, input: NoInfer<Input>, options?: WorkflowStepOptions): Promise<Output>"],"tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["apps.MutationContext","apps.Operation","apps.WorkflowStepOptions","WorkflowStep"],"examples":[]},{"symbol":"WorkflowStep.runQuery","kind":"method","summary":"","signatures":["<Input, Output>(name: string, operation: Operation<Input, Output, \"query\", QueryContext<Requirements>>, input: NoInfer<Input>, options?: WorkflowStepOptions): Promise<Output>"],"tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["apps.Operation","apps.QueryContext","apps.WorkflowStepOptions","WorkflowStep"],"examples":[]},{"symbol":"WorkflowStep.sleep","kind":"method","summary":"","signatures":["(name: string, duration: WorkflowDuration): Promise<void>"],"tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["apps.WorkflowDuration","WorkflowStep"],"examples":[]},{"symbol":"WorkflowStep.sleepUntil","kind":"method","summary":"","signatures":["(name: string, timestamp: number | Date): Promise<void>"],"tags":[],"docs":"workflows.md","source":"apps/src/contracts/workflows.ts","related":["WorkflowStep"],"examples":[]}],"examples":[{"id":"live-inbox","title":"React UI with live app storage","files":[{"path":"index.ts","content":"import {\n query,\n mutation,\n type QueryContext,\n type MutationContext,\n array,\n defineApp,\n defineDatabase,\n object,\n string,\n table,\n} from \"apps\";\nimport { Message } from \"./schema.ts\";\n\nconst database = defineDatabase({\n messages: table({ subject: string() }).index(\"by_subject\", [\"subject\"]),\n});\n\nconst requirements = { accounts: {}, database };\n\nexport const listMessages = query(\n { input: object({}), output: array(Message) },\n async ({ db }: QueryContext<typeof requirements>) =>\n await db.messages.withIndex(\"by_creation\").order(\"desc\").take(100),\n);\nexport const receiveMessage = mutation(\n { input: object({ subject: string(), clientId: string().optional() }), output: Message },\n async ({ db }: MutationContext<typeof requirements>, message) =>\n await db.messages.insert({ subject: message.subject }),\n);\nexport default defineApp(requirements, {\n queries: { listMessages },\n mutations: { receiveMessage },\n});\n"},{"path":"schema.ts","content":"/** Shared data shape; safe to import from browser and server code. */\nimport { object, string } from \"apps\";\nexport const Message = object({ id: string(), subject: string() });\n"},{"path":"ui/main.tsx","content":"import { StrictMode, useState } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { array } from \"apps\";\nimport { createAppClient, mutationReference, queryReference } from \"apps/client\";\nimport { useAppQuery } from \"apps/react\";\nimport type { listMessages, receiveMessage } from \"../index.ts\";\nimport { Message } from \"../schema.ts\";\nimport \"./style.css\";\n\nconst client = createAppClient();\nconst listRef = queryReference<typeof listMessages>(\"listMessages\");\nconst inbox = client.queryAtom(listRef, {}, array(Message));\nconst receive = client\n .mutation(mutationReference<typeof receiveMessage>(\"receiveMessage\"), Message)\n .withOptimisticUpdate((store, input) => {\n const rows = store.getQuery(listRef, {});\n if (rows !== undefined && input.clientId !== undefined) {\n store.setQuery(\n listRef,\n {},\n [{ id: input.clientId, subject: input.subject }, ...rows].slice(0, 100),\n );\n }\n });\n\nfunction Inbox() {\n const { data, pending, error } = useAppQuery(inbox);\n const [subject, setSubject] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [failure, setFailure] = useState<string>();\n return (\n <main className=\"max-w-225 min-h-dvh py-0 px-[32px] m-auto flex flex-col max-[540px]:py-0 max-[540px]:px-[20px]\">\n <header className=\"h-20 flex items-center justify-between [border-bottom:1px_solid_#e8e8e2] max-[540px]:h-16.5\">\n <div className=\"identity flex items-center gap-2.5 font-semibold text-[15px]\">\n <span\n className=\"mark w-7.25 h-7.25 [border:1px_solid_#deded7] bg-white grid [place-items:center] rounded-[8px]\"\n aria-hidden=\"true\"\n >\n ↗\n </span>\n <span>Inbox</span>\n </div>\n <span className=\"status text-[#55645b] text-[12px] flex items-center gap-1.5 before:[content:''] before:w-1.5 before:h-1.5 before:bg-[#659674] before:rounded-[50%]\">\n {pending ? \"Connecting…\" : error ? \"Disconnected\" : \"Live\"}\n </span>\n </header>\n <section className=\"intro [padding:64px_0_36px] [&_p]:text-[14px] [&_p]:text-[#85857d] [&_p]:m-0 max-[540px]:pt-10\">\n <span className=\"eyebrow text-[10px] tracking-[0.12em] font-semibold text-[#888880]\">\n YOUR SPACE\n </span>\n <h1 className=\"text-[clamp(26px,_5vw,_36px)] tracking-[-0.04em] font-medium [margin:14px_0_10px]\">\n A little room for ideas.\n </h1>\n <p>Leave a thought. It’s here when you return.</p>\n </section>\n <form\n className=\"bg-white [border:1px_solid_#e2e2db] rounded-[12px] p-[20px] max-[540px]:p-[16px]\"\n onSubmit={async (event) => {\n event.preventDefault();\n if (!subject.trim() || saving) return;\n setSaving(true);\n setFailure(undefined);\n try {\n await receive({ subject: subject.trim(), clientId: crypto.randomUUID() });\n setSubject(\"\");\n } catch {\n setFailure(\"Could not save your message. Try again.\");\n } finally {\n setSaving(false);\n }\n }}\n >\n <label className=\"block text-[12px] [font-weight:550] mb-3\" htmlFor=\"subject\">\n New message\n </label>\n <div className=\"compose flex gap-3 max-[540px]:flex-col\">\n <input\n className=\"min-w-0 flex-1 [border:1px_solid_#e3e3dd] rounded-[7px] py-[11px] px-[12px] bg-[#fafaf8] text-[14px] focus-visible:[outline:2px_solid_#adbdad] focus-visible:outline-offset-[2px]\"\n id=\"subject\"\n value={subject}\n onChange={(e) => setSubject(e.target.value)}\n placeholder=\"What’s on your mind?\"\n autoComplete=\"off\"\n required\n />\n <button\n className=\"border-0 rounded-[7px] bg-[#303d34] text-white py-0 px-[17px] text-[12px] [font-weight:550] cursor-pointer max-[540px]:min-h-10.5 disabled:opacity-50 disabled:cursor-default\"\n disabled={saving || !subject.trim()}\n >\n {saving ? \"Saving…\" : \"Add message\"}\n </button>\n </div>\n {failure && (\n <p className=\" text-[#a74636] text-[13px]\" role=\"alert\">\n {failure}\n </p>\n )}\n </form>\n <section className=\"messages flex-1 pt-9.5\" aria-labelledby=\"messages-title\">\n <div className=\"section-heading flex items-center justify-between pb-3.75 [border-bottom:1px_solid_#e6e6df] [&_h2]:text-[13px] [&_h2]:[font-weight:550] [&_h2]:m-0 [&_span]:text-[11px] [&_span]:text-[#8c8c83]\">\n <h2 id=\"messages-title\">Messages</h2>\n <span>{data?.length ?? 0}</span>\n </div>\n {error && (\n <p className=\" text-[#a74636] text-[13px]\" role=\"alert\">\n {error}\n </p>\n )}\n {pending ? (\n <p className=\"empty py-[64px] px-0 text-center text-[#97978e] [&_>_span]:text-[30px] [&_>_span]:text-[#bdc4b8] [&_h3]:text-[#77776f] [&_h3]:text-[14px] [&_h3]:font-medium [&_h3]:[margin:18px_0_7px] [&_p]:text-[12px] [&_p]:m-0 \">\n Loading your inbox…\n </p>\n ) : data?.length === 0 ? (\n <div className=\"empty py-[64px] px-0 text-center text-[#97978e] [&_>_span]:text-[30px] [&_>_span]:text-[#bdc4b8] [&_h3]:text-[#77776f] [&_h3]:text-[14px] [&_h3]:font-medium [&_h3]:[margin:18px_0_7px] [&_p]:text-[12px] [&_p]:m-0\">\n <span aria-hidden=\"true\">✳</span>\n <h3>A clean slate.</h3>\n <p>Your first message goes here.</p>\n </div>\n ) : (\n <ul className=\"p-0 m-0 [list-style:none]\">\n {data?.map((message) => (\n <li\n className=\"[border-bottom:1px_solid_#e8e8e2] flex gap-3.75 items-start py-[21px] px-[2px]\"\n key={message.id}\n >\n <span className=\"message-icon text-[#80917e]\" aria-hidden=\"true\">\n ↗\n </span>\n <p>{message.subject}</p>\n </li>\n ))}\n </ul>\n )}\n </section>\n <footer className=\"flex justify-between text-[#a1a197] text-[11px] py-[30px] px-0 mt-10\">\n Live inbox <span>Made with Executor</span>\n </footer>\n </main>\n );\n}\n\nconst root = document.getElementById(\"root\");\nif (root === null) throw new Error(\"Missing app root\");\ncreateRoot(root).render(\n <StrictMode>\n <Inbox />\n </StrictMode>,\n);\n"},{"path":"ui/index.html","content":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>Live inbox</title>\n <script type=\"module\" src=\"./main.tsx\"></script>\n </head>\n <body>\n <div id=\"root\"></div>\n </body>\n</html>\n"},{"path":"ui/style.css","content":"/* Includes Preflight so copied controls do not retain browser default styles. */\n@import \"tailwindcss\";\n\n@layer base {\n :root {\n font-family:\n Inter,\n ui-sans-serif,\n -apple-system,\n BlinkMacSystemFont,\n \"Segoe UI\",\n sans-serif;\n color: #232321;\n background: #fafaf8;\n font-synthesis: none;\n }\n * {\n box-sizing: border-box;\n }\n body {\n margin: 0;\n }\n button {\n font: inherit;\n }\n input {\n font: inherit;\n }\n}\n"},{"path":"package.json","content":"{\n \"name\": \"@executor-js/app-live-inbox\",\n \"private\": true,\n \"type\": \"module\",\n \"exports\": {\n \".\": \"./index.ts\"\n },\n \"dependencies\": {\n \"react\": \"^19.2.0\",\n \"react-dom\": \"^19.2.0\"\n },\n \"devDependencies\": {\n \"@types/react\": \"^19.2.0\",\n \"@types/react-dom\": \"^19.2.0\",\n \"apps\": \"workspace:*\"\n }\n}\n"}]}]}
|