@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.
Files changed (156) hide show
  1. package/README.md +65 -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 +41 -1
  16. package/dist/headless-backend-modelling.d.ts.map +1 -1
  17. package/dist/headless-backend-modelling.js +112 -6
  18. package/dist/headless-backend-modelling.js.map +1 -1
  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 +4 -6
  24. package/dist/headless-backend-store-stubs.d.ts.map +1 -1
  25. package/dist/headless-backend-store-stubs.js +1 -12
  26. package/dist/headless-backend-store-stubs.js.map +1 -1
  27. package/dist/headless-backend-store.d.ts +3 -1
  28. package/dist/headless-backend-store.d.ts.map +1 -1
  29. package/dist/headless-backend-store.js +14 -22
  30. package/dist/headless-backend-store.js.map +1 -1
  31. package/dist/headless-backend.d.ts +4 -0
  32. package/dist/headless-backend.d.ts.map +1 -1
  33. package/dist/headless-backend.js +7 -1
  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 +143 -99
  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/ids-accessor.d.ts +2 -1
  93. package/dist/tools/ids-accessor.d.ts.map +1 -1
  94. package/dist/tools/ids-accessor.js.map +1 -1
  95. package/dist/tools/ids-authoring-model.d.ts +3 -0
  96. package/dist/tools/ids-authoring-model.d.ts.map +1 -0
  97. package/dist/tools/ids-authoring-model.js +112 -0
  98. package/dist/tools/ids-authoring-model.js.map +1 -0
  99. package/dist/tools/ids-authoring.d.ts +3 -0
  100. package/dist/tools/ids-authoring.d.ts.map +1 -0
  101. package/dist/tools/ids-authoring.js +202 -0
  102. package/dist/tools/ids-authoring.js.map +1 -0
  103. package/dist/tools/ids-schema.d.ts +3 -0
  104. package/dist/tools/ids-schema.d.ts.map +1 -0
  105. package/dist/tools/ids-schema.js +91 -0
  106. package/dist/tools/ids-schema.js.map +1 -0
  107. package/dist/tools/index.d.ts +5 -2
  108. package/dist/tools/index.d.ts.map +1 -1
  109. package/dist/tools/index.js +8 -2
  110. package/dist/tools/index.js.map +1 -1
  111. package/dist/tools/layer-store.d.ts +2 -0
  112. package/dist/tools/layer-store.d.ts.map +1 -1
  113. package/dist/tools/layer-store.js +4 -0
  114. package/dist/tools/layer-store.js.map +1 -1
  115. package/dist/tools/mutate.d.ts.map +1 -1
  116. package/dist/tools/mutate.js +12 -2
  117. package/dist/tools/mutate.js.map +1 -1
  118. package/dist/tools/mutation-undo.d.ts.map +1 -1
  119. package/dist/tools/mutation-undo.js +3 -0
  120. package/dist/tools/mutation-undo.js.map +1 -1
  121. package/dist/tools/physical-edit.d.ts +4 -0
  122. package/dist/tools/physical-edit.d.ts.map +1 -0
  123. package/dist/tools/physical-edit.js +77 -0
  124. package/dist/tools/physical-edit.js.map +1 -0
  125. package/dist/tools/query-tools.d.ts +3 -0
  126. package/dist/tools/query-tools.d.ts.map +1 -0
  127. package/dist/tools/query-tools.js +8 -0
  128. package/dist/tools/query-tools.js.map +1 -0
  129. package/dist/tools/query.d.ts +1 -1
  130. package/dist/tools/query.d.ts.map +1 -1
  131. package/dist/tools/query.js +4 -4
  132. package/dist/tools/query.js.map +1 -1
  133. package/dist/tools/room-command.d.ts +6 -0
  134. package/dist/tools/room-command.d.ts.map +1 -0
  135. package/dist/tools/room-command.js +75 -0
  136. package/dist/tools/room-command.js.map +1 -0
  137. package/dist/tools/util.d.ts +10 -0
  138. package/dist/tools/util.d.ts.map +1 -1
  139. package/dist/tools/util.js +13 -1
  140. package/dist/tools/util.js.map +1 -1
  141. package/dist/tools/validation.d.ts +9 -0
  142. package/dist/tools/validation.d.ts.map +1 -1
  143. package/dist/tools/validation.js +3 -3
  144. package/dist/tools/validation.js.map +1 -1
  145. package/dist/transport/http-helpers.d.ts +85 -0
  146. package/dist/transport/http-helpers.d.ts.map +1 -0
  147. package/dist/transport/http-helpers.js +149 -0
  148. package/dist/transport/http-helpers.js.map +1 -0
  149. package/dist/transport/http.d.ts +14 -1
  150. package/dist/transport/http.d.ts.map +1 -1
  151. package/dist/transport/http.js +80 -90
  152. package/dist/transport/http.js.map +1 -1
  153. package/dist/validate.d.ts +1 -1
  154. package/dist/validate.js +3 -0
  155. package/dist/validate.js.map +1 -1
  156. package/package.json +22 -19
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import type { IfcDataStore } from '@ifc-lite/parser';
9
9
  import type { MutablePropertyView } from '@ifc-lite/mutations';
10
+ import type { IFCDataAccessor } from '@ifc-lite/ids';
10
11
  /**
11
12
  * `mutationView`, when supplied, is consulted for entity membership only.
12
13
  * Enumeration excludes tombstones and includes overlay-created entities, and
@@ -14,5 +15,5 @@ import type { MutablePropertyView } from '@ifc-lite/mutations';
14
15
  * `EntityVisibilityView` structurally, so no adapter is needed. Omitting it
15
16
  * leaves the accessor answering for the file as parsed.
16
17
  */
17
- export declare function buildIdsAccessor(store: IfcDataStore, mutationView?: MutablePropertyView | null): unknown;
18
+ export declare function buildIdsAccessor(store: IfcDataStore, mutationView?: MutablePropertyView | null): IFCDataAccessor;
18
19
  //# sourceMappingURL=ids-accessor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ids-accessor.d.ts","sourceRoot":"","sources":["../../src/tools/ids-accessor.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,YAAY,CAAC,EAAE,mBAAmB,GAAG,IAAI,GACxC,OAAO,CAET"}
1
+ {"version":3,"file":"ids-accessor.d.ts","sourceRoot":"","sources":["../../src/tools/ids-accessor.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,YAAY,CAAC,EAAE,mBAAmB,GAAG,IAAI,GACxC,eAAe,CAEjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ids-accessor.js","sourceRoot":"","sources":["../../src/tools/ids-accessor.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAmB,EACnB,YAAyC;IAEzC,OAAO,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,IAAI,SAAS,CAAC,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"ids-accessor.js","sourceRoot":"","sources":["../../src/tools/ids-accessor.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAa/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAmB,EACnB,YAAyC;IAEzC,OAAO,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,IAAI,SAAS,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Tool } from './types.js';
2
+ export declare const idsAuthoringModelTools: Tool[];
3
+ //# sourceMappingURL=ids-authoring-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-authoring-model.d.ts","sourceRoot":"","sources":["../../src/tools/ids-authoring-model.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAgGvC,eAAO,MAAM,sBAAsB,EAAE,IAAI,EAA0D,CAAC"}
@@ -0,0 +1,112 @@
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
+ /**
5
+ * IDS authoring tools, batch 2 (IDS-119): `ids_diff`, plus the model-loop
6
+ * and test-suite tools `ids_preview`, `ids_infer`, `ids_coverage` and
7
+ * `ids_test`.
8
+ *
9
+ * `ids_diff` works today (re-identification matcher, `diffIds`). The other
10
+ * four are declared with their final input schemas and answer
11
+ * UNSUPPORTED_OPERATION, the same convention as `gherkin_check`: the
12
+ * funnel, inference and coverage engines (IDS model loop) and the
13
+ * test-suite runner (IDS-110) are not in this release. Each replaces its
14
+ * stub handler when its engine lands; the names and inputs do not change.
15
+ */
16
+ import { readFile } from 'node:fs/promises';
17
+ import { IDSParseError, parseIDS } from '@ifc-lite/ids';
18
+ import { diffIds } from '@ifc-lite/ids-authoring';
19
+ import { ToolErrorCode, ToolExecutionError } from '../errors.js';
20
+ import { resolveSafePath } from '../safe-path.js';
21
+ import { okResult } from './util.js';
22
+ async function loadSide(input, side, ctx) {
23
+ const inline = input[`${side}_xml`];
24
+ const path = input[`${side}_path`];
25
+ let xml;
26
+ if (typeof inline === 'string')
27
+ xml = inline;
28
+ else if (typeof path === 'string')
29
+ xml = await readFile(await resolveSafePath(path, ctx, 'read'), 'utf-8');
30
+ else
31
+ throw new ToolExecutionError({ code: ToolErrorCode.INVALID_INPUT, message: `Provide ${side}_xml or ${side}_path.` });
32
+ try {
33
+ return parseIDS(xml);
34
+ }
35
+ catch (err) {
36
+ if (!(err instanceof IDSParseError))
37
+ throw err;
38
+ throw new ToolExecutionError({ code: ToolErrorCode.PARSE_FAILED, message: `The ${side} IDS does not parse: ${err.message}` });
39
+ }
40
+ }
41
+ const idsDiff = {
42
+ name: 'ids_diff',
43
+ description: 'Semantic diff of two IDS revisions. Specifications and facets are paired by identifier, then name and applicability, then similarity, so a rename or an edited requirement is one change. Returns added / removed / changed entries with XML paths and a plain-language line each.',
44
+ scope: 'read',
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {
48
+ before_xml: { type: 'string' },
49
+ before_path: { type: 'string', description: 'Subject to allowedPaths.' },
50
+ after_xml: { type: 'string' },
51
+ after_path: { type: 'string', description: 'Subject to allowedPaths.' },
52
+ },
53
+ additionalProperties: false,
54
+ },
55
+ async handler(input, ctx) {
56
+ const diff = diffIds(await loadSide(input, 'before', ctx), await loadSide(input, 'after', ctx));
57
+ const head = diff.identical ? 'No changes.' : `${diff.entries.length} change(s):`;
58
+ const lines = diff.entries.slice(0, 20).map((e) => `- ${e.text}`);
59
+ return okResult([head, ...lines].join('\n'), { identical: diff.identical, entries: diff.entries });
60
+ },
61
+ };
62
+ function notInThisRelease(name, engine) {
63
+ return () => {
64
+ throw new ToolExecutionError({
65
+ code: ToolErrorCode.UNSUPPORTED_OPERATION,
66
+ message: `${name} is not available in this release: it needs ${engine}, which has not shipped yet.`,
67
+ hint: 'Use ids_validate to check a model against an IDS, and ids_lint for static checks.',
68
+ });
69
+ };
70
+ }
71
+ const MODEL_ID = { type: 'string', description: 'Loaded model to evaluate against (default: the only one).' };
72
+ const IDS_SOURCE = {
73
+ ids_xml: { type: 'string' },
74
+ ids_path: { type: 'string' },
75
+ doc: { type: 'object', description: 'A Studio document from ids_read / ids_apply_ops.' },
76
+ };
77
+ const MODEL_LOOP = 'the IDS model loop (funnel, inference and coverage engines)';
78
+ const idsPreview = {
79
+ name: 'ids_preview',
80
+ description: 'Funnel counts per specification against a loaded model: how many elements each applicability facet keeps, and how many pass each requirement. Not available yet.',
81
+ scope: 'validate',
82
+ inputSchema: { type: 'object', properties: { model_id: MODEL_ID, ...IDS_SOURCE, spec_id: { type: 'string' } }, additionalProperties: false },
83
+ handler: notInThisRelease('ids_preview', MODEL_LOOP),
84
+ };
85
+ const idsInfer = {
86
+ name: 'ids_infer',
87
+ description: 'Infer specifications from the elements a selector picks in a loaded model (IfcOpenShell selector syntax). Returns ops for ids_apply_ops. Not available yet.',
88
+ scope: 'validate',
89
+ inputSchema: {
90
+ type: 'object',
91
+ properties: { model_id: MODEL_ID, select: { type: 'string' }, threshold: { type: 'number', minimum: 0, maximum: 1 } },
92
+ required: ['select'],
93
+ additionalProperties: false,
94
+ },
95
+ handler: notInThisRelease('ids_infer', MODEL_LOOP),
96
+ };
97
+ const idsCoverage = {
98
+ name: 'ids_coverage',
99
+ description: 'Element classes in a loaded model that no specification of the IDS governs. Not available yet.',
100
+ scope: 'validate',
101
+ inputSchema: { type: 'object', properties: { model_id: MODEL_ID, ...IDS_SOURCE }, additionalProperties: false },
102
+ handler: notInThisRelease('ids_coverage', MODEL_LOOP),
103
+ };
104
+ const idsTest = {
105
+ name: 'ids_test',
106
+ description: 'Run the test suites stored in an .idsz bundle (fixtures that must pass or fail each specification). Not available yet.',
107
+ scope: 'validate',
108
+ inputSchema: { type: 'object', properties: { idsz_path: { type: 'string' } }, required: ['idsz_path'], additionalProperties: false },
109
+ handler: notInThisRelease('ids_test', 'the IDS test-suite runner'),
110
+ };
111
+ export const idsAuthoringModelTools = [idsDiff, idsPreview, idsInfer, idsCoverage, idsTest];
112
+ //# sourceMappingURL=ids-authoring-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-authoring-model.js","sourceRoot":"","sources":["../../src/tools/ids-authoring-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Tool } from './types.js';
2
+ export declare const idsAuthoringTools: Tool[];
3
+ //# sourceMappingURL=ids-authoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-authoring.d.ts","sourceRoot":"","sources":["../../src/tools/ids-authoring.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAiMvC,eAAO,MAAM,iBAAiB,EAAE,IAAI,EAAwD,CAAC"}
@@ -0,0 +1,202 @@
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
+ /**
5
+ * IDS authoring tools, batch 1 (IDS-118): `ids_audit`, `ids_lint`,
6
+ * `ids_read`, `ids_apply_ops`, `ids_write`. The `ids_schema_*` lookups
7
+ * live in `ids-schema.ts`.
8
+ *
9
+ * Stateless by design: a document travels as Studio JSON (`ids_read`
10
+ * output) between calls, and node ids are derived from the content, so
11
+ * reading the same XML twice gives the same ids.
12
+ *
13
+ * External agents get the grounding gate. `ids_apply_ops` is the only tool
14
+ * that changes a document, and it goes through `applyOpsGated`: every op is
15
+ * validated against the op JSON Schema and the batch is checked against the
16
+ * IFC schema tables; a refused batch changes nothing and the refusal (code,
17
+ * path, message, candidates) goes back to the caller. Because Studio JSON
18
+ * can be edited by hand between calls, `ids_write` audits what it
19
+ * serialises and refuses a document with audit errors.
20
+ */
21
+ import { auditIDSDocument, IDSParseError } from '@ifc-lite/ids';
22
+ import { applyOpsGated, createGateContext, createLintContext, createSidecar, createStudioDocument, getOpJsonSchema, lintDocument, nodePath, parseStudioDocument, readStudioDocument, serializeSidecar, writeStudioDocument, } from '@ifc-lite/ids-authoring';
23
+ import { writeIdsXml } from '@ifc-lite/ids';
24
+ import { ToolErrorCode, ToolExecutionError } from '../errors.js';
25
+ import { okResult } from './util.js';
26
+ import { loadIdsXml } from './validation.js';
27
+ const XML_INPUT = {
28
+ ids_xml: { type: 'string', description: 'Inline IDS XML.' },
29
+ ids_path: { type: 'string', description: 'Path to an .ids file (subject to allowedPaths).' },
30
+ };
31
+ const DOC_INPUT = {
32
+ type: 'object',
33
+ description: 'A Studio document as returned by ids_read or ids_apply_ops (`doc`).',
34
+ };
35
+ function parseError(err) {
36
+ if (err instanceof IDSParseError) {
37
+ throw new ToolExecutionError({ code: ToolErrorCode.PARSE_FAILED, message: `IDS does not parse: ${err.message}`, hint: 'Run ids_audit for details.' });
38
+ }
39
+ throw err;
40
+ }
41
+ /** `doc` when given, else the IDS in `ids_xml` / `ids_path`, else `fallback` (or an error). */
42
+ async function loadDocument(input, ctx, fallback) {
43
+ if (input.doc !== undefined) {
44
+ try {
45
+ return parseStudioDocument(input.doc);
46
+ }
47
+ catch (err) {
48
+ throw new ToolExecutionError({ code: ToolErrorCode.INVALID_INPUT, message: `doc is not a Studio document: ${err instanceof Error ? err.message : String(err)}` });
49
+ }
50
+ }
51
+ if (fallback && input.ids_xml === undefined && input.ids_path === undefined)
52
+ return fallback();
53
+ const xml = await loadIdsXml(input, ctx);
54
+ try {
55
+ return readStudioDocument(xml);
56
+ }
57
+ catch (err) {
58
+ return parseError(err);
59
+ }
60
+ }
61
+ async function lintSummary(doc, options = {}) {
62
+ const result = lintDocument(doc, await createLintContext(), options);
63
+ const diagnostics = result.diagnostics.map((d) => ({ ...d, path: nodePath(doc, d.nodeId) }));
64
+ const counts = { error: 0, warning: 0, info: 0 };
65
+ for (const d of diagnostics)
66
+ counts[d.severity]++;
67
+ return { counts, diagnostics, suppressed: result.suppressed.length };
68
+ }
69
+ function outline(doc) {
70
+ return doc.ids.specifications.map((spec, i) => ({
71
+ id: doc.nodes.specs[i].id,
72
+ name: spec.name,
73
+ applicability: doc.nodes.specs[i].applicability.map((n, j) => ({ id: n.id, type: spec.applicability.facets[j].type })),
74
+ requirements: doc.nodes.specs[i].requirements.map((n, j) => ({ id: n.id, type: spec.requirements[j].facet.type })),
75
+ }));
76
+ }
77
+ const idsAudit = {
78
+ name: 'ids_audit',
79
+ description: 'Conformance audit of an IDS file: XML and XSD shape, IFC entity/property names, restriction coherence. Answers "is this a valid IDS 1.0 file?". No model needed.',
80
+ scope: 'validate',
81
+ inputSchema: { type: 'object', properties: { ...XML_INPUT }, additionalProperties: false },
82
+ async handler(input, ctx) {
83
+ const report = await auditIDSDocument(await loadIdsXml(input, ctx));
84
+ const counts = { error: 0, warning: 0, info: 0 };
85
+ for (const issue of report.issues)
86
+ counts[issue.severity]++;
87
+ return okResult(`IDS audit: ${report.status} (${counts.error} errors, ${counts.warning} warnings, ${counts.info} info).`, {
88
+ status: report.status,
89
+ counts,
90
+ issues: report.issues,
91
+ });
92
+ },
93
+ };
94
+ const idsLint = {
95
+ name: 'ids_lint',
96
+ description: 'Lint an IDS document with the IDSL rule catalogue: does it mean what the author intends? Each diagnostic names its node (`nodeId`, `path`) and may carry quick fixes: op batches you can pass to ids_apply_ops unchanged. Pass `doc` (from ids_read / ids_apply_ops) or the XML.',
97
+ scope: 'validate',
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: {
101
+ doc: DOC_INPUT,
102
+ ...XML_INPUT,
103
+ rules: { type: 'array', items: { type: 'string' }, description: 'Only these rule codes, e.g. ["IDSL-PROP-001"].' },
104
+ severity: { type: 'object', description: 'Per-rule severity override: {"IDSL-SPEC-008": "off"}. Values: error, warning, info, off.' },
105
+ },
106
+ additionalProperties: false,
107
+ },
108
+ async handler(input, ctx) {
109
+ const doc = await loadDocument(input, ctx);
110
+ const severity = input.severity;
111
+ const summary = await lintSummary(doc, { rules: input.rules, severity });
112
+ const { counts } = summary;
113
+ return okResult(`IDS lint: ${counts.error} errors, ${counts.warning} warnings, ${counts.info} info.`, { docId: doc.docId, ...summary });
114
+ },
115
+ };
116
+ const idsRead = {
117
+ name: 'ids_read',
118
+ description: 'Read IDS XML into a Studio document (JSON with a stable UUID for every specification, facet and constraint). Pass the returned `doc` to ids_apply_ops, ids_lint and ids_write. Reading the same XML twice gives the same ids.',
119
+ scope: 'read',
120
+ inputSchema: { type: 'object', properties: { ...XML_INPUT }, additionalProperties: false },
121
+ async handler(input, ctx) {
122
+ const doc = await loadDocument(input, ctx);
123
+ return okResult(`Read "${doc.ids.info.title}": ${doc.ids.specifications.length} specification(s).`, { doc, outline: outline(doc) });
124
+ },
125
+ };
126
+ function opsInputSchema() {
127
+ const ops = getOpJsonSchema();
128
+ return {
129
+ type: 'object',
130
+ properties: {
131
+ doc: DOC_INPUT,
132
+ ...XML_INPUT,
133
+ title: { type: 'string', description: 'Title of a new, empty document (when neither doc nor XML is given).' },
134
+ ops: { type: 'array', minItems: 1, items: { oneOf: ops.oneOf }, description: 'Operations of IDS ops vocabulary v1, applied in order as one batch.' },
135
+ },
136
+ required: ['ops'],
137
+ additionalProperties: false,
138
+ $defs: ops.$defs,
139
+ };
140
+ }
141
+ function refusalText(issues) {
142
+ const lines = issues.slice(0, 5).map((i) => {
143
+ const near = i.candidates.slice(0, 3).map((c) => c.value);
144
+ return `- ${i.code} at ${i.path}: ${i.message}${near.length ? ` Did you mean: ${near.join(', ')}?` : ''}`;
145
+ });
146
+ const more = issues.length > 5 ? `\n- … ${issues.length - 5} more in structuredContent.details.issues` : '';
147
+ return `The grounding gate refused the batch; nothing was applied.\n${lines.join('\n')}${more}`;
148
+ }
149
+ const idsApplyOps = {
150
+ name: 'ids_apply_ops',
151
+ description: 'Change an IDS document by applying typed operations. Every op is validated and the batch is checked by the grounding gate against the IFC schema tables (entities, predefined types, attributes, property sets, properties, enumerations, data types). A refused batch changes nothing and returns each problem with a path and ranked candidates; fix the names and resend the whole batch. Starts from `doc`, from the XML, or from an empty document. Returns the new `doc` and its lint diagnostics.',
152
+ scope: 'read',
153
+ inputSchema: opsInputSchema(),
154
+ async handler(input, ctx) {
155
+ const doc = await loadDocument(input, ctx, () => createStudioDocument({ title: typeof input.title === 'string' ? input.title : '' }));
156
+ const result = applyOpsGated(doc, input.ops, await createGateContext());
157
+ if (!result.ok) {
158
+ throw new ToolExecutionError({
159
+ code: ToolErrorCode.INVALID_INPUT,
160
+ message: refusalText(result.issues),
161
+ details: { refused: true, issues: result.issues },
162
+ hint: 'Use ids_schema_search / ids_schema_entity / ids_schema_pset to look names up.',
163
+ });
164
+ }
165
+ const lint = await lintSummary(result.doc);
166
+ return okResult(`Applied ${result.applied.length} op(s). Lint: ${lint.counts.error} errors, ${lint.counts.warning} warnings, ${lint.counts.info} info.`, { doc: result.doc, applied: result.applied.length, touched: result.touched, lint });
167
+ },
168
+ };
169
+ const idsWrite = {
170
+ name: 'ids_write',
171
+ description: 'Serialise a Studio document to IDS 1.0 XML. The XML is read back to prove nothing was lost and audited; a document with audit errors is refused. Also returns the studio.json sidecar that keeps node ids next to the XML.',
172
+ scope: 'read',
173
+ inputSchema: { type: 'object', properties: { doc: DOC_INPUT }, required: ['doc'], additionalProperties: false },
174
+ async handler(input, ctx) {
175
+ const doc = await loadDocument(input, ctx);
176
+ const out = writeStudioDocument(doc, writeIdsXml);
177
+ if (!out.ok) {
178
+ throw new ToolExecutionError({
179
+ code: ToolErrorCode.UNSUPPORTED_OPERATION,
180
+ message: `Cannot write this document: ${out.message}`,
181
+ details: { reason: out.reason, lost: out.lost ?? [] },
182
+ });
183
+ }
184
+ const audit = await auditIDSDocument(out.xml);
185
+ const errors = audit.issues.filter((i) => i.severity === 'error');
186
+ if (errors.length > 0) {
187
+ throw new ToolExecutionError({
188
+ code: ToolErrorCode.INVALID_INPUT,
189
+ message: `The document fails the IDS audit (${errors.length} error(s)); it was not written. First: ${errors[0].message}`,
190
+ details: { issues: errors },
191
+ hint: 'Change documents through ids_apply_ops, which grounds names before they enter the document.',
192
+ });
193
+ }
194
+ return okResult(`Wrote "${doc.ids.info.title}" (${out.xml.length} characters).`, {
195
+ xml: out.xml,
196
+ sidecar: serializeSidecar(createSidecar(doc, out.xml)),
197
+ audit: { status: audit.status, issues: audit.issues },
198
+ });
199
+ },
200
+ };
201
+ export const idsAuthoringTools = [idsAudit, idsLint, idsRead, idsApplyOps, idsWrite];
202
+ //# sourceMappingURL=ids-authoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-authoring.js","sourceRoot":"","sources":["../../src/tools/ids-authoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Tool } from './types.js';
2
+ export declare const idsSchemaTools: Tool[];
3
+ //# sourceMappingURL=ids-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-schema.d.ts","sourceRoot":"","sources":["../../src/tools/ids-schema.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA0FvC,eAAO,MAAM,cAAc,EAAE,IAAI,EAAsD,CAAC"}
@@ -0,0 +1,91 @@
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 { createGateContext, describeEntity, describePset, searchSchema } from '@ifc-lite/ids-authoring';
5
+ import { ToolErrorCode, ToolExecutionError } from '../errors.js';
6
+ import { okResult } from './util.js';
7
+ const VERSION = {
8
+ type: 'string',
9
+ enum: ['IFC2X3', 'IFC4', 'IFC4X3', 'IFC4X3_ADD2'],
10
+ default: 'IFC4',
11
+ description: 'IFC schema version of the specification.',
12
+ };
13
+ const idsSchemaSearch = {
14
+ name: 'ids_schema_search',
15
+ description: 'Find IFC entity, property set, property or data type names close to a query (typo-tolerant). Use before writing a name into an IDS facet.',
16
+ scope: 'read',
17
+ inputSchema: {
18
+ type: 'object',
19
+ properties: {
20
+ query: { type: 'string', minLength: 1 },
21
+ kind: { type: 'string', enum: ['entity', 'pset', 'property', 'dataType'], description: 'Restrict to one kind.' },
22
+ ifc_version: VERSION,
23
+ limit: { type: 'integer', minimum: 1, maximum: 50, default: 10 },
24
+ },
25
+ required: ['query'],
26
+ additionalProperties: false,
27
+ },
28
+ async handler(input) {
29
+ const hits = searchSchema(await createGateContext(), input.query, {
30
+ kind: input.kind,
31
+ version: input.ifc_version,
32
+ limit: input.limit,
33
+ });
34
+ const top = hits.slice(0, 5).map((h) => `${h.value} (${h.kind})`).join(', ');
35
+ return okResult(hits.length ? `Closest: ${top}.` : 'No close names.', { hits });
36
+ },
37
+ };
38
+ const idsSchemaEntity = {
39
+ name: 'ids_schema_entity',
40
+ description: 'Describe an IFC entity for IDS authoring: supertypes, abstract flag, predefined types, attributes and the standard property sets that apply to it.',
41
+ scope: 'read',
42
+ inputSchema: {
43
+ type: 'object',
44
+ properties: { name: { type: 'string', minLength: 1, description: 'Entity name, any case (IfcDoor or IFCDOOR).' }, ifc_version: VERSION },
45
+ required: ['name'],
46
+ additionalProperties: false,
47
+ },
48
+ async handler(input) {
49
+ const ctx = await createGateContext();
50
+ const version = input.ifc_version;
51
+ const name = input.name;
52
+ const entity = describeEntity(ctx, name, version);
53
+ if (!entity) {
54
+ const candidates = searchSchema(ctx, name, { kind: 'entity', version, limit: 5 });
55
+ throw new ToolExecutionError({
56
+ code: ToolErrorCode.INVALID_INPUT,
57
+ message: `"${name}" is not an entity of ${version}.${candidates.length ? ` Did you mean: ${candidates.map((c) => c.value).join(', ')}?` : ''}`,
58
+ details: { candidates },
59
+ });
60
+ }
61
+ return okResult(`${entity.name} (${version}): ${entity.propertySets.length} applicable property set(s).`, { entity });
62
+ },
63
+ };
64
+ const idsSchemaPset = {
65
+ name: 'ids_schema_pset',
66
+ description: 'Describe a standard property or quantity set: the entities it applies to and its properties with data types and enumerations.',
67
+ scope: 'read',
68
+ inputSchema: {
69
+ type: 'object',
70
+ properties: { name: { type: 'string', minLength: 1, description: 'Exact set name, e.g. Pset_DoorCommon.' }, ifc_version: VERSION },
71
+ required: ['name'],
72
+ additionalProperties: false,
73
+ },
74
+ async handler(input) {
75
+ const ctx = await createGateContext();
76
+ const version = input.ifc_version;
77
+ const name = input.name;
78
+ const pset = describePset(ctx, name, version);
79
+ if (!pset) {
80
+ const candidates = searchSchema(ctx, name, { kind: 'pset', version, limit: 5 });
81
+ throw new ToolExecutionError({
82
+ code: ToolErrorCode.INVALID_INPUT,
83
+ message: `"${name}" is not a standard property set of ${version}.${candidates.length ? ` Did you mean: ${candidates.map((c) => c.value).join(', ')}?` : ''}`,
84
+ details: { candidates },
85
+ });
86
+ }
87
+ return okResult(`${pset.name} (${version}): ${pset.properties.length} propert${pset.properties.length === 1 ? 'y' : 'ies'}.`, { pset });
88
+ },
89
+ };
90
+ export const idsSchemaTools = [idsSchemaSearch, idsSchemaEntity, idsSchemaPset];
91
+ //# sourceMappingURL=ids-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids-schema.js","sourceRoot":"","sources":["../../src/tools/ids-schema.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { ToolRegistry } from './types.js';
2
2
  import { discoveryTools } from './discovery.js';
3
- import { queryTools } from './query.js';
3
+ import { queryTools } from './query-tools.js';
4
4
  import { geometryTools } from './geometry.js';
5
5
  import { clashTools } from './clash.js';
6
6
  import { validationTools } from './validation.js';
@@ -14,11 +14,14 @@ import { viewerTools } from './viewer.js';
14
14
  import { costTools } from './cost.js';
15
15
  import { structuralTools } from './structural.js';
16
16
  import { flowTools } from './flow.js';
17
+ import { idsAuthoringTools } from './ids-authoring.js';
18
+ import { idsAuthoringModelTools } from './ids-authoring-model.js';
19
+ import { idsSchemaTools } from './ids-schema.js';
17
20
  /** Agent draft-layer family (06-agents.md): draft lifecycle + review loop. */
18
21
  export declare const layerTools: import("./types.js").Tool[];
19
22
  export { ToolRegistry } from './types.js';
20
23
  export type { Tool } from './types.js';
21
- export { discoveryTools, queryTools, geometryTools, clashTools, validationTools, checkRulesTools, mutationTools, bcfTools, bsddTools, diffTools, exportTools, viewerTools, costTools, structuralTools, flowTools, };
24
+ export { discoveryTools, queryTools, geometryTools, clashTools, validationTools, checkRulesTools, mutationTools, bcfTools, bsddTools, diffTools, exportTools, viewerTools, costTools, structuralTools, flowTools, idsAuthoringTools, idsAuthoringModelTools, idsSchemaTools, };
22
25
  export { resetLayerWorkspace, getLayerWorkspace, disposeLayerWorkspace } from './layer-store.js';
23
26
  /**
24
27
  * Build a ToolRegistry pre-loaded with every tool ifc-lite-mcp ships in v0.1.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,8EAA8E;AAC9E,eAAO,MAAM,UAAU,6BAA4C,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EACL,cAAc,EACd,UAAU,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,eAAe,EACf,aAAa,EACb,QAAQ,EACR,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,EACf,SAAS,GACV,CAAC;AACF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEjG;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,YAAY,CAmBvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,8EAA8E;AAC9E,eAAO,MAAM,UAAU,6BAA4C,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EACL,cAAc,EACd,UAAU,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,eAAe,EACf,aAAa,EACb,QAAQ,EACR,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,GACf,CAAC;AACF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEjG;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,YAAY,CAsBvD"}
@@ -3,7 +3,7 @@
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  import { ToolRegistry } from './types.js';
5
5
  import { discoveryTools } from './discovery.js';
6
- import { queryTools } from './query.js';
6
+ import { queryTools } from './query-tools.js';
7
7
  import { geometryTools } from './geometry.js';
8
8
  import { clashTools } from './clash.js';
9
9
  import { validationTools } from './validation.js';
@@ -19,10 +19,13 @@ import { layerReviewTools } from './layer-review.js';
19
19
  import { costTools } from './cost.js';
20
20
  import { structuralTools } from './structural.js';
21
21
  import { flowTools } from './flow.js';
22
+ import { idsAuthoringTools } from './ids-authoring.js';
23
+ import { idsAuthoringModelTools } from './ids-authoring-model.js';
24
+ import { idsSchemaTools } from './ids-schema.js';
22
25
  /** Agent draft-layer family (06-agents.md): draft lifecycle + review loop. */
23
26
  export const layerTools = [...draftLayerTools, ...layerReviewTools];
24
27
  export { ToolRegistry } from './types.js';
25
- export { discoveryTools, queryTools, geometryTools, clashTools, validationTools, checkRulesTools, mutationTools, bcfTools, bsddTools, diffTools, exportTools, viewerTools, costTools, structuralTools, flowTools, };
28
+ export { discoveryTools, queryTools, geometryTools, clashTools, validationTools, checkRulesTools, mutationTools, bcfTools, bsddTools, diffTools, exportTools, viewerTools, costTools, structuralTools, flowTools, idsAuthoringTools, idsAuthoringModelTools, idsSchemaTools, };
26
29
  export { resetLayerWorkspace, getLayerWorkspace, disposeLayerWorkspace } from './layer-store.js';
27
30
  /**
28
31
  * Build a ToolRegistry pre-loaded with every tool ifc-lite-mcp ships in v0.1.
@@ -46,6 +49,9 @@ export function buildDefaultToolRegistry() {
46
49
  registry.registerAll(costTools);
47
50
  registry.registerAll(structuralTools);
48
51
  registry.registerAll(flowTools);
52
+ registry.registerAll(idsAuthoringTools);
53
+ registry.registerAll(idsAuthoringModelTools);
54
+ registry.registerAll(idsSchemaTools);
49
55
  registry.registerAll(layerTools);
50
56
  return registry;
51
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,gBAAgB,CAAC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EACL,cAAc,EACd,UAAU,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,eAAe,EACf,aAAa,EACb,QAAQ,EACR,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,EACf,SAAS,GACV,CAAC;AACF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEjG;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -60,6 +60,8 @@ export interface LayerWorkspace {
60
60
  }
61
61
  export declare function createLayerWorkspace(): LayerWorkspace;
62
62
  export declare function getLayerWorkspace(sessionId?: string): LayerWorkspace;
63
+ /** Unpublished drafts a transport session holds; unlike `getLayerWorkspace`, never creates a draft space. */
64
+ export declare function draftCount(sessionId: string): number;
63
65
  /**
64
66
  * Drop a session's draft space when the transport session ends. Layers,
65
67
  * refs, and reviews deliberately survive — they are the published shared
@@ -1 +1 @@
1
- {"version":3,"file":"layer-store.d.ts","sourceRoot":"","sources":["../../src/tools/layer-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer-store.d.ts","sourceRoot":"","sources":["../../src/tools/layer-store.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,10 @@ export function getLayerWorkspace(sessionId) {
53
53
  }
54
54
  return { drafts, layers: shared.layers, refs: shared.refs, reviews: shared.reviews };
55
55
  }
56
+ /** Unpublished drafts a transport session holds; unlike `getLayerWorkspace`, never creates a draft space. */
57
+ export function draftCount(sessionId) {
58
+ return draftSpaces.get(sessionId)?.size ?? 0;
59
+ }
56
60
  /** Drafts hold live Y.Docs — destroy them or the CRDT state lingers. */
57
61
  function destroyDrafts(drafts) {
58
62
  for (const draft of drafts.values())