apps 0.0.1-beta.5 → 0.0.1-beta.54
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 +68 -44
- package/framework-reference.json +1 -1
- package/js/chunk-5FHWNLCI.js +88 -0
- package/js/{chunk-M3B3DE4K.js → chunk-74YVXBKY.js} +463 -218
- package/js/chunk-7UUHJR2Q.js +49 -0
- package/js/{chunk-CYYBFC2K.js → chunk-AQU56EPI.js} +9 -5
- package/js/chunk-CDXQDN7W.js +92 -0
- package/js/{chunk-UDDE5KOR.js → chunk-D45JTD6N.js} +148 -34
- package/js/{chunk-UK573G7W.js → chunk-EOPQ727L.js} +87 -51
- package/js/chunk-GDYPM7RS.js +266 -0
- package/js/{chunk-27F7W2LG.js → chunk-H2CJWXA3.js} +2 -2
- package/js/{chunk-JU7VHODU.js → chunk-H72MEDMN.js} +65 -10
- package/js/{chunk-CDL5PM2Q.js → chunk-IFJU5SYQ.js} +19082 -18402
- package/js/{chunk-RJDDBDSN.js → chunk-JM7LOD2W.js} +628 -85
- package/js/{chunk-VFZKSM3T.js → chunk-JPEUKEV4.js} +3 -3
- package/js/{chunk-DQAZTA4I.js → chunk-JY56GVSV.js} +1324 -209
- package/js/{chunk-FWQC6I3C.js → chunk-KGCTYL2S.js} +523 -63
- package/js/{chunk-KUMBKVJD.js → chunk-KLYSEHUD.js} +2 -2
- package/js/chunk-LTDHQJ2Z.js +171 -0
- package/js/chunk-MWKHKOTL.js +240 -0
- package/js/chunk-OD3KFKZD.js +1617 -0
- package/js/{chunk-57RKNWL2.js → chunk-PD6I2SDG.js} +4 -4
- package/js/chunk-PO5NPRFT.js +1885 -0
- package/js/chunk-QKHTRD6G.js +42 -0
- package/js/chunk-SVHI6AKV.js +729 -0
- package/js/{chunk-IJX4CYZO.js → chunk-TUMGL2OC.js} +228 -264
- package/js/{chunk-XHO2ZX6W.js → chunk-UM62MBJQ.js} +96 -41
- package/js/chunk-X5U5KIWQ.js +221 -0
- package/js/{chunk-IPI4MFSN.js → chunk-XBG7HHXC.js} +2 -2
- package/js/chunk-YQD2MLFY.js +340 -0
- package/js/client.js +142 -94
- package/js/contracts.js +123 -33
- package/js/effect.js +19 -21
- package/js/{es-APDZKREY.js → es-DIULA3ZF.js} +62 -1659
- package/js/graphql.js +63 -60
- package/js/host.js +83 -60
- package/js/index.js +262 -222
- package/js/mcp/effect.js +23 -23
- package/js/mcp/stdio.js +48 -40
- package/js/mcp.js +109 -72
- package/js/openapi.js +4129 -1419
- package/js/react.js +2 -3
- package/js/skills/effect.js +6 -3
- package/js/skills.js +208 -82
- package/js/storage/facet.js +1 -540
- package/js/ui/auth/contracts.js +2 -2
- package/js/ui/auth.js +5 -5
- package/js/ui/contracts.js +5 -4
- package/js/ui/serving.js +8517 -214
- package/package.json +2 -3
- package/runtime.json +1 -1
- package/types/app-cache/src/index.d.ts +10 -1
- package/types/apps/src/contracts/api-response-error.d.ts +4 -0
- package/types/apps/src/contracts/app.d.ts +9 -8
- package/types/apps/src/contracts/cache.d.ts +20 -0
- package/types/apps/src/contracts/context.d.ts +19 -11
- package/types/apps/src/contracts/elicitation.d.ts +6 -6
- package/types/apps/src/contracts/events.d.ts +93 -0
- package/types/apps/src/contracts/failure.d.ts +30 -1
- package/types/apps/src/contracts/graphql.d.ts +2 -1
- package/types/apps/src/contracts/host.d.ts +55 -16
- package/types/apps/src/contracts/live.d.ts +2 -0
- package/types/apps/src/contracts/mcp.d.ts +96 -10
- package/types/apps/src/contracts/network.d.ts +84 -0
- package/types/apps/src/contracts/openapi-compile.d.ts +32 -3
- package/types/apps/src/contracts/openapi.d.ts +45 -9
- package/types/apps/src/contracts/operations.d.ts +8 -9
- package/types/apps/src/contracts/protocol-version.d.ts +2 -2
- package/types/apps/src/contracts/protocols/1.d.ts +248 -73
- package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
- package/types/apps/src/contracts/protocols/11.d.ts +1098 -0
- package/types/apps/src/contracts/protocols/2.d.ts +65 -23
- package/types/apps/src/contracts/protocols/3.d.ts +65 -26
- package/types/apps/src/contracts/protocols/4.d.ts +1297 -0
- package/types/apps/src/contracts/protocols/5.d.ts +1174 -0
- package/types/apps/src/contracts/protocols/6.d.ts +1620 -0
- package/types/apps/src/contracts/protocols/7.d.ts +1784 -0
- package/types/apps/src/contracts/protocols/8.d.ts +1130 -0
- package/types/apps/src/contracts/protocols/9.d.ts +1106 -0
- package/types/apps/src/contracts/protocols/oauth.d.ts +89 -0
- package/types/apps/src/contracts/provider-error.d.ts +9 -0
- package/types/apps/src/contracts/provider.d.ts +115 -10
- package/types/apps/src/contracts/router.d.ts +59 -0
- package/types/apps/src/contracts/skills.d.ts +50 -13
- package/types/apps/src/contracts/sql.d.ts +58 -0
- package/types/apps/src/contracts/ui.d.ts +19 -1
- package/types/apps/src/contracts/workflows.d.ts +6 -0
- package/types/apps/src/facet.d.ts +4 -5
- package/types/apps/src/graphql.d.ts +1 -3
- package/types/apps/src/host.d.ts +5 -0
- package/types/apps/src/implementation/account-router.d.ts +13 -0
- package/types/apps/src/implementation/app.d.ts +5 -4
- package/types/apps/src/implementation/authoring.d.ts +25 -5
- package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
- package/types/apps/src/implementation/cache.d.ts +4 -0
- package/types/apps/src/implementation/catalog-cache.d.ts +43 -5
- package/types/apps/src/implementation/elicitation.d.ts +18 -15
- package/types/apps/src/implementation/events.d.ts +59 -0
- package/types/apps/src/implementation/failure-detail.d.ts +25 -3
- package/types/apps/src/implementation/graphql-catalog.d.ts +4 -7
- package/types/apps/src/implementation/graphql.d.ts +4 -3
- package/types/apps/src/implementation/input-problems.d.ts +6 -2
- package/types/apps/src/implementation/invocation-timing.d.ts +16 -0
- package/types/apps/src/implementation/live.d.ts +2 -2
- package/types/apps/src/implementation/mcp-call.d.ts +6 -5
- package/types/apps/src/implementation/mcp-catalog.d.ts +7 -8
- package/types/apps/src/implementation/mcp-client.d.ts +49 -25
- package/types/apps/src/implementation/mcp-stdio.d.ts +1 -1
- package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
- package/types/apps/src/implementation/mcp.d.ts +52 -25
- package/types/apps/src/implementation/network.d.ts +16 -0
- package/types/apps/src/implementation/openapi-compile.d.ts +27 -6
- package/types/apps/src/implementation/openapi-document.d.ts +46 -19
- package/types/apps/src/implementation/openapi-names.d.ts +9 -4
- package/types/apps/src/implementation/openapi-request.d.ts +10 -2
- package/types/apps/src/implementation/openapi-source.d.ts +8 -6
- package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
- package/types/apps/src/implementation/operations.d.ts +43 -5
- package/types/apps/src/implementation/optimistic.d.ts +1 -1
- package/types/apps/src/implementation/protocol-operations.d.ts +6 -4
- package/types/apps/src/implementation/provider-error.d.ts +28 -1
- package/types/apps/src/implementation/provider.d.ts +19 -5
- package/types/apps/src/implementation/query-commit.d.ts +1 -1
- package/types/apps/src/implementation/router-catalog.d.ts +223 -0
- package/types/apps/src/implementation/router.d.ts +70 -0
- package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
- package/types/apps/src/implementation/schema.d.ts +95 -11
- package/types/apps/src/implementation/skills.d.ts +18 -24
- package/types/apps/src/implementation/sql.d.ts +71 -0
- package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
- package/types/apps/src/implementation/ui-auth.d.ts +1 -1
- package/types/apps/src/implementation/ui-client.d.ts +2 -2
- package/types/apps/src/implementation/ui-document.d.ts +5 -0
- package/types/apps/src/implementation/ui-errors.d.ts +1 -1
- package/types/apps/src/implementation/ui-serving.d.ts +11 -5
- package/types/apps/src/implementation/ui-watch.d.ts +1 -1
- package/types/apps/src/implementation/upstream-error.d.ts +7 -0
- package/types/apps/src/implementation/workflow-context.d.ts +1 -1
- package/types/apps/src/implementation/workflows.d.ts +1 -1
- package/types/apps/src/index.d.ts +32 -13
- package/types/apps/src/mcp-stdio.d.ts +2 -5
- package/types/apps/src/mcp.d.ts +25 -5
- package/types/apps/src/openapi.d.ts +6 -6
- package/types/apps/src/react.d.ts +1 -1
- package/types/apps/src/skills.d.ts +10 -8
- package/types/telemetry/src/app-records.d.ts +42 -0
- package/types/telemetry/src/browser-operations.d.ts +7 -4
- package/types/telemetry/src/browser.d.ts +8 -3
- package/types/telemetry/src/config.d.ts +2 -2
- package/types/telemetry/src/index.d.ts +1 -0
- package/types/telemetry/src/layer.d.ts +2 -2
- package/types/telemetry/src/ownership.d.ts +56 -0
- package/types/telemetry/src/recorded-failure.d.ts +29 -0
- package/types/telemetry/src/relay.d.ts +2 -2
- package/types/telemetry/src/transport.d.ts +8 -1
- package/types/utils/src/api-error.d.ts +55 -0
- package/types/utils/src/connection-failure.d.ts +33 -0
- package/types/utils/src/recorded-message.d.ts +18 -0
- package/types/utils/src/user-facing-error.d.ts +83 -0
- package/js/chunk-3XKZDQLM.js +0 -93
- package/js/chunk-4M277YTM.js +0 -136
- package/js/chunk-67EVWIGJ.js +0 -224
- package/js/chunk-C3VAOK5B.js +0 -215
- package/js/chunk-G7T27IWB.js +0 -63
- package/js/chunk-LUVSFETN.js +0 -1347
- package/js/chunk-N7YDVXYJ.js +0 -186
- package/js/chunk-PJJ24GU7.js +0 -877
- package/js/chunk-PZB6T6KU.js +0 -19
- package/js/chunk-SB3V4YVR.js +0 -18
- package/js/chunk-TDNYXSIX.js +0 -29
- package/js/chunk-W4DMKWAB.js +0 -35
- package/js/chunk-YEPYT6SD.js +0 -85
- package/js/chunk-ZQINWV4W.js +0 -630
- package/types/app-data/src/implementation/cursor.d.ts +0 -10
- package/types/app-data/src/implementation/index-key.d.ts +0 -7
- package/types/app-data/src/implementation/promise.d.ts +0 -68
- package/types/app-data/src/implementation/range.d.ts +0 -8
- package/types/app-data/src/implementation/schema.d.ts +0 -18
- package/types/app-data/src/implementation/sqlite.d.ts +0 -11
- package/types/app-data/src/index.d.ts +0 -4
- package/types/apps/src/contracts/dynamic-tools.d.ts +0 -13
- package/types/apps/src/contracts/storage.d.ts +0 -68
- package/types/apps/src/implementation/account-operations.d.ts +0 -151
- package/types/apps/src/implementation/dynamic-tools.d.ts +0 -8
- package/types/apps/src/implementation/storage.d.ts +0 -15
|
@@ -1,26 +1,42 @@
|
|
|
1
|
+
import {
|
|
2
|
+
fromPromise,
|
|
3
|
+
method,
|
|
4
|
+
toPromise
|
|
5
|
+
} from "./chunk-LTDHQJ2Z.js";
|
|
1
6
|
import {
|
|
2
7
|
CacheError
|
|
3
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-MWKHKOTL.js";
|
|
4
9
|
import {
|
|
5
10
|
wrap
|
|
6
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KGCTYL2S.js";
|
|
7
12
|
import {
|
|
8
13
|
JsonObject
|
|
9
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-H2CJWXA3.js";
|
|
10
15
|
import {
|
|
16
|
+
Deferred_exports,
|
|
11
17
|
Duration_exports,
|
|
12
18
|
Effect_exports,
|
|
13
19
|
Schema_exports
|
|
14
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
15
21
|
|
|
16
22
|
// src/implementation/catalog-cache.ts
|
|
23
|
+
var catalogScope = (options, credential, invalid) => {
|
|
24
|
+
const { account, cache } = options;
|
|
25
|
+
if (account === void 0)
|
|
26
|
+
return credential === void 0 ? Effect_exports.succeed(cache) : Effect_exports.fail(invalid("missing-account"));
|
|
27
|
+
if (cache === void 0) return Effect_exports.succeed(void 0);
|
|
28
|
+
return Effect_exports.try({
|
|
29
|
+
try: () => cache.forAccount(account),
|
|
30
|
+
catch: () => invalid("unselected-account")
|
|
31
|
+
});
|
|
32
|
+
};
|
|
17
33
|
var schema = (decoder) => wrap(decoder, false);
|
|
18
34
|
var Manifest = Schema_exports.Struct({
|
|
19
35
|
revision: Schema_exports.String,
|
|
20
36
|
pages: Schema_exports.Int,
|
|
21
|
-
summaries: Schema_exports.Int
|
|
37
|
+
summaries: Schema_exports.Int,
|
|
38
|
+
header: Schema_exports.optionalKey(JsonObject)
|
|
22
39
|
});
|
|
23
|
-
var invoke = (work) => Effect_exports.tryPromise({ try: work, catch: (error) => error });
|
|
24
40
|
var catalogCache = (options) => Effect_exports.gen(function* () {
|
|
25
41
|
const cache = options.cache;
|
|
26
42
|
const key = [...options.prefix, "current"];
|
|
@@ -34,11 +50,42 @@ var catalogCache = (options) => Effect_exports.gen(function* () {
|
|
|
34
50
|
const staleFor = options.staleFor ?? "1 day";
|
|
35
51
|
const retention = Duration_exports.toMillis(Duration_exports.fromInputUnsafe(freshFor)) + Duration_exports.toMillis(Duration_exports.fromInputUnsafe(staleFor)) + 3e5;
|
|
36
52
|
const local = yield* Effect_exports.cached(options.load());
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
() =>
|
|
53
|
+
const pages = (cache2, revision, kind, count, decoder) => Effect_exports.gen(function* () {
|
|
54
|
+
const batches = yield* Effect_exports.forEach(
|
|
55
|
+
Array.from({ length: Math.ceil(count / 4) }, (_, batch) => batch * 4),
|
|
56
|
+
(offset) => fromPromise(method(cache2, "readMany"), "cache")(
|
|
57
|
+
Array.from(
|
|
58
|
+
{ length: Math.min(4, count - offset) },
|
|
59
|
+
(_, index) => part(revision, kind, offset + index)
|
|
60
|
+
),
|
|
61
|
+
schema(Schema_exports.Array(decoder))
|
|
62
|
+
),
|
|
63
|
+
{ concurrency: "unbounded" }
|
|
41
64
|
);
|
|
65
|
+
const values = [];
|
|
66
|
+
for (const page of batches.flat()) {
|
|
67
|
+
if (page === void 0) return yield* new CacheError({ reason: "unavailable" });
|
|
68
|
+
values.push(...page);
|
|
69
|
+
}
|
|
70
|
+
return values;
|
|
71
|
+
});
|
|
72
|
+
const kept = (cache2) => fromPromise(method(cache2, "read"), "cache")(key, schema(Manifest)).pipe(
|
|
73
|
+
Effect_exports.map(
|
|
74
|
+
(manifest) => manifest === void 0 ? void 0 : {
|
|
75
|
+
header: manifest.header,
|
|
76
|
+
tools: pages(cache2, manifest.revision, "page", manifest.pages, options.schema)
|
|
77
|
+
}
|
|
78
|
+
)
|
|
79
|
+
);
|
|
80
|
+
const refresh = (context) => Effect_exports.gen(function* () {
|
|
81
|
+
const { tools, header } = yield* options.load(context, kept(context.cache));
|
|
82
|
+
const digest = yield* Effect_exports.tryPromise({
|
|
83
|
+
try: () => crypto.subtle.digest(
|
|
84
|
+
"SHA-256",
|
|
85
|
+
new TextEncoder().encode(JSON.stringify({ tools, header: header ?? null }))
|
|
86
|
+
),
|
|
87
|
+
catch: (error) => error
|
|
88
|
+
});
|
|
42
89
|
const revision = Array.from(
|
|
43
90
|
new Uint8Array(digest),
|
|
44
91
|
(byte) => byte.toString(16).padStart(2, "0")
|
|
@@ -58,7 +105,7 @@ var catalogCache = (options) => Effect_exports.gen(function* () {
|
|
|
58
105
|
batch = [];
|
|
59
106
|
batchBytes = 0;
|
|
60
107
|
if (!entries.length) return Effect_exports.void;
|
|
61
|
-
return
|
|
108
|
+
return fromPromise(method(context.cache, "write"), "cache")(entries, retention).pipe(
|
|
62
109
|
Effect_exports.withSpan("app.cache.flush", {
|
|
63
110
|
attributes: {
|
|
64
111
|
"cache.flush.index": flushes++,
|
|
@@ -104,50 +151,56 @@ var catalogCache = (options) => Effect_exports.gen(function* () {
|
|
|
104
151
|
yield* pageOut();
|
|
105
152
|
yield* summaryOut();
|
|
106
153
|
yield* flush();
|
|
107
|
-
return {
|
|
154
|
+
return {
|
|
155
|
+
revision,
|
|
156
|
+
pages: pages2,
|
|
157
|
+
summaries,
|
|
158
|
+
...header === void 0 ? {} : { header: yield* json(header) }
|
|
159
|
+
};
|
|
108
160
|
});
|
|
109
161
|
const getOptions = {
|
|
110
162
|
key,
|
|
111
163
|
schema: schema(Manifest),
|
|
112
164
|
freshFor,
|
|
113
165
|
staleFor,
|
|
114
|
-
|
|
166
|
+
...options.stale === void 0 ? {} : { stale: options.stale },
|
|
167
|
+
// A cache may call the loader as a Promise; its own signal cancels that load.
|
|
168
|
+
load: toPromise(refresh, (context) => context.signal)
|
|
115
169
|
};
|
|
116
|
-
|
|
170
|
+
let reading;
|
|
171
|
+
const current = () => Effect_exports.suspend(() => {
|
|
172
|
+
if (cache === void 0) return Effect_exports.fail(new CacheError({ reason: "unavailable" }));
|
|
173
|
+
const shared = reading;
|
|
174
|
+
if (shared !== void 0) return Deferred_exports.await(shared);
|
|
175
|
+
const deferred = Deferred_exports.makeUnsafe();
|
|
176
|
+
reading = deferred;
|
|
177
|
+
return fromPromise(
|
|
178
|
+
method(cache, "get"),
|
|
179
|
+
"cache"
|
|
180
|
+
)(getOptions).pipe(
|
|
181
|
+
Effect_exports.onExit(
|
|
182
|
+
(exit) => Effect_exports.sync(() => {
|
|
183
|
+
if (reading === deferred) reading = void 0;
|
|
184
|
+
}).pipe(Effect_exports.andThen(Deferred_exports.done(deferred, exit)))
|
|
185
|
+
)
|
|
186
|
+
);
|
|
187
|
+
});
|
|
117
188
|
if (options.revalidate) {
|
|
118
189
|
if (cache === void 0) yield* local;
|
|
119
|
-
else yield*
|
|
190
|
+
else yield* fromPromise(method(cache, "revalidate"), "cache")(getOptions);
|
|
120
191
|
}
|
|
121
|
-
const pages = (cache2, revision, kind, count, decoder) => Effect_exports.gen(function* () {
|
|
122
|
-
const batches = yield* Effect_exports.forEach(
|
|
123
|
-
Array.from({ length: Math.ceil(count / 4) }, (_, batch) => batch * 4),
|
|
124
|
-
(offset) => invoke(
|
|
125
|
-
() => cache2.readMany(
|
|
126
|
-
Array.from(
|
|
127
|
-
{ length: Math.min(4, count - offset) },
|
|
128
|
-
(_, index) => part(revision, kind, offset + index)
|
|
129
|
-
),
|
|
130
|
-
schema(Schema_exports.Array(decoder))
|
|
131
|
-
)
|
|
132
|
-
),
|
|
133
|
-
{ concurrency: "unbounded" }
|
|
134
|
-
);
|
|
135
|
-
const values = [];
|
|
136
|
-
for (const page of batches.flat()) {
|
|
137
|
-
if (page === void 0) return yield* new CacheError({ reason: "unavailable" });
|
|
138
|
-
values.push(...page);
|
|
139
|
-
}
|
|
140
|
-
return values;
|
|
141
|
-
});
|
|
142
192
|
const metadata = () => Effect_exports.gen(function* () {
|
|
143
|
-
if (cache === void 0) return yield* local;
|
|
193
|
+
if (cache === void 0) return (yield* local).tools;
|
|
144
194
|
const manifest = yield* current();
|
|
145
195
|
return yield* pages(cache, manifest.revision, "page", manifest.pages, options.schema);
|
|
146
196
|
});
|
|
147
197
|
return {
|
|
148
198
|
list: metadata,
|
|
199
|
+
/** The record stored with the current revision, if the source supplied one. */
|
|
200
|
+
header: () => cache === void 0 ? local.pipe(Effect_exports.map(({ header }) => header)) : current().pipe(Effect_exports.map((manifest) => manifest.header)),
|
|
149
201
|
summaries: () => Effect_exports.gen(function* () {
|
|
150
|
-
if (cache === void 0)
|
|
202
|
+
if (cache === void 0)
|
|
203
|
+
return (yield* local).tools.map((tool) => options.summary.of(tool));
|
|
151
204
|
const manifest = yield* current();
|
|
152
205
|
return yield* pages(
|
|
153
206
|
cache,
|
|
@@ -157,10 +210,11 @@ var catalogCache = (options) => Effect_exports.gen(function* () {
|
|
|
157
210
|
options.summary.schema
|
|
158
211
|
);
|
|
159
212
|
}),
|
|
160
|
-
resolve: (name) => cache === void 0 ? local.pipe(Effect_exports.map((tools) => tools.find((tool) => tool.name === name))) : current().pipe(
|
|
213
|
+
resolve: (name) => cache === void 0 ? local.pipe(Effect_exports.map(({ tools }) => tools.find((tool) => tool.name === name))) : current().pipe(
|
|
161
214
|
Effect_exports.flatMap(
|
|
162
|
-
(manifest) =>
|
|
163
|
-
|
|
215
|
+
(manifest) => fromPromise(method(cache, "read"), "cache")(
|
|
216
|
+
part(manifest.revision, "tool", name),
|
|
217
|
+
schema(options.schema)
|
|
164
218
|
)
|
|
165
219
|
)
|
|
166
220
|
)
|
|
@@ -168,5 +222,6 @@ var catalogCache = (options) => Effect_exports.gen(function* () {
|
|
|
168
222
|
});
|
|
169
223
|
|
|
170
224
|
export {
|
|
225
|
+
catalogScope,
|
|
171
226
|
catalogCache
|
|
172
227
|
};
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import {
|
|
2
|
+
fromPromise
|
|
3
|
+
} from "./chunk-LTDHQJ2Z.js";
|
|
4
|
+
import {
|
|
5
|
+
HostedTool,
|
|
6
|
+
RouterKey,
|
|
7
|
+
RouterMeta,
|
|
8
|
+
reservedRouterKeys
|
|
9
|
+
} from "./chunk-JY56GVSV.js";
|
|
10
|
+
import {
|
|
11
|
+
decoderOf,
|
|
12
|
+
schemaArgument
|
|
13
|
+
} from "./chunk-KGCTYL2S.js";
|
|
14
|
+
import {
|
|
15
|
+
Effect_exports,
|
|
16
|
+
Schema_exports
|
|
17
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
18
|
+
|
|
19
|
+
// src/implementation/operations.ts
|
|
20
|
+
var NativeOperation = /* @__PURE__ */ Symbol("apps.Operation");
|
|
21
|
+
var NativeRouterKey = /* @__PURE__ */ Symbol("apps.Router");
|
|
22
|
+
var operationDeclaration = (operation) => ({
|
|
23
|
+
kind: operation.kind,
|
|
24
|
+
[NativeOperation]: operation
|
|
25
|
+
});
|
|
26
|
+
var nativeOperation = (value) => {
|
|
27
|
+
if (typeof value !== "object" || value === null || !(NativeOperation in value)) return void 0;
|
|
28
|
+
return value[NativeOperation];
|
|
29
|
+
};
|
|
30
|
+
var operationOptions = (options) => {
|
|
31
|
+
const approval = options.approval;
|
|
32
|
+
return {
|
|
33
|
+
...options.description === void 0 ? {} : { description: options.description },
|
|
34
|
+
...options.title === void 0 ? {} : { title: options.title },
|
|
35
|
+
...options.annotations === void 0 ? {} : { annotations: options.annotations },
|
|
36
|
+
...options._meta === void 0 ? {} : { _meta: options._meta },
|
|
37
|
+
input: decoderOf(options.input),
|
|
38
|
+
...approval === void 0 ? {} : {
|
|
39
|
+
approval: (context) => fromPromise(async () => approval(context), "approval")()
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
var approvedOperation = (operation, approval) => {
|
|
44
|
+
const copy = Object.defineProperties({}, Object.getOwnPropertyDescriptors(operation));
|
|
45
|
+
return Object.defineProperty(copy, "approval", {
|
|
46
|
+
enumerable: true,
|
|
47
|
+
value: (context) => fromPromise(async () => approval(context), "approval")()
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
var withApproval = (operation, approval) => ({
|
|
51
|
+
...operation,
|
|
52
|
+
[NativeOperation]: approvedOperation(operation[NativeOperation], approval)
|
|
53
|
+
});
|
|
54
|
+
var toolAnnotations = (operation) => nativeOperation(operation)?.annotations;
|
|
55
|
+
var make = (kind, options, run) => operationDeclaration({
|
|
56
|
+
...operationOptions({ ...options, input: schemaArgument(options.input, `The ${kind} input`) }),
|
|
57
|
+
kind,
|
|
58
|
+
// The host always validates JSON serialization, even without a stronger output declaration.
|
|
59
|
+
...options.output === void 0 ? {} : { output: decoderOf(schemaArgument(options.output, `The ${kind} output`)) },
|
|
60
|
+
// SAFETY: defineApp checks the handler context against its requirements.
|
|
61
|
+
// The host validates account bindings and creates the matching storage facade.
|
|
62
|
+
run: (context, input) => fromPromise(run, "handler")(context, input)
|
|
63
|
+
});
|
|
64
|
+
var query = (options, run) => make("query", options, run);
|
|
65
|
+
var mutation = (options, run) => make("mutation", options, run);
|
|
66
|
+
|
|
67
|
+
// src/implementation/router.ts
|
|
68
|
+
var routerDeclaration = (node) => ({
|
|
69
|
+
[NativeRouterKey]: node
|
|
70
|
+
});
|
|
71
|
+
var nativeRouter = (value) => {
|
|
72
|
+
if (typeof value !== "object" || value === null || !(NativeRouterKey in value)) return void 0;
|
|
73
|
+
return value[NativeRouterKey];
|
|
74
|
+
};
|
|
75
|
+
var nativeNode = (value) => nativeOperation(value) ?? nativeRouter(value);
|
|
76
|
+
var metaOf = (options) => {
|
|
77
|
+
if (options === void 0) return void 0;
|
|
78
|
+
const defined = Object.fromEntries(
|
|
79
|
+
Object.entries(options).filter(([, value]) => value !== void 0)
|
|
80
|
+
);
|
|
81
|
+
return Object.keys(defined).length === 0 ? void 0 : Schema_exports.decodeUnknownSync(RouterMeta)(defined);
|
|
82
|
+
};
|
|
83
|
+
var mergeMeta = (base, override) => base === void 0 ? override : override === void 0 ? base : { ...base, ...override };
|
|
84
|
+
function router(children, options) {
|
|
85
|
+
const meta = metaOf(options);
|
|
86
|
+
const existing = nativeRouter(children);
|
|
87
|
+
if (existing !== void 0)
|
|
88
|
+
return routerDeclaration(
|
|
89
|
+
existing.kind === "router" ? { ...existing, ...withMeta(mergeMeta(existing.meta, meta)) } : { ...existing, ...withOverrides(mergeMeta(existing.overrides, meta)) }
|
|
90
|
+
);
|
|
91
|
+
const nodes = {};
|
|
92
|
+
for (const [key, value] of Object.entries(children)) {
|
|
93
|
+
if (reservedRouterKeys.has(key)) throw new Error(`Router key "${key}" is reserved`);
|
|
94
|
+
if (!Schema_exports.is(RouterKey)(key))
|
|
95
|
+
throw new Error(`Router key "${key}" must start with a letter or _ and contain no dots`);
|
|
96
|
+
const node = nativeNode(value);
|
|
97
|
+
if (node === void 0)
|
|
98
|
+
throw new Error(`Router key "${key}" must be a query, mutation or router`);
|
|
99
|
+
nodes[key] = node;
|
|
100
|
+
}
|
|
101
|
+
return routerDeclaration({ kind: "router", ...withMeta(meta), children: nodes });
|
|
102
|
+
}
|
|
103
|
+
var withMeta = (meta) => meta === void 0 ? {} : { meta };
|
|
104
|
+
var withOverrides = (overrides) => overrides === void 0 ? {} : { overrides };
|
|
105
|
+
var dynamicRouter = (source) => {
|
|
106
|
+
const meta = source.meta;
|
|
107
|
+
return routerDeclaration({
|
|
108
|
+
kind: "dynamic",
|
|
109
|
+
...meta === void 0 ? {} : {
|
|
110
|
+
meta: () => fromPromise(async () => meta(), "router")().pipe(
|
|
111
|
+
Effect_exports.flatMap((options) => Schema_exports.decodeUnknownEffect(RouterMeta)(options))
|
|
112
|
+
)
|
|
113
|
+
},
|
|
114
|
+
list: () => fromPromise(async () => source.list(), "router")().pipe(
|
|
115
|
+
Effect_exports.flatMap(Schema_exports.decodeUnknownEffect(Schema_exports.Array(HostedTool)))
|
|
116
|
+
),
|
|
117
|
+
resolve: (name) => fromPromise(async () => source.resolve(name), "router")().pipe(
|
|
118
|
+
Effect_exports.map((value) => {
|
|
119
|
+
if (value === void 0) return void 0;
|
|
120
|
+
const operation = nativeOperation(value);
|
|
121
|
+
if (operation === void 0) throw new Error("Expected an operation declaration");
|
|
122
|
+
return operation;
|
|
123
|
+
})
|
|
124
|
+
)
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
var joinPath = (path, name) => path === "" ? name : `${path}.${name}`;
|
|
128
|
+
var locate = (root, name) => {
|
|
129
|
+
if (root?.kind === "dynamic") return { kind: "dynamic", source: root, router: "", name };
|
|
130
|
+
let current = root;
|
|
131
|
+
let path = "";
|
|
132
|
+
let rest = name;
|
|
133
|
+
while (current !== void 0) {
|
|
134
|
+
const dot = rest.indexOf(".");
|
|
135
|
+
const key = dot < 0 ? rest : rest.slice(0, dot);
|
|
136
|
+
const child = Object.hasOwn(current.children, key) ? current.children[key] : void 0;
|
|
137
|
+
if (child === void 0) return void 0;
|
|
138
|
+
const remaining = dot < 0 ? void 0 : rest.slice(dot + 1);
|
|
139
|
+
switch (child.kind) {
|
|
140
|
+
case "query":
|
|
141
|
+
case "mutation":
|
|
142
|
+
return remaining === void 0 ? { kind: "operation", operation: child, router: path } : void 0;
|
|
143
|
+
case "dynamic":
|
|
144
|
+
return remaining === void 0 || remaining === "" ? void 0 : { kind: "dynamic", source: child, router: joinPath(path, key), name: remaining };
|
|
145
|
+
case "router":
|
|
146
|
+
if (remaining === void 0) return void 0;
|
|
147
|
+
current = child;
|
|
148
|
+
path = joinPath(path, key);
|
|
149
|
+
rest = remaining;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return void 0;
|
|
153
|
+
};
|
|
154
|
+
var declaredOperations = (root, path = "") => Object.entries(root?.children ?? {}).flatMap(([key, child]) => {
|
|
155
|
+
const name = joinPath(path, key);
|
|
156
|
+
switch (child.kind) {
|
|
157
|
+
case "query":
|
|
158
|
+
case "mutation":
|
|
159
|
+
return [{ name, router: path, operation: child }];
|
|
160
|
+
case "router":
|
|
161
|
+
return declaredOperations(child, name);
|
|
162
|
+
case "dynamic":
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
var withApprovals = (source, policy) => {
|
|
167
|
+
const native = nativeRouter(source);
|
|
168
|
+
if (native === void 0) throw new Error("withApprovals expects a router");
|
|
169
|
+
const operation = (node, name) => {
|
|
170
|
+
const approval = policy(operationDeclaration(node), name);
|
|
171
|
+
return approval === void 0 ? node : approvedOperation(node, approval);
|
|
172
|
+
};
|
|
173
|
+
const child = (node, name) => {
|
|
174
|
+
switch (node.kind) {
|
|
175
|
+
case "query":
|
|
176
|
+
case "mutation":
|
|
177
|
+
return operation(node, name);
|
|
178
|
+
case "router":
|
|
179
|
+
case "dynamic":
|
|
180
|
+
return walk(node, name);
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
const walk = (node, path) => node.kind === "dynamic" ? {
|
|
184
|
+
...node,
|
|
185
|
+
resolve: (name) => node.resolve(name).pipe(
|
|
186
|
+
Effect_exports.flatMap(
|
|
187
|
+
(resolved) => resolved === void 0 ? Effect_exports.succeed(void 0) : Effect_exports.try({
|
|
188
|
+
try: () => operation(resolved, joinPath(path, name)),
|
|
189
|
+
catch: (error) => error
|
|
190
|
+
})
|
|
191
|
+
)
|
|
192
|
+
)
|
|
193
|
+
} : {
|
|
194
|
+
...node,
|
|
195
|
+
children: Object.fromEntries(
|
|
196
|
+
Object.entries(node.children).map(([key, value]) => [
|
|
197
|
+
key,
|
|
198
|
+
child(value, joinPath(path, key))
|
|
199
|
+
])
|
|
200
|
+
)
|
|
201
|
+
};
|
|
202
|
+
return routerDeclaration(walk(native, ""));
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
export {
|
|
206
|
+
operationDeclaration,
|
|
207
|
+
nativeOperation,
|
|
208
|
+
withApproval,
|
|
209
|
+
toolAnnotations,
|
|
210
|
+
query,
|
|
211
|
+
mutation,
|
|
212
|
+
routerDeclaration,
|
|
213
|
+
nativeRouter,
|
|
214
|
+
mergeMeta,
|
|
215
|
+
router,
|
|
216
|
+
dynamicRouter,
|
|
217
|
+
joinPath,
|
|
218
|
+
locate,
|
|
219
|
+
declaredOperations,
|
|
220
|
+
withApprovals
|
|
221
|
+
};
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
SkillDefinitionInvalid,
|
|
6
6
|
SkillFile,
|
|
7
7
|
SkillFilePath
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-H72MEDMN.js";
|
|
9
9
|
import {
|
|
10
10
|
Effect_exports,
|
|
11
11
|
Schema_exports
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
13
13
|
|
|
14
14
|
// src/implementation/skill-files.ts
|
|
15
15
|
var skillFromFiles = (input, source = {}) => Effect_exports.gen(function* () {
|