geospec 0.1.0-beta.9 → 0.4.1-next.331
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -9
- package/agent/doctrine.md +2 -1
- package/agent/geospec-authoring/SKILL.md +3 -3
- package/agent/geospec-authoring/api-index.md +20 -92
- package/agent/geospec-authoring/api-types.md +85 -480
- package/agent/geospec-authoring/public-api-functions.md +21 -1
- package/agent/geospec-authoring/public-api-index.md +215 -319
- package/agent/geospec-authoring/public-api-types-2.md +480 -352
- package/agent/geospec-authoring/public-api-types-3.md +79 -215
- package/agent/geospec-authoring/public-api-types.md +334 -849
- package/agent/resources.js +12 -13
- package/agent/skills.json +2 -3
- package/dist/assertion-client/client.d.mts +14 -15
- package/dist/assertion-client/client.mjs +1 -1
- package/dist/cli/check.mjs +2 -0
- package/dist/cli/cli.d.mts +5 -5
- package/dist/cli/cli.mjs +20 -3
- package/dist/cli/node-host.d.mts +5 -4
- package/dist/cli/node-host.mjs +1 -1
- package/dist/cli/wire-value.mjs +1 -1
- package/dist/config/define-config.d.mts +2 -3
- package/dist/config/node/index.mjs +1 -1
- package/dist/config/node/load.d.mts +2 -3
- package/dist/config/node/load.mjs +1 -1
- package/dist/config/read-geospec-config.d.mts +10 -6
- package/dist/config/read-geospec-config.mjs +1 -1
- package/dist/config/types.d.mts +6 -7
- package/dist/create-geospec.d.mts +7 -6
- package/dist/engine/client.d.mts +15 -15
- package/dist/engine/client.mjs +1 -1
- package/dist/engine/matchers.d.mts +10 -11
- package/dist/engine/pmi.types.d.mts +11 -12
- package/dist/engine/protocol.d.mts +7 -8
- package/dist/engine/protocol.mjs +1 -1
- package/dist/geometry-unit.d.mts +2 -3
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/mesh/index.d.mts +2 -2
- package/dist/mesh/types.d.mts +8 -505
- package/dist/model/errors.d.mts +2 -3
- package/dist/model/load-model.d.mts +3 -4
- package/dist/model/mesh-evidence-matchers.d.mts +2 -3
- package/dist/model/native-model-loader.d.mts +14 -17
- package/dist/model/native-model-loader.mjs +1 -1
- package/dist/model/node/command-exporter.d.mts +3 -4
- package/dist/model/node/command-exporter.mjs +1 -1
- package/dist/model/node/index.mjs +1 -1
- package/dist/model/region-scope.d.mts +3 -6
- package/dist/model/region-scope.mjs +1 -1
- package/dist/model/subject.d.mts +2 -5
- package/dist/model/subject.mjs +1 -1
- package/dist/model/types.d.mts +19 -20
- package/dist/runner/collector.d.mts +7 -8
- package/dist/runner/collector.mjs +3 -1
- package/dist/runner/discovery.d.mts +10 -11
- package/dist/runner/discovery.mjs +5 -1
- package/dist/runner/filter.d.mts +6 -7
- package/dist/runner/filter.mjs +3 -1
- package/dist/runner/index.d.mts +3 -1
- package/dist/runner/index.mjs +1 -1
- package/dist/runner/native/native-pool-grants.d.mts +2 -3
- package/dist/runner/native/native-serial-runner.d.mts +4 -7
- package/dist/runner/native/native-serial-runner.mjs +1 -1
- package/dist/runner/node/engine.d.mts +5 -6
- package/dist/runner/node/index.mjs +1 -1
- package/dist/runner/node/node-vm-filesystem.d.mts +4 -5
- package/dist/runner/node/node-vm-filesystem.mjs +1 -1
- package/dist/runner/node/pool-runner.d.mts +15 -6
- package/dist/runner/node/pool-runner.mjs +1 -1
- package/dist/runner/node/pool-worker-entry.d.mts +9 -6
- package/dist/runner/node/pool-worker-entry.mjs +1 -1
- package/dist/runner/pool/events.mjs +1 -1
- package/dist/runner/pool/pool-messages.d.mts +8 -9
- package/dist/runner/pool/pool.d.mts +4 -6
- package/dist/runner/pool/pool.mjs +1 -1
- package/dist/runner/pool/shard-timings.d.mts +3 -4
- package/dist/runner/pool/worker-host.d.mts +6 -5
- package/dist/runner/pool/worker-host.mjs +1 -1
- package/dist/runner/run-geospec-module.d.mts +2 -3
- package/dist/runner/run-geospec-module.mjs +2 -2
- package/dist/runner/timeout-codes.d.mts +6 -8
- package/dist/runner/types.d.mts +56 -53
- package/dist/runner/worker/no-matching-tests-issue.d.mts +3 -4
- package/dist/runner/worker/runner-types.d.mts +17 -16
- package/dist/runner/worker/serial-runner.mjs +1 -1
- package/dist/selector/types.d.mts +22 -23
- package/dist/step/types.d.mts +4 -119
- package/dist/support/filesystem-errors.mjs +1 -0
- package/dist/support/hash.mjs +1 -0
- package/dist/support/path.mjs +1 -0
- package/dist/support/sha256.mjs +1 -0
- package/dist/support/types.d.mts +38 -0
- package/dist/vitest/adapter.d.mts +5 -6
- package/dist/vitest/adapter.mjs +1 -1
- package/dist/vitest/index.d.mts +0 -1
- package/dist/vitest/index.mjs +1 -1
- package/dist/vitest/node/index.d.mts +2 -0
- package/dist/vitest/node/index.mjs +1 -0
- package/dist/vitest/node/setup-project.d.mts +60 -0
- package/dist/vitest/node/setup-project.mjs +1 -0
- package/dist/vm/plain-module-vm.d.mts +13 -0
- package/dist/vm/plain-module-vm.mjs +8 -0
- package/dist/vm/types.d.mts +142 -0
- package/package.json +17 -9
- package/agent/geospec-authoring/api-types-2.md +0 -85
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# geospec — Types
|
|
2
2
|
|
|
3
|
-
|
|
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: {
|
|
@@ -34,7 +34,7 @@ GeoSpecAssertion: {
|
|
|
34
34
|
* holds for this millimetre box, never for the whole model.
|
|
35
35
|
*/
|
|
36
36
|
region?: GeoSpecLoadRegion;
|
|
37
|
-
/** Wall-clock cost of matcher evaluation in milliseconds (
|
|
37
|
+
/** Wall-clock cost of matcher evaluation in milliseconds (budgeted matchers only). */
|
|
38
38
|
durationMs?: number;
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -62,7 +62,7 @@ GeoSpecAssertion: {
|
|
|
62
62
|
// The crop this assertion's subject was loaded with
|
|
63
63
|
region?: GeoSpecLoadRegion
|
|
64
64
|
|
|
65
|
-
// Wall-clock cost of matcher evaluation in milliseconds (
|
|
65
|
+
// Wall-clock cost of matcher evaluation in milliseconds (budgeted matchers only)
|
|
66
66
|
durationMs?: number
|
|
67
67
|
|
|
68
68
|
// Assembly occurrence rule accepted by `expectGeo(...).toHaveAssemblyOccurrences(...)`
|
|
@@ -830,256 +830,6 @@ GeoSpecVolumeExpectation: {
|
|
|
830
830
|
|
|
831
831
|
tolerance?: number
|
|
832
832
|
|
|
833
|
-
// Basic exact or topology-derived BRep evidence consumed by early feature matchers
|
|
834
|
-
BrepEvidence: {
|
|
835
|
-
validity?: {
|
|
836
|
-
valid: boolean;
|
|
837
|
-
checks?: Array<{
|
|
838
|
-
shape: string;
|
|
839
|
-
status: string;
|
|
840
|
-
}>;
|
|
841
|
-
maxTolerance?: number;
|
|
842
|
-
freeBounds?: {
|
|
843
|
-
count: number;
|
|
844
|
-
};
|
|
845
|
-
smallEdges?: Array<{
|
|
846
|
-
length: number;
|
|
847
|
-
shape?: string;
|
|
848
|
-
location?: Vec3;
|
|
849
|
-
}>;
|
|
850
|
-
sameParameter?: boolean;
|
|
851
|
-
closedShells?: boolean;
|
|
852
|
-
closedSolids?: boolean;
|
|
853
|
-
solidCount?: number;
|
|
854
|
-
invalidSolidCount?: number;
|
|
855
|
-
openEdgeCount?: number;
|
|
856
|
-
reason?: string;
|
|
857
|
-
closedWires?: boolean;
|
|
858
|
-
};
|
|
859
|
-
topologyCounts?: {
|
|
860
|
-
vertices?: number;
|
|
861
|
-
edges?: number;
|
|
862
|
-
wires?: number;
|
|
863
|
-
faces?: number;
|
|
864
|
-
shells?: number;
|
|
865
|
-
solids?: number;
|
|
866
|
-
compounds?: number;
|
|
867
|
-
};
|
|
868
|
-
boundingBox?: {
|
|
869
|
-
min: Vec3;
|
|
870
|
-
max: Vec3;
|
|
871
|
-
size: Vec3;
|
|
872
|
-
center: Vec3;
|
|
873
|
-
};
|
|
874
|
-
massProperties?: {
|
|
875
|
-
surfaceArea?: number;
|
|
876
|
-
volume?: number;
|
|
877
|
-
centerOfMass?: Vec3;
|
|
878
|
-
mass?: number;
|
|
879
|
-
};
|
|
880
|
-
planarFaces?: Array<{
|
|
881
|
-
normal: Vec3;
|
|
882
|
-
offset: number;
|
|
883
|
-
area?: number;
|
|
884
|
-
center?: Vec3;
|
|
885
|
-
}>;
|
|
886
|
-
cylindricalFaces?: Array<{
|
|
887
|
-
radius: number;
|
|
888
|
-
axis: 'x' | 'y' | 'z';
|
|
889
|
-
center?: Vec3;
|
|
890
|
-
axisRange?: {
|
|
891
|
-
min: number;
|
|
892
|
-
max: number;
|
|
893
|
-
};
|
|
894
|
-
}>;
|
|
895
|
-
circularHoles?: Array<{
|
|
896
|
-
diameter: number;
|
|
897
|
-
through: boolean;
|
|
898
|
-
axis: 'x' | 'y' | 'z';
|
|
899
|
-
center?: Vec3;
|
|
900
|
-
axisRange?: {
|
|
901
|
-
min: number;
|
|
902
|
-
max: number;
|
|
903
|
-
};
|
|
904
|
-
}>;
|
|
905
|
-
circularHolePatterns?: Array<{
|
|
906
|
-
count: number;
|
|
907
|
-
holeDiameter: number;
|
|
908
|
-
boltCircleDiameter: number;
|
|
909
|
-
axis: 'x' | 'y' | 'z';
|
|
910
|
-
center?: Vec3;
|
|
911
|
-
}>;
|
|
912
|
-
chamferFeatures?: Array<{
|
|
913
|
-
distance: number;
|
|
914
|
-
selection?: string;
|
|
915
|
-
}>;
|
|
916
|
-
filletFeatures?: Array<{
|
|
917
|
-
radius: number;
|
|
918
|
-
selection?: string;
|
|
919
|
-
}>;
|
|
920
|
-
minimumWallThickness?: {
|
|
921
|
-
value: number;
|
|
922
|
-
location?: Vec3;
|
|
923
|
-
pointA?: Vec3;
|
|
924
|
-
pointB?: Vec3;
|
|
925
|
-
solidIndex?: number;
|
|
926
|
-
tieCount?: number;
|
|
927
|
-
algorithm?: string;
|
|
928
|
-
tolerance?: number;
|
|
929
|
-
supportA?: {
|
|
930
|
-
faceIndex?: number;
|
|
931
|
-
surfaceType?: string;
|
|
932
|
-
supportType?: string;
|
|
933
|
-
};
|
|
934
|
-
supportB?: {
|
|
935
|
-
faceIndex?: number;
|
|
936
|
-
surfaceType?: string;
|
|
937
|
-
supportType?: string;
|
|
938
|
-
};
|
|
939
|
-
rejections?: Record<string, number>;
|
|
940
|
-
};
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
validity?: {
|
|
944
|
-
valid: boolean;
|
|
945
|
-
checks?: Array<{
|
|
946
|
-
shape: string;
|
|
947
|
-
status: string;
|
|
948
|
-
}>;
|
|
949
|
-
maxTolerance?: number;
|
|
950
|
-
freeBounds?: {
|
|
951
|
-
count: number;
|
|
952
|
-
};
|
|
953
|
-
smallEdges?: Array<{
|
|
954
|
-
length: number;
|
|
955
|
-
shape?: string;
|
|
956
|
-
location?: Vec3;
|
|
957
|
-
}>;
|
|
958
|
-
sameParameter?: boolean;
|
|
959
|
-
closedShells?: boolean;
|
|
960
|
-
closedSolids?: boolean;
|
|
961
|
-
solidCount?: number;
|
|
962
|
-
invalidSolidCount?: number;
|
|
963
|
-
openEdgeCount?: number;
|
|
964
|
-
reason?: string;
|
|
965
|
-
closedWires?: boolean;
|
|
966
|
-
}
|
|
967
|
-
|
|
968
|
-
topologyCounts?: {
|
|
969
|
-
vertices?: number;
|
|
970
|
-
edges?: number;
|
|
971
|
-
wires?: number;
|
|
972
|
-
faces?: number;
|
|
973
|
-
shells?: number;
|
|
974
|
-
solids?: number;
|
|
975
|
-
compounds?: number;
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
boundingBox?: {
|
|
979
|
-
min: Vec3;
|
|
980
|
-
max: Vec3;
|
|
981
|
-
size: Vec3;
|
|
982
|
-
center: Vec3;
|
|
983
|
-
}
|
|
984
|
-
|
|
985
|
-
massProperties?: {
|
|
986
|
-
surfaceArea?: number;
|
|
987
|
-
volume?: number;
|
|
988
|
-
centerOfMass?: Vec3;
|
|
989
|
-
mass?: number;
|
|
990
|
-
}
|
|
991
|
-
|
|
992
|
-
planarFaces?: Array<{
|
|
993
|
-
normal: Vec3;
|
|
994
|
-
offset: number;
|
|
995
|
-
area?: number;
|
|
996
|
-
center?: Vec3;
|
|
997
|
-
}>
|
|
998
|
-
|
|
999
|
-
cylindricalFaces?: Array<{
|
|
1000
|
-
radius: number;
|
|
1001
|
-
axis: 'x' | 'y' | 'z';
|
|
1002
|
-
center?: Vec3;
|
|
1003
|
-
axisRange?: {
|
|
1004
|
-
min: number;
|
|
1005
|
-
max: number;
|
|
1006
|
-
};
|
|
1007
|
-
}>
|
|
1008
|
-
|
|
1009
|
-
circularHoles?: Array<{
|
|
1010
|
-
diameter: number;
|
|
1011
|
-
through: boolean;
|
|
1012
|
-
axis: 'x' | 'y' | 'z';
|
|
1013
|
-
center?: Vec3;
|
|
1014
|
-
axisRange?: {
|
|
1015
|
-
min: number;
|
|
1016
|
-
max: number;
|
|
1017
|
-
};
|
|
1018
|
-
}>
|
|
1019
|
-
|
|
1020
|
-
circularHolePatterns?: Array<{
|
|
1021
|
-
count: number;
|
|
1022
|
-
holeDiameter: number;
|
|
1023
|
-
boltCircleDiameter: number;
|
|
1024
|
-
axis: 'x' | 'y' | 'z';
|
|
1025
|
-
center?: Vec3;
|
|
1026
|
-
}>
|
|
1027
|
-
|
|
1028
|
-
chamferFeatures?: Array<{
|
|
1029
|
-
distance: number;
|
|
1030
|
-
selection?: string;
|
|
1031
|
-
}>
|
|
1032
|
-
|
|
1033
|
-
filletFeatures?: Array<{
|
|
1034
|
-
radius: number;
|
|
1035
|
-
selection?: string;
|
|
1036
|
-
}>
|
|
1037
|
-
|
|
1038
|
-
minimumWallThickness?: {
|
|
1039
|
-
value: number;
|
|
1040
|
-
location?: Vec3;
|
|
1041
|
-
pointA?: Vec3;
|
|
1042
|
-
pointB?: Vec3;
|
|
1043
|
-
solidIndex?: number;
|
|
1044
|
-
tieCount?: number;
|
|
1045
|
-
algorithm?: string;
|
|
1046
|
-
tolerance?: number;
|
|
1047
|
-
supportA?: {
|
|
1048
|
-
faceIndex?: number;
|
|
1049
|
-
surfaceType?: string;
|
|
1050
|
-
supportType?: string;
|
|
1051
|
-
};
|
|
1052
|
-
supportB?: {
|
|
1053
|
-
faceIndex?: number;
|
|
1054
|
-
surfaceType?: string;
|
|
1055
|
-
supportType?: string;
|
|
1056
|
-
};
|
|
1057
|
-
rejections?: Record<string, number>;
|
|
1058
|
-
}
|
|
1059
|
-
|
|
1060
|
-
// Geometry file formats understood by GeoSpec provenance
|
|
1061
|
-
GeometryFileFormat: MeshFileFormat | 'step' | 'stp'
|
|
1062
|
-
|
|
1063
|
-
// Capability exposed by a loaded subject
|
|
1064
|
-
GeometryCapability: {
|
|
1065
|
-
kind: 'mesh';
|
|
1066
|
-
feature: 'triangles' | 'bounding-box' | 'connected-components' | 'watertightness' | 'surface-area' | 'volume' | 'center-of-mass' | 'distance' | 'component-overlap';
|
|
1067
|
-
} | {
|
|
1068
|
-
kind: 'brep';
|
|
1069
|
-
feature: 'validity' | 'topology-counts' | 'bounding-box' | 'mass-properties' | 'planar-faces' | 'cylindrical-faces' | 'circular-holes' | 'circular-hole-patterns' | 'chamfer-features' | 'fillet-features' | 'wall-thickness';
|
|
1070
|
-
} | {
|
|
1071
|
-
kind: 'step';
|
|
1072
|
-
feature: 'schema' | 'units' | 'product-structure' | 'reader-provenance';
|
|
1073
|
-
} | {
|
|
1074
|
-
kind: 'unsupported';
|
|
1075
|
-
feature: string;
|
|
1076
|
-
reason: string;
|
|
1077
|
-
}
|
|
1078
|
-
|
|
1079
|
-
kind: 'mesh'
|
|
1080
|
-
|
|
1081
|
-
feature: 'triangles' | 'bounding-box' | 'connected-components' | 'watertightness' | 'surface-area' | 'volume' | 'center-of-mass' | 'distance' | 'component-overlap'
|
|
1082
|
-
|
|
1083
833
|
// Diagnostic emitted by GeoSpec loaders, analyzers, and matchers
|
|
1084
834
|
GeometryDiagnostic: {
|
|
1085
835
|
code: KernelIssueCode | (string & {});
|
|
@@ -1110,233 +860,6 @@ GeometryDiagnostic: {
|
|
|
1110
860
|
|
|
1111
861
|
details?: unknown
|
|
1112
862
|
|
|
1113
|
-
// Provenance recorded by GeoSpec loaders
|
|
1114
|
-
GeometryProvenance: {
|
|
1115
|
-
source: GeometrySource;
|
|
1116
|
-
unit: GeoSpecUnit;
|
|
1117
|
-
loader: 'gltf-transform' | 'in-memory' | 'opencascade-step';
|
|
1118
|
-
contentHash?: string;
|
|
1119
|
-
parameters?: Record<string, JSONValue>;
|
|
1120
|
-
exportIntent?: GeometryExportIntent;
|
|
1121
|
-
}
|
|
1122
|
-
|
|
1123
|
-
source: GeometrySource
|
|
1124
|
-
|
|
1125
|
-
unit: GeoSpecUnit
|
|
1126
|
-
|
|
1127
|
-
loader: 'gltf-transform' | 'in-memory' | 'opencascade-step'
|
|
1128
|
-
|
|
1129
|
-
contentHash?: string
|
|
1130
|
-
|
|
1131
|
-
parameters?: Record<string, JSONValue>
|
|
1132
|
-
|
|
1133
|
-
exportIntent?: GeometryExportIntent
|
|
1134
|
-
|
|
1135
|
-
// Source metadata for a loaded geometry subject
|
|
1136
|
-
GeometrySource: {
|
|
1137
|
-
kind: 'bytes' | 'array-buffer' | 'blob' | 'file' | 'path' | 'url' | 'mesh-buffer' | 'readable-stream' | 'async-iterable';
|
|
1138
|
-
format: GeometryFileFormat;
|
|
1139
|
-
path?: string;
|
|
1140
|
-
name?: string;
|
|
1141
|
-
byteLength?: number;
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
kind: 'bytes' | 'array-buffer' | 'blob' | 'file' | 'path' | 'url' | 'mesh-buffer' | 'readable-stream' | 'async-iterable'
|
|
1145
|
-
|
|
1146
|
-
format: GeometryFileFormat
|
|
1147
|
-
|
|
1148
|
-
path?: string
|
|
1149
|
-
|
|
1150
|
-
name?: string
|
|
1151
|
-
|
|
1152
|
-
byteLength?: number
|
|
1153
|
-
|
|
1154
|
-
// Canonical P0 object under test for GeoSpec
|
|
1155
|
-
// Remarks: This is intentionally a GeoSpec-loaded subject rather than a Tau runtime contract. Runtime integrations pass GLB/glTF bytes or files into loaders.
|
|
1156
|
-
GeometrySubject: {
|
|
1157
|
-
kind: 'geometry-subject';
|
|
1158
|
-
/** Opaque engine-owned identifier used by every protocol claim. */
|
|
1159
|
-
subjectId: string;
|
|
1160
|
-
mesh: GeometrySubjectMeshEvidence;
|
|
1161
|
-
brep?: BrepEvidence;
|
|
1162
|
-
step?: StepEvidence;
|
|
1163
|
-
provenance: GeometryProvenance;
|
|
1164
|
-
capabilities: GeometryCapability[];
|
|
1165
|
-
diagnostics: GeometryEvidenceDiagnostic[];
|
|
1166
|
-
}
|
|
1167
|
-
|
|
1168
|
-
kind: 'geometry-subject'
|
|
1169
|
-
|
|
1170
|
-
// Opaque engine-owned identifier used by every protocol claim
|
|
1171
|
-
subjectId: string
|
|
1172
|
-
|
|
1173
|
-
mesh: GeometrySubjectMeshEvidence
|
|
1174
|
-
|
|
1175
|
-
brep?: BrepEvidence
|
|
1176
|
-
|
|
1177
|
-
step?: StepEvidence
|
|
1178
|
-
|
|
1179
|
-
provenance: GeometryProvenance
|
|
1180
|
-
|
|
1181
|
-
capabilities: GeometryCapability[]
|
|
1182
|
-
|
|
1183
|
-
diagnostics: GeometryEvidenceDiagnostic[]
|
|
1184
|
-
|
|
1185
|
-
// Wire-safe mesh summary carried by an opaque geometry subject
|
|
1186
|
-
GeometrySubjectMeshEvidence: {
|
|
1187
|
-
format: MeshFileFormat;
|
|
1188
|
-
stats: Pick<GeometryStats, 'vertexCount' | 'meshCount' | 'triangleCount'>;
|
|
1189
|
-
}
|
|
1190
|
-
|
|
1191
|
-
format: MeshFileFormat
|
|
1192
|
-
|
|
1193
|
-
stats: Pick<GeometryStats, 'vertexCount' | 'meshCount' | 'triangleCount'>
|
|
1194
|
-
|
|
1195
|
-
// Mesh evidence loaded from geometry bytes or buffers
|
|
1196
|
-
MeshEvidence: {
|
|
1197
|
-
format: MeshFileFormat;
|
|
1198
|
-
stats: GeometryStats;
|
|
1199
|
-
}
|
|
1200
|
-
|
|
1201
|
-
format: MeshFileFormat
|
|
1202
|
-
|
|
1203
|
-
stats: GeometryStats
|
|
1204
|
-
|
|
1205
|
-
// Geometry file formats supported by the P0 mesh loader
|
|
1206
|
-
MeshFileFormat: 'glb' | 'gltf' | 'mesh-buffer'
|
|
1207
|
-
|
|
1208
|
-
// Triangle quality and scalar mesh metrics used by P0 GeoSpec matchers
|
|
1209
|
-
// Remarks: Values are reported in the glTF document coordinate units.
|
|
1210
|
-
MeshQualityStats: {
|
|
1211
|
-
triangleCount: number;
|
|
1212
|
-
nonFiniteVertices: Array<{
|
|
1213
|
-
primitive: string;
|
|
1214
|
-
vertexIndex: number;
|
|
1215
|
-
position: [number, number, number];
|
|
1216
|
-
}>;
|
|
1217
|
-
degenerateTriangles: Array<{
|
|
1218
|
-
primitive: string;
|
|
1219
|
-
triangleIndex: number;
|
|
1220
|
-
area: number;
|
|
1221
|
-
center: [number, number, number];
|
|
1222
|
-
}>;
|
|
1223
|
-
duplicateFaces: Array<{
|
|
1224
|
-
primitive: string;
|
|
1225
|
-
triangleIndex: number;
|
|
1226
|
-
firstTriangleIndex: number;
|
|
1227
|
-
}>;
|
|
1228
|
-
triangles: MeshTriangle[];
|
|
1229
|
-
surfaceArea: number;
|
|
1230
|
-
signedVolume: number;
|
|
1231
|
-
centerOfMass?: Vec3;
|
|
1232
|
-
}
|
|
1233
|
-
|
|
1234
|
-
triangleCount: number
|
|
1235
|
-
|
|
1236
|
-
nonFiniteVertices: Array<{
|
|
1237
|
-
primitive: string;
|
|
1238
|
-
vertexIndex: number;
|
|
1239
|
-
position: [number, number, number];
|
|
1240
|
-
}>
|
|
1241
|
-
|
|
1242
|
-
degenerateTriangles: Array<{
|
|
1243
|
-
primitive: string;
|
|
1244
|
-
triangleIndex: number;
|
|
1245
|
-
area: number;
|
|
1246
|
-
center: [number, number, number];
|
|
1247
|
-
}>
|
|
1248
|
-
|
|
1249
|
-
duplicateFaces: Array<{
|
|
1250
|
-
primitive: string;
|
|
1251
|
-
triangleIndex: number;
|
|
1252
|
-
firstTriangleIndex: number;
|
|
1253
|
-
}>
|
|
1254
|
-
|
|
1255
|
-
triangles: MeshTriangle[]
|
|
1256
|
-
|
|
1257
|
-
surfaceArea: number
|
|
1258
|
-
|
|
1259
|
-
signedVolume: number
|
|
1260
|
-
|
|
1261
|
-
centerOfMass?: Vec3
|
|
1262
|
-
|
|
1263
|
-
// One triangle from mesh evidence, in geometry document coordinates
|
|
1264
|
-
MeshTriangle: {
|
|
1265
|
-
primitive: string;
|
|
1266
|
-
triangleIndex: number;
|
|
1267
|
-
a: [number, number, number];
|
|
1268
|
-
b: [number, number, number];
|
|
1269
|
-
c: [number, number, number];
|
|
1270
|
-
center: [number, number, number];
|
|
1271
|
-
area: number;
|
|
1272
|
-
}
|
|
1273
|
-
|
|
1274
|
-
primitive: string
|
|
1275
|
-
|
|
1276
|
-
triangleIndex: number
|
|
1277
|
-
|
|
1278
|
-
a: [number, number, number]
|
|
1279
|
-
|
|
1280
|
-
b: [number, number, number]
|
|
1281
|
-
|
|
1282
|
-
c: [number, number, number]
|
|
1283
|
-
|
|
1284
|
-
center: [number, number, number]
|
|
1285
|
-
|
|
1286
|
-
area: number
|
|
1287
|
-
|
|
1288
|
-
// STEP/XDE evidence extracted while loading a STEP subject
|
|
1289
|
-
StepEvidence: {
|
|
1290
|
-
schema?: string;
|
|
1291
|
-
unit?: GeoSpecUnit;
|
|
1292
|
-
productStructure?: Array<{
|
|
1293
|
-
name: string;
|
|
1294
|
-
path: string;
|
|
1295
|
-
transform?: number[];
|
|
1296
|
-
}>;
|
|
1297
|
-
readStrategy: {
|
|
1298
|
-
strategy: 'native-stream' | 'filesystem';
|
|
1299
|
-
inputKind: GeometrySource['kind'];
|
|
1300
|
-
bytesRead: number;
|
|
1301
|
-
nativeReadStream: boolean;
|
|
1302
|
-
copiedToEmscriptenFs: boolean;
|
|
1303
|
-
};
|
|
1304
|
-
capabilities: Array<{
|
|
1305
|
-
feature: string;
|
|
1306
|
-
supported: boolean;
|
|
1307
|
-
reason?: string;
|
|
1308
|
-
}>;
|
|
1309
|
-
/** Structured AP242 XDE read result (occurrences, subshape names, datum placements). */
|
|
1310
|
-
xde?: XdeReadResult;
|
|
1311
|
-
}
|
|
1312
|
-
|
|
1313
|
-
schema?: string
|
|
1314
|
-
|
|
1315
|
-
unit?: GeoSpecUnit
|
|
1316
|
-
|
|
1317
|
-
productStructure?: Array<{
|
|
1318
|
-
name: string;
|
|
1319
|
-
path: string;
|
|
1320
|
-
transform?: number[];
|
|
1321
|
-
}>
|
|
1322
|
-
|
|
1323
|
-
readStrategy: {
|
|
1324
|
-
strategy: 'native-stream' | 'filesystem';
|
|
1325
|
-
inputKind: GeometrySource['kind'];
|
|
1326
|
-
bytesRead: number;
|
|
1327
|
-
nativeReadStream: boolean;
|
|
1328
|
-
copiedToEmscriptenFs: boolean;
|
|
1329
|
-
}
|
|
1330
|
-
|
|
1331
|
-
capabilities: Array<{
|
|
1332
|
-
feature: string;
|
|
1333
|
-
supported: boolean;
|
|
1334
|
-
reason?: string;
|
|
1335
|
-
}>
|
|
1336
|
-
|
|
1337
|
-
// Structured AP242 XDE read result (occurrences, subshape names, datum placements)
|
|
1338
|
-
xde?: XdeReadResult
|
|
1339
|
-
|
|
1340
863
|
// Numeric 3D vector
|
|
1341
864
|
Vec3: readonly [number, number, number]
|
|
1342
865
|
|
|
@@ -1385,179 +908,6 @@ MeshBufferSource: {
|
|
|
1385
908
|
// Mesh source forms accepted by {@link import ('./load-model.js').loadModel}
|
|
1386
909
|
MeshSource: Uint8Array<ArrayBuffer> | ArrayBuffer | Blob | File | URL | string | MeshBufferSource
|
|
1387
910
|
|
|
1388
|
-
// Axis-aligned bounding box in glTF document units (meters)
|
|
1389
|
-
AabbMeters: {
|
|
1390
|
-
min: [number, number, number];
|
|
1391
|
-
max: [number, number, number];
|
|
1392
|
-
}
|
|
1393
|
-
|
|
1394
|
-
min: [number, number, number]
|
|
1395
|
-
|
|
1396
|
-
max: [number, number, number]
|
|
1397
|
-
|
|
1398
|
-
// Dominant primitive on an axis extremum for `boundingBox` failures
|
|
1399
|
-
BoundingBoxAxisExtremum: {
|
|
1400
|
-
name: string;
|
|
1401
|
-
aabb: AabbMeters;
|
|
1402
|
-
value: number;
|
|
1403
|
-
}
|
|
1404
|
-
|
|
1405
|
-
name: string
|
|
1406
|
-
|
|
1407
|
-
aabb: AabbMeters
|
|
1408
|
-
|
|
1409
|
-
value: number
|
|
1410
|
-
|
|
1411
|
-
// One axis failure for `boundingBox` checks
|
|
1412
|
-
BoundingBoxAxisFailure: {
|
|
1413
|
-
axis: 'x' | 'y' | 'z';
|
|
1414
|
-
field: 'size' | 'center';
|
|
1415
|
-
expected: number;
|
|
1416
|
-
actual: number;
|
|
1417
|
-
tolerance: number;
|
|
1418
|
-
minExtremum?: BoundingBoxAxisExtremum;
|
|
1419
|
-
maxExtremum?: BoundingBoxAxisExtremum;
|
|
1420
|
-
}
|
|
1421
|
-
|
|
1422
|
-
axis: 'x' | 'y' | 'z'
|
|
1423
|
-
|
|
1424
|
-
field: 'size' | 'center'
|
|
1425
|
-
|
|
1426
|
-
expected: number
|
|
1427
|
-
|
|
1428
|
-
actual: number
|
|
1429
|
-
|
|
1430
|
-
tolerance: number
|
|
1431
|
-
|
|
1432
|
-
minExtremum?: BoundingBoxAxisExtremum
|
|
1433
|
-
|
|
1434
|
-
maxExtremum?: BoundingBoxAxisExtremum
|
|
1435
|
-
|
|
1436
|
-
// Structured payload when `boundingBox` fails
|
|
1437
|
-
BoundingBoxFailure: {
|
|
1438
|
-
axisFailures: BoundingBoxAxisFailure[];
|
|
1439
|
-
}
|
|
1440
|
-
|
|
1441
|
-
axisFailures: BoundingBoxAxisFailure[]
|
|
1442
|
-
|
|
1443
|
-
// Scene bounding box with per-primitive contributors in the subject's unit and frame
|
|
1444
|
-
BoundingBoxStats: {
|
|
1445
|
-
size: [number, number, number];
|
|
1446
|
-
center: [number, number, number];
|
|
1447
|
-
primitives: PrimitiveRecord[];
|
|
1448
|
-
}
|
|
1449
|
-
|
|
1450
|
-
size: [number, number, number]
|
|
1451
|
-
|
|
1452
|
-
center: [number, number, number]
|
|
1453
|
-
|
|
1454
|
-
primitives: PrimitiveRecord[]
|
|
1455
|
-
|
|
1456
|
-
// Result of evaluating a single test requirement against geometry stats
|
|
1457
|
-
CheckResult: {
|
|
1458
|
-
passed: true;
|
|
1459
|
-
} | {
|
|
1460
|
-
passed: false;
|
|
1461
|
-
check: 'boundingBox';
|
|
1462
|
-
reason: string;
|
|
1463
|
-
suggestion: string;
|
|
1464
|
-
failure: BoundingBoxFailure;
|
|
1465
|
-
} | {
|
|
1466
|
-
passed: false;
|
|
1467
|
-
check: 'connectedComponents';
|
|
1468
|
-
reason: string;
|
|
1469
|
-
suggestion: string;
|
|
1470
|
-
failure: ConnectedComponentsFailure;
|
|
1471
|
-
} | {
|
|
1472
|
-
passed: false;
|
|
1473
|
-
check: 'watertight';
|
|
1474
|
-
reason: string;
|
|
1475
|
-
suggestion: string;
|
|
1476
|
-
failure: WatertightFailure;
|
|
1477
|
-
} | {
|
|
1478
|
-
passed: false;
|
|
1479
|
-
check: 'invalid';
|
|
1480
|
-
reason: string;
|
|
1481
|
-
suggestion: string;
|
|
1482
|
-
}
|
|
1483
|
-
|
|
1484
|
-
passed: true
|
|
1485
|
-
|
|
1486
|
-
// Smallest clearance between two clusters along the dominant separation axis
|
|
1487
|
-
ClusterGap: {
|
|
1488
|
-
fromLabel: string;
|
|
1489
|
-
toLabel: string;
|
|
1490
|
-
axis: 'x' | 'y' | 'z';
|
|
1491
|
-
/** Millimetres — clearance between the two named primitives' AABBs. */
|
|
1492
|
-
gapMm: number;
|
|
1493
|
-
fromPrimitive: string;
|
|
1494
|
-
toPrimitive: string;
|
|
1495
|
-
}
|
|
1496
|
-
|
|
1497
|
-
fromLabel: string
|
|
1498
|
-
|
|
1499
|
-
toLabel: string
|
|
1500
|
-
|
|
1501
|
-
axis: 'x' | 'y' | 'z'
|
|
1502
|
-
|
|
1503
|
-
// Millimetres — clearance between the two named primitives' AABBs
|
|
1504
|
-
gapMm: number
|
|
1505
|
-
|
|
1506
|
-
fromPrimitive: string
|
|
1507
|
-
|
|
1508
|
-
toPrimitive: string
|
|
1509
|
-
|
|
1510
|
-
// One spatial cluster from AABB overlap grouping
|
|
1511
|
-
ClusterReport: {
|
|
1512
|
-
label: string;
|
|
1513
|
-
primitives: PrimitiveRecord[];
|
|
1514
|
-
aabb: AabbMeters;
|
|
1515
|
-
centroid: [number, number, number];
|
|
1516
|
-
totalVertices: number;
|
|
1517
|
-
}
|
|
1518
|
-
|
|
1519
|
-
label: string
|
|
1520
|
-
|
|
1521
|
-
primitives: PrimitiveRecord[]
|
|
1522
|
-
|
|
1523
|
-
aabb: AabbMeters
|
|
1524
|
-
|
|
1525
|
-
centroid: [number, number, number]
|
|
1526
|
-
|
|
1527
|
-
totalVertices: number
|
|
1528
|
-
|
|
1529
|
-
// Structured payload when `connectedComponents` fails
|
|
1530
|
-
ConnectedComponentsFailure: {
|
|
1531
|
-
expected: number;
|
|
1532
|
-
got: number;
|
|
1533
|
-
toleranceMm: number;
|
|
1534
|
-
clusters: ClusterReport[];
|
|
1535
|
-
gaps: ClusterGap[];
|
|
1536
|
-
}
|
|
1537
|
-
|
|
1538
|
-
expected: number
|
|
1539
|
-
|
|
1540
|
-
got: number
|
|
1541
|
-
|
|
1542
|
-
toleranceMm: number
|
|
1543
|
-
|
|
1544
|
-
clusters: ClusterReport[]
|
|
1545
|
-
|
|
1546
|
-
gaps: ClusterGap[]
|
|
1547
|
-
|
|
1548
|
-
// Full connected-components analysis at one tolerance
|
|
1549
|
-
ConnectedComponentsResult: {
|
|
1550
|
-
count: number;
|
|
1551
|
-
clusters: ClusterReport[];
|
|
1552
|
-
gaps: ClusterGap[];
|
|
1553
|
-
}
|
|
1554
|
-
|
|
1555
|
-
count: number
|
|
1556
|
-
|
|
1557
|
-
clusters: ClusterReport[]
|
|
1558
|
-
|
|
1559
|
-
gaps: ClusterGap[]
|
|
1560
|
-
|
|
1561
911
|
// Runtime export intent recorded when GeoSpec obtains evidence from a CAD runtime instead of a direct geometry file
|
|
1562
912
|
GeometryExportIntent: {
|
|
1563
913
|
requested: {
|
|
@@ -1627,203 +977,11 @@ GeometryExportIntent: {
|
|
|
1627
977
|
direct: boolean;
|
|
1628
978
|
}
|
|
1629
979
|
|
|
1630
|
-
//
|
|
1631
|
-
|
|
1632
|
-
details?: JSONValue;
|
|
1633
|
-
}
|
|
1634
|
-
|
|
1635
|
-
code: KernelIssueCode | (string & {})
|
|
1636
|
-
|
|
1637
|
-
severity: 'error' | 'warning' | 'info'
|
|
1638
|
-
|
|
1639
|
-
message: string
|
|
1640
|
-
|
|
1641
|
-
suggestion?: string
|
|
1642
|
-
|
|
1643
|
-
spatial?: {
|
|
1644
|
-
min?: Vec3;
|
|
1645
|
-
max?: Vec3;
|
|
1646
|
-
center?: Vec3;
|
|
1647
|
-
}
|
|
1648
|
-
|
|
1649
|
-
details?: JSONValue
|
|
1650
|
-
|
|
1651
|
-
// Statistics about a parsed GLB geometry
|
|
1652
|
-
// Remarks: `vertexCount` and `meshCount` are kept on the type for internal diagnostic use (and for the kernel-author Vitest harness in `kernel-geometry-testing.utils.ts`); they are no longer exposed via the agent-facing requirement schema.
|
|
1653
|
-
GeometryStats: {
|
|
1654
|
-
vertexCount: number;
|
|
1655
|
-
meshCount: number;
|
|
1656
|
-
triangleCount: number;
|
|
1657
|
-
meshQuality: MeshQualityStats;
|
|
1658
|
-
watertight: boolean;
|
|
1659
|
-
boundingBox?: BoundingBoxStats;
|
|
1660
|
-
}
|
|
1661
|
-
|
|
1662
|
-
vertexCount: number
|
|
1663
|
-
|
|
1664
|
-
meshCount: number
|
|
1665
|
-
|
|
1666
|
-
triangleCount: number
|
|
1667
|
-
|
|
1668
|
-
meshQuality: MeshQualityStats
|
|
1669
|
-
|
|
1670
|
-
watertight: boolean
|
|
1671
|
-
|
|
1672
|
-
boundingBox?: BoundingBoxStats
|
|
1673
|
-
|
|
1674
|
-
// One TRIANGLES primitive with identity for spatial-test feedback
|
|
1675
|
-
PrimitiveRecord: {
|
|
1676
|
-
/** The glTF node / mesh name (from kernel ShapeConfig.name when present). */
|
|
1677
|
-
name: string;
|
|
1678
|
-
color?: string;
|
|
1679
|
-
vertices: number;
|
|
1680
|
-
aabb: AabbMeters;
|
|
1681
|
-
}
|
|
1682
|
-
|
|
1683
|
-
// The glTF node / mesh name (from kernel ShapeConfig.name when present)
|
|
1684
|
-
name: string
|
|
1685
|
-
|
|
1686
|
-
color?: string
|
|
1687
|
-
|
|
1688
|
-
vertices: number
|
|
1689
|
-
|
|
1690
|
-
aabb: AabbMeters
|
|
1691
|
-
|
|
1692
|
-
// Structured payload when `watertight` fails
|
|
1693
|
-
WatertightFailure: {
|
|
1694
|
-
/** Edges with incidence ≠ 2 (open or non-manifold). */
|
|
1695
|
-
irregularEdges: number;
|
|
1696
|
-
/** Edges shared by exactly one triangle (open boundary). */
|
|
1697
|
-
openBoundaryEdges: number;
|
|
1698
|
-
/** Edges shared by more than two triangles (over-adjacent/non-manifold). */
|
|
1699
|
-
nonManifoldEdges: number;
|
|
1700
|
-
irregularEdgeKindCounts: {
|
|
1701
|
-
openBoundary: number;
|
|
1702
|
-
nonManifold: number;
|
|
1703
|
-
};
|
|
1704
|
-
irregularEdgeClusters: WatertightIrregularEdgeCluster[];
|
|
1705
|
-
irregularEdgeFraction: number;
|
|
1706
|
-
perPrimitive: WatertightPrimitiveBreakdown[];
|
|
1707
|
-
}
|
|
1708
|
-
|
|
1709
|
-
// Edges with incidence ≠ 2 (open or non-manifold)
|
|
1710
|
-
irregularEdges: number
|
|
1711
|
-
|
|
1712
|
-
// Edges shared by exactly one triangle (open boundary)
|
|
1713
|
-
openBoundaryEdges: number
|
|
1714
|
-
|
|
1715
|
-
// Edges shared by more than two triangles (over-adjacent/non-manifold)
|
|
1716
|
-
nonManifoldEdges: number
|
|
1717
|
-
|
|
1718
|
-
irregularEdgeKindCounts: {
|
|
1719
|
-
openBoundary: number;
|
|
1720
|
-
nonManifold: number;
|
|
1721
|
-
}
|
|
1722
|
-
|
|
1723
|
-
irregularEdgeClusters: WatertightIrregularEdgeCluster[]
|
|
1724
|
-
|
|
1725
|
-
irregularEdgeFraction: number
|
|
1726
|
-
|
|
1727
|
-
perPrimitive: WatertightPrimitiveBreakdown[]
|
|
1728
|
-
|
|
1729
|
-
// Spatial cluster of related irregular edges
|
|
1730
|
-
WatertightIrregularEdgeCluster: {
|
|
1731
|
-
kind: WatertightIrregularEdgeKind;
|
|
1732
|
-
edgeCount: number;
|
|
1733
|
-
aabb: {
|
|
1734
|
-
min: Vec3;
|
|
1735
|
-
max: Vec3;
|
|
1736
|
-
center: Vec3;
|
|
1737
|
-
};
|
|
1738
|
-
samples: WatertightIrregularEdgeSample[];
|
|
1739
|
-
}
|
|
1740
|
-
|
|
1741
|
-
kind: WatertightIrregularEdgeKind
|
|
1742
|
-
|
|
1743
|
-
edgeCount: number
|
|
1744
|
-
|
|
1745
|
-
aabb: {
|
|
1746
|
-
min: Vec3;
|
|
1747
|
-
max: Vec3;
|
|
1748
|
-
center: Vec3;
|
|
1749
|
-
}
|
|
1750
|
-
|
|
1751
|
-
samples: WatertightIrregularEdgeSample[]
|
|
1752
|
-
|
|
1753
|
-
// Class of irregular mesh edge found during watertight analysis
|
|
1754
|
-
WatertightIrregularEdgeKind: 'open-boundary' | 'non-manifold'
|
|
1755
|
-
|
|
1756
|
-
// Representative irregular edge, in glTF document coordinates
|
|
1757
|
-
WatertightIrregularEdgeSample: {
|
|
1758
|
-
start: Vec3;
|
|
1759
|
-
end: Vec3;
|
|
1760
|
-
center: Vec3;
|
|
1761
|
-
incidentTriangleCount: number;
|
|
1762
|
-
primitives: string[];
|
|
1763
|
-
color?: string;
|
|
1764
|
-
}
|
|
1765
|
-
|
|
1766
|
-
start: Vec3
|
|
1767
|
-
|
|
1768
|
-
end: Vec3
|
|
1769
|
-
|
|
1770
|
-
center: Vec3
|
|
1771
|
-
|
|
1772
|
-
incidentTriangleCount: number
|
|
1773
|
-
|
|
1774
|
-
primitives: string[]
|
|
1775
|
-
|
|
1776
|
-
color?: string
|
|
1777
|
-
|
|
1778
|
-
// Per-primitive watertight diagnostic (local tessellation only)
|
|
1779
|
-
WatertightPrimitiveBreakdown: {
|
|
1780
|
-
name: string;
|
|
1781
|
-
boundaryEdges: number;
|
|
1782
|
-
loopCentroid: [number, number, number];
|
|
1783
|
-
}
|
|
1784
|
-
|
|
1785
|
-
name: string
|
|
1786
|
-
|
|
1787
|
-
boundaryEdges: number
|
|
1788
|
-
|
|
1789
|
-
loopCentroid: [number, number, number]
|
|
1790
|
-
|
|
1791
|
-
// Full watertight analysis (global + per-primitive breakdown)
|
|
1792
|
-
WatertightResult: {
|
|
1793
|
-
watertight: boolean;
|
|
1794
|
-
irregularEdges: number;
|
|
1795
|
-
openBoundaryEdges: number;
|
|
1796
|
-
nonManifoldEdges: number;
|
|
1797
|
-
irregularEdgeKindCounts: {
|
|
1798
|
-
openBoundary: number;
|
|
1799
|
-
nonManifold: number;
|
|
1800
|
-
};
|
|
1801
|
-
irregularEdgeClusters: WatertightIrregularEdgeCluster[];
|
|
1802
|
-
totalEdges: number;
|
|
1803
|
-
irregularEdgeFraction: number;
|
|
1804
|
-
perPrimitive: WatertightPrimitiveBreakdown[];
|
|
1805
|
-
}
|
|
1806
|
-
|
|
1807
|
-
watertight: boolean
|
|
1808
|
-
|
|
1809
|
-
irregularEdges: number
|
|
1810
|
-
|
|
1811
|
-
openBoundaryEdges: number
|
|
1812
|
-
|
|
1813
|
-
nonManifoldEdges: number
|
|
1814
|
-
|
|
1815
|
-
irregularEdgeKindCounts: {
|
|
1816
|
-
openBoundary: number;
|
|
1817
|
-
nonManifold: number;
|
|
1818
|
-
}
|
|
1819
|
-
|
|
1820
|
-
irregularEdgeClusters: WatertightIrregularEdgeCluster[]
|
|
1821
|
-
|
|
1822
|
-
totalEdges: number
|
|
1823
|
-
|
|
1824
|
-
irregularEdgeFraction: number
|
|
980
|
+
// Geometry file formats a GeoSpec export intent can name
|
|
981
|
+
GeometryFileFormat: MeshFileFormat | 'step' | 'stp'
|
|
1825
982
|
|
|
1826
|
-
|
|
983
|
+
// Geometry file formats supported by the P0 mesh loader
|
|
984
|
+
MeshFileFormat: 'glb' | 'gltf' | 'mesh-buffer'
|
|
1827
985
|
|
|
1828
986
|
// Defaults accepted by {@link import ('./load-model.js').createModelLoader}
|
|
1829
987
|
CreateModelLoaderOptions: {
|
|
@@ -2057,3 +1215,330 @@ GeoSpecConsumedSources: ReadonlyArray<{
|
|
|
2057
1215
|
readonly path: string;
|
|
2058
1216
|
readonly sha256: string;
|
|
2059
1217
|
}>
|
|
1218
|
+
|
|
1219
|
+
// Inline code-CAD model load options
|
|
1220
|
+
LoadModelCodeOptions: {
|
|
1221
|
+
/** Source files keyed by project-relative path. */
|
|
1222
|
+
code: Code;
|
|
1223
|
+
/** Entry path to render from {@link code}. */
|
|
1224
|
+
file: keyof Code & string;
|
|
1225
|
+
/** Not accepted: inline code has no project folder to resolve in, and a load naming one is refused. */
|
|
1226
|
+
rootDir?: never;
|
|
1227
|
+
/** Geometry format to export. Defaults to `glb`. */
|
|
1228
|
+
format?: GeoSpecModelFormat;
|
|
1229
|
+
/** Explicit parameters passed to the exporter. */
|
|
1230
|
+
parameters?: Record<string, unknown>;
|
|
1231
|
+
/** Absolute project root passed to the exporter. */
|
|
1232
|
+
projectPath?: string;
|
|
1233
|
+
/** STEP reader strategy used for STEP exports. */
|
|
1234
|
+
stepStreaming?: StepStreamingMode;
|
|
1235
|
+
/** Whether STEP loading should also produce mesh evidence. Defaults to true. */
|
|
1236
|
+
mesh?: boolean;
|
|
1237
|
+
/** Linear tolerance used while meshing exact BRep evidence. */
|
|
1238
|
+
meshLinearTolerance?: number;
|
|
1239
|
+
/** Angular tolerance in degrees used while meshing exact BRep evidence. */
|
|
1240
|
+
meshAngularToleranceDegrees?: number;
|
|
1241
|
+
/**
|
|
1242
|
+
* Default work-unit budget for every claim on this subject: a positive integer no greater than
|
|
1243
|
+
* the host's maximum (default `geoSpecMaximumWorkUnitLimit`, 512 000 000). `expectGeo(subject, { workUnitLimit })` overrides
|
|
1244
|
+
* it per chain. Recorded in the load evidence; it never changes the exported or admitted bytes.
|
|
1245
|
+
*/
|
|
1246
|
+
workUnitLimit?: number;
|
|
1247
|
+
/**
|
|
1248
|
+
* Axis-aligned millimetre box the exporter crops the model to before export, so a large mesh model
|
|
1249
|
+
* can be checked region by region. Only an exporter that declares `region` honours it; any other
|
|
1250
|
+
* exporter, or a crop the exporter cannot make, refuses with a typed diagnostic instead of loading
|
|
1251
|
+
* the whole model. The cropped subject is a different subject: its load evidence records `region`,
|
|
1252
|
+
* so a claim on it never stands for the whole model.
|
|
1253
|
+
*/
|
|
1254
|
+
region?: GeoSpecLoadRegion;
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
// Source files keyed by project-relative path
|
|
1258
|
+
code: Code
|
|
1259
|
+
|
|
1260
|
+
// Entry path to render from {@link code }
|
|
1261
|
+
file: keyof Code & string
|
|
1262
|
+
|
|
1263
|
+
// Not accepted
|
|
1264
|
+
rootDir?: never
|
|
1265
|
+
|
|
1266
|
+
// Geometry format to export
|
|
1267
|
+
format?: GeoSpecModelFormat
|
|
1268
|
+
|
|
1269
|
+
// Explicit parameters passed to the exporter
|
|
1270
|
+
parameters?: Record<string, unknown>
|
|
1271
|
+
|
|
1272
|
+
// Absolute project root passed to the exporter
|
|
1273
|
+
projectPath?: string
|
|
1274
|
+
|
|
1275
|
+
// STEP reader strategy used for STEP exports
|
|
1276
|
+
stepStreaming?: StepStreamingMode
|
|
1277
|
+
|
|
1278
|
+
// Whether STEP loading should also produce mesh evidence
|
|
1279
|
+
mesh?: boolean
|
|
1280
|
+
|
|
1281
|
+
// Linear tolerance used while meshing exact BRep evidence
|
|
1282
|
+
meshLinearTolerance?: number
|
|
1283
|
+
|
|
1284
|
+
// Angular tolerance in degrees used while meshing exact BRep evidence
|
|
1285
|
+
meshAngularToleranceDegrees?: number
|
|
1286
|
+
|
|
1287
|
+
// Default work-unit budget for every claim on this subject
|
|
1288
|
+
workUnitLimit?: number
|
|
1289
|
+
|
|
1290
|
+
// Axis-aligned millimetre box the exporter crops the model to before export, so a large mesh model can be checked region by region
|
|
1291
|
+
region?: GeoSpecLoadRegion
|
|
1292
|
+
|
|
1293
|
+
// Filesystem-backed model load options
|
|
1294
|
+
LoadModelFileOptions: {
|
|
1295
|
+
/**
|
|
1296
|
+
* Model file to render, as a path from the project root: the same root every tool's `targetFile` resolves
|
|
1297
|
+
* against, which the result names as `projectRoot` where the host reports it, as `tau mcp` does.
|
|
1298
|
+
*/
|
|
1299
|
+
file: string;
|
|
1300
|
+
/**
|
|
1301
|
+
* Project-relative folder `file` resolves in, for a suite that loads from somewhere other than the project root:
|
|
1302
|
+
* `loadModel({ file: 'main.ts', rootDir: 'parts/gear' })` loads `parts/gear/main.ts`. Recorded in the load
|
|
1303
|
+
* evidence.
|
|
1304
|
+
*/
|
|
1305
|
+
rootDir?: string;
|
|
1306
|
+
/** Absolute project root passed to the exporter. */
|
|
1307
|
+
projectPath?: string;
|
|
1308
|
+
/** Geometry format to export. Defaults to `glb`. */
|
|
1309
|
+
format?: GeoSpecModelFormat;
|
|
1310
|
+
/** Explicit parameters passed to the exporter. */
|
|
1311
|
+
parameters?: Record<string, unknown>;
|
|
1312
|
+
/** STEP reader strategy used for STEP exports. */
|
|
1313
|
+
stepStreaming?: StepStreamingMode;
|
|
1314
|
+
/** Whether STEP loading should also produce mesh evidence. Defaults to true. */
|
|
1315
|
+
mesh?: boolean;
|
|
1316
|
+
/** Linear tolerance used while meshing exact BRep evidence. */
|
|
1317
|
+
meshLinearTolerance?: number;
|
|
1318
|
+
/** Angular tolerance in degrees used while meshing exact BRep evidence. */
|
|
1319
|
+
meshAngularToleranceDegrees?: number;
|
|
1320
|
+
/**
|
|
1321
|
+
* Default work-unit budget for every claim on this subject: a positive integer no greater than
|
|
1322
|
+
* the host's maximum (default `geoSpecMaximumWorkUnitLimit`, 512 000 000). `expectGeo(subject, { workUnitLimit })` overrides
|
|
1323
|
+
* it per chain. Recorded in the load evidence; it never changes the exported or admitted bytes.
|
|
1324
|
+
*/
|
|
1325
|
+
workUnitLimit?: number;
|
|
1326
|
+
/**
|
|
1327
|
+
* Axis-aligned millimetre box the exporter crops the model to before export, so a large mesh model
|
|
1328
|
+
* can be checked region by region. Only an exporter that declares `region` honours it; any other
|
|
1329
|
+
* exporter, or a crop the exporter cannot make, refuses with a typed diagnostic instead of loading
|
|
1330
|
+
* the whole model. The cropped subject is a different subject: its load evidence records `region`,
|
|
1331
|
+
* so a claim on it never stands for the whole model.
|
|
1332
|
+
*/
|
|
1333
|
+
region?: GeoSpecLoadRegion;
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1336
|
+
// Model file to render, as a path from the project root
|
|
1337
|
+
file: string
|
|
1338
|
+
|
|
1339
|
+
// Project-relative folder `file` resolves in, for a suite that loads from somewhere other than the project root
|
|
1340
|
+
rootDir?: string
|
|
1341
|
+
|
|
1342
|
+
// Absolute project root passed to the exporter
|
|
1343
|
+
projectPath?: string
|
|
1344
|
+
|
|
1345
|
+
// Geometry format to export
|
|
1346
|
+
format?: GeoSpecModelFormat
|
|
1347
|
+
|
|
1348
|
+
// Explicit parameters passed to the exporter
|
|
1349
|
+
parameters?: Record<string, unknown>
|
|
1350
|
+
|
|
1351
|
+
// STEP reader strategy used for STEP exports
|
|
1352
|
+
stepStreaming?: StepStreamingMode
|
|
1353
|
+
|
|
1354
|
+
// Whether STEP loading should also produce mesh evidence
|
|
1355
|
+
mesh?: boolean
|
|
1356
|
+
|
|
1357
|
+
// Linear tolerance used while meshing exact BRep evidence
|
|
1358
|
+
meshLinearTolerance?: number
|
|
1359
|
+
|
|
1360
|
+
// Angular tolerance in degrees used while meshing exact BRep evidence
|
|
1361
|
+
meshAngularToleranceDegrees?: number
|
|
1362
|
+
|
|
1363
|
+
// Default work-unit budget for every claim on this subject
|
|
1364
|
+
workUnitLimit?: number
|
|
1365
|
+
|
|
1366
|
+
// Axis-aligned millimetre box the exporter crops the model to before export, so a large mesh model can be checked region by region
|
|
1367
|
+
region?: GeoSpecLoadRegion
|
|
1368
|
+
|
|
1369
|
+
// Options accepted by {@link import ('./load-model.js').loadModel}
|
|
1370
|
+
LoadModelOptions: LoadModelSourceOptions | LoadModelCodeOptions<Code> | LoadModelFileOptions
|
|
1371
|
+
|
|
1372
|
+
// Project-relative folder `file` resolves in, for a suite that loads from somewhere other than the project root
|
|
1373
|
+
rootDir?: string
|
|
1374
|
+
|
|
1375
|
+
// Geometry format to export
|
|
1376
|
+
format?: GeoSpecModelFormat
|
|
1377
|
+
|
|
1378
|
+
// Explicit parameters passed to the exporter
|
|
1379
|
+
parameters?: Record<string, unknown>
|
|
1380
|
+
|
|
1381
|
+
// STEP reader strategy used for STEP exports
|
|
1382
|
+
stepStreaming?: StepStreamingMode
|
|
1383
|
+
|
|
1384
|
+
// Whether STEP loading should also produce mesh evidence
|
|
1385
|
+
mesh?: boolean
|
|
1386
|
+
|
|
1387
|
+
// Linear tolerance used while meshing exact BRep evidence
|
|
1388
|
+
meshLinearTolerance?: number
|
|
1389
|
+
|
|
1390
|
+
// Angular tolerance in degrees used while meshing exact BRep evidence
|
|
1391
|
+
meshAngularToleranceDegrees?: number
|
|
1392
|
+
|
|
1393
|
+
// Default work-unit budget for every claim on this subject
|
|
1394
|
+
workUnitLimit?: number
|
|
1395
|
+
|
|
1396
|
+
// Direct geometry-source model load options
|
|
1397
|
+
LoadModelSourceOptions: {
|
|
1398
|
+
/** Geometry bytes, path, browser file/blob, or in-memory mesh buffer. */
|
|
1399
|
+
source: MeshSource | StepSource;
|
|
1400
|
+
/** Named external resources consumed alongside the direct geometry bytes. */
|
|
1401
|
+
resources?: ReadonlyArray<{
|
|
1402
|
+
readonly name: string;
|
|
1403
|
+
readonly source: MeshSource | StepSource;
|
|
1404
|
+
}>;
|
|
1405
|
+
/**
|
|
1406
|
+
* Project-relative folder a path `source` and each resource path resolve in. Omitted, they resolve against the
|
|
1407
|
+
* project root. Recorded in the load evidence.
|
|
1408
|
+
*/
|
|
1409
|
+
rootDir?: string;
|
|
1410
|
+
/** Source geometry format. Defaults to `glb`. */
|
|
1411
|
+
format?: GeoSpecModelFormat;
|
|
1412
|
+
/** Source path recorded in provenance. */
|
|
1413
|
+
path?: string;
|
|
1414
|
+
/** Human-readable source name recorded in provenance. */
|
|
1415
|
+
name?: string;
|
|
1416
|
+
/** Coordinate unit of raw GLB/glTF or mesh-buffer data before canonical millimetre normalization. */
|
|
1417
|
+
sourceUnit?: GeoSpecUnit;
|
|
1418
|
+
/** Explicit parameters recorded in provenance. */
|
|
1419
|
+
parameters?: Record<string, unknown>;
|
|
1420
|
+
/** STEP reader strategy used for STEP sources. */
|
|
1421
|
+
stepStreaming?: StepStreamingMode;
|
|
1422
|
+
/** Whether STEP loading should also produce mesh evidence. Defaults to true. */
|
|
1423
|
+
mesh?: boolean;
|
|
1424
|
+
/** Linear tolerance used while meshing exact BRep evidence. */
|
|
1425
|
+
meshLinearTolerance?: number;
|
|
1426
|
+
/** Angular tolerance in degrees used while meshing exact BRep evidence. */
|
|
1427
|
+
meshAngularToleranceDegrees?: number;
|
|
1428
|
+
/**
|
|
1429
|
+
* Default work-unit budget for every claim on this subject: a positive integer no greater than
|
|
1430
|
+
* the host's maximum (default `geoSpecMaximumWorkUnitLimit`, 512 000 000). `expectGeo(subject, { workUnitLimit })` overrides
|
|
1431
|
+
* it per chain. Recorded in the load evidence; it never changes the exported or admitted bytes.
|
|
1432
|
+
*/
|
|
1433
|
+
workUnitLimit?: number;
|
|
1434
|
+
}
|
|
1435
|
+
|
|
1436
|
+
// Geometry bytes, path, browser file/blob, or in-memory mesh buffer
|
|
1437
|
+
source: MeshSource | StepSource
|
|
1438
|
+
|
|
1439
|
+
// Named external resources consumed alongside the direct geometry bytes
|
|
1440
|
+
resources?: ReadonlyArray<{
|
|
1441
|
+
readonly name: string;
|
|
1442
|
+
readonly source: MeshSource | StepSource;
|
|
1443
|
+
}>
|
|
1444
|
+
|
|
1445
|
+
// Project-relative folder a path `source` and each resource path resolve in
|
|
1446
|
+
rootDir?: string
|
|
1447
|
+
|
|
1448
|
+
// Source geometry format
|
|
1449
|
+
format?: GeoSpecModelFormat
|
|
1450
|
+
|
|
1451
|
+
// Source path recorded in provenance
|
|
1452
|
+
path?: string
|
|
1453
|
+
|
|
1454
|
+
// Human-readable source name recorded in provenance
|
|
1455
|
+
name?: string
|
|
1456
|
+
|
|
1457
|
+
// Coordinate unit of raw GLB/glTF or mesh-buffer data before canonical millimetre normalization
|
|
1458
|
+
sourceUnit?: GeoSpecUnit
|
|
1459
|
+
|
|
1460
|
+
// Explicit parameters recorded in provenance
|
|
1461
|
+
parameters?: Record<string, unknown>
|
|
1462
|
+
|
|
1463
|
+
// STEP reader strategy used for STEP sources
|
|
1464
|
+
stepStreaming?: StepStreamingMode
|
|
1465
|
+
|
|
1466
|
+
// Whether STEP loading should also produce mesh evidence
|
|
1467
|
+
mesh?: boolean
|
|
1468
|
+
|
|
1469
|
+
// Linear tolerance used while meshing exact BRep evidence
|
|
1470
|
+
meshLinearTolerance?: number
|
|
1471
|
+
|
|
1472
|
+
// Angular tolerance in degrees used while meshing exact BRep evidence
|
|
1473
|
+
meshAngularToleranceDegrees?: number
|
|
1474
|
+
|
|
1475
|
+
// Default work-unit budget for every claim on this subject
|
|
1476
|
+
workUnitLimit?: number
|
|
1477
|
+
|
|
1478
|
+
// Options for {@link commandExporter}
|
|
1479
|
+
CommandExporterOptions: {
|
|
1480
|
+
readonly id: string;
|
|
1481
|
+
/** File extensions without the dot, or `'*'`. */
|
|
1482
|
+
readonly extensions: readonly string[];
|
|
1483
|
+
/** Executable and leading arguments, such as `['python', 'export.py']`. */
|
|
1484
|
+
readonly command: readonly string[];
|
|
1485
|
+
/** What the command can do. Protocol 1 carries no inline sources, so `inlineSources` must not be set. */
|
|
1486
|
+
readonly capabilities: GeoSpecExporterCapabilities;
|
|
1487
|
+
/** Working directory of the command; defaults to the request's project root. */
|
|
1488
|
+
readonly cwd?: string;
|
|
1489
|
+
/** Extra environment variables, merged over this process's. */
|
|
1490
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
1491
|
+
/** Positive milliseconds one export may run before the command is killed and the export fails. */
|
|
1492
|
+
readonly exportTimeout?: number;
|
|
1493
|
+
}
|
|
1494
|
+
|
|
1495
|
+
readonly id: string
|
|
1496
|
+
|
|
1497
|
+
// File extensions without the dot, or `'*'`
|
|
1498
|
+
readonly extensions: readonly string[]
|
|
1499
|
+
|
|
1500
|
+
// Executable and leading arguments, such as `['python', 'export.py']`
|
|
1501
|
+
readonly command: readonly string[]
|
|
1502
|
+
|
|
1503
|
+
// What the command can do
|
|
1504
|
+
readonly capabilities: GeoSpecExporterCapabilities
|
|
1505
|
+
|
|
1506
|
+
// Working directory of the command
|
|
1507
|
+
readonly cwd?: string
|
|
1508
|
+
|
|
1509
|
+
// Extra environment variables, merged over this process's
|
|
1510
|
+
readonly env?: Readonly<Record<string, string>>
|
|
1511
|
+
|
|
1512
|
+
// Positive milliseconds one export may run before the command is killed and the export fails
|
|
1513
|
+
readonly exportTimeout?: number
|
|
1514
|
+
|
|
1515
|
+
// Collects suites, tests, assertions, and async completion state for one GeoSpec module execution
|
|
1516
|
+
GeoSpecCollector: {
|
|
1517
|
+
tests: GeoSpecTestCase[];
|
|
1518
|
+
describe(name: string, function_: GeoSpecTestFunction): void;
|
|
1519
|
+
describeSkip(name: string, _function?: GeoSpecTestFunction): void;
|
|
1520
|
+
it(name: string, function_: GeoSpecTestFunction): void;
|
|
1521
|
+
itSkip(name: string, _function?: GeoSpecTestFunction): void;
|
|
1522
|
+
expectGeo(subject: unknown, options?: GeoSpecExpectOptions): GeoSpecMatcher;
|
|
1523
|
+
waitForCompletion(testTimeout?: number, testNamePattern?: GeoSpecTestNamePattern): Promise<void>;
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1526
|
+
tests: GeoSpecTestCase[]
|
|
1527
|
+
|
|
1528
|
+
// GeoSpecCollector.describe (method)
|
|
1529
|
+
describe(name: string, function_: GeoSpecTestFunction): void;
|
|
1530
|
+
|
|
1531
|
+
// GeoSpecCollector.describeSkip (method)
|
|
1532
|
+
describeSkip(name: string, _function?: GeoSpecTestFunction): void;
|
|
1533
|
+
|
|
1534
|
+
// GeoSpecCollector.it (method)
|
|
1535
|
+
it(name: string, function_: GeoSpecTestFunction): void;
|
|
1536
|
+
|
|
1537
|
+
// GeoSpecCollector.itSkip (method)
|
|
1538
|
+
itSkip(name: string, _function?: GeoSpecTestFunction): void;
|
|
1539
|
+
|
|
1540
|
+
// GeoSpecCollector.expectGeo (method)
|
|
1541
|
+
expectGeo(subject: unknown, options?: GeoSpecExpectOptions): GeoSpecMatcher;
|
|
1542
|
+
|
|
1543
|
+
// GeoSpecCollector.waitForCompletion (method)
|
|
1544
|
+
waitForCompletion(testTimeout?: number, testNamePattern?: GeoSpecTestNamePattern): Promise<void>;
|