@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.
- package/dist/evidence/evidence-ref.d.ts +8 -0
- package/dist/evidence/evidence-ref.d.ts.map +1 -1
- package/dist/evidence/evidence-ref.js.map +1 -1
- package/dist/evidence/index.d.ts +1 -1
- package/dist/evidence/index.d.ts.map +1 -1
- package/dist/evidence/index.js.map +1 -1
- package/dist/fem/demo.d.ts +4 -0
- package/dist/fem/demo.d.ts.map +1 -0
- package/dist/fem/demo.js +274 -0
- package/dist/fem/demo.js.map +1 -0
- package/dist/fem/index.d.ts +5 -0
- package/dist/fem/index.d.ts.map +1 -0
- package/dist/fem/index.js +5 -0
- package/dist/fem/index.js.map +1 -0
- package/dist/fem/types.d.ts +154 -0
- package/dist/fem/types.d.ts.map +1 -0
- package/dist/fem/types.js +2 -0
- package/dist/fem/types.js.map +1 -0
- package/dist/fem/validation.d.ts +4 -0
- package/dist/fem/validation.d.ts.map +1 -0
- package/dist/fem/validation.js +195 -0
- package/dist/fem/validation.js.map +1 -0
- package/dist/fem/webgl.d.ts +3 -0
- package/dist/fem/webgl.d.ts.map +1 -0
- package/dist/fem/webgl.js +120 -0
- package/dist/fem/webgl.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/ingest/document-evidence-packet.d.ts +32 -32
- package/dist/ingest/geotech-document.d.ts +2 -0
- package/dist/ingest/geotech-document.d.ts.map +1 -1
- package/dist/ingest/geotech-document.js +17 -2
- package/dist/ingest/geotech-document.js.map +1 -1
- package/dist/ingest/geotech-extract.d.ts +2 -0
- package/dist/ingest/geotech-extract.d.ts.map +1 -1
- package/dist/ingest/geotech-extract.js +12 -0
- package/dist/ingest/geotech-extract.js.map +1 -1
- package/dist/ingest/page-evidence-cache.d.ts +4 -1
- package/dist/ingest/page-evidence-cache.d.ts.map +1 -1
- package/dist/ingest/page-evidence-cache.js +86 -1
- package/dist/ingest/page-evidence-cache.js.map +1 -1
- package/dist/llm/index.d.ts +1 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +1 -0
- package/dist/llm/index.js.map +1 -1
- package/dist/meta/metadata.json +1 -1
- package/dist/report/html.d.ts.map +1 -1
- package/dist/report/html.js +596 -1309
- package/dist/report/html.js.map +1 -1
- package/dist/report/index.d.ts +1 -0
- package/dist/report/index.d.ts.map +1 -1
- package/dist/report/index.js +1 -0
- package/dist/report/index.js.map +1 -1
- package/dist/report/ingest-dossier.d.ts +5 -0
- package/dist/report/ingest-dossier.d.ts.map +1 -1
- package/dist/report/ingest-dossier.js +376 -2
- package/dist/report/ingest-dossier.js.map +1 -1
- package/dist/report/integrated-review-model.d.ts +147 -0
- package/dist/report/integrated-review-model.d.ts.map +1 -0
- package/dist/report/integrated-review-model.js +649 -0
- package/dist/report/integrated-review-model.js.map +1 -0
- 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 @@
|
|
|
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('&', '&')
|
|
4
|
+
.replaceAll('<', '<')
|
|
5
|
+
.replaceAll('>', '>')
|
|
6
|
+
.replaceAll('"', '"')
|
|
7
|
+
.replaceAll("'", ''');
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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":"AAAA,qBAAqB;AACrB,cAAc,gBAAgB,CAAC;AAE/B,sBAAsB;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,mCAAmC;AACnC,cAAc,gBAAgB,CAAC;AAE/B,gBAAgB;AAChB,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAEhC,4BAA4B;AAC5B,cAAc,mBAAmB,CAAC;AAElC,yBAAyB;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AAEpC,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAK3B,MAAM,sBAAsB,CAAC;AAE9B,6BAA6B;AAC7B,OAAO,EACL,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EACpE,cAAc,EAAE,mBAAmB,EAAE,OAAO,EAAE,oBAAoB,EAClE,gBAAgB,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAClE,eAAe,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,sBAAsB,GAIxF,MAAM,oBAAoB,CAAC;AAE5B,uCAAuC;AACvC,OAAO,EAAE,iBAAiB,EAAiB,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EACL,QAAQ,EACR,iBAAiB,GAIlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,QAAQ,GAIT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,mCAAmC,GAOpC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,GAI7B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,uBAAuB,GASxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,EAC9B,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,GAGb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EACpB,+BAA+B,EAC/B,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,GAYrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mCAAmC,EACnC,4BAA4B,GAM7B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,GAI5B,MAAM,wBAAwB,CAAC;AAEhC,oBAAoB;AACpB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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
|
}
|