@ifc-lite/mcp 0.22.1 → 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.
Files changed (165) hide show
  1. package/README.md +82 -0
  2. package/dist/cli.js +2 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/context.d.ts.map +1 -1
  5. package/dist/context.js +5 -0
  6. package/dist/context.js.map +1 -1
  7. package/dist/errors.d.ts +2 -0
  8. package/dist/errors.d.ts.map +1 -1
  9. package/dist/errors.js +2 -0
  10. package/dist/errors.js.map +1 -1
  11. package/dist/headless-backend-align.d.ts +6 -0
  12. package/dist/headless-backend-align.d.ts.map +1 -0
  13. package/dist/headless-backend-align.js +35 -0
  14. package/dist/headless-backend-align.js.map +1 -0
  15. package/dist/headless-backend-modelling.d.ts +50 -0
  16. package/dist/headless-backend-modelling.d.ts.map +1 -0
  17. package/dist/headless-backend-modelling.js +128 -0
  18. package/dist/headless-backend-modelling.js.map +1 -0
  19. package/dist/headless-backend-room.d.ts +8 -0
  20. package/dist/headless-backend-room.d.ts.map +1 -0
  21. package/dist/headless-backend-room.js +24 -0
  22. package/dist/headless-backend-room.js.map +1 -0
  23. package/dist/headless-backend-store-stubs.d.ts +5 -4
  24. package/dist/headless-backend-store-stubs.d.ts.map +1 -1
  25. package/dist/headless-backend-store-stubs.js +1 -17
  26. package/dist/headless-backend-store-stubs.js.map +1 -1
  27. package/dist/headless-backend-store.d.ts +8 -0
  28. package/dist/headless-backend-store.d.ts.map +1 -0
  29. package/dist/headless-backend-store.js +38 -0
  30. package/dist/headless-backend-store.js.map +1 -0
  31. package/dist/headless-backend.d.ts +4 -1
  32. package/dist/headless-backend.d.ts.map +1 -1
  33. package/dist/headless-backend.js +8 -33
  34. package/dist/headless-backend.js.map +1 -1
  35. package/dist/headless-native-geometry.d.ts +6 -0
  36. package/dist/headless-native-geometry.d.ts.map +1 -0
  37. package/dist/headless-native-geometry.js +31 -0
  38. package/dist/headless-native-geometry.js.map +1 -0
  39. package/dist/headless-room-geometry.d.ts +9 -0
  40. package/dist/headless-room-geometry.d.ts.map +1 -0
  41. package/dist/headless-room-geometry.js +66 -0
  42. package/dist/headless-room-geometry.js.map +1 -0
  43. package/dist/protocol/types.d.ts +1 -0
  44. package/dist/protocol/types.d.ts.map +1 -1
  45. package/dist/resources/providers.d.ts.map +1 -1
  46. package/dist/resources/providers.js +10 -1
  47. package/dist/resources/providers.js.map +1 -1
  48. package/dist/server.d.ts.map +1 -1
  49. package/dist/server.js +5 -17
  50. package/dist/server.js.map +1 -1
  51. package/dist/session-cleanup.d.ts +5 -0
  52. package/dist/session-cleanup.d.ts.map +1 -0
  53. package/dist/session-cleanup.js +36 -0
  54. package/dist/session-cleanup.js.map +1 -0
  55. package/dist/test/live-tool-session.d.ts +9 -0
  56. package/dist/test/live-tool-session.d.ts.map +1 -0
  57. package/dist/test/live-tool-session.js +30 -0
  58. package/dist/test/live-tool-session.js.map +1 -0
  59. package/dist/tools/bcf.js +2 -2
  60. package/dist/tools/bcf.js.map +1 -1
  61. package/dist/tools/copy-elements.d.ts +4 -0
  62. package/dist/tools/copy-elements.d.ts.map +1 -0
  63. package/dist/tools/copy-elements.js +76 -0
  64. package/dist/tools/copy-elements.js.map +1 -0
  65. package/dist/tools/design-place.d.ts +3 -0
  66. package/dist/tools/design-place.d.ts.map +1 -0
  67. package/dist/tools/design-place.js +79 -0
  68. package/dist/tools/design-place.js.map +1 -0
  69. package/dist/tools/discovery.js +3 -3
  70. package/dist/tools/discovery.js.map +1 -1
  71. package/dist/tools/export.js +7 -7
  72. package/dist/tools/export.js.map +1 -1
  73. package/dist/tools/flow-ai.d.ts +6 -0
  74. package/dist/tools/flow-ai.d.ts.map +1 -0
  75. package/dist/tools/flow-ai.js +23 -0
  76. package/dist/tools/flow-ai.js.map +1 -0
  77. package/dist/tools/flow-host.d.ts +1 -1
  78. package/dist/tools/flow-host.d.ts.map +1 -1
  79. package/dist/tools/flow-host.js +5 -1
  80. package/dist/tools/flow-host.js.map +1 -1
  81. package/dist/tools/flow-review-host.d.ts +28 -0
  82. package/dist/tools/flow-review-host.d.ts.map +1 -0
  83. package/dist/tools/flow-review-host.js +142 -0
  84. package/dist/tools/flow-review-host.js.map +1 -0
  85. package/dist/tools/flow.d.ts.map +1 -1
  86. package/dist/tools/flow.js +147 -93
  87. package/dist/tools/flow.js.map +1 -1
  88. package/dist/tools/hosted-edit.d.ts +4 -0
  89. package/dist/tools/hosted-edit.d.ts.map +1 -0
  90. package/dist/tools/hosted-edit.js +37 -0
  91. package/dist/tools/hosted-edit.js.map +1 -0
  92. package/dist/tools/hosted-place.d.ts +3 -0
  93. package/dist/tools/hosted-place.d.ts.map +1 -0
  94. package/dist/tools/hosted-place.js +63 -0
  95. package/dist/tools/hosted-place.js.map +1 -0
  96. package/dist/tools/ids-accessor.d.ts +2 -1
  97. package/dist/tools/ids-accessor.d.ts.map +1 -1
  98. package/dist/tools/ids-accessor.js.map +1 -1
  99. package/dist/tools/ids-authoring-model.d.ts +3 -0
  100. package/dist/tools/ids-authoring-model.d.ts.map +1 -0
  101. package/dist/tools/ids-authoring-model.js +112 -0
  102. package/dist/tools/ids-authoring-model.js.map +1 -0
  103. package/dist/tools/ids-authoring.d.ts +3 -0
  104. package/dist/tools/ids-authoring.d.ts.map +1 -0
  105. package/dist/tools/ids-authoring.js +202 -0
  106. package/dist/tools/ids-authoring.js.map +1 -0
  107. package/dist/tools/ids-schema.d.ts +3 -0
  108. package/dist/tools/ids-schema.d.ts.map +1 -0
  109. package/dist/tools/ids-schema.js +91 -0
  110. package/dist/tools/ids-schema.js.map +1 -0
  111. package/dist/tools/index.d.ts +5 -2
  112. package/dist/tools/index.d.ts.map +1 -1
  113. package/dist/tools/index.js +8 -2
  114. package/dist/tools/index.js.map +1 -1
  115. package/dist/tools/layer-store.d.ts +2 -0
  116. package/dist/tools/layer-store.d.ts.map +1 -1
  117. package/dist/tools/layer-store.js +4 -0
  118. package/dist/tools/layer-store.js.map +1 -1
  119. package/dist/tools/mutate.d.ts.map +1 -1
  120. package/dist/tools/mutate.js +20 -64
  121. package/dist/tools/mutate.js.map +1 -1
  122. package/dist/tools/mutation-undo.d.ts +6 -0
  123. package/dist/tools/mutation-undo.d.ts.map +1 -0
  124. package/dist/tools/mutation-undo.js +63 -0
  125. package/dist/tools/mutation-undo.js.map +1 -0
  126. package/dist/tools/physical-edit.d.ts +4 -0
  127. package/dist/tools/physical-edit.d.ts.map +1 -0
  128. package/dist/tools/physical-edit.js +77 -0
  129. package/dist/tools/physical-edit.js.map +1 -0
  130. package/dist/tools/query-tools.d.ts +3 -0
  131. package/dist/tools/query-tools.d.ts.map +1 -0
  132. package/dist/tools/query-tools.js +8 -0
  133. package/dist/tools/query-tools.js.map +1 -0
  134. package/dist/tools/query.d.ts +1 -1
  135. package/dist/tools/query.d.ts.map +1 -1
  136. package/dist/tools/query.js +4 -4
  137. package/dist/tools/query.js.map +1 -1
  138. package/dist/tools/room-command.d.ts +6 -0
  139. package/dist/tools/room-command.d.ts.map +1 -0
  140. package/dist/tools/room-command.js +75 -0
  141. package/dist/tools/room-command.js.map +1 -0
  142. package/dist/tools/util.d.ts +10 -0
  143. package/dist/tools/util.d.ts.map +1 -1
  144. package/dist/tools/util.js +13 -1
  145. package/dist/tools/util.js.map +1 -1
  146. package/dist/tools/validation.d.ts +9 -0
  147. package/dist/tools/validation.d.ts.map +1 -1
  148. package/dist/tools/validation.js +3 -3
  149. package/dist/tools/validation.js.map +1 -1
  150. package/dist/tools/wall-join.d.ts +3 -0
  151. package/dist/tools/wall-join.d.ts.map +1 -0
  152. package/dist/tools/wall-join.js +39 -0
  153. package/dist/tools/wall-join.js.map +1 -0
  154. package/dist/transport/http-helpers.d.ts +85 -0
  155. package/dist/transport/http-helpers.d.ts.map +1 -0
  156. package/dist/transport/http-helpers.js +149 -0
  157. package/dist/transport/http-helpers.js.map +1 -0
  158. package/dist/transport/http.d.ts +14 -1
  159. package/dist/transport/http.d.ts.map +1 -1
  160. package/dist/transport/http.js +80 -90
  161. package/dist/transport/http.js.map +1 -1
  162. package/dist/validate.d.ts +1 -1
  163. package/dist/validate.js +3 -0
  164. package/dist/validate.js.map +1 -1
  165. package/package.json +24 -21
@@ -1 +1 @@
1
- {"version":3,"file":"flow-host.d.ts","sourceRoot":"","sources":["../../src/tools/flow-host.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAUhE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,UAAU,EAAE,GAAG,QAAQ,CA6B/H"}
1
+ {"version":3,"file":"flow-host.d.ts","sourceRoot":"","sources":["../../src/tools/flow-host.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAWhE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,UAAU,EAAE,EAAE,QAAQ,GAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAM,GAAG,QAAQ,CAgC/K"}
@@ -2,6 +2,7 @@
2
2
  * License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  import { deriveModelId, loadIfcModelFromBytes } from '../loader.js';
5
+ import { buildIdsAccessor } from './ids-accessor.js';
5
6
  /** `base`, or `base_2`, `base_3`, … — the first id the registry does not hold yet. */
6
7
  function freeModelId(registry, base) {
7
8
  let id = base;
@@ -9,9 +10,10 @@ function freeModelId(registry, base) {
9
10
  id = `${base}_${n}`;
10
11
  return id;
11
12
  }
12
- export function createMcpFlowHost(initial, registry, networkGrants) {
13
+ export function createMcpFlowHost(initial, registry, networkGrants, services = {}) {
13
14
  let active = initial;
14
15
  return {
16
+ ...services,
15
17
  get bim() { return active.bim; },
16
18
  networkGrants,
17
19
  get defaultModelId() { return active.id; },
@@ -32,6 +34,8 @@ export function createMcpFlowHost(initial, registry, networkGrants) {
32
34
  strings: model.store.strings ?? null,
33
35
  };
34
36
  },
37
+ // `ids.validate` reads the session's effective model, like `ids_validate`.
38
+ idsAccessor: () => buildIdsAccessor(active.store, active.backend.getOrCreateMutationView()),
35
39
  async openModel(bytes, name) {
36
40
  const loaded = await loadIfcModelFromBytes(bytes, name, freeModelId(registry, deriveModelId(name)));
37
41
  registry.add(loaded);
@@ -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;AAEpE,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;IACnH,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,OAAO;QACL,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,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"}
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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/tools/flow.ts"],"names":[],"mappings":"AAgFA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA2OvC,eAAO,MAAM,SAAS,EAAE,IAAI,EAAgC,CAAC"}
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"}
@@ -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
- * Element-creation node types (`element.column`, `model.addElement`, …)
30
- * currently fail when run through MCP: `HeadlessLikeBackend`'s
31
- * `store.addColumn`/`addWall`/`addSlab`/`addBeam`/… all throw "not supported
32
- * in MCP v0.1; use entity_create" (`headless-backend.ts`). That is a
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
@@ -49,9 +45,14 @@
49
45
  * see `FlowHost.networkGrants`'s doc comment.
50
46
  */
51
47
  import { readFile } from 'node:fs/promises';
52
- import { declaredInputKeys, describeFlowIO, migrateFlowDocument, MemoryTrackingStore, runFlow, unknownInputKeys, validateFlowDocument, validateFlowWiring, } from '@ifc-lite/flow';
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, headlessFeatures, interpolateSecrets, redactDeep, resolveSecretValues, usableSecretNames, validateSecretReferences, } from '@ifc-lite/flow-nodes';
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,10 +117,12 @@ 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 ok = diagnostics.length === 0;
120
+ const availability = checkAvailability(doc, registry, mcpFlowFeatures());
121
+ const unavailable = availability.filter((node) => node.status === 'unknown' || node.status === 'unavailable');
122
+ const ok = diagnostics.length === 0 && unavailable.length === 0;
120
123
  return okResult(ok
121
124
  ? `Flow '${io.name}' (${io.id}): ${io.inputs.length} input(s), ${io.outputs.length} output(s).`
122
- : `Flow '${io.name}' (${io.id}) has ${diagnostics.length} wiring problem(s).`, { ok, ...io, diagnostics });
125
+ : `Flow '${io.name}' (${io.id}) has ${diagnostics.length} wiring problem(s) and ${unavailable.length} unavailable node(s).`, { ok, ...io, diagnostics, availability });
123
126
  },
124
127
  };
125
128
  const DEFAULT_ROW_CAP = 1000;
@@ -169,6 +172,7 @@ const runFlowTool = {
169
172
  type: 'object',
170
173
  properties: {
171
174
  ...flowInputSchema,
175
+ checkpoint_path: { type: 'string', description: 'New durable review checkpoint destination, required before a review-capable run; subject to allowedPaths.' },
172
176
  model_id: { type: 'string', description: 'Loaded model id; required when multiple models are loaded.' },
173
177
  inputs: {
174
178
  type: 'object',
@@ -178,92 +182,142 @@ const runFlowTool = {
178
182
  },
179
183
  additionalProperties: false,
180
184
  },
181
- async handler(input, ctx) {
182
- const value = await loadFlowValue(input, ctx);
183
- const parsed = parseGraphValue(value);
184
- if (!parsed.ok) {
185
- throw new ToolExecutionError({
186
- code: ToolErrorCode.INVALID_INPUT,
187
- message: `Flow document is structurally invalid: ${parsed.problems.length} problem(s).`,
188
- details: { diagnostics: parsed.problems },
189
- });
190
- }
191
- const registry = createStandardRegistry();
192
- const doc = parsed.doc;
193
- const wiring = validateFlowWiring(doc, registry);
194
- if (wiring.length > 0) {
195
- throw new ToolExecutionError({
196
- code: ToolErrorCode.INVALID_INPUT,
197
- message: `Flow document has ${wiring.length} wiring problem(s); call describe_flow first.`,
198
- details: { diagnostics: wiring },
199
- });
200
- }
201
- const rawInputs = input.inputs ?? {};
202
- // The CLI bug this guards against: an `--input` key naming no declared
203
- // parameter (e.g. missing the node id) used to be dropped silently, so
204
- // the graph ran on its defaults and reported success anyway (#5167).
205
- const unknown = unknownInputKeys(rawInputs, doc, registry);
206
- if (unknown.length > 0) {
207
- const known = declaredInputKeys(doc);
208
- throw new ToolExecutionError({
209
- code: ToolErrorCode.INVALID_INPUT,
210
- message: `inputs key(s) ${unknown.map((k) => `"${k}"`).join(', ')} name no declared parameter${known.length > 0 ? `; this graph declares ${known.join(', ')}` : ''}.`,
211
- });
212
- }
213
- // Capabilities first, so a malformed one is reported as itself rather
214
- // than as every secret being undeclared (#5446 review).
215
- const capsResult = parseCapabilities(doc.capabilities);
216
- if (!capsResult.ok) {
217
- throw new ToolExecutionError({
218
- code: ToolErrorCode.INVALID_INPUT,
219
- message: `the graph declares malformed capabilities: ${capsResult.errors.map((e) => e.message).join('; ')}`,
220
- });
221
- }
222
- // Secrets: validated against the real environment BEFORE anything else
223
- // touches the graph (see module doc above).
224
- const secretErrors = validateSecretReferences(doc, process.env);
225
- if (secretErrors.length > 0) {
226
- throw new ToolExecutionError({
227
- code: ToolErrorCode.INVALID_INPUT,
228
- message: `${secretErrors.length} secret reference problem(s): ${secretErrors.map((e) => e.message).join('; ')}`,
229
- });
230
- }
231
- const secretValues = resolveSecretValues(doc, process.env);
232
- const redaction = buildRedactionMap(secretValues);
233
- const runDoc = interpolateSecrets(doc, secretValues);
234
- const model = resolveModel(ctx, input.model_id);
235
- // `networkGrants` is the graph's own declared capabilities (module doc);
236
- // `model.openFromSource` can switch the host to a model it opened.
237
- const host = createMcpFlowHost(model, ctx.registry, capsResult.value);
238
- const result = await runFlow(runDoc, {
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, {
239
269
  host,
270
+ resume,
240
271
  registry,
241
272
  inputs: rawInputs,
242
- features: headlessFeatures(usableSecretNames(process.env)),
273
+ features: mcpFlowFeatures(),
243
274
  modelRevisions: { [model.id]: 0 },
244
275
  tracking: new MemoryTrackingStore(),
245
276
  signal: ctx.signal,
246
277
  });
247
- const outputs = result.graphOutputs.map((o) => ({ label: o.label, key: `${o.nodeId}.${o.port}`, data: serializeFlowData(o.data) }));
248
- const statuses = {};
249
- for (const r of result.reports)
250
- statuses[r.status] = (statuses[r.status] ?? 0) + 1;
251
- // Redacted at the OUTER boundary — the whole tool result, right before
252
- // it crosses back to the MCP client — so a secret that came back inside
253
- // a fetched response body (an output or an error message) is caught
254
- // too, not just the literal param it was interpolated into.
255
- return okResult(result.ok
256
- ? `Flow '${doc.name}' ran: ${outputs.length} output(s).`
257
- : `Flow '${doc.name}' FAILED.`, redactDeep({
258
- ok: result.ok,
259
- nodes: statuses,
260
- writes: result.writes,
261
- tracking: trackingSummary(result),
262
- outputs,
263
- errors: result.log.filter((l) => l.level === 'error'),
264
- warnings: result.log.filter((l) => l.level === 'warn'),
265
- }, redaction));
266
- },
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),
267
321
  };
268
- export const flowTools = [describeFlow, runFlowTool];
322
+ export const flowTools = [describeFlow, runFlowTool, proposeFlowTool, resumeFlowTool];
269
323
  //# sourceMappingURL=flow.js.map
@@ -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":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Tool } from './types.js';
2
+ /** #6232 D5: hosted.slide and inspector dimensions share their physical edit core. */
3
+ export declare const hostedEditTool: Tool;
4
+ //# sourceMappingURL=hosted-edit.d.ts.map
@@ -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"}