geotechcli 0.4.56 → 0.4.58

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.
@@ -1 +1 @@
1
- {"version":3,"file":"fem.d.ts","sourceRoot":"","sources":["../../src/commands/fem.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4FpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyEzD"}
1
+ {"version":3,"file":"fem.d.ts","sourceRoot":"","sources":["../../src/commands/fem.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsNpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoIzD"}
@@ -1,11 +1,17 @@
1
1
  import { mkdirSync, writeFileSync } from 'node:fs';
2
2
  import { dirname, resolve } from 'node:path';
3
3
  import { Command } from 'commander';
4
- import { buildRaftDemoAnalysisCase, renderFemWebglHtml, runBuiltinElasticRaftDemo, validateFemResultManifest, } from '@geotechcli/core';
4
+ import { buildExcavationDemoAnalysisCase, buildLLMConfig, buildRaftDemoAnalysisCase, renderFemWebglHtml, runAgent, runBuiltinElasticExcavationDemo, runBuiltinElasticRaftDemo, validateFemResultManifest, } from '@geotechcli/core';
5
5
  import { banner, heading, keyValue, renderJSON, success, warn, } from '../ui/terminal.js';
6
6
  import { openFileInBrowser } from '../ui/browser.js';
7
7
  import { addGlobalFlags, getGlobalFlags } from '../util/flags.js';
8
8
  const DEFAULT_RAFT_HTML = 'geotech-fem-raft-demo.html';
9
+ const DEFAULT_EXCAVATION_HTML = 'geotech-fem-excavation-demo.html';
10
+ const FEM_AGENT_TOOLS = [
11
+ 'list_fem_capabilities',
12
+ 'prepare_fem_analysis_case',
13
+ 'validate_fem_analysis_case',
14
+ ];
9
15
  function writeUtf8File(filePath, content) {
10
16
  const resolved = resolve(filePath);
11
17
  mkdirSync(dirname(resolved), { recursive: true });
@@ -20,18 +26,51 @@ function buildWarnings(manifest) {
20
26
  .map((finding) => finding.message),
21
27
  ];
22
28
  }
29
+ function buildFemAgentTask(task, objective) {
30
+ return [
31
+ 'FEM planning task:',
32
+ task,
33
+ objective ? `Preferred FEM objective hint: ${objective}` : '',
34
+ '',
35
+ 'Use only geotechCLI FEM capability, draft, and validation tools.',
36
+ 'Do not invent FEM displacement, reaction, mesh, stage, or result-envelope values.',
37
+ 'If a deterministic preview is appropriate, recommend the matching geotech fem demo command instead of claiming you ran it.',
38
+ ].filter(Boolean).join('\n');
39
+ }
40
+ function renderFemAgentStep(step, flags) {
41
+ if (flags.json || flags.quiet || !flags.verbose)
42
+ return;
43
+ if (step.type === 'tool_call') {
44
+ console.log(` > ${step.toolName}(${JSON.stringify(step.toolArgs).slice(0, 100)})`);
45
+ }
46
+ else if (step.type === 'tool_result') {
47
+ console.log(` = ${step.content}`);
48
+ }
49
+ else if (step.type === 'error') {
50
+ warn(step.content);
51
+ }
52
+ }
23
53
  function renderPlainSummary(manifest, options) {
24
54
  if (options.quiet) {
25
55
  console.log(`${manifest.envelope.maxSettlementMm.toFixed(2)} mm`);
26
56
  return;
27
57
  }
28
58
  banner();
29
- heading('Experimental 3D FEM Raft Demo');
59
+ heading(options.title);
30
60
  keyValue('Case', manifest.caseId);
31
61
  keyValue('Backend', manifest.backend.label);
32
62
  keyValue('Validation', manifest.validation.status);
33
63
  keyValue('Max settlement', `${manifest.envelope.maxSettlementMm.toFixed(2)} mm`);
34
64
  keyValue('Min settlement', `${manifest.envelope.minSettlementMm.toFixed(2)} mm`);
65
+ if (manifest.envelope.maxHorizontalDisplacementMm != null) {
66
+ keyValue('Max horizontal displacement', `${manifest.envelope.maxHorizontalDisplacementMm.toFixed(2)} mm`);
67
+ }
68
+ if (manifest.envelope.maxWallDeflectionMm != null) {
69
+ keyValue('Max wall deflection proxy', `${manifest.envelope.maxWallDeflectionMm.toFixed(2)} mm`);
70
+ }
71
+ if (manifest.envelope.stageCount != null) {
72
+ keyValue('Stages', String(manifest.envelope.stageCount));
73
+ }
35
74
  keyValue('Total load', `${manifest.envelope.totalLoadKn.toFixed(0)} kN`);
36
75
  keyValue('Reaction balance', manifest.envelope.reactionBalanceRatio.toFixed(3));
37
76
  keyValue('Mesh', `${manifest.mesh.divisions.join(' x ')} ${manifest.mesh.elementType}`);
@@ -49,9 +88,55 @@ function renderPlainSummary(manifest, options) {
49
88
  success(`FEM result manifest saved to ${options.resultPath}`);
50
89
  }
51
90
  }
91
+ async function runFemDemoCommand(demoKind, defaultHtmlPath, title, manifest, opts) {
92
+ const flags = getGlobalFlags(opts);
93
+ if (!opts.experimental) {
94
+ throw new Error('FEM previews are experimental. Re-run with --experimental to acknowledge the limitation.');
95
+ }
96
+ const validation = validateFemResultManifest(manifest);
97
+ if (validation.status === 'blocked') {
98
+ throw new Error(`FEM result manifest failed validation: ${validation.findings.map((item) => item.message).join('; ')}`);
99
+ }
100
+ let htmlPath;
101
+ let opened = false;
102
+ const shouldWriteDefaultHtml = !flags.json && !flags.quiet;
103
+ const requestedHtmlPath = flags.saveHtml ?? (shouldWriteDefaultHtml ? defaultHtmlPath : undefined);
104
+ if (requestedHtmlPath) {
105
+ htmlPath = writeUtf8File(requestedHtmlPath, renderFemWebglHtml(manifest));
106
+ opened = flags.noOpen ? false : openFileInBrowser(htmlPath, {
107
+ disabledEnvVar: 'GEOTECHCLI_FEM_NO_OPEN',
108
+ });
109
+ }
110
+ let resultPath;
111
+ if (flags.output) {
112
+ resultPath = writeUtf8File(flags.output, JSON.stringify(manifest, null, 2));
113
+ }
114
+ const envelope = {
115
+ kind: 'geotech-fem-demo-result',
116
+ schemaVersion: 'fem-demo-command.v0',
117
+ experimental: true,
118
+ demo: demoKind,
119
+ manifest,
120
+ htmlPath,
121
+ resultPath,
122
+ opened,
123
+ warnings: buildWarnings(manifest),
124
+ };
125
+ if (flags.json) {
126
+ renderJSON(envelope);
127
+ return;
128
+ }
129
+ renderPlainSummary(manifest, {
130
+ title,
131
+ htmlPath,
132
+ resultPath,
133
+ opened,
134
+ quiet: flags.quiet,
135
+ });
136
+ }
52
137
  export function registerFemCommand(program) {
53
138
  const fem = new Command('fem')
54
- .description('Experimental deterministic 3D FEM previews and WebGL artifacts');
139
+ .description('Experimental deterministic 3D FEM previews, scoped FEM agent planning, and WebGL artifacts');
55
140
  const demo = new Command('demo')
56
141
  .description('Experimental FEM demonstration models');
57
142
  const raft = new Command('raft')
@@ -64,54 +149,93 @@ export function registerFemCommand(program) {
64
149
  geotech fem demo raft --experimental --output raft-fem.manifest.json --json
65
150
  `)
66
151
  .action(async (opts) => {
152
+ await runFemDemoCommand('raft', DEFAULT_RAFT_HTML, 'Experimental 3D FEM Raft Demo', runBuiltinElasticRaftDemo(buildRaftDemoAnalysisCase()), opts);
153
+ });
154
+ const excavation = new Command('excavation')
155
+ .description('Experimental staged excavation deformation FEM preview')
156
+ .option('--experimental', 'Acknowledge that this FEM preview is experimental and not a design calculation')
157
+ .addHelpText('after', `
158
+ Examples:
159
+ geotech fem demo excavation --experimental
160
+ geotech fem demo excavation --experimental --save-html excavation-fem.html --no-open
161
+ geotech fem demo excavation --experimental --output excavation-fem.manifest.json --json
162
+ `)
163
+ .action(async (opts) => {
164
+ await runFemDemoCommand('excavation', DEFAULT_EXCAVATION_HTML, 'Experimental 3D FEM Excavation Demo', runBuiltinElasticExcavationDemo(buildExcavationDemoAnalysisCase()), opts);
165
+ });
166
+ addGlobalFlags(raft);
167
+ addGlobalFlags(excavation);
168
+ demo.addCommand(raft);
169
+ demo.addCommand(excavation);
170
+ fem.addCommand(demo);
171
+ const agent = new Command('agent')
172
+ .description('Scoped FEM planning agent that can list, draft, and validate FEM cases without running solvers')
173
+ .argument('<task...>', 'FEM planning or review task in natural language')
174
+ .option('--objective <objective>', 'Optional FEM objective hint, such as foundation-settlement or excavation-deformation')
175
+ .addHelpText('after', `
176
+ Examples:
177
+ geotech fem agent "which FEM route fits a braced excavation near an existing building?"
178
+ geotech fem agent "draft a staged excavation FEM case" --objective excavation-deformation --json
179
+
180
+ This command gives the LLM a narrow FEM brain. It may call only list_fem_capabilities,
181
+ prepare_fem_analysis_case, and validate_fem_analysis_case. It does not run FEM solvers,
182
+ write WebGL artifacts, or produce design-ready FEM results.
183
+ `)
184
+ .action(async (taskParts, opts) => {
67
185
  const flags = getGlobalFlags(opts);
68
- if (!opts.experimental) {
69
- throw new Error('FEM previews are experimental. Re-run with --experimental to acknowledge the limitation.');
70
- }
71
- const manifest = runBuiltinElasticRaftDemo(buildRaftDemoAnalysisCase());
72
- const validation = validateFemResultManifest(manifest);
73
- if (validation.status === 'blocked') {
74
- throw new Error(`FEM result manifest failed validation: ${validation.findings.map((item) => item.message).join('; ')}`);
75
- }
76
- let htmlPath;
77
- let opened = false;
78
- const shouldWriteDefaultHtml = !flags.json && !flags.quiet;
79
- const requestedHtmlPath = flags.saveHtml ?? (shouldWriteDefaultHtml ? DEFAULT_RAFT_HTML : undefined);
80
- if (requestedHtmlPath) {
81
- htmlPath = writeUtf8File(requestedHtmlPath, renderFemWebglHtml(manifest));
82
- opened = flags.noOpen ? false : openFileInBrowser(htmlPath, {
83
- disabledEnvVar: 'GEOTECHCLI_FEM_NO_OPEN',
84
- });
85
- }
86
- let resultPath;
87
- if (flags.output) {
88
- resultPath = writeUtf8File(flags.output, JSON.stringify(manifest, null, 2));
89
- }
90
- const envelope = {
91
- kind: 'geotech-fem-demo-result',
92
- schemaVersion: 'fem-demo-command.v0',
93
- experimental: true,
94
- demo: 'raft',
95
- manifest,
96
- htmlPath,
97
- resultPath,
98
- opened,
99
- warnings: buildWarnings(manifest),
186
+ const task = taskParts.join(' ');
187
+ const objective = typeof opts.objective === 'string' && opts.objective.trim()
188
+ ? opts.objective.trim()
189
+ : undefined;
190
+ const config = {
191
+ ...buildLLMConfig(),
192
+ skillsEnabled: false,
100
193
  };
194
+ const scopedTask = buildFemAgentTask(task, objective);
195
+ const session = await runAgent(scopedTask, config, (step) => renderFemAgentStep(step, flags), undefined, {
196
+ allowedTools: FEM_AGENT_TOOLS,
197
+ systemPromptSuffix: 'FEM scoped-agent rule: use only FEM routing, drafting, and validation tools. Never claim to run a solver or produce FEM numerical results unless they came from a deterministic geotechCLI FEM manifest. Recommend `geotech fem demo ... --experimental` when execution or visualization is needed.',
198
+ });
199
+ const answer = session.steps.find((step) => step.type === 'answer')?.content ?? '';
200
+ if (flags.output && answer) {
201
+ writeUtf8File(flags.output, answer);
202
+ }
101
203
  if (flags.json) {
204
+ const envelope = {
205
+ kind: 'geotech-fem-agent-result',
206
+ schemaVersion: 'fem-agent-command.v0',
207
+ task,
208
+ objective,
209
+ answer,
210
+ allowedTools: FEM_AGENT_TOOLS,
211
+ steps: session.steps.map((step) => ({
212
+ type: step.type,
213
+ content: step.content,
214
+ toolName: step.toolName,
215
+ toolArgs: step.toolArgs,
216
+ toolResult: step.toolResult ? {
217
+ success: step.toolResult.success,
218
+ summary: step.toolResult.summary,
219
+ } : undefined,
220
+ })),
221
+ tokens: session.totalTokens,
222
+ latencyMs: session.totalLatencyMs,
223
+ };
102
224
  renderJSON(envelope);
103
225
  return;
104
226
  }
105
- renderPlainSummary(manifest, {
106
- htmlPath,
107
- resultPath,
108
- opened,
109
- quiet: flags.quiet,
110
- });
227
+ if (!flags.quiet) {
228
+ banner();
229
+ heading('FEM Agent Plan');
230
+ console.log(answer || 'No FEM agent answer was produced.');
231
+ warn('FEM agent output is route/draft/validation guidance only. Numerical FEM results must come from deterministic geotechCLI FEM manifests.');
232
+ if (flags.output && answer) {
233
+ success(`FEM agent answer saved to ${flags.output}`);
234
+ }
235
+ }
111
236
  });
112
- addGlobalFlags(raft);
113
- demo.addCommand(raft);
114
- fem.addCommand(demo);
237
+ addGlobalFlags(agent);
238
+ fem.addCommand(agent);
115
239
  program.addCommand(fem);
116
240
  }
117
241
  //# sourceMappingURL=fem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fem.js","sourceRoot":"","sources":["../../src/commands/fem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fem.js","sourceRoot":"","sources":["../../src/commands/fem.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "geotechcli",
3
- "version": "0.4.56",
3
+ "version": "0.4.58",
4
4
  "description": "AI-native CLI for geotechnical engineering",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,7 +16,7 @@
16
16
  "start": "node dist/index.js"
17
17
  },
18
18
  "dependencies": {
19
- "@geotechcli/core": "0.4.56",
19
+ "@geotechcli/core": "0.4.58",
20
20
  "asciichart": "^1.5.25",
21
21
  "boxen": "^8.0.1",
22
22
  "chalk": "^5.4.0",