@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.
- package/dist/agents/brain.d.ts +39 -0
- package/dist/agents/brain.d.ts.map +1 -0
- package/dist/agents/brain.js +339 -0
- package/dist/agents/brain.js.map +1 -0
- package/dist/agents/bridge-tools.d.ts +2 -0
- package/dist/agents/bridge-tools.d.ts.map +1 -0
- package/dist/agents/bridge-tools.js +170 -0
- package/dist/agents/bridge-tools.js.map +1 -0
- package/dist/agents/data-tools.d.ts +2 -0
- package/dist/agents/data-tools.d.ts.map +1 -0
- package/dist/agents/data-tools.js +309 -0
- package/dist/agents/data-tools.js.map +1 -0
- package/dist/agents/filesystem-tools.d.ts +2 -0
- package/dist/agents/filesystem-tools.d.ts.map +1 -0
- package/dist/agents/filesystem-tools.js +267 -0
- package/dist/agents/filesystem-tools.js.map +1 -0
- package/dist/agents/guardrails.d.ts +17 -0
- package/dist/agents/guardrails.d.ts.map +1 -0
- package/dist/agents/guardrails.js +260 -0
- package/dist/agents/guardrails.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +9 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +136 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/safety.d.ts +9 -0
- package/dist/agents/safety.d.ts.map +1 -0
- package/dist/agents/safety.js +40 -0
- package/dist/agents/safety.js.map +1 -0
- package/dist/agents/sandbox.d.ts +34 -0
- package/dist/agents/sandbox.d.ts.map +1 -0
- package/dist/agents/sandbox.js +235 -0
- package/dist/agents/sandbox.js.map +1 -0
- package/dist/agents/swarm.d.ts +25 -0
- package/dist/agents/swarm.d.ts.map +1 -0
- package/dist/agents/swarm.js +434 -0
- package/dist/agents/swarm.js.map +1 -0
- package/dist/agents/tools.d.ts +37 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +451 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/bridge/index.d.ts +52 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +195 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/config/index.d.ts +106 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +217 -0
- package/dist/config/index.js.map +1 -0
- package/dist/db/index.d.ts +4 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +4 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/redis.d.ts +14 -0
- package/dist/db/redis.d.ts.map +1 -0
- package/dist/db/redis.js +204 -0
- package/dist/db/redis.js.map +1 -0
- package/dist/db/supabase.d.ts +57 -0
- package/dist/db/supabase.d.ts.map +1 -0
- package/dist/db/supabase.js +156 -0
- package/dist/db/supabase.js.map +1 -0
- package/dist/db/users.d.ts +50 -0
- package/dist/db/users.d.ts.map +1 -0
- package/dist/db/users.js +132 -0
- package/dist/db/users.js.map +1 -0
- package/dist/export/index.d.ts +51 -0
- package/dist/export/index.d.ts.map +1 -0
- package/dist/export/index.js +126 -0
- package/dist/export/index.js.map +1 -0
- package/dist/geo/bearing-capacity.d.ts +60 -0
- package/dist/geo/bearing-capacity.d.ts.map +1 -0
- package/dist/geo/bearing-capacity.js +195 -0
- package/dist/geo/bearing-capacity.js.map +1 -0
- package/dist/geo/classification.d.ts +107 -0
- package/dist/geo/classification.d.ts.map +1 -0
- package/dist/geo/classification.js +261 -0
- package/dist/geo/classification.js.map +1 -0
- package/dist/geo/index.d.ts +9 -0
- package/dist/geo/index.d.ts.map +1 -0
- package/dist/geo/index.js +9 -0
- package/dist/geo/index.js.map +1 -0
- package/dist/geo/lateral-earth-pressure.d.ts +75 -0
- package/dist/geo/lateral-earth-pressure.d.ts.map +1 -0
- package/dist/geo/lateral-earth-pressure.js +219 -0
- package/dist/geo/lateral-earth-pressure.js.map +1 -0
- package/dist/geo/liquefaction.d.ts +65 -0
- package/dist/geo/liquefaction.d.ts.map +1 -0
- package/dist/geo/liquefaction.js +163 -0
- package/dist/geo/liquefaction.js.map +1 -0
- package/dist/geo/pile-capacity.d.ts +91 -0
- package/dist/geo/pile-capacity.d.ts.map +1 -0
- package/dist/geo/pile-capacity.js +233 -0
- package/dist/geo/pile-capacity.js.map +1 -0
- package/dist/geo/settlement.d.ts +119 -0
- package/dist/geo/settlement.d.ts.map +1 -0
- package/dist/geo/settlement.js +184 -0
- package/dist/geo/settlement.js.map +1 -0
- package/dist/geo/slope-stability.d.ts +82 -0
- package/dist/geo/slope-stability.d.ts.map +1 -0
- package/dist/geo/slope-stability.js +214 -0
- package/dist/geo/slope-stability.js.map +1 -0
- package/dist/geo/tunnel/index.d.ts +2 -0
- package/dist/geo/tunnel/index.d.ts.map +1 -0
- package/dist/geo/tunnel/index.js +2 -0
- package/dist/geo/tunnel/index.js.map +1 -0
- package/dist/geo/tunnel/tbm.d.ts +135 -0
- package/dist/geo/tunnel/tbm.d.ts.map +1 -0
- package/dist/geo/tunnel/tbm.js +268 -0
- package/dist/geo/tunnel/tbm.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/ags.d.ts +42 -0
- package/dist/ingest/ags.d.ts.map +1 -0
- package/dist/ingest/ags.js +133 -0
- package/dist/ingest/ags.js.map +1 -0
- package/dist/ingest/cpt.d.ts +47 -0
- package/dist/ingest/cpt.d.ts.map +1 -0
- package/dist/ingest/cpt.js +112 -0
- package/dist/ingest/cpt.js.map +1 -0
- package/dist/ingest/index.d.ts +3 -0
- package/dist/ingest/index.d.ts.map +1 -0
- package/dist/ingest/index.js +3 -0
- package/dist/ingest/index.js.map +1 -0
- package/dist/llm/index.d.ts +5 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +4 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/middleware/metering.d.ts +55 -0
- package/dist/llm/middleware/metering.d.ts.map +1 -0
- package/dist/llm/middleware/metering.js +191 -0
- package/dist/llm/middleware/metering.js.map +1 -0
- package/dist/llm/middleware/persistent-usage.d.ts +7 -0
- package/dist/llm/middleware/persistent-usage.d.ts.map +1 -0
- package/dist/llm/middleware/persistent-usage.js +108 -0
- package/dist/llm/middleware/persistent-usage.js.map +1 -0
- package/dist/llm/middleware/retry.d.ts +7 -0
- package/dist/llm/middleware/retry.d.ts.map +1 -0
- package/dist/llm/middleware/retry.js +29 -0
- package/dist/llm/middleware/retry.js.map +1 -0
- package/dist/llm/providers/anthropic.d.ts +10 -0
- package/dist/llm/providers/anthropic.d.ts.map +1 -0
- package/dist/llm/providers/anthropic.js +107 -0
- package/dist/llm/providers/anthropic.js.map +1 -0
- package/dist/llm/providers/hosted-beta.d.ts +10 -0
- package/dist/llm/providers/hosted-beta.d.ts.map +1 -0
- package/dist/llm/providers/hosted-beta.js +106 -0
- package/dist/llm/providers/hosted-beta.js.map +1 -0
- package/dist/llm/providers/huggingface.d.ts +37 -0
- package/dist/llm/providers/huggingface.d.ts.map +1 -0
- package/dist/llm/providers/huggingface.js +133 -0
- package/dist/llm/providers/huggingface.js.map +1 -0
- package/dist/llm/providers/openai-compatible.d.ts +27 -0
- package/dist/llm/providers/openai-compatible.d.ts.map +1 -0
- package/dist/llm/providers/openai-compatible.js +99 -0
- package/dist/llm/providers/openai-compatible.js.map +1 -0
- package/dist/llm/providers/zhipu.d.ts +10 -0
- package/dist/llm/providers/zhipu.d.ts.map +1 -0
- package/dist/llm/providers/zhipu.js +81 -0
- package/dist/llm/providers/zhipu.js.map +1 -0
- package/dist/llm/router.d.ts +35 -0
- package/dist/llm/router.d.ts.map +1 -0
- package/dist/llm/router.js +109 -0
- package/dist/llm/router.js.map +1 -0
- package/dist/llm/types.d.ts +63 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +38 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/meta/index.d.ts +12 -0
- package/dist/meta/index.d.ts.map +1 -0
- package/dist/meta/index.js +8 -0
- package/dist/meta/index.js.map +1 -0
- package/dist/meta/metadata.json +46 -0
- package/dist/report/index.d.ts +20 -0
- package/dist/report/index.d.ts.map +1 -0
- package/dist/report/index.js +58 -0
- package/dist/report/index.js.map +1 -0
- package/dist/standards/index.d.ts +23 -0
- package/dist/standards/index.d.ts.map +1 -0
- package/dist/standards/index.js +89 -0
- package/dist/standards/index.js.map +1 -0
- package/dist/storage/index.d.ts +114 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +465 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/vision/index.d.ts +80 -0
- package/dist/vision/index.d.ts.map +1 -0
- package/dist/vision/index.js +298 -0
- package/dist/vision/index.js.map +1 -0
- package/dist/vision/parse.d.ts +20 -0
- package/dist/vision/parse.d.ts.map +1 -0
- package/dist/vision/parse.js +75 -0
- package/dist/vision/parse.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Poka-Yoke (ポカヨケ) — Mistake-Proofing Guardrails
|
|
3
|
+
//
|
|
4
|
+
// Validates tool parameters BEFORE execution to prevent:
|
|
5
|
+
// - Physically impossible values (negative friction angles, UCS > 400 for soil)
|
|
6
|
+
// - Numerically dangerous inputs (zero denominators, extreme ranges)
|
|
7
|
+
// - Logically inconsistent combinations
|
|
8
|
+
//
|
|
9
|
+
// Returns either PASS or FAIL with a correction suggestion the agent
|
|
10
|
+
// can use for self-healing.
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
const guardrails = new Map();
|
|
13
|
+
// --- Bearing Capacity ---
|
|
14
|
+
guardrails.set('calculate_bearing_capacity', (args) => {
|
|
15
|
+
const v = [];
|
|
16
|
+
const phi = Number(args.frictionAngle ?? args.phi ?? 0);
|
|
17
|
+
const c = Number(args.cohesion ?? 0);
|
|
18
|
+
const depth = Number(args.depth ?? 0);
|
|
19
|
+
const width = Number(args.width ?? 2);
|
|
20
|
+
const gamma = Number(args.unitWeight ?? 18);
|
|
21
|
+
const fs = Number(args.factorOfSafety ?? 3);
|
|
22
|
+
if (phi < 0)
|
|
23
|
+
v.push({ parameter: 'frictionAngle', value: phi, rule: 'Friction angle cannot be negative', severity: 'error', correction: 'Use absolute value or check soil data. Typical range: 0-45° for soils.' });
|
|
24
|
+
if (phi > 50)
|
|
25
|
+
v.push({ parameter: 'frictionAngle', value: phi, rule: 'Friction angle > 50° is unrealistic for natural soils', severity: 'error', correction: 'Max 45° for dense gravel. Check if value is in radians (convert to degrees).' });
|
|
26
|
+
if (c < 0)
|
|
27
|
+
v.push({ parameter: 'cohesion', value: c, rule: 'Cohesion cannot be negative', severity: 'error', correction: 'Set to 0 for cohesionless soil, or use positive value.' });
|
|
28
|
+
if (c > 500)
|
|
29
|
+
v.push({ parameter: 'cohesion', value: c, rule: 'Cohesion > 500 kPa is unrealistic for soil (rock range)', severity: 'warning', correction: 'Typical clay: 10-150 kPa. Check units — value may be in Pa instead of kPa.' });
|
|
30
|
+
if (depth <= 0)
|
|
31
|
+
v.push({ parameter: 'depth', value: depth, rule: 'Embedment depth must be positive', severity: 'error', correction: 'Set depth > 0. Surface footings use depth = 0.5-1.0m minimum.' });
|
|
32
|
+
if (depth > 30)
|
|
33
|
+
v.push({ parameter: 'depth', value: depth, rule: 'Depth > 30m is deep foundation territory, not shallow', severity: 'warning', correction: 'For deep foundations use pile capacity analysis instead.' });
|
|
34
|
+
if (width <= 0)
|
|
35
|
+
v.push({ parameter: 'width', value: width, rule: 'Foundation width must be positive', severity: 'error', correction: 'Set width > 0. Typical range: 0.5-10m.' });
|
|
36
|
+
if (gamma < 5 || gamma > 28)
|
|
37
|
+
v.push({ parameter: 'unitWeight', value: gamma, rule: 'Unit weight outside 5-28 kN/m³ range', severity: 'warning', correction: 'Typical: 16-22 kN/m³ for soil, 22-27 for rock. Check if value is in wrong units.' });
|
|
38
|
+
if (fs <= 0)
|
|
39
|
+
v.push({ parameter: 'factorOfSafety', value: fs, rule: 'Factor of safety must be positive', severity: 'error', correction: 'Standard: FS=2.5-3.0 for bearing capacity.' });
|
|
40
|
+
if (c === 0 && phi === 0)
|
|
41
|
+
v.push({ parameter: 'frictionAngle+cohesion', value: '0+0', rule: 'Both c=0 and φ=0 gives zero bearing capacity', severity: 'error', correction: 'At least one must be non-zero. Check soil parameters.' });
|
|
42
|
+
return v;
|
|
43
|
+
});
|
|
44
|
+
// --- Liquefaction ---
|
|
45
|
+
guardrails.set('calculate_liquefaction', (args) => {
|
|
46
|
+
const v = [];
|
|
47
|
+
const mw = Number(args.earthquakeMagnitude ?? 0);
|
|
48
|
+
const pga = Number(args.pga ?? 0);
|
|
49
|
+
const layers = args.layers ?? [];
|
|
50
|
+
if (mw < 4 || mw > 9.5)
|
|
51
|
+
v.push({ parameter: 'earthquakeMagnitude', value: mw, rule: 'Magnitude must be 4.0-9.5', severity: 'error', correction: 'Typical design: Mw 6.0-8.0. Check seismic hazard maps for the site.' });
|
|
52
|
+
if (pga <= 0)
|
|
53
|
+
v.push({ parameter: 'pga', value: pga, rule: 'PGA must be positive', severity: 'error', correction: 'Typical range: 0.05-0.6g. Check site seismic hazard analysis.' });
|
|
54
|
+
if (pga > 1.5)
|
|
55
|
+
v.push({ parameter: 'pga', value: pga, rule: 'PGA > 1.5g is extremely rare', severity: 'warning', correction: 'Check units — value should be in g (not m/s² or %g). Max recorded: ~2.7g.' });
|
|
56
|
+
if (layers.length === 0)
|
|
57
|
+
v.push({ parameter: 'layers', value: '[]', rule: 'At least one soil layer required', severity: 'error', correction: 'Provide SPT data: [{depth, sptN, finesContent, unitWeight, waterTableDepth}].' });
|
|
58
|
+
for (let i = 0; i < layers.length; i++) {
|
|
59
|
+
const l = layers[i];
|
|
60
|
+
if (Number(l.sptN) < 0)
|
|
61
|
+
v.push({ parameter: `layers[${i}].sptN`, value: l.sptN, rule: 'SPT N-value cannot be negative', severity: 'error', correction: 'SPT N ≥ 0. Typical range: 0-50+.' });
|
|
62
|
+
if (Number(l.depth) < 0)
|
|
63
|
+
v.push({ parameter: `layers[${i}].depth`, value: l.depth, rule: 'Depth cannot be negative', severity: 'error', correction: 'Depths must be positive, measured from ground surface.' });
|
|
64
|
+
if (Number(l.finesContent) < 0 || Number(l.finesContent) > 100)
|
|
65
|
+
v.push({ parameter: `layers[${i}].finesContent`, value: l.finesContent, rule: 'Fines content must be 0-100%', severity: 'error', correction: 'Percent passing #200 sieve, 0-100.' });
|
|
66
|
+
}
|
|
67
|
+
return v;
|
|
68
|
+
});
|
|
69
|
+
// --- RMR89 ---
|
|
70
|
+
guardrails.set('classify_rmr89', (args) => {
|
|
71
|
+
const v = [];
|
|
72
|
+
const ucs = Number(args.ucs ?? 0);
|
|
73
|
+
const rqd = Number(args.rqd ?? 0);
|
|
74
|
+
if (ucs <= 0)
|
|
75
|
+
v.push({ parameter: 'ucs', value: ucs, rule: 'UCS must be positive', severity: 'error', correction: 'Rock UCS range: 1-250+ MPa. Soil does not use RMR.' });
|
|
76
|
+
if (ucs > 400)
|
|
77
|
+
v.push({ parameter: 'ucs', value: ucs, rule: 'UCS > 400 MPa extremely rare', severity: 'warning', correction: 'Max typical: 250 MPa (granite). Check if value is in correct units (MPa, not kPa).' });
|
|
78
|
+
if (rqd < 0 || rqd > 100)
|
|
79
|
+
v.push({ parameter: 'rqd', value: rqd, rule: 'RQD must be 0-100%', severity: 'error', correction: 'RQD = % of core pieces > 10cm. Range: 0% (very poor) to 100% (excellent).' });
|
|
80
|
+
return v;
|
|
81
|
+
});
|
|
82
|
+
// --- TBM Predict ---
|
|
83
|
+
guardrails.set('predict_tbm_performance', (args) => {
|
|
84
|
+
const v = [];
|
|
85
|
+
const d = Number(args.diameter ?? 0);
|
|
86
|
+
const ucs = Number(args.ucs ?? 0);
|
|
87
|
+
const rqd = Number(args.rqd ?? 0);
|
|
88
|
+
if (d < 1 || d > 20)
|
|
89
|
+
v.push({ parameter: 'diameter', value: d, rule: 'TBM diameter typically 1-17m', severity: d < 0.5 || d > 20 ? 'error' : 'warning', correction: 'Standard range: 2-15m. Micro-TBM: 0.5-2m.' });
|
|
90
|
+
if (ucs <= 0)
|
|
91
|
+
v.push({ parameter: 'ucs', value: ucs, rule: 'UCS must be positive for TBM prediction', severity: 'error', correction: 'Provide rock UCS in MPa.' });
|
|
92
|
+
if (rqd < 0 || rqd > 100)
|
|
93
|
+
v.push({ parameter: 'rqd', value: rqd, rule: 'RQD must be 0-100%', severity: 'error', correction: 'RQD percentage, 0-100.' });
|
|
94
|
+
return v;
|
|
95
|
+
});
|
|
96
|
+
// --- Settlement ---
|
|
97
|
+
guardrails.set('calculate_tunnel_settlement', (args) => {
|
|
98
|
+
const v = [];
|
|
99
|
+
const d = Number(args.tunnelDiameter ?? 0);
|
|
100
|
+
const z = Number(args.tunnelDepth ?? 0);
|
|
101
|
+
const vl = Number(args.volumeLoss ?? 1);
|
|
102
|
+
if (d <= 0)
|
|
103
|
+
v.push({ parameter: 'tunnelDiameter', value: d, rule: 'Diameter must be positive', severity: 'error', correction: 'Tunnel diameter in meters.' });
|
|
104
|
+
if (z <= 0)
|
|
105
|
+
v.push({ parameter: 'tunnelDepth', value: z, rule: 'Tunnel depth must be positive', severity: 'error', correction: 'Depth to tunnel axis from surface.' });
|
|
106
|
+
if (z < d / 2)
|
|
107
|
+
v.push({ parameter: 'tunnelDepth', value: z, rule: 'Tunnel axis depth less than radius — tunnel at surface', severity: 'error', correction: 'Depth must be > diameter/2 for the tunnel to be underground.' });
|
|
108
|
+
if (vl < 0)
|
|
109
|
+
v.push({ parameter: 'volumeLoss', value: vl, rule: 'Volume loss cannot be negative', severity: 'error', correction: 'Typical: 0.5-2.0%. EPB in soft ground: 0.5-1.5%.' });
|
|
110
|
+
if (vl > 10)
|
|
111
|
+
v.push({ parameter: 'volumeLoss', value: vl, rule: 'Volume loss > 10% is catastrophic', severity: 'warning', correction: 'Check units — value should be in percent. Typical: 0.5-3%.' });
|
|
112
|
+
return v;
|
|
113
|
+
});
|
|
114
|
+
// --- Consolidation ---
|
|
115
|
+
guardrails.set('calculate_consolidation', (args) => {
|
|
116
|
+
const v = [];
|
|
117
|
+
const Cc = Number(args.compressionIndex ?? 0);
|
|
118
|
+
const e0 = Number(args.voidRatio ?? 0);
|
|
119
|
+
const H = Number(args.layerThickness ?? 0);
|
|
120
|
+
const dSig = Number(args.stressIncrease ?? 0);
|
|
121
|
+
const sig0 = Number(args.initialEffectiveStress ?? 0);
|
|
122
|
+
if (Cc <= 0)
|
|
123
|
+
v.push({ parameter: 'compressionIndex', value: Cc, rule: 'Cc must be positive', severity: 'error', correction: 'Typical: 0.1-0.4 for clays.' });
|
|
124
|
+
if (Cc > 3)
|
|
125
|
+
v.push({ parameter: 'compressionIndex', value: Cc, rule: 'Cc > 3 unrealistic', severity: 'warning', correction: 'Typical: 0.1-1.5.' });
|
|
126
|
+
if (e0 <= 0)
|
|
127
|
+
v.push({ parameter: 'voidRatio', value: e0, rule: 'Void ratio must be positive', severity: 'error', correction: 'Typical: 0.5-1.5.' });
|
|
128
|
+
if (H <= 0)
|
|
129
|
+
v.push({ parameter: 'layerThickness', value: H, rule: 'Thickness must be positive', severity: 'error', correction: 'In meters.' });
|
|
130
|
+
if (dSig <= 0)
|
|
131
|
+
v.push({ parameter: 'stressIncrease', value: dSig, rule: 'Stress increase must be positive', severity: 'error', correction: 'In kPa.' });
|
|
132
|
+
if (sig0 <= 0)
|
|
133
|
+
v.push({ parameter: 'initialEffectiveStress', value: sig0, rule: 'Initial stress must be positive', severity: 'error', correction: 'In kPa.' });
|
|
134
|
+
return v;
|
|
135
|
+
});
|
|
136
|
+
// --- Schmertmann ---
|
|
137
|
+
guardrails.set('calculate_schmertmann_settlement', (args) => {
|
|
138
|
+
const v = [];
|
|
139
|
+
const q = Number(args.appliedStress ?? 0);
|
|
140
|
+
const B = Number(args.foundationWidth ?? 0);
|
|
141
|
+
const layers = args.layers ?? [];
|
|
142
|
+
if (q <= 0)
|
|
143
|
+
v.push({ parameter: 'appliedStress', value: q, rule: 'Stress must be positive', severity: 'error', correction: 'In kPa.' });
|
|
144
|
+
if (B <= 0)
|
|
145
|
+
v.push({ parameter: 'foundationWidth', value: B, rule: 'Width must be positive', severity: 'error', correction: 'In meters.' });
|
|
146
|
+
if (layers.length === 0)
|
|
147
|
+
v.push({ parameter: 'layers', value: '[]', rule: 'At least one layer required', severity: 'error', correction: 'Provide [{thickness, elasticModulus}].' });
|
|
148
|
+
for (let i = 0; i < layers.length; i++) {
|
|
149
|
+
const l = layers[i];
|
|
150
|
+
if (Number(l.elasticModulus) <= 0)
|
|
151
|
+
v.push({ parameter: `layers[${i}].elasticModulus`, value: l.elasticModulus, rule: 'Es must be positive', severity: 'error', correction: 'In kPa.' });
|
|
152
|
+
}
|
|
153
|
+
return v;
|
|
154
|
+
});
|
|
155
|
+
// --- USCS ---
|
|
156
|
+
guardrails.set('classify_uscs', (args) => {
|
|
157
|
+
const v = [];
|
|
158
|
+
const g = Number(args.gravelPercent ?? 0);
|
|
159
|
+
const s = Number(args.sandPercent ?? 0);
|
|
160
|
+
const f = Number(args.finesPercent ?? 0);
|
|
161
|
+
const total = g + s + f;
|
|
162
|
+
if (Math.abs(total - 100) > 5)
|
|
163
|
+
v.push({ parameter: 'gravel+sand+fines', value: total, rule: 'Grain size fractions should sum to ~100%', severity: Math.abs(total - 100) > 15 ? 'error' : 'warning', correction: `Current sum: ${total}%. Adjust fractions to total 100%.` });
|
|
164
|
+
if (g < 0 || s < 0 || f < 0)
|
|
165
|
+
v.push({ parameter: 'fractions', value: `${g}/${s}/${f}`, rule: 'Grain size fractions cannot be negative', severity: 'error', correction: 'All fractions must be 0-100%.' });
|
|
166
|
+
return v;
|
|
167
|
+
});
|
|
168
|
+
// ---------------------------------------------------------------------------
|
|
169
|
+
// Main validation function — called before every tool execution
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
// --- Pile Capacity ---
|
|
172
|
+
guardrails.set('calculate_pile_capacity', (args) => {
|
|
173
|
+
const v = [];
|
|
174
|
+
const d = Number(args.pileDiameter ?? 0);
|
|
175
|
+
const l = Number(args.pileLength ?? 0);
|
|
176
|
+
const layers = args.layers ?? [];
|
|
177
|
+
if (d <= 0 || d > 5)
|
|
178
|
+
v.push({ parameter: 'pileDiameter', value: d, rule: 'Pile diameter must be 0.1-5m', severity: d <= 0 ? 'error' : 'warning', correction: 'Typical: 0.3-2.5m. Micro-piles: 0.1-0.3m. Large bored: 1.5-3m.' });
|
|
179
|
+
if (l <= 0)
|
|
180
|
+
v.push({ parameter: 'pileLength', value: l, rule: 'Pile length must be positive', severity: 'error', correction: 'Typical: 5-50m.' });
|
|
181
|
+
if (l > 80)
|
|
182
|
+
v.push({ parameter: 'pileLength', value: l, rule: 'Pile length > 80m is extremely long', severity: 'warning', correction: 'Typical: 10-40m. Very long piles may require special analysis.' });
|
|
183
|
+
if (layers.length === 0)
|
|
184
|
+
v.push({ parameter: 'layers', value: '[]', rule: 'At least one soil layer required', severity: 'error', correction: 'Provide [{thickness, soilType, undrained_shear_strength or friction_angle, unit_weight}].' });
|
|
185
|
+
if (d > 0 && l > 0 && l / d < 5)
|
|
186
|
+
v.push({ parameter: 'pileLength/diameter', value: l / d, rule: 'L/D < 5 is a short pier, not a pile', severity: 'warning', correction: 'Piles typically have L/D > 10. Short piers use bearing capacity theory.' });
|
|
187
|
+
return v;
|
|
188
|
+
});
|
|
189
|
+
// --- Slope Stability ---
|
|
190
|
+
guardrails.set('calculate_slope_stability', (args) => {
|
|
191
|
+
const v = [];
|
|
192
|
+
const h = Number(args.slopeHeight ?? 0);
|
|
193
|
+
const angle = Number(args.slopeAngle ?? 0);
|
|
194
|
+
const layers = args.soilLayers ?? [];
|
|
195
|
+
const kh = Number(args.seismicCoefficient ?? 0);
|
|
196
|
+
if (h <= 0)
|
|
197
|
+
v.push({ parameter: 'slopeHeight', value: h, rule: 'Slope height must be positive', severity: 'error', correction: 'In meters.' });
|
|
198
|
+
if (h > 200)
|
|
199
|
+
v.push({ parameter: 'slopeHeight', value: h, rule: 'Slope height > 200m is unusual for circular analysis', severity: 'warning', correction: 'Very high slopes may need rock mechanics analysis instead.' });
|
|
200
|
+
if (angle <= 0 || angle >= 90)
|
|
201
|
+
v.push({ parameter: 'slopeAngle', value: angle, rule: 'Slope angle must be 1-89 degrees', severity: 'error', correction: 'Typical cut slopes: 30-60°. Natural slopes: 15-45°.' });
|
|
202
|
+
if (layers.length === 0)
|
|
203
|
+
v.push({ parameter: 'soilLayers', value: '[]', rule: 'At least one soil layer required', severity: 'error', correction: 'Provide [{thickness, unitWeight, cohesion, frictionAngle}].' });
|
|
204
|
+
if (kh > 0.5)
|
|
205
|
+
v.push({ parameter: 'seismicCoefficient', value: kh, rule: 'kh > 0.5 is extremely high', severity: 'warning', correction: 'Typical pseudo-static kh: 0.05-0.3. Check seismic hazard for the site.' });
|
|
206
|
+
for (let i = 0; i < layers.length; i++) {
|
|
207
|
+
const l = layers[i];
|
|
208
|
+
if (Number(l.cohesion ?? 0) === 0 && Number(l.frictionAngle ?? 0) === 0) {
|
|
209
|
+
v.push({ parameter: `soilLayers[${i}]`, value: 'c=0,φ=0', rule: 'Both c=0 and φ=0 gives zero shear strength', severity: 'error', correction: 'At least one must be non-zero.' });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return v;
|
|
213
|
+
});
|
|
214
|
+
// --- Lateral Earth Pressure ---
|
|
215
|
+
guardrails.set('calculate_lateral_earth_pressure', (args) => {
|
|
216
|
+
const v = [];
|
|
217
|
+
const h = Number(args.wallHeight ?? 0);
|
|
218
|
+
const layers = args.soilLayers ?? [];
|
|
219
|
+
const delta = Number(args.wallFrictionAngle ?? 0);
|
|
220
|
+
if (h <= 0)
|
|
221
|
+
v.push({ parameter: 'wallHeight', value: h, rule: 'Wall height must be positive', severity: 'error', correction: 'In meters.' });
|
|
222
|
+
if (h > 30)
|
|
223
|
+
v.push({ parameter: 'wallHeight', value: h, rule: 'Wall height > 30m requires special analysis', severity: 'warning', correction: 'Very tall walls may need anchored or tieback analysis.' });
|
|
224
|
+
if (layers.length === 0)
|
|
225
|
+
v.push({ parameter: 'soilLayers', value: '[]', rule: 'At least one soil layer required', severity: 'error', correction: 'Provide [{thickness, unitWeight, cohesion, frictionAngle}].' });
|
|
226
|
+
if (delta > 0) {
|
|
227
|
+
const phi = layers[0] ? Number(layers[0].frictionAngle ?? 30) : 30;
|
|
228
|
+
if (delta > phi)
|
|
229
|
+
v.push({ parameter: 'wallFrictionAngle', value: delta, rule: 'δ cannot exceed soil φ', severity: 'error', correction: `Max δ = φ = ${phi}°. Typical: δ = 2/3 × φ.` });
|
|
230
|
+
}
|
|
231
|
+
return v;
|
|
232
|
+
});
|
|
233
|
+
export function validateToolArgs(toolName, args) {
|
|
234
|
+
const fn = guardrails.get(toolName);
|
|
235
|
+
if (!fn) {
|
|
236
|
+
return { passed: true, violations: [] };
|
|
237
|
+
}
|
|
238
|
+
const violations = fn(args);
|
|
239
|
+
const hasErrors = violations.some((v) => v.severity === 'error');
|
|
240
|
+
return {
|
|
241
|
+
passed: !hasErrors,
|
|
242
|
+
violations,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Format violations as a string the agent can read and act on.
|
|
247
|
+
*/
|
|
248
|
+
export function formatViolations(result) {
|
|
249
|
+
if (result.passed && result.violations.length === 0)
|
|
250
|
+
return '';
|
|
251
|
+
const lines = result.violations.map((v) => {
|
|
252
|
+
const icon = v.severity === 'error' ? '🚫' : '⚠️';
|
|
253
|
+
return `${icon} ${v.parameter} = ${v.value}: ${v.rule}\n Fix: ${v.correction}`;
|
|
254
|
+
});
|
|
255
|
+
const header = result.passed
|
|
256
|
+
? 'GUARDRAIL WARNINGS (proceeding with caution):'
|
|
257
|
+
: 'GUARDRAIL BLOCKED — fix these errors before executing:';
|
|
258
|
+
return `${header}\n${lines.join('\n')}`;
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=guardrails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails.js","sourceRoot":"","sources":["../../src/agents/guardrails.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,iDAAiD;AACjD,EAAE;AACF,yDAAyD;AACzD,gFAAgF;AAChF,qEAAqE;AACrE,wCAAwC;AACxC,EAAE;AACF,qEAAqE;AACrE,4BAA4B;AAC5B,8EAA8E;AAqB9E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;AAElD,2BAA2B;AAC3B,UAAU,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC,IAAI,EAAE,EAAE;IACpD,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;IAE5C,IAAI,GAAG,GAAG,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,mCAAmC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,wEAAwE,EAAE,CAAC,CAAC;IACpN,IAAI,GAAG,GAAG,EAAE;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,uDAAuD,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,8EAA8E,EAAE,CAAC,CAAC;IAC/O,IAAI,CAAC,GAAG,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,wDAAwD,EAAE,CAAC,CAAC;IACrL,IAAI,CAAC,GAAG,GAAG;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,yDAAyD,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,4EAA4E,EAAE,CAAC,CAAC;IACzO,IAAI,KAAK,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,kCAAkC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,+DAA+D,EAAE,CAAC,CAAC;IACvM,IAAI,KAAK,GAAG,EAAE;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,uDAAuD,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,0DAA0D,EAAE,CAAC,CAAC;IACzN,IAAI,KAAK,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,mCAAmC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,wCAAwC,EAAE,CAAC,CAAC;IACjL,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,sCAAsC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,kFAAkF,EAAE,CAAC,CAAC;IAClP,IAAI,EAAE,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,4CAA4C,EAAE,CAAC,CAAC;IACxL,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,8CAA8C,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,uDAAuD,EAAE,CAAC,CAAC;IAEtO,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,uBAAuB;AACvB,UAAU,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,EAAE;IAChD,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,MAAM,GAAI,IAAI,CAAC,MAAgB,IAAI,EAAE,CAAC;IAE5C,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,qEAAqE,EAAE,CAAC,CAAC;IACzN,IAAI,GAAG,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,+DAA+D,EAAE,CAAC,CAAC;IACrL,IAAI,GAAG,GAAG,GAAG;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,2EAA2E,EAAE,CAAC,CAAC;IAC5M,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,kCAAkC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,+EAA+E,EAAE,CAAC,CAAC;IAEhO,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,gCAAgC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,kCAAkC,EAAE,CAAC,CAAC;QAC7L,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,wDAAwD,EAAE,CAAC,CAAC;QAChN,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,GAAG;YAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,oCAAoC,EAAE,CAAC,CAAC;IACvP,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,gBAAgB;AAChB,UAAU,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE;IACxC,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAElC,IAAI,GAAG,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,oDAAoD,EAAE,CAAC,CAAC;IAC1K,IAAI,GAAG,GAAG,GAAG;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,oFAAoF,EAAE,CAAC,CAAC;IACrN,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,2EAA2E,EAAE,CAAC,CAAC;IAE3M,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,sBAAsB;AACtB,UAAU,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;IACjD,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAElC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,2CAA2C,EAAE,CAAC,CAAC;IACnN,IAAI,GAAG,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,yCAAyC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,CAAC,CAAC;IACnK,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAExJ,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,qBAAqB;AACrB,UAAU,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC,IAAI,EAAE,EAAE;IACrD,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;IAExC,IAAI,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAC9J,IAAI,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,oCAAoC,EAAE,CAAC,CAAC;IACvK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,wDAAwD,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,8DAA8D,EAAE,CAAC,CAAC;IAC7N,IAAI,EAAE,GAAG,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,kDAAkD,EAAE,CAAC,CAAC;IACtL,IAAI,EAAE,GAAG,EAAE;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,4DAA4D,EAAE,CAAC,CAAC;IAEtM,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,wBAAwB;AACxB,UAAU,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;IACjD,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,CAAC,CAAC;IACtD,IAAI,EAAE,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,6BAA6B,EAAE,CAAC,CAAC;IAC7J,IAAI,EAAE,GAAG,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACnJ,IAAI,EAAE,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACpJ,IAAI,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC/I,IAAI,IAAI,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,kCAAkC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IACxJ,IAAI,IAAI,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,iCAAiC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/J,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,sBAAsB;AACtB,UAAU,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,IAAI,EAAE,EAAE;IAC1D,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAI,IAAI,CAAC,MAAgB,IAAI,EAAE,CAAC;IAC5C,IAAI,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IACxI,IAAI,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5I,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,6BAA6B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,wCAAwC,EAAE,CAAC,CAAC;IACpL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1L,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,eAAe;AACf,UAAU,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;IACvC,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAExB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,0CAA0C,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,gBAAgB,KAAK,oCAAoC,EAAE,CAAC,CAAC;IAC7Q,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,yCAAyC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAE1M,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAG9E,wBAAwB;AACxB,UAAU,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,EAAE;IACjD,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;IACvC,MAAM,MAAM,GAAI,IAAI,CAAC,MAAgB,IAAI,EAAE,CAAC;IAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,gEAAgE,EAAE,CAAC,CAAC;IACjO,IAAI,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAClJ,IAAI,CAAC,GAAG,EAAE;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,qCAAqC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,gEAAgE,EAAE,CAAC,CAAC;IAC1M,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,kCAAkC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,2FAA2F,EAAE,CAAC,CAAC;IAC5O,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,qCAAqC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,yEAAyE,EAAE,CAAC,CAAC;IACrP,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,0BAA0B;AAC1B,UAAU,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,IAAI,EAAE,EAAE;IACnD,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAI,IAAI,CAAC,UAAoB,IAAI,EAAE,CAAC;IAChD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC/I,IAAI,CAAC,GAAG,GAAG;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,sDAAsD,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,4DAA4D,EAAE,CAAC,CAAC;IACzN,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,kCAAkC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,qDAAqD,EAAE,CAAC,CAAC;IACjN,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,kCAAkC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,6DAA6D,EAAE,CAAC,CAAC;IAClN,IAAI,EAAE,GAAG,GAAG;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,wEAAwE,EAAE,CAAC,CAAC;IACpN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,4CAA4C,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,gCAAgC,EAAE,CAAC,CAAC;QACnL,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,iCAAiC;AACjC,UAAU,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,IAAI,EAAE,EAAE;IAC1D,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;IACvC,MAAM,MAAM,GAAI,IAAI,CAAC,UAAoB,IAAI,EAAE,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC7I,IAAI,CAAC,GAAG,EAAE;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,6CAA6C,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,wDAAwD,EAAE,CAAC,CAAC;IAC1M,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,kCAAkC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,6DAA6D,EAAE,CAAC,CAAC;IAClN,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAE,MAAM,CAAC,CAAC,CAAS,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAI,KAAK,GAAG,GAAG;YAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,GAAG,0BAA0B,EAAE,CAAC,CAAC;IACzL,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,IAA6B;IAC9E,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAEjE,OAAO;QACL,MAAM,EAAE,CAAC,SAAS;QAClB,UAAU;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE/D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;QAC1B,CAAC,CAAC,+CAA+C;QACjD,CAAC,CAAC,wDAAwD,CAAC;IAE7D,OAAO,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LLMConfig } from '../llm/types.js';
|
|
2
|
+
export interface AgentLog {
|
|
3
|
+
agent: string;
|
|
4
|
+
message: string;
|
|
5
|
+
type: 'thought' | 'action' | 'result' | 'error';
|
|
6
|
+
timestamp: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function runMultiAgentTask(task: string, config: LLMConfig, onLog: (log: AgentLog) => void, maxIterations?: number): Promise<string>;
|
|
9
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAsB,MAAM,iBAAiB,CAAC;AAGrE,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB;AAwDD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,EAC9B,aAAa,SAAI,GAChB,OAAO,CAAC,MAAM,CAAC,CAsGjB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { generateText } from '../llm/router.js';
|
|
2
|
+
const AGENTS = [
|
|
3
|
+
{
|
|
4
|
+
name: 'Geo Agent',
|
|
5
|
+
tag: '@geo-agent',
|
|
6
|
+
systemPrompt: `You are a specialist geotechnical engineer. You analyze soil mechanics, rock mechanics, bearing capacity, settlement, classification (USCS, AASHTO), and site investigation data. Provide precise numerical answers with standard references (Terzaghi, Meyerhof, Lambe & Whitman). Always state assumptions and applicable standards.`,
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: 'Tunnel Agent',
|
|
10
|
+
tag: '@tunnel-agent',
|
|
11
|
+
systemPrompt: `You are a specialist tunnel engineer. You advise on NATM/conventional tunneling, TBM selection and performance, support design (shotcrete, rockbolts, steel sets), convergence-confinement method, lining design, and underground space planning. Reference Bieniawski, Barton, Hoek-Brown, and AFTES/ITA guidelines.`,
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'Hydro Agent',
|
|
15
|
+
tag: '@hydro-agent',
|
|
16
|
+
systemPrompt: `You are a specialist hydrogeologist. You analyze groundwater flow, seepage, dewatering design, pore pressure prediction, permeability testing interpretation (Lugeon, slug tests), and contamination transport. Reference Darcy's law, flow net theory, and Theis/Cooper-Jacob solutions.`,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'Seismic Agent',
|
|
20
|
+
tag: '@seismic-agent',
|
|
21
|
+
systemPrompt: `You are a specialist seismic/earthquake engineer. You analyze liquefaction triggering (Boulanger & Idriss, Seed & Idriss), seismic site response, ground motion parameters, dynamic soil properties, and earthquake-induced settlement and lateral spreading. Reference NCEER, Eurocode 8, and ASCE 7.`,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'Slope Agent',
|
|
25
|
+
tag: '@slope-agent',
|
|
26
|
+
systemPrompt: `You are a specialist slope stability engineer. You perform limit equilibrium analysis (Bishop, Spencer, Morgenstern-Price), evaluate landslide risk, design retaining structures, and analyze reinforced slopes and soil nails. Reference Duncan & Wright, FHWA guidelines.`,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'Foundation Agent',
|
|
30
|
+
tag: '@foundation-agent',
|
|
31
|
+
systemPrompt: `You are a specialist foundation engineer. You design shallow and deep foundations, analyze pile capacity (static and dynamic), evaluate group effects, design pile caps, and perform serviceability checks. Reference API RP 2GEO, FHWA, and relevant building codes.`,
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
const ORCHESTRATOR_SYSTEM = `You are the geotechCLI Orchestrator. You decompose complex geotechnical engineering tasks into sub-tasks for specialized agents.
|
|
35
|
+
|
|
36
|
+
Available agents:
|
|
37
|
+
${AGENTS.map((a) => `- ${a.tag}: ${a.name}`).join('\n')}
|
|
38
|
+
|
|
39
|
+
Instructions:
|
|
40
|
+
1. Analyze the user's task and determine which agent(s) to call.
|
|
41
|
+
2. To call an agent, output EXACTLY this JSON block:
|
|
42
|
+
\`\`\`json
|
|
43
|
+
{"action":"call_agent","agent":"@geo-agent","query":"your specific question"}
|
|
44
|
+
\`\`\`
|
|
45
|
+
3. Call one agent at a time. Wait for results before proceeding.
|
|
46
|
+
4. After gathering all needed information, write a final comprehensive engineering report in markdown. Do NOT include any JSON block in the final report.
|
|
47
|
+
5. Always include numerical results, applicable standards, and recommendations.`;
|
|
48
|
+
export async function runMultiAgentTask(task, config, onLog, maxIterations = 6) {
|
|
49
|
+
onLog({
|
|
50
|
+
agent: 'Orchestrator',
|
|
51
|
+
message: `Planning: "${task}"`,
|
|
52
|
+
type: 'thought',
|
|
53
|
+
timestamp: Date.now(),
|
|
54
|
+
});
|
|
55
|
+
let conversationHistory = `Task: ${task}\n\n`;
|
|
56
|
+
let finalReport = '';
|
|
57
|
+
for (let i = 0; i < maxIterations; i++) {
|
|
58
|
+
let response;
|
|
59
|
+
try {
|
|
60
|
+
response = await generateText(conversationHistory, config, {
|
|
61
|
+
systemPrompt: ORCHESTRATOR_SYSTEM,
|
|
62
|
+
temperature: 0.3,
|
|
63
|
+
maxTokens: 2048,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
onLog({
|
|
68
|
+
agent: 'System',
|
|
69
|
+
message: `LLM error: ${err instanceof Error ? err.message : String(err)}`,
|
|
70
|
+
type: 'error',
|
|
71
|
+
timestamp: Date.now(),
|
|
72
|
+
});
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
const text = response.text;
|
|
76
|
+
// Check for agent call JSON block
|
|
77
|
+
const jsonMatch = text.match(/```json\s*\n?([\s\S]*?)\n?```/);
|
|
78
|
+
if (jsonMatch) {
|
|
79
|
+
try {
|
|
80
|
+
const action = JSON.parse(jsonMatch[1]);
|
|
81
|
+
if (action.action === 'call_agent' && action.agent && action.query) {
|
|
82
|
+
const agentDef = AGENTS.find((a) => a.tag === action.agent);
|
|
83
|
+
if (!agentDef) {
|
|
84
|
+
conversationHistory += `\nOrchestrator:\n${text}\n\nError: Unknown agent "${action.agent}". Available: ${AGENTS.map((a) => a.tag).join(', ')}\n\n`;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
onLog({
|
|
88
|
+
agent: 'Orchestrator',
|
|
89
|
+
message: `Delegating to ${agentDef.name}: "${action.query}"`,
|
|
90
|
+
type: 'action',
|
|
91
|
+
timestamp: Date.now(),
|
|
92
|
+
});
|
|
93
|
+
const agentResponse = await generateText(action.query, config, {
|
|
94
|
+
systemPrompt: agentDef.systemPrompt,
|
|
95
|
+
temperature: 0.2,
|
|
96
|
+
maxTokens: 2048,
|
|
97
|
+
});
|
|
98
|
+
const result = agentResponse.text;
|
|
99
|
+
onLog({
|
|
100
|
+
agent: agentDef.name,
|
|
101
|
+
message: result.slice(0, 200) + (result.length > 200 ? '...' : ''),
|
|
102
|
+
type: 'result',
|
|
103
|
+
timestamp: Date.now(),
|
|
104
|
+
});
|
|
105
|
+
conversationHistory += `\nOrchestrator:\n${text}\n\nResult from ${agentDef.name}:\n${result}\n\nContinue analysis. Call another agent or provide final report.\n`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
conversationHistory += `\nOrchestrator:\n${text}\n\nError: Invalid JSON. Please output valid JSON for agent calls.\n`;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// No JSON block — this is the final report
|
|
114
|
+
finalReport = text;
|
|
115
|
+
onLog({
|
|
116
|
+
agent: 'Orchestrator',
|
|
117
|
+
message: 'Final report synthesized.',
|
|
118
|
+
type: 'thought',
|
|
119
|
+
timestamp: Date.now(),
|
|
120
|
+
});
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!finalReport) {
|
|
125
|
+
onLog({
|
|
126
|
+
agent: 'Orchestrator',
|
|
127
|
+
message: 'Max iterations reached. Synthesizing partial findings.',
|
|
128
|
+
type: 'thought',
|
|
129
|
+
timestamp: Date.now(),
|
|
130
|
+
});
|
|
131
|
+
const fallback = await generateText(conversationHistory + '\n\nProvide the final report now based on all gathered information.', config, { systemPrompt: ORCHESTRATOR_SYSTEM, maxTokens: 3000 });
|
|
132
|
+
finalReport = fallback.text;
|
|
133
|
+
}
|
|
134
|
+
return finalReport;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ToolSafetyIssue {
|
|
2
|
+
parseStatus?: string;
|
|
3
|
+
confidence?: number;
|
|
4
|
+
warnings: string[];
|
|
5
|
+
message: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function extractToolSafetyIssue(data: unknown): ToolSafetyIssue | null;
|
|
8
|
+
export declare function serializeContextForPrompt(context: Record<string, unknown> | undefined, maxChars?: number): string | null;
|
|
9
|
+
//# sourceMappingURL=safety.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/agents/safety.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CA+B5E;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,QAAQ,SAAO,GACd,MAAM,GAAG,IAAI,CAMf"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
export function extractToolSafetyIssue(data) {
|
|
5
|
+
if (!isRecord(data))
|
|
6
|
+
return null;
|
|
7
|
+
if (data.canAutoProceed !== false)
|
|
8
|
+
return null;
|
|
9
|
+
const warnings = Array.isArray(data.warnings)
|
|
10
|
+
? data.warnings
|
|
11
|
+
.map((warning) => (typeof warning === 'string' ? warning.trim() : ''))
|
|
12
|
+
.filter(Boolean)
|
|
13
|
+
: [];
|
|
14
|
+
const parseStatus = typeof data.parseStatus === 'string' ? data.parseStatus : undefined;
|
|
15
|
+
const confidence = typeof data.confidence === 'number' && Number.isFinite(data.confidence)
|
|
16
|
+
? Math.max(0, Math.min(100, Math.round(data.confidence)))
|
|
17
|
+
: undefined;
|
|
18
|
+
const parts = [
|
|
19
|
+
parseStatus ? `parse status ${parseStatus}` : null,
|
|
20
|
+
confidence != null ? `confidence ${confidence}%` : null,
|
|
21
|
+
warnings.length > 0 ? `warnings: ${warnings.join('; ')}` : null,
|
|
22
|
+
].filter((part) => Boolean(part));
|
|
23
|
+
return {
|
|
24
|
+
parseStatus,
|
|
25
|
+
confidence,
|
|
26
|
+
warnings,
|
|
27
|
+
message: parts.length > 0
|
|
28
|
+
? `Tool returned blocked low-confidence output (${parts.join(', ')}).`
|
|
29
|
+
: 'Tool returned blocked low-confidence output.',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function serializeContextForPrompt(context, maxChars = 6000) {
|
|
33
|
+
if (!context || Object.keys(context).length === 0)
|
|
34
|
+
return null;
|
|
35
|
+
const serialized = JSON.stringify(context);
|
|
36
|
+
if (serialized.length <= maxChars)
|
|
37
|
+
return serialized;
|
|
38
|
+
return `${serialized.slice(0, maxChars)}...(truncated)`;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=safety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/agents/safety.ts"],"names":[],"mappings":"AAOA,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC,QAAQ;aACZ,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACrE,MAAM,CAAC,OAAO,CAAC;QAClB,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,UAAU,GACd,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,KAAK,GAAG;QACZ,WAAW,CAAC,CAAC,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;QAClD,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,cAAc,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI;QACvD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;KAChE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAElD,OAAO;QACL,WAAW;QACX,UAAU;QACV,QAAQ;QACR,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,gDAAgD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACtE,CAAC,CAAC,8CAA8C;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAA4C,EAC5C,QAAQ,GAAG,IAAI;IAEf,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,UAAU,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,UAAU,CAAC;IACrD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface SandboxCheck {
|
|
2
|
+
safe: boolean;
|
|
3
|
+
resolved: string;
|
|
4
|
+
error?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function ensureWorkspace(): string;
|
|
7
|
+
export declare function getWorkspaceDir(): string;
|
|
8
|
+
/**
|
|
9
|
+
* Validate that a path is inside an allowed zone and does not target
|
|
10
|
+
* sensitive files. Call this BEFORE any read/write/list operation.
|
|
11
|
+
*
|
|
12
|
+
* Allowed zones:
|
|
13
|
+
* - process.cwd() and its children
|
|
14
|
+
* - WORKSPACE_DIR and its children
|
|
15
|
+
* - Any additional directories passed in `extraAllowed`
|
|
16
|
+
*
|
|
17
|
+
* For WRITE operations, pass mode='write' to additionally block
|
|
18
|
+
* the config directory itself (only workspace subdir is writable).
|
|
19
|
+
*/
|
|
20
|
+
export declare function validatePath(targetPath: string, mode?: 'read' | 'write', extraAllowed?: string[]): SandboxCheck;
|
|
21
|
+
/**
|
|
22
|
+
* Convenience: validate for reading.
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateReadPath(targetPath: string, extraAllowed?: string[]): SandboxCheck;
|
|
25
|
+
/**
|
|
26
|
+
* Convenience: validate for writing.
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateWritePath(targetPath: string, extraAllowed?: string[]): SandboxCheck;
|
|
29
|
+
/**
|
|
30
|
+
* Validate a shell command for safety.
|
|
31
|
+
* Returns the sanitized command or an error.
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateShellCommand(command: string): SandboxCheck;
|
|
34
|
+
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/agents/sandbox.ts"],"names":[],"mappings":"AAsEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAM,GAAG,OAAgB,EAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,YAAY,CAqFd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,CAE1F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,CAE3F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CA4DlE"}
|