apps 0.0.1-beta.10 → 0.0.1-beta.100

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 (195) hide show
  1. package/README.md +60 -42
  2. package/framework-reference.json +1 -1
  3. package/js/{chunk-Z5M2LQOZ.js → chunk-2CURR5Y7.js} +113 -58
  4. package/js/{chunk-72JNVHPK.js → chunk-2LSGC7XY.js} +4 -3
  5. package/js/{chunk-JU7VHODU.js → chunk-4PIQKACY.js} +65 -10
  6. package/js/chunk-4UPC36ZL.js +5185 -0
  7. package/js/{chunk-VFZKSM3T.js → chunk-4X2UI4R2.js} +3 -3
  8. package/js/chunk-5C6RAGAS.js +335 -0
  9. package/js/{chunk-KUMBKVJD.js → chunk-62NVUKED.js} +2 -2
  10. package/js/chunk-74H25C4X.js +95 -0
  11. package/js/chunk-7HG422GB.js +90 -0
  12. package/js/chunk-7STIP5CS.js +171 -0
  13. package/js/{chunk-UK573G7W.js → chunk-ACQXVKVQ.js} +87 -51
  14. package/js/{chunk-IJX4CYZO.js → chunk-DILSCQPJ.js} +228 -264
  15. package/js/chunk-ILYCJ3HV.js +449 -0
  16. package/js/chunk-K6TSCYAO.js +712 -0
  17. package/js/{chunk-M3B3DE4K.js → chunk-KLSEU35Y.js} +463 -218
  18. package/js/chunk-OD3KFKZD.js +1617 -0
  19. package/js/chunk-OWN3DP2W.js +88 -0
  20. package/js/{chunk-IPI4MFSN.js → chunk-PBGPES67.js} +2 -2
  21. package/js/{chunk-FL2QR3XW.js → chunk-QI66R4FP.js} +355 -76
  22. package/js/{chunk-V5KNQVCT.js → chunk-RN4YB4JT.js} +931 -289
  23. package/js/{chunk-ODEIDRGW.js → chunk-URKOTNDA.js} +795 -176
  24. package/js/{chunk-5T57N25Q.js → chunk-VAI3EVCS.js} +643 -69
  25. package/js/chunk-VCYWAA4N.js +49 -0
  26. package/js/{chunk-57RKNWL2.js → chunk-YDW7DX3A.js} +4 -4
  27. package/js/{chunk-RFVIONFX.js → chunk-YWVISRZD.js} +123 -44
  28. package/js/{chunk-CDL5PM2Q.js → chunk-ZKDXML77.js} +19239 -18404
  29. package/js/client.js +148 -84
  30. package/js/contracts.js +150 -21
  31. package/js/effect.js +18 -19
  32. package/js/{es-APDZKREY.js → es-DIULA3ZF.js} +62 -1659
  33. package/js/graphql.js +49 -40
  34. package/js/host.js +85 -62
  35. package/js/index.js +212 -98
  36. package/js/mcp/effect.js +21 -21
  37. package/js/mcp.js +84 -57
  38. package/js/openapi.js +4189 -1411
  39. package/js/react.js +2 -3
  40. package/js/skills/effect.js +6 -3
  41. package/js/skills.js +208 -81
  42. package/js/storage/facet.js +1 -540
  43. package/js/ui/auth/contracts.js +2 -2
  44. package/js/ui/auth.js +5 -5
  45. package/js/ui/contracts.js +9 -8
  46. package/js/ui/serving.js +8609 -228
  47. package/package.json +3 -8
  48. package/runtime.json +1 -1
  49. package/types/app-cache/src/contracts/cache.d.ts +18 -0
  50. package/types/app-cache/src/index.d.ts +34 -2
  51. package/types/apps/src/contracts/api-response-error.d.ts +4 -0
  52. package/types/apps/src/contracts/app.d.ts +56 -11
  53. package/types/apps/src/contracts/cache.d.ts +20 -0
  54. package/types/apps/src/contracts/context.d.ts +60 -17
  55. package/types/apps/src/contracts/elicitation.d.ts +23 -7
  56. package/types/apps/src/contracts/events.d.ts +94 -0
  57. package/types/apps/src/contracts/failure.d.ts +30 -1
  58. package/types/apps/src/contracts/graphql.d.ts +2 -1
  59. package/types/apps/src/contracts/host.d.ts +1456 -20
  60. package/types/apps/src/contracts/icons.d.ts +28 -0
  61. package/types/apps/src/contracts/live.d.ts +2 -0
  62. package/types/apps/src/contracts/mcp.d.ts +81 -20
  63. package/types/apps/src/contracts/network.d.ts +120 -0
  64. package/types/apps/src/contracts/openapi-compile.d.ts +82 -3
  65. package/types/apps/src/contracts/openapi-document.d.ts +1 -1
  66. package/types/apps/src/contracts/openapi.d.ts +41 -9
  67. package/types/apps/src/contracts/operations.d.ts +14 -7
  68. package/types/apps/src/contracts/placement.d.ts +102 -0
  69. package/types/apps/src/contracts/protocol-version.d.ts +2 -2
  70. package/types/apps/src/contracts/protocols/1.d.ts +733 -81
  71. package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
  72. package/types/apps/src/contracts/protocols/11.d.ts +1149 -0
  73. package/types/apps/src/contracts/protocols/12.d.ts +3310 -0
  74. package/types/apps/src/contracts/protocols/2.d.ts +69 -26
  75. package/types/apps/src/contracts/protocols/3.d.ts +133 -33
  76. package/types/apps/src/contracts/protocols/4.d.ts +122 -45
  77. package/types/apps/src/contracts/protocols/5.d.ts +157 -47
  78. package/types/apps/src/contracts/protocols/6.d.ts +1629 -0
  79. package/types/apps/src/contracts/protocols/7.d.ts +1785 -0
  80. package/types/apps/src/contracts/protocols/8.d.ts +1182 -0
  81. package/types/apps/src/contracts/protocols/9.d.ts +1104 -0
  82. package/types/apps/src/contracts/protocols/current.d.ts +6857 -0
  83. package/types/apps/src/contracts/protocols/oauth-6.d.ts +74 -0
  84. package/types/apps/src/contracts/protocols/oauth.d.ts +134 -0
  85. package/types/apps/src/contracts/provider-error.d.ts +9 -0
  86. package/types/apps/src/contracts/provider.d.ts +90 -6
  87. package/types/apps/src/contracts/schedules.d.ts +7 -1
  88. package/types/apps/src/contracts/schema.d.ts +21 -0
  89. package/types/apps/src/contracts/shared-catalog.d.ts +11 -0
  90. package/types/apps/src/contracts/skills.d.ts +50 -13
  91. package/types/apps/src/contracts/sql.d.ts +63 -0
  92. package/types/apps/src/contracts/ui.d.ts +70 -30
  93. package/types/apps/src/contracts/webhooks.d.ts +24 -7
  94. package/types/apps/src/contracts/workflows.d.ts +56 -34
  95. package/types/apps/src/facet.d.ts +4 -5
  96. package/types/apps/src/host.d.ts +5 -0
  97. package/types/apps/src/implementation/account-router.d.ts +4 -3
  98. package/types/apps/src/implementation/app.d.ts +41 -14
  99. package/types/apps/src/implementation/authoring.d.ts +25 -5
  100. package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
  101. package/types/apps/src/implementation/cache.d.ts +29 -2
  102. package/types/apps/src/implementation/catalog-cache.d.ts +35 -4
  103. package/types/apps/src/implementation/elicitation.d.ts +18 -15
  104. package/types/apps/src/implementation/events.d.ts +64 -0
  105. package/types/apps/src/implementation/failure-detail.d.ts +28 -5
  106. package/types/apps/src/implementation/graphql-catalog.d.ts +3 -3
  107. package/types/apps/src/implementation/graphql.d.ts +4 -3
  108. package/types/apps/src/implementation/input-problems.d.ts +6 -2
  109. package/types/apps/src/implementation/invocation-timing.d.ts +18 -0
  110. package/types/apps/src/implementation/live.d.ts +2 -2
  111. package/types/apps/src/implementation/mcp-call.d.ts +6 -5
  112. package/types/apps/src/implementation/mcp-catalog.d.ts +6 -4
  113. package/types/apps/src/implementation/mcp-client.d.ts +17 -9
  114. package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
  115. package/types/apps/src/implementation/mcp.d.ts +20 -9
  116. package/types/apps/src/implementation/network.d.ts +16 -0
  117. package/types/apps/src/implementation/openapi-compile.d.ts +28 -7
  118. package/types/apps/src/implementation/openapi-document.d.ts +46 -19
  119. package/types/apps/src/implementation/openapi-names.d.ts +9 -4
  120. package/types/apps/src/implementation/openapi-request.d.ts +10 -2
  121. package/types/apps/src/implementation/openapi-source.d.ts +23 -1
  122. package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
  123. package/types/apps/src/implementation/operations.d.ts +58 -7
  124. package/types/apps/src/implementation/optimistic.d.ts +1 -1
  125. package/types/apps/src/implementation/placement.d.ts +60 -0
  126. package/types/apps/src/implementation/protocol-operations.d.ts +3 -0
  127. package/types/apps/src/implementation/provider-error.d.ts +28 -1
  128. package/types/apps/src/implementation/provider.d.ts +19 -4
  129. package/types/apps/src/implementation/query-commit.d.ts +1 -1
  130. package/types/apps/src/implementation/router-catalog.d.ts +20 -18
  131. package/types/apps/src/implementation/router.d.ts +24 -5
  132. package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
  133. package/types/apps/src/implementation/schedules.d.ts +39 -8
  134. package/types/apps/src/implementation/schema.d.ts +108 -11
  135. package/types/apps/src/implementation/skills.d.ts +18 -24
  136. package/types/apps/src/implementation/sql.d.ts +71 -0
  137. package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
  138. package/types/apps/src/implementation/ui-auth.d.ts +1 -1
  139. package/types/apps/src/implementation/ui-client.d.ts +3 -3
  140. package/types/apps/src/implementation/ui-document.d.ts +5 -0
  141. package/types/apps/src/implementation/ui-errors.d.ts +1 -1
  142. package/types/apps/src/implementation/ui-serving.d.ts +28 -11
  143. package/types/apps/src/implementation/ui-watch.d.ts +1 -1
  144. package/types/apps/src/implementation/upstream-error.d.ts +7 -0
  145. package/types/apps/src/implementation/webhooks.d.ts +15 -6
  146. package/types/apps/src/implementation/workflow-context.d.ts +6 -2
  147. package/types/apps/src/implementation/workflows.d.ts +11 -4
  148. package/types/apps/src/index.d.ts +68 -19
  149. package/types/apps/src/mcp.d.ts +20 -1
  150. package/types/apps/src/openapi.d.ts +6 -1
  151. package/types/apps/src/react.d.ts +1 -1
  152. package/types/apps/src/skills.d.ts +10 -8
  153. package/types/apps/src/ui-serving.d.ts +1 -1
  154. package/types/telemetry/src/app-records.d.ts +42 -0
  155. package/types/telemetry/src/browser-operations.d.ts +2 -2
  156. package/types/telemetry/src/browser.d.ts +8 -3
  157. package/types/telemetry/src/config.d.ts +2 -2
  158. package/types/telemetry/src/index.d.ts +2 -1
  159. package/types/telemetry/src/layer.d.ts +10 -4
  160. package/types/telemetry/src/measurements.d.ts +1 -1
  161. package/types/telemetry/src/ownership.d.ts +60 -0
  162. package/types/telemetry/src/recorded-failure.d.ts +29 -0
  163. package/types/telemetry/src/relay.d.ts +16 -6
  164. package/types/telemetry/src/span-attributes.d.ts +17 -1
  165. package/types/telemetry/src/transport.d.ts +8 -1
  166. package/types/utils/src/api-error.d.ts +55 -0
  167. package/types/utils/src/connection-failure.d.ts +33 -0
  168. package/types/utils/src/legacy-keys.d.ts +20 -0
  169. package/types/utils/src/recorded-message.d.ts +18 -0
  170. package/types/utils/src/schema-definitions.d.ts +13 -0
  171. package/types/utils/src/user-facing-error.d.ts +83 -0
  172. package/js/chunk-27F7W2LG.js +0 -34
  173. package/js/chunk-CRDWFA74.js +0 -299
  174. package/js/chunk-EPT3ZP52.js +0 -224
  175. package/js/chunk-MKWZPDR6.js +0 -63
  176. package/js/chunk-N7YDVXYJ.js +0 -186
  177. package/js/chunk-NKLWZJLE.js +0 -172
  178. package/js/chunk-PJJ24GU7.js +0 -877
  179. package/js/chunk-PZB6T6KU.js +0 -19
  180. package/js/chunk-R3EV5FTO.js +0 -97
  181. package/js/chunk-WLE7WX2U.js +0 -2645
  182. package/js/chunk-YXQHV65J.js +0 -242
  183. package/js/chunk-ZQINWV4W.js +0 -630
  184. package/js/mcp/stdio.js +0 -128
  185. package/types/app-data/src/implementation/cursor.d.ts +0 -10
  186. package/types/app-data/src/implementation/index-key.d.ts +0 -7
  187. package/types/app-data/src/implementation/promise.d.ts +0 -68
  188. package/types/app-data/src/implementation/range.d.ts +0 -8
  189. package/types/app-data/src/implementation/schema.d.ts +0 -18
  190. package/types/app-data/src/implementation/sqlite.d.ts +0 -11
  191. package/types/app-data/src/index.d.ts +0 -4
  192. package/types/apps/src/contracts/storage.d.ts +0 -68
  193. package/types/apps/src/implementation/mcp-stdio.d.ts +0 -4
  194. package/types/apps/src/implementation/storage.d.ts +0 -15
  195. package/types/apps/src/mcp-stdio.d.ts +0 -5
@@ -0,0 +1,49 @@
1
+ import {
2
+ FetchOptionUnsupported,
3
+ NetworkRefusedHeader,
4
+ RestrictedFetchOption,
5
+ networkRefusalHeader,
6
+ networkRefusalStatus,
7
+ supportedFetchOptions
8
+ } from "./chunk-4UPC36ZL.js";
9
+ import {
10
+ invocationFetch
11
+ } from "./chunk-URKOTNDA.js";
12
+ import {
13
+ Effect_exports,
14
+ Schema_exports
15
+ } from "./chunk-ZKDXML77.js";
16
+
17
+ // src/implementation/network.ts
18
+ var refusalHeader = (status, header) => status === networkRefusalStatus && header !== null && header !== void 0 ? header : void 0;
19
+ var failOnNetworkRefusal = (response) => {
20
+ const header = refusalHeader(response.status, response.headers[networkRefusalHeader]);
21
+ return header === void 0 ? Effect_exports.void : Schema_exports.decodeUnknownEffect(NetworkRefusedHeader)(header).pipe(
22
+ Effect_exports.orDie,
23
+ Effect_exports.flatMap(Effect_exports.fail)
24
+ );
25
+ };
26
+ var unsupportedOption = (init) => {
27
+ for (const option of RestrictedFetchOption.literals) {
28
+ const value = init?.[option];
29
+ const supported = supportedFetchOptions[option];
30
+ if (value !== void 0 && !supported.includes(value))
31
+ return new FetchOptionUnsupported({ option, value: String(value), supported });
32
+ }
33
+ return void 0;
34
+ };
35
+ var appFetch = (fetch) => async (input, init) => {
36
+ const unsupported = unsupportedOption(init);
37
+ if (unsupported !== void 0) throw unsupported;
38
+ const response = await fetch(input, init);
39
+ const header = refusalHeader(response.status, response.headers.get(networkRefusalHeader));
40
+ if (header === void 0) return response;
41
+ await response.body?.cancel();
42
+ throw Schema_exports.decodeUnknownSync(NetworkRefusedHeader)(header);
43
+ };
44
+ var appInvocationFetch = (signal) => invocationFetch(signal).pipe(Effect_exports.map(appFetch));
45
+
46
+ export {
47
+ failOnNetworkRefusal,
48
+ appInvocationFetch
49
+ };
@@ -4,7 +4,7 @@ import {
4
4
  fromWeb,
5
5
  layerMergedContext,
6
6
  make2 as make
7
- } from "./chunk-UK573G7W.js";
7
+ } from "./chunk-ACQXVKVQ.js";
8
8
  import {
9
9
  Reference,
10
10
  Service,
@@ -13,16 +13,16 @@ import {
13
13
  getOrUndefined2 as getOrUndefined,
14
14
  map3 as map,
15
15
  merge3 as merge,
16
- remove3 as remove,
16
+ remove2 as remove,
17
17
  succeed4 as succeed,
18
18
  toReadableStreamEffect,
19
19
  tryPromise
20
- } from "./chunk-CDL5PM2Q.js";
20
+ } from "./chunk-ZKDXML77.js";
21
21
  import {
22
22
  __export
23
23
  } from "./chunk-CZ7CSFO4.js";
24
24
 
25
- // ../../node_modules/.bun/effect@https+++pkg.pr.new+Effect-TS+effect+effect@c7d1ffff31a3e2ae0b0b+a654a55b752bdb24/node_modules/effect/dist/unstable/http/FetchHttpClient.js
25
+ // ../../node_modules/.bun/effect@4.0.1/node_modules/effect/dist/http/FetchHttpClient.js
26
26
  var FetchHttpClient_exports = {};
27
27
  __export(FetchHttpClient_exports, {
28
28
  Fetch: () => Fetch,
@@ -1,27 +1,56 @@
1
+ import {
2
+ getWithReads
3
+ } from "./chunk-5C6RAGAS.js";
4
+ import {
5
+ fromPromise,
6
+ method,
7
+ toPromise
8
+ } from "./chunk-7STIP5CS.js";
1
9
  import {
2
10
  CacheError
3
- } from "./chunk-R3EV5FTO.js";
11
+ } from "./chunk-4UPC36ZL.js";
4
12
  import {
5
13
  wrap
6
- } from "./chunk-5T57N25Q.js";
14
+ } from "./chunk-VAI3EVCS.js";
7
15
  import {
8
16
  JsonObject
9
- } from "./chunk-27F7W2LG.js";
17
+ } from "./chunk-7HG422GB.js";
10
18
  import {
19
+ Deferred_exports,
11
20
  Duration_exports,
12
21
  Effect_exports,
22
+ Exit_exports,
13
23
  Schema_exports
14
- } from "./chunk-CDL5PM2Q.js";
24
+ } from "./chunk-ZKDXML77.js";
15
25
 
16
26
  // src/implementation/catalog-cache.ts
27
+ var catalogScope = (options, credential, invalid) => {
28
+ const { account, cache } = options;
29
+ if (account === void 0)
30
+ return credential === void 0 ? Effect_exports.succeed(cache) : Effect_exports.fail(invalid("missing-account"));
31
+ if (cache === void 0) return Effect_exports.succeed(void 0);
32
+ return Effect_exports.try({
33
+ try: () => cache.forAccount(account),
34
+ catch: () => invalid("unselected-account")
35
+ });
36
+ };
17
37
  var schema = (decoder) => wrap(decoder, false);
38
+ var seenRevisions = /* @__PURE__ */ new Map();
39
+ var seenLimit = 256;
40
+ var seen = (key, revision) => {
41
+ seenRevisions.delete(key);
42
+ seenRevisions.set(key, revision);
43
+ if (seenRevisions.size > seenLimit) {
44
+ const oldest = seenRevisions.keys().next();
45
+ if (oldest.done !== true) seenRevisions.delete(oldest.value);
46
+ }
47
+ };
18
48
  var Manifest = Schema_exports.Struct({
19
49
  revision: Schema_exports.String,
20
50
  pages: Schema_exports.Int,
21
51
  summaries: Schema_exports.Int,
22
52
  header: Schema_exports.optionalKey(JsonObject)
23
53
  });
24
- var invoke = (work) => Effect_exports.tryPromise({ try: work, catch: (error) => error });
25
54
  var catalogCache = (options) => Effect_exports.gen(function* () {
26
55
  const cache = options.cache;
27
56
  const key = [...options.prefix, "current"];
@@ -35,14 +64,42 @@ var catalogCache = (options) => Effect_exports.gen(function* () {
35
64
  const staleFor = options.staleFor ?? "1 day";
36
65
  const retention = Duration_exports.toMillis(Duration_exports.fromInputUnsafe(freshFor)) + Duration_exports.toMillis(Duration_exports.fromInputUnsafe(staleFor)) + 3e5;
37
66
  const local = yield* Effect_exports.cached(options.load());
67
+ const pages = (cache2, revision, kind, count, decoder) => Effect_exports.gen(function* () {
68
+ const batches = yield* Effect_exports.forEach(
69
+ Array.from({ length: Math.ceil(count / 4) }, (_, batch) => batch * 4),
70
+ (offset) => fromPromise(method(cache2, "readMany"), "cache")(
71
+ Array.from(
72
+ { length: Math.min(4, count - offset) },
73
+ (_, index) => part(revision, kind, offset + index)
74
+ ),
75
+ schema(Schema_exports.Array(decoder))
76
+ ),
77
+ { concurrency: "unbounded" }
78
+ );
79
+ const values = [];
80
+ for (const page of batches.flat()) {
81
+ if (page === void 0) return yield* new CacheError({ reason: "unavailable" });
82
+ values.push(...page);
83
+ }
84
+ return values;
85
+ });
86
+ const kept = (cache2) => fromPromise(method(cache2, "read"), "cache")(key, schema(Manifest)).pipe(
87
+ Effect_exports.map(
88
+ (manifest) => manifest === void 0 ? void 0 : {
89
+ header: manifest.header,
90
+ tools: pages(cache2, manifest.revision, "page", manifest.pages, options.schema)
91
+ }
92
+ )
93
+ );
38
94
  const refresh = (context) => Effect_exports.gen(function* () {
39
- const { tools, header } = yield* options.load(context);
40
- const digest = yield* invoke(
41
- () => crypto.subtle.digest(
95
+ const { tools, header } = yield* options.load(context, kept(context.cache));
96
+ const digest = yield* Effect_exports.tryPromise({
97
+ try: () => crypto.subtle.digest(
42
98
  "SHA-256",
43
99
  new TextEncoder().encode(JSON.stringify({ tools, header: header ?? null }))
44
- )
45
- );
100
+ ),
101
+ catch: (error) => error
102
+ });
46
103
  const revision = Array.from(
47
104
  new Uint8Array(digest),
48
105
  (byte) => byte.toString(16).padStart(2, "0")
@@ -62,7 +119,7 @@ var catalogCache = (options) => Effect_exports.gen(function* () {
62
119
  batch = [];
63
120
  batchBytes = 0;
64
121
  if (!entries.length) return Effect_exports.void;
65
- return invoke(() => context.cache.write(entries, retention)).pipe(
122
+ return fromPromise(method(context.cache, "write"), "cache")(entries, retention).pipe(
66
123
  Effect_exports.withSpan("app.cache.flush", {
67
124
  attributes: {
68
125
  "cache.flush.index": flushes++,
@@ -120,39 +177,54 @@ var catalogCache = (options) => Effect_exports.gen(function* () {
120
177
  schema: schema(Manifest),
121
178
  freshFor,
122
179
  staleFor,
123
- load: (context) => Effect_exports.runPromise(refresh(context), { signal: context.signal })
180
+ ...options.stale === void 0 ? {} : { stale: options.stale },
181
+ // A cache may call the loader as a Promise; its own signal cancels that load.
182
+ load: toPromise(refresh, (context) => context.signal)
124
183
  };
125
184
  let reading;
126
- const current = () => cache === void 0 ? Effect_exports.fail(new CacheError({ reason: "unavailable" })) : invoke(
127
- () => reading ??= cache.get(getOptions).finally(() => {
128
- reading = void 0;
129
- })
185
+ const read = (tool) => Effect_exports.suspend(
186
+ () => {
187
+ if (cache === void 0) return Effect_exports.fail(new CacheError({ reason: "unavailable" }));
188
+ const shared = reading;
189
+ if (shared !== void 0)
190
+ return Deferred_exports.await(shared).pipe(Effect_exports.map((manifest) => ({ manifest })));
191
+ const deferred = Deferred_exports.makeUnsafe();
192
+ reading = deferred;
193
+ const together = Object.hasOwn(cache, getWithReads) ? cache[getWithReads] : void 0;
194
+ let hinted;
195
+ const fetched = together === void 0 ? fromPromise(
196
+ method(cache, "get"),
197
+ "cache"
198
+ )(getOptions).pipe(Effect_exports.map((manifest) => ({ manifest }))) : fromPromise(method({ together }, "together"), "cache")(getOptions, (stored) => {
199
+ hinted = tool === void 0 ? void 0 : seenRevisions.get(stored);
200
+ return hinted === void 0 || tool === void 0 ? [] : [part(hinted, "tool", tool)];
201
+ }).pipe(
202
+ Effect_exports.map(({ value: manifest, key: stored, reads }) => {
203
+ seen(stored, manifest.revision);
204
+ return manifest.revision === hinted && reads !== void 0 ? { manifest, part: { value: reads[0] } } : { manifest };
205
+ })
206
+ );
207
+ return fetched.pipe(
208
+ Effect_exports.onExit(
209
+ (exit) => Effect_exports.sync(() => {
210
+ if (reading === deferred) reading = void 0;
211
+ }).pipe(
212
+ Effect_exports.andThen(
213
+ Deferred_exports.done(
214
+ deferred,
215
+ Exit_exports.map(exit, ({ manifest }) => manifest)
216
+ )
217
+ )
218
+ )
219
+ )
220
+ );
221
+ }
130
222
  );
223
+ const current = () => read().pipe(Effect_exports.map(({ manifest }) => manifest));
131
224
  if (options.revalidate) {
132
225
  if (cache === void 0) yield* local;
133
- else yield* invoke(() => cache.revalidate(getOptions));
226
+ else yield* fromPromise(method(cache, "revalidate"), "cache")(getOptions);
134
227
  }
135
- const pages = (cache2, revision, kind, count, decoder) => Effect_exports.gen(function* () {
136
- const batches = yield* Effect_exports.forEach(
137
- Array.from({ length: Math.ceil(count / 4) }, (_, batch) => batch * 4),
138
- (offset) => invoke(
139
- () => cache2.readMany(
140
- Array.from(
141
- { length: Math.min(4, count - offset) },
142
- (_, index) => part(revision, kind, offset + index)
143
- ),
144
- schema(Schema_exports.Array(decoder))
145
- )
146
- ),
147
- { concurrency: "unbounded" }
148
- );
149
- const values = [];
150
- for (const page of batches.flat()) {
151
- if (page === void 0) return yield* new CacheError({ reason: "unavailable" });
152
- values.push(...page);
153
- }
154
- return values;
155
- });
156
228
  const metadata = () => Effect_exports.gen(function* () {
157
229
  if (cache === void 0) return (yield* local).tools;
158
230
  const manifest = yield* current();
@@ -174,16 +246,23 @@ var catalogCache = (options) => Effect_exports.gen(function* () {
174
246
  options.summary.schema
175
247
  );
176
248
  }),
177
- resolve: (name) => cache === void 0 ? local.pipe(Effect_exports.map(({ tools }) => tools.find((tool) => tool.name === name))) : current().pipe(
178
- Effect_exports.flatMap(
179
- (manifest) => invoke(
180
- () => cache.read(part(manifest.revision, "tool", name), schema(options.schema))
181
- )
182
- )
249
+ resolve: (name) => cache === void 0 ? local.pipe(Effect_exports.map(({ tools }) => tools.find((tool) => tool.name === name))) : read(name).pipe(
250
+ Effect_exports.flatMap(({ manifest, part: found }) => {
251
+ const separately = fromPromise(method(cache, "read"), "cache")(
252
+ part(manifest.revision, "tool", name),
253
+ schema(options.schema)
254
+ );
255
+ if (found === void 0) return separately;
256
+ if (found.value === void 0) return Effect_exports.succeed(void 0);
257
+ return Schema_exports.decodeUnknownEffect(options.schema)(found.value).pipe(
258
+ Effect_exports.catch(() => separately)
259
+ );
260
+ })
183
261
  )
184
262
  };
185
263
  });
186
264
 
187
265
  export {
266
+ catalogScope,
188
267
  catalogCache
189
268
  };