apps 0.0.1-beta.5 → 0.0.1-beta.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +68 -44
  2. package/framework-reference.json +1 -1
  3. package/js/chunk-47F7VXST.js +221 -0
  4. package/js/chunk-5FHWNLCI.js +88 -0
  5. package/js/{chunk-M3B3DE4K.js → chunk-74YVXBKY.js} +463 -218
  6. package/js/chunk-7UUHJR2Q.js +49 -0
  7. package/js/{chunk-CYYBFC2K.js → chunk-AQU56EPI.js} +9 -5
  8. package/js/chunk-BTSIG4NQ.js +1885 -0
  9. package/js/chunk-CDXQDN7W.js +92 -0
  10. package/js/{chunk-UK573G7W.js → chunk-EOPQ727L.js} +87 -51
  11. package/js/{chunk-27F7W2LG.js → chunk-H2CJWXA3.js} +2 -2
  12. package/js/{chunk-JU7VHODU.js → chunk-H72MEDMN.js} +65 -10
  13. package/js/{chunk-CDL5PM2Q.js → chunk-IFJU5SYQ.js} +19082 -18402
  14. package/js/{chunk-UDDE5KOR.js → chunk-JK5S2N2S.js} +148 -34
  15. package/js/{chunk-RJDDBDSN.js → chunk-JM7LOD2W.js} +628 -85
  16. package/js/{chunk-VFZKSM3T.js → chunk-JPEUKEV4.js} +3 -3
  17. package/js/{chunk-FWQC6I3C.js → chunk-KGCTYL2S.js} +523 -63
  18. package/js/{chunk-KUMBKVJD.js → chunk-KLYSEHUD.js} +2 -2
  19. package/js/chunk-L4K2K22P.js +42 -0
  20. package/js/chunk-LTDHQJ2Z.js +171 -0
  21. package/js/chunk-MWKHKOTL.js +240 -0
  22. package/js/chunk-OD3KFKZD.js +1617 -0
  23. package/js/{chunk-57RKNWL2.js → chunk-PD6I2SDG.js} +4 -4
  24. package/js/chunk-PXXZ6ABC.js +266 -0
  25. package/js/chunk-QEBRH5AP.js +729 -0
  26. package/js/chunk-TLWLJ7PD.js +4342 -0
  27. package/js/{chunk-IJX4CYZO.js → chunk-TUMGL2OC.js} +228 -264
  28. package/js/{chunk-XHO2ZX6W.js → chunk-UM62MBJQ.js} +96 -41
  29. package/js/{chunk-IPI4MFSN.js → chunk-XBG7HHXC.js} +2 -2
  30. package/js/chunk-XCSG7FT7.js +340 -0
  31. package/js/client.js +142 -94
  32. package/js/contracts.js +123 -33
  33. package/js/effect.js +19 -21
  34. package/js/{es-APDZKREY.js → es-DIULA3ZF.js} +62 -1659
  35. package/js/graphql.js +63 -60
  36. package/js/host.js +83 -60
  37. package/js/index.js +262 -222
  38. package/js/mcp/effect.js +23 -23
  39. package/js/mcp/stdio.js +48 -40
  40. package/js/mcp.js +109 -72
  41. package/js/openapi.js +4129 -1419
  42. package/js/react.js +2 -3
  43. package/js/skills/effect.js +6 -3
  44. package/js/skills.js +208 -82
  45. package/js/storage/facet.js +1 -540
  46. package/js/ui/auth/contracts.js +2 -2
  47. package/js/ui/auth.js +5 -5
  48. package/js/ui/contracts.js +5 -4
  49. package/js/ui/serving.js +8517 -214
  50. package/package.json +2 -3
  51. package/runtime.json +1 -1
  52. package/types/app-cache/src/index.d.ts +10 -1
  53. package/types/apps/src/contracts/api-response-error.d.ts +4 -0
  54. package/types/apps/src/contracts/app.d.ts +9 -8
  55. package/types/apps/src/contracts/cache.d.ts +20 -0
  56. package/types/apps/src/contracts/context.d.ts +19 -11
  57. package/types/apps/src/contracts/elicitation.d.ts +6 -6
  58. package/types/apps/src/contracts/events.d.ts +93 -0
  59. package/types/apps/src/contracts/failure.d.ts +30 -1
  60. package/types/apps/src/contracts/graphql.d.ts +2 -1
  61. package/types/apps/src/contracts/host.d.ts +57 -18
  62. package/types/apps/src/contracts/live.d.ts +2 -0
  63. package/types/apps/src/contracts/mcp.d.ts +96 -10
  64. package/types/apps/src/contracts/network.d.ts +84 -0
  65. package/types/apps/src/contracts/openapi-compile.d.ts +32 -3
  66. package/types/apps/src/contracts/openapi.d.ts +45 -9
  67. package/types/apps/src/contracts/operations.d.ts +8 -9
  68. package/types/apps/src/contracts/protocol-version.d.ts +2 -2
  69. package/types/apps/src/contracts/protocols/1.d.ts +733 -81
  70. package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
  71. package/types/apps/src/contracts/protocols/2.d.ts +69 -26
  72. package/types/apps/src/contracts/protocols/3.d.ts +133 -33
  73. package/types/apps/src/contracts/protocols/4.d.ts +1306 -0
  74. package/types/apps/src/contracts/protocols/5.d.ts +1200 -0
  75. package/types/apps/src/contracts/protocols/6.d.ts +1629 -0
  76. package/types/apps/src/contracts/protocols/7.d.ts +1785 -0
  77. package/types/apps/src/contracts/protocols/8.d.ts +1182 -0
  78. package/types/apps/src/contracts/protocols/9.d.ts +1104 -0
  79. package/types/apps/src/contracts/protocols/current.d.ts +2476 -0
  80. package/types/apps/src/contracts/protocols/oauth-6.d.ts +74 -0
  81. package/types/apps/src/contracts/protocols/oauth.d.ts +134 -0
  82. package/types/apps/src/contracts/provider-error.d.ts +9 -0
  83. package/types/apps/src/contracts/provider.d.ts +115 -10
  84. package/types/apps/src/contracts/router.d.ts +59 -0
  85. package/types/apps/src/contracts/skills.d.ts +50 -13
  86. package/types/apps/src/contracts/sql.d.ts +58 -0
  87. package/types/apps/src/contracts/ui.d.ts +19 -1
  88. package/types/apps/src/contracts/workflows.d.ts +6 -0
  89. package/types/apps/src/facet.d.ts +4 -5
  90. package/types/apps/src/graphql.d.ts +1 -3
  91. package/types/apps/src/host.d.ts +5 -0
  92. package/types/apps/src/implementation/account-router.d.ts +13 -0
  93. package/types/apps/src/implementation/app.d.ts +5 -4
  94. package/types/apps/src/implementation/authoring.d.ts +25 -5
  95. package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
  96. package/types/apps/src/implementation/cache.d.ts +4 -0
  97. package/types/apps/src/implementation/catalog-cache.d.ts +43 -5
  98. package/types/apps/src/implementation/elicitation.d.ts +18 -15
  99. package/types/apps/src/implementation/events.d.ts +59 -0
  100. package/types/apps/src/implementation/failure-detail.d.ts +25 -3
  101. package/types/apps/src/implementation/graphql-catalog.d.ts +4 -7
  102. package/types/apps/src/implementation/graphql.d.ts +4 -3
  103. package/types/apps/src/implementation/input-problems.d.ts +6 -2
  104. package/types/apps/src/implementation/invocation-timing.d.ts +16 -0
  105. package/types/apps/src/implementation/live.d.ts +2 -2
  106. package/types/apps/src/implementation/mcp-call.d.ts +6 -5
  107. package/types/apps/src/implementation/mcp-catalog.d.ts +7 -8
  108. package/types/apps/src/implementation/mcp-client.d.ts +49 -25
  109. package/types/apps/src/implementation/mcp-stdio.d.ts +1 -1
  110. package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
  111. package/types/apps/src/implementation/mcp.d.ts +52 -25
  112. package/types/apps/src/implementation/network.d.ts +16 -0
  113. package/types/apps/src/implementation/openapi-compile.d.ts +27 -6
  114. package/types/apps/src/implementation/openapi-document.d.ts +46 -19
  115. package/types/apps/src/implementation/openapi-names.d.ts +9 -4
  116. package/types/apps/src/implementation/openapi-request.d.ts +10 -2
  117. package/types/apps/src/implementation/openapi-source.d.ts +8 -6
  118. package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
  119. package/types/apps/src/implementation/operations.d.ts +43 -5
  120. package/types/apps/src/implementation/optimistic.d.ts +1 -1
  121. package/types/apps/src/implementation/protocol-operations.d.ts +6 -4
  122. package/types/apps/src/implementation/provider-error.d.ts +28 -1
  123. package/types/apps/src/implementation/provider.d.ts +19 -5
  124. package/types/apps/src/implementation/query-commit.d.ts +1 -1
  125. package/types/apps/src/implementation/router-catalog.d.ts +223 -0
  126. package/types/apps/src/implementation/router.d.ts +70 -0
  127. package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
  128. package/types/apps/src/implementation/schema.d.ts +95 -11
  129. package/types/apps/src/implementation/skills.d.ts +18 -24
  130. package/types/apps/src/implementation/sql.d.ts +71 -0
  131. package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
  132. package/types/apps/src/implementation/ui-auth.d.ts +1 -1
  133. package/types/apps/src/implementation/ui-client.d.ts +2 -2
  134. package/types/apps/src/implementation/ui-document.d.ts +5 -0
  135. package/types/apps/src/implementation/ui-errors.d.ts +1 -1
  136. package/types/apps/src/implementation/ui-serving.d.ts +11 -5
  137. package/types/apps/src/implementation/ui-watch.d.ts +1 -1
  138. package/types/apps/src/implementation/upstream-error.d.ts +7 -0
  139. package/types/apps/src/implementation/webhooks.d.ts +1 -1
  140. package/types/apps/src/implementation/workflow-context.d.ts +1 -1
  141. package/types/apps/src/implementation/workflows.d.ts +1 -1
  142. package/types/apps/src/index.d.ts +32 -13
  143. package/types/apps/src/mcp-stdio.d.ts +2 -5
  144. package/types/apps/src/mcp.d.ts +25 -5
  145. package/types/apps/src/openapi.d.ts +6 -6
  146. package/types/apps/src/react.d.ts +1 -1
  147. package/types/apps/src/skills.d.ts +10 -8
  148. package/types/telemetry/src/app-records.d.ts +42 -0
  149. package/types/telemetry/src/browser-operations.d.ts +7 -4
  150. package/types/telemetry/src/browser.d.ts +8 -3
  151. package/types/telemetry/src/config.d.ts +2 -2
  152. package/types/telemetry/src/index.d.ts +1 -0
  153. package/types/telemetry/src/layer.d.ts +2 -2
  154. package/types/telemetry/src/ownership.d.ts +56 -0
  155. package/types/telemetry/src/recorded-failure.d.ts +29 -0
  156. package/types/telemetry/src/relay.d.ts +2 -2
  157. package/types/telemetry/src/transport.d.ts +8 -1
  158. package/types/utils/src/api-error.d.ts +55 -0
  159. package/types/utils/src/connection-failure.d.ts +33 -0
  160. package/types/utils/src/recorded-message.d.ts +18 -0
  161. package/types/utils/src/user-facing-error.d.ts +83 -0
  162. package/js/chunk-3XKZDQLM.js +0 -93
  163. package/js/chunk-4M277YTM.js +0 -136
  164. package/js/chunk-67EVWIGJ.js +0 -224
  165. package/js/chunk-C3VAOK5B.js +0 -215
  166. package/js/chunk-DQAZTA4I.js +0 -2375
  167. package/js/chunk-G7T27IWB.js +0 -63
  168. package/js/chunk-LUVSFETN.js +0 -1347
  169. package/js/chunk-N7YDVXYJ.js +0 -186
  170. package/js/chunk-PJJ24GU7.js +0 -877
  171. package/js/chunk-PZB6T6KU.js +0 -19
  172. package/js/chunk-SB3V4YVR.js +0 -18
  173. package/js/chunk-TDNYXSIX.js +0 -29
  174. package/js/chunk-W4DMKWAB.js +0 -35
  175. package/js/chunk-YEPYT6SD.js +0 -85
  176. package/js/chunk-ZQINWV4W.js +0 -630
  177. package/types/app-data/src/implementation/cursor.d.ts +0 -10
  178. package/types/app-data/src/implementation/index-key.d.ts +0 -7
  179. package/types/app-data/src/implementation/promise.d.ts +0 -68
  180. package/types/app-data/src/implementation/range.d.ts +0 -8
  181. package/types/app-data/src/implementation/schema.d.ts +0 -18
  182. package/types/app-data/src/implementation/sqlite.d.ts +0 -11
  183. package/types/app-data/src/index.d.ts +0 -4
  184. package/types/apps/src/contracts/dynamic-tools.d.ts +0 -13
  185. package/types/apps/src/contracts/storage.d.ts +0 -68
  186. package/types/apps/src/implementation/account-operations.d.ts +0 -151
  187. package/types/apps/src/implementation/dynamic-tools.d.ts +0 -8
  188. package/types/apps/src/implementation/storage.d.ts +0 -15
package/README.md CHANGED
@@ -11,22 +11,22 @@ For local testing, install the tarball made by `bun run pack` in this directory.
11
11
 
12
12
  ```ts
13
13
  import { defineApp } from "apps";
14
- import { mcpOperations } from "apps/mcp";
14
+ import { mcpRouter } from "apps/mcp";
15
15
 
16
16
  export default defineApp({ accounts: {} }, async ({ signal }) => ({
17
- ...(await mcpOperations({
17
+ tools: await mcpRouter({
18
18
  url: "https://mcp.deepwiki.com/mcp",
19
19
  ...(signal === undefined ? {} : { signal }),
20
- })),
20
+ }),
21
21
  }));
22
22
  ```
23
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 |
24
+ | Import | Helper | App dependency |
25
+ | ---------------- | ------------------------ | --------------------------- |
26
+ | `apps/mcp` | `mcpRouter`, `mcpHealth` | `@modelcontextprotocol/sdk` |
27
+ | `apps/mcp/stdio` | `stdioRouter` | `@modelcontextprotocol/sdk` |
28
+ | `apps/graphql` | `graphqlRouter` | `graphql` |
29
+ | `apps/openapi` | `openapiRouter` | None |
30
30
 
31
31
  MCP and GraphQL are optional peers. Subpath imports isolate their module graphs;
32
32
  optional peers keep unused libraries out of the dependency installation. The
@@ -43,18 +43,19 @@ Declare the needed peer in the deployed app's `package.json`, for example:
43
43
  ```
44
44
 
45
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.
46
+ then retain the executable Worker modules. Every app declares the exact `apps`
47
+ version in `package.json`; it selects the framework for both server and browser
48
+ code and keeps rebuilds repeatable. A build without it fails and names the
49
+ version the host ships.
49
50
  In this repository, playground workspaces use `"apps": "workspace:*"` for development;
50
51
  replace that workspace reference with a released version before deployment.
51
52
 
52
- `liveOpenapiOperations` reads an OpenAPI document through `ctx.cache`. Generated
53
+ `liveOpenapiRouter` reads an OpenAPI document through `ctx.cache`. Generated
53
54
  imports retain a source URL, allowed origin, and static credential bindings in
54
55
  `openapi.json`. The framework compiles a revision on a cache miss. It writes each
55
56
  operation and shared schema before publishing the current revision. A warm call
56
57
  reads that revision and the requested operation's schema dependencies. It does
57
- not download, parse, or read the full catalog. `openapiOperations` remains the
58
+ not download, parse, or read the full catalog. `openapiRouter` remains the
58
59
  lower-level helper for already normalized metadata.
59
60
  `parameterDefaults` binds path, query or header values to the selected account.
60
61
  Those parameters become optional and publish their value as the schema `default`;
@@ -68,25 +69,30 @@ Accounts bind at execution time. Live documents cannot change credential
68
69
  placement or send credentials to another origin. Editing generated source and
69
70
  redeploying is required to change those static choices.
70
71
 
71
- Authenticated templates use `provider.many()` and `accountOperations` from `apps`:
72
+ Authenticated templates use `provider.many()` and `accountRouter` from `apps`:
72
73
 
73
74
  ```ts
74
- export default defineApp({ accounts: { service: provider.many() } }, async ({ accounts, signal }) =>
75
- accountOperations(
76
- accounts.service,
77
- (account) =>
78
- mcpOperations({
79
- url: "https://example.com/mcp",
80
- headers: { Authorization: "Bearer " + account.fields.token },
81
- signal,
82
- }),
83
- { signal },
84
- ),
75
+ export default defineApp(
76
+ { accounts: { service: provider.many() } },
77
+ async ({ accounts, signal }) => ({
78
+ tools: await accountRouter(
79
+ accounts.service,
80
+ (account) =>
81
+ mcpRouter({
82
+ url: "https://example.com/mcp",
83
+ account,
84
+ headers: { Authorization: "Bearer " + account.fields.token },
85
+ signal,
86
+ }),
87
+ { signal },
88
+ ),
89
+ }),
85
90
  );
86
91
  ```
87
92
 
88
- MCP and GraphQL helpers accept `cache: ctx.cache.forAccount(account)` (or
89
- `ctx.cache` for a public source). They return `{ dynamicTools }`, cache remote
93
+ MCP and GraphQL helpers take the account their headers come from, and accept
94
+ `cache: ctx.cache`; an account's catalog is kept in that account's scope and
95
+ credentials never enter its key. They return a dynamic router, cache remote
90
96
  metadata, and compile only the selected tool. The defaults are five minutes fresh
91
97
  plus five minutes stale. Use `freshFor` / `staleFor` to change the windows, or
92
98
  `revalidate: true` to await a refresh. Tool results are never cached.
@@ -171,7 +177,7 @@ and [hosting notes](../../notes/app-ui.md).
171
177
 
172
178
  ## Webhooks
173
179
 
174
- Expose `webhooks: { issueOpened }` beside queries and mutations. Each definition
180
+ Expose `webhooks: { issueOpened }` beside `tools`. Each definition
175
181
  has an `account` requirement, `config` and `state` schemas, and async `register`,
176
182
  `handle`, and `unregister` callbacks. Register and unregister must be idempotent;
177
183
  handle must verify the provider signature before acting.
@@ -243,39 +249,57 @@ errors are explicit. Background refreshes have a 30-second deadline.
243
249
  bounded JSON batches with a retention duration. These support immutable pieces
244
250
  that must be stored before a manifest becomes visible.
245
251
 
246
- `dynamicTools({ list, resolve })` separates descriptions from executable
247
- operations. `list()` returns tool metadata with qualified names such as
248
- `queries.getProject`. `resolve(name)` returns a query/mutation declaration or
249
- `undefined`. The host validates input and applies approval policy after resolving
250
- an operation. `accountOperations` preserves this separation. Static operations
251
- can run without resolving the source; listings reject duplicate names.
252
-
253
- Assign the resolver to the app's `dynamicTools` field. The helper returns only
254
- `list` and `resolve`, never static query or mutation maps. Both static maps are
255
- optional, so an app can contain only dynamic tools.
252
+ ## Routers
253
+
254
+ An app's `tools` is a router. Keys form tool paths, and routers nest like tRPC's:
255
+ `router({ health, issues: router({ list, close }, { description }) })` exposes
256
+ `health`, `issues.list` and `issues.close`. Each query or mutation keeps its own
257
+ kind; names carry no `queries.` or `mutations.` prefix. Router options are
258
+ `title`, `description`, `instructions`, `icons` and `tags`. Instructions become a
259
+ skill named `tools` for the root router and `tools-<path>` below it, such as
260
+ `tools-issues`. Paths other than lowercase letters and digits get a slug and a
261
+ hash of the path, so names never collide. An authored skill with the same name
262
+ replaces the generated one. `router(source, options)` overrides a source's
263
+ metadata. Keys `__proto__`, `constructor` and `prototype` are reserved, and an
264
+ mutation can be mounted at only one path.
265
+
266
+ Protocol helpers return routers, so an app mounts several sources under keys.
267
+ `mcpRouter` takes its title, description, icons and instructions from the
268
+ server, and `liveOpenapiRouter` from the document's `info` and tags. `stdioRouter`,
269
+ `openapiRouter` and `graphqlRouter` carry no source metadata. A nested router that fails to load is reported on its own catalog entry;
270
+ the app's other tools still load. The root failing fails discovery.
271
+
272
+ `dynamicRouter({ list, resolve })` separates descriptions from executable
273
+ operations. `list()` returns tool metadata with names relative to the router,
274
+ such as `getProject`; names may contain dots. `resolve(name)` returns a
275
+ query/mutation declaration or `undefined`. The host validates input and applies
276
+ approval policy after resolving an operation. `accountRouter` preserves this
277
+ separation. Static operations run without resolving a source; listings reject
278
+ duplicate names.
256
279
 
257
280
  ```ts
258
281
  export default defineApp(
259
282
  { accounts: {} },
260
283
  {
261
- dynamicTools: dynamicTools({
284
+ tools: dynamicRouter({
262
285
  list: async () => [
263
286
  {
264
- name: "queries.ping",
287
+ name: "ping",
265
288
  description: "Return pong",
266
289
  inputSchema: { type: "object", properties: {} },
267
290
  readOnly: true,
268
291
  },
269
292
  ],
270
293
  resolve: async (name) =>
271
- name === "queries.ping" ? query({ input: object({}) }, async () => "pong") : undefined,
294
+ name === "ping" ? query({ input: object({}) }, async () => "pong") : undefined,
272
295
  }),
273
296
  },
274
297
  );
275
298
  ```
276
299
 
277
- Names include `queries.` or `mutations.`. `list` describes available tools;
278
- `resolve` returns the matching query or mutation declaration.
300
+ Mark queries with `readOnly: true`; other listed tools are mutations. `list`
301
+ describes available tools; `resolve` returns the matching declaration. An
302
+ optional `meta()` returns the router's title, description and instructions.
279
303
 
280
304
  `ctx.cache.revalidate(options)` takes the same options as `get`, but always
281
305
  awaits a refresh. Concurrent refreshes share a load. The previous value stays