geospec 0.1.0-beta.8 → 0.1.0-beta.9

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 (56) hide show
  1. package/README.md +41 -8
  2. package/agent/geospec-authoring/SKILL.md +1 -0
  3. package/agent/geospec-authoring/api-index.md +5 -2
  4. package/agent/geospec-authoring/api-types-2.md +85 -0
  5. package/agent/geospec-authoring/api-types.md +2 -84
  6. package/agent/geospec-authoring/public-api-functions.md +44 -3
  7. package/agent/geospec-authoring/public-api-index.md +136 -97
  8. package/agent/geospec-authoring/public-api-types-2.md +108 -182
  9. package/agent/geospec-authoring/public-api-types-3.md +308 -28
  10. package/agent/geospec-authoring/public-api-types.md +1 -1
  11. package/agent/resources.js +12 -11
  12. package/agent/skills.json +3 -2
  13. package/dist/assertion-client/client.d.mts +3 -1
  14. package/dist/cli/cli.d.mts +48 -0
  15. package/dist/cli/cli.mjs +30 -0
  16. package/dist/cli/index.d.mts +3 -0
  17. package/dist/cli/index.mjs +1 -0
  18. package/dist/cli/main.d.mts +1 -0
  19. package/dist/cli/main.mjs +2 -0
  20. package/dist/cli/node-host.d.mts +26 -0
  21. package/dist/cli/node-host.mjs +1 -0
  22. package/dist/cli/wire-value.mjs +1 -0
  23. package/dist/config/define-config.d.mts +15 -0
  24. package/dist/config/define-config.mjs +2 -0
  25. package/dist/config/index.d.mts +4 -2
  26. package/dist/config/index.mjs +1 -1
  27. package/dist/config/node/load.d.mts +2 -1
  28. package/dist/config/node/load.mjs +1 -1
  29. package/dist/config/read-geospec-config.d.mts +47 -0
  30. package/dist/config/read-geospec-config.mjs +3 -0
  31. package/dist/config/types.d.mts +11 -22
  32. package/dist/config/validate.mjs +1 -1
  33. package/dist/engine/client.d.mts +3 -1
  34. package/dist/model/node/command-exporter.d.mts +2 -0
  35. package/dist/model/node/command-exporter.mjs +1 -1
  36. package/dist/runner/index.d.mts +1 -1
  37. package/dist/runner/native/index.mjs +1 -1
  38. package/dist/runner/native/native-serial-runner.mjs +1 -1
  39. package/dist/runner/node/engine.d.mts +40 -0
  40. package/dist/runner/node/engine.mjs +1 -0
  41. package/dist/runner/node/index.d.mts +4 -1
  42. package/dist/runner/node/index.mjs +1 -1
  43. package/dist/runner/node/node-vm-filesystem.mjs +1 -1
  44. package/dist/runner/node/pool-runner.d.mts +67 -0
  45. package/dist/runner/node/pool-runner.mjs +1 -0
  46. package/dist/runner/node/pool-worker-entry.d.mts +43 -0
  47. package/dist/runner/node/pool-worker-entry.mjs +1 -0
  48. package/dist/runner/pool/pool-messages.d.mts +2 -0
  49. package/dist/runner/pool/pool.d.mts +1 -1
  50. package/dist/runner/pool/pool.mjs +1 -1
  51. package/dist/runner/pool/worker-host.d.mts +1 -1
  52. package/dist/runner/run-geospec-module.mjs +7 -7
  53. package/dist/runner/types.d.mts +9 -6
  54. package/dist/runner/worker/index.d.mts +1 -1
  55. package/dist/runner/worker/serial-runner.mjs +1 -1
  56. package/package.json +18 -5
package/README.md CHANGED
@@ -68,14 +68,47 @@ qualification, and filtered requirements remain outside the demonstrated scope.
68
68
 
69
69
  ### Runner configuration
70
70
 
71
- Install [`@taucad/geospec-engine`](../geospec-engine) for its `geospec` CLI or
72
- Node worker pool. To embed a serial runner, pass a compiled engine to
73
- `createNativeGeoSpecRunner` from `geospec/runner/native`; it builds the native
74
- model loader and releases every admitted subject after each run. These use the
75
- same compiled composition. Other embeddings must qualify their actual binding,
76
- input representation and supported domain; shared authoring syntax alone does
77
- not establish verdict equivalence. The CLI's flags and pool options are
78
- documented in that package's README.
71
+ The `geospec` bin runs a project's specs on the compiled engine from
72
+ [`geospec-engine`](https://github.com/taucad/geospec/tree/main/packages/geospec-engine):
73
+ the native addon when this platform has one, else its WASM build. Models that
74
+ are not STEP or GLB come from the `exporters` the project's `geospec.config.*`
75
+ declares, imported once in each pool worker; without one, such a load refuses
76
+ with `GEOSPEC_EXPORTER_MISSING`.
77
+
78
+ ```bash
79
+ geospec run .
80
+ geospec run . --include "parts/**/*.geospec.ts"
81
+ geospec run . --file main.geospec.ts --test-name-pattern volume
82
+ geospec run . --workers # worker pool, auto-sized
83
+ geospec run . --workers 4 --shard-timeout 600000
84
+ geospec run . --config ci.geospec.config.ts
85
+ geospec run . --json
86
+ ```
87
+
88
+ | Flag | Meaning |
89
+ | --------------------------------------- | --------------------------------------------------------------------------------------------------------- |
90
+ | `--file <path>` | GeoSpec file or directory root; repeatable. Empty input discovers from the project root. |
91
+ | `--include <glob>` / `--exclude <glob>` | Vitest-style file globs; repeatable. Include defaults to `**/*.geospec.{ts,js}`. |
92
+ | `-t`, `--test-name-pattern <re>` | JavaScript regular expression matched against the full `suite > test` name. |
93
+ | `--test-timeout <ms>` | Timeout for each async test callback. |
94
+ | `--workers [n]` | Run in a worker pool. Default is one; omit the count after the flag to request available CPU parallelism. |
95
+ | `--shard-timeout <ms>` | Per-shard **non-verdict** watchdog. Off by default. |
96
+ | `--bail` | Stop after the first red file. Interactive use only — a reward run wants the complete red set. |
97
+ | `--config <path>` | The `geospec.config.*` to use instead of the one in the project root. |
98
+ | `--json` | Print exactly one JSON result document on stdout and nothing else. |
99
+
100
+ A flag replaces the config field of the same name. **The exit code is the
101
+ verdict.** `0` only when the run succeeded; any failure, any run-level issue,
102
+ and an empty selection are all `1`.
103
+
104
+ To embed the pool, use `createGeoSpecNodePoolRunner` from `geospec/runner/node`;
105
+ each worker owns one engine and its own exporters, and live subjects never
106
+ cross worker boundaries. To run serially in this process, pass an engine from
107
+ `createNodeGeoSpecEngine` to `createNativeGeoSpecRunner` from
108
+ `geospec/runner/native`; it builds the native model loader and releases every
109
+ admitted subject after each run. Other embeddings must qualify their actual
110
+ binding, input representation and supported domain; shared authoring syntax
111
+ alone does not establish verdict equivalence.
79
112
 
80
113
  The filters below are the shared vocabulary of the CLI, the embedded runners
81
114
  and the Tau `test_model` tool:
@@ -490,6 +490,7 @@ To read any other signature, find its name in `api-index.md`, which lists all 36
490
490
  - `api-functions.md` — Functions
491
491
  - `api-constants.md` — Constants
492
492
  - `api-types.md` — Types
493
+ - `api-types-2.md` — Types (2)
493
494
  - `api-classes.md` — Classes
494
495
 
495
496
  Read ranges, not whole files. Never copy a reference into a source file.
@@ -1,6 +1,6 @@
1
1
  # geospec API index
2
2
 
3
- geospec 0.1.0-beta.8 · 368 symbols · extracted by TypeScript 5.9.3.
3
+ geospec 0.1.0-beta.9 · 368 symbols · extracted by TypeScript 5.9.3.
4
4
 
5
5
  Every symbol appears here exactly once. The heading above each block names the file with its signature, and each top-level symbol names the lines of that file which hold its declaration and members: read only that range.
6
6
 
@@ -363,7 +363,10 @@ LoadModelOptions (type) [lines 1729-1754] [8 members] — Options accepted by {@
363
363
  LoadModelOptions.meshLinearTolerance (property) — Linear tolerance used while meshing exact BRep evidence
364
364
  LoadModelOptions.meshAngularToleranceDegrees (property) — Angular tolerance in degrees used while meshing exact BRep evidence
365
365
  LoadModelOptions.workUnitLimit (property) — Default work-unit budget for every claim on this subject
366
- LoadModelSourceOptions (type) [lines 1756-1836] [13 members] — Direct geometry-source model load options
366
+
367
+ ## Types (2) — `api-types-2.md`
368
+
369
+ LoadModelSourceOptions (type) [lines 5-85] [13 members] — Direct geometry-source model load options
367
370
  LoadModelSourceOptions.source (property) — Geometry bytes, path, browser file/blob, or in-memory mesh buffer
368
371
  LoadModelSourceOptions.resources (property) — Named external resources consumed alongside the direct geometry bytes
369
372
  LoadModelSourceOptions.rootDir (property) — Project-relative folder a path `source` and each resource path resolve…
@@ -0,0 +1,85 @@
1
+ # geospec — Types (2)
2
+
3
+ 1 top-level symbols. Signatures are verbatim typescript.
4
+
5
+ // Direct geometry-source model load options
6
+ LoadModelSourceOptions: {
7
+ /** Geometry bytes, path, browser file/blob, or in-memory mesh buffer. */
8
+ source: MeshSource | StepSource;
9
+ /** Named external resources consumed alongside the direct geometry bytes. */
10
+ resources?: ReadonlyArray<{
11
+ readonly name: string;
12
+ readonly source: MeshSource | StepSource;
13
+ }>;
14
+ /**
15
+ * Project-relative folder a path `source` and each resource path resolve in. Omitted, they resolve against the
16
+ * project root. Recorded in the load evidence.
17
+ */
18
+ rootDir?: string;
19
+ /** Source geometry format. Defaults to `glb`. */
20
+ format?: GeoSpecModelFormat;
21
+ /** Source path recorded in provenance. */
22
+ path?: string;
23
+ /** Human-readable source name recorded in provenance. */
24
+ name?: string;
25
+ /** Coordinate unit of raw GLB/glTF or mesh-buffer data before canonical millimetre normalization. */
26
+ sourceUnit?: GeoSpecUnit;
27
+ /** Explicit parameters recorded in provenance. */
28
+ parameters?: Record<string, unknown>;
29
+ /** STEP reader strategy used for STEP sources. */
30
+ stepStreaming?: StepStreamingMode;
31
+ /** Whether STEP loading should also produce mesh evidence. Defaults to true. */
32
+ mesh?: boolean;
33
+ /** Linear tolerance used while meshing exact BRep evidence. */
34
+ meshLinearTolerance?: number;
35
+ /** Angular tolerance in degrees used while meshing exact BRep evidence. */
36
+ meshAngularToleranceDegrees?: number;
37
+ /**
38
+ * Default work-unit budget for every claim on this subject: a positive integer no greater than
39
+ * the host's maximum (default `geoSpecMaximumWorkUnitLimit`, 512 000 000). `expectGeo(subject, { workUnitLimit })` overrides
40
+ * it per chain. Recorded in the load evidence; it never changes the exported or admitted bytes.
41
+ */
42
+ workUnitLimit?: number;
43
+ }
44
+
45
+ // Geometry bytes, path, browser file/blob, or in-memory mesh buffer
46
+ source: MeshSource | StepSource
47
+
48
+ // Named external resources consumed alongside the direct geometry bytes
49
+ resources?: ReadonlyArray<{
50
+ readonly name: string;
51
+ readonly source: MeshSource | StepSource;
52
+ }>
53
+
54
+ // Project-relative folder a path `source` and each resource path resolve in
55
+ rootDir?: string
56
+
57
+ // Source geometry format
58
+ format?: GeoSpecModelFormat
59
+
60
+ // Source path recorded in provenance
61
+ path?: string
62
+
63
+ // Human-readable source name recorded in provenance
64
+ name?: string
65
+
66
+ // Coordinate unit of raw GLB/glTF or mesh-buffer data before canonical millimetre normalization
67
+ sourceUnit?: GeoSpecUnit
68
+
69
+ // Explicit parameters recorded in provenance
70
+ parameters?: Record<string, unknown>
71
+
72
+ // STEP reader strategy used for STEP sources
73
+ stepStreaming?: StepStreamingMode
74
+
75
+ // Whether STEP loading should also produce mesh evidence
76
+ mesh?: boolean
77
+
78
+ // Linear tolerance used while meshing exact BRep evidence
79
+ meshLinearTolerance?: number
80
+
81
+ // Angular tolerance in degrees used while meshing exact BRep evidence
82
+ meshAngularToleranceDegrees?: number
83
+
84
+ // Default work-unit budget for every claim on this subject
85
+ workUnitLimit?: number
@@ -1,6 +1,6 @@
1
1
  # geospec — Types
2
2
 
3
- 67 top-level symbols. Signatures are verbatim typescript.
3
+ 66 top-level symbols. Signatures are verbatim typescript.
4
4
 
5
5
  // A model admitted by one live GeoSpec host scope
6
6
  GeoSpecSubject: {
@@ -648,7 +648,7 @@ GeoSpecProductStructureExpectation: {
648
648
  count?: GeoSpecNumericExpectation
649
649
 
650
650
  // One spatial relationship accepted by `expectGeo(...).toHaveSpatialRelationships(...)`
651
- // Remarks: Verdicts are decided by exact BRep evidence only (D3): extrema for `contact`/`clearance`, analytic fact comparison for `coaxial`/`concentric`/`coplanar`/`parallel`/`perpendicular`/`angle`, exact solid classification for `containment`/`insertion`, and exact boolean common volume for `interference` (positive volume outside the `minVolume`/`maxVolume` allowance band fails).
651
+ // Remarks: Each kind admits narrow geometry and refuses outside it, never falling back to an estimate (D3). On STEP, `clearance`, `contact`, `insertion` and `interference` take complete box-shaped occurrences (`insertion` also a Cartesian `axis`); `coaxial`, `concentric`, `coplanar`, `parallel`, `perpendicular` and `angle` take one analytic face, axis or plane per endpoint; `containment` takes closed solids. On glTF/GLB, `body` endpoints admit `contact`, `clearance`, `containment` and `interference` over closed shells. Shared volume for `interference` must lie in `[minVolume, maxVolume]`.
652
652
  GeoSpecSpatialRelationshipExpectation: {
653
653
  id?: string;
654
654
  kind: 'contact' | 'clearance' | 'coaxial' | 'concentric' | 'coplanar' | 'parallel' | 'perpendicular' | 'angle' | 'containment' | 'insertion' | 'interference';
@@ -1752,85 +1752,3 @@ LoadModelOptions: LoadModelSourceOptions | LoadModelCodeOptions<Code> | LoadMode
1752
1752
 
1753
1753
  // Default work-unit budget for every claim on this subject
1754
1754
  workUnitLimit?: number
1755
-
1756
- // Direct geometry-source model load options
1757
- LoadModelSourceOptions: {
1758
- /** Geometry bytes, path, browser file/blob, or in-memory mesh buffer. */
1759
- source: MeshSource | StepSource;
1760
- /** Named external resources consumed alongside the direct geometry bytes. */
1761
- resources?: ReadonlyArray<{
1762
- readonly name: string;
1763
- readonly source: MeshSource | StepSource;
1764
- }>;
1765
- /**
1766
- * Project-relative folder a path `source` and each resource path resolve in. Omitted, they resolve against the
1767
- * project root. Recorded in the load evidence.
1768
- */
1769
- rootDir?: string;
1770
- /** Source geometry format. Defaults to `glb`. */
1771
- format?: GeoSpecModelFormat;
1772
- /** Source path recorded in provenance. */
1773
- path?: string;
1774
- /** Human-readable source name recorded in provenance. */
1775
- name?: string;
1776
- /** Coordinate unit of raw GLB/glTF or mesh-buffer data before canonical millimetre normalization. */
1777
- sourceUnit?: GeoSpecUnit;
1778
- /** Explicit parameters recorded in provenance. */
1779
- parameters?: Record<string, unknown>;
1780
- /** STEP reader strategy used for STEP sources. */
1781
- stepStreaming?: StepStreamingMode;
1782
- /** Whether STEP loading should also produce mesh evidence. Defaults to true. */
1783
- mesh?: boolean;
1784
- /** Linear tolerance used while meshing exact BRep evidence. */
1785
- meshLinearTolerance?: number;
1786
- /** Angular tolerance in degrees used while meshing exact BRep evidence. */
1787
- meshAngularToleranceDegrees?: number;
1788
- /**
1789
- * Default work-unit budget for every claim on this subject: a positive integer no greater than
1790
- * the host's maximum (default `geoSpecMaximumWorkUnitLimit`, 512 000 000). `expectGeo(subject, { workUnitLimit })` overrides
1791
- * it per chain. Recorded in the load evidence; it never changes the exported or admitted bytes.
1792
- */
1793
- workUnitLimit?: number;
1794
- }
1795
-
1796
- // Geometry bytes, path, browser file/blob, or in-memory mesh buffer
1797
- source: MeshSource | StepSource
1798
-
1799
- // Named external resources consumed alongside the direct geometry bytes
1800
- resources?: ReadonlyArray<{
1801
- readonly name: string;
1802
- readonly source: MeshSource | StepSource;
1803
- }>
1804
-
1805
- // Project-relative folder a path `source` and each resource path resolve in
1806
- rootDir?: string
1807
-
1808
- // Source geometry format
1809
- format?: GeoSpecModelFormat
1810
-
1811
- // Source path recorded in provenance
1812
- path?: string
1813
-
1814
- // Human-readable source name recorded in provenance
1815
- name?: string
1816
-
1817
- // Coordinate unit of raw GLB/glTF or mesh-buffer data before canonical millimetre normalization
1818
- sourceUnit?: GeoSpecUnit
1819
-
1820
- // Explicit parameters recorded in provenance
1821
- parameters?: Record<string, unknown>
1822
-
1823
- // STEP reader strategy used for STEP sources
1824
- stepStreaming?: StepStreamingMode
1825
-
1826
- // Whether STEP loading should also produce mesh evidence
1827
- mesh?: boolean
1828
-
1829
- // Linear tolerance used while meshing exact BRep evidence
1830
- meshLinearTolerance?: number
1831
-
1832
- // Angular tolerance in degrees used while meshing exact BRep evidence
1833
- meshAngularToleranceDegrees?: number
1834
-
1835
- // Default work-unit budget for every claim on this subject
1836
- workUnitLimit?: number
@@ -1,6 +1,6 @@
1
1
  # geospec — Functions
2
2
 
3
- 39 top-level symbols. Signatures are verbatim typescript.
3
+ 46 top-level symbols. Signatures are verbatim typescript.
4
4
 
5
5
  // GeoSpec suite helper used inside VM-executed test modules
6
6
  // describe (function)
@@ -160,6 +160,24 @@ export declare function resolveUnderRoot(root: string, path: string): string;
160
160
  // root: The project root
161
161
  // path: A canonical path rooted by the supplied project capability
162
162
 
163
+ // Create a GeoSpec engine for this process
164
+ // Throws: Error when the native addon is installed but cannot load, or the permits are invalid.
165
+ // createNodeGeoSpecEngine (function)
166
+ export declare function createNodeGeoSpecEngine(options?: CreateNodeGeoSpecEngineOptions): Promise<NodeGeoSpecEngine>;
167
+ // options: CPU permits for the native addon
168
+
169
+ // Create a pool with one engine and one set of exporters constructed inside each worker
170
+ // Remarks: Workers are threads of this process and share one OCCT library instance and pool width, so inner parallelism is all-or-nothing: either several workers with one permit each, or one worker holding the whole budget. A budget above the worker count with more than one worker is refused before any worker starts rather than silently run serial.
171
+ // Throws: RangeError When the budget is invalid, exceeds the host cap, or gives any of several in-process workers more than one permit.
172
+ // createGeoSpecNodePoolRunner (function)
173
+ export declare function createGeoSpecNodePoolRunner(options: GeoSpecNodePoolOptions): GeoSpecRunner;
174
+ // options: Project, config, exporter modules, outer workers and caller-inclusive CPU budget
175
+
176
+ // Adapt a Node worker thread to the pool's host-agnostic handle
177
+ // createNodeWorkerHandle (function)
178
+ export declare function createNodeWorkerHandle(worker: NodeWorkerLike): GeoSpecPoolWorkerHandle;
179
+ // worker: The spawned worker
180
+
163
181
  // Create a run-level issue when filters select no tests
164
182
  // createNoMatchingGeoSpecTestsIssue (function)
165
183
  export declare function createNoMatchingGeoSpecTestsIssue(): VmIssue;
@@ -189,7 +207,7 @@ export declare function createGeoSpecMatcherMethods<Result>(options: {
189
207
  // options: Subject, polarity and host invocation function
190
208
 
191
209
  // Submit an ancillary query with positive polarity through the native core
192
- // Remarks: Queries return full reports even when failed or refused. Protocol errors propagate unchanged. Rust owns defaults, validation and canonical encoding.
210
+ // Remarks: A query asserts nothing, so it never fails: when the evidence it reads is missing or cannot decide it returns a full refused report whose diagnostic names the reason, such as `GEOSPEC_UNSUPPORTED_EVIDENCE`. Protocol errors propagate unchanged. Rust owns defaults, validation and canonical encoding.
193
211
  // evaluateGeoSpecNativeQuery (function)
194
212
  export declare function evaluateGeoSpecNativeQuery(options: GeoSpecNativeQueryOptions): GeoSpecCanonicalClaimReport;
195
213
  // options: Query identity, subject and authored payload
@@ -200,6 +218,17 @@ export declare function evaluateGeoSpecNativeQuery(options: GeoSpecNativeQueryOp
200
218
  export declare function resolveGeoSpecMaximumWorkUnitLimit(maximum?: number): number;
201
219
  // maximum: The host's configured maximum, when it sets one
202
220
 
221
+ // Run the CLI
222
+ // runGeoSpecCli (function)
223
+ export declare function runGeoSpecCli(argv: readonly string[], host: GeoSpecCliHost): Promise<number>;
224
+ // argv: Arguments after the executable and script
225
+ // host: The injected platform
226
+
227
+ // Build the Node CLI host
228
+ // createNodeGeoSpecCliHost (function)
229
+ export declare function createNodeGeoSpecCliHost(options?: NodeGeoSpecCliHostOptions): GeoSpecCliHost;
230
+ // options: Report sink and host-supplied exporter modules
231
+
203
232
  // Create Vitest matchers over an existing runner-independent client
204
233
  // createGeoSpecVitestAdapter (function)
205
234
  export declare function createGeoSpecVitestAdapter(client: GeoSpecAssertionClient): GeoSpecVitestAdapter;
@@ -215,8 +244,20 @@ export declare function installGeoSpecVitest(client: GeoSpecAssertionClient): Ge
215
244
  export declare function setupGeoSpecVitest(options: GeoSpecAssertionClientOptions): GeoSpecVitestAdapter;
216
245
  // options: Flat native assertion-client options
217
246
 
247
+ // Type a `geospec.config.*` default export
248
+ // Remarks: An identity at runtime. The parameter is not generic, so an object literal gets the excess-property and contextual checks `satisfies GeoSpecConfig` gives, in `.ts` and `.js` alike.
249
+ // defineConfig (function)
250
+ export declare function defineConfig(config: GeoSpecConfig): GeoSpecConfig;
251
+ // config: The project configuration
252
+
253
+ // Read a project's `geospec.config.*` data fields through the spec VM, the same way on every host
254
+ // Remarks: Discovery is `loadGeoSpecConfig`'s: exactly one of `geospec.config.{ts,mts,js,mjs}`. The config may import `geospec/config` (for `defineConfig`) and project files, nothing from `node_modules`: imports are detected first, without a network call, so a config with exporters is `not-applied` rather than fetched. `exporters` are never returned; a host that reads the config holds its own.
255
+ // readGeoSpecConfig (function)
256
+ export declare function readGeoSpecConfig(options: ReadGeoSpecConfigOptions): Promise<ReadGeoSpecConfigResult>;
257
+ // options: The project filesystem and the rooted project directory
258
+
218
259
  // Load one trusted project config using Node's native module loader
219
- // Remarks: Explicit selection or exactly one geospec.config.js/.mjs/.ts/.mts is allowed. TypeScript must use erasable syntax; JSON imports use standard attributes. Executable config/imports are trusted developer code, not sandboxed code. Node's same-process module cache is unchanged: load once per run and use a fresh process when fresh executable imports are required. No reload guarantee or transitive-source identity is supplied here.
260
+ // Remarks: Explicit selection or exactly one geospec.config.js/.mjs/.ts/.mts is allowed. A config's `geospec/config` import resolves to this copy when the project has no install of its own. TypeScript must use erasable syntax; JSON imports use standard attributes. Executable config/imports are trusted developer code, not sandboxed code. Node's same-process module cache is unchanged: load once per run and use a fresh process when fresh executable imports are required. No reload guarantee or transitive-source identity is supplied here.
220
261
  // loadGeoSpecConfig (function)
221
262
  export declare function loadGeoSpecConfig(options: LoadGeoSpecConfigOptions): Promise<LoadedGeoSpecConfig>;
222
263
  // options: Project, optional explicit config and defined option overrides