@elsium-ai/cli 0.12.0 → 0.12.1
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/cli.js +60 -23
- package/package.json +4 -4
package/dist/cli.js
CHANGED
|
@@ -6023,6 +6023,15 @@ function createWorkerSandboxRunner(config, defaultTimeoutMs) {
|
|
|
6023
6023
|
}
|
|
6024
6024
|
|
|
6025
6025
|
// ../tools/src/define.ts
|
|
6026
|
+
var log7 = createLogger();
|
|
6027
|
+
var IS_BUN = typeof globalThis.Bun !== "undefined" || typeof process !== "undefined" && Boolean(process.versions.bun);
|
|
6028
|
+
var bunSandboxWarningShown = false;
|
|
6029
|
+
function warnBunSandboxOnce(toolName) {
|
|
6030
|
+
if (bunSandboxWarningShown)
|
|
6031
|
+
return;
|
|
6032
|
+
bunSandboxWarningShown = true;
|
|
6033
|
+
log7.warn(`Tool "${toolName}" uses sandbox.mode="worker" under Bun. Crash isolation is incomplete on Bun: process.exit() inside the handler does NOT terminate the worker (it does on Node). Other guarantees (process, memory, closure-state, timeout, abort) hold. Track: https://github.com/elsium-ai/elsium-ai/issues — search for "Bun crash isolation".`);
|
|
6034
|
+
}
|
|
6026
6035
|
function formatZodErrors(error) {
|
|
6027
6036
|
return error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join(", ");
|
|
6028
6037
|
}
|
|
@@ -6042,6 +6051,30 @@ function buildExecutionSuccess(toolCallId, startTime, data) {
|
|
|
6042
6051
|
durationMs: Math.round(performance.now() - startTime)
|
|
6043
6052
|
};
|
|
6044
6053
|
}
|
|
6054
|
+
function wireUserSignalToController(controller, userSignal) {
|
|
6055
|
+
if (!userSignal)
|
|
6056
|
+
return;
|
|
6057
|
+
if (userSignal.aborted) {
|
|
6058
|
+
controller.abort();
|
|
6059
|
+
return;
|
|
6060
|
+
}
|
|
6061
|
+
userSignal.addEventListener("abort", () => controller.abort(), { once: true });
|
|
6062
|
+
}
|
|
6063
|
+
function createAbortRejection(signal, isTimeout, name, timeoutMs) {
|
|
6064
|
+
return new Promise((_, reject) => {
|
|
6065
|
+
signal.addEventListener("abort", () => {
|
|
6066
|
+
if (isTimeout()) {
|
|
6067
|
+
reject(ElsiumError.timeout(name, timeoutMs));
|
|
6068
|
+
} else {
|
|
6069
|
+
reject(new ElsiumError({
|
|
6070
|
+
code: "TOOL_ERROR",
|
|
6071
|
+
message: `Tool "${name}" was aborted`,
|
|
6072
|
+
retryable: false
|
|
6073
|
+
}));
|
|
6074
|
+
}
|
|
6075
|
+
}, { once: true });
|
|
6076
|
+
});
|
|
6077
|
+
}
|
|
6045
6078
|
function defineTool(config) {
|
|
6046
6079
|
const input = config.input ?? config.parameters;
|
|
6047
6080
|
if (!input) {
|
|
@@ -6053,6 +6086,9 @@ function defineTool(config) {
|
|
|
6053
6086
|
if (config.sandbox && config.sandbox.mode !== "worker") {
|
|
6054
6087
|
throw ElsiumError.validation(`Tool "${config.name}" sandbox.mode must be "worker" (received "${config.sandbox.mode}")`);
|
|
6055
6088
|
}
|
|
6089
|
+
if (config.sandbox && IS_BUN) {
|
|
6090
|
+
warnBunSandboxOnce(config.name);
|
|
6091
|
+
}
|
|
6056
6092
|
const { name, description, output, sandbox, timeoutMs = 30000 } = config;
|
|
6057
6093
|
const handler = config.handler;
|
|
6058
6094
|
let sandboxRunner = null;
|
|
@@ -6090,20 +6126,21 @@ function defineTool(config) {
|
|
|
6090
6126
|
return buildExecutionFailure(toolCallId, startTime, `Invalid input: ${formatZodErrors(parsed.error)}`);
|
|
6091
6127
|
}
|
|
6092
6128
|
const controller = new AbortController;
|
|
6093
|
-
|
|
6129
|
+
let timedOut = false;
|
|
6130
|
+
const timer = setTimeout(() => {
|
|
6131
|
+
timedOut = true;
|
|
6132
|
+
controller.abort();
|
|
6133
|
+
}, timeoutMs);
|
|
6134
|
+
wireUserSignalToController(controller, partialCtx?.signal);
|
|
6094
6135
|
const context = {
|
|
6095
6136
|
toolCallId,
|
|
6096
6137
|
traceId: partialCtx?.traceId,
|
|
6097
|
-
signal:
|
|
6138
|
+
signal: controller.signal
|
|
6098
6139
|
};
|
|
6099
6140
|
try {
|
|
6100
6141
|
const result = await Promise.race([
|
|
6101
6142
|
runHandler(parsed.data, context),
|
|
6102
|
-
|
|
6103
|
-
context.signal?.addEventListener("abort", () => {
|
|
6104
|
-
reject(ElsiumError.timeout(name, timeoutMs));
|
|
6105
|
-
});
|
|
6106
|
-
})
|
|
6143
|
+
createAbortRejection(controller.signal, () => timedOut, name, timeoutMs)
|
|
6107
6144
|
]);
|
|
6108
6145
|
if (output) {
|
|
6109
6146
|
const validated = output.safeParse(result);
|
|
@@ -10462,7 +10499,7 @@ init_src();
|
|
|
10462
10499
|
init_src();
|
|
10463
10500
|
import { createRequire } from "node:module";
|
|
10464
10501
|
var require2 = createRequire(import.meta.url);
|
|
10465
|
-
var
|
|
10502
|
+
var log8 = createLogger();
|
|
10466
10503
|
var BLOCKED_KEYS2 = new Set(["__proto__", "constructor", "prototype"]);
|
|
10467
10504
|
// ../agents/src/stores/integrity.ts
|
|
10468
10505
|
var ZERO_HASH = "0".repeat(64);
|
|
@@ -10472,7 +10509,7 @@ init_src();
|
|
|
10472
10509
|
init_src();
|
|
10473
10510
|
// ../agents/src/async-agent.ts
|
|
10474
10511
|
init_src();
|
|
10475
|
-
var
|
|
10512
|
+
var log9 = createLogger();
|
|
10476
10513
|
// ../agents/src/session.ts
|
|
10477
10514
|
init_src();
|
|
10478
10515
|
// ../agents/src/react.ts
|
|
@@ -10495,7 +10532,7 @@ var vectorStoreRegistry = createRegistry("vectorStore");
|
|
|
10495
10532
|
init_src();
|
|
10496
10533
|
import { createRequire as createRequire2 } from "node:module";
|
|
10497
10534
|
var require3 = createRequire2(import.meta.url);
|
|
10498
|
-
var
|
|
10535
|
+
var log10 = createLogger();
|
|
10499
10536
|
var BLOCKED_KEYS3 = new Set(["__proto__", "constructor", "prototype"]);
|
|
10500
10537
|
// ../rag/src/stores/qdrant.ts
|
|
10501
10538
|
init_src();
|
|
@@ -10710,13 +10747,13 @@ init_src();
|
|
|
10710
10747
|
init_src();
|
|
10711
10748
|
// ../observe/src/tracer.ts
|
|
10712
10749
|
init_src();
|
|
10713
|
-
var
|
|
10750
|
+
var log11 = createLogger();
|
|
10714
10751
|
// ../observe/src/audit.ts
|
|
10715
10752
|
import { createHash as createHash5 } from "node:crypto";
|
|
10716
10753
|
|
|
10717
10754
|
// ../observe/src/audit-sink.ts
|
|
10718
10755
|
init_src();
|
|
10719
|
-
var
|
|
10756
|
+
var log12 = createLogger();
|
|
10720
10757
|
function getRetryDelay2(attempt, baseDelayMs, maxDelayMs) {
|
|
10721
10758
|
const delay = Math.min(baseDelayMs * 2 ** attempt, maxDelayMs);
|
|
10722
10759
|
return delay * (0.5 + Math.random() * 0.5);
|
|
@@ -10744,14 +10781,14 @@ async function deliverToSink(sink, events, retryConfig, deadLetterSink, onError)
|
|
|
10744
10781
|
try {
|
|
10745
10782
|
await sendWithRetry(sink, filtered, retryConfig);
|
|
10746
10783
|
} catch (error) {
|
|
10747
|
-
|
|
10784
|
+
log12.error("Audit sink delivery failed", { sink: sink.name });
|
|
10748
10785
|
onError?.(sink.name, error);
|
|
10749
10786
|
if (!deadLetterSink)
|
|
10750
10787
|
return;
|
|
10751
10788
|
try {
|
|
10752
10789
|
await deadLetterSink.send(filtered);
|
|
10753
10790
|
} catch (dlqError) {
|
|
10754
|
-
|
|
10791
|
+
log12.error("Dead letter sink delivery failed", { sink: deadLetterSink.name });
|
|
10755
10792
|
onError?.(deadLetterSink.name, dlqError);
|
|
10756
10793
|
}
|
|
10757
10794
|
}
|
|
@@ -10795,7 +10832,7 @@ function createSinkManager(config) {
|
|
|
10795
10832
|
dispatch(event) {
|
|
10796
10833
|
if (buffer.length >= maxBufferSize) {
|
|
10797
10834
|
buffer.shift();
|
|
10798
|
-
|
|
10835
|
+
log12.warn("Audit sink buffer full, dropping oldest event");
|
|
10799
10836
|
}
|
|
10800
10837
|
buffer.push(event);
|
|
10801
10838
|
if (buffer.length >= batchSize)
|
|
@@ -11106,16 +11143,16 @@ function auditMiddleware(auditTrail) {
|
|
|
11106
11143
|
}
|
|
11107
11144
|
// ../observe/src/audit-sink-jsonl.ts
|
|
11108
11145
|
init_src();
|
|
11109
|
-
var
|
|
11146
|
+
var log13 = createLogger();
|
|
11110
11147
|
// ../observe/src/experiment.ts
|
|
11111
11148
|
init_src();
|
|
11112
|
-
var
|
|
11149
|
+
var log14 = createLogger();
|
|
11113
11150
|
// ../observe/src/studio-exporter.ts
|
|
11114
11151
|
init_src();
|
|
11115
|
-
var
|
|
11152
|
+
var log15 = createLogger();
|
|
11116
11153
|
// ../observe/src/otel.ts
|
|
11117
11154
|
init_src();
|
|
11118
|
-
var
|
|
11155
|
+
var log16 = createLogger();
|
|
11119
11156
|
// ../app/src/app.ts
|
|
11120
11157
|
init_src();
|
|
11121
11158
|
|
|
@@ -12876,19 +12913,19 @@ init_src();
|
|
|
12876
12913
|
init_src();
|
|
12877
12914
|
|
|
12878
12915
|
// ../app/src/app.ts
|
|
12879
|
-
var
|
|
12916
|
+
var log17 = createLogger();
|
|
12880
12917
|
// ../app/src/rbac.ts
|
|
12881
12918
|
init_src();
|
|
12882
|
-
var
|
|
12919
|
+
var log18 = createLogger();
|
|
12883
12920
|
// ../app/src/tenant.ts
|
|
12884
12921
|
init_src();
|
|
12885
|
-
var
|
|
12922
|
+
var log19 = createLogger();
|
|
12886
12923
|
var tenantUsage = new Map;
|
|
12887
12924
|
// ../mcp/src/client.ts
|
|
12888
12925
|
init_src();
|
|
12889
12926
|
// ../mcp/src/server.ts
|
|
12890
12927
|
init_src();
|
|
12891
|
-
var
|
|
12928
|
+
var log20 = createLogger();
|
|
12892
12929
|
// ../mcp/src/trust.ts
|
|
12893
12930
|
init_src();
|
|
12894
12931
|
var MAX_TOOL_OUTPUT_SIZE = 1024 * 1024;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elsium-ai/cli",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"description": "CLI tool for ElsiumAI projects",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Eric Utrera <ebutrera9103@gmail.com>",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"dev": "bun --watch src/cli.ts"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@elsium-ai/core": "^0.12.
|
|
28
|
-
"@elsium-ai/observe": "^0.12.
|
|
29
|
-
"elsium-ai": "^0.12.
|
|
27
|
+
"@elsium-ai/core": "^0.12.1",
|
|
28
|
+
"@elsium-ai/observe": "^0.12.1",
|
|
29
|
+
"elsium-ai": "^0.12.1"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"typescript": "^5.7.0"
|