@geotechcli/core 0.2.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 (194) hide show
  1. package/dist/agents/brain.d.ts +39 -0
  2. package/dist/agents/brain.d.ts.map +1 -0
  3. package/dist/agents/brain.js +339 -0
  4. package/dist/agents/brain.js.map +1 -0
  5. package/dist/agents/bridge-tools.d.ts +2 -0
  6. package/dist/agents/bridge-tools.d.ts.map +1 -0
  7. package/dist/agents/bridge-tools.js +170 -0
  8. package/dist/agents/bridge-tools.js.map +1 -0
  9. package/dist/agents/data-tools.d.ts +2 -0
  10. package/dist/agents/data-tools.d.ts.map +1 -0
  11. package/dist/agents/data-tools.js +309 -0
  12. package/dist/agents/data-tools.js.map +1 -0
  13. package/dist/agents/filesystem-tools.d.ts +2 -0
  14. package/dist/agents/filesystem-tools.d.ts.map +1 -0
  15. package/dist/agents/filesystem-tools.js +267 -0
  16. package/dist/agents/filesystem-tools.js.map +1 -0
  17. package/dist/agents/guardrails.d.ts +17 -0
  18. package/dist/agents/guardrails.d.ts.map +1 -0
  19. package/dist/agents/guardrails.js +260 -0
  20. package/dist/agents/guardrails.js.map +1 -0
  21. package/dist/agents/orchestrator.d.ts +9 -0
  22. package/dist/agents/orchestrator.d.ts.map +1 -0
  23. package/dist/agents/orchestrator.js +136 -0
  24. package/dist/agents/orchestrator.js.map +1 -0
  25. package/dist/agents/safety.d.ts +9 -0
  26. package/dist/agents/safety.d.ts.map +1 -0
  27. package/dist/agents/safety.js +40 -0
  28. package/dist/agents/safety.js.map +1 -0
  29. package/dist/agents/sandbox.d.ts +34 -0
  30. package/dist/agents/sandbox.d.ts.map +1 -0
  31. package/dist/agents/sandbox.js +235 -0
  32. package/dist/agents/sandbox.js.map +1 -0
  33. package/dist/agents/swarm.d.ts +25 -0
  34. package/dist/agents/swarm.d.ts.map +1 -0
  35. package/dist/agents/swarm.js +434 -0
  36. package/dist/agents/swarm.js.map +1 -0
  37. package/dist/agents/tools.d.ts +37 -0
  38. package/dist/agents/tools.d.ts.map +1 -0
  39. package/dist/agents/tools.js +451 -0
  40. package/dist/agents/tools.js.map +1 -0
  41. package/dist/bridge/index.d.ts +52 -0
  42. package/dist/bridge/index.d.ts.map +1 -0
  43. package/dist/bridge/index.js +195 -0
  44. package/dist/bridge/index.js.map +1 -0
  45. package/dist/config/index.d.ts +106 -0
  46. package/dist/config/index.d.ts.map +1 -0
  47. package/dist/config/index.js +217 -0
  48. package/dist/config/index.js.map +1 -0
  49. package/dist/db/index.d.ts +4 -0
  50. package/dist/db/index.d.ts.map +1 -0
  51. package/dist/db/index.js +4 -0
  52. package/dist/db/index.js.map +1 -0
  53. package/dist/db/redis.d.ts +14 -0
  54. package/dist/db/redis.d.ts.map +1 -0
  55. package/dist/db/redis.js +204 -0
  56. package/dist/db/redis.js.map +1 -0
  57. package/dist/db/supabase.d.ts +57 -0
  58. package/dist/db/supabase.d.ts.map +1 -0
  59. package/dist/db/supabase.js +156 -0
  60. package/dist/db/supabase.js.map +1 -0
  61. package/dist/db/users.d.ts +50 -0
  62. package/dist/db/users.d.ts.map +1 -0
  63. package/dist/db/users.js +132 -0
  64. package/dist/db/users.js.map +1 -0
  65. package/dist/export/index.d.ts +51 -0
  66. package/dist/export/index.d.ts.map +1 -0
  67. package/dist/export/index.js +126 -0
  68. package/dist/export/index.js.map +1 -0
  69. package/dist/geo/bearing-capacity.d.ts +60 -0
  70. package/dist/geo/bearing-capacity.d.ts.map +1 -0
  71. package/dist/geo/bearing-capacity.js +195 -0
  72. package/dist/geo/bearing-capacity.js.map +1 -0
  73. package/dist/geo/classification.d.ts +107 -0
  74. package/dist/geo/classification.d.ts.map +1 -0
  75. package/dist/geo/classification.js +261 -0
  76. package/dist/geo/classification.js.map +1 -0
  77. package/dist/geo/index.d.ts +9 -0
  78. package/dist/geo/index.d.ts.map +1 -0
  79. package/dist/geo/index.js +9 -0
  80. package/dist/geo/index.js.map +1 -0
  81. package/dist/geo/lateral-earth-pressure.d.ts +75 -0
  82. package/dist/geo/lateral-earth-pressure.d.ts.map +1 -0
  83. package/dist/geo/lateral-earth-pressure.js +219 -0
  84. package/dist/geo/lateral-earth-pressure.js.map +1 -0
  85. package/dist/geo/liquefaction.d.ts +65 -0
  86. package/dist/geo/liquefaction.d.ts.map +1 -0
  87. package/dist/geo/liquefaction.js +163 -0
  88. package/dist/geo/liquefaction.js.map +1 -0
  89. package/dist/geo/pile-capacity.d.ts +91 -0
  90. package/dist/geo/pile-capacity.d.ts.map +1 -0
  91. package/dist/geo/pile-capacity.js +233 -0
  92. package/dist/geo/pile-capacity.js.map +1 -0
  93. package/dist/geo/settlement.d.ts +119 -0
  94. package/dist/geo/settlement.d.ts.map +1 -0
  95. package/dist/geo/settlement.js +184 -0
  96. package/dist/geo/settlement.js.map +1 -0
  97. package/dist/geo/slope-stability.d.ts +82 -0
  98. package/dist/geo/slope-stability.d.ts.map +1 -0
  99. package/dist/geo/slope-stability.js +214 -0
  100. package/dist/geo/slope-stability.js.map +1 -0
  101. package/dist/geo/tunnel/index.d.ts +2 -0
  102. package/dist/geo/tunnel/index.d.ts.map +1 -0
  103. package/dist/geo/tunnel/index.js +2 -0
  104. package/dist/geo/tunnel/index.js.map +1 -0
  105. package/dist/geo/tunnel/tbm.d.ts +135 -0
  106. package/dist/geo/tunnel/tbm.d.ts.map +1 -0
  107. package/dist/geo/tunnel/tbm.js +268 -0
  108. package/dist/geo/tunnel/tbm.js.map +1 -0
  109. package/dist/index.d.ts +20 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +33 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/ingest/ags.d.ts +42 -0
  114. package/dist/ingest/ags.d.ts.map +1 -0
  115. package/dist/ingest/ags.js +133 -0
  116. package/dist/ingest/ags.js.map +1 -0
  117. package/dist/ingest/cpt.d.ts +47 -0
  118. package/dist/ingest/cpt.d.ts.map +1 -0
  119. package/dist/ingest/cpt.js +112 -0
  120. package/dist/ingest/cpt.js.map +1 -0
  121. package/dist/ingest/index.d.ts +3 -0
  122. package/dist/ingest/index.d.ts.map +1 -0
  123. package/dist/ingest/index.js +3 -0
  124. package/dist/ingest/index.js.map +1 -0
  125. package/dist/llm/index.d.ts +5 -0
  126. package/dist/llm/index.d.ts.map +1 -0
  127. package/dist/llm/index.js +4 -0
  128. package/dist/llm/index.js.map +1 -0
  129. package/dist/llm/middleware/metering.d.ts +55 -0
  130. package/dist/llm/middleware/metering.d.ts.map +1 -0
  131. package/dist/llm/middleware/metering.js +191 -0
  132. package/dist/llm/middleware/metering.js.map +1 -0
  133. package/dist/llm/middleware/persistent-usage.d.ts +7 -0
  134. package/dist/llm/middleware/persistent-usage.d.ts.map +1 -0
  135. package/dist/llm/middleware/persistent-usage.js +108 -0
  136. package/dist/llm/middleware/persistent-usage.js.map +1 -0
  137. package/dist/llm/middleware/retry.d.ts +7 -0
  138. package/dist/llm/middleware/retry.d.ts.map +1 -0
  139. package/dist/llm/middleware/retry.js +29 -0
  140. package/dist/llm/middleware/retry.js.map +1 -0
  141. package/dist/llm/providers/anthropic.d.ts +10 -0
  142. package/dist/llm/providers/anthropic.d.ts.map +1 -0
  143. package/dist/llm/providers/anthropic.js +107 -0
  144. package/dist/llm/providers/anthropic.js.map +1 -0
  145. package/dist/llm/providers/hosted-beta.d.ts +10 -0
  146. package/dist/llm/providers/hosted-beta.d.ts.map +1 -0
  147. package/dist/llm/providers/hosted-beta.js +106 -0
  148. package/dist/llm/providers/hosted-beta.js.map +1 -0
  149. package/dist/llm/providers/huggingface.d.ts +37 -0
  150. package/dist/llm/providers/huggingface.d.ts.map +1 -0
  151. package/dist/llm/providers/huggingface.js +133 -0
  152. package/dist/llm/providers/huggingface.js.map +1 -0
  153. package/dist/llm/providers/openai-compatible.d.ts +27 -0
  154. package/dist/llm/providers/openai-compatible.d.ts.map +1 -0
  155. package/dist/llm/providers/openai-compatible.js +99 -0
  156. package/dist/llm/providers/openai-compatible.js.map +1 -0
  157. package/dist/llm/providers/zhipu.d.ts +10 -0
  158. package/dist/llm/providers/zhipu.d.ts.map +1 -0
  159. package/dist/llm/providers/zhipu.js +81 -0
  160. package/dist/llm/providers/zhipu.js.map +1 -0
  161. package/dist/llm/router.d.ts +35 -0
  162. package/dist/llm/router.d.ts.map +1 -0
  163. package/dist/llm/router.js +109 -0
  164. package/dist/llm/router.js.map +1 -0
  165. package/dist/llm/types.d.ts +63 -0
  166. package/dist/llm/types.d.ts.map +1 -0
  167. package/dist/llm/types.js +38 -0
  168. package/dist/llm/types.js.map +1 -0
  169. package/dist/meta/index.d.ts +12 -0
  170. package/dist/meta/index.d.ts.map +1 -0
  171. package/dist/meta/index.js +8 -0
  172. package/dist/meta/index.js.map +1 -0
  173. package/dist/meta/metadata.json +46 -0
  174. package/dist/report/index.d.ts +20 -0
  175. package/dist/report/index.d.ts.map +1 -0
  176. package/dist/report/index.js +58 -0
  177. package/dist/report/index.js.map +1 -0
  178. package/dist/standards/index.d.ts +23 -0
  179. package/dist/standards/index.d.ts.map +1 -0
  180. package/dist/standards/index.js +89 -0
  181. package/dist/standards/index.js.map +1 -0
  182. package/dist/storage/index.d.ts +114 -0
  183. package/dist/storage/index.d.ts.map +1 -0
  184. package/dist/storage/index.js +465 -0
  185. package/dist/storage/index.js.map +1 -0
  186. package/dist/vision/index.d.ts +80 -0
  187. package/dist/vision/index.d.ts.map +1 -0
  188. package/dist/vision/index.js +298 -0
  189. package/dist/vision/index.js.map +1 -0
  190. package/dist/vision/parse.d.ts +20 -0
  191. package/dist/vision/parse.d.ts.map +1 -0
  192. package/dist/vision/parse.js +75 -0
  193. package/dist/vision/parse.js.map +1 -0
  194. package/package.json +55 -0
@@ -0,0 +1,39 @@
1
+ import type { LLMConfig } from '../llm/types.js';
2
+ import { type ToolResult } from './tools.js';
3
+ import './filesystem-tools.js';
4
+ import './bridge-tools.js';
5
+ import './data-tools.js';
6
+ export interface AgentStep {
7
+ type: 'thought' | 'tool_call' | 'tool_result' | 'answer' | 'error';
8
+ content: string;
9
+ toolName?: string;
10
+ toolArgs?: Record<string, unknown>;
11
+ toolResult?: ToolResult;
12
+ timestamp: number;
13
+ }
14
+ export interface AgentSession {
15
+ steps: AgentStep[];
16
+ context: Record<string, unknown>;
17
+ totalTokens: number;
18
+ totalLatencyMs: number;
19
+ }
20
+ export type AgentCallback = (step: AgentStep) => void;
21
+ export declare function runAgent(userQuery: string, config: LLMConfig, onStep: AgentCallback, sessionContext?: Record<string, unknown>): Promise<AgentSession>;
22
+ export declare class AgentConversation {
23
+ private context;
24
+ private history;
25
+ constructor(options?: {
26
+ context?: Record<string, unknown>;
27
+ history?: AgentSession[];
28
+ });
29
+ ask(query: string, config: LLMConfig, onStep: AgentCallback): Promise<AgentSession>;
30
+ hydrate(options: {
31
+ context?: Record<string, unknown>;
32
+ history?: AgentSession[];
33
+ }): void;
34
+ replaceContext(context: Record<string, unknown>): void;
35
+ getContext(): Record<string, unknown>;
36
+ getHistory(): AgentSession[];
37
+ clearContext(): void;
38
+ }
39
+ //# sourceMappingURL=brain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../src/agents/brain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAsB,MAAM,iBAAiB,CAAC;AAErE,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAK3D,OAAO,uBAAuB,CAAC;AAC/B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,iBAAiB,CAAC;AAMzB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;AAiHtD,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,EACrB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAAC,YAAY,CAAC,CAqOvB;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,OAAO,CAAsB;gBAEzB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;KAAE;IAK/E,GAAG,CACP,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,YAAY,CAAC;IAOxB,OAAO,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;KAAE,GAAG,IAAI;IAKvF,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAItD,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIrC,UAAU,IAAI,YAAY,EAAE;IAI5B,YAAY,IAAI,IAAI;CAGrB"}
@@ -0,0 +1,339 @@
1
+ import { generateChat } from '../llm/router.js';
2
+ import { toolRegistry } from './tools.js';
3
+ import { validateToolArgs, formatViolations } from './guardrails.js';
4
+ import { extractToolSafetyIssue, serializeContextForPrompt } from './safety.js';
5
+ // Side-effect imports: these files register tools into the shared registry
6
+ import './filesystem-tools.js';
7
+ import './bridge-tools.js';
8
+ import './data-tools.js';
9
+ // ---------------------------------------------------------------------------
10
+ // System prompt
11
+ // ---------------------------------------------------------------------------
12
+ function buildSystemPrompt() {
13
+ const toolDescriptions = toolRegistry.toToolDescriptions();
14
+ return `You are geotechCLI Agent, an expert geotechnical engineering AI that solves problems by EXECUTING real calculations, not just describing them.
15
+
16
+ ## YOUR TOOLS
17
+ You have access to the following deterministic computation engines. These produce REAL engineering results with validated formulas:
18
+
19
+ ${toolDescriptions}
20
+
21
+ ## HOW TO USE TOOLS
22
+ To call a tool, output EXACTLY this JSON block (no other text before or after it on that line):
23
+ \`\`\`tool
24
+ {"tool": "<tool_name>", "args": {<arguments as JSON>}}
25
+ \`\`\`
26
+
27
+ You will receive the tool's result immediately. Then you MUST reason about the result before deciding what to do next.
28
+
29
+ ## WORKFLOW (ReAct Pattern)
30
+ For every request, follow this loop:
31
+
32
+ 1. THINK: Analyze what the user needs. What calculations are required? What data do you have? What assumptions are needed?
33
+ 2. ACT: Call the appropriate tool with the right parameters.
34
+ 3. OBSERVE: Read the tool's result carefully. Extract key values.
35
+ 4. REASON: Interpret the result in engineering context. Is the value acceptable? Does it trigger additional checks?
36
+ 5. REPEAT or ANSWER: If more calculations are needed, go back to step 2. Otherwise, provide your final answer.
37
+
38
+ ## RULES
39
+ - ALWAYS use tools for calculations. Never invent numbers or estimate what a formula would produce.
40
+ - If the user provides incomplete data, state your assumptions clearly before calling tools.
41
+ - Chain multiple tools when engineering judgment requires it.
42
+ - Reference actual standards: Terzaghi, Meyerhof, Bieniawski, Barton, Boulanger & Idriss, etc.
43
+ - Report tool results with proper units and significant figures.
44
+ - If a tool returns parseStatus/confidence metadata with canAutoProceed=false, treat it as blocked evidence. Do not continue downstream deterministic calculations from it until you retry, request better input, or explain the limitation.
45
+ - When the analysis is complete, provide a clear engineering recommendation with supporting numbers.
46
+
47
+ ## FINAL ANSWER
48
+ When you have completed all necessary calculations and reasoning, provide your final answer as clear prose. Do NOT output a tool call in your final answer. Include:
49
+ - Summary of all calculations performed (with key numbers)
50
+ - Engineering interpretation
51
+ - Recommendations with supporting evidence
52
+ - Any limitations or assumptions made`;
53
+ }
54
+ // ---------------------------------------------------------------------------
55
+ // Context window management
56
+ // ---------------------------------------------------------------------------
57
+ const COMPRESS_THRESHOLD = 40_000;
58
+ function totalChars(messages) {
59
+ return messages.reduce((sum, message) => sum + message.content.length, 0);
60
+ }
61
+ function compressMessages(messages) {
62
+ if (messages.length <= 4)
63
+ return messages;
64
+ const system = messages[0];
65
+ const userQuery = messages[1];
66
+ const keepLast = 4;
67
+ const tail = messages.slice(-keepLast);
68
+ const middle = messages.slice(2, -keepLast);
69
+ if (middle.length === 0)
70
+ return messages;
71
+ const summaryParts = [];
72
+ for (const message of middle) {
73
+ if (message.role === 'user' && message.content.startsWith('[Tool Result:')) {
74
+ const lines = message.content.split('\n');
75
+ const toolName = lines[0].replace('[Tool Result: ', '').replace(']', '');
76
+ const summaryLine = lines[1] ?? '';
77
+ summaryParts.push(`${toolName}: ${summaryLine}`);
78
+ continue;
79
+ }
80
+ if (message.role === 'user' && message.content.startsWith('[GUARDRAIL BLOCKED:')) {
81
+ summaryParts.push(message.content.split('\n')[0]);
82
+ continue;
83
+ }
84
+ if (message.role === 'user' && message.content.startsWith('[Tool Blocked:')) {
85
+ summaryParts.push(message.content.split('\n')[0]);
86
+ }
87
+ }
88
+ return [
89
+ system,
90
+ userQuery,
91
+ {
92
+ role: 'user',
93
+ content: `[Context summary - ${summaryParts.length} prior tool exchanges compressed]\n${summaryParts.join('\n')}\n\nContinue your analysis based on these results and the most recent exchange.`,
94
+ },
95
+ ...tail,
96
+ ];
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Agent Brain
100
+ // ---------------------------------------------------------------------------
101
+ const MAX_ITERATIONS = 12;
102
+ export async function runAgent(userQuery, config, onStep, sessionContext) {
103
+ const session = {
104
+ steps: [],
105
+ context: { ...(sessionContext ?? {}) },
106
+ totalTokens: 0,
107
+ totalLatencyMs: 0,
108
+ };
109
+ const messages = [
110
+ { role: 'system', content: buildSystemPrompt() },
111
+ ];
112
+ const serializedContext = serializeContextForPrompt(sessionContext);
113
+ const userContent = serializedContext
114
+ ? `[Prior session context]\n${serializedContext}\n\nCurrent request: ${userQuery}`
115
+ : userQuery;
116
+ messages.push({ role: 'user', content: userContent });
117
+ for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
118
+ if (totalChars(messages) > COMPRESS_THRESHOLD) {
119
+ const compressed = compressMessages(messages);
120
+ messages.length = 0;
121
+ messages.push(...compressed);
122
+ }
123
+ let response;
124
+ try {
125
+ response = await generateChat(messages, config, {
126
+ temperature: 0.2,
127
+ maxTokens: 2048,
128
+ });
129
+ }
130
+ catch (err) {
131
+ const errMsg = err instanceof Error ? err.message : String(err);
132
+ const step = {
133
+ type: 'error',
134
+ content: `LLM error: ${errMsg}`,
135
+ timestamp: Date.now(),
136
+ };
137
+ session.steps.push(step);
138
+ onStep(step);
139
+ break;
140
+ }
141
+ session.totalTokens += response.usage.totalTokens;
142
+ session.totalLatencyMs += response.latencyMs;
143
+ const llmOutput = response.text;
144
+ messages.push({ role: 'assistant', content: llmOutput });
145
+ const toolCallMatch = llmOutput.match(/```tool\s*\n?([\s\S]*?)\n?```/);
146
+ if (!toolCallMatch) {
147
+ const answerStep = {
148
+ type: 'answer',
149
+ content: llmOutput,
150
+ timestamp: Date.now(),
151
+ };
152
+ session.steps.push(answerStep);
153
+ onStep(answerStep);
154
+ break;
155
+ }
156
+ const textBeforeTool = llmOutput.slice(0, toolCallMatch.index).trim();
157
+ if (textBeforeTool) {
158
+ const thoughtStep = {
159
+ type: 'thought',
160
+ content: textBeforeTool,
161
+ timestamp: Date.now(),
162
+ };
163
+ session.steps.push(thoughtStep);
164
+ onStep(thoughtStep);
165
+ }
166
+ let toolCall;
167
+ try {
168
+ toolCall = JSON.parse(toolCallMatch[1]);
169
+ }
170
+ catch {
171
+ const errStep = {
172
+ type: 'error',
173
+ content: 'Failed to parse tool call JSON. Retrying...',
174
+ timestamp: Date.now(),
175
+ };
176
+ session.steps.push(errStep);
177
+ onStep(errStep);
178
+ messages.push({
179
+ role: 'user',
180
+ content: 'Invalid tool call JSON. Output the tool call as valid JSON inside ```tool blocks.',
181
+ });
182
+ continue;
183
+ }
184
+ const callStep = {
185
+ type: 'tool_call',
186
+ content: `Calling ${toolCall.tool}`,
187
+ toolName: toolCall.tool,
188
+ toolArgs: toolCall.args,
189
+ timestamp: Date.now(),
190
+ };
191
+ session.steps.push(callStep);
192
+ onStep(callStep);
193
+ const guardrailCheck = validateToolArgs(toolCall.tool, toolCall.args);
194
+ if (!guardrailCheck.passed) {
195
+ const violationText = formatViolations(guardrailCheck);
196
+ const guardStep = {
197
+ type: 'error',
198
+ content: `Guardrail blocked ${toolCall.tool}: ${guardrailCheck.violations.filter((violation) => violation.severity === 'error').map((violation) => violation.rule).join('; ')}`,
199
+ toolName: toolCall.tool,
200
+ timestamp: Date.now(),
201
+ };
202
+ session.steps.push(guardStep);
203
+ onStep(guardStep);
204
+ messages.push({
205
+ role: 'user',
206
+ content: `[GUARDRAIL BLOCKED: ${toolCall.tool}]\n${violationText}\n\nYour tool call was BLOCKED because parameters violate physical or engineering constraints. Read the corrections above and call the tool again with fixed parameters.`,
207
+ });
208
+ continue;
209
+ }
210
+ if (guardrailCheck.violations.length > 0) {
211
+ const warnStep = {
212
+ type: 'thought',
213
+ content: `Guardrail warnings: ${guardrailCheck.violations.map((violation) => violation.rule).join('; ')}`,
214
+ timestamp: Date.now(),
215
+ };
216
+ session.steps.push(warnStep);
217
+ onStep(warnStep);
218
+ }
219
+ const result = await toolRegistry.execute(toolCall.tool, toolCall.args);
220
+ if (!result.success) {
221
+ const errorStep = {
222
+ type: 'error',
223
+ content: `Tool failed: ${result.error}`,
224
+ toolName: toolCall.tool,
225
+ toolResult: result,
226
+ timestamp: Date.now(),
227
+ };
228
+ session.steps.push(errorStep);
229
+ onStep(errorStep);
230
+ messages.push({
231
+ role: 'user',
232
+ content: `[Tool FAILED: ${toolCall.tool}]\nError: ${result.error}\n\nThe tool execution failed. Either:\n1. Fix the parameters and retry\n2. Try an alternative approach\n3. If unrecoverable, explain the limitation in your final answer`,
233
+ });
234
+ continue;
235
+ }
236
+ const resultStep = {
237
+ type: 'tool_result',
238
+ content: result.summary,
239
+ toolName: toolCall.tool,
240
+ toolResult: result,
241
+ timestamp: Date.now(),
242
+ };
243
+ session.steps.push(resultStep);
244
+ onStep(resultStep);
245
+ session.context[toolCall.tool] = result.data;
246
+ const safetyIssue = extractToolSafetyIssue(result.data);
247
+ if (safetyIssue) {
248
+ const blockedStep = {
249
+ type: 'error',
250
+ content: `${toolCall.tool} returned blocked output: ${safetyIssue.message}`,
251
+ toolName: toolCall.tool,
252
+ toolResult: result,
253
+ timestamp: Date.now(),
254
+ };
255
+ session.steps.push(blockedStep);
256
+ onStep(blockedStep);
257
+ messages.push({
258
+ role: 'user',
259
+ content: `[Tool Blocked: ${toolCall.tool}]\n${safetyIssue.message}\nWarnings: ${safetyIssue.warnings.join('; ') || 'None'}\n\nDo NOT continue downstream deterministic calculations from this output. Retry with better inputs, ask the user for clarification, or explain the limitation in your final answer.`,
260
+ });
261
+ continue;
262
+ }
263
+ const compactData = JSON.stringify(result.data);
264
+ const dataStr = compactData.length > 3000 ? `${compactData.slice(0, 3000)}...(truncated)` : compactData;
265
+ messages.push({
266
+ role: 'user',
267
+ content: `[Tool Result: ${toolCall.tool}]\n${result.summary}\nData: ${dataStr}\n\nAnalyze this result. Do you need more calculations, or can you provide the final answer?`,
268
+ });
269
+ }
270
+ if (session.steps.length > 0 && session.steps[session.steps.length - 1].type !== 'answer') {
271
+ messages.push({
272
+ role: 'user',
273
+ content: 'You have used all available iterations. Provide your final engineering answer now based on all tool results gathered so far. Do NOT call any more tools.',
274
+ });
275
+ try {
276
+ const finalResponse = await generateChat(messages, config, {
277
+ temperature: 0.2,
278
+ maxTokens: 3000,
279
+ });
280
+ session.totalTokens += finalResponse.usage.totalTokens;
281
+ session.totalLatencyMs += finalResponse.latencyMs;
282
+ const finalStep = {
283
+ type: 'answer',
284
+ content: finalResponse.text,
285
+ timestamp: Date.now(),
286
+ };
287
+ session.steps.push(finalStep);
288
+ onStep(finalStep);
289
+ }
290
+ catch {
291
+ const summaryStep = {
292
+ type: 'answer',
293
+ content: 'Agent reached maximum iterations. Results collected:\n' +
294
+ session.steps
295
+ .filter((step) => step.type === 'tool_result' && step.toolResult?.success)
296
+ .map((step) => `- ${step.content}`)
297
+ .join('\n'),
298
+ timestamp: Date.now(),
299
+ };
300
+ session.steps.push(summaryStep);
301
+ onStep(summaryStep);
302
+ }
303
+ }
304
+ return session;
305
+ }
306
+ // ---------------------------------------------------------------------------
307
+ // Convenience: run with session memory
308
+ // ---------------------------------------------------------------------------
309
+ export class AgentConversation {
310
+ context = {};
311
+ history = [];
312
+ constructor(options) {
313
+ this.context = { ...(options?.context ?? {}) };
314
+ this.history = [...(options?.history ?? [])];
315
+ }
316
+ async ask(query, config, onStep) {
317
+ const session = await runAgent(query, config, onStep, this.context);
318
+ this.context = { ...this.context, ...session.context };
319
+ this.history.push(session);
320
+ return session;
321
+ }
322
+ hydrate(options) {
323
+ this.context = { ...(options.context ?? {}) };
324
+ this.history = [...(options.history ?? [])];
325
+ }
326
+ replaceContext(context) {
327
+ this.context = { ...context };
328
+ }
329
+ getContext() {
330
+ return { ...this.context };
331
+ }
332
+ getHistory() {
333
+ return [...this.history];
334
+ }
335
+ clearContext() {
336
+ this.context = {};
337
+ }
338
+ }
339
+ //# sourceMappingURL=brain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain.js","sourceRoot":"","sources":["../../src/agents/brain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bridge-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-tools.d.ts","sourceRoot":"","sources":["../../src/agents/bridge-tools.ts"],"names":[],"mappings":""}
@@ -0,0 +1,170 @@
1
+ import { toolRegistry } from './tools.js';
2
+ import { execSync } from 'node:child_process';
3
+ import { validateShellCommand } from './sandbox.js';
4
+ // ---------------------------------------------------------------------------
5
+ // PLAXIS Remote Scripting API
6
+ // ---------------------------------------------------------------------------
7
+ async function plaxisRequest(endpoint, method, body, port = 10000) {
8
+ try {
9
+ const res = await fetch(`http://localhost:${port}${endpoint}`, {
10
+ method,
11
+ headers: body ? { 'Content-Type': 'application/json' } : undefined,
12
+ body: body ? JSON.stringify(body) : undefined,
13
+ signal: AbortSignal.timeout(30_000),
14
+ });
15
+ if (!res.ok)
16
+ return { ok: false, data: null, error: `PLAXIS returned ${res.status}` };
17
+ const data = await res.json().catch(() => res.text());
18
+ return { ok: true, data };
19
+ }
20
+ catch (err) {
21
+ return {
22
+ ok: false, data: null,
23
+ error: `Cannot reach PLAXIS at localhost:${port}. Ensure PLAXIS is running with Remote Scripting enabled.`,
24
+ };
25
+ }
26
+ }
27
+ toolRegistry.register({
28
+ name: 'plaxis_execute',
29
+ description: 'Send a Python command to a running PLAXIS 2D/3D instance via Remote Scripting API.',
30
+ parameters: {
31
+ type: 'object',
32
+ required: ['command'],
33
+ properties: {
34
+ command: { type: 'string', description: 'Python command for PLAXIS' },
35
+ port: { type: 'number', description: 'PLAXIS scripting server port', default: 10000 },
36
+ },
37
+ },
38
+ }, async (args) => {
39
+ const command = String(args.command);
40
+ const port = args.port ?? 10000;
41
+ const dangerous = ['import os', 'import sys', 'subprocess', 'exec(', 'eval(', '__import__', 'shutil', 'rmtree', 'open(', 'write(', 'unlink'];
42
+ if (dangerous.some((d) => command.toLowerCase().includes(d))) {
43
+ return { success: false, data: null, summary: '', error: 'Command blocked: contains potentially dangerous operations.' };
44
+ }
45
+ const result = await plaxisRequest('/commands', 'POST', { commands: [command] }, port);
46
+ if (!result.ok)
47
+ return { success: false, data: null, summary: '', error: result.error ?? 'PLAXIS command failed' };
48
+ return {
49
+ success: true,
50
+ data: result.data,
51
+ summary: `PLAXIS executed: ${command.slice(0, 60)} → ${JSON.stringify(result.data).slice(0, 120)}`,
52
+ };
53
+ });
54
+ toolRegistry.register({
55
+ name: 'plaxis_get_results',
56
+ description: 'Extract calculation results from a PLAXIS model.',
57
+ parameters: {
58
+ type: 'object',
59
+ required: ['phase', 'resultType'],
60
+ properties: {
61
+ phase: { type: 'string', description: 'Phase name (e.g. "Phase_1")' },
62
+ resultType: { type: 'string', enum: ['displacement', 'stress', 'force', 'plastic_points', 'pore_pressure', 'factor_of_safety'] },
63
+ location: { type: 'string', description: 'Specific point or node' },
64
+ port: { type: 'number', default: 10000 },
65
+ },
66
+ },
67
+ }, (args) => {
68
+ const phase = String(args.phase);
69
+ const resultType = String(args.resultType);
70
+ const resultCommands = {
71
+ displacement: `g_i.getresults(g_i.${phase}, g_i.ResultTypes.Soil.Utot, 'max')`,
72
+ stress: `g_i.getresults(g_i.${phase}, g_i.ResultTypes.Soil.SigmaXXeff, 'min')`,
73
+ force: `g_i.getresults(g_i.${phase}, g_i.ResultTypes.Plate.M2D, 'max')`,
74
+ plastic_points: `g_i.getresults(g_i.${phase}, g_i.ResultTypes.Soil.PlasticPointStatus, 'count')`,
75
+ pore_pressure: `g_i.getresults(g_i.${phase}, g_i.ResultTypes.Soil.PExcess, 'max')`,
76
+ factor_of_safety: `g_i.getresults(g_i.${phase}, g_i.ResultTypes.Soil.SumMsf, 'max')`,
77
+ };
78
+ const cmd = resultCommands[resultType];
79
+ if (!cmd)
80
+ return { success: false, data: null, summary: '', error: `Unknown result type: ${resultType}` };
81
+ return {
82
+ success: true,
83
+ data: { phase, resultType, command: cmd },
84
+ summary: `PLAXIS result query: ${resultType} from ${phase}`,
85
+ };
86
+ });
87
+ toolRegistry.register({
88
+ name: 'flac3d_execute',
89
+ description: 'Generate a FISH/command-line instruction for FLAC3D. Commands are generated for manual execution.',
90
+ parameters: {
91
+ type: 'object',
92
+ required: ['command'],
93
+ properties: {
94
+ command: { type: 'string', description: 'FLAC command or FISH code' },
95
+ port: { type: 'number', default: 5000 },
96
+ },
97
+ },
98
+ }, (args) => {
99
+ const command = String(args.command);
100
+ return {
101
+ success: true,
102
+ data: { command, port: args.port ?? 5000 },
103
+ summary: `FLAC3D command queued: ${command.slice(0, 80)}`,
104
+ };
105
+ });
106
+ toolRegistry.register({
107
+ name: 'rocscience_execute',
108
+ description: 'Generate a Python command for Rocscience RS2/RS3/Slide scripting API.',
109
+ parameters: {
110
+ type: 'object',
111
+ required: ['command'],
112
+ properties: {
113
+ command: { type: 'string', description: 'Python command for Rocscience' },
114
+ software: { type: 'string', enum: ['rs2', 'rs3', 'slide', 'slide2'], default: 'rs2' },
115
+ port: { type: 'number', default: 8080 },
116
+ },
117
+ },
118
+ }, (args) => {
119
+ const command = String(args.command);
120
+ return {
121
+ success: true,
122
+ data: { command, software: args.software ?? 'rs2', port: args.port ?? 8080 },
123
+ summary: `Rocscience ${args.software ?? 'RS2'} command queued: ${command.slice(0, 80)}`,
124
+ };
125
+ });
126
+ // ---------------------------------------------------------------------------
127
+ // Shell command execution (sandboxed via sandbox.ts)
128
+ // ---------------------------------------------------------------------------
129
+ toolRegistry.register({
130
+ name: 'run_command',
131
+ description: 'Execute a safe, read-only shell command. Only allows: ls, cat, head, tail, wc, find, grep, file, stat, du, pwd, echo, python <script.py>. No pipes, redirects, or chaining.',
132
+ parameters: {
133
+ type: 'object',
134
+ required: ['command'],
135
+ properties: {
136
+ command: { type: 'string', description: 'Shell command to execute' },
137
+ cwd: { type: 'string', description: 'Working directory' },
138
+ },
139
+ },
140
+ }, (args) => {
141
+ const command = String(args.command);
142
+ // SANDBOX: validate command through centralized sandbox
143
+ const check = validateShellCommand(command);
144
+ if (!check.safe) {
145
+ return { success: false, data: null, summary: '', error: check.error };
146
+ }
147
+ try {
148
+ const cwd = args.cwd ? String(args.cwd) : process.cwd();
149
+ const output = execSync(command, {
150
+ cwd,
151
+ timeout: 15_000,
152
+ maxBuffer: 1024 * 1024,
153
+ encoding: 'utf-8',
154
+ stdio: ['pipe', 'pipe', 'pipe'],
155
+ });
156
+ const lines = output.trim().split('\n');
157
+ const truncated = lines.length > 100;
158
+ const shown = truncated ? lines.slice(0, 100).join('\n') + '\n... (truncated)' : output.trim();
159
+ return {
160
+ success: true,
161
+ data: { command, cwd, output: shown, lines: lines.length },
162
+ summary: `Executed: ${command} → ${lines.length} lines output`,
163
+ };
164
+ }
165
+ catch (err) {
166
+ const msg = err instanceof Error ? err.message.split('\n')[0] : String(err);
167
+ return { success: false, data: null, summary: '', error: `Command failed: ${msg}` };
168
+ }
169
+ });
170
+ //# sourceMappingURL=bridge-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-tools.js","sourceRoot":"","sources":["../../src/agents/bridge-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-tools.d.ts","sourceRoot":"","sources":["../../src/agents/data-tools.ts"],"names":[],"mappings":""}