@geotechcli/core 0.2.0 → 0.4.0

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 (83) hide show
  1. package/dist/agents/brain.d.ts +1 -0
  2. package/dist/agents/brain.d.ts.map +1 -1
  3. package/dist/agents/brain.js +39 -38
  4. package/dist/agents/brain.js.map +1 -1
  5. package/dist/agents/bridge-tools.js +15 -3
  6. package/dist/agents/bridge-tools.js.map +1 -1
  7. package/dist/agents/case-file.d.ts +52 -0
  8. package/dist/agents/case-file.d.ts.map +1 -0
  9. package/dist/agents/case-file.js +657 -0
  10. package/dist/agents/case-file.js.map +1 -0
  11. package/dist/agents/contracts.d.ts +232 -0
  12. package/dist/agents/contracts.d.ts.map +1 -0
  13. package/dist/agents/contracts.js +14 -0
  14. package/dist/agents/contracts.js.map +1 -0
  15. package/dist/agents/data-tools.js +11 -3
  16. package/dist/agents/data-tools.js.map +1 -1
  17. package/dist/agents/deliverable-tools.d.ts +2 -0
  18. package/dist/agents/deliverable-tools.d.ts.map +1 -0
  19. package/dist/agents/deliverable-tools.js +497 -0
  20. package/dist/agents/deliverable-tools.js.map +1 -0
  21. package/dist/agents/evidence.d.ts +21 -0
  22. package/dist/agents/evidence.d.ts.map +1 -0
  23. package/dist/agents/evidence.js +302 -0
  24. package/dist/agents/evidence.js.map +1 -0
  25. package/dist/agents/orchestrator.js +13 -13
  26. package/dist/agents/sandbox.d.ts.map +1 -1
  27. package/dist/agents/sandbox.js +84 -31
  28. package/dist/agents/sandbox.js.map +1 -1
  29. package/dist/agents/swarm.d.ts +2 -0
  30. package/dist/agents/swarm.d.ts.map +1 -1
  31. package/dist/agents/swarm.js +170 -149
  32. package/dist/agents/swarm.js.map +1 -1
  33. package/dist/bridge/index.js +87 -87
  34. package/dist/geo/index.d.ts +2 -1
  35. package/dist/geo/index.d.ts.map +1 -1
  36. package/dist/geo/index.js +1 -0
  37. package/dist/geo/index.js.map +1 -1
  38. package/dist/geo/pile-capacity.d.ts.map +1 -1
  39. package/dist/geo/pile-capacity.js +47 -8
  40. package/dist/geo/pile-capacity.js.map +1 -1
  41. package/dist/geo/seepage.d.ts +62 -0
  42. package/dist/geo/seepage.d.ts.map +1 -0
  43. package/dist/geo/seepage.js +130 -0
  44. package/dist/geo/seepage.js.map +1 -0
  45. package/dist/geo/slope-stability.d.ts.map +1 -1
  46. package/dist/geo/slope-stability.js +9 -6
  47. package/dist/geo/slope-stability.js.map +1 -1
  48. package/dist/index.d.ts +5 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +6 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/llm/middleware/metering.js +14 -14
  53. package/dist/llm/providers/hosted-beta.d.ts.map +1 -1
  54. package/dist/llm/providers/hosted-beta.js +5 -2
  55. package/dist/llm/providers/hosted-beta.js.map +1 -1
  56. package/dist/llm/providers/zhipu.d.ts.map +1 -1
  57. package/dist/llm/providers/zhipu.js +3 -1
  58. package/dist/llm/providers/zhipu.js.map +1 -1
  59. package/dist/llm/util.d.ts +10 -0
  60. package/dist/llm/util.d.ts.map +1 -0
  61. package/dist/llm/util.js +54 -0
  62. package/dist/llm/util.js.map +1 -0
  63. package/dist/meta/metadata.json +4 -4
  64. package/dist/report/casefile.d.ts +207 -0
  65. package/dist/report/casefile.d.ts.map +1 -0
  66. package/dist/report/casefile.js +438 -0
  67. package/dist/report/casefile.js.map +1 -0
  68. package/dist/report/docx.d.ts +3 -0
  69. package/dist/report/docx.d.ts.map +1 -0
  70. package/dist/report/docx.js +178 -0
  71. package/dist/report/docx.js.map +1 -0
  72. package/dist/report/index.d.ts +3 -0
  73. package/dist/report/index.d.ts.map +1 -1
  74. package/dist/report/index.js +23 -20
  75. package/dist/report/index.js.map +1 -1
  76. package/dist/report/pdf.d.ts +3 -0
  77. package/dist/report/pdf.d.ts.map +1 -0
  78. package/dist/report/pdf.js +195 -0
  79. package/dist/report/pdf.js.map +1 -0
  80. package/dist/vision/index.d.ts.map +1 -1
  81. package/dist/vision/index.js +163 -84
  82. package/dist/vision/index.js.map +1 -1
  83. package/package.json +58 -55
@@ -0,0 +1,497 @@
1
+ import { mkdirSync, writeFileSync } from 'node:fs';
2
+ import { dirname } from 'node:path';
3
+ import { exportCSV, exportGeoJSON, exportBoreholeProfileDXF, } from '../export/index.js';
4
+ import { generateReportFromCaseFile, renderReportAsDocx, renderReportAsPdf, } from '../report/index.js';
5
+ import { loadLatestScenarioArtifact, loadScenarioCaseFile, } from './case-file.js';
6
+ import { listEvidenceRecords } from './evidence.js';
7
+ import { validateWritePath } from './sandbox.js';
8
+ import { toolRegistry } from './tools.js';
9
+ const INLINE_TEXT_BYTE_LIMIT = 16 * 1024;
10
+ const INLINE_BINARY_BYTE_LIMIT = 256 * 1024;
11
+ const CSV_SOURCE_ARTIFACTS = [
12
+ 'results',
13
+ 'option-matrix',
14
+ 'review-checklist',
15
+ 'assumptions',
16
+ 'evidence',
17
+ ];
18
+ function readString(value, name) {
19
+ if (typeof value !== 'string' || value.trim().length === 0) {
20
+ throw new Error(`Missing required string argument: ${name}`);
21
+ }
22
+ return value.trim();
23
+ }
24
+ function readOptionalString(value) {
25
+ if (typeof value !== 'string')
26
+ return undefined;
27
+ const trimmed = value.trim();
28
+ return trimmed.length > 0 ? trimmed : undefined;
29
+ }
30
+ function readNumber(value, name) {
31
+ if (typeof value === 'number' && Number.isFinite(value)) {
32
+ return value;
33
+ }
34
+ if (typeof value === 'string' && value.trim().length > 0) {
35
+ const parsed = Number(value);
36
+ if (Number.isFinite(parsed)) {
37
+ return parsed;
38
+ }
39
+ }
40
+ throw new Error(`Missing required numeric argument: ${name}`);
41
+ }
42
+ function readOptionalNumber(value) {
43
+ if (value === null || value === undefined) {
44
+ return undefined;
45
+ }
46
+ if (typeof value === 'number' && Number.isFinite(value)) {
47
+ return value;
48
+ }
49
+ if (typeof value === 'string' && value.trim().length > 0) {
50
+ const parsed = Number(value);
51
+ if (Number.isFinite(parsed)) {
52
+ return parsed;
53
+ }
54
+ }
55
+ throw new Error('Expected a finite number.');
56
+ }
57
+ function readCsvSourceArtifact(value) {
58
+ if (typeof value !== 'string' || !CSV_SOURCE_ARTIFACTS.includes(value)) {
59
+ throw new Error(`sourceArtifact must be one of: ${CSV_SOURCE_ARTIFACTS.join(', ')}`);
60
+ }
61
+ return value;
62
+ }
63
+ function sanitizeFilename(name, fallbackBase, extension) {
64
+ const base = name.trim().length > 0 ? name.trim() : fallbackBase;
65
+ const sanitizedBase = base.replace(/[<>:"/\\|?*\u0000-\u001F]/g, '-').replace(/\s+/g, ' ').trim();
66
+ const safeBase = sanitizedBase.length > 0 ? sanitizedBase : fallbackBase;
67
+ return safeBase.endsWith(extension) ? safeBase : `${safeBase}${extension}`;
68
+ }
69
+ function inlineTextPayload(content) {
70
+ const byteLength = Buffer.byteLength(content, 'utf8');
71
+ if (byteLength <= INLINE_TEXT_BYTE_LIMIT) {
72
+ return { content, truncated: false, byteLength };
73
+ }
74
+ return {
75
+ preview: content.slice(0, INLINE_TEXT_BYTE_LIMIT),
76
+ truncated: true,
77
+ byteLength,
78
+ note: 'Output was truncated for tool safety. Provide outputPath to write the full file.',
79
+ };
80
+ }
81
+ function inlineBinaryPayload(buffer) {
82
+ if (buffer.length <= INLINE_BINARY_BYTE_LIMIT) {
83
+ return {
84
+ base64: buffer.toString('base64'),
85
+ inline: true,
86
+ byteLength: buffer.length,
87
+ };
88
+ }
89
+ return {
90
+ inline: false,
91
+ byteLength: buffer.length,
92
+ note: 'Binary output omitted because it exceeds inline size limits. Provide outputPath to write the full file.',
93
+ };
94
+ }
95
+ function writeOutputFile(outputPath, content) {
96
+ const check = validateWritePath(outputPath);
97
+ if (!check.safe || !check.resolved) {
98
+ throw new Error(check.error ?? `Invalid output path: ${outputPath}`);
99
+ }
100
+ mkdirSync(dirname(check.resolved), { recursive: true });
101
+ writeFileSync(check.resolved, content);
102
+ return check.resolved;
103
+ }
104
+ function toReportOptions(args) {
105
+ return {
106
+ projectId: readString(args.projectId, 'projectId'),
107
+ scenarioId: readString(args.scenarioId, 'scenarioId'),
108
+ projectName: readOptionalString(args.projectName),
109
+ task: readOptionalString(args.task),
110
+ location: readOptionalString(args.location),
111
+ title: readOptionalString(args.title),
112
+ };
113
+ }
114
+ function toReportSummary(report) {
115
+ return {
116
+ title: report.title,
117
+ summary: report.summary,
118
+ sections: report.sections,
119
+ latencyMs: report.latencyMs,
120
+ metadata: report.metadata,
121
+ };
122
+ }
123
+ async function loadStoredCaseFileReport(args) {
124
+ return generateReportFromCaseFile(toReportOptions(args));
125
+ }
126
+ function requireArtifact(projectId, scenarioId, artifactType) {
127
+ const artifact = loadLatestScenarioArtifact(projectId, scenarioId, artifactType);
128
+ if (!artifact) {
129
+ throw new Error(`No ${artifactType} artifact found for scenario "${scenarioId}" in project "${projectId}".`);
130
+ }
131
+ return artifact;
132
+ }
133
+ function joinValues(values) {
134
+ return values
135
+ .map((value) => (typeof value === 'string' ? value.trim() : ''))
136
+ .filter(Boolean)
137
+ .join('; ');
138
+ }
139
+ function formatMetricList(metrics) {
140
+ return (metrics ?? [])
141
+ .map((metric) => {
142
+ const valueParts = [metric.value == null ? '' : String(metric.value), metric.units].filter(Boolean);
143
+ const valueText = valueParts.join(' ');
144
+ return `${metric.name}${valueText ? `=${valueText}` : ''}${metric.status ? ` [${metric.status}]` : ''}`;
145
+ })
146
+ .join('; ');
147
+ }
148
+ function buildCsvPayload(projectId, scenarioId, sourceArtifact) {
149
+ if (sourceArtifact === 'evidence') {
150
+ const evidence = listEvidenceRecords(projectId, scenarioId);
151
+ return {
152
+ sourceArtifact,
153
+ headers: ['evidenceId', 'class', 'label', 'source', 'summary', 'detail', 'linkedArtifactIds'],
154
+ rows: evidence.map((record) => [
155
+ record.evidenceId,
156
+ record.class,
157
+ record.label,
158
+ record.source,
159
+ record.summary,
160
+ record.detail,
161
+ record.linkedArtifactIds.join('; '),
162
+ ]),
163
+ };
164
+ }
165
+ if (sourceArtifact === 'assumptions') {
166
+ const artifact = requireArtifact(projectId, scenarioId, 'assumptions');
167
+ return {
168
+ sourceArtifact,
169
+ headers: ['assumptionId', 'category', 'statement', 'impact', 'basis'],
170
+ rows: (artifact.payload.assumptions ?? []).map((assumption) => [
171
+ assumption.assumptionId,
172
+ assumption.category,
173
+ assumption.statement,
174
+ assumption.impact,
175
+ assumption.basis,
176
+ ]),
177
+ };
178
+ }
179
+ if (sourceArtifact === 'results') {
180
+ const artifact = requireArtifact(projectId, scenarioId, 'results');
181
+ return {
182
+ sourceArtifact,
183
+ headers: ['resultId', 'label', 'method', 'toolName', 'metrics', 'interpretation', 'warnings'],
184
+ rows: (artifact.payload.records ?? []).map((record) => [
185
+ record.resultId,
186
+ record.label,
187
+ record.method,
188
+ record.toolName,
189
+ formatMetricList(record.metrics),
190
+ record.interpretation,
191
+ joinValues(record.warnings ?? []),
192
+ ]),
193
+ };
194
+ }
195
+ if (sourceArtifact === 'option-matrix') {
196
+ const artifact = requireArtifact(projectId, scenarioId, 'option-matrix');
197
+ return {
198
+ sourceArtifact,
199
+ headers: [
200
+ 'rank',
201
+ 'optionId',
202
+ 'label',
203
+ 'category',
204
+ 'safety',
205
+ 'settlement',
206
+ 'constructability',
207
+ 'cost',
208
+ 'scheduleRisk',
209
+ 'rationale',
210
+ ],
211
+ rows: (artifact.payload.rows ?? []).map((row) => [
212
+ row.rank,
213
+ row.optionId,
214
+ row.label,
215
+ row.category,
216
+ row.safety,
217
+ row.settlement,
218
+ row.constructability,
219
+ row.cost,
220
+ row.scheduleRisk,
221
+ row.rationale,
222
+ ]),
223
+ };
224
+ }
225
+ const artifact = requireArtifact(projectId, scenarioId, 'review-checklist');
226
+ return {
227
+ sourceArtifact,
228
+ headers: ['itemId', 'category', 'question', 'status', 'detail'],
229
+ rows: (artifact.payload.items ?? []).map((item) => [
230
+ item.itemId,
231
+ item.category,
232
+ item.question,
233
+ item.status,
234
+ item.detail,
235
+ ]),
236
+ };
237
+ }
238
+ function createGeoJsonFeature(projectId, scenarioId, latitude, longitude, name) {
239
+ const caseFile = loadScenarioCaseFile(projectId, scenarioId);
240
+ const acceptanceStatus = loadLatestScenarioArtifact(projectId, scenarioId, 'acceptance-status');
241
+ const optionMatrix = loadLatestScenarioArtifact(projectId, scenarioId, 'option-matrix');
242
+ const results = loadLatestScenarioArtifact(projectId, scenarioId, 'results');
243
+ const evidenceCount = listEvidenceRecords(projectId, scenarioId).length;
244
+ const preferredOptionId = optionMatrix?.payload.preferredOptionId;
245
+ const preferredRow = optionMatrix?.payload.rows?.find((row) => row.optionId === preferredOptionId);
246
+ return {
247
+ lat: latitude,
248
+ lng: longitude,
249
+ name: name ?? caseFile?.title ?? scenarioId,
250
+ properties: {
251
+ projectId,
252
+ scenarioId,
253
+ scenarioTitle: caseFile?.title ?? scenarioId,
254
+ verdict: acceptanceStatus?.payload.verdict ?? null,
255
+ confidence: acceptanceStatus?.payload.confidence ?? null,
256
+ acceptanceSummary: acceptanceStatus?.payload.summary ?? null,
257
+ preferredOptionId: preferredOptionId ?? null,
258
+ preferredOptionLabel: preferredRow?.label ?? null,
259
+ decisionBasis: optionMatrix?.payload.decisionBasis ?? [],
260
+ analysesRun: results?.payload.analysesRun ?? [],
261
+ resultCount: results?.payload.records?.length ?? 0,
262
+ evidenceCount,
263
+ },
264
+ };
265
+ }
266
+ function summarizeEvidence(records) {
267
+ return records.length === 1 ? '1 evidence record' : `${records.length} evidence records`;
268
+ }
269
+ toolRegistry.register({
270
+ name: 'generate_report',
271
+ description: 'Generate a deterministic report from stored case-file artifacts and evidence without changing the project state.',
272
+ parameters: {
273
+ type: 'object',
274
+ required: ['projectId', 'scenarioId'],
275
+ properties: {
276
+ projectId: { type: 'string', description: 'Project identifier' },
277
+ scenarioId: { type: 'string', description: 'Scenario identifier' },
278
+ projectName: { type: 'string', description: 'Optional display name for the project' },
279
+ task: { type: 'string', description: 'Optional task summary for the report' },
280
+ location: { type: 'string', description: 'Optional location label' },
281
+ title: { type: 'string', description: 'Optional custom report title' },
282
+ },
283
+ },
284
+ }, async (args) => {
285
+ const report = await loadStoredCaseFileReport(args);
286
+ return {
287
+ success: true,
288
+ data: {
289
+ source: 'case-file',
290
+ format: 'report',
291
+ report: toReportSummary(report),
292
+ markdown: inlineTextPayload(report.fullMarkdown),
293
+ },
294
+ summary: `Generated report for ${report.title}`,
295
+ };
296
+ });
297
+ toolRegistry.register({
298
+ name: 'render_pdf',
299
+ description: 'Render a stored case-file report as PDF. Returns inline base64 when small, or writes a file when outputPath is provided.',
300
+ parameters: {
301
+ type: 'object',
302
+ required: ['projectId', 'scenarioId'],
303
+ properties: {
304
+ projectId: { type: 'string', description: 'Project identifier' },
305
+ scenarioId: { type: 'string', description: 'Scenario identifier' },
306
+ projectName: { type: 'string', description: 'Optional display name for the project' },
307
+ task: { type: 'string', description: 'Optional task summary for the report' },
308
+ location: { type: 'string', description: 'Optional location label' },
309
+ title: { type: 'string', description: 'Optional custom report title' },
310
+ outputPath: { type: 'string', description: 'Optional file path for the rendered PDF' },
311
+ },
312
+ },
313
+ }, async (args) => {
314
+ const report = await loadStoredCaseFileReport(args);
315
+ const buffer = await renderReportAsPdf(report);
316
+ const outputPath = readOptionalString(args.outputPath);
317
+ const filename = sanitizeFilename(report.title, 'geotech-report', '.pdf');
318
+ return {
319
+ success: true,
320
+ data: {
321
+ source: 'case-file',
322
+ format: 'pdf',
323
+ mimeType: 'application/pdf',
324
+ filename,
325
+ report: toReportSummary(report),
326
+ ...(outputPath
327
+ ? { outputPath: writeOutputFile(outputPath, buffer), byteLength: buffer.length, inline: false }
328
+ : inlineBinaryPayload(buffer)),
329
+ },
330
+ summary: `Rendered PDF for ${report.title}`,
331
+ };
332
+ });
333
+ toolRegistry.register({
334
+ name: 'render_docx',
335
+ description: 'Render a stored case-file report as DOCX. Returns inline base64 when small, or writes a file when outputPath is provided.',
336
+ parameters: {
337
+ type: 'object',
338
+ required: ['projectId', 'scenarioId'],
339
+ properties: {
340
+ projectId: { type: 'string', description: 'Project identifier' },
341
+ scenarioId: { type: 'string', description: 'Scenario identifier' },
342
+ projectName: { type: 'string', description: 'Optional display name for the project' },
343
+ task: { type: 'string', description: 'Optional task summary for the report' },
344
+ location: { type: 'string', description: 'Optional location label' },
345
+ title: { type: 'string', description: 'Optional custom report title' },
346
+ outputPath: { type: 'string', description: 'Optional file path for the rendered DOCX' },
347
+ },
348
+ },
349
+ }, async (args) => {
350
+ const report = await loadStoredCaseFileReport(args);
351
+ const buffer = await renderReportAsDocx(report);
352
+ const outputPath = readOptionalString(args.outputPath);
353
+ const filename = sanitizeFilename(report.title, 'geotech-report', '.docx');
354
+ return {
355
+ success: true,
356
+ data: {
357
+ source: 'case-file',
358
+ format: 'docx',
359
+ mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
360
+ filename,
361
+ report: toReportSummary(report),
362
+ ...(outputPath
363
+ ? { outputPath: writeOutputFile(outputPath, buffer), byteLength: buffer.length, inline: false }
364
+ : inlineBinaryPayload(buffer)),
365
+ },
366
+ summary: `Rendered DOCX for ${report.title}`,
367
+ };
368
+ });
369
+ toolRegistry.register({
370
+ name: 'export_csv',
371
+ description: 'Export stored case-file artifacts or evidence as CSV. Supports results, option-matrix, review-checklist, assumptions, and evidence.',
372
+ parameters: {
373
+ type: 'object',
374
+ required: ['projectId', 'scenarioId', 'sourceArtifact'],
375
+ properties: {
376
+ projectId: { type: 'string', description: 'Project identifier' },
377
+ scenarioId: { type: 'string', description: 'Scenario identifier' },
378
+ sourceArtifact: {
379
+ type: 'string',
380
+ enum: [...CSV_SOURCE_ARTIFACTS],
381
+ description: 'Stored case-file source to export',
382
+ },
383
+ outputPath: { type: 'string', description: 'Optional file path for the CSV output' },
384
+ },
385
+ },
386
+ }, (args) => {
387
+ const projectId = readString(args.projectId, 'projectId');
388
+ const scenarioId = readString(args.scenarioId, 'scenarioId');
389
+ const sourceArtifact = readCsvSourceArtifact(args.sourceArtifact);
390
+ const outputPath = readOptionalString(args.outputPath);
391
+ const csvPayload = buildCsvPayload(projectId, scenarioId, sourceArtifact);
392
+ const csv = exportCSV(csvPayload.headers, csvPayload.rows);
393
+ return {
394
+ success: true,
395
+ data: {
396
+ source: 'case-file',
397
+ format: 'csv',
398
+ mimeType: 'text/csv',
399
+ sourceArtifact,
400
+ headers: csvPayload.headers,
401
+ rowCount: csvPayload.rows.length,
402
+ ...(outputPath
403
+ ? { outputPath: writeOutputFile(outputPath, csv), byteLength: Buffer.byteLength(csv, 'utf8') }
404
+ : inlineTextPayload(csv)),
405
+ },
406
+ summary: `Exported ${sourceArtifact} as CSV (${csvPayload.rows.length} rows)`,
407
+ };
408
+ });
409
+ toolRegistry.register({
410
+ name: 'export_dxf',
411
+ description: 'Export a borehole-profile DXF from the latest stored ground-model artifact.',
412
+ parameters: {
413
+ type: 'object',
414
+ required: ['projectId', 'scenarioId'],
415
+ properties: {
416
+ projectId: { type: 'string', description: 'Project identifier' },
417
+ scenarioId: { type: 'string', description: 'Scenario identifier' },
418
+ boreholeId: { type: 'string', description: 'Optional borehole label for the generated profile' },
419
+ x: { type: 'number', description: 'Optional x origin for the generated borehole column' },
420
+ spacing: { type: 'number', description: 'Optional profile spacing' },
421
+ outputPath: { type: 'string', description: 'Optional file path for the DXF output' },
422
+ },
423
+ },
424
+ }, (args) => {
425
+ const projectId = readString(args.projectId, 'projectId');
426
+ const scenarioId = readString(args.scenarioId, 'scenarioId');
427
+ const outputPath = readOptionalString(args.outputPath);
428
+ const groundModel = requireArtifact(projectId, scenarioId, 'ground-model');
429
+ const caseFile = loadScenarioCaseFile(projectId, scenarioId);
430
+ const strata = groundModel.payload.strata ?? [];
431
+ if (strata.length === 0) {
432
+ throw new Error(`Ground-model artifact for scenario "${scenarioId}" does not contain any strata.`);
433
+ }
434
+ const dxf = exportBoreholeProfileDXF([
435
+ {
436
+ id: readOptionalString(args.boreholeId) ?? caseFile?.title ?? scenarioId,
437
+ x: readOptionalNumber(args.x) ?? 0,
438
+ layers: strata.map((stratum) => ({
439
+ depthFrom: stratum.fromM,
440
+ depthTo: stratum.toM,
441
+ description: stratum.description ?? stratum.material,
442
+ })),
443
+ },
444
+ ], readOptionalNumber(args.spacing) ?? 10);
445
+ return {
446
+ success: true,
447
+ data: {
448
+ source: 'case-file',
449
+ format: 'dxf',
450
+ mimeType: 'application/dxf',
451
+ boreholeCount: 1,
452
+ layerCount: strata.length,
453
+ ...(outputPath
454
+ ? { outputPath: writeOutputFile(outputPath, dxf), byteLength: Buffer.byteLength(dxf, 'utf8') }
455
+ : inlineTextPayload(dxf)),
456
+ },
457
+ summary: `Exported DXF from ${strata.length} stored ground-model layers`,
458
+ };
459
+ });
460
+ toolRegistry.register({
461
+ name: 'export_geojson',
462
+ description: 'Export a point GeoJSON feature that summarizes the stored scenario acceptance, option, results, and evidence state.',
463
+ parameters: {
464
+ type: 'object',
465
+ required: ['projectId', 'scenarioId', 'latitude', 'longitude'],
466
+ properties: {
467
+ projectId: { type: 'string', description: 'Project identifier' },
468
+ scenarioId: { type: 'string', description: 'Scenario identifier' },
469
+ latitude: { type: 'number', description: 'Feature latitude' },
470
+ longitude: { type: 'number', description: 'Feature longitude' },
471
+ name: { type: 'string', description: 'Optional feature display name' },
472
+ outputPath: { type: 'string', description: 'Optional file path for the GeoJSON output' },
473
+ },
474
+ },
475
+ }, (args) => {
476
+ const projectId = readString(args.projectId, 'projectId');
477
+ const scenarioId = readString(args.scenarioId, 'scenarioId');
478
+ const outputPath = readOptionalString(args.outputPath);
479
+ const feature = createGeoJsonFeature(projectId, scenarioId, readNumber(args.latitude, 'latitude'), readNumber(args.longitude, 'longitude'), readOptionalString(args.name));
480
+ const geojson = exportGeoJSON([feature]);
481
+ const evidence = listEvidenceRecords(projectId, scenarioId);
482
+ return {
483
+ success: true,
484
+ data: {
485
+ source: 'case-file',
486
+ format: 'geojson',
487
+ mimeType: 'application/geo+json',
488
+ featureCount: 1,
489
+ evidenceSummary: summarizeEvidence(evidence),
490
+ ...(outputPath
491
+ ? { outputPath: writeOutputFile(outputPath, geojson), byteLength: Buffer.byteLength(geojson, 'utf8') }
492
+ : inlineTextPayload(geojson)),
493
+ },
494
+ summary: `Exported GeoJSON summary for scenario "${scenarioId}"`,
495
+ };
496
+ });
497
+ //# sourceMappingURL=deliverable-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliverable-tools.js","sourceRoot":"","sources":["../../src/agents/deliverable-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ArtifactSource, EvidenceClass, EvidenceRecord, ScenarioArtifact } from './contracts.js';
2
+ export interface PersistEvidenceRecordOptions {
3
+ projectId: string;
4
+ scenarioId: string;
5
+ class: EvidenceClass;
6
+ label: string;
7
+ source: string;
8
+ summary?: string;
9
+ detail?: string;
10
+ tags?: string[];
11
+ linkedArtifactIds?: string[];
12
+ provenanceSource: ArtifactSource;
13
+ metadata?: Record<string, unknown>;
14
+ evidenceId?: string;
15
+ }
16
+ export declare function loadEvidenceRecord(projectId: string, scenarioId: string, evidenceId: string): EvidenceRecord | null;
17
+ export declare function listEvidenceRecords(projectId: string, scenarioId: string): EvidenceRecord[];
18
+ export declare function persistEvidenceRecord(options: PersistEvidenceRecordOptions): EvidenceRecord;
19
+ export declare function persistArtifactEvidence(projectId: string, scenarioId: string, artifact: ScenarioArtifact): EvidenceRecord[];
20
+ export declare function persistCaseFileEvidence(projectId: string, scenarioId: string): EvidenceRecord[];
21
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/agents/evidence.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EACb,cAAc,EAId,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AAyFxB,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,cAAc,GAAG,IAAI,CAiBvB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,cAAc,EAAE,CAalB;AAkBD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,cAAc,CAyEhB;AA+HD,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,gBAAgB,GACzB,cAAc,EAAE,CAsClB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,cAAc,EAAE,CAmBlB"}