@loomwork/ui-hydration 0.0.0-stage → 0.1.0
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/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +398 -2
- package/dist/cache.d.ts +71 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +157 -0
- package/dist/cache.js.map +1 -0
- package/dist/chatSource.d.ts +105 -0
- package/dist/chatSource.d.ts.map +1 -0
- package/dist/chatSource.js +259 -0
- package/dist/chatSource.js.map +1 -0
- package/dist/client.d.ts +17 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +36 -0
- package/dist/client.js.map +1 -0
- package/dist/contentRefs.d.ts +78 -0
- package/dist/contentRefs.d.ts.map +1 -0
- package/dist/contentRefs.js +129 -0
- package/dist/contentRefs.js.map +1 -0
- package/dist/controller.d.ts +228 -0
- package/dist/controller.d.ts.map +1 -0
- package/dist/controller.js +454 -0
- package/dist/controller.js.map +1 -0
- package/dist/dataProvider.d.ts +53 -0
- package/dist/dataProvider.d.ts.map +1 -0
- package/dist/dataProvider.js +77 -0
- package/dist/dataProvider.js.map +1 -0
- package/dist/esm/cache.js +151 -0
- package/dist/esm/cache.js.map +1 -0
- package/dist/esm/chatSource.js +254 -0
- package/dist/esm/chatSource.js.map +1 -0
- package/dist/esm/client.js +15 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/contentRefs.js +119 -0
- package/dist/esm/contentRefs.js.map +1 -0
- package/dist/esm/controller.js +449 -0
- package/dist/esm/controller.js.map +1 -0
- package/dist/esm/dataProvider.js +72 -0
- package/dist/esm/dataProvider.js.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/invoker.js +2 -0
- package/dist/esm/invoker.js.map +1 -0
- package/dist/esm/invokers.js +310 -0
- package/dist/esm/invokers.js.map +1 -0
- package/dist/esm/loomEffectProvider.js +96 -0
- package/dist/esm/loomEffectProvider.js.map +1 -0
- package/dist/esm/params.js +207 -0
- package/dist/esm/params.js.map +1 -0
- package/dist/esm/path.js +24 -0
- package/dist/esm/path.js.map +1 -0
- package/dist/esm/plan.js +190 -0
- package/dist/esm/plan.js.map +1 -0
- package/dist/esm/projection.js +230 -0
- package/dist/esm/projection.js.map +1 -0
- package/dist/esm/provider.js +416 -0
- package/dist/esm/provider.js.map +1 -0
- package/dist/esm/repair.js +53 -0
- package/dist/esm/repair.js.map +1 -0
- package/dist/esm/reshape.js +156 -0
- package/dist/esm/reshape.js.map +1 -0
- package/dist/esm/restricted.js +54 -0
- package/dist/esm/restricted.js.map +1 -0
- package/dist/esm/scheduler.js +247 -0
- package/dist/esm/scheduler.js.map +1 -0
- package/dist/esm/select.js +18 -0
- package/dist/esm/select.js.map +1 -0
- package/dist/esm/shape.js +34 -0
- package/dist/esm/shape.js.map +1 -0
- package/dist/esm/split/client.js +309 -0
- package/dist/esm/split/client.js.map +1 -0
- package/dist/esm/split/index.js +3 -0
- package/dist/esm/split/index.js.map +1 -0
- package/dist/esm/split/server.js +488 -0
- package/dist/esm/split/server.js.map +1 -0
- package/dist/esm/split/shared.js +13 -0
- package/dist/esm/split/shared.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/invoker.d.ts +10 -0
- package/dist/invoker.d.ts.map +1 -0
- package/dist/invoker.js +3 -0
- package/dist/invoker.js.map +1 -0
- package/dist/invokers.d.ts +36 -0
- package/dist/invokers.d.ts.map +1 -0
- package/dist/invokers.js +315 -0
- package/dist/invokers.js.map +1 -0
- package/dist/loomEffectProvider.d.ts +67 -0
- package/dist/loomEffectProvider.d.ts.map +1 -0
- package/dist/loomEffectProvider.js +101 -0
- package/dist/loomEffectProvider.js.map +1 -0
- package/dist/params.d.ts +103 -0
- package/dist/params.d.ts.map +1 -0
- package/dist/params.js +221 -0
- package/dist/params.js.map +1 -0
- package/dist/path.d.ts +12 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +28 -0
- package/dist/path.js.map +1 -0
- package/dist/plan.d.ts +56 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +199 -0
- package/dist/plan.js.map +1 -0
- package/dist/projection.d.ts +122 -0
- package/dist/projection.d.ts.map +1 -0
- package/dist/projection.js +238 -0
- package/dist/projection.js.map +1 -0
- package/dist/provider.d.ts +152 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +421 -0
- package/dist/provider.js.map +1 -0
- package/dist/repair.d.ts +18 -0
- package/dist/repair.d.ts.map +1 -0
- package/dist/repair.js +57 -0
- package/dist/repair.js.map +1 -0
- package/dist/reshape.d.ts +32 -0
- package/dist/reshape.d.ts.map +1 -0
- package/dist/reshape.js +164 -0
- package/dist/reshape.js.map +1 -0
- package/dist/restricted.d.ts +21 -0
- package/dist/restricted.d.ts.map +1 -0
- package/dist/restricted.js +61 -0
- package/dist/restricted.js.map +1 -0
- package/dist/scheduler.d.ts +82 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +254 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/select.d.ts +34 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +21 -0
- package/dist/select.js.map +1 -0
- package/dist/shape.d.ts +3 -0
- package/dist/shape.d.ts.map +1 -0
- package/dist/shape.js +37 -0
- package/dist/shape.js.map +1 -0
- package/dist/split/client.d.ts +132 -0
- package/dist/split/client.d.ts.map +1 -0
- package/dist/split/client.js +313 -0
- package/dist/split/client.js.map +1 -0
- package/dist/split/index.d.ts +5 -0
- package/dist/split/index.d.ts.map +1 -0
- package/dist/split/index.js +14 -0
- package/dist/split/index.js.map +1 -0
- package/dist/split/server.d.ts +160 -0
- package/dist/split/server.d.ts.map +1 -0
- package/dist/split/server.js +496 -0
- package/dist/split/server.js.map +1 -0
- package/dist/split/shared.d.ts +6 -0
- package/dist/split/shared.d.ts.map +1 -0
- package/dist/split/shared.js +19 -0
- package/dist/split/shared.js.map +1 -0
- package/package.json +77 -3
- package/src/cache.ts +211 -0
- package/src/chatSource.ts +374 -0
- package/src/client.ts +46 -0
- package/src/contentRefs.ts +195 -0
- package/src/controller.ts +708 -0
- package/src/dataProvider.ts +141 -0
- package/src/index.ts +86 -0
- package/src/invoker.ts +14 -0
- package/src/invokers.ts +348 -0
- package/src/loomEffectProvider.ts +136 -0
- package/src/params.ts +314 -0
- package/src/path.ts +26 -0
- package/src/plan.ts +197 -0
- package/src/projection.ts +297 -0
- package/src/provider.ts +657 -0
- package/src/repair.ts +70 -0
- package/src/reshape.ts +193 -0
- package/src/restricted.ts +69 -0
- package/src/scheduler.ts +284 -0
- package/src/select.ts +59 -0
- package/src/shape.ts +39 -0
- package/src/split/client.ts +449 -0
- package/src/split/index.ts +18 -0
- package/src/split/server.ts +746 -0
- package/src/split/shared.ts +18 -0
package/dist/provider.js
ADDED
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CONTENT_REF_REFUSED = void 0;
|
|
4
|
+
exports.executeProvider = executeProvider;
|
|
5
|
+
exports.outcomeResult = outcomeResult;
|
|
6
|
+
const classify_1 = require("@loomwork/classify");
|
|
7
|
+
const core_1 = require("@loomwork/core");
|
|
8
|
+
const plugin_sandbox_1 = require("@loomwork/plugin-sandbox");
|
|
9
|
+
const ui_core_1 = require("@loomwork/ui-core");
|
|
10
|
+
const contentRefs_1 = require("./contentRefs");
|
|
11
|
+
const dataProvider_1 = require("./dataProvider");
|
|
12
|
+
const params_1 = require("./params");
|
|
13
|
+
const plan_1 = require("./plan");
|
|
14
|
+
const reshape_1 = require("./reshape");
|
|
15
|
+
async function mapLimit(items, limit, fn) {
|
|
16
|
+
const results = new Array(items.length);
|
|
17
|
+
let cursor = 0;
|
|
18
|
+
const worker = async () => {
|
|
19
|
+
for (;;) {
|
|
20
|
+
const i = cursor++;
|
|
21
|
+
if (i >= items.length)
|
|
22
|
+
return;
|
|
23
|
+
results[i] = await fn(items[i]);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
await Promise.all(Array.from({ length: Math.max(1, Math.min(limit, items.length)) }, worker));
|
|
27
|
+
return results;
|
|
28
|
+
}
|
|
29
|
+
const err = (code, message) => ({ code, severity: "error", message });
|
|
30
|
+
/** A step's invocation failed for a reason other than an input-schema drift. */
|
|
31
|
+
function stepFailure(node, e, signal) {
|
|
32
|
+
if (e instanceof core_1.TypedFailure)
|
|
33
|
+
return err(`tool-${e.channel}`, `step "${node.stepId}" (${node.toolName}) failed on channel ${e.channel}: ${(0, reshape_1.safeStringify)(e.payload)}`);
|
|
34
|
+
if (signal?.aborted)
|
|
35
|
+
return err("aborted", `step "${node.stepId}" aborted`);
|
|
36
|
+
return err("tool-failed", `step "${node.stepId}" (${node.toolName}) failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The shapes an output-drift record carries. Neither value has necessarily been proved walkable
|
|
40
|
+
* (the raw output never went through `shapeHash`): one too deep or too wide simply leaves its
|
|
41
|
+
* field absent — a drift REPORT must never become a throw.
|
|
42
|
+
*/
|
|
43
|
+
function observedShapes(value, raw) {
|
|
44
|
+
const out = {};
|
|
45
|
+
try {
|
|
46
|
+
out.observedShape = (0, plugin_sandbox_1.shapeOf)(value);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// unwalkable: leave absent
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
out.observedRawShape = (0, plugin_sandbox_1.shapeOf)(raw);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// unwalkable: leave absent
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
/** The raw output's shape alone — a failed reshaping has no reshaped value to walk. */
|
|
60
|
+
function observedRawShape(raw) {
|
|
61
|
+
try {
|
|
62
|
+
return { observedRawShape: (0, plugin_sandbox_1.shapeOf)(raw) };
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return {};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** The PUBLIC code of a step refused by the content-reference guard (literal, unproven ref, or a param the gate refused). */
|
|
69
|
+
exports.CONTENT_REF_REFUSED = "content-ref-refused";
|
|
70
|
+
/**
|
|
71
|
+
* The step-level refusals a CLIENT can cause. An explicit set, not a `media-arg-` prefix: the family
|
|
72
|
+
* also holds `media-arg-schema-unknown` (a host/schema defect) and `media-arg-suspect` (a hint), neither
|
|
73
|
+
* of which is a refused argument.
|
|
74
|
+
*/
|
|
75
|
+
const CONTENT_REF_REFUSAL_CODES = new Set([
|
|
76
|
+
"media-arg-literal",
|
|
77
|
+
"media-arg-unproven-ref",
|
|
78
|
+
"media-arg-param-refused",
|
|
79
|
+
]);
|
|
80
|
+
const isContentRefRefusal = (f) => CONTENT_REF_REFUSAL_CODES.has(f.code);
|
|
81
|
+
/**
|
|
82
|
+
* The first finding (graph order) when every step that failed ON ITS OWN failed with the same
|
|
83
|
+
* one of `schema-drift` / `upstream-empty` — the rest were skipped as its dependents
|
|
84
|
+
* (`dependency-failed`) — or when every one of them was refused by the content-reference guard
|
|
85
|
+
* (then `content-ref-refused`, whichever `media-arg-*` case it was). `undefined` for anything else.
|
|
86
|
+
*/
|
|
87
|
+
function onlyFailure(steps, failed) {
|
|
88
|
+
let first;
|
|
89
|
+
for (const step of steps) {
|
|
90
|
+
const f = failed.get(step.stepId);
|
|
91
|
+
if (f === undefined || f.code === "dependency-failed")
|
|
92
|
+
continue;
|
|
93
|
+
if (isContentRefRefusal(f)) {
|
|
94
|
+
if (first !== undefined && first.code !== exports.CONTENT_REF_REFUSED)
|
|
95
|
+
return undefined;
|
|
96
|
+
first ??= err(exports.CONTENT_REF_REFUSED, "a content-reference argument was refused: a content address is a capability and only a reference the host vouches for is accepted");
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (f.code !== "schema-drift" && f.code !== "upstream-empty")
|
|
100
|
+
return undefined;
|
|
101
|
+
if (first !== undefined && f.code !== first.code)
|
|
102
|
+
return undefined;
|
|
103
|
+
first ??= f;
|
|
104
|
+
}
|
|
105
|
+
return first;
|
|
106
|
+
}
|
|
107
|
+
/** A published value; carries `drift` only when an input drift was proceeded past. */
|
|
108
|
+
const okOutcome = (value, findings, drift) => drift.length > 0 ? { ok: true, value, findings, drift } : { ok: true, value, findings };
|
|
109
|
+
async function executeProvider(spec, opts) {
|
|
110
|
+
const findings = [];
|
|
111
|
+
const drift = [];
|
|
112
|
+
const steps = spec.executionGraph;
|
|
113
|
+
if (steps.length === 0)
|
|
114
|
+
return {
|
|
115
|
+
ok: false,
|
|
116
|
+
finding: err("empty-graph", `provider "${spec.handle}" has no steps`),
|
|
117
|
+
drift,
|
|
118
|
+
findings,
|
|
119
|
+
};
|
|
120
|
+
const { waves, cycle } = (0, plan_1.topoWaves)(steps);
|
|
121
|
+
if (cycle.length > 0)
|
|
122
|
+
return {
|
|
123
|
+
ok: false,
|
|
124
|
+
finding: err("graph-cycle", `provider "${spec.handle}" has a dependency cycle through ${cycle.join(", ")}`),
|
|
125
|
+
drift,
|
|
126
|
+
findings,
|
|
127
|
+
};
|
|
128
|
+
const registry = opts.providers ?? dataProvider_1.DEFAULT_DATA_PROVIDERS;
|
|
129
|
+
// Every kind is resolved BEFORE any step runs: an unregistered one must not leave the steps
|
|
130
|
+
// before it having called their targets for an answer nobody will publish.
|
|
131
|
+
const unregistered = [...new Set(steps.map(ui_core_1.stepKind))].filter((k) => !registry.has(k)).sort();
|
|
132
|
+
if (unregistered.length > 0)
|
|
133
|
+
return {
|
|
134
|
+
ok: false,
|
|
135
|
+
finding: err("provider-kind-unregistered", `provider "${spec.handle}" has steps of kind ${unregistered.map((k) => `"${k}"`).join(", ")}, which no data provider is registered for`),
|
|
136
|
+
drift,
|
|
137
|
+
findings,
|
|
138
|
+
};
|
|
139
|
+
const now = opts.now ?? Date.now();
|
|
140
|
+
const supplied = opts.params ?? {};
|
|
141
|
+
const names = (0, params_1.providerParams)(spec);
|
|
142
|
+
const declared = new Set(names);
|
|
143
|
+
const undeclared = Object.keys(supplied)
|
|
144
|
+
.filter((k) => !declared.has(k))
|
|
145
|
+
.sort();
|
|
146
|
+
// Only the params some step declares reach a step — and the argument hook. A hook that could
|
|
147
|
+
// read an undeclared param could make the answer depend on a value no cache key carries.
|
|
148
|
+
const params = (0, params_1.pickParams)(supplied, names);
|
|
149
|
+
if (undeclared.length > 0)
|
|
150
|
+
findings.push({
|
|
151
|
+
code: "param-not-overridable",
|
|
152
|
+
severity: "warn",
|
|
153
|
+
message: `provider "${spec.handle}" declares no overridable argument named ${undeclared.map((k) => `"${k}"`).join(", ")}; ignored`,
|
|
154
|
+
});
|
|
155
|
+
const outputs = new Map();
|
|
156
|
+
const failed = new Map();
|
|
157
|
+
const warnings = new Map();
|
|
158
|
+
const warn = (stepId, f) => {
|
|
159
|
+
const list = warnings.get(stepId);
|
|
160
|
+
if (list === undefined)
|
|
161
|
+
warnings.set(stepId, [f]);
|
|
162
|
+
else
|
|
163
|
+
list.push(f);
|
|
164
|
+
};
|
|
165
|
+
const invokeOpts = {
|
|
166
|
+
label: "loom-ui.hydrate",
|
|
167
|
+
...(opts.signal && { signal: opts.signal }),
|
|
168
|
+
...(opts.principal && { principal: opts.principal }),
|
|
169
|
+
};
|
|
170
|
+
const refEnv = opts.contentRefArgs === undefined
|
|
171
|
+
? undefined
|
|
172
|
+
: (0, contentRefs_1.contentRefEnv)(opts.contentRefArgs, spec, opts.acceptContentRefParam, {
|
|
173
|
+
principalId: opts.principalId,
|
|
174
|
+
principal: opts.principal,
|
|
175
|
+
});
|
|
176
|
+
for (const wave of waves) {
|
|
177
|
+
await mapLimit(wave, opts.concurrency ?? 4, async (node) => {
|
|
178
|
+
if (opts.signal?.aborted) {
|
|
179
|
+
failed.set(node.stepId, err("aborted", `step "${node.stepId}" aborted before it ran`));
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (node.dependsOn.some((d) => failed.has(d))) {
|
|
183
|
+
failed.set(node.stepId, err("dependency-failed", `step "${node.stepId}" skipped: a dependency failed`));
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const args = (0, params_1.prepareArguments)(node, outputs, {
|
|
187
|
+
handle: spec.handle,
|
|
188
|
+
params,
|
|
189
|
+
now,
|
|
190
|
+
...(opts.argumentHook && { hook: opts.argumentHook }),
|
|
191
|
+
...(refEnv !== undefined && {
|
|
192
|
+
guard: (n, applied) => (0, contentRefs_1.checkContentRefs)(n, applied, refEnv).finding,
|
|
193
|
+
finish: (a) => (0, contentRefs_1.finishContentRefArgs)(node, a, refEnv.table),
|
|
194
|
+
}),
|
|
195
|
+
});
|
|
196
|
+
if (!args.ok) {
|
|
197
|
+
failed.set(node.stepId, args.finding);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
for (const f of args.findings)
|
|
201
|
+
warn(node.stepId, f);
|
|
202
|
+
const dataProvider = registry.get((0, ui_core_1.stepKind)(node));
|
|
203
|
+
const call = (expectedPin) => dataProvider.invoke({ stepId: node.stepId, target: node.toolName, args: args.args, expectedPin }, opts.invoker, invokeOpts);
|
|
204
|
+
try {
|
|
205
|
+
outputs.set(node.stepId, await call(node.toolSchemaHash));
|
|
206
|
+
}
|
|
207
|
+
catch (e) {
|
|
208
|
+
if (!(e instanceof core_1.TypedFailure && e.channel === "schemaDrift")) {
|
|
209
|
+
failed.set(node.stepId, stepFailure(node, e, opts.signal));
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const observed = e.payload?.observedHash;
|
|
213
|
+
drift.push({
|
|
214
|
+
kind: "input",
|
|
215
|
+
handle: spec.handle,
|
|
216
|
+
stepId: node.stepId,
|
|
217
|
+
toolName: node.toolName,
|
|
218
|
+
...(node.kind !== undefined && { providerKind: node.kind }),
|
|
219
|
+
expected: node.toolSchemaHash,
|
|
220
|
+
observed: observed ?? "",
|
|
221
|
+
});
|
|
222
|
+
const proceed = opts.inputDrift === "report-and-proceed" &&
|
|
223
|
+
observed !== undefined &&
|
|
224
|
+
observed !== "" &&
|
|
225
|
+
observed !== node.toolSchemaHash;
|
|
226
|
+
if (!proceed) {
|
|
227
|
+
failed.set(node.stepId, err("schema-drift", `step "${node.stepId}" (${node.toolName}) input schema drifted from ${node.toolSchemaHash} to ${observed ?? "?"}`));
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
outputs.set(node.stepId, await call(observed));
|
|
232
|
+
warn(node.stepId, {
|
|
233
|
+
code: "schema-drift-proceeded",
|
|
234
|
+
severity: "warn",
|
|
235
|
+
message: `step "${node.stepId}" (${node.toolName}) input schema drifted from ${node.toolSchemaHash} to ${observed}; loaded once with the observed pin — the provider still needs its repair`,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
catch (retry) {
|
|
239
|
+
failed.set(node.stepId, stepFailure(node, retry, opts.signal));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
// GRAPH order, not completion order: two independent steps that fail (or warn) in a race must
|
|
245
|
+
// produce the same finding list every run, or the surface's text depends on which tool was slower.
|
|
246
|
+
for (const step of steps)
|
|
247
|
+
for (const f of warnings.get(step.stepId) ?? [])
|
|
248
|
+
findings.push(f);
|
|
249
|
+
for (const step of steps) {
|
|
250
|
+
const f = failed.get(step.stepId);
|
|
251
|
+
if (f)
|
|
252
|
+
findings.push(f);
|
|
253
|
+
}
|
|
254
|
+
if (failed.size > 0) {
|
|
255
|
+
// A provider that failed ONLY because of input drift (every step that failed on its own
|
|
256
|
+
// drifted; the rest were skipped as its dependents) answers with the first drift in graph
|
|
257
|
+
// order, so the surface says "waiting for a repair" rather than a generic failure. The same
|
|
258
|
+
// rule for an EMPTY upstream (every step that failed on its own found no such row upstream,
|
|
259
|
+
// `upstream-empty`): the answer is the first one, published `empty` (loom ADR 0100). Any
|
|
260
|
+
// other failure alongside either — or the two mixed — keeps the generic `provider-failed`.
|
|
261
|
+
const only = onlyFailure(steps, failed);
|
|
262
|
+
if (only !== undefined)
|
|
263
|
+
return { ok: false, finding: only, drift, findings };
|
|
264
|
+
return {
|
|
265
|
+
ok: false,
|
|
266
|
+
finding: err("provider-failed", `provider "${spec.handle}": ${failed.size} of ${steps.length} steps failed`),
|
|
267
|
+
drift,
|
|
268
|
+
findings,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
const terminals = (0, plan_1.terminalSteps)(steps);
|
|
272
|
+
const raw = terminals.length === 1
|
|
273
|
+
? outputs.get(terminals[0].stepId)
|
|
274
|
+
: Object.fromEntries(terminals.map((t) => [t.stepId, outputs.get(t.stepId)]));
|
|
275
|
+
const shaped = await (0, reshape_1.reshape)(spec.reshaping, raw, {
|
|
276
|
+
invoker: opts.invoker,
|
|
277
|
+
...(opts.signal && { signal: opts.signal }),
|
|
278
|
+
...(opts.principal && { principal: opts.principal }),
|
|
279
|
+
...(opts.reshapers && { reshapers: opts.reshapers }),
|
|
280
|
+
});
|
|
281
|
+
if (!shaped.ok) {
|
|
282
|
+
findings.push(shaped.finding);
|
|
283
|
+
// Only a failure the OUTPUT demonstrably caused (typed by `reshape`, never read from a
|
|
284
|
+
// message) is output drift a planner can repair — so, like a failed pin, the record carries
|
|
285
|
+
// the raw output's shape and (under `captureSample`) its sample. Infrastructure and transient
|
|
286
|
+
// failures carry no `failureKind`, and stay an error with no drift.
|
|
287
|
+
if (shaped.failureKind !== undefined && opts.signal?.aborted !== true)
|
|
288
|
+
drift.push({
|
|
289
|
+
kind: "output",
|
|
290
|
+
handle: spec.handle,
|
|
291
|
+
expected: "reshape",
|
|
292
|
+
observed: shaped.finding.code,
|
|
293
|
+
reshapeFailure: shaped.finding.code,
|
|
294
|
+
reshapeFailureKind: shaped.failureKind,
|
|
295
|
+
...(terminals.length === 1 && { stepId: terminals[0].stepId }),
|
|
296
|
+
...observedRawShape(raw),
|
|
297
|
+
// An uncloneable output is not a data observation: no sample, even under captureSample.
|
|
298
|
+
...(opts.captureSample === true &&
|
|
299
|
+
shaped.failureKind !== "uncloneable-output" && {
|
|
300
|
+
observedSample: (0, classify_1.tainted)(raw, `provider:${spec.handle}`),
|
|
301
|
+
}),
|
|
302
|
+
});
|
|
303
|
+
return { ok: false, finding: shaped.finding, drift, findings };
|
|
304
|
+
}
|
|
305
|
+
if (spec.outputCheck === "contract")
|
|
306
|
+
return checkContract(spec, shaped.value, raw, opts, drift, findings, terminals);
|
|
307
|
+
if (spec.outputShapeHash === "") {
|
|
308
|
+
findings.push({
|
|
309
|
+
code: "output-shape-unpinned",
|
|
310
|
+
severity: "warn",
|
|
311
|
+
message: `provider "${spec.handle}" declares no outputShapeHash; the value is unchecked`,
|
|
312
|
+
});
|
|
313
|
+
return okOutcome(shaped.value, findings, drift);
|
|
314
|
+
}
|
|
315
|
+
// The shaped value is tool-authored: `shapeHash` refuses a nest past its depth cap (and any
|
|
316
|
+
// value it cannot walk). An unhashable value is an UNVERIFIABLE one — reported as a failure,
|
|
317
|
+
// never published as if the pin had matched, and never as a throw out of this total function.
|
|
318
|
+
let observed;
|
|
319
|
+
try {
|
|
320
|
+
observed = (0, reshape_1.outputShapeHashOf)(shaped.value);
|
|
321
|
+
}
|
|
322
|
+
catch (e) {
|
|
323
|
+
const f = err("output-shape-unhashable", `provider "${spec.handle}" output cannot be shape-hashed, so the pinned ${spec.outputShapeHash} cannot be checked: ${e instanceof Error ? e.message : String(e)}`);
|
|
324
|
+
findings.push(f);
|
|
325
|
+
return { ok: false, finding: f, drift, findings };
|
|
326
|
+
}
|
|
327
|
+
if (observed !== spec.outputShapeHash) {
|
|
328
|
+
drift.push({
|
|
329
|
+
kind: "output",
|
|
330
|
+
handle: spec.handle,
|
|
331
|
+
expected: spec.outputShapeHash,
|
|
332
|
+
observed,
|
|
333
|
+
...(terminals.length === 1 && { stepId: terminals[0].stepId }),
|
|
334
|
+
...observedShapes(shaped.value, raw),
|
|
335
|
+
...(opts.captureSample === true && {
|
|
336
|
+
observedSample: (0, classify_1.tainted)(raw, `provider:${spec.handle}`),
|
|
337
|
+
}),
|
|
338
|
+
});
|
|
339
|
+
const f = err("output-shape-drift", `provider "${spec.handle}" output shape ${observed} differs from the pinned ${spec.outputShapeHash}`);
|
|
340
|
+
findings.push(f);
|
|
341
|
+
return { ok: false, finding: f, drift, findings };
|
|
342
|
+
}
|
|
343
|
+
return okOutcome(shaped.value, findings, drift);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* `outputCheck: "contract"`: the reshaped value must satisfy the value contract of EVERY kind the
|
|
347
|
+
* handle feeds (each widget renders the same value); kinds are checked in sorted order and the
|
|
348
|
+
* first failure is the drift. `undefined` is refused explicitly — `checkKindValue` passes it as
|
|
349
|
+
* "not hydrated yet", but a load that produced nothing is not a healthy value.
|
|
350
|
+
*/
|
|
351
|
+
function checkContract(spec, value, raw, opts, drift, findings, terminals) {
|
|
352
|
+
const kinds = [...new Set(opts.kinds ?? [])].sort();
|
|
353
|
+
if (kinds.length === 0) {
|
|
354
|
+
const f = err("output-contract-unbound", `provider "${spec.handle}" checks its output by contract, but no bound kinds were supplied; the value cannot be checked`);
|
|
355
|
+
findings.push(f);
|
|
356
|
+
return { ok: false, finding: f, drift, findings };
|
|
357
|
+
}
|
|
358
|
+
// A contract check over a kind with NO contract passes every value, and a green check nobody
|
|
359
|
+
// populated reads as coverage. So it is a refusal — and no drift record: reshaping the value
|
|
360
|
+
// differently cannot repair a missing contract, which is the catalogue's to declare.
|
|
361
|
+
const uncontracted = kinds.filter((k) => !(0, ui_core_1.hasKindContract)(k, opts.contracts));
|
|
362
|
+
if (uncontracted.length > 0) {
|
|
363
|
+
const f = err("output-contract-missing", `provider "${spec.handle}" checks its output by contract, but kind${uncontracted.length > 1 ? "s" : ""} ${uncontracted.map((k) => `"${k}"`).join(", ")} ${uncontracted.length > 1 ? "have" : "has"} no value contract (declare one in the catalogue's valueContracts); the value cannot be checked`);
|
|
364
|
+
findings.push(f);
|
|
365
|
+
return { ok: false, finding: f, drift, findings };
|
|
366
|
+
}
|
|
367
|
+
for (const kind of kinds) {
|
|
368
|
+
const r = value === undefined
|
|
369
|
+
? {
|
|
370
|
+
ok: false,
|
|
371
|
+
finding: err("value-contract", `value for kind "${kind}" is undefined: the reshaping produced nothing`),
|
|
372
|
+
}
|
|
373
|
+
: (0, ui_core_1.checkKindValue)(kind, value, opts.contracts);
|
|
374
|
+
if (r.ok)
|
|
375
|
+
continue;
|
|
376
|
+
let observed = "unhashable";
|
|
377
|
+
try {
|
|
378
|
+
observed = (0, reshape_1.outputShapeHashOf)(value);
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
// Too deep to hash: the contract failure below is still reported.
|
|
382
|
+
}
|
|
383
|
+
drift.push({
|
|
384
|
+
kind: "output",
|
|
385
|
+
handle: spec.handle,
|
|
386
|
+
expected: `contract:${kind}`,
|
|
387
|
+
observed,
|
|
388
|
+
contractKind: kind,
|
|
389
|
+
...(terminals.length === 1 && { stepId: terminals[0].stepId }),
|
|
390
|
+
...observedShapes(value, raw),
|
|
391
|
+
...(opts.captureSample === true && {
|
|
392
|
+
observedSample: (0, classify_1.tainted)(raw, `provider:${spec.handle}`),
|
|
393
|
+
}),
|
|
394
|
+
});
|
|
395
|
+
const f = err("output-contract-drift", `provider "${spec.handle}": ${r.finding.message}`);
|
|
396
|
+
findings.push(f);
|
|
397
|
+
return { ok: false, finding: f, drift, findings };
|
|
398
|
+
}
|
|
399
|
+
return okOutcome(value, findings, drift);
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* What an outcome publishes — the ONE mapping both the in-process controller and `serveHandle`
|
|
403
|
+
* use, so split and in-process hydration cannot disagree: a value is `ready` (carrying the first
|
|
404
|
+
* warning, e.g. a proceeded drift); an `upstream-empty` failure is `empty` — checked FIRST, and
|
|
405
|
+
* carrying no value (loom ADR 0100: a producer MUST clear the value beside `empty`); a failure
|
|
406
|
+
* with drift is `stale` — unless its only drift is a failed reshaping (`reshapeFailure`), which
|
|
407
|
+
* stays `error` as it always was — and any other failure `error`.
|
|
408
|
+
*/
|
|
409
|
+
function outcomeResult(outcome) {
|
|
410
|
+
if (outcome.ok) {
|
|
411
|
+
const warn = outcome.findings.find((f) => f.severity === "warn");
|
|
412
|
+
return warn === undefined
|
|
413
|
+
? { state: "ready", value: outcome.value }
|
|
414
|
+
: { state: "ready", value: outcome.value, finding: warn };
|
|
415
|
+
}
|
|
416
|
+
if (outcome.finding.code === "upstream-empty")
|
|
417
|
+
return { state: "empty", finding: outcome.finding };
|
|
418
|
+
const stale = outcome.drift.some((d) => d.reshapeFailure === undefined);
|
|
419
|
+
return { state: stale ? "stale" : "error", finding: outcome.finding };
|
|
420
|
+
}
|
|
421
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/repair.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Finding, Operation, ProviderSpec } from "@loomwork/ui-core";
|
|
2
|
+
import type { DriftRecord } from "./provider";
|
|
3
|
+
export declare const SCHEMA_REPAIRED = "SCHEMA_REPAIRED";
|
|
4
|
+
export interface SchemaRepairedPayload {
|
|
5
|
+
readonly experienceId: string;
|
|
6
|
+
readonly versionHash: string;
|
|
7
|
+
readonly handle: string;
|
|
8
|
+
readonly drift: readonly DriftRecord[];
|
|
9
|
+
readonly op: Operation;
|
|
10
|
+
}
|
|
11
|
+
export declare function remapOperation(spec: ProviderSpec, drift: readonly DriftRecord[]): {
|
|
12
|
+
ok: true;
|
|
13
|
+
op: Operation;
|
|
14
|
+
} | {
|
|
15
|
+
ok: false;
|
|
16
|
+
finding: Finding;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=repair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair.d.ts","sourceRoot":"","sources":["../src/repair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAS9C,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;CACxB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,SAAS,WAAW,EAAE,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA8C/D"}
|
package/dist/repair.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SCHEMA_REPAIRED = void 0;
|
|
4
|
+
exports.remapOperation = remapOperation;
|
|
5
|
+
// ── Crossing the determinism boundary ─────────────────────────────────────────
|
|
6
|
+
// Hydration REPORTS drift; it never repairs. The app runs a durable loom execution that applies
|
|
7
|
+
// the operation built here (via core's `apply`, so the artifact's lineage records it), emits
|
|
8
|
+
// SCHEMA_REPAIRED with this payload, and re-seals. Input drift (a tool's input schema moved) is a
|
|
9
|
+
// pin move and can be remapped mechanically; output drift (the reshaped value's shape changed)
|
|
10
|
+
// means the reshaping is wrong for the data and needs the planner — that is a different slice.
|
|
11
|
+
exports.SCHEMA_REPAIRED = "SCHEMA_REPAIRED";
|
|
12
|
+
function remapOperation(spec, drift) {
|
|
13
|
+
if (drift.length === 0)
|
|
14
|
+
return {
|
|
15
|
+
ok: false,
|
|
16
|
+
finding: { code: "repair-mismatch", severity: "error", message: "no drift to repair" },
|
|
17
|
+
};
|
|
18
|
+
if (drift.some((d) => d.kind === "output"))
|
|
19
|
+
return {
|
|
20
|
+
ok: false,
|
|
21
|
+
finding: {
|
|
22
|
+
code: "repair-needs-planner",
|
|
23
|
+
severity: "error",
|
|
24
|
+
message: `provider "${spec.handle}": output shape drifted; remapping a pin cannot fix a reshaping that no longer matches the data`,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
const steps = new Map(spec.executionGraph.map((s) => [s.stepId, s]));
|
|
28
|
+
for (const d of drift) {
|
|
29
|
+
if (d.handle !== spec.handle)
|
|
30
|
+
return {
|
|
31
|
+
ok: false,
|
|
32
|
+
finding: {
|
|
33
|
+
code: "repair-mismatch",
|
|
34
|
+
severity: "error",
|
|
35
|
+
message: `drift for "${d.handle}" applied to provider "${spec.handle}"`,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
if (d.stepId === undefined || !steps.has(d.stepId))
|
|
39
|
+
return {
|
|
40
|
+
ok: false,
|
|
41
|
+
finding: {
|
|
42
|
+
code: "repair-mismatch",
|
|
43
|
+
severity: "error",
|
|
44
|
+
message: `drift names step "${d.stepId ?? "?"}", which provider "${spec.handle}" does not have`,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const observedByStep = new Map(drift.map((d) => [d.stepId, d.observed]));
|
|
49
|
+
const executionGraph = spec.executionGraph.map((s) => observedByStep.has(s.stepId)
|
|
50
|
+
? { ...s, toolSchemaHash: observedByStep.get(s.stepId) }
|
|
51
|
+
: s);
|
|
52
|
+
return {
|
|
53
|
+
ok: true,
|
|
54
|
+
op: { type: "remapProvider", handle: spec.handle, spec: { ...spec, executionGraph } },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=repair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair.js","sourceRoot":"","sources":["../src/repair.ts"],"names":[],"mappings":";;;AAoBA,wCAiDC;AAlED,iFAAiF;AACjF,gGAAgG;AAChG,6FAA6F;AAC7F,kGAAkG;AAClG,+FAA+F;AAC/F,+FAA+F;AAElF,QAAA,eAAe,GAAG,iBAAiB,CAAC;AAUjD,SAAgB,cAAc,CAC5B,IAAkB,EAClB,KAA6B;IAE7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QACpB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE;SACvF,CAAC;IACJ,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;QACxC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE;gBACP,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,aAAa,IAAI,CAAC,MAAM,iGAAiG;aACnI;SACF,CAAC;IACJ,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAU,CAAC,CAAC,CAAC;IAC9E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAC1B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE;oBACP,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,cAAc,CAAC,CAAC,MAAM,0BAA0B,IAAI,CAAC,MAAM,GAAG;iBACxE;aACF,CAAC;QACJ,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAChD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE;oBACP,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,qBAAqB,CAAC,CAAC,MAAM,IAAI,GAAG,sBAAsB,IAAI,CAAC,MAAM,iBAAiB;iBAChG;aACF,CAAC;IACN,CAAC;IACD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACnD,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1B,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAW,EAAE;QAClE,CAAC,CAAC,CAAC,CACN,CAAC;IACF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,EAAE;KACtF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { TransientInvokeOptions } from "@loomwork/effect-runtime";
|
|
2
|
+
import type { ProviderSpec } from "@loomwork/ui-core";
|
|
3
|
+
import type { TransientInvoker } from "./invoker";
|
|
4
|
+
import { type ReshapeResult } from "./select";
|
|
5
|
+
/** A host-registered reshaper: the raw terminal output in, the widget's value out. */
|
|
6
|
+
export type Reshaper = (input: unknown) => unknown | Promise<unknown>;
|
|
7
|
+
/** Where `Named` reshaping looks a name up. Injected — hydration registers nothing itself. */
|
|
8
|
+
export interface ReshaperRegistry {
|
|
9
|
+
get(name: string): Reshaper | undefined;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A registry over a plain record. Map-backed, so only the record's OWN entries are registered —
|
|
13
|
+
* `"constructor"` or `"__proto__"` never resolve to something on a prototype.
|
|
14
|
+
*/
|
|
15
|
+
export declare function defineReshapers(entries: Readonly<Record<string, Reshaper>>): ReshaperRegistry;
|
|
16
|
+
/**
|
|
17
|
+
* A finding MESSAGE must never be the thing that throws. A `TypedFailure` payload is authored by
|
|
18
|
+
* a tool server or a sandbox script — it can be cyclic, or carry a bigint, and `JSON.stringify`
|
|
19
|
+
* throws on both. Losing the payload text is a far better outcome than losing the finding.
|
|
20
|
+
* (Not exported from the package index: it exists for this package's message building.)
|
|
21
|
+
*/
|
|
22
|
+
export declare function safeStringify(v: unknown): string;
|
|
23
|
+
export declare function reshape(reshaping: ProviderSpec["reshaping"], raw: unknown, ctx: {
|
|
24
|
+
invoker: TransientInvoker;
|
|
25
|
+
signal?: AbortSignal;
|
|
26
|
+
principal?: TransientInvokeOptions["principal"];
|
|
27
|
+
reshapers?: ReshaperRegistry;
|
|
28
|
+
}): Promise<ReshapeResult>;
|
|
29
|
+
export { outputShapeHashOf } from "./shape";
|
|
30
|
+
export { jsonPathSelect } from "./select";
|
|
31
|
+
export type { ReshapeFailureKind, ReshapeResult } from "./select";
|
|
32
|
+
//# sourceMappingURL=reshape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reshape.d.ts","sourceRoot":"","sources":["../src/reshape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,KAAK,EAAW,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAA2B,KAAK,aAAa,EAAkB,MAAM,UAAU,CAAC;AAiCvF,sFAAsF;AACtF,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtE,8FAA8F;AAC9F,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,gBAAgB,CAG7F;AAqED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAMhD;AAED,wBAAsB,OAAO,CAC3B,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,EACpC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE;IACH,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B,GACA,OAAO,CAAC,aAAa,CAAC,CA2CxB;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|