zelari-code 2.15.0 → 2.16.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/cli/companion/cors.js +52 -0
- package/dist/cli/companion/cors.js.map +1 -0
- package/dist/cli/companion/runManager.js +233 -1
- package/dist/cli/companion/runManager.js.map +1 -1
- package/dist/cli/companion/serve.js +21 -4
- package/dist/cli/companion/serve.js.map +1 -1
- package/dist/cli/extensions/extensionToolWiring.js +57 -0
- package/dist/cli/extensions/extensionToolWiring.js.map +1 -0
- package/dist/cli/extensions/loader.js +213 -0
- package/dist/cli/extensions/loader.js.map +1 -0
- package/dist/cli/extensions/sandboxedFs.js +69 -0
- package/dist/cli/extensions/sandboxedFs.js.map +1 -0
- package/dist/cli/headless/runOneTurn.js +783 -0
- package/dist/cli/headless/runOneTurn.js.map +1 -0
- package/dist/cli/kraken/completionGate.js +22 -5
- package/dist/cli/kraken/completionGate.js.map +1 -1
- package/dist/cli/lsp/manager.js +16 -0
- package/dist/cli/lsp/manager.js.map +1 -1
- package/dist/cli/main.bundled.js +17714 -15752
- package/dist/cli/main.bundled.js.map +4 -4
- package/dist/cli/main.js +20 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/runHeadless.js +5 -695
- package/dist/cli/runHeadless.js.map +1 -1
- package/dist/cli/safety/jails/darwin.js +87 -0
- package/dist/cli/safety/jails/darwin.js.map +1 -0
- package/dist/cli/safety/jails/linux.js +80 -0
- package/dist/cli/safety/jails/linux.js.map +1 -0
- package/dist/cli/safety/jails/win32.js +19 -0
- package/dist/cli/safety/jails/win32.js.map +1 -0
- package/dist/cli/safety/lifecycleHooks.js +33 -3
- package/dist/cli/safety/lifecycleHooks.js.map +1 -1
- package/dist/cli/safety/osJail.js +289 -0
- package/dist/cli/safety/osJail.js.map +1 -0
- package/dist/cli/safety/policyLoadMode.js.map +1 -1
- package/dist/cli/serve/harnessClient.js +150 -0
- package/dist/cli/serve/harnessClient.js.map +1 -0
- package/dist/cli/serve/harnessServer.js +333 -0
- package/dist/cli/serve/harnessServer.js.map +1 -0
- package/dist/cli/serve/sessionControl.js +67 -0
- package/dist/cli/serve/sessionControl.js.map +1 -0
- package/dist/cli/toolRegistry.js +338 -33
- package/dist/cli/toolRegistry.js.map +1 -1
- package/dist/cli/tools/execProcess.js +36 -15
- package/dist/cli/tools/execProcess.js.map +1 -1
- package/package.json +2 -2
|
@@ -17,15 +17,24 @@
|
|
|
17
17
|
* - the shell blocklist still runs on the joined program+argv as
|
|
18
18
|
* defense-in-depth against destructive payloads.
|
|
19
19
|
*
|
|
20
|
+
* v2.17 (t28, Pilastro A): the spawn goes through the osJail choke-point
|
|
21
|
+
* {@link spawnJailed} — NO direct child_process spawn remains on this path
|
|
22
|
+
* (grep-gated by scripts/verify-os-jail.mjs). Under the active jail the
|
|
23
|
+
* child gets an allowlisted env only; a missing backend with
|
|
24
|
+
* ZELARI_OS_JAIL=required DENIES the tool (typed `[jail]` error) and with
|
|
25
|
+
* `advisory` runs unjailed with a visible warning on the result. The
|
|
26
|
+
* network posture comes from the SAME resourceClaims decision as the
|
|
27
|
+
* permission layer (hosts whose claim resolved to `allow`).
|
|
28
|
+
*
|
|
20
29
|
* Windows note: direct spawn like the bash tool's win32 branch — plain .exe
|
|
21
30
|
* binaries on PATH work; `.cmd`/`.bat` shims may need the full path (no
|
|
22
31
|
* shell indirection exists here to resolve them).
|
|
23
32
|
*/
|
|
24
|
-
import { spawn } from 'node:child_process';
|
|
25
33
|
import { z } from 'zod';
|
|
26
34
|
import { typedErr, typedOk } from '@zelari/core/harness/tools/toolTypes';
|
|
27
35
|
import { findBlockedReason } from '../safety/shellBlocklist.js';
|
|
28
36
|
import { resolveSandboxedPath, SandboxViolationError } from '../safety/sandboxPath.js';
|
|
37
|
+
import { buildJailSpec, spawnJailed } from '../safety/osJail.js';
|
|
29
38
|
export const execProcessInputSchema = z.object({
|
|
30
39
|
/** Program to execute: bare name resolved via PATH, or an absolute path. */
|
|
31
40
|
program: z.string().min(1),
|
|
@@ -38,7 +47,10 @@ export const execProcessInputSchema = z.object({
|
|
|
38
47
|
});
|
|
39
48
|
/** Per-stream output cap — same budget as the bash tool. */
|
|
40
49
|
const MAX_STREAM_CHARS = 1024 * 1024;
|
|
41
|
-
export function createExecProcessTool(root) {
|
|
50
|
+
export function createExecProcessTool(root, opts = {}) {
|
|
51
|
+
// The spec is per-registry (root is constant); only the network posture
|
|
52
|
+
// is narrowed per invocation from the claims verdict.
|
|
53
|
+
const baseSpec = buildJailSpec({ root });
|
|
42
54
|
return {
|
|
43
55
|
name: 'exec_process',
|
|
44
56
|
description: 'Execute ONE program with structured arguments WITHOUT shell interpolation: no pipes, globs, variable expansion or quoting pitfalls — exactly the argv you pass is executed. ' +
|
|
@@ -68,21 +80,30 @@ export function createExecProcessTool(root) {
|
|
|
68
80
|
}
|
|
69
81
|
return new Promise((resolve) => {
|
|
70
82
|
const start = Date.now();
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
83
|
+
// v2.17 (t28): THE choke-point. Deny/notice/fail are handled below;
|
|
84
|
+
// this path never touches child_process directly.
|
|
85
|
+
const spec = { ...baseSpec, network: opts.resolveNetwork?.(input) ?? baseSpec.network };
|
|
86
|
+
const res = spawnJailed(spec, {
|
|
87
|
+
program: input.program,
|
|
88
|
+
argv,
|
|
89
|
+
cwd,
|
|
90
|
+
signal: ctx?.signal,
|
|
91
|
+
env: process.env,
|
|
92
|
+
envExtras: { CI: process.env.CI ?? '1' },
|
|
93
|
+
});
|
|
94
|
+
if (res.outcome === 'denied') {
|
|
95
|
+
resolve(typedErr(res.reason));
|
|
96
|
+
return;
|
|
81
97
|
}
|
|
82
|
-
|
|
83
|
-
resolve(typedErr(`exec_process could not launch ${input.program}: ${
|
|
98
|
+
if (res.outcome === 'failed') {
|
|
99
|
+
resolve(typedErr(`exec_process could not launch ${input.program}: ${res.reason}`));
|
|
84
100
|
return;
|
|
85
101
|
}
|
|
102
|
+
// Visible fail-open (advisory): the notice rides on the result meta.
|
|
103
|
+
const meta = res.notice
|
|
104
|
+
? { status: 'complete', warnings: [`os-jail: ${res.notice}`] }
|
|
105
|
+
: undefined;
|
|
106
|
+
const child = res.child;
|
|
86
107
|
let stdout = '';
|
|
87
108
|
let stderr = '';
|
|
88
109
|
child.stdout?.on('data', (d) => {
|
|
@@ -112,7 +133,7 @@ export function createExecProcessTool(root) {
|
|
|
112
133
|
stdout: stdout.slice(0, MAX_STREAM_CHARS),
|
|
113
134
|
stderr: stderr.slice(0, MAX_STREAM_CHARS),
|
|
114
135
|
durationMs: Date.now() - start,
|
|
115
|
-
}));
|
|
136
|
+
}, meta));
|
|
116
137
|
});
|
|
117
138
|
});
|
|
118
139
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execProcess.js","sourceRoot":"","sources":["../../../src/cli/tools/execProcess.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"execProcess.js","sourceRoot":"","sources":["../../../src/cli/tools/execProcess.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAA4C,MAAM,sCAAsC,CAAC;AACnH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,aAAa,EAA6B,WAAW,EAAoB,MAAM,qBAAqB,CAAC;AAE9G,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,4EAA4E;IAC5E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,gEAAgE;IAChE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,8EAA8E;IAC9E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,qEAAqE;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CACpE,CAAC,CAAC;AAYH,4DAA4D;AAC5D,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC;AAWrC,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,OAA+B,EAAE;IAEjC,wEAAwE;IACxE,sDAAsD;IACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,8KAA8K;YAC9K,kIAAkI;YAClI,gIAAgI;QAClI,WAAW,EAAE,CAAC,SAAS,CAAC;QACxB,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,sBAAsB;QACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YAC9B,0EAA0E;YAC1E,wEAAwE;YACxE,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACtE,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,QAAQ,CAAC,yCAAyC,OAAO,CAAC,MAAM,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAClG,CAAC;YACD,IAAI,GAAW,CAAC;YAChB,IAAI,CAAC;gBACH,mEAAmE;gBACnE,iEAAiE;gBACjE,GAAG,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7E,OAAO,QAAQ,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACzB,oEAAoE;gBACpE,kDAAkD;gBAClD,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACxF,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE;oBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,IAAI;oBACJ,GAAG;oBACH,MAAM,EAAE,GAAG,EAAE,MAAM;oBACnB,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,SAAS,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE;iBACzC,CAAC,CAAC;gBACH,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC9B,OAAO;gBACT,CAAC;gBACD,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC7B,OAAO,CAAC,QAAQ,CAAC,iCAAiC,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;oBACnF,OAAO;gBACT,CAAC;gBACD,qEAAqE;gBACrE,MAAM,IAAI,GAA+B,GAAG,CAAC,MAAM;oBACjD,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;oBAC9D,CAAC,CAAC,SAAS,CAAC;gBACd,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;gBACxB,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;oBACrC,IAAI,MAAM,CAAC,MAAM,GAAG,gBAAgB;wBAAE,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACrE,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;oBACrC,IAAI,MAAM,CAAC,MAAM,GAAG,gBAAgB;wBAAE,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACrE,CAAC,CAAC,CAAC;gBACH,oEAAoE;gBACpE,iEAAiE;gBACjE,2BAA2B;gBAC3B,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;gBACxG,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACtB,OAAO,CACL,QAAQ,CACN,gCAAgC,SAAS,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC7F,CACF,CAAC;gBACJ,CAAC,EAAE,SAAS,CAAC,CAAC;gBACd,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACxB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,OAAO,CAAC,QAAQ,CAAC,iCAAiC,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACtF,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;oBACzB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,OAAO,CACL,OAAO,CACL;wBACE,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC;wBACpB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC;wBACzC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC;wBACzC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;qBAC/B,EACD,IAAI,CACL,CACF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zelari-code",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.16.0",
|
|
4
4
|
"description": "Zelari Code — AI Council coding agent CLI. Multi-agent orchestration (Caronte, Nettuno, Gerione, Plutone, Minosse, Lucifero) with slash commands, provider-agnostic LLM streaming, and self-update.",
|
|
5
5
|
"author": "Anathema Studio <https://anathema-studio.com/>",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@testing-library/react": "^16.3.2",
|
|
63
|
-
"@zelari/core": "2.
|
|
63
|
+
"@zelari/core": "2.16.0",
|
|
64
64
|
"@types/node": "^25.3.0",
|
|
65
65
|
"@types/react": "^19.0.10",
|
|
66
66
|
"esbuild": "^0.25.0",
|