apps 0.0.1-beta.1 → 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 (211) hide show
  1. package/README.md +112 -72
  2. package/framework-reference.json +1 -1
  3. package/js/browser-XIPJGLH2.js +65 -0
  4. package/js/chunk-2CURR5Y7.js +264 -0
  5. package/js/chunk-2LSGC7XY.js +42 -0
  6. package/js/{chunk-YEJOQEII.js → chunk-4PIQKACY.js} +65 -10
  7. package/js/chunk-4UPC36ZL.js +5185 -0
  8. package/js/{chunk-4LPG6RCH.js → chunk-4X2UI4R2.js} +7 -27
  9. package/js/chunk-5C6RAGAS.js +335 -0
  10. package/js/chunk-62NVUKED.js +39 -0
  11. package/js/chunk-74H25C4X.js +95 -0
  12. package/js/chunk-7HG422GB.js +90 -0
  13. package/js/chunk-7STIP5CS.js +171 -0
  14. package/js/{chunk-QKHR7BMF.js → chunk-ACQXVKVQ.js} +87 -51
  15. package/js/{chunk-OHRT55C4.js → chunk-DILSCQPJ.js} +226 -265
  16. package/js/chunk-ILYCJ3HV.js +449 -0
  17. package/js/chunk-K6TSCYAO.js +712 -0
  18. package/js/{chunk-EVJUVWN2.js → chunk-KLSEU35Y.js} +463 -218
  19. package/js/chunk-OD3KFKZD.js +1617 -0
  20. package/js/chunk-OWN3DP2W.js +88 -0
  21. package/js/{chunk-ZTFQHGEB.js → chunk-PBGPES67.js} +3 -5
  22. package/js/chunk-QI66R4FP.js +786 -0
  23. package/js/chunk-RN4YB4JT.js +1922 -0
  24. package/js/{chunk-ZCAMUXSG.js → chunk-URKOTNDA.js} +795 -177
  25. package/js/{chunk-NCYXZN2G.js → chunk-UVL56Z6E.js} +390 -23
  26. package/js/{chunk-2HHMABB6.js → chunk-VAI3EVCS.js} +700 -78
  27. package/js/chunk-VCYWAA4N.js +49 -0
  28. package/js/{chunk-HDJH3RPR.js → chunk-YDW7DX3A.js} +4 -4
  29. package/js/chunk-YWVISRZD.js +268 -0
  30. package/js/{chunk-FW5HBOIK.js → chunk-ZKDXML77.js} +19272 -18299
  31. package/js/client.js +148 -100
  32. package/js/contracts.js +208 -24
  33. package/js/effect.js +18 -19
  34. package/js/es-DIULA3ZF.js +39371 -0
  35. package/js/graphql.js +62 -58
  36. package/js/host.js +83 -60
  37. package/js/index.js +381 -263
  38. package/js/mcp/effect.js +21 -21
  39. package/js/mcp.js +117 -74
  40. package/js/openapi.js +4613 -42691
  41. package/js/react.js +2 -3
  42. package/js/skills/effect.js +6 -4
  43. package/js/skills.js +233 -70
  44. package/js/storage/facet.js +1 -540
  45. package/js/ui/auth/contracts.js +8 -9
  46. package/js/ui/auth.js +16 -14
  47. package/js/ui/contracts.js +9 -8
  48. package/js/ui/serving.js +8609 -227
  49. package/package.json +3 -8
  50. package/runtime.json +1 -1
  51. package/types/app-cache/src/contracts/cache.d.ts +60 -2
  52. package/types/app-cache/src/index.d.ts +92 -2
  53. package/types/app-data/src/contracts/database.d.ts +33 -6
  54. package/types/apps/src/contracts/api-response-error.d.ts +4 -0
  55. package/types/apps/src/contracts/app.d.ts +63 -17
  56. package/types/apps/src/contracts/cache.d.ts +24 -1
  57. package/types/apps/src/contracts/context.d.ts +60 -17
  58. package/types/apps/src/contracts/elicitation.d.ts +23 -7
  59. package/types/apps/src/contracts/events.d.ts +94 -0
  60. package/types/apps/src/contracts/failure.d.ts +54 -0
  61. package/types/apps/src/contracts/graphql.d.ts +2 -1
  62. package/types/apps/src/contracts/host.d.ts +1325 -534
  63. package/types/apps/src/contracts/icons.d.ts +28 -0
  64. package/types/apps/src/contracts/live.d.ts +2 -0
  65. package/types/apps/src/contracts/mcp.d.ts +97 -20
  66. package/types/apps/src/contracts/network.d.ts +120 -0
  67. package/types/apps/src/contracts/openapi-compile.d.ts +82 -3
  68. package/types/apps/src/contracts/openapi-document.d.ts +1 -1
  69. package/types/apps/src/contracts/openapi.d.ts +51 -9
  70. package/types/apps/src/contracts/operations.d.ts +14 -12
  71. package/types/apps/src/contracts/placement.d.ts +102 -0
  72. package/types/apps/src/contracts/protocol-version.d.ts +6 -0
  73. package/types/apps/src/contracts/protocols/1.d.ts +2241 -0
  74. package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
  75. package/types/apps/src/contracts/protocols/11.d.ts +1149 -0
  76. package/types/apps/src/contracts/protocols/12.d.ts +3310 -0
  77. package/types/apps/src/contracts/protocols/2.d.ts +711 -0
  78. package/types/apps/src/contracts/protocols/3.d.ts +776 -0
  79. package/types/apps/src/contracts/protocols/4.d.ts +1306 -0
  80. package/types/apps/src/contracts/protocols/5.d.ts +1200 -0
  81. package/types/apps/src/contracts/protocols/6.d.ts +1629 -0
  82. package/types/apps/src/contracts/protocols/7.d.ts +1785 -0
  83. package/types/apps/src/contracts/protocols/8.d.ts +1182 -0
  84. package/types/apps/src/contracts/protocols/9.d.ts +1104 -0
  85. package/types/apps/src/contracts/protocols/current.d.ts +6857 -0
  86. package/types/apps/src/contracts/protocols/oauth-6.d.ts +74 -0
  87. package/types/apps/src/contracts/protocols/oauth.d.ts +134 -0
  88. package/types/apps/src/contracts/provider-error.d.ts +9 -0
  89. package/types/apps/src/contracts/provider.d.ts +140 -10
  90. package/types/apps/src/contracts/router.d.ts +59 -0
  91. package/types/apps/src/contracts/schedules.d.ts +7 -1
  92. package/types/apps/src/contracts/schema.d.ts +21 -0
  93. package/types/apps/src/contracts/shared-catalog.d.ts +11 -0
  94. package/types/apps/src/contracts/skills.d.ts +60 -14
  95. package/types/apps/src/contracts/sql.d.ts +63 -0
  96. package/types/apps/src/contracts/ui-auth.d.ts +6 -14
  97. package/types/apps/src/contracts/ui.d.ts +70 -30
  98. package/types/apps/src/contracts/webhooks.d.ts +24 -7
  99. package/types/apps/src/contracts/workflows.d.ts +89 -36
  100. package/types/apps/src/facet.d.ts +4 -5
  101. package/types/apps/src/graphql.d.ts +1 -3
  102. package/types/apps/src/host.d.ts +5 -0
  103. package/types/apps/src/implementation/account-router.d.ts +13 -0
  104. package/types/apps/src/implementation/app.d.ts +44 -16
  105. package/types/apps/src/implementation/authoring.d.ts +25 -5
  106. package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
  107. package/types/apps/src/implementation/cache.d.ts +32 -3
  108. package/types/apps/src/implementation/catalog-cache.d.ts +43 -5
  109. package/types/apps/src/implementation/elicitation.d.ts +18 -15
  110. package/types/apps/src/implementation/events.d.ts +64 -0
  111. package/types/apps/src/implementation/failure-detail.d.ts +48 -0
  112. package/types/apps/src/implementation/graphql-catalog.d.ts +4 -7
  113. package/types/apps/src/implementation/graphql.d.ts +4 -3
  114. package/types/apps/src/implementation/input-problems.d.ts +6 -2
  115. package/types/apps/src/implementation/invocation-timing.d.ts +18 -0
  116. package/types/apps/src/implementation/live.d.ts +2 -2
  117. package/types/apps/src/implementation/mcp-call.d.ts +6 -5
  118. package/types/apps/src/implementation/mcp-catalog.d.ts +7 -8
  119. package/types/apps/src/implementation/mcp-client.d.ts +49 -25
  120. package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
  121. package/types/apps/src/implementation/mcp.d.ts +52 -25
  122. package/types/apps/src/implementation/network.d.ts +16 -0
  123. package/types/apps/src/implementation/openapi-compile.d.ts +30 -8
  124. package/types/apps/src/implementation/openapi-document.d.ts +46 -21
  125. package/types/apps/src/implementation/openapi-names.d.ts +23 -0
  126. package/types/apps/src/implementation/openapi-request.d.ts +10 -3
  127. package/types/apps/src/implementation/openapi-source.d.ts +30 -8
  128. package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
  129. package/types/apps/src/implementation/operations.d.ts +84 -10
  130. package/types/apps/src/implementation/optimistic.d.ts +1 -1
  131. package/types/apps/src/implementation/placement.d.ts +60 -0
  132. package/types/apps/src/implementation/protocol-operations.d.ts +6 -4
  133. package/types/apps/src/implementation/provider-error.d.ts +28 -1
  134. package/types/apps/src/implementation/provider.d.ts +26 -6
  135. package/types/apps/src/implementation/query-commit.d.ts +1 -1
  136. package/types/apps/src/implementation/router-catalog.d.ts +227 -0
  137. package/types/apps/src/implementation/router.d.ts +78 -0
  138. package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
  139. package/types/apps/src/implementation/schedules.d.ts +39 -8
  140. package/types/apps/src/implementation/schema.d.ts +111 -15
  141. package/types/apps/src/implementation/skills.d.ts +18 -24
  142. package/types/apps/src/implementation/sql.d.ts +71 -0
  143. package/types/apps/src/implementation/swagger-client.d.ts +28 -0
  144. package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
  145. package/types/apps/src/implementation/ui-auth.d.ts +12 -6
  146. package/types/apps/src/implementation/ui-client.d.ts +3 -3
  147. package/types/apps/src/implementation/ui-document.d.ts +5 -0
  148. package/types/apps/src/implementation/ui-errors.d.ts +1 -1
  149. package/types/apps/src/implementation/ui-serving.d.ts +31 -12
  150. package/types/apps/src/implementation/ui-watch.d.ts +1 -1
  151. package/types/apps/src/implementation/upstream-error.d.ts +7 -0
  152. package/types/apps/src/implementation/webhooks.d.ts +15 -6
  153. package/types/apps/src/implementation/workflow-context.d.ts +17 -5
  154. package/types/apps/src/implementation/workflows.d.ts +11 -4
  155. package/types/apps/src/index.d.ts +71 -21
  156. package/types/apps/src/mcp.d.ts +25 -5
  157. package/types/apps/src/openapi.d.ts +11 -6
  158. package/types/apps/src/react.d.ts +1 -1
  159. package/types/apps/src/skills.d.ts +13 -8
  160. package/types/apps/src/ui-auth.d.ts +2 -2
  161. package/types/apps/src/ui-serving.d.ts +1 -1
  162. package/types/telemetry/src/app-records.d.ts +42 -0
  163. package/types/telemetry/src/browser-operations.d.ts +7 -4
  164. package/types/telemetry/src/browser.d.ts +8 -3
  165. package/types/telemetry/src/config.d.ts +2 -2
  166. package/types/telemetry/src/index.d.ts +2 -1
  167. package/types/telemetry/src/layer.d.ts +10 -4
  168. package/types/telemetry/src/measurements.d.ts +1 -1
  169. package/types/telemetry/src/ownership.d.ts +60 -0
  170. package/types/telemetry/src/recorded-failure.d.ts +29 -0
  171. package/types/telemetry/src/relay.d.ts +16 -6
  172. package/types/telemetry/src/span-attributes.d.ts +17 -1
  173. package/types/telemetry/src/transport.d.ts +8 -1
  174. package/types/utils/src/api-error.d.ts +55 -0
  175. package/types/utils/src/connection-failure.d.ts +33 -0
  176. package/types/utils/src/legacy-keys.d.ts +20 -0
  177. package/types/utils/src/recorded-message.d.ts +18 -0
  178. package/types/utils/src/schema-definitions.d.ts +13 -0
  179. package/types/utils/src/user-facing-error.d.ts +83 -0
  180. package/js/chunk-6IIO4NPI.js +0 -29
  181. package/js/chunk-6YBRWRK3.js +0 -160
  182. package/js/chunk-BMOIAIVR.js +0 -138
  183. package/js/chunk-FZJOYIZO.js +0 -19
  184. package/js/chunk-G7IE6BKC.js +0 -224
  185. package/js/chunk-IHQ4ML7K.js +0 -2193
  186. package/js/chunk-KOXMLKTM.js +0 -1288
  187. package/js/chunk-M6ZRRIBI.js +0 -877
  188. package/js/chunk-PLCMJREA.js +0 -590
  189. package/js/chunk-PZ36XMXW.js +0 -93
  190. package/js/chunk-RBAC33PQ.js +0 -267
  191. package/js/chunk-SATWJKN6.js +0 -34
  192. package/js/chunk-SWPD52J7.js +0 -35
  193. package/js/chunk-TE4KO4HI.js +0 -47
  194. package/js/chunk-W7D7WVSY.js +0 -18
  195. package/js/chunk-X7SFGU4Q.js +0 -280
  196. package/js/chunk-ZJWDMTE3.js +0 -63
  197. package/js/mcp/stdio.js +0 -128
  198. package/types/app-data/src/implementation/cursor.d.ts +0 -10
  199. package/types/app-data/src/implementation/index-key.d.ts +0 -7
  200. package/types/app-data/src/implementation/promise.d.ts +0 -68
  201. package/types/app-data/src/implementation/range.d.ts +0 -8
  202. package/types/app-data/src/implementation/schema.d.ts +0 -33
  203. package/types/app-data/src/implementation/sqlite.d.ts +0 -11
  204. package/types/app-data/src/index.d.ts +0 -4
  205. package/types/apps/src/contracts/dynamic-tools.d.ts +0 -13
  206. package/types/apps/src/contracts/storage.d.ts +0 -68
  207. package/types/apps/src/implementation/account-operations.d.ts +0 -151
  208. package/types/apps/src/implementation/dynamic-tools.d.ts +0 -8
  209. package/types/apps/src/implementation/mcp-stdio.d.ts +0 -4
  210. package/types/apps/src/implementation/storage.d.ts +0 -13
  211. package/types/apps/src/mcp-stdio.d.ts +0 -8
@@ -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-QKHR7BMF.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-FW5HBOIK.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,
@@ -0,0 +1,268 @@
1
+ import {
2
+ getWithReads
3
+ } from "./chunk-5C6RAGAS.js";
4
+ import {
5
+ fromPromise,
6
+ method,
7
+ toPromise
8
+ } from "./chunk-7STIP5CS.js";
9
+ import {
10
+ CacheError
11
+ } from "./chunk-4UPC36ZL.js";
12
+ import {
13
+ wrap
14
+ } from "./chunk-VAI3EVCS.js";
15
+ import {
16
+ JsonObject
17
+ } from "./chunk-7HG422GB.js";
18
+ import {
19
+ Deferred_exports,
20
+ Duration_exports,
21
+ Effect_exports,
22
+ Exit_exports,
23
+ Schema_exports
24
+ } from "./chunk-ZKDXML77.js";
25
+
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
+ };
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
+ };
48
+ var Manifest = Schema_exports.Struct({
49
+ revision: Schema_exports.String,
50
+ pages: Schema_exports.Int,
51
+ summaries: Schema_exports.Int,
52
+ header: Schema_exports.optionalKey(JsonObject)
53
+ });
54
+ var catalogCache = (options) => Effect_exports.gen(function* () {
55
+ const cache = options.cache;
56
+ const key = [...options.prefix, "current"];
57
+ const part = (revision, kind, name) => [
58
+ ...options.prefix,
59
+ revision,
60
+ kind,
61
+ name
62
+ ];
63
+ const freshFor = options.freshFor ?? "5 minutes";
64
+ const staleFor = options.staleFor ?? "1 day";
65
+ const retention = Duration_exports.toMillis(Duration_exports.fromInputUnsafe(freshFor)) + Duration_exports.toMillis(Duration_exports.fromInputUnsafe(staleFor)) + 3e5;
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
+ );
94
+ const refresh = (context) => Effect_exports.gen(function* () {
95
+ const { tools, header } = yield* options.load(context, kept(context.cache));
96
+ const digest = yield* Effect_exports.tryPromise({
97
+ try: () => crypto.subtle.digest(
98
+ "SHA-256",
99
+ new TextEncoder().encode(JSON.stringify({ tools, header: header ?? null }))
100
+ ),
101
+ catch: (error) => error
102
+ });
103
+ const revision = Array.from(
104
+ new Uint8Array(digest),
105
+ (byte) => byte.toString(16).padStart(2, "0")
106
+ ).join("");
107
+ let pages2 = 0;
108
+ let page = [];
109
+ let pageBytes = 0;
110
+ let summaries = 0;
111
+ let summary = [];
112
+ let summaryBytes = 0;
113
+ let batch = [];
114
+ let batchBytes = 0;
115
+ let flushes = 0;
116
+ const flush = () => Effect_exports.suspend(() => {
117
+ const entries = batch;
118
+ const bytes = batchBytes;
119
+ batch = [];
120
+ batchBytes = 0;
121
+ if (!entries.length) return Effect_exports.void;
122
+ return fromPromise(method(context.cache, "write"), "cache")(entries, retention).pipe(
123
+ Effect_exports.withSpan("app.cache.flush", {
124
+ attributes: {
125
+ "cache.flush.index": flushes++,
126
+ "cache.flush.entries": entries.length,
127
+ "cache.flush.bytes": bytes
128
+ }
129
+ })
130
+ );
131
+ });
132
+ const append = (entry) => Effect_exports.gen(function* () {
133
+ const bytes = new TextEncoder().encode(JSON.stringify(entry)).byteLength;
134
+ if (batch.length && (batch.length >= 64 || batchBytes + bytes > 4e6))
135
+ yield* flush();
136
+ batch.push(entry);
137
+ batchBytes += bytes;
138
+ });
139
+ const pageOut = () => Effect_exports.gen(function* () {
140
+ if (!page.length) return;
141
+ yield* append({ key: part(revision, "page", pages2++), value: page });
142
+ page = [];
143
+ pageBytes = 0;
144
+ });
145
+ const summaryOut = () => Effect_exports.gen(function* () {
146
+ if (!summary.length) return;
147
+ yield* append({ key: part(revision, "summary", summaries++), value: summary });
148
+ summary = [];
149
+ summaryBytes = 0;
150
+ });
151
+ const json = (value) => Schema_exports.decodeUnknownEffect(Schema_exports.fromJsonString(JsonObject))(JSON.stringify(value));
152
+ for (const tool of tools) {
153
+ const value = yield* json(tool);
154
+ const bytes = new TextEncoder().encode(JSON.stringify(value)).byteLength;
155
+ if (page.length && (page.length >= 64 || pageBytes + bytes > 5e5)) yield* pageOut();
156
+ yield* append({ key: part(revision, "tool", tool.name), value });
157
+ page.push(value);
158
+ pageBytes += bytes;
159
+ const brief = yield* json(options.summary.of(tool));
160
+ const briefBytes = new TextEncoder().encode(JSON.stringify(brief)).byteLength;
161
+ if (summary.length && summaryBytes + briefBytes > 5e5) yield* summaryOut();
162
+ summary.push(brief);
163
+ summaryBytes += briefBytes;
164
+ }
165
+ yield* pageOut();
166
+ yield* summaryOut();
167
+ yield* flush();
168
+ return {
169
+ revision,
170
+ pages: pages2,
171
+ summaries,
172
+ ...header === void 0 ? {} : { header: yield* json(header) }
173
+ };
174
+ });
175
+ const getOptions = {
176
+ key,
177
+ schema: schema(Manifest),
178
+ freshFor,
179
+ staleFor,
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)
183
+ };
184
+ let reading;
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
+ }
222
+ );
223
+ const current = () => read().pipe(Effect_exports.map(({ manifest }) => manifest));
224
+ if (options.revalidate) {
225
+ if (cache === void 0) yield* local;
226
+ else yield* fromPromise(method(cache, "revalidate"), "cache")(getOptions);
227
+ }
228
+ const metadata = () => Effect_exports.gen(function* () {
229
+ if (cache === void 0) return (yield* local).tools;
230
+ const manifest = yield* current();
231
+ return yield* pages(cache, manifest.revision, "page", manifest.pages, options.schema);
232
+ });
233
+ return {
234
+ list: metadata,
235
+ /** The record stored with the current revision, if the source supplied one. */
236
+ header: () => cache === void 0 ? local.pipe(Effect_exports.map(({ header }) => header)) : current().pipe(Effect_exports.map((manifest) => manifest.header)),
237
+ summaries: () => Effect_exports.gen(function* () {
238
+ if (cache === void 0)
239
+ return (yield* local).tools.map((tool) => options.summary.of(tool));
240
+ const manifest = yield* current();
241
+ return yield* pages(
242
+ cache,
243
+ manifest.revision,
244
+ "summary",
245
+ manifest.summaries,
246
+ options.summary.schema
247
+ );
248
+ }),
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
+ })
261
+ )
262
+ };
263
+ });
264
+
265
+ export {
266
+ catalogScope,
267
+ catalogCache
268
+ };