@geotechcli/core 0.4.26 → 0.4.28

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 (57) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/ingest/job-store.d.ts.map +1 -1
  6. package/dist/ingest/job-store.js +15 -5
  7. package/dist/ingest/job-store.js.map +1 -1
  8. package/dist/ingest/job-worker.d.ts +2 -1
  9. package/dist/ingest/job-worker.d.ts.map +1 -1
  10. package/dist/ingest/job-worker.js +186 -32
  11. package/dist/ingest/job-worker.js.map +1 -1
  12. package/dist/meta/metadata.json +1 -1
  13. package/dist/tabular/csv.d.ts +17 -0
  14. package/dist/tabular/csv.d.ts.map +1 -0
  15. package/dist/tabular/csv.js +123 -0
  16. package/dist/tabular/csv.js.map +1 -0
  17. package/dist/tabular/index.d.ts +4 -0
  18. package/dist/tabular/index.d.ts.map +1 -0
  19. package/dist/tabular/index.js +4 -0
  20. package/dist/tabular/index.js.map +1 -0
  21. package/dist/tabular/schema-inference.d.ts +45 -0
  22. package/dist/tabular/schema-inference.d.ts.map +1 -0
  23. package/dist/tabular/schema-inference.js +272 -0
  24. package/dist/tabular/schema-inference.js.map +1 -0
  25. package/dist/tabular/xlsx.d.ts +15 -0
  26. package/dist/tabular/xlsx.d.ts.map +1 -0
  27. package/dist/tabular/xlsx.js +190 -0
  28. package/dist/tabular/xlsx.js.map +1 -0
  29. package/dist/vision/geotech-document.d.ts +4 -0
  30. package/dist/vision/geotech-document.d.ts.map +1 -1
  31. package/dist/vision/geotech-document.js +38 -11
  32. package/dist/vision/geotech-document.js.map +1 -1
  33. package/dist/vision/ocr.d.ts +1 -0
  34. package/dist/vision/ocr.d.ts.map +1 -1
  35. package/dist/vision/ocr.js +5 -1
  36. package/dist/vision/ocr.js.map +1 -1
  37. package/dist/workspace/classifier.d.ts +7 -0
  38. package/dist/workspace/classifier.d.ts.map +1 -0
  39. package/dist/workspace/classifier.js +186 -0
  40. package/dist/workspace/classifier.js.map +1 -0
  41. package/dist/workspace/dossier.d.ts +3 -0
  42. package/dist/workspace/dossier.d.ts.map +1 -0
  43. package/dist/workspace/dossier.js +266 -0
  44. package/dist/workspace/dossier.js.map +1 -0
  45. package/dist/workspace/index.d.ts +5 -0
  46. package/dist/workspace/index.d.ts.map +1 -0
  47. package/dist/workspace/index.js +5 -0
  48. package/dist/workspace/index.js.map +1 -0
  49. package/dist/workspace/manifest.d.ts +58 -0
  50. package/dist/workspace/manifest.d.ts.map +1 -0
  51. package/dist/workspace/manifest.js +7 -0
  52. package/dist/workspace/manifest.js.map +1 -0
  53. package/dist/workspace/scanner.d.ts +3 -0
  54. package/dist/workspace/scanner.d.ts.map +1 -0
  55. package/dist/workspace/scanner.js +245 -0
  56. package/dist/workspace/scanner.js.map +1 -0
  57. package/package.json +1 -1
@@ -0,0 +1,266 @@
1
+ function escapeHtml(value) {
2
+ return String(value ?? '')
3
+ .replace(/&/g, '&')
4
+ .replace(/</g, '&lt;')
5
+ .replace(/>/g, '&gt;')
6
+ .replace(/"/g, '&quot;')
7
+ .replace(/'/g, '&#39;');
8
+ }
9
+ function formatBytes(bytes) {
10
+ if (bytes < 1024)
11
+ return `${bytes} B`;
12
+ if (bytes < 1024 * 1024)
13
+ return `${(bytes / 1024).toFixed(1)} KB`;
14
+ return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
15
+ }
16
+ function percent(confidence) {
17
+ return `${Math.round(confidence * 100)}%`;
18
+ }
19
+ function renderMetric(label, value) {
20
+ return `<div class="metric"><span>${escapeHtml(label)}</span><strong>${escapeHtml(value)}</strong></div>`;
21
+ }
22
+ function renderFileRows(files) {
23
+ return files.map((file) => {
24
+ const schema = file.schemas?.[0];
25
+ const schemaText = schema
26
+ ? `${schema.datasetType}${schema.sheetName ? ` / ${schema.sheetName}` : ''}`
27
+ : file.classification.datasetType;
28
+ return `<tr>
29
+ <td><code>${escapeHtml(file.path)}</code></td>
30
+ <td>${escapeHtml(file.classification.kind)}</td>
31
+ <td>${escapeHtml(schemaText)}</td>
32
+ <td>${escapeHtml(file.classification.branches.join(', ') || '-')}</td>
33
+ <td>${escapeHtml(percent(file.classification.confidence))}</td>
34
+ <td>${escapeHtml(formatBytes(file.sizeBytes))}</td>
35
+ </tr>`;
36
+ }).join('\n');
37
+ }
38
+ function renderSchemaRows(files) {
39
+ const rows = files.flatMap((file) => (file.schemas ?? []).map((schema) => ({
40
+ file,
41
+ schema,
42
+ })));
43
+ if (rows.length === 0) {
44
+ return '<p class="empty">No tabular schemas were sampled in this workspace.</p>';
45
+ }
46
+ return `<table>
47
+ <thead>
48
+ <tr>
49
+ <th>Source</th>
50
+ <th>Schema</th>
51
+ <th>Rows</th>
52
+ <th>Detected Columns</th>
53
+ </tr>
54
+ </thead>
55
+ <tbody>
56
+ ${rows.map(({ file, schema }) => {
57
+ const detected = [
58
+ ...schema.detected.depthColumns.map((column) => `depth:${column}`),
59
+ ...schema.detected.coordinateColumns.map((column) => `coord:${column}`),
60
+ ...schema.detected.sptColumns.map((column) => `SPT:${column}`),
61
+ ...schema.detected.cptColumns.map((column) => `CPT:${column}`),
62
+ ...schema.detected.labColumns.map((column) => `lab:${column}`),
63
+ ...schema.detected.monitoringColumns.map((column) => `monitor:${column}`),
64
+ ].slice(0, 8);
65
+ return `<tr>
66
+ <td><code>${escapeHtml(file.path)}${schema.sheetName ? `#${escapeHtml(schema.sheetName)}` : ''}</code></td>
67
+ <td>${escapeHtml(schema.datasetType)} (${escapeHtml(percent(schema.confidence))})</td>
68
+ <td>${escapeHtml(schema.sampledRowCount)}</td>
69
+ <td>${escapeHtml(detected.join(', ') || 'generic numeric/text table')}</td>
70
+ </tr>`;
71
+ }).join('\n')}
72
+ </tbody>
73
+ </table>`;
74
+ }
75
+ export function renderWorkspaceManifestAsHtml(manifest) {
76
+ const title = 'geotechCLI Workspace Dossier';
77
+ const fileRows = renderFileRows(manifest.files);
78
+ const warnings = manifest.warnings.slice(0, 20);
79
+ return `<!doctype html>
80
+ <html lang="en">
81
+ <head>
82
+ <meta charset="utf-8" />
83
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
84
+ <title>${escapeHtml(title)}</title>
85
+ <style>
86
+ :root {
87
+ color-scheme: light;
88
+ --ink: #17201d;
89
+ --muted: #64706b;
90
+ --line: #d8dfdc;
91
+ --soft: #f3f6f4;
92
+ --accent: #006b5a;
93
+ --warning: #8a4b00;
94
+ }
95
+ * { box-sizing: border-box; }
96
+ body {
97
+ margin: 0;
98
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
99
+ color: var(--ink);
100
+ background: #fbfcfb;
101
+ line-height: 1.5;
102
+ }
103
+ main {
104
+ max-width: 1180px;
105
+ margin: 0 auto;
106
+ padding: 40px 22px 64px;
107
+ }
108
+ header {
109
+ border-bottom: 1px solid var(--line);
110
+ padding-bottom: 26px;
111
+ margin-bottom: 28px;
112
+ }
113
+ .eyebrow {
114
+ color: var(--accent);
115
+ font-size: 12px;
116
+ font-weight: 700;
117
+ letter-spacing: .12em;
118
+ text-transform: uppercase;
119
+ }
120
+ h1 {
121
+ margin: 6px 0 8px;
122
+ font-size: clamp(30px, 5vw, 56px);
123
+ line-height: 1.02;
124
+ letter-spacing: 0;
125
+ }
126
+ .subhead {
127
+ max-width: 840px;
128
+ color: var(--muted);
129
+ font-size: 17px;
130
+ }
131
+ section {
132
+ border-top: 1px solid var(--line);
133
+ padding: 28px 0;
134
+ }
135
+ h2 {
136
+ margin: 0 0 14px;
137
+ font-size: 20px;
138
+ letter-spacing: 0;
139
+ }
140
+ .metrics {
141
+ display: grid;
142
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
143
+ gap: 1px;
144
+ background: var(--line);
145
+ border: 1px solid var(--line);
146
+ }
147
+ .metric {
148
+ background: white;
149
+ padding: 16px;
150
+ min-height: 86px;
151
+ }
152
+ .metric span {
153
+ display: block;
154
+ color: var(--muted);
155
+ font-size: 12px;
156
+ }
157
+ .metric strong {
158
+ display: block;
159
+ margin-top: 8px;
160
+ font-size: 28px;
161
+ line-height: 1.1;
162
+ }
163
+ table {
164
+ width: 100%;
165
+ border-collapse: collapse;
166
+ background: white;
167
+ border: 1px solid var(--line);
168
+ overflow-wrap: anywhere;
169
+ }
170
+ th, td {
171
+ padding: 11px 12px;
172
+ border-bottom: 1px solid var(--line);
173
+ text-align: left;
174
+ vertical-align: top;
175
+ font-size: 13px;
176
+ }
177
+ th {
178
+ color: var(--muted);
179
+ background: var(--soft);
180
+ font-size: 12px;
181
+ font-weight: 700;
182
+ }
183
+ code {
184
+ font-family: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", monospace;
185
+ color: #183d36;
186
+ }
187
+ .list {
188
+ margin: 0;
189
+ padding-left: 18px;
190
+ color: var(--ink);
191
+ }
192
+ .list li { margin: 8px 0; }
193
+ .warning { color: var(--warning); }
194
+ .empty { color: var(--muted); }
195
+ @media (max-width: 720px) {
196
+ main { padding: 26px 14px 46px; }
197
+ table { display: block; overflow-x: auto; }
198
+ th, td { white-space: nowrap; }
199
+ }
200
+ </style>
201
+ </head>
202
+ <body>
203
+ <main>
204
+ <header>
205
+ <div class="eyebrow">geotechCLI analyze</div>
206
+ <h1>Workspace Dossier</h1>
207
+ <p class="subhead">${escapeHtml(manifest.rootPath)}</p>
208
+ </header>
209
+
210
+ <section>
211
+ <h2>Overview</h2>
212
+ <div class="metrics">
213
+ ${renderMetric('Files', manifest.summary.totalFiles)}
214
+ ${renderMetric('Supported', manifest.summary.supportedFiles)}
215
+ ${renderMetric('Tabular', manifest.summary.tabularFiles)}
216
+ ${renderMetric('PDFs', manifest.summary.pdfFiles)}
217
+ ${renderMetric('Branches', manifest.summary.branches.length || '-')}
218
+ ${renderMetric('Skipped', manifest.summary.skippedFiles)}
219
+ </div>
220
+ </section>
221
+
222
+ <section>
223
+ <h2>Detected Branches</h2>
224
+ <p>${escapeHtml(manifest.summary.branches.join(', ') || 'No branch-specific evidence detected yet.')}</p>
225
+ </section>
226
+
227
+ <section>
228
+ <h2>Recommended Next Steps</h2>
229
+ <ul class="list">
230
+ ${manifest.summary.recommendations.map((item) => `<li>${escapeHtml(item)}</li>`).join('\n')}
231
+ </ul>
232
+ </section>
233
+
234
+ <section>
235
+ <h2>File Manifest</h2>
236
+ <table>
237
+ <thead>
238
+ <tr>
239
+ <th>File</th>
240
+ <th>Kind</th>
241
+ <th>Dataset</th>
242
+ <th>Branches</th>
243
+ <th>Confidence</th>
244
+ <th>Size</th>
245
+ </tr>
246
+ </thead>
247
+ <tbody>${fileRows}</tbody>
248
+ </table>
249
+ </section>
250
+
251
+ <section>
252
+ <h2>Tabular Schemas</h2>
253
+ ${renderSchemaRows(manifest.files)}
254
+ </section>
255
+
256
+ <section>
257
+ <h2>Warnings</h2>
258
+ ${warnings.length > 0
259
+ ? `<ul class="list warning">${warnings.map((warning) => `<li>${escapeHtml(warning)}</li>`).join('\n')}</ul>`
260
+ : '<p class="empty">No manifest warnings.</p>'}
261
+ </section>
262
+ </main>
263
+ </body>
264
+ </html>`;
265
+ }
266
+ //# sourceMappingURL=dossier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dossier.js","sourceRoot":"","sources":["../../src/workspace/dossier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { analyzeWorkspace, } from './scanner.js';
2
+ export { classifyWorkspaceFile, } from './classifier.js';
3
+ export { renderWorkspaceManifestAsHtml, } from './dossier.js';
4
+ export { DEFAULT_ANALYZE_WORKSPACE_OPTIONS, type AnalyzeWorkspaceOptions, type ProjectManifest, type ProjectManifestSummary, type WorkspaceDatasetType, type WorkspaceFileClassification, type WorkspaceFileEntry, type WorkspaceFileKind, } from './manifest.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,6BAA6B,GAC9B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iCAAiC,EACjC,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { analyzeWorkspace, } from './scanner.js';
2
+ export { classifyWorkspaceFile, } from './classifier.js';
3
+ export { renderWorkspaceManifestAsHtml, } from './dossier.js';
4
+ export { DEFAULT_ANALYZE_WORKSPACE_OPTIONS, } from './manifest.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,6BAA6B,GAC9B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iCAAiC,GAQlC,MAAM,eAAe,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { TabularSchemaInference } from '../tabular/index.js';
2
+ export type WorkspaceFileKind = 'pdf' | 'csv' | 'xlsx' | 'ags' | 'json' | 'image' | 'gis' | 'cad' | 'office' | 'text' | 'unknown';
3
+ export type WorkspaceDatasetType = 'geotechnical-report' | 'borehole-log' | 'borehole-table' | 'cpt-profile' | 'spt-profile' | 'lab-test-summary' | 'coordinate-table' | 'monitoring-time-series' | 'pile-load-test' | 'signal-record' | 'ags-ground-investigation' | 'map-or-gis' | 'calculation-result' | 'image-evidence' | 'unknown';
4
+ export interface WorkspaceFileClassification {
5
+ kind: WorkspaceFileKind;
6
+ datasetType: WorkspaceDatasetType;
7
+ branches: string[];
8
+ confidence: number;
9
+ signals: string[];
10
+ warnings: string[];
11
+ }
12
+ export interface WorkspaceFileEntry {
13
+ path: string;
14
+ absolutePath: string;
15
+ name: string;
16
+ extension: string;
17
+ sizeBytes: number;
18
+ modifiedAt: string;
19
+ classification: WorkspaceFileClassification;
20
+ schemas?: TabularSchemaInference[];
21
+ }
22
+ export interface ProjectManifestSummary {
23
+ totalFiles: number;
24
+ supportedFiles: number;
25
+ tabularFiles: number;
26
+ pdfFiles: number;
27
+ imageFiles: number;
28
+ skippedFiles: number;
29
+ kinds: Record<string, number>;
30
+ datasetTypes: Record<string, number>;
31
+ branches: string[];
32
+ recommendations: string[];
33
+ }
34
+ export interface ProjectManifest {
35
+ schemaVersion: 'workspace-manifest.v1';
36
+ generatedAt: string;
37
+ rootPath: string;
38
+ requestedBranch?: string;
39
+ requestedStandard?: string;
40
+ files: WorkspaceFileEntry[];
41
+ summary: ProjectManifestSummary;
42
+ warnings: string[];
43
+ }
44
+ export interface AnalyzeWorkspaceOptions {
45
+ maxDepth?: number;
46
+ maxFiles?: number;
47
+ maxSampleBytes?: number;
48
+ maxRows?: number;
49
+ branch?: string;
50
+ standard?: string;
51
+ }
52
+ export declare const DEFAULT_ANALYZE_WORKSPACE_OPTIONS: {
53
+ readonly maxDepth: 5;
54
+ readonly maxFiles: 600;
55
+ readonly maxSampleBytes: 2500000;
56
+ readonly maxRows: 200;
57
+ };
58
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/workspace/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,MAAM,iBAAiB,GACzB,KAAK,GACL,KAAK,GACL,MAAM,GACN,KAAK,GACL,MAAM,GACN,OAAO,GACP,KAAK,GACL,KAAK,GACL,QAAQ,GACR,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,MAAM,oBAAoB,GAC5B,qBAAqB,GACrB,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,kBAAkB,GAClB,kBAAkB,GAClB,wBAAwB,GACxB,gBAAgB,GAChB,eAAe,GACf,0BAA0B,GAC1B,YAAY,GACZ,oBAAoB,GACpB,gBAAgB,GAChB,SAAS,CAAC;AAEd,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,iBAAiB,CAAC;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,2BAA2B,CAAC;IAC5C,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,uBAAuB,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,OAAO,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,iCAAiC;;;;;CAKpC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const DEFAULT_ANALYZE_WORKSPACE_OPTIONS = {
2
+ maxDepth: 5,
3
+ maxFiles: 600,
4
+ maxSampleBytes: 2_500_000,
5
+ maxRows: 200,
6
+ };
7
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/workspace/manifest.ts"],"names":[],"mappings":"AAqFA,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,GAAG;IACb,cAAc,EAAE,SAAS;IACzB,OAAO,EAAE,GAAG;CACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type AnalyzeWorkspaceOptions, type ProjectManifest } from './manifest.js';
2
+ export declare function analyzeWorkspace(workspacePath: string, options?: AnalyzeWorkspaceOptions): Promise<ProjectManifest>;
3
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/workspace/scanner.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EAErB,MAAM,eAAe,CAAC;AAoMvB,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,eAAe,CAAC,CAoF1B"}
@@ -0,0 +1,245 @@
1
+ import { readdir, readFile, stat } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { basename, extname, resolve, relative, join } from 'node:path';
4
+ import { classifyWorkspaceFile } from './classifier.js';
5
+ import { DEFAULT_ANALYZE_WORKSPACE_OPTIONS, } from './manifest.js';
6
+ import { inferTabularSchema, parseDelimitedFile, parseXlsxFile, } from '../tabular/index.js';
7
+ const IGNORED_DIRECTORIES = new Set([
8
+ '.git',
9
+ '.hg',
10
+ '.svn',
11
+ '.turbo',
12
+ '.next',
13
+ '.open-next',
14
+ 'node_modules',
15
+ 'dist',
16
+ 'build',
17
+ 'coverage',
18
+ ]);
19
+ const IGNORED_FILES = new Set([
20
+ '.env',
21
+ '.env.local',
22
+ '.env.production',
23
+ '.env.development',
24
+ 'package-lock.json',
25
+ 'pnpm-lock.yaml',
26
+ 'yarn.lock',
27
+ ]);
28
+ function toPosixRelative(rootPath, absolutePath) {
29
+ const rel = relative(rootPath, absolutePath).replace(/\\/g, '/');
30
+ return rel || basename(absolutePath);
31
+ }
32
+ function shouldIgnoreEntry(name) {
33
+ if (IGNORED_FILES.has(name))
34
+ return true;
35
+ if (name.startsWith('.') && name !== '.geotech')
36
+ return true;
37
+ return false;
38
+ }
39
+ function incrementCounter(counter, key) {
40
+ counter[key] = (counter[key] ?? 0) + 1;
41
+ }
42
+ function unique(values) {
43
+ return [...new Set(values)].filter(Boolean).sort();
44
+ }
45
+ async function detectAgsSignature(filePath, maxSampleBytes) {
46
+ const sample = await readFile(filePath, { encoding: 'utf-8' }).catch(() => '');
47
+ const head = sample.slice(0, maxSampleBytes).toUpperCase();
48
+ return /\bGROUP\b/.test(head) && /\bHEADING\b/.test(head) && /\bDATA\b/.test(head);
49
+ }
50
+ async function inferFileSchemas(filePath, relativePath, extension, sizeBytes, options, warnings) {
51
+ if (sizeBytes > options.maxSampleBytes) {
52
+ if (['.csv', '.tsv', '.xlsx'].includes(extension)) {
53
+ warnings.push(`${relativePath}: skipped schema sampling because file is larger than ${Math.round(options.maxSampleBytes / 1024 / 1024)} MB.`);
54
+ }
55
+ return undefined;
56
+ }
57
+ try {
58
+ if (extension === '.csv' || extension === '.tsv') {
59
+ const parsed = await parseDelimitedFile(filePath, {
60
+ delimiter: extension === '.tsv' ? '\t' : undefined,
61
+ maxRows: options.maxRows,
62
+ });
63
+ return [
64
+ inferTabularSchema({
65
+ rows: parsed.rows,
66
+ rowCount: parsed.totalRowsSampled,
67
+ sourceName: relativePath,
68
+ warnings: parsed.warnings,
69
+ }),
70
+ ];
71
+ }
72
+ if (extension === '.xlsx') {
73
+ const workbook = await parseXlsxFile(filePath, { maxRows: options.maxRows });
74
+ warnings.push(...workbook.warnings.map((warning) => `${relativePath}: ${warning}`));
75
+ return workbook.sheets.map((sheet) => inferTabularSchema({
76
+ rows: sheet.rows,
77
+ rowCount: sheet.totalRowsSampled,
78
+ sourceName: relativePath,
79
+ sheetName: sheet.name,
80
+ warnings: sheet.warnings,
81
+ }));
82
+ }
83
+ }
84
+ catch (error) {
85
+ warnings.push(`${relativePath}: schema sampling failed (${error instanceof Error ? error.message : String(error)}).`);
86
+ }
87
+ return undefined;
88
+ }
89
+ async function collectFiles(rootPath, options) {
90
+ const files = [];
91
+ let skipped = 0;
92
+ const warnings = [];
93
+ async function scanDirectory(dirPath, depth) {
94
+ if (files.length >= options.maxFiles)
95
+ return;
96
+ if (depth > options.maxDepth) {
97
+ skipped += 1;
98
+ return;
99
+ }
100
+ let entries;
101
+ try {
102
+ entries = await readdir(dirPath, { withFileTypes: true });
103
+ }
104
+ catch (error) {
105
+ warnings.push(`${toPosixRelative(rootPath, dirPath)}: cannot read directory (${error instanceof Error ? error.message : String(error)}).`);
106
+ return;
107
+ }
108
+ for (const entry of entries) {
109
+ if (files.length >= options.maxFiles)
110
+ break;
111
+ if (shouldIgnoreEntry(entry.name)) {
112
+ skipped += 1;
113
+ continue;
114
+ }
115
+ const absolutePath = join(dirPath, entry.name);
116
+ if (entry.isDirectory()) {
117
+ if (IGNORED_DIRECTORIES.has(entry.name)) {
118
+ skipped += 1;
119
+ continue;
120
+ }
121
+ await scanDirectory(absolutePath, depth + 1);
122
+ continue;
123
+ }
124
+ if (entry.isFile()) {
125
+ files.push(absolutePath);
126
+ }
127
+ }
128
+ }
129
+ await scanDirectory(rootPath, 0);
130
+ if (files.length >= options.maxFiles) {
131
+ warnings.push(`Stopped after ${options.maxFiles} files. Increase --max-files for a broader scan.`);
132
+ }
133
+ return { files, skipped, warnings };
134
+ }
135
+ function buildRecommendations(manifest, summary) {
136
+ const recommendations = [];
137
+ const datasetTypes = summary.datasetTypes;
138
+ if (summary.totalFiles === 0) {
139
+ return ['No analyzable files were found in this workspace. Add PDFs, CSV/XLSX tables, AGS, images, or JSON outputs.'];
140
+ }
141
+ if ((datasetTypes['coordinate-table'] ?? 0) > 0) {
142
+ recommendations.push('Coordinate tables detected. Next: build borehole/project map once GroundModel is enabled.');
143
+ }
144
+ if ((datasetTypes['spt-profile'] ?? 0) > 0 || (datasetTypes['cpt-profile'] ?? 0) > 0) {
145
+ recommendations.push('SPT/CPT profiles detected. Next: foundation screening and liquefaction workflows can consume these tables.');
146
+ }
147
+ if ((datasetTypes['lab-test-summary'] ?? 0) > 0) {
148
+ recommendations.push('Lab-test tables detected. Next: bind Atterberg, gradation, and density evidence into the GroundModel.');
149
+ }
150
+ if ((datasetTypes['monitoring-time-series'] ?? 0) > 0 || (datasetTypes['signal-record'] ?? 0) > 0) {
151
+ recommendations.push('Monitoring/signal data detected. Next: run signal analytics for trends, thresholds, and anomalies.');
152
+ }
153
+ if ((summary.kinds.pdf ?? 0) > 0) {
154
+ recommendations.push('PDF reports/logs detected. Use geotech ingest for structured extraction; future analyze releases will add page preprocessing and caching.');
155
+ }
156
+ if (manifest.requestedBranch && !summary.branches.includes(manifest.requestedBranch)) {
157
+ recommendations.push(`Requested branch "${manifest.requestedBranch}" was not strongly detected from file names or schemas.`);
158
+ }
159
+ if (manifest.requestedStandard) {
160
+ recommendations.push(`Standard profile "${manifest.requestedStandard}" recorded for downstream calculation/verifier stages.`);
161
+ }
162
+ if (recommendations.length === 0) {
163
+ recommendations.push('Workspace manifest is ready. Add branch-specific CSV/XLSX schemas or ingest PDFs to unlock GroundModel construction.');
164
+ }
165
+ return recommendations;
166
+ }
167
+ export async function analyzeWorkspace(workspacePath, options = {}) {
168
+ const rootPath = resolve(workspacePath);
169
+ const rootStats = await stat(rootPath).catch(() => null);
170
+ if (!rootStats || !rootStats.isDirectory()) {
171
+ throw new Error(`Workspace directory not found: ${workspacePath}`);
172
+ }
173
+ const resolvedOptions = {
174
+ maxDepth: options.maxDepth ?? DEFAULT_ANALYZE_WORKSPACE_OPTIONS.maxDepth,
175
+ maxFiles: options.maxFiles ?? DEFAULT_ANALYZE_WORKSPACE_OPTIONS.maxFiles,
176
+ maxSampleBytes: options.maxSampleBytes ?? DEFAULT_ANALYZE_WORKSPACE_OPTIONS.maxSampleBytes,
177
+ maxRows: options.maxRows ?? DEFAULT_ANALYZE_WORKSPACE_OPTIONS.maxRows,
178
+ };
179
+ const collection = await collectFiles(rootPath, resolvedOptions);
180
+ const warnings = [...collection.warnings];
181
+ const files = [];
182
+ for (const absolutePath of collection.files) {
183
+ if (!existsSync(absolutePath))
184
+ continue;
185
+ const stats = await stat(absolutePath).catch(() => null);
186
+ if (!stats?.isFile())
187
+ continue;
188
+ const extension = extname(absolutePath).toLowerCase();
189
+ const relativePath = toPosixRelative(rootPath, absolutePath);
190
+ const schemas = await inferFileSchemas(absolutePath, relativePath, extension, stats.size, resolvedOptions, warnings);
191
+ const agsSignature = extension === '.ags'
192
+ ? await detectAgsSignature(absolutePath, Math.min(resolvedOptions.maxSampleBytes, 120_000))
193
+ : false;
194
+ const classification = classifyWorkspaceFile(relativePath, { schemas, agsSignature });
195
+ files.push({
196
+ path: relativePath,
197
+ absolutePath,
198
+ name: basename(absolutePath),
199
+ extension,
200
+ sizeBytes: stats.size,
201
+ modifiedAt: stats.mtime.toISOString(),
202
+ classification,
203
+ schemas,
204
+ });
205
+ }
206
+ const kinds = {};
207
+ const datasetTypes = {};
208
+ const branchSet = new Set();
209
+ for (const file of files) {
210
+ incrementCounter(kinds, file.classification.kind);
211
+ incrementCounter(datasetTypes, file.classification.datasetType);
212
+ file.classification.branches.forEach((branch) => branchSet.add(branch));
213
+ warnings.push(...file.classification.warnings.map((warning) => `${file.path}: ${warning}`));
214
+ }
215
+ const manifestBase = {
216
+ schemaVersion: 'workspace-manifest.v1',
217
+ generatedAt: new Date().toISOString(),
218
+ rootPath,
219
+ requestedBranch: options.branch,
220
+ requestedStandard: options.standard,
221
+ files: files.sort((left, right) => left.path.localeCompare(right.path)),
222
+ warnings: unique(warnings),
223
+ };
224
+ const summaryWithoutRecommendations = {
225
+ totalFiles: files.length,
226
+ supportedFiles: files.filter((file) => file.classification.kind !== 'unknown').length,
227
+ tabularFiles: files.filter((file) => ['csv', 'xlsx'].includes(file.classification.kind)).length,
228
+ pdfFiles: files.filter((file) => file.classification.kind === 'pdf').length,
229
+ imageFiles: files.filter((file) => file.classification.kind === 'image').length,
230
+ skippedFiles: collection.skipped,
231
+ kinds,
232
+ datasetTypes,
233
+ branches: unique([...branchSet]),
234
+ recommendations: [],
235
+ };
236
+ const recommendations = buildRecommendations(manifestBase, summaryWithoutRecommendations);
237
+ return {
238
+ ...manifestBase,
239
+ summary: {
240
+ ...summaryWithoutRecommendations,
241
+ recommendations,
242
+ },
243
+ };
244
+ }
245
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/workspace/scanner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geotechcli/core",
3
- "version": "0.4.26",
3
+ "version": "0.4.28",
4
4
  "description": "Shared computation and LLM engine for geotechCLI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",