@geotechcli/core 0.4.53 → 0.4.55

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 (64) hide show
  1. package/dist/evidence/evidence-ref.d.ts +8 -0
  2. package/dist/evidence/evidence-ref.d.ts.map +1 -1
  3. package/dist/evidence/evidence-ref.js.map +1 -1
  4. package/dist/evidence/index.d.ts +1 -1
  5. package/dist/evidence/index.d.ts.map +1 -1
  6. package/dist/evidence/index.js.map +1 -1
  7. package/dist/fem/demo.d.ts +4 -0
  8. package/dist/fem/demo.d.ts.map +1 -0
  9. package/dist/fem/demo.js +274 -0
  10. package/dist/fem/demo.js.map +1 -0
  11. package/dist/fem/index.d.ts +5 -0
  12. package/dist/fem/index.d.ts.map +1 -0
  13. package/dist/fem/index.js +5 -0
  14. package/dist/fem/index.js.map +1 -0
  15. package/dist/fem/types.d.ts +154 -0
  16. package/dist/fem/types.d.ts.map +1 -0
  17. package/dist/fem/types.js +2 -0
  18. package/dist/fem/types.js.map +1 -0
  19. package/dist/fem/validation.d.ts +4 -0
  20. package/dist/fem/validation.d.ts.map +1 -0
  21. package/dist/fem/validation.js +195 -0
  22. package/dist/fem/validation.js.map +1 -0
  23. package/dist/fem/webgl.d.ts +3 -0
  24. package/dist/fem/webgl.d.ts.map +1 -0
  25. package/dist/fem/webgl.js +120 -0
  26. package/dist/fem/webgl.js.map +1 -0
  27. package/dist/index.d.ts +2 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +3 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/ingest/document-evidence-packet.d.ts +32 -32
  32. package/dist/ingest/geotech-document.d.ts +2 -0
  33. package/dist/ingest/geotech-document.d.ts.map +1 -1
  34. package/dist/ingest/geotech-document.js +17 -2
  35. package/dist/ingest/geotech-document.js.map +1 -1
  36. package/dist/ingest/geotech-extract.d.ts +2 -0
  37. package/dist/ingest/geotech-extract.d.ts.map +1 -1
  38. package/dist/ingest/geotech-extract.js +12 -0
  39. package/dist/ingest/geotech-extract.js.map +1 -1
  40. package/dist/ingest/page-evidence-cache.d.ts +4 -1
  41. package/dist/ingest/page-evidence-cache.d.ts.map +1 -1
  42. package/dist/ingest/page-evidence-cache.js +86 -1
  43. package/dist/ingest/page-evidence-cache.js.map +1 -1
  44. package/dist/llm/index.d.ts +1 -0
  45. package/dist/llm/index.d.ts.map +1 -1
  46. package/dist/llm/index.js +1 -0
  47. package/dist/llm/index.js.map +1 -1
  48. package/dist/meta/metadata.json +1 -1
  49. package/dist/report/html.d.ts.map +1 -1
  50. package/dist/report/html.js +596 -1309
  51. package/dist/report/html.js.map +1 -1
  52. package/dist/report/index.d.ts +1 -0
  53. package/dist/report/index.d.ts.map +1 -1
  54. package/dist/report/index.js +1 -0
  55. package/dist/report/index.js.map +1 -1
  56. package/dist/report/ingest-dossier.d.ts +5 -0
  57. package/dist/report/ingest-dossier.d.ts.map +1 -1
  58. package/dist/report/ingest-dossier.js +376 -2
  59. package/dist/report/ingest-dossier.js.map +1 -1
  60. package/dist/report/integrated-review-model.d.ts +147 -0
  61. package/dist/report/integrated-review-model.d.ts.map +1 -0
  62. package/dist/report/integrated-review-model.js +649 -0
  63. package/dist/report/integrated-review-model.js.map +1 -0
  64. package/package.json +1 -1
@@ -0,0 +1,195 @@
1
+ function finding(severity, code, message) {
2
+ return { severity, code, message };
3
+ }
4
+ function summary(findings) {
5
+ const blockers = findings.filter((item) => item.severity === 'blocker').length;
6
+ const reviewItems = findings.filter((item) => item.severity === 'review').length;
7
+ return {
8
+ status: blockers > 0 ? 'blocked' : reviewItems > 0 ? 'review' : 'ready',
9
+ blockers,
10
+ reviewItems,
11
+ findings,
12
+ };
13
+ }
14
+ function isRecord(value) {
15
+ return typeof value === 'object' && value !== null;
16
+ }
17
+ function isFemAnalysisCaseShape(value) {
18
+ if (!isRecord(value))
19
+ return false;
20
+ const geometry = value.geometry;
21
+ const mesh = value.mesh;
22
+ const groundwater = value.groundwater;
23
+ return (isRecord(geometry) &&
24
+ isRecord(geometry.domain) &&
25
+ isRecord(geometry.raft) &&
26
+ isRecord(mesh) &&
27
+ isRecord(groundwater) &&
28
+ Array.isArray(value.materials) &&
29
+ Array.isArray(value.loads) &&
30
+ Array.isArray(value.assumptions) &&
31
+ Array.isArray(value.limitations) &&
32
+ Array.isArray(value.evidenceRefs));
33
+ }
34
+ function isFemResultManifestShape(value) {
35
+ if (!isRecord(value))
36
+ return false;
37
+ const visualization = value.visualization;
38
+ const envelope = value.envelope;
39
+ const mesh = value.mesh;
40
+ return (isFemAnalysisCaseShape(value.analysisCase) &&
41
+ isRecord(envelope) &&
42
+ isRecord(mesh) &&
43
+ isRecord(visualization) &&
44
+ Array.isArray(visualization.base) &&
45
+ Array.isArray(visualization.disp) &&
46
+ Array.isArray(visualization.color) &&
47
+ Array.isArray(visualization.tri) &&
48
+ Array.isArray(visualization.edge) &&
49
+ Array.isArray(visualization.outlineBase) &&
50
+ Array.isArray(visualization.outlineDisp) &&
51
+ Array.isArray(visualization.outlineIdx) &&
52
+ Array.isArray(value.assumptions) &&
53
+ Array.isArray(value.limitations));
54
+ }
55
+ export function validateFemAnalysisCase(caseFile) {
56
+ const findings = [];
57
+ if (!isFemAnalysisCaseShape(caseFile)) {
58
+ return summary([
59
+ finding('blocker', 'schema.shape-invalid', 'FEM analysis case is missing required geometry, mesh, groundwater, or array fields.'),
60
+ ]);
61
+ }
62
+ const { domain, raft } = caseFile.geometry;
63
+ const material = caseFile.materials[0];
64
+ const load = caseFile.loads[0];
65
+ if (caseFile.schemaVersion !== 'fem-analysis-case.v0') {
66
+ findings.push(finding('blocker', 'schema.unsupported', 'Only fem-analysis-case.v0 is supported.'));
67
+ }
68
+ if (!caseFile.experimental) {
69
+ findings.push(finding('blocker', 'mode.experimental-required', 'FEM cases must be explicitly marked experimental.'));
70
+ }
71
+ if (caseFile.objective !== 'foundation_settlement') {
72
+ findings.push(finding('blocker', 'objective.unsupported', `Unsupported FEM objective: ${caseFile.objective}.`));
73
+ }
74
+ if (caseFile.analysisType !== 'static_3d_small_strain') {
75
+ findings.push(finding('blocker', 'analysis.unsupported', `Unsupported analysis type: ${caseFile.analysisType}.`));
76
+ }
77
+ if (domain.lengthM <= 0 || domain.widthM <= 0 || domain.depthM <= 0) {
78
+ findings.push(finding('blocker', 'geometry.domain-invalid', 'Domain dimensions must be positive.'));
79
+ }
80
+ if (raft.lengthM <= 0 || raft.widthM <= 0 || raft.thicknessM <= 0) {
81
+ findings.push(finding('blocker', 'geometry.raft-invalid', 'Raft dimensions must be positive.'));
82
+ }
83
+ if (domain.lengthM < raft.lengthM * 3 || domain.widthM < raft.widthM * 3) {
84
+ findings.push(finding('review', 'geometry.domain-small', 'Domain is less than three raft widths in plan; boundary influence should be reviewed.'));
85
+ }
86
+ if (domain.depthM < Math.max(raft.lengthM, raft.widthM)) {
87
+ findings.push(finding('review', 'geometry.depth-shallow', 'Domain depth is less than the controlling raft dimension; settlement influence depth should be reviewed.'));
88
+ }
89
+ if (!material) {
90
+ findings.push(finding('blocker', 'material.missing', 'At least one material is required.'));
91
+ }
92
+ else {
93
+ if (material.model !== 'linear_elastic') {
94
+ findings.push(finding('blocker', 'material.unsupported', `Unsupported material model: ${material.model}.`));
95
+ }
96
+ if (!Number.isFinite(material.elasticModulusKpa) || material.elasticModulusKpa <= 0) {
97
+ findings.push(finding('blocker', 'material.elastic-modulus-invalid', 'Elastic modulus must be positive.'));
98
+ }
99
+ if (!Number.isFinite(material.poissonRatio) || material.poissonRatio <= 0 || material.poissonRatio >= 0.5) {
100
+ findings.push(finding('blocker', 'material.poisson-invalid', 'Poisson ratio must be between 0 and 0.5.'));
101
+ }
102
+ }
103
+ if (!load) {
104
+ findings.push(finding('blocker', 'load.missing', 'A raft pressure load is required.'));
105
+ }
106
+ else if (!Number.isFinite(load.pressureKpa) || load.pressureKpa <= 0) {
107
+ findings.push(finding('blocker', 'load.pressure-invalid', 'Uniform pressure must be positive.'));
108
+ }
109
+ const { divisionsX, divisionsY, divisionsZ } = caseFile.mesh;
110
+ if (divisionsX < 2 || divisionsY < 2 || divisionsZ < 1) {
111
+ findings.push(finding('blocker', 'mesh.too-coarse', 'Mesh divisions must be at least 2 x 2 x 1.'));
112
+ }
113
+ if (caseFile.groundwater.reviewRequired) {
114
+ findings.push(finding('review', 'groundwater.review-required', caseFile.groundwater.note));
115
+ }
116
+ for (const assumption of caseFile.assumptions) {
117
+ if (assumption.reviewRequired || assumption.confidence === 'review') {
118
+ findings.push(finding('review', `assumption.${assumption.id}`, `${assumption.parameter} is an engineering assumption requiring review.`));
119
+ }
120
+ }
121
+ return summary(findings);
122
+ }
123
+ function pushFiniteArrayFindings(findings, name, values, multipleOf) {
124
+ if (values.length === 0) {
125
+ findings.push(finding('blocker', `result.${name}.empty`, `${name} must not be empty.`));
126
+ return;
127
+ }
128
+ if (values.length % multipleOf !== 0) {
129
+ findings.push(finding('blocker', `result.${name}.stride-invalid`, `${name} length must be divisible by ${multipleOf}.`));
130
+ }
131
+ if (values.some((value) => !Number.isFinite(value))) {
132
+ findings.push(finding('blocker', `result.${name}.non-finite`, `${name} contains non-finite values.`));
133
+ }
134
+ }
135
+ function pushIndexArrayFindings(findings, name, values, nodeCount, multipleOf) {
136
+ if (values.length === 0) {
137
+ findings.push(finding('blocker', `result.${name}.empty`, `${name} must not be empty.`));
138
+ return;
139
+ }
140
+ if (values.length % multipleOf !== 0) {
141
+ findings.push(finding('blocker', `result.${name}.stride-invalid`, `${name} length must be divisible by ${multipleOf}.`));
142
+ }
143
+ for (const value of values) {
144
+ if (!Number.isInteger(value) || value < 0 || value >= nodeCount) {
145
+ findings.push(finding('blocker', `result.${name}.index-invalid`, `${name} references node index ${value}, outside the 0-${Math.max(0, nodeCount - 1)} range.`));
146
+ return;
147
+ }
148
+ }
149
+ }
150
+ export function validateFemResultManifest(manifest) {
151
+ const findings = [];
152
+ if (!isFemResultManifestShape(manifest)) {
153
+ return summary([
154
+ finding('blocker', 'result.schema.shape-invalid', 'FEM result manifest is missing required analysis case, envelope, mesh, visualization, or array fields.'),
155
+ ]);
156
+ }
157
+ if (manifest.schemaVersion !== 'fem-result-manifest.v0') {
158
+ findings.push(finding('blocker', 'result.schema.unsupported', 'Only fem-result-manifest.v0 is supported.'));
159
+ }
160
+ if (!manifest.analysisCase.experimental) {
161
+ findings.push(finding('blocker', 'result.experimental-required', 'FEM result manifests must be tied to an experimental case.'));
162
+ }
163
+ for (const [key, value] of Object.entries(manifest.envelope)) {
164
+ if (!Number.isFinite(value)) {
165
+ findings.push(finding('blocker', `result.envelope.${key}.non-finite`, `Envelope value ${key} must be finite.`));
166
+ }
167
+ }
168
+ if (manifest.envelope.reactionBalanceRatio < 0.95 || manifest.envelope.reactionBalanceRatio > 1.05) {
169
+ findings.push(finding('review', 'result.envelope.balance-review', 'Reaction balance is outside the 0.95-1.05 review band.'));
170
+ }
171
+ const { visualization } = manifest;
172
+ pushFiniteArrayFindings(findings, 'base', visualization.base, 3);
173
+ pushFiniteArrayFindings(findings, 'disp', visualization.disp, 3);
174
+ pushFiniteArrayFindings(findings, 'color', visualization.color, 3);
175
+ pushFiniteArrayFindings(findings, 'outlineBase', visualization.outlineBase, 3);
176
+ pushFiniteArrayFindings(findings, 'outlineDisp', visualization.outlineDisp, 3);
177
+ const nodeCount = visualization.base.length / 3;
178
+ if (visualization.disp.length / 3 !== nodeCount) {
179
+ findings.push(finding('blocker', 'result.disp.node-count-mismatch', 'Displacement vectors must match base nodes.'));
180
+ }
181
+ if (visualization.color.length / 3 !== nodeCount) {
182
+ findings.push(finding('blocker', 'result.color.node-count-mismatch', 'Color vectors must match base nodes.'));
183
+ }
184
+ pushIndexArrayFindings(findings, 'tri', visualization.tri, nodeCount, 3);
185
+ pushIndexArrayFindings(findings, 'edge', visualization.edge, nodeCount, 2);
186
+ const outlineNodeCount = visualization.outlineBase.length / 3;
187
+ if (visualization.outlineDisp.length / 3 !== outlineNodeCount) {
188
+ findings.push(finding('blocker', 'result.outline.node-count-mismatch', 'Outline displacement vectors must match outline nodes.'));
189
+ }
190
+ pushIndexArrayFindings(findings, 'outlineIdx', visualization.outlineIdx, outlineNodeCount, 2);
191
+ const caseValidation = validateFemAnalysisCase(manifest.analysisCase);
192
+ findings.push(...caseValidation.findings);
193
+ return summary(findings);
194
+ }
195
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/fem/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { FemResultManifest } from './types.js';
2
+ export declare function renderFemWebglHtml(manifest: FemResultManifest): string;
3
+ //# sourceMappingURL=webgl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl.d.ts","sourceRoot":"","sources":["../../src/fem/webgl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAepD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CA4GtE"}
@@ -0,0 +1,120 @@
1
+ function escapeHtml(value) {
2
+ return value
3
+ .replaceAll('&', '&amp;')
4
+ .replaceAll('<', '&lt;')
5
+ .replaceAll('>', '&gt;')
6
+ .replaceAll('"', '&quot;')
7
+ .replaceAll("'", '&#39;');
8
+ }
9
+ function safeJson(value) {
10
+ return JSON.stringify(value).replaceAll('</', '<\\/');
11
+ }
12
+ export function renderFemWebglHtml(manifest) {
13
+ const data = safeJson(manifest);
14
+ const title = escapeHtml(manifest.title);
15
+ const status = manifest.validation.status.toUpperCase();
16
+ const findingRows = manifest.validation.findings.length > 0
17
+ ? manifest.validation.findings.map((finding) => `
18
+ <li><strong>${escapeHtml(finding.severity)}</strong> ${escapeHtml(finding.message)}</li>`).join('')
19
+ : '<li>No blocking validation issues. Review assumptions before design use.</li>';
20
+ const assumptionRows = manifest.assumptions.map((assumption) => `
21
+ <li><strong>${escapeHtml(assumption.parameter)}</strong>: ${escapeHtml(String(assumption.value))}${assumption.unit ? ` ${escapeHtml(assumption.unit)}` : ''}<br><span>${escapeHtml(assumption.basis)}</span></li>`).join('');
22
+ const limitationRows = manifest.limitations.map((item) => `<li>${escapeHtml(item)}</li>`).join('');
23
+ return `<!doctype html>
24
+ <html lang="en">
25
+ <head>
26
+ <meta charset="utf-8">
27
+ <meta name="viewport" content="width=device-width, initial-scale=1">
28
+ <title>${title} - geotechCLI FEM</title>
29
+ <style>
30
+ :root{color-scheme:dark;--bg:#07111f;--panel:#0f1b2d;--panel2:#142238;--text:#e8eef8;--muted:#a8b3c7;--line:#29405f;--accent:#38bdf8;--warn:#f59e0b;--good:#22c55e}
31
+ *{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif}
32
+ #app{position:fixed;inset:0;display:grid;grid-template-columns:minmax(0,1fr) 380px}
33
+ main{position:relative;min-width:0;background:radial-gradient(circle at 50% 34%,rgba(56,189,248,.14),transparent 36%),linear-gradient(180deg,#020617,#07111f 55%,#0b1220)}
34
+ canvas{width:100%;height:100%;display:block;cursor:grab}canvas:active{cursor:grabbing}
35
+ aside{border-left:1px solid var(--line);background:linear-gradient(180deg,rgba(15,27,45,.96),rgba(7,17,31,.98));padding:20px;overflow:auto;box-shadow:-18px 0 44px rgba(0,0,0,.34)}
36
+ h1{font-size:20px;line-height:1.2;margin:0 0 8px}.sub{font-size:13px;line-height:1.45;color:var(--muted);margin:0 0 14px}
37
+ .badge{display:inline-flex;align-items:center;gap:8px;border:1px solid rgba(56,189,248,.28);background:rgba(56,189,248,.11);color:#dff7ff;border-radius:999px;padding:5px 10px;font-size:12px;font-weight:700;margin-bottom:12px}
38
+ .dot{width:8px;height:8px;border-radius:99px;background:var(--good);box-shadow:0 0 16px var(--good)}
39
+ .card{border:1px solid var(--line);background:rgba(20,34,56,.82);border-radius:14px;padding:14px;margin:12px 0}
40
+ .card h2{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:#bae6fd;margin:0 0 10px}
41
+ .kv{display:grid;grid-template-columns:1fr auto;gap:8px 12px;font-size:12.5px}.kv span:nth-child(odd){color:var(--muted)}.kv span:nth-child(even){font-variant-numeric:tabular-nums;text-align:right}
42
+ label{display:block;color:var(--muted);font-size:12.5px;margin:10px 0 6px}input[type=range]{width:100%;accent-color:var(--accent)}
43
+ .row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}button{border:1px solid rgba(148,163,184,.28);background:#1e3a5f;color:#eff6ff;border-radius:9px;padding:7px 10px;font-size:12px;cursor:pointer}button:hover{background:#25638e}
44
+ ul{margin:0;padding-left:18px;color:#dbeafe;font-size:12.5px;line-height:1.45}li{margin:8px 0}li span{color:var(--muted)}
45
+ .legend{display:grid;grid-template-columns:52px 1fr 56px;gap:8px;align-items:center;color:var(--muted);font-size:11.5px}.bar{height:12px;border-radius:99px;background:linear-gradient(90deg,rgb(43,62,154),rgb(47,107,205),rgb(56,170,210),rgb(80,200,120),rgb(235,210,75),rgb(220,83,44),rgb(170,25,55));border:1px solid rgba(255,255,255,.22)}
46
+ #fallback{display:none;position:absolute;left:20px;bottom:20px;max-width:380px;border:1px solid rgba(245,158,11,.45);background:rgba(7,17,31,.92);border-radius:14px;padding:12px 14px;color:#fde68a;z-index:2;box-shadow:0 14px 40px rgba(0,0,0,.28);font-size:12px;line-height:1.4}
47
+ .warn{color:#fbbf24}.small{font-size:11.5px;line-height:1.45;color:#94a3b8}
48
+ @media(max-width:900px){#app{grid-template-columns:1fr;grid-template-rows:1fr 42vh}aside{border-left:0;border-top:1px solid var(--line)}}
49
+ </style>
50
+ </head>
51
+ <body>
52
+ <div id="app">
53
+ <main>
54
+ <canvas id="glcanvas" aria-label="Interactive WebGL FEM settlement visualization"></canvas>
55
+ <div id="fallback">WebGL could not be started in this browser. Try recent Chrome, Edge, Firefox, or Safari with hardware acceleration enabled.</div>
56
+ </main>
57
+ <aside>
58
+ <div class="badge"><span class="dot"></span><span>Experimental deterministic FEM preview</span></div>
59
+ <h1>${title}</h1>
60
+ <p class="sub">Self-contained geotechCLI WebGL artifact. The model is deterministic and replayable from the embedded result manifest. It is an experimental screening demo, not a design model.</p>
61
+ <div class="card"><h2>Controls</h2>
62
+ <label for="scale">Deformation scale: <b id="scaleLabel">120x</b></label>
63
+ <input id="scale" type="range" min="0" max="300" value="120" step="1">
64
+ <div class="row" style="margin-top:10px"><button data-scale="0">0x</button><button data-scale="60">60x</button><button data-scale="120">120x</button><button data-scale="240">240x</button><button id="reset">Reset view</button></div>
65
+ <label class="row"><input id="wire" type="checkbox" checked> <span>Show mesh wireframe</span></label>
66
+ <label class="row"><input id="patch" type="checkbox" checked> <span>Show raft load patch</span></label>
67
+ </div>
68
+ <div class="card"><h2>Result envelope</h2><div class="kv" id="stats"></div></div>
69
+ <div class="card"><h2>Validation status</h2><p class="sub"><strong class="${manifest.validation.status === 'blocked' ? 'warn' : ''}">${escapeHtml(status)}</strong> - ${manifest.validation.blockers} blockers, ${manifest.validation.reviewItems} review items</p><ul>${findingRows}</ul></div>
70
+ <div class="card"><h2>Vertical settlement color</h2><div class="legend"><span>low</span><div class="bar"></div><span>high</span></div><p class="small">Warm colors show greater downward settlement. Displayed deformation is exaggerated by the slider.</p></div>
71
+ <div class="card"><h2>Assumptions</h2><ul>${assumptionRows}</ul></div>
72
+ <div class="card"><h2>Limitations</h2><ul>${limitationRows}</ul></div>
73
+ </aside>
74
+ </div>
75
+ <script>
76
+ const MANIFEST = ${data};
77
+ const DATA = MANIFEST.visualization;
78
+ let canvas = document.getElementById('glcanvas');
79
+ const fallback = document.getElementById('fallback');
80
+ document.body.dataset.renderer = 'initializing';
81
+ let gl=null, triProgram=null, lineProgram=null, baseBuf=null, dispBuf=null, colorBuf=null, triBuf=null, edgeBuf=null, obaseBuf=null, odispBuf=null, oidxBuf=null;
82
+ function ident(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}
83
+ function mul(a,b){const r=new Array(16).fill(0);for(let c=0;c<4;c++){for(let row=0;row<4;row++){for(let k=0;k<4;k++){r[c*4+row]+=a[k*4+row]*b[c*4+k];}}}return r}
84
+ function perspective(fovy,aspect,near,far){const f=1/Math.tan(fovy/2),nf=1/(near-far);return[f/aspect,0,0,0,0,f,0,0,0,0,(far+near)*nf,-1,0,0,2*far*near*nf,0]}
85
+ function translate(m,x,y,z){const t=ident();t[12]=x;t[13]=y;t[14]=z;return mul(m,t)}
86
+ function rotateX(m,a){const c=Math.cos(a),s=Math.sin(a);return mul(m,[1,0,0,0,0,c,s,0,0,-s,c,0,0,0,0,1])}
87
+ function rotateZ(m,a){const c=Math.cos(a),s=Math.sin(a);return mul(m,[c,s,0,0,-s,c,0,0,0,0,1,0,0,0,0,1])}
88
+ function scaleM(m,s){return mul(m,[s,0,0,0,0,s,0,0,0,0,s,0,0,0,0,1])}
89
+ let rx=-0.92, rz=-0.72, zoom=0.052, deform=120, dragging=false, lx=0, ly=0;
90
+ function resizeCanvas(){const dpr=Math.min(window.devicePixelRatio||1,2);const rect=canvas.getBoundingClientRect();const w=Math.max(1,Math.floor((rect.width||canvas.clientWidth||window.innerWidth)*dpr)),h=Math.max(1,Math.floor((rect.height||canvas.clientHeight||window.innerHeight)*dpr));if(canvas.width!==w||canvas.height!==h){canvas.width=w;canvas.height=h;}}
91
+ function markRenderer(name,message){document.body.dataset.renderer=name;if(message){fallback.textContent=message;fallback.style.display='block';}else{fallback.style.display='none';}}
92
+ function shader(type, src){ const s=gl.createShader(type); gl.shaderSource(s,src); gl.compileShader(s); if(!gl.getShaderParameter(s,gl.COMPILE_STATUS)){ throw new Error(gl.getShaderInfoLog(s)||'shader compile failed'); } return s; }
93
+ function program(vs, fs){ const p=gl.createProgram(); gl.attachShader(p,shader(gl.VERTEX_SHADER,vs)); gl.attachShader(p,shader(gl.FRAGMENT_SHADER,fs)); gl.linkProgram(p); if(!gl.getProgramParameter(p,gl.LINK_STATUS)){ throw new Error(gl.getProgramInfoLog(p)||'program link failed'); } return p; }
94
+ function buf(data,target){ const b=gl.createBuffer(); gl.bindBuffer(target,b); gl.bufferData(target,data,gl.STATIC_DRAW); return b; }
95
+ function attr(p,name,b,size){ const l=gl.getAttribLocation(p,name); if(l<0)return; gl.bindBuffer(gl.ARRAY_BUFFER,b); gl.enableVertexAttribArray(l); gl.vertexAttribPointer(l,size,gl.FLOAT,false,0,0); }
96
+ function initWebgl(){try{if(navigator.webdriver){return false;}gl=canvas.getContext('webgl',{antialias:true,alpha:false})||canvas.getContext('experimental-webgl',{antialias:true,alpha:false});if(!gl)return false;triProgram=program('attribute vec3 aBase;attribute vec3 aDisp;attribute vec3 aColor;uniform mat4 uMvp;uniform float uScale;varying vec3 vColor;void main(){vec3 p=aBase+aDisp*uScale;vColor=aColor;gl_Position=uMvp*vec4(p,1.0);}','precision mediump float;varying vec3 vColor;void main(){gl_FragColor=vec4(vColor,1.0);}');lineProgram=program('attribute vec3 aBase;attribute vec3 aDisp;uniform mat4 uMvp;uniform float uScale;void main(){vec3 p=aBase+aDisp*uScale;gl_Position=uMvp*vec4(p,1.0);}','precision mediump float;uniform vec4 uColor;void main(){gl_FragColor=uColor;}');baseBuf=buf(new Float32Array(DATA.base),gl.ARRAY_BUFFER);dispBuf=buf(new Float32Array(DATA.disp),gl.ARRAY_BUFFER);colorBuf=buf(new Float32Array(DATA.color),gl.ARRAY_BUFFER);triBuf=buf(new Uint16Array(DATA.tri),gl.ELEMENT_ARRAY_BUFFER);edgeBuf=buf(new Uint16Array(DATA.edge),gl.ELEMENT_ARRAY_BUFFER);obaseBuf=buf(new Float32Array(DATA.outlineBase),gl.ARRAY_BUFFER);odispBuf=buf(new Float32Array(DATA.outlineDisp),gl.ARRAY_BUFFER);oidxBuf=buf(new Uint16Array(DATA.outlineIdx),gl.ELEMENT_ARRAY_BUFFER);return true;}catch(error){console.warn('WebGL FEM renderer unavailable; using canvas fallback.',error);return false;}}
97
+ function mvp(){let m=ident();m=translate(m,0,0,-3.2);m=rotateX(m,rx);m=rotateZ(m,rz);m=scaleM(m,zoom);return mul(perspective(Math.PI/4,canvas.width/canvas.height,0.1,100),m)}
98
+ function drawWebgl(){resizeCanvas();if(!gl||gl.drawingBufferWidth<1||gl.drawingBufferHeight<1){drawCanvasFallback('Canvas fallback: WebGL context returned a zero-size drawing buffer.');return;}markRenderer('webgl','');gl.viewport(0,0,canvas.width,canvas.height);gl.clearColor(0.02,0.06,0.12,1);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);gl.enable(gl.DEPTH_TEST);const matrix=new Float32Array(mvp());gl.useProgram(triProgram);attr(triProgram,'aBase',baseBuf,3);attr(triProgram,'aDisp',dispBuf,3);attr(triProgram,'aColor',colorBuf,3);gl.uniformMatrix4fv(gl.getUniformLocation(triProgram,'uMvp'),false,matrix);gl.uniform1f(gl.getUniformLocation(triProgram,'uScale'),deform);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,triBuf);gl.drawElements(gl.TRIANGLES,DATA.tri.length,gl.UNSIGNED_SHORT,0);if(document.getElementById('wire').checked){gl.useProgram(lineProgram);attr(lineProgram,'aBase',baseBuf,3);attr(lineProgram,'aDisp',dispBuf,3);gl.uniformMatrix4fv(gl.getUniformLocation(lineProgram,'uMvp'),false,matrix);gl.uniform1f(gl.getUniformLocation(lineProgram,'uScale'),deform);gl.uniform4f(gl.getUniformLocation(lineProgram,'uColor'),0.82,0.9,1,0.42);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,edgeBuf);gl.drawElements(gl.LINES,DATA.edge.length,gl.UNSIGNED_SHORT,0);}if(document.getElementById('patch').checked){gl.useProgram(lineProgram);attr(lineProgram,'aBase',obaseBuf,3);attr(lineProgram,'aDisp',odispBuf,3);gl.uniformMatrix4fv(gl.getUniformLocation(lineProgram,'uMvp'),false,matrix);gl.uniform1f(gl.getUniformLocation(lineProgram,'uScale'),0);gl.uniform4f(gl.getUniformLocation(lineProgram,'uColor'),1,0.78,0.24,1);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,oidxBuf);gl.drawElements(gl.LINES,DATA.outlineIdx.length,gl.UNSIGNED_SHORT,0);}}
99
+ function colorAt(i){return [DATA.color[i*3]||0,DATA.color[i*3+1]||0,DATA.color[i*3+2]||0];}
100
+ function cssRgb(rgb,alpha){return 'rgba('+Math.round(rgb[0]*255)+','+Math.round(rgb[1]*255)+','+Math.round(rgb[2]*255)+','+alpha+')';}
101
+ function pointFrom(base,disp,i,scale){return [base[i*3]+(disp[i*3]||0)*scale,base[i*3+1]+(disp[i*3+1]||0)*scale,base[i*3+2]+(disp[i*3+2]||0)*scale];}
102
+ function projectPoint(p){const cz=Math.cos(rz),sz=Math.sin(rz),cx=Math.cos(rx),sx=Math.sin(rx);const x1=p[0]*cz-p[1]*sz,y1=p[0]*sz+p[1]*cz,z1=p[2];const y2=y1*cx-z1*sx;const fit=Math.min(canvas.width,canvas.height)*zoom*0.95;return [canvas.width/2+x1*fit,canvas.height*0.50-y2*fit];}
103
+ function drawEdge(ctx,base,disp,a,b,scale,color,width){const p1=projectPoint(pointFrom(base,disp,a,scale)),p2=projectPoint(pointFrom(base,disp,b,scale));ctx.strokeStyle=color;ctx.lineWidth=width;ctx.beginPath();ctx.moveTo(p1[0],p1[1]);ctx.lineTo(p2[0],p2[1]);ctx.stroke();}
104
+ function drawCanvasFallback(message){resizeCanvas();markRenderer('canvas2d-fallback',message||'Canvas fallback: WebGL unavailable in this browser.');let ctx=canvas.getContext('2d');if(!ctx){const replacement=document.createElement('canvas');replacement.id='glcanvas';replacement.setAttribute('aria-label','Canvas FEM settlement visualization fallback');canvas.replaceWith(replacement);canvas=replacement;bindCanvasEvents(canvas);resizeCanvas();ctx=canvas.getContext('2d');}if(!ctx){fallback.textContent='Canvas fallback could not be started in this browser.';return;}const w=canvas.width,h=canvas.height;const grad=ctx.createLinearGradient(0,0,0,h);grad.addColorStop(0,'#020617');grad.addColorStop(0.58,'#07111f');grad.addColorStop(1,'#0b1220');ctx.fillStyle=grad;ctx.fillRect(0,0,w,h);const glow=ctx.createRadialGradient(w*0.52,h*0.34,0,w*0.52,h*0.34,Math.min(w,h)*0.48);glow.addColorStop(0,'rgba(56,189,248,.16)');glow.addColorStop(1,'rgba(56,189,248,0)');ctx.fillStyle=glow;ctx.fillRect(0,0,w,h);for(let i=0;i<DATA.tri.length;i+=3){const a=DATA.tri[i],b=DATA.tri[i+1],c=DATA.tri[i+2];const pa=projectPoint(pointFrom(DATA.base,DATA.disp,a,deform)),pb=projectPoint(pointFrom(DATA.base,DATA.disp,b,deform)),pc=projectPoint(pointFrom(DATA.base,DATA.disp,c,deform));const ca=colorAt(a),cb=colorAt(b),cc=colorAt(c);ctx.fillStyle=cssRgb([(ca[0]+cb[0]+cc[0])/3,(ca[1]+cb[1]+cc[1])/3,(ca[2]+cb[2]+cc[2])/3],0.92);ctx.beginPath();ctx.moveTo(pa[0],pa[1]);ctx.lineTo(pb[0],pb[1]);ctx.lineTo(pc[0],pc[1]);ctx.closePath();ctx.fill();}if(document.getElementById('wire').checked){for(let i=0;i<DATA.edge.length;i+=2){drawEdge(ctx,DATA.base,DATA.disp,DATA.edge[i],DATA.edge[i+1],deform,'rgba(226,232,240,.32)',1);}}if(document.getElementById('patch').checked){for(let i=0;i<DATA.outlineIdx.length;i+=2){drawEdge(ctx,DATA.outlineBase,DATA.outlineDisp,DATA.outlineIdx[i],DATA.outlineIdx[i+1],0,'rgba(251,191,36,.95)',2);}}ctx.fillStyle='rgba(186,230,253,.9)';ctx.font='600 14px Inter, system-ui, sans-serif';ctx.fillText('3D FEM settlement surface',24,32);ctx.fillStyle='rgba(148,163,184,.9)';ctx.font='12px Inter, system-ui, sans-serif';ctx.fillText('Renderer: Canvas fallback; deformation scale '+deform+'x',24,52);}
105
+ const webglReady=initWebgl();
106
+ function draw(){if(webglReady){try{drawWebgl();return;}catch(error){console.warn('WebGL draw failed; using canvas fallback.',error);}}drawCanvasFallback('Canvas fallback: WebGL unavailable in this browser.');}
107
+ function updateScale(v){deform=Number(v);document.getElementById('scale').value=String(deform);document.getElementById('scaleLabel').textContent=String(deform)+'x';draw();}
108
+ function bindCanvasEvents(target){target.addEventListener('pointerdown',e=>{dragging=true;lx=e.clientX;ly=e.clientY;target.setPointerCapture(e.pointerId);});target.addEventListener('pointermove',e=>{if(!dragging)return;rz+=(e.clientX-lx)*0.008;rx+=(e.clientY-ly)*0.008;lx=e.clientX;ly=e.clientY;draw();});target.addEventListener('pointerup',()=>{dragging=false;});target.addEventListener('wheel',e=>{e.preventDefault();zoom*=e.deltaY>0?0.9:1.1;zoom=Math.max(0.025,Math.min(0.12,zoom));draw();},{passive:false});}
109
+ bindCanvasEvents(canvas);
110
+ document.getElementById('scale').addEventListener('input',e=>updateScale(e.target.value));
111
+ document.querySelectorAll('button[data-scale]').forEach(b=>b.addEventListener('click',()=>updateScale(b.dataset.scale)));
112
+ document.getElementById('reset').addEventListener('click',()=>{rx=-0.92;rz=-0.72;zoom=0.052;updateScale(120);});
113
+ document.getElementById('wire').addEventListener('change',draw);document.getElementById('patch').addEventListener('change',draw);window.addEventListener('resize',draw);
114
+ document.getElementById('stats').innerHTML='<span>Max settlement</span><span>'+MANIFEST.envelope.maxSettlementMm.toFixed(2)+' mm</span><span>Total load</span><span>'+MANIFEST.envelope.totalLoadKn.toFixed(0)+' kN</span><span>Reaction</span><span>'+MANIFEST.envelope.reactionKn.toFixed(0)+' kN</span><span>Balance</span><span>'+MANIFEST.envelope.reactionBalanceRatio.toFixed(3)+'</span><span>Mesh</span><span>'+MANIFEST.mesh.divisions.join(' x ')+' hex8</span><span>Nodes / elements</span><span>'+MANIFEST.mesh.nodes+' / '+MANIFEST.mesh.elements+'</span>';
115
+ requestAnimationFrame(draw);
116
+ </script>
117
+ </body>
118
+ </html>`;
119
+ }
120
+ //# sourceMappingURL=webgl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl.js","sourceRoot":"","sources":["../../src/fem/webgl.ts"],"names":[],"mappings":"AAEA,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAA2B;IAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QACzD,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;sBAC9B,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACvG,CAAC,CAAC,+EAA+E,CAAC;IACpF,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC;sBAC5C,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,cAAc,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnO,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnG,OAAO;;;;;SAKA,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA+BJ,KAAK;;;;;;;;;;gFAUiE,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,MAAM,CAAC,eAAe,QAAQ,CAAC,UAAU,CAAC,QAAQ,cAAc,QAAQ,CAAC,UAAU,CAAC,WAAW,wBAAwB,WAAW;;gDAExO,cAAc;gDACd,cAAc;;;;mBAI3C,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0Cf,CAAC;AACT,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './llm/index.js';
2
2
  export { sanitizeUpstreamError } from './llm/util.js';
3
3
  export * from './geo/index.js';
4
+ export * from './fem/index.js';
4
5
  export * from './config/index.js';
5
6
  export * from './meta/index.js';
6
7
  export * from './ingest/index.js';
@@ -23,7 +24,7 @@ export { toolRegistry, type ToolDefinition, type ToolResult, } from './agents/to
23
24
  export { analyzeCoreBox, classifyRMRFromImage, classifySoilFromDescription, interpretBoreholeLog, interpretBoreholeLogWithContext, mergeBoreholeLogPages, queryGBRDocument, interpretSensorImage, type ParseSafety, type ParseStatus, type CoreBoxAnalysisResult, type HybridRMRResult, type SoilClassificationFromTextResult, type BoreholeInterpretation, type BoreholeLayer, type BoreholeLocation, type BoreholeLogContext, type BoreholeLogPageResult, type SensorInterpretation, } from './vision/index.js';
24
25
  export { extractGeotechDocumentFactsFromText, interpretGeotechDocumentPage, type GeotechDocumentContext, type GeotechDocumentInsight, type GeotechDocumentClassification, type GeotechMaterialObservation, type GeotechParameterObservation, } from './vision/geotech-document.js';
25
26
  export { parseDocumentLayoutWithGlmOcr, supportsGlmOcrLayoutParsing, type GlmOcrLayoutElement, type GlmOcrLayoutPage, type GlmOcrLayoutResult, } from './vision/layout-ocr.js';
26
- export { generateReport, buildIngestDossier, buildArtifactDrivenReport, generateReportFromCaseFile, renderIngestDossierAsHtml, renderReportAsPdf, renderReportAsDocx, type GeneratedReport, type ReportSection, type BuildIngestDossierOptions, type CaseFileGeneratedReport, type CaseFileReportInput, type GenerateStoredCaseFileReportOptions, type IngestDossier, type IngestDossierApproval, type IngestDossierBadge, type IngestDossierFindingGroup, type IngestDossierMetric, type IngestDossierNarrativeSection, type IngestDossierPageCard, type IngestDossierSourceResult, type IngestDossierStoredReview, type IngestDossierTable, type IngestDossierTone, } from './report/index.js';
27
+ export { generateReport, buildIngestDossier, buildArtifactDrivenReport, generateReportFromCaseFile, buildIntegratedReviewModel, buildIntegratedSourcePagesFromEvidence, buildIntegratedSourcePagesFromLayout, buildIntegratedAgentReviewFromLiveSession, buildIntegratedAgentReviewFromProjectSession, renderIngestDossierAsHtml, renderReportAsPdf, renderReportAsDocx, type GeneratedReport, type ReportSection, type BuildIngestDossierOptions, type CaseFileGeneratedReport, type CaseFileReportInput, type GenerateStoredCaseFileReportOptions, type BuildIntegratedReviewModelOptions, type BuildIntegratedSourcePagesFromLayoutOptions, type IntegratedReviewAgentReview, type IntegratedReviewBorehole, type IntegratedReviewMaterialClass, type IntegratedReviewModel, type IntegratedReviewParameter, type IntegratedReviewPoint, type IntegratedReviewSourcePage, type IntegratedReviewSourceRegion, type IntegratedReviewSourceRegionLink, type IntegratedReviewSourceRegionType, type IntegratedReviewStratum, type IngestDossier, type IngestDossierApproval, type IngestDossierBadge, type IngestDossierFindingGroup, type IngestDossierMetric, type IngestDossierNarrativeSection, type IngestDossierPageCard, type IngestDossierSourceResult, type IngestDossierStoredReview, type IngestDossierTable, type IngestDossierTone, } from './report/index.js';
27
28
  export { exportGeoJSON, exportBoreholeGeoJSON, exportDXF, exportBoreholeProfileDXF, exportCSV, exportJSON, type GeoJSONFeatureInput, type DXFEntity, } from './export/index.js';
28
29
  export { InMemoryUsageStore, checkUsageAndAbuse, generateFingerprint, detectSuspiciousActivity, type UsageRecord, type UsageStore, type AbuseCheckResult, } from './llm/middleware/metering.js';
29
30
  export { FileUsageStore } from './llm/middleware/persistent-usage.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -4,6 +4,8 @@ export * from './llm/index.js';
4
4
  export { sanitizeUpstreamError } from './llm/util.js';
5
5
  // Geotechnical computation engines
6
6
  export * from './geo/index.js';
7
+ // Experimental finite-element previews
8
+ export * from './fem/index.js';
7
9
  // Configuration
8
10
  export * from './config/index.js';
9
11
  export * from './meta/index.js';
@@ -33,7 +35,7 @@ export { analyzeCoreBox, classifyRMRFromImage, classifySoilFromDescription, inte
33
35
  export { extractGeotechDocumentFactsFromText, interpretGeotechDocumentPage, } from './vision/geotech-document.js';
34
36
  export { parseDocumentLayoutWithGlmOcr, supportsGlmOcrLayoutParsing, } from './vision/layout-ocr.js';
35
37
  // Report generation
36
- export { generateReport, buildIngestDossier, buildArtifactDrivenReport, generateReportFromCaseFile, renderIngestDossierAsHtml, renderReportAsPdf, renderReportAsDocx, } from './report/index.js';
38
+ export { generateReport, buildIngestDossier, buildArtifactDrivenReport, generateReportFromCaseFile, buildIntegratedReviewModel, buildIntegratedSourcePagesFromEvidence, buildIntegratedSourcePagesFromLayout, buildIntegratedAgentReviewFromLiveSession, buildIntegratedAgentReviewFromProjectSession, renderIngestDossierAsHtml, renderReportAsPdf, renderReportAsDocx, } from './report/index.js';
37
39
  // Export formats
38
40
  export { exportGeoJSON, exportBoreholeGeoJSON, exportDXF, exportBoreholeProfileDXF, exportCSV, exportJSON, } from './export/index.js';
39
41
  // Metering & anti-abuse
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -501,20 +501,20 @@ export declare const DocumentEvidencePacketSchema: z.ZodObject<{
501
501
  sourcePages: z.ZodArray<z.ZodNumber, "many">;
502
502
  latencyMs: z.ZodOptional<z.ZodNumber>;
503
503
  }, "strip", z.ZodTypeAny, {
504
+ limitations: string[];
504
505
  interpretation: string[];
505
506
  sourcePages: number[];
506
507
  takeaways: string[];
507
508
  groundModel: string[];
508
509
  keyParameters: string[];
509
- limitations: string[];
510
510
  latencyMs?: number | undefined;
511
511
  }, {
512
+ limitations: string[];
512
513
  interpretation: string[];
513
514
  sourcePages: number[];
514
515
  takeaways: string[];
515
516
  groundModel: string[];
516
517
  keyParameters: string[];
517
- limitations: string[];
518
518
  latencyMs?: number | undefined;
519
519
  }>>;
520
520
  review: z.ZodObject<{
@@ -530,14 +530,14 @@ export declare const DocumentEvidencePacketSchema: z.ZodObject<{
530
530
  }, "strip", z.ZodTypeAny, {
531
531
  message: string;
532
532
  code: string;
533
- severity: "advisory" | "review" | "blocking";
533
+ severity: "review" | "advisory" | "blocking";
534
534
  scope: "document" | "page" | "material";
535
535
  pageNumber?: number | undefined;
536
536
  materialDescription?: string | undefined;
537
537
  }, {
538
538
  message: string;
539
539
  code: string;
540
- severity: "advisory" | "review" | "blocking";
540
+ severity: "review" | "advisory" | "blocking";
541
541
  scope: "document" | "page" | "material";
542
542
  pageNumber?: number | undefined;
543
543
  materialDescription?: string | undefined;
@@ -548,7 +548,7 @@ export declare const DocumentEvidencePacketSchema: z.ZodObject<{
548
548
  findings: {
549
549
  message: string;
550
550
  code: string;
551
- severity: "advisory" | "review" | "blocking";
551
+ severity: "review" | "advisory" | "blocking";
552
552
  scope: "document" | "page" | "material";
553
553
  pageNumber?: number | undefined;
554
554
  materialDescription?: string | undefined;
@@ -559,7 +559,7 @@ export declare const DocumentEvidencePacketSchema: z.ZodObject<{
559
559
  findings: {
560
560
  message: string;
561
561
  code: string;
562
- severity: "advisory" | "review" | "blocking";
562
+ severity: "review" | "advisory" | "blocking";
563
563
  scope: "document" | "page" | "material";
564
564
  pageNumber?: number | undefined;
565
565
  materialDescription?: string | undefined;
@@ -613,6 +613,18 @@ export declare const DocumentEvidencePacketSchema: z.ZodObject<{
613
613
  filePath?: string | undefined;
614
614
  pageRange?: [number, number] | undefined;
615
615
  };
616
+ review: {
617
+ warnings: string[];
618
+ reviewReasons: string[];
619
+ findings: {
620
+ message: string;
621
+ code: string;
622
+ severity: "review" | "advisory" | "blocking";
623
+ scope: "document" | "page" | "material";
624
+ pageNumber?: number | undefined;
625
+ materialDescription?: string | undefined;
626
+ }[];
627
+ };
616
628
  pages: {
617
629
  method: "none" | "native-pdf-text" | "layout-ocr" | "visual-reasoning" | "hybrid";
618
630
  confidence: number;
@@ -630,18 +642,6 @@ export declare const DocumentEvidencePacketSchema: z.ZodObject<{
630
642
  };
631
643
  cacheEntryId?: string | undefined;
632
644
  }[];
633
- review: {
634
- warnings: string[];
635
- reviewReasons: string[];
636
- findings: {
637
- message: string;
638
- code: string;
639
- severity: "advisory" | "review" | "blocking";
640
- scope: "document" | "page" | "material";
641
- pageNumber?: number | undefined;
642
- materialDescription?: string | undefined;
643
- }[];
644
- };
645
645
  document: {
646
646
  confidence: number;
647
647
  parseStatus: "partial" | "parsed" | "failed";
@@ -739,12 +739,12 @@ export declare const DocumentEvidencePacketSchema: z.ZodObject<{
739
739
  risks: string[];
740
740
  };
741
741
  synthesis: {
742
+ limitations: string[];
742
743
  interpretation: string[];
743
744
  sourcePages: number[];
744
745
  takeaways: string[];
745
746
  groundModel: string[];
746
747
  keyParameters: string[];
747
- limitations: string[];
748
748
  latencyMs?: number | undefined;
749
749
  } | null;
750
750
  traceability: {
@@ -771,6 +771,18 @@ export declare const DocumentEvidencePacketSchema: z.ZodObject<{
771
771
  filePath?: string | undefined;
772
772
  pageRange?: [number, number] | undefined;
773
773
  };
774
+ review: {
775
+ warnings: string[];
776
+ reviewReasons: string[];
777
+ findings: {
778
+ message: string;
779
+ code: string;
780
+ severity: "review" | "advisory" | "blocking";
781
+ scope: "document" | "page" | "material";
782
+ pageNumber?: number | undefined;
783
+ materialDescription?: string | undefined;
784
+ }[];
785
+ };
774
786
  pages: {
775
787
  method: "none" | "native-pdf-text" | "layout-ocr" | "visual-reasoning" | "hybrid";
776
788
  confidence: number;
@@ -788,18 +800,6 @@ export declare const DocumentEvidencePacketSchema: z.ZodObject<{
788
800
  };
789
801
  cacheEntryId?: string | undefined;
790
802
  }[];
791
- review: {
792
- warnings: string[];
793
- reviewReasons: string[];
794
- findings: {
795
- message: string;
796
- code: string;
797
- severity: "advisory" | "review" | "blocking";
798
- scope: "document" | "page" | "material";
799
- pageNumber?: number | undefined;
800
- materialDescription?: string | undefined;
801
- }[];
802
- };
803
803
  document: {
804
804
  confidence: number;
805
805
  parseStatus: "partial" | "parsed" | "failed";
@@ -897,12 +897,12 @@ export declare const DocumentEvidencePacketSchema: z.ZodObject<{
897
897
  risks: string[];
898
898
  };
899
899
  synthesis: {
900
+ limitations: string[];
900
901
  interpretation: string[];
901
902
  sourcePages: number[];
902
903
  takeaways: string[];
903
904
  groundModel: string[];
904
905
  keyParameters: string[];
905
- limitations: string[];
906
906
  latencyMs?: number | undefined;
907
907
  } | null;
908
908
  traceability: {
@@ -2,6 +2,7 @@ import type { LLMConfig } from '../llm/types.js';
2
2
  import { extractGeotechDocumentFactsFromText, interpretGeotechDocumentPage, type GeotechDocumentClassification, type GeotechDocumentInsight, type GeotechMaterialObservation, type GeotechParameterObservation, type ParseStatus } from '../vision/geotech-document.js';
3
3
  import { transcribeDocumentImageText } from '../vision/index.js';
4
4
  import { type DocumentTextHintSource } from '../vision/ocr.js';
5
+ import type { GlmOcrLayoutPage } from '../vision/layout-ocr.js';
5
6
  import type { PdfDocumentInspection, PdfPageClassification } from './pdf.js';
6
7
  import type { IngestSegmentationSummary } from './segmentation.js';
7
8
  import { type DocumentEvidencePacket } from './document-evidence-packet.js';
@@ -46,6 +47,7 @@ export interface GeotechDocumentPageAudit {
46
47
  materialCount: number;
47
48
  classificationCount: number;
48
49
  parameterCount: number;
50
+ layoutPages?: GlmOcrLayoutPage[];
49
51
  evidenceCache?: GeotechDocumentPageEvidenceCacheAudit;
50
52
  warnings: string[];
51
53
  }