@flowdesk/opencode-plugin 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.
@@ -0,0 +1,458 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
3
+ import { resolve, sep } from "node:path";
4
+ import { applyBootstrapWriteIntentsToDurableState, invalid, prepareRedactedBootstrapArtifactWriteIntent, valid, validateOpaqueRef } from "@flowdesk/core";
5
+ import { materializeFlowDeskPortableCommandFiles } from "./commands.js";
6
+ const disabledBootstrapInstallAuthority = {
7
+ productionRegistrationEligible: false,
8
+ commandAliasEligible: false,
9
+ dispatchApprovalEligible: false,
10
+ realOpenCodeDispatch: false,
11
+ actualLaneLaunch: false,
12
+ providerCall: false,
13
+ runtimeExecution: false,
14
+ fallbackAuthority: false,
15
+ hardCancelOrNoReplyAuthority: false
16
+ };
17
+ const consumedBootstrapConfirmationRefs = new Set();
18
+ const bootstrapConfirmationLedgerSchemaVersion = "flowdesk.bootstrap_confirmation_consumption.v1";
19
+ const safeLedgerConfirmationRefPattern = /^[A-Za-z0-9_.:-]+$/;
20
+ function resultBase() {
21
+ return { bootstrapArtifactsWritten: 0, commandFilesWritten: 0, aliasFilesWritten: 0, ...disabledBootstrapInstallAuthority };
22
+ }
23
+ function expectedTypedPhrase(targetProfileRef, profileRootRef, confirmationRef, installPlanId) {
24
+ return `install FlowDesk release1 ${targetProfileRef} ${profileRootRef} ${confirmationRef} ${installPlanId}`;
25
+ }
26
+ export function expectedFlowDeskRelease1BootstrapApprovalPhrase(profileRootDir, targetProfileRef, confirmationRef) {
27
+ return expectedTypedPhrase(targetProfileRef, flowDeskBootstrapProfileRootRef(profileRootDir), confirmationRef, ids(targetProfileRef).installPlanId);
28
+ }
29
+ export function prepareFlowDeskRelease1BootstrapTypedConfirmation(input) {
30
+ const artifactIds = ids(input.targetProfileRef);
31
+ return {
32
+ confirmationRef: input.confirmationRef,
33
+ targetProfileRef: input.targetProfileRef,
34
+ profileRootRef: flowDeskBootstrapProfileRootRef(input.profileRootDir),
35
+ installPlanRef: artifactIds.installPlanId,
36
+ rollbackPlanRef: artifactIds.rollbackPlanId,
37
+ expiresAt: input.expiresAt,
38
+ actorClass: "user",
39
+ typedPhrase: input.typedPhrase
40
+ };
41
+ }
42
+ function safeHash(value) {
43
+ let hash = 2166136261;
44
+ for (const char of value) {
45
+ hash ^= char.charCodeAt(0);
46
+ hash = Math.imul(hash, 16777619);
47
+ }
48
+ return (hash >>> 0).toString(16).padStart(8, "0");
49
+ }
50
+ function typedPhraseHash(value) {
51
+ return createHash("sha256").update(value, "utf8").digest("hex");
52
+ }
53
+ export function flowDeskBootstrapProfileRootRef(profileRootDir) {
54
+ return `profile-root-${safeHash(resolve(profileRootDir))}`;
55
+ }
56
+ function validateRequest(request, artifactIds, now) {
57
+ const errors = [];
58
+ if (typeof request.profileRootDir !== "string" || request.profileRootDir.trim().length === 0)
59
+ errors.push("profileRootDir is required");
60
+ if (typeof request.durableStateRootDir !== "string" || request.durableStateRootDir.trim().length === 0)
61
+ errors.push("durableStateRootDir is required");
62
+ errors.push(...validateOpaqueRef(request.targetProfileRef, "targetProfileRef").errors);
63
+ const derivedProfileRootRef = flowDeskBootstrapProfileRootRef(request.profileRootDir);
64
+ errors.push(...validateOpaqueRef(derivedProfileRootRef, "derivedProfileRootRef").errors);
65
+ const confirmation = request.typedConfirmation;
66
+ if (confirmation === undefined || confirmation === null || typeof confirmation !== "object")
67
+ errors.push("typedConfirmation is required");
68
+ else {
69
+ errors.push(...validateOpaqueRef(confirmation.confirmationRef, "typedConfirmation.confirmationRef").errors);
70
+ errors.push(...validateOpaqueRef(confirmation.targetProfileRef, "typedConfirmation.targetProfileRef").errors);
71
+ errors.push(...validateOpaqueRef(confirmation.profileRootRef, "typedConfirmation.profileRootRef").errors);
72
+ errors.push(...validateOpaqueRef(confirmation.installPlanRef, "typedConfirmation.installPlanRef").errors);
73
+ errors.push(...validateOpaqueRef(confirmation.rollbackPlanRef, "typedConfirmation.rollbackPlanRef").errors);
74
+ if (consumedBootstrapConfirmationRefs.has(confirmation.confirmationRef))
75
+ errors.push("typed confirmation has already been consumed");
76
+ if (confirmation.targetProfileRef !== request.targetProfileRef)
77
+ errors.push("typed confirmation must bind target profile");
78
+ if (confirmation.profileRootRef !== derivedProfileRootRef)
79
+ errors.push("typed confirmation must bind selected profile root");
80
+ if (confirmation.installPlanRef !== artifactIds.installPlanId)
81
+ errors.push("typed confirmation must bind install plan");
82
+ if (confirmation.rollbackPlanRef !== artifactIds.rollbackPlanId)
83
+ errors.push("typed confirmation must bind rollback plan");
84
+ if (confirmation.actorClass !== "user")
85
+ errors.push("typed confirmation actor must be user");
86
+ if (confirmation.typedPhrase !== expectedTypedPhrase(request.targetProfileRef, derivedProfileRootRef, confirmation.confirmationRef, artifactIds.installPlanId))
87
+ errors.push("typed confirmation phrase is invalid");
88
+ const expiresAtMs = Date.parse(confirmation.expiresAt);
89
+ if (!Number.isFinite(expiresAtMs) || expiresAtMs <= now.getTime())
90
+ errors.push("typed confirmation is expired or invalid");
91
+ }
92
+ return errors.length === 0 ? valid() : invalid(...errors);
93
+ }
94
+ function ids(targetProfileRef) {
95
+ const suffix = targetProfileRef.replace(/[^A-Za-z0-9_.:-]/g, "-").slice(0, 48);
96
+ return {
97
+ installPlanId: `install-plan-${suffix}`,
98
+ generationId: `generation-${suffix}`,
99
+ rollbackPlanId: `rollback-plan-${suffix}`,
100
+ reportId: `report-${suffix}`,
101
+ handoffId: `handoff-${suffix}`
102
+ };
103
+ }
104
+ function validateSafeLedgerConfirmationRef(confirmationRef) {
105
+ const errors = [...validateOpaqueRef(confirmationRef, "typedConfirmation.confirmationRef").errors];
106
+ if (!safeLedgerConfirmationRefPattern.test(confirmationRef) || confirmationRef === "." || confirmationRef === "..") {
107
+ errors.push("typed confirmation ref is not safe for durable ledger path");
108
+ }
109
+ return errors.length === 0 ? valid() : invalid(...errors);
110
+ }
111
+ function pathIsInside(parent, child) {
112
+ const parentPrefix = parent.endsWith(sep) ? parent : `${parent}${sep}`;
113
+ return child === parent || child.startsWith(parentPrefix);
114
+ }
115
+ function bootstrapConfirmationLedgerLocation(durableStateRootDir, confirmationRef) {
116
+ const refValidation = validateSafeLedgerConfirmationRef(confirmationRef);
117
+ if (!refValidation.ok)
118
+ return refValidation;
119
+ const rootDir = resolve(durableStateRootDir);
120
+ const ledgerDir = resolve(rootDir, ".flowdesk", "bootstrap", "confirmations");
121
+ const ledgerPath = resolve(ledgerDir, `${confirmationRef}.json`);
122
+ if (!pathIsInside(rootDir, ledgerPath)) {
123
+ return invalid("typed confirmation ledger path escapes durable state root");
124
+ }
125
+ return { ...valid(), rootDir, ledgerPath, ledgerDir };
126
+ }
127
+ function validateRealLedgerDirectory(location, create) {
128
+ let rootRealPath;
129
+ try {
130
+ const rootStat = lstatSync(location.rootDir);
131
+ if (rootStat.isSymbolicLink() || !rootStat.isDirectory())
132
+ return invalid("typed confirmation durable root is not a real directory");
133
+ rootRealPath = realpathSync(location.rootDir);
134
+ }
135
+ catch (error) {
136
+ const message = error instanceof Error ? error.message : "unknown error";
137
+ return invalid(`typed confirmation durable root is unavailable: ${message}`);
138
+ }
139
+ const directories = [resolve(location.rootDir, ".flowdesk"), resolve(location.rootDir, ".flowdesk", "bootstrap"), location.ledgerDir];
140
+ for (const directory of directories) {
141
+ try {
142
+ const stat = lstatSync(directory);
143
+ if (stat.isSymbolicLink())
144
+ return invalid("typed confirmation durable ledger directory must not be a symlink");
145
+ if (!stat.isDirectory())
146
+ return invalid("typed confirmation durable ledger directory is not a directory");
147
+ }
148
+ catch (error) {
149
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
150
+ if (!create)
151
+ return valid();
152
+ try {
153
+ mkdirSync(directory);
154
+ }
155
+ catch (mkdirError) {
156
+ const message = mkdirError instanceof Error ? mkdirError.message : "unknown error";
157
+ return invalid(`typed confirmation durable ledger directory creation failed: ${message}`);
158
+ }
159
+ }
160
+ else {
161
+ const message = error instanceof Error ? error.message : "unknown error";
162
+ return invalid(`typed confirmation durable ledger directory is unavailable: ${message}`);
163
+ }
164
+ }
165
+ let realDirectory;
166
+ try {
167
+ const stat = lstatSync(directory);
168
+ if (stat.isSymbolicLink())
169
+ return invalid("typed confirmation durable ledger directory must not be a symlink");
170
+ if (!stat.isDirectory())
171
+ return invalid("typed confirmation durable ledger directory is not a directory");
172
+ realDirectory = realpathSync(directory);
173
+ }
174
+ catch (error) {
175
+ const message = error instanceof Error ? error.message : "unknown error";
176
+ return invalid(`typed confirmation durable ledger directory validation failed: ${message}`);
177
+ }
178
+ if (!pathIsInside(rootRealPath, realDirectory))
179
+ return invalid("typed confirmation durable ledger directory escapes durable state root");
180
+ }
181
+ return valid();
182
+ }
183
+ function readExistingDurableConfirmationLedger(location) {
184
+ const directoryValidation = validateRealLedgerDirectory(location, false);
185
+ if (!directoryValidation.ok)
186
+ return directoryValidation;
187
+ try {
188
+ const stat = lstatSync(location.ledgerPath);
189
+ if (stat.isSymbolicLink())
190
+ return invalid("typed confirmation durable ledger file must not be a symlink");
191
+ if (!stat.isFile())
192
+ return invalid("typed confirmation durable ledger path is not a file");
193
+ }
194
+ catch (error) {
195
+ if (error instanceof Error && "code" in error && error.code === "ENOENT")
196
+ return valid();
197
+ const message = error instanceof Error ? error.message : "unknown error";
198
+ return invalid(`typed confirmation durable ledger is unavailable: ${message}`);
199
+ }
200
+ try {
201
+ return { ...valid(), ledger: JSON.parse(readFileSync(location.ledgerPath, "utf8")) };
202
+ }
203
+ catch {
204
+ return invalid("typed confirmation durable ledger is unreadable");
205
+ }
206
+ }
207
+ function expectedConfirmationLedger(request, status, createdAt, consumedAt) {
208
+ const confirmation = request.typedConfirmation;
209
+ const ledger = {
210
+ schema_version: bootstrapConfirmationLedgerSchemaVersion,
211
+ confirmation_ref: confirmation.confirmationRef,
212
+ status,
213
+ target_profile_ref: confirmation.targetProfileRef,
214
+ profile_root_ref: confirmation.profileRootRef,
215
+ install_plan_ref: confirmation.installPlanRef,
216
+ rollback_plan_ref: confirmation.rollbackPlanRef,
217
+ typed_phrase_hash: typedPhraseHash(confirmation.typedPhrase),
218
+ created_at: createdAt,
219
+ expires_at: confirmation.expiresAt,
220
+ actor_class: confirmation.actorClass
221
+ };
222
+ if (consumedAt !== undefined)
223
+ ledger.consumed_at = consumedAt;
224
+ return ledger;
225
+ }
226
+ function existingLedgerBindingMismatches(ledger, expected) {
227
+ const checks = [
228
+ ["schema_version", expected.schema_version],
229
+ ["confirmation_ref", expected.confirmation_ref],
230
+ ["target_profile_ref", expected.target_profile_ref],
231
+ ["profile_root_ref", expected.profile_root_ref],
232
+ ["install_plan_ref", expected.install_plan_ref],
233
+ ["rollback_plan_ref", expected.rollback_plan_ref],
234
+ ["typed_phrase_hash", expected.typed_phrase_hash],
235
+ ["expires_at", expected.expires_at],
236
+ ["actor_class", expected.actor_class]
237
+ ];
238
+ return checks.flatMap(([key, value]) => ledger[key] === value ? [] : [String(key)]);
239
+ }
240
+ function validateDurableConfirmationLedgerAvailable(request, nowIso) {
241
+ const pathResult = bootstrapConfirmationLedgerLocation(request.durableStateRootDir, request.typedConfirmation.confirmationRef);
242
+ if (!pathResult.ok)
243
+ return pathResult;
244
+ if (pathResult.rootDir === undefined || pathResult.ledgerPath === undefined || pathResult.ledgerDir === undefined)
245
+ return invalid("typed confirmation durable ledger path is unavailable");
246
+ const readResult = readExistingDurableConfirmationLedger(pathResult);
247
+ if (!readResult.ok)
248
+ return readResult;
249
+ if (readResult.ledger === undefined)
250
+ return valid();
251
+ const ledger = readResult.ledger;
252
+ const expected = expectedConfirmationLedger(request, "pending", nowIso);
253
+ const mismatches = existingLedgerBindingMismatches(ledger, expected);
254
+ if (mismatches.length > 0)
255
+ return invalid("typed confirmation durable ledger binding mismatch");
256
+ if (ledger.status === "pending")
257
+ return invalid("typed confirmation has already been claimed by durable ledger");
258
+ if (ledger.status === "consumed")
259
+ return invalid("typed confirmation has already been consumed by durable ledger");
260
+ return invalid("typed confirmation durable ledger status is invalid");
261
+ }
262
+ function claimPendingDurableConfirmationLedger(request, nowIso) {
263
+ const pathResult = bootstrapConfirmationLedgerLocation(request.durableStateRootDir, request.typedConfirmation.confirmationRef);
264
+ if (!pathResult.ok)
265
+ return pathResult;
266
+ if (pathResult.rootDir === undefined || pathResult.ledgerPath === undefined || pathResult.ledgerDir === undefined)
267
+ return invalid("typed confirmation durable ledger path is unavailable");
268
+ const location = pathResult;
269
+ const existing = readExistingDurableConfirmationLedger(location);
270
+ if (!existing.ok)
271
+ return existing;
272
+ if (existing.ledger !== undefined) {
273
+ const expected = expectedConfirmationLedger(request, "pending", nowIso);
274
+ const mismatches = existingLedgerBindingMismatches(existing.ledger, expected);
275
+ if (mismatches.length > 0)
276
+ return invalid("typed confirmation durable ledger binding mismatch");
277
+ if (existing.ledger.status === "pending")
278
+ return invalid("typed confirmation has already been claimed by durable ledger");
279
+ if (existing.ledger.status === "consumed")
280
+ return invalid("typed confirmation has already been consumed by durable ledger");
281
+ return invalid("typed confirmation durable ledger status is invalid");
282
+ }
283
+ const directoryValidation = validateRealLedgerDirectory(location, true);
284
+ if (!directoryValidation.ok)
285
+ return directoryValidation;
286
+ try {
287
+ writeFileSync(location.ledgerPath, `${JSON.stringify(expectedConfirmationLedger(request, "pending", nowIso), null, 2)}\n`, { encoding: "utf8", flag: "wx" });
288
+ return valid();
289
+ }
290
+ catch (error) {
291
+ const message = error instanceof Error ? error.message : "unknown error";
292
+ return invalid(`typed confirmation durable ledger claim failed: ${message}`);
293
+ }
294
+ }
295
+ function markDurableConfirmationLedgerConsumed(request, nowIso) {
296
+ const pathResult = bootstrapConfirmationLedgerLocation(request.durableStateRootDir, request.typedConfirmation.confirmationRef);
297
+ if (!pathResult.ok)
298
+ return pathResult;
299
+ if (pathResult.rootDir === undefined || pathResult.ledgerPath === undefined || pathResult.ledgerDir === undefined)
300
+ return invalid("typed confirmation durable ledger path is unavailable");
301
+ const location = pathResult;
302
+ const existing = readExistingDurableConfirmationLedger(location);
303
+ if (!existing.ok)
304
+ return existing;
305
+ if (existing.ledger === undefined)
306
+ return invalid("typed confirmation durable ledger claim is missing");
307
+ const createdAt = typeof existing.ledger.created_at === "string" ? existing.ledger.created_at : undefined;
308
+ if (createdAt === undefined)
309
+ return invalid("typed confirmation durable ledger claim timestamp is invalid");
310
+ const expected = expectedConfirmationLedger(request, "pending", createdAt);
311
+ const mismatches = existingLedgerBindingMismatches(existing.ledger, expected);
312
+ if (mismatches.length > 0)
313
+ return invalid("typed confirmation durable ledger binding mismatch");
314
+ if (existing.ledger.status !== "pending")
315
+ return invalid("typed confirmation durable ledger is not pending");
316
+ const directoryValidation = validateRealLedgerDirectory(location, false);
317
+ if (!directoryValidation.ok)
318
+ return directoryValidation;
319
+ const tempPath = resolve(location.ledgerDir, `.${request.typedConfirmation.confirmationRef}.${process.pid}.${Date.now()}.tmp`);
320
+ try {
321
+ writeFileSync(tempPath, `${JSON.stringify(expectedConfirmationLedger(request, "consumed", createdAt, nowIso), null, 2)}\n`, { encoding: "utf8", flag: "wx" });
322
+ renameSync(tempPath, location.ledgerPath);
323
+ return valid();
324
+ }
325
+ catch (error) {
326
+ rmSync(tempPath, { force: true });
327
+ const message = error instanceof Error ? error.message : "unknown error";
328
+ return invalid(`typed confirmation durable ledger consume update failed: ${message}`);
329
+ }
330
+ }
331
+ function installPlan(nowIso, targetProfileRef, typedConfirmationRef, installPlanId, rollbackPlanId) {
332
+ return {
333
+ schema_version: "flowdesk.bootstrap_install_plan.v1",
334
+ install_plan_id: installPlanId,
335
+ created_at: nowIso,
336
+ target_profile_ref: targetProfileRef,
337
+ release_mode: "release1",
338
+ planned_phases: ["preflight", "command_generation", "doctor_handoff"],
339
+ requires_typed_confirmation: true,
340
+ confirmation_ref: typedConfirmationRef,
341
+ package_ref: "package-flowdesk-opencode-plugin",
342
+ rollback_plan_ref: rollbackPlanId,
343
+ safe_next_actions: ["/flowdesk-doctor", "/flowdesk-status"]
344
+ };
345
+ }
346
+ function commandGeneration(targetProfileRef, generationId, commandRefs) {
347
+ return {
348
+ schema_version: "flowdesk.command_generation_summary.v1",
349
+ generation_id: generationId,
350
+ target_profile_ref: targetProfileRef,
351
+ status: "applied",
352
+ command_refs: [...commandRefs],
353
+ template_hash: "template-hash-flowdesk-release1-portable-commands",
354
+ static_template_validation: "passed",
355
+ rollback_ref: "rollback-command-files"
356
+ };
357
+ }
358
+ function bootstrapReport(nowIso, targetProfileRef, installPlanId, generationId, reportId, handoffId) {
359
+ return {
360
+ schema_version: "flowdesk.bootstrap_report.v1",
361
+ report_id: reportId,
362
+ install_plan_id: installPlanId,
363
+ target_profile_ref: targetProfileRef,
364
+ started_at: nowIso,
365
+ completed_at: nowIso,
366
+ final_phase: "complete",
367
+ status: "complete",
368
+ failure_class: "unknown",
369
+ command_generation_ref: generationId,
370
+ doctor_handoff_ref: handoffId,
371
+ disabled_modes: ["real_dispatch", "managed_fallback", "lane_launch", "hard_chat_blocking"],
372
+ safe_next_actions: ["/flowdesk-doctor", "/flowdesk-status"],
373
+ audit_refs: ["audit-bootstrap-install"]
374
+ };
375
+ }
376
+ function doctorHandoff(nowIso, installPlanId, reportId, handoffId) {
377
+ return {
378
+ schema_version: "flowdesk.doctor_handoff.v1",
379
+ handoff_id: handoffId,
380
+ created_at: nowIso,
381
+ install_plan_ref: installPlanId,
382
+ bootstrap_report_ref: reportId,
383
+ doctor_request_ref: "doctor-request-bootstrap-install",
384
+ safe_next_actions: ["/flowdesk-doctor", "/flowdesk-status"]
385
+ };
386
+ }
387
+ function rollbackCommandFiles(profileRootDir, refs) {
388
+ const root = resolve(profileRootDir);
389
+ const rootPrefix = root.endsWith(sep) ? root : `${root}${sep}`;
390
+ const removed = [];
391
+ for (const ref of refs ?? []) {
392
+ const target = resolve(root, ref);
393
+ if (target === root || !target.startsWith(rootPrefix))
394
+ continue;
395
+ rmSync(target, { force: true });
396
+ removed.push(ref);
397
+ }
398
+ return removed;
399
+ }
400
+ export function installFlowDeskRelease1Bootstrap(request) {
401
+ const now = request.now ?? new Date();
402
+ const nowIso = now.toISOString();
403
+ const artifactIds = ids(request.targetProfileRef);
404
+ const requestValidation = validateRequest(request, artifactIds, now);
405
+ if (!requestValidation.ok)
406
+ return { ...requestValidation, ...resultBase() };
407
+ const durableConfirmationValidation = validateDurableConfirmationLedgerAvailable(request, nowIso);
408
+ if (!durableConfirmationValidation.ok)
409
+ return { ...durableConfirmationValidation, ...resultBase() };
410
+ const commandMaterialization = materializeFlowDeskPortableCommandFiles(request.profileRootDir);
411
+ if (!commandMaterialization.ok) {
412
+ const rollbackCommandRefs = rollbackCommandFiles(request.profileRootDir, commandMaterialization.writtenCommandRefs);
413
+ return { ...invalid(...commandMaterialization.errors), commandMaterialization, commandFilesWritten: 0, bootstrapArtifactsWritten: 0, aliasFilesWritten: 0, rollbackCommandRefs, ...disabledBootstrapInstallAuthority };
414
+ }
415
+ const ledgerClaim = claimPendingDurableConfirmationLedger(request, nowIso);
416
+ if (!ledgerClaim.ok) {
417
+ const rollbackCommandRefs = rollbackCommandFiles(request.profileRootDir, commandMaterialization.writtenCommandRefs);
418
+ return { ...invalid(...ledgerClaim.errors), commandMaterialization, profileRootDir: commandMaterialization.profileRootDir, commandFilesWritten: 0, bootstrapArtifactsWritten: 0, aliasFilesWritten: 0, rollbackCommandRefs, ...disabledBootstrapInstallAuthority };
419
+ }
420
+ const commandRefs = commandMaterialization.writtenCommandRefs?.map((ref) => `command-file-${ref.replace(/[^A-Za-z0-9_.:-]/g, "-")}`) ?? [];
421
+ const artifacts = [
422
+ installPlan(nowIso, request.targetProfileRef, request.typedConfirmation.confirmationRef, artifactIds.installPlanId, artifactIds.rollbackPlanId),
423
+ commandGeneration(request.targetProfileRef, artifactIds.generationId, commandRefs),
424
+ bootstrapReport(nowIso, request.targetProfileRef, artifactIds.installPlanId, artifactIds.generationId, artifactIds.reportId, artifactIds.handoffId),
425
+ doctorHandoff(nowIso, artifactIds.installPlanId, artifactIds.reportId, artifactIds.handoffId)
426
+ ];
427
+ const prepared = artifacts.map((artifact) => prepareRedactedBootstrapArtifactWriteIntent(artifactIds.installPlanId, artifact));
428
+ const prepareErrors = prepared.flatMap((entry) => entry.ok ? [] : entry.errors);
429
+ const intents = prepared.map((entry) => entry.writeIntent).filter((intent) => intent !== undefined);
430
+ if (prepareErrors.length > 0 || intents.length !== artifacts.length) {
431
+ const rollbackCommandRefs = rollbackCommandFiles(request.profileRootDir, commandMaterialization.writtenCommandRefs);
432
+ return { ...invalid(...(prepareErrors.length > 0 ? prepareErrors : ["bootstrap artifact preparation failed"])), commandMaterialization, commandFilesWritten: 0, bootstrapArtifactsWritten: 0, aliasFilesWritten: 0, rollbackCommandRefs, ...disabledBootstrapInstallAuthority };
433
+ }
434
+ const durable = applyBootstrapWriteIntentsToDurableState(request.durableStateRootDir, intents);
435
+ if (!durable.ok) {
436
+ const rollbackCommandRefs = rollbackCommandFiles(request.profileRootDir, commandMaterialization.writtenCommandRefs);
437
+ return { ...invalid(...durable.errors), commandMaterialization, profileRootDir: commandMaterialization.profileRootDir, durableStateRootDir: durable.rootDir, bootstrapArtifactRefs: durable.writtenPaths, commandFilesWritten: 0, bootstrapArtifactsWritten: durable.writtenPaths?.length ?? 0, aliasFilesWritten: 0, rollbackCommandRefs, ...disabledBootstrapInstallAuthority };
438
+ }
439
+ const ledgerWrite = markDurableConfirmationLedgerConsumed(request, nowIso);
440
+ if (!ledgerWrite.ok) {
441
+ const rollbackCommandRefs = rollbackCommandFiles(request.profileRootDir, commandMaterialization.writtenCommandRefs);
442
+ return { ...invalid(...ledgerWrite.errors), commandMaterialization, profileRootDir: commandMaterialization.profileRootDir, durableStateRootDir: durable.rootDir, bootstrapArtifactRefs: durable.writtenPaths, commandFilesWritten: 0, bootstrapArtifactsWritten: durable.writtenPaths?.length ?? 0, aliasFilesWritten: 0, rollbackCommandRefs, ...disabledBootstrapInstallAuthority };
443
+ }
444
+ consumedBootstrapConfirmationRefs.add(request.typedConfirmation.confirmationRef);
445
+ return {
446
+ ...valid(),
447
+ profileRootDir: commandMaterialization.profileRootDir,
448
+ durableStateRootDir: durable.rootDir,
449
+ commandMaterialization,
450
+ bootstrapArtifactRefs: durable.writtenPaths,
451
+ bootstrapArtifactsWritten: durable.writtenPaths?.length ?? 0,
452
+ commandFilesWritten: commandMaterialization.commandFilesWritten,
453
+ aliasFilesWritten: 0,
454
+ doctorHandoffRef: artifactIds.handoffId,
455
+ ...disabledBootstrapInstallAuthority
456
+ };
457
+ }
458
+ //# sourceMappingURL=bootstrap-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-installer.js","sourceRoot":"","sources":["../src/bootstrap-installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,wCAAwC,EAKxC,OAAO,EACP,2CAA2C,EAE3C,KAAK,EACL,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAuD,uCAAuC,EAAE,MAAM,eAAe,CAAC;AAkD7H,MAAM,iCAAiC,GAAG;IACxC,8BAA8B,EAAE,KAAK;IACrC,oBAAoB,EAAE,KAAK;IAC3B,wBAAwB,EAAE,KAAK;IAC/B,oBAAoB,EAAE,KAAK;IAC3B,gBAAgB,EAAE,KAAK;IACvB,YAAY,EAAE,KAAK;IACnB,gBAAgB,EAAE,KAAK;IACvB,iBAAiB,EAAE,KAAK;IACxB,4BAA4B,EAAE,KAAK;CAC3B,CAAC;AAEX,MAAM,iCAAiC,GAAG,IAAI,GAAG,EAAU,CAAC;AAC5D,MAAM,wCAAwC,GAAG,gDAAgD,CAAC;AAClG,MAAM,gCAAgC,GAAG,oBAAoB,CAAC;AAuB9D,SAAS,UAAU;IACjB,OAAO,EAAE,yBAAyB,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,iCAAiC,EAAE,CAAC;AAC9H,CAAC;AAED,SAAS,mBAAmB,CAAC,gBAAwB,EAAE,cAAsB,EAAE,eAAuB,EAAE,aAAqB;IAC3H,OAAO,6BAA6B,gBAAgB,IAAI,cAAc,IAAI,eAAe,IAAI,aAAa,EAAE,CAAC;AAC/G,CAAC;AAED,MAAM,UAAU,+CAA+C,CAAC,cAAsB,EAAE,gBAAwB,EAAE,eAAuB;IACvI,OAAO,mBAAmB,CAAC,gBAAgB,EAAE,+BAA+B,CAAC,cAAc,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAC;AACtJ,CAAC;AAED,MAAM,UAAU,iDAAiD,CAAC,KAAwD;IACxH,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAChD,OAAO;QACL,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,cAAc,EAAE,+BAA+B,CAAC,KAAK,CAAC,cAAc,CAAC;QACrE,cAAc,EAAE,WAAW,CAAC,aAAa;QACzC,eAAe,EAAE,WAAW,CAAC,cAAc;QAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,cAAsB;IACpE,OAAO,gBAAgB,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,eAAe,CAAC,OAAkD,EAAE,WAAmC,EAAE,GAAS;IACzH,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACxI,IAAI,OAAO,OAAO,CAAC,mBAAmB,KAAK,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACvJ,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;IACvF,MAAM,qBAAqB,GAAG,+BAA+B,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACtF,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAC/C,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI,OAAO,YAAY,KAAK,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;SACrI,CAAC;QACJ,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,eAAe,EAAE,mCAAmC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5G,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,gBAAgB,EAAE,oCAAoC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC9G,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1G,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1G,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,eAAe,EAAE,mCAAmC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5G,IAAI,iCAAiC,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACrI,IAAI,YAAY,CAAC,gBAAgB,KAAK,OAAO,CAAC,gBAAgB;YAAE,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC3H,IAAI,YAAY,CAAC,cAAc,KAAK,qBAAqB;YAAE,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAC7H,IAAI,YAAY,CAAC,cAAc,KAAK,WAAW,CAAC,aAAa;YAAE,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QACxH,IAAI,YAAY,CAAC,eAAe,KAAK,WAAW,CAAC,cAAc;YAAE,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC3H,IAAI,YAAY,CAAC,UAAU,KAAK,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC7F,IAAI,YAAY,CAAC,WAAW,KAAK,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC,aAAa,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpN,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,OAAO,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC7H,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,GAAG,CAAC,gBAAwB;IACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/E,OAAO;QACL,aAAa,EAAE,gBAAgB,MAAM,EAAE;QACvC,YAAY,EAAE,cAAc,MAAM,EAAE;QACpC,cAAc,EAAE,iBAAiB,MAAM,EAAE;QACzC,QAAQ,EAAE,UAAU,MAAM,EAAE;QAC5B,SAAS,EAAE,WAAW,MAAM,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CAAC,eAAuB;IAChE,MAAM,MAAM,GAAG,CAAC,GAAG,iBAAiB,CAAC,eAAe,EAAE,mCAAmC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,eAAe,KAAK,GAAG,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QACnH,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,KAAa;IACjD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC;IACvE,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,mCAAmC,CAAC,mBAA2B,EAAE,eAAuB;IAC/F,MAAM,aAAa,GAAG,iCAAiC,CAAC,eAAe,CAAC,CAAC;IACzE,IAAI,CAAC,aAAa,CAAC,EAAE;QAAE,OAAO,aAAa,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,eAAe,OAAO,CAAC,CAAC;IACjE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,2DAA2D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,2BAA2B,CAAC,QAAqD,EAAE,MAAe;IACzG,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAAE,OAAO,OAAO,CAAC,yDAAyD,CAAC,CAAC;QACpI,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,OAAO,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtI,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,cAAc,EAAE;gBAAE,OAAO,OAAO,CAAC,mEAAmE,CAAC,CAAC;YAC/G,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBAAE,OAAO,OAAO,CAAC,gEAAgE,CAAC,CAAC;QAC5G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACzE,IAAI,CAAC,MAAM;oBAAE,OAAO,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,SAAS,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC;gBAAC,OAAO,UAAU,EAAE,CAAC;oBACpB,MAAM,OAAO,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;oBACnF,OAAO,OAAO,CAAC,gEAAgE,OAAO,EAAE,CAAC,CAAC;gBAC5F,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACzE,OAAO,OAAO,CAAC,+DAA+D,OAAO,EAAE,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QAED,IAAI,aAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,cAAc,EAAE;gBAAE,OAAO,OAAO,CAAC,mEAAmE,CAAC,CAAC;YAC/G,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBAAE,OAAO,OAAO,CAAC,gEAAgE,CAAC,CAAC;YAC1G,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACzE,OAAO,OAAO,CAAC,kEAAkE,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC;YAAE,OAAO,OAAO,CAAC,wEAAwE,CAAC,CAAC;IAC3I,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,SAAS,qCAAqC,CAAC,QAAqD;IAClG,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzE,IAAI,CAAC,mBAAmB,CAAC,EAAE;QAAE,OAAO,mBAAmB,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,OAAO,OAAO,CAAC,8DAA8D,CAAC,CAAC;QAC1G,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,OAAO,CAAC,sDAAsD,CAAC,CAAC;IAC7F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,EAAE,CAAC;QACzF,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,OAAO,CAAC,qDAAqD,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,CAAC;QACH,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAA4B,EAAE,CAAC;IAClH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,iDAAiD,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAkD,EAAE,MAA8B,EAAE,SAAiB,EAAE,UAAmB;IAC5J,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAC/C,MAAM,MAAM,GAA0C;QACpD,cAAc,EAAE,wCAAwC;QACxD,gBAAgB,EAAE,YAAY,CAAC,eAAe;QAC9C,MAAM;QACN,kBAAkB,EAAE,YAAY,CAAC,gBAAgB;QACjD,gBAAgB,EAAE,YAAY,CAAC,cAAc;QAC7C,gBAAgB,EAAE,YAAY,CAAC,cAAc;QAC7C,iBAAiB,EAAE,YAAY,CAAC,eAAe;QAC/C,iBAAiB,EAAE,eAAe,CAAC,YAAY,CAAC,WAAW,CAAC;QAC5D,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,YAAY,CAAC,SAAS;QAClC,WAAW,EAAE,YAAY,CAAC,UAAU;KACrC,CAAC;IACF,IAAI,UAAU,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;IAC9D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,+BAA+B,CAAC,MAA+B,EAAE,QAA+C;IACvH,MAAM,MAAM,GAA6E;QACvF,CAAC,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAAC;QAC3C,CAAC,kBAAkB,EAAE,QAAQ,CAAC,gBAAgB,CAAC;QAC/C,CAAC,oBAAoB,EAAE,QAAQ,CAAC,kBAAkB,CAAC;QACnD,CAAC,kBAAkB,EAAE,QAAQ,CAAC,gBAAgB,CAAC;QAC/C,CAAC,kBAAkB,EAAE,QAAQ,CAAC,gBAAgB,CAAC;QAC/C,CAAC,mBAAmB,EAAE,QAAQ,CAAC,iBAAiB,CAAC;QACjD,CAAC,mBAAmB,EAAE,QAAQ,CAAC,iBAAiB,CAAC;QACjD,CAAC,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC;QACnC,CAAC,aAAa,EAAE,QAAQ,CAAC,WAAW,CAAC;KACtC,CAAC;IACF,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,0CAA0C,CAAC,OAAkD,EAAE,MAAc;IACpH,MAAM,UAAU,GAAG,mCAAmC,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAC/H,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,uDAAuD,CAAC,CAAC;IAC3L,MAAM,UAAU,GAAG,qCAAqC,CAAC,UAAyD,CAAC,CAAC;IACpH,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,EAAE,CAAC;IAEpD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACjC,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,+BAA+B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,oDAAoD,CAAC,CAAC;IAChG,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,+DAA+D,CAAC,CAAC;IACjH,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,gEAAgE,CAAC,CAAC;IACnH,OAAO,OAAO,CAAC,qDAAqD,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,qCAAqC,CAAC,OAAkD,EAAE,MAAc;IAC/G,MAAM,UAAU,GAAG,mCAAmC,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAC/H,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,uDAAuD,CAAC,CAAC;IAC3L,MAAM,QAAQ,GAAG,UAAyD,CAAC;IAE3E,MAAM,QAAQ,GAAG,qCAAqC,CAAC,QAAQ,CAAC,CAAC;IACjE,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,+BAA+B,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,oDAAoD,CAAC,CAAC;QAChG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,+DAA+D,CAAC,CAAC;QAC1H,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,OAAO,CAAC,gEAAgE,CAAC,CAAC;QAC5H,OAAO,OAAO,CAAC,qDAAqD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,mBAAmB,CAAC,EAAE;QAAE,OAAO,mBAAmB,CAAC;IACxD,IAAI,CAAC;QACH,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7J,OAAO,KAAK,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,OAAO,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,SAAS,qCAAqC,CAAC,OAAkD,EAAE,MAAc;IAC/G,MAAM,UAAU,GAAG,mCAAmC,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAC/H,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,uDAAuD,CAAC,CAAC;IAC3L,MAAM,QAAQ,GAAG,UAAyD,CAAC;IAC3E,MAAM,QAAQ,GAAG,qCAAqC,CAAC,QAAQ,CAAC,CAAC;IACjE,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,oDAAoD,CAAC,CAAC;IACxG,MAAM,SAAS,GAAG,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1G,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,8DAA8D,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,+BAA+B,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,oDAAoD,CAAC,CAAC;IAChG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,kDAAkD,CAAC,CAAC;IAE7G,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzE,IAAI,CAAC,mBAAmB,CAAC,EAAE;QAAE,OAAO,mBAAmB,CAAC;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,OAAO,CAAC,iBAAiB,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/H,IAAI,CAAC;QACH,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9J,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1C,OAAO,KAAK,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,OAAO,CAAC,4DAA4D,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAc,EAAE,gBAAwB,EAAE,oBAA4B,EAAE,aAAqB,EAAE,cAAsB;IACxI,OAAO;QACL,cAAc,EAAE,oCAAoC;QACpD,eAAe,EAAE,aAAa;QAC9B,UAAU,EAAE,MAAM;QAClB,kBAAkB,EAAE,gBAAgB;QACpC,YAAY,EAAE,UAAU;QACxB,cAAc,EAAE,CAAC,WAAW,EAAE,oBAAoB,EAAE,gBAAgB,CAAC;QACrE,2BAA2B,EAAE,IAAI;QACjC,gBAAgB,EAAE,oBAAoB;QACtC,WAAW,EAAE,kCAAkC;QAC/C,iBAAiB,EAAE,cAAc;QACjC,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,gBAAwB,EAAE,YAAoB,EAAE,WAA8B;IACvG,OAAO;QACL,cAAc,EAAE,wCAAwC;QACxD,aAAa,EAAE,YAAY;QAC3B,kBAAkB,EAAE,gBAAgB;QACpC,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,CAAC,GAAG,WAAW,CAAC;QAC9B,aAAa,EAAE,mDAAmD;QAClE,0BAA0B,EAAE,QAAQ;QACpC,YAAY,EAAE,wBAAwB;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAc,EAAE,gBAAwB,EAAE,aAAqB,EAAE,YAAoB,EAAE,QAAgB,EAAE,SAAiB;IACjJ,OAAO;QACL,cAAc,EAAE,8BAA8B;QAC9C,SAAS,EAAE,QAAQ;QACnB,eAAe,EAAE,aAAa;QAC9B,kBAAkB,EAAE,gBAAgB;QACpC,UAAU,EAAE,MAAM;QAClB,YAAY,EAAE,MAAM;QACpB,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,UAAU;QAClB,aAAa,EAAE,SAAS;QACxB,sBAAsB,EAAE,YAAY;QACpC,kBAAkB,EAAE,SAAS;QAC7B,cAAc,EAAE,CAAC,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,oBAAoB,CAAC;QAC1F,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;QAC3D,UAAU,EAAE,CAAC,yBAAyB,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,aAAqB,EAAE,QAAgB,EAAE,SAAiB;IAC/F,OAAO;QACL,cAAc,EAAE,4BAA4B;QAC5C,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,MAAM;QAClB,gBAAgB,EAAE,aAAa;QAC/B,oBAAoB,EAAE,QAAQ;QAC9B,kBAAkB,EAAE,kCAAkC;QACtD,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,cAAsB,EAAE,IAAmC;IACvF,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,SAAS;QAChE,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,OAAkD;IACjG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,iBAAiB,GAAG,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IACrE,IAAI,CAAC,iBAAiB,CAAC,EAAE;QAAE,OAAO,EAAE,GAAG,iBAAiB,EAAE,GAAG,UAAU,EAAE,EAAE,CAAC;IAC5E,MAAM,6BAA6B,GAAG,0CAA0C,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClG,IAAI,CAAC,6BAA6B,CAAC,EAAE;QAAE,OAAO,EAAE,GAAG,6BAA6B,EAAE,GAAG,UAAU,EAAE,EAAE,CAAC;IAEpG,MAAM,sBAAsB,GAAG,uCAAuC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/F,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QACpH,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,sBAAsB,CAAC,MAAM,CAAC,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,CAAC,EAAE,yBAAyB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,mBAAmB,EAAE,GAAG,iCAAiC,EAAE,CAAC;IACzN,CAAC;IAED,MAAM,WAAW,GAAG,qCAAqC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3E,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QACpH,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,sBAAsB,EAAE,cAAc,EAAE,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,CAAC,EAAE,yBAAyB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,mBAAmB,EAAE,GAAG,iCAAiC,EAAE,CAAC;IACrQ,CAAC;IAED,MAAM,WAAW,GAAG,sBAAsB,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3I,MAAM,SAAS,GAAG;QAChB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,CAAC,eAAe,EAAE,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,cAAc,CAAC;QAC/I,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC;QAClF,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC;QACnJ,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC;KAC9F,CAAC;IACF,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,2CAA2C,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/H,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAwC,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC1I,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QACpE,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QACpH,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,CAAC,EAAE,yBAAyB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,mBAAmB,EAAE,GAAG,iCAAiC,EAAE,CAAC;IAClR,CAAC;IAED,MAAM,OAAO,GAAG,wCAAwC,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAC/F,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QACpH,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,sBAAsB,EAAE,cAAc,EAAE,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,OAAO,CAAC,OAAO,EAAE,qBAAqB,EAAE,OAAO,CAAC,YAAY,EAAE,mBAAmB,EAAE,CAAC,EAAE,yBAAyB,EAAE,OAAO,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,mBAAmB,EAAE,GAAG,iCAAiC,EAAE,CAAC;IACpX,CAAC;IAED,MAAM,WAAW,GAAG,qCAAqC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3E,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QACpH,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,sBAAsB,EAAE,cAAc,EAAE,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,EAAE,OAAO,CAAC,OAAO,EAAE,qBAAqB,EAAE,OAAO,CAAC,YAAY,EAAE,mBAAmB,EAAE,CAAC,EAAE,yBAAyB,EAAE,OAAO,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,mBAAmB,EAAE,GAAG,iCAAiC,EAAE,CAAC;IACxX,CAAC;IAED,iCAAiC,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAEjF,OAAO;QACL,GAAG,KAAK,EAAE;QACV,cAAc,EAAE,sBAAsB,CAAC,cAAc;QACrD,mBAAmB,EAAE,OAAO,CAAC,OAAO;QACpC,sBAAsB;QACtB,qBAAqB,EAAE,OAAO,CAAC,YAAY;QAC3C,yBAAyB,EAAE,OAAO,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;QAC5D,mBAAmB,EAAE,sBAAsB,CAAC,mBAAmB;QAC/D,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,WAAW,CAAC,SAAS;QACvC,GAAG,iCAAiC;KACrC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { FlowDeskFakeRuntimeCommandInputV1, FlowDeskGuardedDryRunCommandInputV1, FlowDeskPlanCommandInputV1, FlowDeskProductionEnablementEvaluationV1, FlowDeskRelease1MinimumToolName, FlowDeskRetryPlanningInputV1, FlowDeskStatusCommandInputV1, ValidationResult } from "@flowdesk/core";
2
+ export type FlowDeskCommandBackedHandlerModeV1 = "command_backed_core_evaluator" | "command_backed_diagnostic_handler" | "missing_evaluator_input" | "request_schema_invalid" | "pending_confirmation_invalid" | "schema_only_pending";
3
+ export interface FlowDeskCommandBackedRunHandlerContextV1 {
4
+ guardedDryRun?: Omit<FlowDeskGuardedDryRunCommandInputV1, "commandName" | "request">;
5
+ fakeRuntime?: Omit<FlowDeskFakeRuntimeCommandInputV1, "commandName" | "request">;
6
+ }
7
+ export interface FlowDeskCommandBackedHandlerContextV1 {
8
+ plan?: Omit<FlowDeskPlanCommandInputV1, "request">;
9
+ run?: FlowDeskCommandBackedRunHandlerContextV1;
10
+ status?: Omit<FlowDeskStatusCommandInputV1, "request">;
11
+ retry?: Omit<FlowDeskRetryPlanningInputV1, "request">;
12
+ diagnostic?: {
13
+ nowIso?: string;
14
+ deleteAfterIso?: string;
15
+ sourceRef?: string;
16
+ providerHealthSnapshotRef?: string;
17
+ productionEnablement?: FlowDeskProductionEnablementEvaluationV1;
18
+ };
19
+ }
20
+ export interface FlowDeskCommandBackedHandlerResultV1 extends ValidationResult {
21
+ toolName: FlowDeskRelease1MinimumToolName;
22
+ handlerMode: FlowDeskCommandBackedHandlerModeV1;
23
+ requestSchemaValid: boolean;
24
+ responseSchemaValid: boolean;
25
+ coreEvaluationOk: boolean;
26
+ response?: unknown;
27
+ productionRegistrationEligible: false;
28
+ realOpenCodeDispatch: false;
29
+ actualLaneLaunch: false;
30
+ providerCall: false;
31
+ runtimeExecution: false;
32
+ fallbackAuthority: false;
33
+ hardCancelOrNoReplyAuthority: false;
34
+ }
35
+ export declare function evaluateFlowDeskCommandBackedHandlerV1(toolName: FlowDeskRelease1MinimumToolName, request: unknown, context?: FlowDeskCommandBackedHandlerContextV1): FlowDeskCommandBackedHandlerResultV1;
36
+ //# sourceMappingURL=command-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-handlers.d.ts","sourceRoot":"","sources":["../src/command-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAUV,iCAAiC,EACjC,mCAAmC,EACnC,0BAA0B,EAC1B,wCAAwC,EACxC,+BAA+B,EAG/B,4BAA4B,EAE5B,4BAA4B,EAI5B,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAmBxB,MAAM,MAAM,kCAAkC,GAAG,+BAA+B,GAAG,mCAAmC,GAAG,yBAAyB,GAAG,wBAAwB,GAAG,8BAA8B,GAAG,qBAAqB,CAAC;AAEvO,MAAM,WAAW,wCAAwC;IACvD,aAAa,CAAC,EAAE,IAAI,CAAC,mCAAmC,EAAE,aAAa,GAAG,SAAS,CAAC,CAAC;IACrF,WAAW,CAAC,EAAE,IAAI,CAAC,iCAAiC,EAAE,aAAa,GAAG,SAAS,CAAC,CAAC;CAClF;AAED,MAAM,WAAW,qCAAqC;IACpD,IAAI,CAAC,EAAE,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;IACnD,GAAG,CAAC,EAAE,wCAAwC,CAAC;IAC/C,MAAM,CAAC,EAAE,IAAI,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE,IAAI,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC;IACtD,UAAU,CAAC,EAAE;QACX,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,yBAAyB,CAAC,EAAE,MAAM,CAAC;QACnC,oBAAoB,CAAC,EAAE,wCAAwC,CAAC;KACjE,CAAC;CACH;AAED,MAAM,WAAW,oCAAqC,SAAQ,gBAAgB;IAC5E,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,WAAW,EAAE,kCAAkC,CAAC;IAChD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B,EAAE,KAAK,CAAC;IACtC,oBAAoB,EAAE,KAAK,CAAC;IAC5B,gBAAgB,EAAE,KAAK,CAAC;IACxB,YAAY,EAAE,KAAK,CAAC;IACpB,gBAAgB,EAAE,KAAK,CAAC;IACxB,iBAAiB,EAAE,KAAK,CAAC;IACzB,4BAA4B,EAAE,KAAK,CAAC;CACrC;AA+OD,wBAAgB,sCAAsC,CAAC,QAAQ,EAAE,+BAA+B,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,qCAA0C,GAAG,oCAAoC,CA8D7M"}