@ifc-lite/mcp 0.23.0 → 0.24.1
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 +65 -0
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +5 -0
- package/dist/context.js.map +1 -1
- package/dist/errors.d.ts +2 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -1
- package/dist/headless-backend-align.d.ts +6 -0
- package/dist/headless-backend-align.d.ts.map +1 -0
- package/dist/headless-backend-align.js +35 -0
- package/dist/headless-backend-align.js.map +1 -0
- package/dist/headless-backend-modelling.d.ts +41 -1
- package/dist/headless-backend-modelling.d.ts.map +1 -1
- package/dist/headless-backend-modelling.js +112 -6
- package/dist/headless-backend-modelling.js.map +1 -1
- package/dist/headless-backend-room.d.ts +8 -0
- package/dist/headless-backend-room.d.ts.map +1 -0
- package/dist/headless-backend-room.js +24 -0
- package/dist/headless-backend-room.js.map +1 -0
- package/dist/headless-backend-store-stubs.d.ts +4 -6
- package/dist/headless-backend-store-stubs.d.ts.map +1 -1
- package/dist/headless-backend-store-stubs.js +1 -12
- package/dist/headless-backend-store-stubs.js.map +1 -1
- package/dist/headless-backend-store.d.ts +3 -1
- package/dist/headless-backend-store.d.ts.map +1 -1
- package/dist/headless-backend-store.js +14 -22
- package/dist/headless-backend-store.js.map +1 -1
- package/dist/headless-backend.d.ts +4 -0
- package/dist/headless-backend.d.ts.map +1 -1
- package/dist/headless-backend.js +7 -1
- package/dist/headless-backend.js.map +1 -1
- package/dist/headless-native-geometry.d.ts +6 -0
- package/dist/headless-native-geometry.d.ts.map +1 -0
- package/dist/headless-native-geometry.js +31 -0
- package/dist/headless-native-geometry.js.map +1 -0
- package/dist/headless-room-geometry.d.ts +9 -0
- package/dist/headless-room-geometry.d.ts.map +1 -0
- package/dist/headless-room-geometry.js +66 -0
- package/dist/headless-room-geometry.js.map +1 -0
- package/dist/protocol/types.d.ts +1 -0
- package/dist/protocol/types.d.ts.map +1 -1
- package/dist/resources/providers.d.ts.map +1 -1
- package/dist/resources/providers.js +10 -1
- package/dist/resources/providers.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +5 -17
- package/dist/server.js.map +1 -1
- package/dist/session-cleanup.d.ts +5 -0
- package/dist/session-cleanup.d.ts.map +1 -0
- package/dist/session-cleanup.js +36 -0
- package/dist/session-cleanup.js.map +1 -0
- package/dist/test/live-tool-session.d.ts +9 -0
- package/dist/test/live-tool-session.d.ts.map +1 -0
- package/dist/test/live-tool-session.js +30 -0
- package/dist/test/live-tool-session.js.map +1 -0
- package/dist/tools/bcf.js +2 -2
- package/dist/tools/bcf.js.map +1 -1
- package/dist/tools/copy-elements.d.ts +4 -0
- package/dist/tools/copy-elements.d.ts.map +1 -0
- package/dist/tools/copy-elements.js +76 -0
- package/dist/tools/copy-elements.js.map +1 -0
- package/dist/tools/design-place.d.ts +3 -0
- package/dist/tools/design-place.d.ts.map +1 -0
- package/dist/tools/design-place.js +79 -0
- package/dist/tools/design-place.js.map +1 -0
- package/dist/tools/discovery.js +3 -3
- package/dist/tools/discovery.js.map +1 -1
- package/dist/tools/export.js +7 -7
- package/dist/tools/export.js.map +1 -1
- package/dist/tools/flow-ai.d.ts +6 -0
- package/dist/tools/flow-ai.d.ts.map +1 -0
- package/dist/tools/flow-ai.js +23 -0
- package/dist/tools/flow-ai.js.map +1 -0
- package/dist/tools/flow-host.d.ts +1 -1
- package/dist/tools/flow-host.d.ts.map +1 -1
- package/dist/tools/flow-host.js +5 -1
- package/dist/tools/flow-host.js.map +1 -1
- package/dist/tools/flow-review-host.d.ts +28 -0
- package/dist/tools/flow-review-host.d.ts.map +1 -0
- package/dist/tools/flow-review-host.js +142 -0
- package/dist/tools/flow-review-host.js.map +1 -0
- package/dist/tools/flow.d.ts.map +1 -1
- package/dist/tools/flow.js +143 -99
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/hosted-edit.d.ts +4 -0
- package/dist/tools/hosted-edit.d.ts.map +1 -0
- package/dist/tools/hosted-edit.js +37 -0
- package/dist/tools/hosted-edit.js.map +1 -0
- package/dist/tools/ids-accessor.d.ts +2 -1
- package/dist/tools/ids-accessor.d.ts.map +1 -1
- package/dist/tools/ids-accessor.js.map +1 -1
- package/dist/tools/ids-authoring-model.d.ts +3 -0
- package/dist/tools/ids-authoring-model.d.ts.map +1 -0
- package/dist/tools/ids-authoring-model.js +112 -0
- package/dist/tools/ids-authoring-model.js.map +1 -0
- package/dist/tools/ids-authoring.d.ts +3 -0
- package/dist/tools/ids-authoring.d.ts.map +1 -0
- package/dist/tools/ids-authoring.js +202 -0
- package/dist/tools/ids-authoring.js.map +1 -0
- package/dist/tools/ids-schema.d.ts +3 -0
- package/dist/tools/ids-schema.d.ts.map +1 -0
- package/dist/tools/ids-schema.js +91 -0
- package/dist/tools/ids-schema.js.map +1 -0
- package/dist/tools/index.d.ts +5 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +8 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/layer-store.d.ts +2 -0
- package/dist/tools/layer-store.d.ts.map +1 -1
- package/dist/tools/layer-store.js +4 -0
- package/dist/tools/layer-store.js.map +1 -1
- package/dist/tools/mutate.d.ts.map +1 -1
- package/dist/tools/mutate.js +12 -2
- package/dist/tools/mutate.js.map +1 -1
- package/dist/tools/mutation-undo.d.ts.map +1 -1
- package/dist/tools/mutation-undo.js +3 -0
- package/dist/tools/mutation-undo.js.map +1 -1
- package/dist/tools/physical-edit.d.ts +4 -0
- package/dist/tools/physical-edit.d.ts.map +1 -0
- package/dist/tools/physical-edit.js +77 -0
- package/dist/tools/physical-edit.js.map +1 -0
- package/dist/tools/query-tools.d.ts +3 -0
- package/dist/tools/query-tools.d.ts.map +1 -0
- package/dist/tools/query-tools.js +8 -0
- package/dist/tools/query-tools.js.map +1 -0
- package/dist/tools/query.d.ts +1 -1
- package/dist/tools/query.d.ts.map +1 -1
- package/dist/tools/query.js +4 -4
- package/dist/tools/query.js.map +1 -1
- package/dist/tools/room-command.d.ts +6 -0
- package/dist/tools/room-command.d.ts.map +1 -0
- package/dist/tools/room-command.js +75 -0
- package/dist/tools/room-command.js.map +1 -0
- package/dist/tools/util.d.ts +10 -0
- package/dist/tools/util.d.ts.map +1 -1
- package/dist/tools/util.js +13 -1
- package/dist/tools/util.js.map +1 -1
- package/dist/tools/validation.d.ts +9 -0
- package/dist/tools/validation.d.ts.map +1 -1
- package/dist/tools/validation.js +3 -3
- package/dist/tools/validation.js.map +1 -1
- package/dist/transport/http-helpers.d.ts +85 -0
- package/dist/transport/http-helpers.d.ts.map +1 -0
- package/dist/transport/http-helpers.js +149 -0
- package/dist/transport/http-helpers.js.map +1 -0
- package/dist/transport/http.d.ts +14 -1
- package/dist/transport/http.d.ts.map +1 -1
- package/dist/transport/http.js +80 -90
- package/dist/transport/http.js.map +1 -1
- package/dist/validate.d.ts +1 -1
- package/dist/validate.js +3 -0
- package/dist/validate.js.map +1 -1
- package/package.json +22 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-host.js","sourceRoot":"","sources":["../../src/tools/flow-host.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAc/D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"flow-host.js","sourceRoot":"","sources":["../../src/tools/flow-host.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAc/D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,sFAAsF;AACtF,SAAS,WAAW,CAAC,QAAuB,EAAE,IAAY;IACxD,IAAI,EAAE,GAAG,IAAI,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC;QAAE,EAAE,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;IACvE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAoB,EAAE,QAAuB,EAAE,aAAoC,EAAE,WAA4C,EAAE;IACnK,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,OAAO;QACL,GAAG,QAAQ;QACX,IAAI,GAAG,KAAK,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,aAAa;QACb,IAAI,cAAc,KAAK,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,0EAA0E;QAC1E,2EAA2E;QAC3E,uEAAuE;QACvE,wEAAwE;QACxE,uEAAuE;QACvE,uEAAuE;QACvE,iEAAiE;QACjE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,KAAK,GAAG,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9F,IAAI,CAAC,KAAK;gBAAE,OAAO,SAAS,CAAC;YAC7B,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;gBAC9B,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE;gBACrD,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI;aACrC,CAAC;QACJ,CAAC;QACD,2EAA2E;QAC3E,WAAW,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAC3F,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI;YACzB,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrB,MAAM,GAAG,MAAM,CAAC;YAChB,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type RootBudget } from '@ifc-lite/ai';
|
|
2
|
+
import type { FlowDocument, RunResult } from '@ifc-lite/flow';
|
|
3
|
+
import { type createStandardRegistry } from '@ifc-lite/flow-nodes';
|
|
4
|
+
import type { ToolContext, LoadedModel } from '../context.js';
|
|
5
|
+
type Registry = ReturnType<typeof createStandardRegistry>;
|
|
6
|
+
/** Availability must be reported before attempting model resolution, including on resume. */
|
|
7
|
+
export declare function restoredMcpNodes(input: Record<string, unknown>, ctx: ToolContext, resuming: boolean): Promise<Set<string>>;
|
|
8
|
+
export declare function prepareMcpFlowReview(input: Record<string, unknown>, ctx: ToolContext, model: LoadedModel, doc: FlowDocument, registry: Registry, player: Record<string, unknown>, resuming: boolean, readOnly?: boolean): Promise<{
|
|
9
|
+
restored: Set<string>;
|
|
10
|
+
budget: RootBudget;
|
|
11
|
+
receipts: unknown[];
|
|
12
|
+
ai: import("@ifc-lite/flow-nodes/ai").FlowAiService | undefined;
|
|
13
|
+
claim(): Promise<Map<string, Map<string, import("@ifc-lite/flow").FlowData>> | undefined>;
|
|
14
|
+
settle(result: RunResult, redaction: ReadonlyMap<string, string>, activeModelId?: string): Promise<{
|
|
15
|
+
model_id: string;
|
|
16
|
+
checkpoint_path: string | undefined;
|
|
17
|
+
id: string;
|
|
18
|
+
state: import("@ifc-lite/flow/checkpoint").CheckpointState;
|
|
19
|
+
proposal_digest: string;
|
|
20
|
+
artifacts: {
|
|
21
|
+
[k: string]: Readonly<Record<string, import("@ifc-lite/flow/checkpoint").PortableFlowData>>;
|
|
22
|
+
};
|
|
23
|
+
budget: unknown;
|
|
24
|
+
} | undefined>;
|
|
25
|
+
fail(): Promise<void>;
|
|
26
|
+
}>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=flow-review-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-review-host.d.ts","sourceRoot":"","sources":["../../src/tools/flow-review-host.ts"],"names":[],"mappings":"AAQA,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK9D,OAAO,EAAiC,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAElG,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM9D,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AA2B1D,6FAA6F;AAC7F,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAKhI;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAC7G,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,UAAQ;;;;;;mBA8CpF,SAAS,aAAa,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;;GAyBzE"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/** #7070: a durable native checkpoint is the only authority for one MCP continuation. */
|
|
5
|
+
import { randomUUID, createHash } from 'node:crypto';
|
|
6
|
+
import { stat, access } from 'node:fs/promises';
|
|
7
|
+
import { dirname } from 'node:path';
|
|
8
|
+
import { createRootBudget, restoreRootBudget } from '@ifc-lite/ai';
|
|
9
|
+
import { flowAiConfig } from '@ifc-lite/ai/chat-completions';
|
|
10
|
+
import { approveCheckpoint, claimCheckpoint, createCheckpoint, finishCheckpoint, graphDigest, resumeOutputs, updateCheckpoint, recoverCheckpoint } from '@ifc-lite/flow/checkpoint';
|
|
11
|
+
import { FileCheckpointStore } from '@ifc-lite/flow/checkpoint-file';
|
|
12
|
+
import { FLOW_AI_BUDGET } from '@ifc-lite/flow-nodes/ai';
|
|
13
|
+
import { redactDeep, buildRedactionMap } from '@ifc-lite/flow-nodes';
|
|
14
|
+
import { StepExporter } from '@ifc-lite/export';
|
|
15
|
+
import { scopeAllows, modelAllowed } from '../auth/scope.js';
|
|
16
|
+
import { resolveSafePath } from '../safe-path.js';
|
|
17
|
+
import { ToolErrorCode, ToolExecutionError } from '../errors.js';
|
|
18
|
+
import { mcpFlowAi } from './flow-ai.js';
|
|
19
|
+
const refusal = (message) => new ToolExecutionError({ code: ToolErrorCode.INVALID_INPUT, message });
|
|
20
|
+
/** Hash the native effective export with a fixed timestamp, including all overlay-created attributes. */
|
|
21
|
+
function modelDigest(model) {
|
|
22
|
+
const exporter = new StepExporter(model.store, model.backend.getMutationView() ?? undefined);
|
|
23
|
+
const bytes = exporter.export({ schema: model.store.schemaVersion ?? 'IFC4', timeStamp: '1970-01-01T00:00:00' }).content;
|
|
24
|
+
return createHash('sha256').update(bytes).digest('hex');
|
|
25
|
+
}
|
|
26
|
+
function sourceDigest(ctx, model) {
|
|
27
|
+
const models = ctx.registry.list().filter(item => modelAllowed(ctx.scope, item.id)).sort((a, b) => a.id.localeCompare(b.id));
|
|
28
|
+
return `sha256:${createHash('sha256').update(JSON.stringify({ active: model.id, models: models.map(item => [item.id, modelDigest(item)]) })).digest('hex')}`;
|
|
29
|
+
}
|
|
30
|
+
async function unusedDestination(value, ctx) {
|
|
31
|
+
if (typeof value !== 'string' || !value.trim())
|
|
32
|
+
throw refusal('A new checkpoint_path is required before a review-capable run');
|
|
33
|
+
const path = await resolveSafePath(value, ctx, 'write');
|
|
34
|
+
await access(dirname(path));
|
|
35
|
+
const existing = await stat(path).catch((error) => {
|
|
36
|
+
if (error.code === 'ENOENT')
|
|
37
|
+
return null;
|
|
38
|
+
throw error;
|
|
39
|
+
});
|
|
40
|
+
if (existing)
|
|
41
|
+
throw refusal('A checkpoint destination must not overwrite an existing file');
|
|
42
|
+
return path;
|
|
43
|
+
}
|
|
44
|
+
/** Availability must be reported before attempting model resolution, including on resume. */
|
|
45
|
+
export async function restoredMcpNodes(input, ctx, resuming) {
|
|
46
|
+
if (!resuming)
|
|
47
|
+
return new Set();
|
|
48
|
+
if (typeof input.checkpoint_path !== 'string')
|
|
49
|
+
throw refusal('Supply the pending checkpoint_path');
|
|
50
|
+
const file = await resolveSafePath(input.checkpoint_path, ctx, 'read');
|
|
51
|
+
return new Set(Object.keys((await new FileCheckpointStore(file).load()).checkpoint.outputs));
|
|
52
|
+
}
|
|
53
|
+
export async function prepareMcpFlowReview(input, ctx, model, doc, registry, player, resuming, readOnly = false) {
|
|
54
|
+
const requiredScope = readOnly ? 'read' : 'mutate';
|
|
55
|
+
if (!scopeAllows(ctx.scope, requiredScope))
|
|
56
|
+
throw new ToolExecutionError({ code: ToolErrorCode.PERMISSION_DENIED, message: `Flow execution requires the current ${requiredScope} scope` });
|
|
57
|
+
let budget = createRootBudget(FLOW_AI_BUDGET);
|
|
58
|
+
let receipts = [];
|
|
59
|
+
let store;
|
|
60
|
+
let checkpoint;
|
|
61
|
+
const owner = `mcp:${process.pid}:${randomUUID()}`;
|
|
62
|
+
if (resuming) {
|
|
63
|
+
if (typeof input.checkpoint_path !== 'string')
|
|
64
|
+
throw refusal('Supply the pending checkpoint_path');
|
|
65
|
+
store = new FileCheckpointStore(await resolveSafePath(input.checkpoint_path, ctx, 'write'));
|
|
66
|
+
checkpoint = (await store.load()).checkpoint;
|
|
67
|
+
if (typeof input.approved_digest !== 'string' || input.approved_digest !== checkpoint.proposalDigest)
|
|
68
|
+
throw refusal('Supply the exact reviewed proposal digest');
|
|
69
|
+
const original = restoreRootBudget(checkpoint.budget);
|
|
70
|
+
if (!original)
|
|
71
|
+
throw refusal('Continuation requires the original root budget receipt; no new allowance can be granted');
|
|
72
|
+
if (original.maxRequests > FLOW_AI_BUDGET.maxRequests || original.maxOutputTokens > FLOW_AI_BUDGET.maxOutputTokens)
|
|
73
|
+
throw refusal('The stored budget exceeds this host policy');
|
|
74
|
+
budget = original;
|
|
75
|
+
const savedReceipts = checkpoint.budget.usageReceipts;
|
|
76
|
+
if (savedReceipts !== undefined && (!Array.isArray(savedReceipts) || savedReceipts.length > original.requests))
|
|
77
|
+
throw refusal('The stored usage receipts are invalid');
|
|
78
|
+
receipts = Array.isArray(savedReceipts) ? [...savedReceipts] : [];
|
|
79
|
+
}
|
|
80
|
+
const restored = new Set(Object.keys(checkpoint?.outputs ?? {}));
|
|
81
|
+
const reviewAhead = doc.nodes.some(node => !restored.has(node.id) && registry.get(node.type)?.review === 'required');
|
|
82
|
+
const destination = reviewAhead ? await unusedDestination(resuming ? input.next_checkpoint_path : input.checkpoint_path, ctx) : undefined;
|
|
83
|
+
// Claiming is deferred until the caller has checked wiring, capabilities, secrets and availability.
|
|
84
|
+
let claimed;
|
|
85
|
+
return {
|
|
86
|
+
restored, budget, receipts, ai: mcpFlowAi(budget, receipts, () => ctx.progress.report(budget.requests, `Flow AI request ${budget.requests} of ${budget.maxRequests}`, budget.maxRequests)),
|
|
87
|
+
async claim() {
|
|
88
|
+
if (!store || !checkpoint)
|
|
89
|
+
return undefined;
|
|
90
|
+
const pending = store, id = checkpoint.id;
|
|
91
|
+
if (recoverCheckpoint(checkpoint))
|
|
92
|
+
await updateCheckpoint(pending, id, current => recoverCheckpoint(current) ?? current);
|
|
93
|
+
const claimInput = () => ({ owner, graphDigest: graphDigest(doc, player, registry), sourceDigest: sourceDigest(ctx, model), leaseMs: 10 * 60_000 });
|
|
94
|
+
// Approval and claim are separate CAS transitions: ownership binds the actual reviewed stored record.
|
|
95
|
+
if (checkpoint.state === 'prepared')
|
|
96
|
+
await updateCheckpoint(pending, id, current => {
|
|
97
|
+
const approved = current.state === 'prepared' ? approveCheckpoint(current, input.approved_digest) : current;
|
|
98
|
+
claimCheckpoint(approved, claimInput()); // Verify sources/graph before persisting approval.
|
|
99
|
+
return approved;
|
|
100
|
+
});
|
|
101
|
+
claimed = await updateCheckpoint(pending, id, current => claimCheckpoint(current, claimInput()));
|
|
102
|
+
if (sourceDigest(ctx, model) !== claimed.sourceDigest) {
|
|
103
|
+
await updateCheckpoint(pending, id, current => finishCheckpoint(current, owner, { ok: false, message: 'Sources changed while claiming' }));
|
|
104
|
+
throw refusal('Sources changed while claiming; no continuation ran');
|
|
105
|
+
}
|
|
106
|
+
return resumeOutputs(claimed);
|
|
107
|
+
},
|
|
108
|
+
async settle(result, redaction, activeModelId = model.id) {
|
|
109
|
+
let next;
|
|
110
|
+
try {
|
|
111
|
+
if (result.ok && result.review.length) {
|
|
112
|
+
if (!destination)
|
|
113
|
+
throw refusal('No prepared destination exists for the pending artifact');
|
|
114
|
+
const active = ctx.registry.get(activeModelId);
|
|
115
|
+
if (!active || !modelAllowed(ctx.scope, active.id))
|
|
116
|
+
throw refusal('The active checkpoint model is no longer accessible');
|
|
117
|
+
next = createCheckpoint({ doc, registry, result, inputs: player, sourceDigest: sourceDigest(ctx, active), budget: { ...budget, usageReceipts: receipts } });
|
|
118
|
+
const config = flowAiConfig(process.env);
|
|
119
|
+
const credentials = buildRedactionMap(new Map(config ? [['AI_API_KEY', config.apiKey]] : []));
|
|
120
|
+
if (JSON.stringify(next) !== JSON.stringify(redactDeep(redactDeep(next, redaction), credentials)))
|
|
121
|
+
throw refusal('The paused record contains a secret; no checkpoint can be persisted');
|
|
122
|
+
if (!await new FileCheckpointStore(destination).write(next, null))
|
|
123
|
+
throw refusal('The pending checkpoint destination was claimed by another process');
|
|
124
|
+
}
|
|
125
|
+
if (store && claimed)
|
|
126
|
+
await updateCheckpoint(store, claimed.id, current => finishCheckpoint(current, owner, { ok: result.ok }));
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (store && claimed)
|
|
130
|
+
await updateCheckpoint(store, claimed.id, current => finishCheckpoint(current, owner, { ok: false, message: 'Continuation persistence failed' }));
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
return next ? { model_id: activeModelId, checkpoint_path: destination, id: next.id, state: next.state, proposal_digest: next.proposalDigest,
|
|
134
|
+
artifacts: Object.fromEntries(next.reviewNodes.map(id => [id, next.outputs[id]])), budget: next.budget } : undefined;
|
|
135
|
+
},
|
|
136
|
+
async fail() {
|
|
137
|
+
if (store && claimed)
|
|
138
|
+
await updateCheckpoint(store, claimed.id, current => finishCheckpoint(current, owner, { ok: false, message: 'Continuation failed or was cancelled' }));
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=flow-review-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-review-host.js","sourceRoot":"","sources":["../../src/tools/flow-review-host.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/flow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/tools/flow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/tools/flow.ts"],"names":[],"mappings":"AAgFA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA2RvC,eAAO,MAAM,SAAS,EAAE,IAAI,EAAiE,CAAC"}
|
package/dist/tools/flow.js
CHANGED
|
@@ -26,14 +26,10 @@
|
|
|
26
26
|
* tracked set yet — out of scope here; a future MCP-side sidecar (keyed per
|
|
27
27
|
* session or per model) would close that gap.
|
|
28
28
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* pre-existing MCP limitation, not something this change introduces — a
|
|
34
|
-
* property-writing graph (like the shipped fire-rating-audit example) runs
|
|
35
|
-
* fine; a column-authoring graph will report a failed node until that
|
|
36
|
-
* backend gap is closed separately.
|
|
29
|
+
* Wall/column/slab/beam/stair/railing creation nodes use the shared SDK
|
|
30
|
+
* backend and create-package builders. Each creation is recorded as one
|
|
31
|
+
* compound mutation for public mutation_undo, retaining earlier overlay work.
|
|
32
|
+
* Stair/railing specs use their canonical builders; tracking remains per call.
|
|
37
33
|
*
|
|
38
34
|
* `run_flow` is the OTHER caller (besides `ifc-lite flow run`) allowed to
|
|
39
35
|
* read `process.env` for a flow graph (#5167 phase 3.5), following the same
|
|
@@ -51,7 +47,12 @@
|
|
|
51
47
|
import { readFile } from 'node:fs/promises';
|
|
52
48
|
import { checkAvailability, declaredInputKeys, describeFlowIO, migrateFlowDocument, MemoryTrackingStore, runFlow, unknownInputKeys, validateFlowDocument, validateFlowWiring, } from '@ifc-lite/flow';
|
|
53
49
|
import { parseCapabilities } from '@ifc-lite/extensions';
|
|
54
|
-
import { buildRedactionMap, createStandardRegistry,
|
|
50
|
+
import { buildRedactionMap, createStandardRegistry, interpolateSecrets, redactDeep, resolveSecretValues, validateSecretReferences, } from '@ifc-lite/flow-nodes';
|
|
51
|
+
// AI availability follows explicit host configuration; unconfigured hosts refuse before effects.
|
|
52
|
+
import { mcpFlowFeatures } from './flow-ai.js';
|
|
53
|
+
import { prepareMcpFlowReview, restoredMcpNodes } from './flow-review-host.js';
|
|
54
|
+
import { flowAiConfig } from '@ifc-lite/ai/chat-completions';
|
|
55
|
+
import { aiNodes } from '@ifc-lite/flow-nodes/ai';
|
|
55
56
|
import { createMcpFlowHost } from './flow-host.js';
|
|
56
57
|
import { okResult, paginate, resolveModel } from './util.js';
|
|
57
58
|
import { ToolErrorCode, ToolExecutionError } from '../errors.js';
|
|
@@ -108,7 +109,7 @@ const describeFlow = {
|
|
|
108
109
|
diagnostics: parsed.problems,
|
|
109
110
|
});
|
|
110
111
|
}
|
|
111
|
-
const registry = createStandardRegistry();
|
|
112
|
+
const registry = createStandardRegistry().registerAll(aiNodes);
|
|
112
113
|
const doc = parsed.doc;
|
|
113
114
|
// Registry-aware: `validateFlowDocument` alone cannot see a declared
|
|
114
115
|
// output naming a port no node has (#5167) — it never looks at a
|
|
@@ -116,7 +117,7 @@ const describeFlow = {
|
|
|
116
117
|
// validating clean and producing nothing at run time.
|
|
117
118
|
const diagnostics = validateFlowWiring(doc, registry);
|
|
118
119
|
const io = describeFlowIO(doc, registry);
|
|
119
|
-
const availability = checkAvailability(doc, registry,
|
|
120
|
+
const availability = checkAvailability(doc, registry, mcpFlowFeatures());
|
|
120
121
|
const unavailable = availability.filter((node) => node.status === 'unknown' || node.status === 'unavailable');
|
|
121
122
|
const ok = diagnostics.length === 0 && unavailable.length === 0;
|
|
122
123
|
return okResult(ok
|
|
@@ -171,6 +172,7 @@ const runFlowTool = {
|
|
|
171
172
|
type: 'object',
|
|
172
173
|
properties: {
|
|
173
174
|
...flowInputSchema,
|
|
175
|
+
checkpoint_path: { type: 'string', description: 'New durable review checkpoint destination, required before a review-capable run; subject to allowedPaths.' },
|
|
174
176
|
model_id: { type: 'string', description: 'Loaded model id; required when multiple models are loaded.' },
|
|
175
177
|
inputs: {
|
|
176
178
|
type: 'object',
|
|
@@ -180,100 +182,142 @@ const runFlowTool = {
|
|
|
180
182
|
},
|
|
181
183
|
additionalProperties: false,
|
|
182
184
|
},
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
})
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
})
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
185
|
+
handler: (input, ctx) => executeFlow(input, ctx),
|
|
186
|
+
};
|
|
187
|
+
async function executeFlow(input, ctx, resuming = false, readOnly = false) {
|
|
188
|
+
const value = await loadFlowValue(input, ctx);
|
|
189
|
+
const parsed = parseGraphValue(value);
|
|
190
|
+
if (!parsed.ok) {
|
|
191
|
+
throw new ToolExecutionError({
|
|
192
|
+
code: ToolErrorCode.INVALID_INPUT,
|
|
193
|
+
message: `Flow document is structurally invalid: ${parsed.problems.length} problem(s).`,
|
|
194
|
+
details: { diagnostics: parsed.problems },
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
const registry = createStandardRegistry().registerAll(aiNodes);
|
|
198
|
+
const doc = parsed.doc;
|
|
199
|
+
const wiring = validateFlowWiring(doc, registry);
|
|
200
|
+
if (wiring.length > 0) {
|
|
201
|
+
throw new ToolExecutionError({
|
|
202
|
+
code: ToolErrorCode.INVALID_INPUT,
|
|
203
|
+
message: `Flow document has ${wiring.length} wiring problem(s); call describe_flow first.`,
|
|
204
|
+
details: { diagnostics: wiring },
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (readOnly) {
|
|
208
|
+
const allowed = new Set(['model.read', 'network.ai']);
|
|
209
|
+
if (doc.capabilities.some(capability => !allowed.has(capability)) || doc.nodes.some(node => {
|
|
210
|
+
const definition = registry.get(node.type);
|
|
211
|
+
return definition?.writes || definition?.capabilities?.some(capability => !allowed.has(capability));
|
|
212
|
+
}))
|
|
213
|
+
throw new ToolExecutionError({ code: ToolErrorCode.PERMISSION_DENIED, message: 'propose_flow accepts only native read/AI nodes with model.read and network.ai; use authorized run_flow for effects' });
|
|
214
|
+
}
|
|
215
|
+
const rawInputs = input.inputs ?? {};
|
|
216
|
+
// The CLI bug this guards against: an `--input` key naming no declared
|
|
217
|
+
// parameter (e.g. missing the node id) used to be dropped silently, so
|
|
218
|
+
// the graph ran on its defaults and reported success anyway (#5167).
|
|
219
|
+
const unknown = unknownInputKeys(rawInputs, doc, registry);
|
|
220
|
+
if (unknown.length > 0) {
|
|
221
|
+
const known = declaredInputKeys(doc);
|
|
222
|
+
throw new ToolExecutionError({
|
|
223
|
+
code: ToolErrorCode.INVALID_INPUT,
|
|
224
|
+
message: `inputs key(s) ${unknown.map((k) => `"${k}"`).join(', ')} name no declared parameter${known.length > 0 ? `; this graph declares ${known.join(', ')}` : ''}.`,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
// Capabilities first, so a malformed one is reported as itself rather
|
|
228
|
+
// than as every secret being undeclared (#5446 review).
|
|
229
|
+
const capsResult = parseCapabilities(doc.capabilities);
|
|
230
|
+
if (!capsResult.ok) {
|
|
231
|
+
throw new ToolExecutionError({
|
|
232
|
+
code: ToolErrorCode.INVALID_INPUT,
|
|
233
|
+
message: `the graph declares malformed capabilities: ${capsResult.errors.map((e) => e.message).join('; ')}`,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
// Secrets: validated against the real environment BEFORE anything else
|
|
237
|
+
// touches the graph (see module doc above).
|
|
238
|
+
const secretErrors = validateSecretReferences(doc, process.env);
|
|
239
|
+
if (secretErrors.length > 0) {
|
|
240
|
+
throw new ToolExecutionError({
|
|
241
|
+
code: ToolErrorCode.INVALID_INPUT,
|
|
242
|
+
message: `${secretErrors.length} secret reference problem(s): ${secretErrors.map((e) => e.message).join('; ')}`,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
const restored = await restoredMcpNodes(input, ctx, resuming);
|
|
246
|
+
const unavailable = checkAvailability(doc, registry, mcpFlowFeatures())
|
|
247
|
+
.filter((node) => !restored.has(node.nodeId) && (node.status === 'unknown' || node.status === 'unavailable'));
|
|
248
|
+
if (unavailable.length)
|
|
249
|
+
throw new ToolExecutionError({
|
|
250
|
+
code: ToolErrorCode.UNSUPPORTED_OPERATION,
|
|
251
|
+
message: `Flow cannot run on this host: ${unavailable.map((node) => `${node.nodeId}: ${node.reasons.join('; ')}`).join(' | ')}`,
|
|
252
|
+
details: { availability: unavailable },
|
|
253
|
+
});
|
|
254
|
+
const model = resolveModel(ctx, input.model_id);
|
|
255
|
+
const secretValues = new Map(resolveSecretValues(doc, process.env));
|
|
256
|
+
const aiConfig = flowAiConfig(process.env);
|
|
257
|
+
if (aiConfig)
|
|
258
|
+
secretValues.set('IFC_LITE_AI_API_KEY', aiConfig.apiKey);
|
|
259
|
+
const redaction = buildRedactionMap(secretValues);
|
|
260
|
+
const runDoc = interpolateSecrets(doc, secretValues);
|
|
261
|
+
const review = await prepareMcpFlowReview(input, ctx, model, runDoc, registry, rawInputs, resuming, readOnly);
|
|
262
|
+
// `networkGrants` is the graph's own declared capabilities (module doc);
|
|
263
|
+
// `model.openFromSource` can switch the host to a model it opened.
|
|
264
|
+
const host = createMcpFlowHost(model, ctx.registry, capsResult.value, { ai: review.ai, grants: capsResult.value });
|
|
265
|
+
const resume = await review.claim();
|
|
266
|
+
let result;
|
|
267
|
+
try {
|
|
268
|
+
result = await runFlow(runDoc, {
|
|
249
269
|
host,
|
|
270
|
+
resume,
|
|
250
271
|
registry,
|
|
251
272
|
inputs: rawInputs,
|
|
252
|
-
features:
|
|
273
|
+
features: mcpFlowFeatures(),
|
|
253
274
|
modelRevisions: { [model.id]: 0 },
|
|
254
275
|
tracking: new MemoryTrackingStore(),
|
|
255
276
|
signal: ctx.signal,
|
|
256
277
|
});
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
await review.fail();
|
|
281
|
+
throw error;
|
|
282
|
+
}
|
|
283
|
+
const pending = await review.settle(result, redaction, host.defaultModelId);
|
|
284
|
+
const outputs = result.graphOutputs.map((o) => ({ label: o.label, key: `${o.nodeId}.${o.port}`, data: serializeFlowData(o.data) }));
|
|
285
|
+
const statuses = {};
|
|
286
|
+
for (const r of result.reports)
|
|
287
|
+
statuses[r.status] = (statuses[r.status] ?? 0) + 1;
|
|
288
|
+
// Redacted at the OUTER boundary — the whole tool result, right before
|
|
289
|
+
// it crosses back to the MCP client — so a secret that came back inside
|
|
290
|
+
// a fetched response body (an output or an error message) is caught
|
|
291
|
+
// too, not just the literal param it was interpolated into.
|
|
292
|
+
return okResult(result.ok
|
|
293
|
+
? pending ? `Flow '${doc.name}' paused for review; no downstream effects ran.` : `Flow '${doc.name}' ran: ${outputs.length} output(s).`
|
|
294
|
+
: `Flow '${doc.name}' FAILED.`, redactDeep({
|
|
295
|
+
ok: result.ok,
|
|
296
|
+
usage_receipts: review.receipts,
|
|
297
|
+
...(pending ? { pending } : {}),
|
|
298
|
+
nodes: statuses,
|
|
299
|
+
writes: result.writes,
|
|
300
|
+
tracking: trackingSummary(result),
|
|
301
|
+
outputs,
|
|
302
|
+
errors: result.log.filter((l) => l.level === 'error'),
|
|
303
|
+
warnings: result.log.filter((l) => l.level === 'warn'),
|
|
304
|
+
}, redaction));
|
|
305
|
+
}
|
|
306
|
+
const resumeFlowTool = {
|
|
307
|
+
...runFlowTool,
|
|
308
|
+
name: 'resume_flow',
|
|
309
|
+
description: 'Consume one separately reviewed pending Flow artifact by exact proposal digest. Rechecks current sources, graph, permissions and original budget before restoring completed nodes and running downstream effects. Completed or lost-owner claims cannot run twice.',
|
|
310
|
+
inputSchema: { ...runFlowTool.inputSchema, required: ['checkpoint_path', 'approved_digest'], properties: {
|
|
311
|
+
...runFlowTool.inputSchema.properties,
|
|
312
|
+
approved_digest: { type: 'string', description: 'The exact proposal_digest reviewed from the pending artifact.' },
|
|
313
|
+
next_checkpoint_path: { type: 'string', description: 'A distinct new destination when downstream nodes pause for review again.' },
|
|
314
|
+
} },
|
|
315
|
+
handler: (input, ctx) => executeFlow(input, ctx, true),
|
|
316
|
+
};
|
|
317
|
+
const proposeFlowTool = {
|
|
318
|
+
...runFlowTool, name: 'propose_flow', scope: 'read',
|
|
319
|
+
description: 'Run a native read/AI-only graph to a durable pending artifact. Model and external effect nodes are refused before requesting; applying requires a separate authorized resume_flow call.',
|
|
320
|
+
handler: (input, ctx) => executeFlow(input, ctx, false, true),
|
|
277
321
|
};
|
|
278
|
-
export const flowTools = [describeFlow, runFlowTool];
|
|
322
|
+
export const flowTools = [describeFlow, runFlowTool, proposeFlowTool, resumeFlowTool];
|
|
279
323
|
//# sourceMappingURL=flow.js.map
|
package/dist/tools/flow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/tools/flow.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/tools/flow.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GAMnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,iGAAiG;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,EAAE,WAAW,EAAE,kFAAkF,EAAE;IACzG,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sDAAsD,EAAE;CAC1F,CAAC;AAEX,yGAAyG;AACzG,KAAK,UAAU,aAAa,CAAC,KAA8B,EAAE,GAAgB;IAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QACtD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,2BAA4B,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnI,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,uBAAwB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjJ,CAAC;IACH,CAAC;IACD,MAAM,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC,CAAC;AACnI,CAAC;AAED,+NAA+N;AAC/N,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACxD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAwB,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,YAAY,GAAS;IACzB,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,oGAAoG;QACpG,mGAAmG;QACnG,6DAA6D;IAC/D,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,oBAAoB,EAAE,KAAK,EAAE;IACzF,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,QAAQ,CAAC,0CAA0C,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc,EAAE;gBAC9F,EAAE,EAAE,KAAK;gBACT,WAAW,EAAE,MAAM,CAAC,QAAQ;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACvB,qEAAqE;QACrE,iEAAiE;QACjE,mEAAmE;QACnE,sDAAsD;QACtD,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;QAC9G,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;QAChE,OAAO,QAAQ,CACb,EAAE;YACA,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,cAAc,EAAE,CAAC,OAAO,CAAC,MAAM,aAAa;YAC/F,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,SAAS,WAAW,CAAC,MAAM,0BAA0B,WAAW,CAAC,MAAM,uBAAuB,EAC7H,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CACzC,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,SAAS,YAAY,CAAC,CAAU;IAC9B,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,CAAW,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAE,CAAW,CAAC,IAAI,CAAC,IAAI,OAAQ,CAAW,CAAC,GAAG,KAAK,QAAQ,CAAC;AACzJ,CAAC;AAED,yLAAyL;AACzL,SAAS,aAAa,CAAC,CAAU;IAC/B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAiB,EAAE,eAAe,CAAC,CAAC;IAC5D,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/G,CAAC;AAED,SAAS,iBAAiB,CAAC,IAA0B;IACnD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvC,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/G,CAAC;AACH,CAAC;AAED,gHAAgH;AAChH,SAAS,eAAe,CAAC,MAAiB;IACxC,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,CAAC,QAAQ;YAAE,SAAS;QAC1B,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC9B,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC9B,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,WAAW,GAAS;IACxB,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,iGAAiG;QACjG,gGAAgG;QAChG,wGAAwG;QACxG,4GAA4G;IAC9G,KAAK,EAAE,QAAQ;IACf,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,eAAe;YAClB,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2GAA2G,EAAE;YAC7J,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4DAA4D,EAAE;YACvG,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mDAAmD;gBAChE,oBAAoB,EAAE,IAAI;aAC3B;SACF;QACD,oBAAoB,EAAE,KAAK;KAC5B;IACD,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;CACjD,CAAC;AAEF,KAAK,UAAU,WAAW,CAAC,KAA8B,EAAE,GAAgB,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK;IAC3G,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,kBAAkB,CAAC;YAC3B,IAAI,EAAE,aAAa,CAAC,aAAa;YACjC,OAAO,EAAE,0CAA0C,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc;YACvF,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACvB,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAAC;YAC3B,IAAI,EAAE,aAAa,CAAC,aAAa;YACjC,OAAO,EAAE,qBAAqB,MAAM,CAAC,MAAM,+CAA+C;YAC1F,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;SACjC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;QACtD,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACzF,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACtG,CAAC,CAAC;YAAE,MAAM,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,iBAAiB,EAAE,OAAO,EAAE,oHAAoH,EAAE,CAAC,CAAC;IAC7M,CAAC;IAED,MAAM,SAAS,GAAI,KAAK,CAAC,MAA8C,IAAI,EAAE,CAAC;IAC9E,uEAAuE;IACvE,uEAAuE;IACvE,qEAAqE;IACrE,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,IAAI,kBAAkB,CAAC;YAC3B,IAAI,EAAE,aAAa,CAAC,aAAa;YACjC,OAAO,EAAE,iBAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;SACtK,CAAC,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,wDAAwD;IACxD,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,kBAAkB,CAAC;YAC3B,IAAI,EAAE,aAAa,CAAC,aAAa;YACjC,OAAO,EAAE,8CAA8C,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC5G,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,4CAA4C;IAC5C,MAAM,YAAY,GAAG,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAChE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,kBAAkB,CAAC;YAC3B,IAAI,EAAE,aAAa,CAAC,aAAa;YACjC,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,iCAAiC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAChH,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;SACpE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC;IAChH,IAAI,WAAW,CAAC,MAAM;QAAE,MAAM,IAAI,kBAAkB,CAAC;YACnD,IAAI,EAAE,aAAa,CAAC,qBAAqB;YACzC,OAAO,EAAE,iCAAiC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC/H,OAAO,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE;SACvC,CAAC,CAAC;IAGH,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,QAA8B,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,QAAQ;QAAE,YAAY,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9G,yEAAyE;IACzE,mEAAmE;IACnE,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IACnH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACpC,IAAI,MAAiB,CAAC;IACtB,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE;YACnC,IAAI;YACJ,MAAM;YACN,QAAQ;YACR,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,eAAe,EAAE;YAC3B,cAAc,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACjC,QAAQ,EAAE,IAAI,mBAAmB,EAAE;YACnC,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;IACzD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpI,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO;QAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEnF,uEAAuE;IACvE,wEAAwE;IACxE,oEAAoE;IACpE,4DAA4D;IAC5D,OAAO,QAAQ,CACb,MAAM,CAAC,EAAE;QACP,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,iDAAiD,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,UAAU,OAAO,CAAC,MAAM,aAAa;QACvI,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,WAAW,EAChC,UAAU,CACR;QACE,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,cAAc,EAAE,MAAM,CAAC,QAAQ;QAC/B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC;QACjC,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;QACrD,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;KACvD,EACD,SAAS,CACV,CACF,CAAC;AACN,CAAC;AAED,MAAM,cAAc,GAAS;IAC3B,GAAG,WAAW;IACd,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,oQAAoQ;IACjR,WAAW,EAAE,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE;YACvG,GAAG,WAAW,CAAC,WAAW,CAAC,UAAU;YACrC,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+DAA+D,EAAE;YACjH,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0EAA0E,EAAE;SAClI,EAAE;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC;CACvD,CAAC;AAEF,MAAM,eAAe,GAAS;IAC5B,GAAG,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM;IACnD,WAAW,EAAE,yLAAyL;IACtM,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC;CAC9D,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAW,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-edit.d.ts","sourceRoot":"","sources":["../../src/tools/hosted-edit.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,sFAAsF;AACtF,eAAO,MAAM,cAAc,EAAE,IA4B5B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { ToolErrorCode, ToolExecutionError } from '../errors.js';
|
|
5
|
+
import { okResult, resolveModel } from './util.js';
|
|
6
|
+
/** #6232 D5: hosted.slide and inspector dimensions share their physical edit core. */
|
|
7
|
+
export const hostedEditTool = {
|
|
8
|
+
name: 'edit_hosted_element',
|
|
9
|
+
description: 'Move or resize a live wall-hosted opening, door or window together with its actual cut. '
|
|
10
|
+
+ 'Offset and Sill are metres in the host frame; OverallWidth/OverallHeight are metres. '
|
|
11
|
+
+ 'Identity and relationships are retained. Overlap, out-of-host and unsupported geometry edits are refused atomically. '
|
|
12
|
+
+ 'One mutation_undo restores the preceding graph.',
|
|
13
|
+
scope: 'mutate',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object', properties: {
|
|
16
|
+
model_id: { type: 'string', description: 'Required when multiple models are loaded.' },
|
|
17
|
+
express_id: { type: 'integer', minimum: 1 },
|
|
18
|
+
patch: {
|
|
19
|
+
type: 'object', properties: {
|
|
20
|
+
OverallWidth: { type: 'number', minimum: 0 }, OverallHeight: { type: 'number', minimum: 0 },
|
|
21
|
+
Offset: { type: 'number' }, Sill: { type: 'number' },
|
|
22
|
+
}, additionalProperties: false, anyOf: ['OverallWidth', 'OverallHeight', 'Offset', 'Sill'].map(name => ({ required: [name] })),
|
|
23
|
+
},
|
|
24
|
+
}, required: ['express_id', 'patch'], additionalProperties: false,
|
|
25
|
+
},
|
|
26
|
+
handler(input, ctx) {
|
|
27
|
+
const model = resolveModel(ctx, input.model_id);
|
|
28
|
+
try {
|
|
29
|
+
const ref = model.bim.store.editHostedElement({ modelId: model.id, expressId: input.express_id }, input.patch);
|
|
30
|
+
return okResult(`Edited hosted element #${ref.expressId}.`, { ...ref });
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
throw new ToolExecutionError({ code: ToolErrorCode.INVALID_INPUT, message: error instanceof Error ? error.message : String(error) });
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=hosted-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-edit.js","sourceRoot":"","sources":["../../src/tools/hosted-edit.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAG/D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEnD,sFAAsF;AACtF,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,0FAA0F;UACnG,uFAAuF;UACvF,uHAAuH;UACvH,iDAAiD;IACrD,KAAK,EAAE,QAAQ;IACf,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE;YAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;YACtF,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;YAC3C,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE;oBAC1B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;oBAC3F,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACrD,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC/H;SACF,EAAE,QAAQ,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,oBAAoB,EAAE,KAAK;KAClE;IACD,OAAO,CAAC,KAAK,EAAE,GAAG;QAChB,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,QAA8B,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,UAAoB,EAAE,EAAE,KAAK,CAAC,KAA0B,CAAC,CAAC;YAC9I,OAAO,QAAQ,CAAC,0BAA0B,GAAG,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvI,CAAC;IACH,CAAC;CACF,CAAC"}
|