apps 0.0.1-beta.11 → 0.0.1-beta.110
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 +60 -42
- package/framework-reference.json +1 -1
- package/js/chunk-2RGJMA7N.js +5186 -0
- package/js/chunk-3BI34I5S.js +449 -0
- package/js/chunk-3BOEMXAJ.js +713 -0
- package/js/{chunk-JU7VHODU.js → chunk-4PIQKACY.js} +65 -10
- package/js/{chunk-VFZKSM3T.js → chunk-4X2UI4R2.js} +3 -3
- package/js/{chunk-KUMBKVJD.js → chunk-62NVUKED.js} +2 -2
- package/js/chunk-74H25C4X.js +95 -0
- package/js/chunk-7HG422GB.js +90 -0
- package/js/{chunk-UK573G7W.js → chunk-ACQXVKVQ.js} +87 -51
- package/js/chunk-BKIQCV72.js +994 -0
- package/js/{chunk-IJX4CYZO.js → chunk-DILSCQPJ.js} +228 -264
- package/js/chunk-HLMJBE4T.js +49 -0
- package/js/{chunk-RELFXUOO.js → chunk-JCX2K2SI.js} +931 -289
- package/js/{chunk-M3B3DE4K.js → chunk-KLSEU35Y.js} +463 -218
- package/js/chunk-OD3KFKZD.js +1617 -0
- package/js/chunk-OIH73VFM.js +175 -0
- package/js/chunk-OWN3DP2W.js +88 -0
- package/js/{chunk-IPI4MFSN.js → chunk-PBGPES67.js} +2 -2
- package/js/{chunk-WVVV4TX2.js → chunk-RIV62DRM.js} +4 -3
- package/js/{chunk-RFVIONFX.js → chunk-SXQVVXJE.js} +123 -44
- package/js/chunk-UPTAFF6L.js +335 -0
- package/js/{chunk-ODEIDRGW.js → chunk-URKOTNDA.js} +795 -176
- package/js/{chunk-5T57N25Q.js → chunk-VAI3EVCS.js} +643 -69
- package/js/{chunk-57RKNWL2.js → chunk-YDW7DX3A.js} +4 -4
- package/js/{chunk-CDL5PM2Q.js → chunk-ZKDXML77.js} +19239 -18404
- package/js/{chunk-GPFVWWDZ.js → chunk-ZXG7RMCB.js} +113 -58
- package/js/client.js +148 -84
- package/js/contracts.js +150 -21
- package/js/effect.js +18 -19
- package/js/{es-APDZKREY.js → es-DIULA3ZF.js} +62 -1659
- package/js/graphql.js +231 -188
- package/js/host.js +116 -78
- package/js/index.js +213 -98
- package/js/mcp/effect.js +21 -21
- package/js/mcp.js +91 -57
- package/js/openapi.js +4349 -1415
- package/js/react.js +2 -3
- package/js/skills/effect.js +6 -3
- package/js/skills.js +208 -81
- 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 +9 -8
- package/js/ui/serving.js +8609 -228
- package/package.json +3 -8
- package/runtime.json +1 -1
- package/types/app-cache/src/contracts/cache.d.ts +18 -0
- package/types/app-cache/src/index.d.ts +34 -2
- package/types/apps/src/contracts/api-response-error.d.ts +4 -0
- package/types/apps/src/contracts/app.d.ts +56 -11
- package/types/apps/src/contracts/cache.d.ts +20 -0
- package/types/apps/src/contracts/context.d.ts +60 -17
- package/types/apps/src/contracts/elicitation.d.ts +23 -7
- package/types/apps/src/contracts/events.d.ts +94 -0
- package/types/apps/src/contracts/failure.d.ts +30 -1
- package/types/apps/src/contracts/graphql.d.ts +40 -2
- package/types/apps/src/contracts/host.d.ts +1456 -20
- package/types/apps/src/contracts/icons.d.ts +28 -0
- package/types/apps/src/contracts/live.d.ts +2 -0
- package/types/apps/src/contracts/mcp.d.ts +81 -20
- package/types/apps/src/contracts/network.d.ts +120 -0
- package/types/apps/src/contracts/openapi-compile.d.ts +82 -3
- package/types/apps/src/contracts/openapi-document.d.ts +1 -1
- package/types/apps/src/contracts/openapi.d.ts +41 -9
- package/types/apps/src/contracts/operations.d.ts +14 -7
- package/types/apps/src/contracts/placement.d.ts +102 -0
- package/types/apps/src/contracts/protocol-version.d.ts +2 -2
- package/types/apps/src/contracts/protocols/1.d.ts +733 -81
- package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
- package/types/apps/src/contracts/protocols/11.d.ts +1149 -0
- package/types/apps/src/contracts/protocols/12.d.ts +3310 -0
- package/types/apps/src/contracts/protocols/2.d.ts +69 -26
- package/types/apps/src/contracts/protocols/3.d.ts +133 -33
- package/types/apps/src/contracts/protocols/4.d.ts +122 -45
- package/types/apps/src/contracts/protocols/5.d.ts +157 -47
- package/types/apps/src/contracts/protocols/6.d.ts +1629 -0
- package/types/apps/src/contracts/protocols/7.d.ts +1785 -0
- package/types/apps/src/contracts/protocols/8.d.ts +1182 -0
- package/types/apps/src/contracts/protocols/9.d.ts +1104 -0
- package/types/apps/src/contracts/protocols/current.d.ts +6869 -0
- package/types/apps/src/contracts/protocols/oauth-6.d.ts +74 -0
- package/types/apps/src/contracts/protocols/oauth.d.ts +134 -0
- package/types/apps/src/contracts/provider-error.d.ts +9 -0
- package/types/apps/src/contracts/provider.d.ts +85 -6
- package/types/apps/src/contracts/router.d.ts +2 -1
- package/types/apps/src/contracts/schedules.d.ts +7 -1
- package/types/apps/src/contracts/schema.d.ts +21 -0
- package/types/apps/src/contracts/shared-catalog.d.ts +11 -0
- package/types/apps/src/contracts/skills.d.ts +50 -13
- package/types/apps/src/contracts/sql.d.ts +63 -0
- package/types/apps/src/contracts/ui.d.ts +70 -30
- package/types/apps/src/contracts/webhooks.d.ts +24 -7
- package/types/apps/src/contracts/workflows.d.ts +56 -34
- package/types/apps/src/facet.d.ts +4 -5
- package/types/apps/src/host.d.ts +5 -0
- package/types/apps/src/implementation/account-router.d.ts +4 -3
- package/types/apps/src/implementation/app.d.ts +41 -14
- 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 +29 -2
- package/types/apps/src/implementation/catalog-cache.d.ts +35 -4
- package/types/apps/src/implementation/elicitation.d.ts +18 -15
- package/types/apps/src/implementation/events.d.ts +64 -0
- package/types/apps/src/implementation/failure-detail.d.ts +28 -5
- package/types/apps/src/implementation/graphql-catalog.d.ts +3 -3
- 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 +18 -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 +6 -4
- package/types/apps/src/implementation/mcp-client.d.ts +17 -9
- package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
- package/types/apps/src/implementation/mcp.d.ts +20 -9
- package/types/apps/src/implementation/network.d.ts +16 -0
- package/types/apps/src/implementation/openapi-compile.d.ts +38 -7
- package/types/apps/src/implementation/openapi-document.d.ts +50 -20
- 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 +23 -1
- package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
- package/types/apps/src/implementation/operations.d.ts +58 -7
- package/types/apps/src/implementation/optimistic.d.ts +1 -1
- package/types/apps/src/implementation/placement.d.ts +60 -0
- package/types/apps/src/implementation/protocol-operations.d.ts +3 -0
- package/types/apps/src/implementation/provider-error.d.ts +28 -1
- package/types/apps/src/implementation/provider.d.ts +19 -4
- package/types/apps/src/implementation/query-commit.d.ts +1 -1
- package/types/apps/src/implementation/router-catalog.d.ts +24 -18
- package/types/apps/src/implementation/router.d.ts +26 -6
- package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
- package/types/apps/src/implementation/schedules.d.ts +39 -8
- package/types/apps/src/implementation/schema.d.ts +108 -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 +3 -3
- 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 +28 -11
- package/types/apps/src/implementation/ui-watch.d.ts +1 -1
- package/types/apps/src/implementation/upstream-error.d.ts +17 -0
- package/types/apps/src/implementation/webhooks.d.ts +15 -6
- package/types/apps/src/implementation/workflow-context.d.ts +6 -2
- package/types/apps/src/implementation/workflows.d.ts +11 -4
- package/types/apps/src/index.d.ts +51 -16
- package/types/apps/src/mcp.d.ts +20 -1
- package/types/apps/src/openapi.d.ts +22 -1
- package/types/apps/src/react.d.ts +1 -1
- package/types/apps/src/skills.d.ts +10 -8
- package/types/apps/src/ui-serving.d.ts +1 -1
- package/types/telemetry/src/app-records.d.ts +42 -0
- package/types/telemetry/src/browser-operations.d.ts +2 -2
- 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 +2 -1
- package/types/telemetry/src/layer.d.ts +10 -4
- package/types/telemetry/src/measurements.d.ts +1 -1
- package/types/telemetry/src/ownership.d.ts +60 -0
- package/types/telemetry/src/recorded-failure.d.ts +29 -0
- package/types/telemetry/src/relay.d.ts +16 -6
- package/types/telemetry/src/span-attributes.d.ts +17 -1
- 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/legacy-keys.d.ts +20 -0
- package/types/utils/src/recorded-message.d.ts +18 -0
- package/types/utils/src/schema-definitions.d.ts +13 -0
- package/types/utils/src/user-facing-error.d.ts +83 -0
- package/js/chunk-27F7W2LG.js +0 -34
- package/js/chunk-EFAPIRVB.js +0 -299
- package/js/chunk-KRSCJDTW.js +0 -2668
- package/js/chunk-MKWZPDR6.js +0 -63
- package/js/chunk-N7YDVXYJ.js +0 -186
- package/js/chunk-NKLWZJLE.js +0 -172
- package/js/chunk-PJJ24GU7.js +0 -877
- package/js/chunk-PZB6T6KU.js +0 -19
- package/js/chunk-R3EV5FTO.js +0 -97
- package/js/chunk-TYVDBQSI.js +0 -242
- package/js/chunk-YBRC463S.js +0 -224
- package/js/chunk-Z2QY3YTF.js +0 -507
- package/js/chunk-ZQINWV4W.js +0 -630
- package/js/mcp/stdio.js +0 -128
- 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/storage.d.ts +0 -68
- package/types/apps/src/implementation/mcp-stdio.d.ts +0 -4
- package/types/apps/src/implementation/storage.d.ts +0 -15
- package/types/apps/src/mcp-stdio.d.ts +0 -5
|
@@ -1,48 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
fromPromise
|
|
3
|
+
} from "./chunk-OIH73VFM.js";
|
|
1
4
|
import {
|
|
2
5
|
HostedTool,
|
|
3
6
|
RouterKey,
|
|
4
7
|
RouterMeta,
|
|
5
8
|
reservedRouterKeys
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2RGJMA7N.js";
|
|
7
10
|
import {
|
|
8
|
-
decoderOf
|
|
9
|
-
|
|
11
|
+
decoderOf,
|
|
12
|
+
schemaArgument
|
|
13
|
+
} from "./chunk-VAI3EVCS.js";
|
|
10
14
|
import {
|
|
11
15
|
Effect_exports,
|
|
12
16
|
Schema_exports
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
|
|
15
|
-
// src/implementation/authoring.ts
|
|
16
|
-
var NativeCallback = /* @__PURE__ */ Symbol("apps.NativeCallback");
|
|
17
|
-
var fromPromise = (callback) => (...args) => {
|
|
18
|
-
if (NativeCallback in callback) {
|
|
19
|
-
const native = callback[NativeCallback];
|
|
20
|
-
return native(...args);
|
|
21
|
-
}
|
|
22
|
-
return Effect_exports.tryPromise({ try: () => callback(...args), catch: (error) => error });
|
|
23
|
-
};
|
|
24
|
-
var toPromise = (operation, signal) => {
|
|
25
|
-
const native = (...args) => Effect_exports.suspend(() => {
|
|
26
|
-
if (signal === void 0) return operation(...args);
|
|
27
|
-
if (signal.aborted) return Effect_exports.interrupt;
|
|
28
|
-
const cancelled = Effect_exports.callback((resume) => {
|
|
29
|
-
if (signal.aborted) {
|
|
30
|
-
resume(Effect_exports.interrupt);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const abort = () => resume(Effect_exports.interrupt);
|
|
34
|
-
signal.addEventListener("abort", abort, { once: true });
|
|
35
|
-
return Effect_exports.sync(() => signal.removeEventListener("abort", abort));
|
|
36
|
-
});
|
|
37
|
-
return Effect_exports.raceFirst(
|
|
38
|
-
cancelled,
|
|
39
|
-
Effect_exports.suspend(() => operation(...args))
|
|
40
|
-
);
|
|
41
|
-
});
|
|
42
|
-
return Object.assign((...args) => Effect_exports.runPromise(native(...args)), {
|
|
43
|
-
[NativeCallback]: native
|
|
44
|
-
});
|
|
45
|
-
};
|
|
17
|
+
} from "./chunk-ZKDXML77.js";
|
|
46
18
|
|
|
47
19
|
// src/implementation/operations.ts
|
|
48
20
|
var NativeOperation = /* @__PURE__ */ Symbol("apps.Operation");
|
|
@@ -64,31 +36,38 @@ var operationOptions = (options) => {
|
|
|
64
36
|
...options._meta === void 0 ? {} : { _meta: options._meta },
|
|
65
37
|
input: decoderOf(options.input),
|
|
66
38
|
...approval === void 0 ? {} : {
|
|
67
|
-
approval: (context) =>
|
|
39
|
+
approval: (context) => fromPromise(async () => approval(context), "approval")()
|
|
68
40
|
}
|
|
69
41
|
};
|
|
70
42
|
};
|
|
71
|
-
var
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
+
// SAFETY: `Approved` is a type-only mark; the native operation now carries the approval.
|
|
52
|
+
{
|
|
53
|
+
...operation,
|
|
54
|
+
[NativeOperation]: approvedOperation(operation[NativeOperation], approval)
|
|
76
55
|
}
|
|
77
|
-
|
|
56
|
+
);
|
|
57
|
+
var toolAnnotations = (operation) => nativeOperation(operation)?.annotations;
|
|
78
58
|
var make = (kind, options, run) => operationDeclaration({
|
|
79
|
-
...operationOptions(options),
|
|
59
|
+
...operationOptions({ ...options, input: schemaArgument(options.input, `The ${kind} input`) }),
|
|
80
60
|
kind,
|
|
81
61
|
// The host always validates JSON serialization, even without a stronger output declaration.
|
|
82
|
-
...options.output === void 0 ? {} : { output: decoderOf(options.output) },
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
try: () => run(context, input),
|
|
87
|
-
catch: (error) => error
|
|
88
|
-
})
|
|
62
|
+
...options.output === void 0 ? {} : { output: decoderOf(schemaArgument(options.output, `The ${kind} output`)) },
|
|
63
|
+
// SAFETY: defineApp checks the handler context against its requirements.
|
|
64
|
+
// The host validates account bindings and creates the matching storage facade.
|
|
65
|
+
run: (context, input) => fromPromise(run, "handler")(context, input)
|
|
89
66
|
});
|
|
90
67
|
var query = (options, run) => make("query", options, run);
|
|
91
|
-
|
|
68
|
+
function mutation(options, run) {
|
|
69
|
+
return make("mutation", options, run);
|
|
70
|
+
}
|
|
92
71
|
|
|
93
72
|
// src/implementation/router.ts
|
|
94
73
|
var routerDeclaration = (node) => ({
|
|
@@ -133,14 +112,14 @@ var dynamicRouter = (source) => {
|
|
|
133
112
|
return routerDeclaration({
|
|
134
113
|
kind: "dynamic",
|
|
135
114
|
...meta === void 0 ? {} : {
|
|
136
|
-
meta: () => fromPromise(async () => meta())().pipe(
|
|
115
|
+
meta: () => fromPromise(async () => meta(), "router")().pipe(
|
|
137
116
|
Effect_exports.flatMap((options) => Schema_exports.decodeUnknownEffect(RouterMeta)(options))
|
|
138
117
|
)
|
|
139
118
|
},
|
|
140
|
-
list: () => fromPromise(async () => source.list())().pipe(
|
|
119
|
+
list: () => fromPromise(async () => source.list(), "router")().pipe(
|
|
141
120
|
Effect_exports.flatMap(Schema_exports.decodeUnknownEffect(Schema_exports.Array(HostedTool)))
|
|
142
121
|
),
|
|
143
|
-
resolve: (name) => fromPromise(async () => source.resolve(name))().pipe(
|
|
122
|
+
resolve: (name) => fromPromise(async () => source.resolve(name), "router")().pipe(
|
|
144
123
|
Effect_exports.map((value) => {
|
|
145
124
|
if (value === void 0) return void 0;
|
|
146
125
|
const operation = nativeOperation(value);
|
|
@@ -189,13 +168,87 @@ var declaredOperations = (root, path = "") => Object.entries(root?.children ?? {
|
|
|
189
168
|
return [];
|
|
190
169
|
}
|
|
191
170
|
});
|
|
171
|
+
var withApprovals = (source, policy) => {
|
|
172
|
+
const native = nativeRouter(source);
|
|
173
|
+
if (native === void 0) throw new Error("withApprovals expects a router");
|
|
174
|
+
const operation = (node, name) => {
|
|
175
|
+
const approval = policy(operationDeclaration(node), name);
|
|
176
|
+
return approval === void 0 ? node : approvedOperation(node, approval);
|
|
177
|
+
};
|
|
178
|
+
const child = (node, name) => {
|
|
179
|
+
switch (node.kind) {
|
|
180
|
+
case "query":
|
|
181
|
+
case "mutation":
|
|
182
|
+
return operation(node, name);
|
|
183
|
+
case "router":
|
|
184
|
+
case "dynamic":
|
|
185
|
+
return walk(node, name);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
const walk = (node, path) => node.kind === "dynamic" ? {
|
|
189
|
+
...node,
|
|
190
|
+
resolve: (name) => node.resolve(name).pipe(
|
|
191
|
+
Effect_exports.flatMap(
|
|
192
|
+
(resolved) => resolved === void 0 ? Effect_exports.succeed(void 0) : Effect_exports.try({
|
|
193
|
+
try: () => operation(resolved, joinPath(path, name)),
|
|
194
|
+
catch: (error) => error
|
|
195
|
+
})
|
|
196
|
+
)
|
|
197
|
+
)
|
|
198
|
+
} : {
|
|
199
|
+
...node,
|
|
200
|
+
children: Object.fromEntries(
|
|
201
|
+
Object.entries(node.children).map(([key, value]) => [
|
|
202
|
+
key,
|
|
203
|
+
child(value, joinPath(path, key))
|
|
204
|
+
])
|
|
205
|
+
)
|
|
206
|
+
};
|
|
207
|
+
return routerDeclaration(walk(native, ""));
|
|
208
|
+
};
|
|
209
|
+
var renameTools = (source, rename) => {
|
|
210
|
+
const native = nativeRouter(source);
|
|
211
|
+
if (native?.kind !== "dynamic") throw new Error("renameTools expects a protocol router");
|
|
212
|
+
const exposed = (tools) => {
|
|
213
|
+
const seen = /* @__PURE__ */ new Set();
|
|
214
|
+
return tools.flatMap((tool) => {
|
|
215
|
+
const name = rename(tool.name);
|
|
216
|
+
if (name === void 0 || seen.has(name)) return [];
|
|
217
|
+
seen.add(name);
|
|
218
|
+
return [{ ...tool, name, source: tool.name }];
|
|
219
|
+
});
|
|
220
|
+
};
|
|
221
|
+
const listed = native.summaries ?? native.list;
|
|
222
|
+
const original = (name) => listed().pipe(Effect_exports.map((tools) => exposed(tools).find((tool) => tool.name === name)?.source));
|
|
223
|
+
const strip = ({
|
|
224
|
+
source: _source,
|
|
225
|
+
...tool
|
|
226
|
+
}) => tool;
|
|
227
|
+
return routerDeclaration({
|
|
228
|
+
...native,
|
|
229
|
+
list: () => native.list().pipe(Effect_exports.map((tools) => exposed(tools).map(strip))),
|
|
230
|
+
...native.summaries === void 0 ? {} : {
|
|
231
|
+
summaries: () => listed().pipe(Effect_exports.map((tools) => exposed(tools).map(strip)))
|
|
232
|
+
},
|
|
233
|
+
describe: (name) => original(name).pipe(
|
|
234
|
+
Effect_exports.flatMap(
|
|
235
|
+
(found) => found === void 0 ? Effect_exports.succeed(void 0) : native.describe?.(found) ?? native.list().pipe(Effect_exports.map((tools) => tools.find((tool) => tool.name === found)))
|
|
236
|
+
),
|
|
237
|
+
Effect_exports.map((tool) => tool === void 0 ? void 0 : { ...tool, name })
|
|
238
|
+
),
|
|
239
|
+
resolve: (name) => original(name).pipe(
|
|
240
|
+
Effect_exports.flatMap(
|
|
241
|
+
(found) => found === void 0 ? Effect_exports.succeed(void 0) : native.resolve(found)
|
|
242
|
+
)
|
|
243
|
+
)
|
|
244
|
+
});
|
|
245
|
+
};
|
|
192
246
|
|
|
193
247
|
export {
|
|
194
|
-
fromPromise,
|
|
195
|
-
toPromise,
|
|
196
248
|
operationDeclaration,
|
|
197
249
|
nativeOperation,
|
|
198
250
|
withApproval,
|
|
251
|
+
toolAnnotations,
|
|
199
252
|
query,
|
|
200
253
|
mutation,
|
|
201
254
|
routerDeclaration,
|
|
@@ -205,5 +258,7 @@ export {
|
|
|
205
258
|
dynamicRouter,
|
|
206
259
|
joinPath,
|
|
207
260
|
locate,
|
|
208
|
-
declaredOperations
|
|
261
|
+
declaredOperations,
|
|
262
|
+
withApprovals,
|
|
263
|
+
renameTools
|
|
209
264
|
};
|
package/js/client.js
CHANGED
|
@@ -1,39 +1,38 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AppUiApi,
|
|
3
|
-
HttpApiClient_exports,
|
|
4
3
|
UiContext,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from "./chunk-
|
|
4
|
+
UiFailed,
|
|
5
|
+
UiVersionChanged
|
|
6
|
+
} from "./chunk-74H25C4X.js";
|
|
8
7
|
import {
|
|
9
8
|
AsyncResult_exports,
|
|
10
9
|
AtomRegistry_exports,
|
|
11
10
|
Atom_exports,
|
|
12
11
|
queryResult
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import
|
|
12
|
+
} from "./chunk-KLSEU35Y.js";
|
|
13
|
+
import {
|
|
14
|
+
decoderOf
|
|
15
|
+
} from "./chunk-VAI3EVCS.js";
|
|
15
16
|
import {
|
|
16
17
|
OtlpExporter_exports,
|
|
17
18
|
externalTrace,
|
|
18
19
|
pendingSpan,
|
|
19
20
|
telemetryLayer,
|
|
20
21
|
traceLinks
|
|
21
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-URKOTNDA.js";
|
|
22
23
|
import {
|
|
23
24
|
FetchHttpClient_exports
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import
|
|
26
|
-
HttpClientError_exports
|
|
27
|
-
} from "./chunk-UK573G7W.js";
|
|
25
|
+
} from "./chunk-YDW7DX3A.js";
|
|
26
|
+
import "./chunk-OWN3DP2W.js";
|
|
28
27
|
import {
|
|
29
|
-
|
|
30
|
-
} from "./chunk-
|
|
28
|
+
JsonValue
|
|
29
|
+
} from "./chunk-7HG422GB.js";
|
|
31
30
|
import {
|
|
32
|
-
|
|
33
|
-
} from "./chunk-
|
|
31
|
+
HttpApiClient_exports
|
|
32
|
+
} from "./chunk-DILSCQPJ.js";
|
|
34
33
|
import {
|
|
35
|
-
|
|
36
|
-
} from "./chunk-
|
|
34
|
+
HttpClientError_exports
|
|
35
|
+
} from "./chunk-ACQXVKVQ.js";
|
|
37
36
|
import {
|
|
38
37
|
Cause_exports,
|
|
39
38
|
Clock_exports,
|
|
@@ -46,25 +45,27 @@ import {
|
|
|
46
45
|
Logger_exports,
|
|
47
46
|
ManagedRuntime_exports,
|
|
48
47
|
Option_exports,
|
|
48
|
+
Queue_exports,
|
|
49
49
|
Schedule_exports,
|
|
50
50
|
Schema_exports,
|
|
51
51
|
Semaphore_exports,
|
|
52
52
|
Stream_exports,
|
|
53
53
|
Tracer_exports
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-ZKDXML77.js";
|
|
55
55
|
import "./chunk-CZ7CSFO4.js";
|
|
56
56
|
|
|
57
57
|
// src/contracts/live.ts
|
|
58
|
+
var OperationName = Schema_exports.NonEmptyString.check(Schema_exports.isMaxLength(200));
|
|
58
59
|
var AppQueryFailed = class extends Schema_exports.TaggedError()("AppQueryFailed", {}) {
|
|
59
60
|
};
|
|
60
61
|
|
|
61
62
|
// src/implementation/live.ts
|
|
62
63
|
var queryReference = (name) => ({
|
|
63
|
-
name: Schema_exports.decodeUnknownSync(
|
|
64
|
+
name: Schema_exports.decodeUnknownSync(OperationName)(name),
|
|
64
65
|
kind: "query"
|
|
65
66
|
});
|
|
66
67
|
var mutationReference = (name) => ({
|
|
67
|
-
name: Schema_exports.decodeUnknownSync(
|
|
68
|
+
name: Schema_exports.decodeUnknownSync(OperationName)(name),
|
|
68
69
|
kind: "mutation"
|
|
69
70
|
});
|
|
70
71
|
var liveQueryAtom = (reference, input, options) => Atom_exports.make(
|
|
@@ -475,6 +476,8 @@ var browserTelemetryLayer = (settings) => Layer_exports.unwrap(
|
|
|
475
476
|
const onError = (event) => error("ui.error", event.error ?? new Error(event.message));
|
|
476
477
|
const onRejection = (event) => error("ui.unhandled-rejection", event.reason);
|
|
477
478
|
const onHidden = () => {
|
|
479
|
+
if (navigation !== void 0 && document.visibilityState === "hidden")
|
|
480
|
+
navigation.hidden = true;
|
|
478
481
|
run(
|
|
479
482
|
document.visibilityState === "hidden" ? performance.pause.pipe(Effect_exports.andThen(flush)) : performance.resume
|
|
480
483
|
);
|
|
@@ -502,15 +505,27 @@ var browserTelemetryLayer = (settings) => Layer_exports.unwrap(
|
|
|
502
505
|
return {
|
|
503
506
|
flush,
|
|
504
507
|
navigation: (event) => Effect_exports.sync(() => {
|
|
508
|
+
if (event.type === "load") return;
|
|
505
509
|
if (event.type === "end") {
|
|
506
|
-
if (navigation !== void 0) Deferred_exports.doneUnsafe(navigation, Effect_exports.void);
|
|
510
|
+
if (navigation !== void 0) Deferred_exports.doneUnsafe(navigation.done, Effect_exports.void);
|
|
507
511
|
navigation = void 0;
|
|
508
512
|
return;
|
|
509
513
|
}
|
|
510
|
-
if (navigation !== void 0)
|
|
511
|
-
|
|
514
|
+
if (navigation !== void 0)
|
|
515
|
+
Deferred_exports.doneUnsafe(navigation.done, Effect_exports.interrupt);
|
|
516
|
+
const current = {
|
|
517
|
+
done: Deferred_exports.makeUnsafe(),
|
|
518
|
+
hidden: document.visibilityState === "hidden"
|
|
519
|
+
};
|
|
520
|
+
navigation = current;
|
|
512
521
|
run(
|
|
513
|
-
Deferred_exports.await(
|
|
522
|
+
Deferred_exports.await(current.done).pipe(
|
|
523
|
+
// Record visibility however the navigation ends, including when a later one interrupts it.
|
|
524
|
+
Effect_exports.ensuring(
|
|
525
|
+
Effect_exports.suspend(
|
|
526
|
+
() => Effect_exports.annotateCurrentSpan("executor.navigation.hidden", current.hidden)
|
|
527
|
+
)
|
|
528
|
+
),
|
|
514
529
|
Effect_exports.withSpan("ui.navigation", {
|
|
515
530
|
root: true,
|
|
516
531
|
attributes: { "url.path": event.path }
|
|
@@ -520,7 +535,7 @@ var browserTelemetryLayer = (settings) => Layer_exports.unwrap(
|
|
|
520
535
|
);
|
|
521
536
|
}).pipe(
|
|
522
537
|
Effect_exports.andThen(
|
|
523
|
-
event.type === "
|
|
538
|
+
event.type === "end" ? Effect_exports.void : performance.navigation(event.path)
|
|
524
539
|
)
|
|
525
540
|
)
|
|
526
541
|
};
|
|
@@ -793,12 +808,39 @@ var makeOptimisticClient = (transport) => {
|
|
|
793
808
|
};
|
|
794
809
|
|
|
795
810
|
// src/implementation/ui-client.ts
|
|
811
|
+
var resubscribeDelay = Schedule_exports.min([
|
|
812
|
+
Schedule_exports.exponential("1 second"),
|
|
813
|
+
Schedule_exports.spaced("1 minute")
|
|
814
|
+
]).pipe(Schedule_exports.jittered);
|
|
815
|
+
var appFailure = (error) => Schema_exports.is(UiFailed)(error) && error.reason === "operation_failed";
|
|
816
|
+
var resubscribes = (error) => HttpClientError_exports.isHttpClientError(error) || Cause_exports.isTimeoutError(error) || Schema_exports.is(UiFailed)(error) && error.reason !== "account_required";
|
|
817
|
+
var Retrying = class {
|
|
818
|
+
constructor(error, previous) {
|
|
819
|
+
this.error = error;
|
|
820
|
+
this.previous = previous;
|
|
821
|
+
}
|
|
822
|
+
error;
|
|
823
|
+
previous;
|
|
824
|
+
};
|
|
825
|
+
var visibleResult = (result) => {
|
|
826
|
+
const current = AsyncResult_exports.value(result);
|
|
827
|
+
if (Option_exports.isNone(current) || !(current.value instanceof Retrying)) {
|
|
828
|
+
return result;
|
|
829
|
+
}
|
|
830
|
+
const previous = Option_exports.map(
|
|
831
|
+
Option_exports.fromUndefinedOr(current.value.previous),
|
|
832
|
+
AsyncResult_exports.success
|
|
833
|
+
);
|
|
834
|
+
return AsyncResult_exports.isSuccess(result) ? AsyncResult_exports.failureWithPrevious(Cause_exports.fail(current.value.error), { previous, waiting: true }) : AsyncResult_exports.failureWithPrevious(AsyncResult_exports.isFailure(result) ? result.cause : Cause_exports.empty, {
|
|
835
|
+
previous
|
|
836
|
+
});
|
|
837
|
+
};
|
|
796
838
|
var createAppClient = () => {
|
|
797
839
|
const { runtime, atoms } = makeBrowserTelemetry(
|
|
798
840
|
browserSettings("/_executor/api/telemetry", "executor-app-web")
|
|
799
841
|
);
|
|
800
842
|
const browser = atoms(Layer_exports.empty);
|
|
801
|
-
const
|
|
843
|
+
const versionChanged = Effect_exports.sync(() => {
|
|
802
844
|
window.dispatchEvent(new Event("executor:deployment-changed"));
|
|
803
845
|
});
|
|
804
846
|
let pendingWrites = 0;
|
|
@@ -840,14 +882,15 @@ var createAppClient = () => {
|
|
|
840
882
|
const value = yield* api.ui[kind]({ payload: yield* payload(name, input) });
|
|
841
883
|
return yield* Schema_exports.decodeUnknownEffect(decoderOf(output))(value);
|
|
842
884
|
}).pipe(
|
|
843
|
-
Effect_exports.tapErrorTag("UiDeploymentChanged", () =>
|
|
885
|
+
Effect_exports.tapErrorTag("UiDeploymentChanged", () => versionChanged),
|
|
844
886
|
Effect_exports.withSpan(`ui.app.${kind}`, { attributes: { "executor.operation.name": name } })
|
|
845
887
|
);
|
|
846
888
|
const source = (name, input, output) => browser.atom(
|
|
847
889
|
Stream_exports.suspend(() => {
|
|
848
890
|
let previous;
|
|
849
891
|
let attempts = 0;
|
|
850
|
-
|
|
892
|
+
let latest;
|
|
893
|
+
const subscription = Stream_exports.unwrap(
|
|
851
894
|
Effect_exports.gen(function* () {
|
|
852
895
|
const attempt = attempts++;
|
|
853
896
|
const first = yield* pendingSpan("ui.app.first_result", {
|
|
@@ -895,73 +938,94 @@ var createAppClient = () => {
|
|
|
895
938
|
Stream_exports.timeout("45 seconds"),
|
|
896
939
|
Stream_exports.concat(Stream_exports.fail(new UiFailed({ reason: "unavailable" }))),
|
|
897
940
|
Stream_exports.filter((frame) => frame.type !== "heartbeat"),
|
|
898
|
-
Stream_exports.mapEffect(
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
Effect_exports.
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
941
|
+
Stream_exports.mapEffect(
|
|
942
|
+
(frame) => {
|
|
943
|
+
if (frame.type === "failure") return Effect_exports.fail(frame.error);
|
|
944
|
+
const server = externalTrace(frame.trace);
|
|
945
|
+
return Effect_exports.gen(function* () {
|
|
946
|
+
const value = yield* Schema_exports.decodeUnknownEffect(decoderOf(output))(
|
|
947
|
+
frame.value
|
|
948
|
+
).pipe(Effect_exports.mapError(() => new AppQueryFailed()));
|
|
949
|
+
const received = yield* Effect_exports.currentSpan;
|
|
950
|
+
const receivedAt = clock.currentTimeMillisUnsafe();
|
|
951
|
+
const currentRevision = revision++;
|
|
952
|
+
yield* Effect_exports.annotateCurrentSpan({
|
|
953
|
+
"executor.operation.name": name,
|
|
954
|
+
"executor.snapshot.revision": currentRevision,
|
|
955
|
+
"browser.query.elapsed_ms": receivedAt - started,
|
|
956
|
+
"executor.trace.context_valid": Option_exports.isSome(server)
|
|
957
|
+
});
|
|
958
|
+
yield* first.finish(Exit_exports.void);
|
|
959
|
+
let committed = false;
|
|
960
|
+
return {
|
|
961
|
+
value,
|
|
962
|
+
commit: () => {
|
|
963
|
+
if (committed) return;
|
|
964
|
+
committed = true;
|
|
965
|
+
const committedAt = clock.currentTimeMillisUnsafe();
|
|
966
|
+
runtime.runFork(
|
|
967
|
+
Effect_exports.void.pipe(
|
|
968
|
+
Effect_exports.withSpan("ui.app.result.commit", {
|
|
969
|
+
parent: received,
|
|
970
|
+
attributes: {
|
|
971
|
+
"executor.operation.name": name,
|
|
972
|
+
"executor.snapshot.revision": currentRevision,
|
|
973
|
+
"browser.query.elapsed_ms": committedAt - started,
|
|
974
|
+
"browser.query.receive_to_commit_ms": committedAt - receivedAt,
|
|
975
|
+
"browser.page.hidden": document.visibilityState === "hidden"
|
|
976
|
+
}
|
|
977
|
+
})
|
|
978
|
+
)
|
|
979
|
+
);
|
|
980
|
+
}
|
|
981
|
+
};
|
|
982
|
+
}).pipe(
|
|
983
|
+
Effect_exports.withSpan("ui.app.result.receive", {
|
|
984
|
+
parent: Option_exports.isSome(server) ? server.value : first.span,
|
|
985
|
+
kind: "consumer"
|
|
986
|
+
})
|
|
987
|
+
);
|
|
988
|
+
}
|
|
989
|
+
),
|
|
945
990
|
Stream_exports.onExit(finish),
|
|
946
991
|
Stream_exports.provideService(Tracer_exports.ParentSpan, first.span)
|
|
947
992
|
);
|
|
948
993
|
})
|
|
949
994
|
).pipe(
|
|
950
995
|
// Keep the last snapshot while the watcher replaces the document.
|
|
951
|
-
// Unmount or client disposal interrupts the
|
|
996
|
+
// Unmount or client disposal interrupts the version-change wait.
|
|
952
997
|
Stream_exports.catch(
|
|
953
|
-
(error) => Schema_exports.is(
|
|
998
|
+
(error) => Schema_exports.is(UiVersionChanged)(error) ? Stream_exports.unwrap(versionChanged.pipe(Effect_exports.as(Stream_exports.never))) : Stream_exports.fail(error)
|
|
954
999
|
),
|
|
955
|
-
Stream_exports.
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
)
|
|
960
|
-
)
|
|
1000
|
+
Stream_exports.tap(
|
|
1001
|
+
(value) => Effect_exports.sync(() => {
|
|
1002
|
+
latest = value;
|
|
1003
|
+
})
|
|
961
1004
|
)
|
|
962
1005
|
);
|
|
1006
|
+
return Stream_exports.unwrap(
|
|
1007
|
+
Effect_exports.gen(function* () {
|
|
1008
|
+
const retrying = yield* Queue_exports.unbounded();
|
|
1009
|
+
return Stream_exports.merge(
|
|
1010
|
+
subscription.pipe(
|
|
1011
|
+
Stream_exports.retry(
|
|
1012
|
+
resubscribeDelay.pipe(
|
|
1013
|
+
Schedule_exports.while(
|
|
1014
|
+
({ input: input2 }) => !resubscribes(input2) ? false : appFailure(input2) ? Queue_exports.offer(retrying, new Retrying(input2, latest)).pipe(
|
|
1015
|
+
Effect_exports.as(true)
|
|
1016
|
+
) : true
|
|
1017
|
+
)
|
|
1018
|
+
)
|
|
1019
|
+
)
|
|
1020
|
+
),
|
|
1021
|
+
// Shown outside the retried stream, so they do not reset its delay.
|
|
1022
|
+
Stream_exports.fromQueue(retrying),
|
|
1023
|
+
{ haltStrategy: "left" }
|
|
1024
|
+
);
|
|
1025
|
+
})
|
|
1026
|
+
);
|
|
963
1027
|
})
|
|
964
|
-
).pipe(Atom_exports.map(queryResult));
|
|
1028
|
+
).pipe(Atom_exports.map((result) => queryResult(visibleResult(result))));
|
|
965
1029
|
const optimistic = makeOptimisticClient({
|
|
966
1030
|
source,
|
|
967
1031
|
read: (name, input, output) => request("query", name, input, output),
|