zelari-code 2.34.0 → 2.35.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/browser/tools.js +23 -1
- package/dist/cli/browser/tools.js.map +1 -1
- package/dist/cli/councilDispatcher.js +1 -0
- package/dist/cli/councilDispatcher.js.map +1 -1
- package/dist/cli/headless/liveTurnAbort.js +67 -0
- package/dist/cli/headless/liveTurnAbort.js.map +1 -0
- package/dist/cli/headless/runOneTurn.js +5 -1
- package/dist/cli/headless/runOneTurn.js.map +1 -1
- package/dist/cli/headless.js.map +1 -1
- package/dist/cli/main.bundled.js +1352 -818
- package/dist/cli/main.bundled.js.map +4 -4
- package/dist/cli/provider/openai-compatible.js +53 -24
- package/dist/cli/provider/openai-compatible.js.map +1 -1
- package/dist/cli/runHeadless.js +55 -7
- package/dist/cli/runHeadless.js.map +1 -1
- package/dist/cli/serve/askUserBridge.js +59 -0
- package/dist/cli/serve/askUserBridge.js.map +1 -0
- package/dist/cli/serve/harnessServer.js +14 -2
- package/dist/cli/serve/harnessServer.js.map +1 -1
- package/dist/cli/serve/permissionBridge.js +64 -8
- package/dist/cli/serve/permissionBridge.js.map +1 -1
- package/dist/cli/serve/sessionControl.js +5 -3
- package/dist/cli/serve/sessionControl.js.map +1 -1
- package/dist/cli/toolRegistry.js +44 -17
- package/dist/cli/toolRegistry.js.map +1 -1
- package/dist/cli/tools/krakenModel.js +18 -0
- package/dist/cli/tools/krakenModel.js.map +1 -1
- package/dist/cli/tools/screenshotTool.js +111 -0
- package/dist/cli/tools/screenshotTool.js.map +1 -0
- package/dist/cli/tools/taskTool.js +59 -9
- package/dist/cli/tools/taskTool.js.map +1 -1
- package/dist/cli/utils/doctor.js +24 -3
- package/dist/cli/utils/doctor.js.map +1 -1
- package/dist/cli/utils/fixPath.js +18 -14
- package/dist/cli/utils/fixPath.js.map +1 -1
- package/dist/cli/utils/streamScrub.js +5 -3
- package/dist/cli/utils/streamScrub.js.map +1 -1
- package/dist/cli/zelariMission.js +14 -0
- package/dist/cli/zelariMission.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { askUserTimeoutMs } from '../hooks/askUserTimeout.js';
|
|
2
|
+
export function createServeAskUserBridge(write, timeoutMs = askUserTimeoutMs()) {
|
|
3
|
+
const pending = new Map();
|
|
4
|
+
let seq = 0;
|
|
5
|
+
const settle = (requestId, answer, timedOut = false) => {
|
|
6
|
+
const entry = pending.get(requestId);
|
|
7
|
+
if (!entry)
|
|
8
|
+
return false;
|
|
9
|
+
pending.delete(requestId);
|
|
10
|
+
clearTimeout(entry.timer);
|
|
11
|
+
write(JSON.stringify({
|
|
12
|
+
type: 'ask_user.settled',
|
|
13
|
+
requestId,
|
|
14
|
+
answer,
|
|
15
|
+
...(timedOut ? { timedOut: true } : {}),
|
|
16
|
+
}));
|
|
17
|
+
entry.resolve(answer);
|
|
18
|
+
return true;
|
|
19
|
+
};
|
|
20
|
+
return {
|
|
21
|
+
onAskUser(req) {
|
|
22
|
+
const question = req.question.trim();
|
|
23
|
+
const choices = req.choices.map((c) => c.trim()).filter(Boolean);
|
|
24
|
+
if (choices.length < 2)
|
|
25
|
+
return Promise.resolve(null);
|
|
26
|
+
const requestId = `ask-${Date.now()}-${++seq}`;
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
const timer = setTimeout(() => {
|
|
29
|
+
settle(requestId, null, true);
|
|
30
|
+
}, timeoutMs);
|
|
31
|
+
pending.set(requestId, { resolve, timer });
|
|
32
|
+
write(JSON.stringify({
|
|
33
|
+
type: 'ask_user.request',
|
|
34
|
+
requestId,
|
|
35
|
+
question,
|
|
36
|
+
choices,
|
|
37
|
+
...(req.context ? { context: req.context } : {}),
|
|
38
|
+
}));
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
respond: (requestId, answer) => settle(requestId, answer, false),
|
|
42
|
+
pendingCount: () => pending.size,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function serveAskUserRespond(bridge, params) {
|
|
46
|
+
if (!params || typeof params !== 'object') {
|
|
47
|
+
return { accepted: false, reason: 'ask_user.respond requires an object params' };
|
|
48
|
+
}
|
|
49
|
+
const { requestId, answer } = params;
|
|
50
|
+
if (typeof requestId !== 'string' || requestId.length === 0) {
|
|
51
|
+
return { accepted: false, reason: 'ask_user.respond requires a non-empty string requestId' };
|
|
52
|
+
}
|
|
53
|
+
if (answer !== null && typeof answer !== 'string') {
|
|
54
|
+
return { accepted: false, reason: 'ask_user.respond answer must be a string or null' };
|
|
55
|
+
}
|
|
56
|
+
const text = typeof answer === 'string' ? answer.trim() : null;
|
|
57
|
+
return { accepted: bridge.respond(requestId, text && text.length > 0 ? text : null) };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=askUserBridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"askUserBridge.js","sourceRoot":"","sources":["../../../src/cli/serve/askUserBridge.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAe9D,MAAM,UAAU,wBAAwB,CACtC,KAA6B,EAC7B,SAAS,GAAG,gBAAgB,EAAE;IAE9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC9C,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,MAAM,MAAM,GAAG,CACb,SAAiB,EACjB,MAAqB,EACrB,QAAQ,GAAG,KAAK,EACP,EAAE;QACX,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1B,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,CACH,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,kBAAkB;YACxB,SAAS;YACT,MAAM;YACN,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC,CACH,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO;QACL,SAAS,CAAC,GAAG;YACX,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YAC/C,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;gBAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAChC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC3C,KAAK,CACH,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,kBAAkB;oBACxB,SAAS;oBACT,QAAQ;oBACR,OAAO;oBACP,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjD,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC;QAChE,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAA0B,EAC1B,MAAe;IAEf,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC;IACnF,CAAC;IACD,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAiC,CAAC;IAChE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,wDAAwD,EAAE,CAAC;IAC/F,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC;IACzF,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACxF,CAAC"}
|
|
@@ -59,6 +59,7 @@ import { setActiveProofPersistenceSurface } from '../kraken/completionProofPersi
|
|
|
59
59
|
import { checkStrictPolicyLoad } from '../headless/policyGate.js';
|
|
60
60
|
import { activePolicyLoadMode, setActivePolicyLoadSurface } from '../safety/policyLoadMode.js';
|
|
61
61
|
import { applyTurnPermissionPreset, asRegistryAskHandler, createServePermissionBridge, servePermissionRespond, } from './permissionBridge.js';
|
|
62
|
+
import { createServeAskUserBridge, serveAskUserRespond, } from './askUserBridge.js';
|
|
62
63
|
import { sweepOrphanSpineLocks } from './spineLockSweep.js';
|
|
63
64
|
/**
|
|
64
65
|
* Real per-workspace services: one LspManager anchored to the workspace,
|
|
@@ -132,7 +133,7 @@ export function resolveTurnLspProvider(services) {
|
|
|
132
133
|
* (kraken / council / zelari / graph / gauntlet), with the session
|
|
133
134
|
* workspaceRoot threaded as `opts.cwd`.
|
|
134
135
|
*/
|
|
135
|
-
export function createCliRunTurn(onPermissionAsk) {
|
|
136
|
+
export function createCliRunTurn(onPermissionAsk, onAskUser) {
|
|
136
137
|
let streamPromise = null;
|
|
137
138
|
const ensureStream = () => {
|
|
138
139
|
if (!streamPromise) {
|
|
@@ -165,6 +166,8 @@ export function createCliRunTurn(onPermissionAsk) {
|
|
|
165
166
|
// the tool registry.
|
|
166
167
|
if (onPermissionAsk)
|
|
167
168
|
opts.onPermissionAsk = onPermissionAsk;
|
|
169
|
+
if (onAskUser)
|
|
170
|
+
opts.onAskUser = onAskUser;
|
|
168
171
|
// Per-turn permission preset from Desktop Settings. Allowlisted inside
|
|
169
172
|
// the bridge — unknown values keep the sidecar's current preset (no
|
|
170
173
|
// arbitrary env injection over the wire).
|
|
@@ -211,6 +214,7 @@ export function startHarnessServer(options = {}) {
|
|
|
211
214
|
// Deny-on-timeout (120s) is enforced inside the bridge — an unanswered
|
|
212
215
|
// request can never allow.
|
|
213
216
|
const permissionBridge = createServePermissionBridge(write);
|
|
217
|
+
const askUserBridge = createServeAskUserBridge(write);
|
|
214
218
|
const dispatch = async (req) => {
|
|
215
219
|
if (typeof req.method !== 'string') {
|
|
216
220
|
return { id: req.id ?? null, ok: false, error: { code: 'bad_request', message: 'missing method' } };
|
|
@@ -228,13 +232,21 @@ export function startHarnessServer(options = {}) {
|
|
|
228
232
|
result: servePermissionRespond(permissionBridge, params),
|
|
229
233
|
};
|
|
230
234
|
}
|
|
235
|
+
case 'ask_user.respond': {
|
|
236
|
+
return {
|
|
237
|
+
id: req.id ?? null,
|
|
238
|
+
ok: true,
|
|
239
|
+
result: serveAskUserRespond(askUserBridge, params),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
231
242
|
case 'session.create': {
|
|
232
243
|
const root = typeof params.workspaceRoot === 'string' ? params.workspaceRoot : process.cwd();
|
|
233
244
|
// asRegistryAskHandler projects the registry ask payload onto the
|
|
234
245
|
// wire payload (tool/categories/claims → dialog preview).
|
|
235
246
|
const session = server.createSession({
|
|
236
247
|
workspaceRoot: root,
|
|
237
|
-
runTurn: options.runTurn ??
|
|
248
|
+
runTurn: options.runTurn ??
|
|
249
|
+
createCliRunTurn(asRegistryAskHandler(permissionBridge), askUserBridge.onAskUser),
|
|
238
250
|
});
|
|
239
251
|
return { id: req.id ?? null, ok: true, result: { sessionId: session.id, workspaceRoot: session.workspaceRoot } };
|
|
240
252
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harnessServer.js","sourceRoot":"","sources":["../../../src/cli/serve/harnessServer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"harnessServer.js","sourceRoot":"","sources":["../../../src/cli/serve/harnessServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { grantSessionCategory, grantSessionTool, isSessionGranted, } from '../safety/toolPermissions.js';
|
|
1
2
|
/**
|
|
2
3
|
* Serve-harness permission bridge (Pilastro B, desktop parity slice).
|
|
3
4
|
*
|
|
@@ -9,7 +10,8 @@
|
|
|
9
10
|
* CLI → host : {"type":"permission.request","requestId":…,"tool":…,
|
|
10
11
|
* "category":…,"inputPreview":…} (stdout event)
|
|
11
12
|
* host → CLI : {"id":N,"method":"permission.respond",
|
|
12
|
-
* "params":{"requestId":…,"decision":"allow"|"deny"
|
|
13
|
+
* "params":{"requestId":…,"decision":"allow"|"deny"|
|
|
14
|
+
* "always-tool"|"always-category"}}
|
|
13
15
|
*
|
|
14
16
|
* Fail-closed by construction: an unanswered request DENIES after the
|
|
15
17
|
* timeout (default 120s) — the bridge can never silently allow.
|
|
@@ -40,38 +42,75 @@ export function applyTurnPermissionPreset(input) {
|
|
|
40
42
|
process.env[PRESET_ENV] = value;
|
|
41
43
|
return true;
|
|
42
44
|
}
|
|
45
|
+
export const PERMISSION_DECISIONS = [
|
|
46
|
+
'allow',
|
|
47
|
+
'deny',
|
|
48
|
+
'always-tool',
|
|
49
|
+
'always-category',
|
|
50
|
+
];
|
|
51
|
+
function isPermissionDecision(value) {
|
|
52
|
+
return (typeof value === 'string' &&
|
|
53
|
+
PERMISSION_DECISIONS.includes(value));
|
|
54
|
+
}
|
|
43
55
|
export function createServePermissionBridge(write, timeoutMs = 120_000) {
|
|
44
56
|
const pending = new Map();
|
|
45
57
|
let seq = 0;
|
|
46
|
-
const settle = (requestId, decision) => {
|
|
58
|
+
const settle = (requestId, decision, timedOut = false) => {
|
|
47
59
|
const entry = pending.get(requestId);
|
|
48
60
|
if (!entry)
|
|
49
61
|
return false;
|
|
50
62
|
pending.delete(requestId);
|
|
51
63
|
clearTimeout(entry.timer);
|
|
64
|
+
write(JSON.stringify({
|
|
65
|
+
type: 'permission.settled',
|
|
66
|
+
requestId,
|
|
67
|
+
decision,
|
|
68
|
+
...(timedOut ? { timedOut: true } : {}),
|
|
69
|
+
}));
|
|
52
70
|
entry.resolve(decision);
|
|
53
71
|
return true;
|
|
54
72
|
};
|
|
55
73
|
return {
|
|
56
74
|
onPermissionAsk(payload) {
|
|
57
75
|
const requestId = `perm-${Date.now()}-${++seq}`;
|
|
76
|
+
const categories = payload.categories && payload.categories.length > 0
|
|
77
|
+
? payload.categories
|
|
78
|
+
: payload.category
|
|
79
|
+
? payload.category.split(',').map((c) => c.trim()).filter(Boolean)
|
|
80
|
+
: [];
|
|
58
81
|
return new Promise((resolve) => {
|
|
59
82
|
const timer = setTimeout(() => {
|
|
60
83
|
// Fail-closed: no host answer in time ⇒ deny, never allow.
|
|
61
|
-
settle(requestId, 'deny');
|
|
84
|
+
settle(requestId, 'deny', true);
|
|
62
85
|
}, timeoutMs);
|
|
63
|
-
pending.set(requestId, { resolve, timer });
|
|
86
|
+
pending.set(requestId, { resolve, timer, payload });
|
|
64
87
|
write(JSON.stringify({
|
|
65
88
|
type: 'permission.request',
|
|
66
89
|
requestId,
|
|
67
90
|
tool: payload.tool,
|
|
68
91
|
category: payload.category,
|
|
92
|
+
categories,
|
|
69
93
|
...(payload.inputPreview !== undefined ? { inputPreview: payload.inputPreview } : {}),
|
|
70
94
|
...(payload.reason !== undefined ? { reason: payload.reason } : {}),
|
|
71
95
|
}));
|
|
72
96
|
});
|
|
73
97
|
},
|
|
74
|
-
respond: settle,
|
|
98
|
+
respond: (requestId, decision) => settle(requestId, decision, false),
|
|
99
|
+
releaseGranted() {
|
|
100
|
+
let n = 0;
|
|
101
|
+
for (const [id, entry] of [...pending]) {
|
|
102
|
+
const cats = (entry.payload.categories && entry.payload.categories.length > 0
|
|
103
|
+
? entry.payload.categories
|
|
104
|
+
: entry.payload.category
|
|
105
|
+
? entry.payload.category.split(',').map((c) => c.trim()).filter(Boolean)
|
|
106
|
+
: []);
|
|
107
|
+
if (isSessionGranted(entry.payload.tool, cats)) {
|
|
108
|
+
if (settle(id, 'allow', false))
|
|
109
|
+
n += 1;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return n;
|
|
113
|
+
},
|
|
75
114
|
pendingCount: () => pending.size,
|
|
76
115
|
};
|
|
77
116
|
}
|
|
@@ -89,8 +128,11 @@ export function servePermissionRespond(bridge, params) {
|
|
|
89
128
|
if (typeof requestId !== 'string' || requestId.length === 0) {
|
|
90
129
|
return { accepted: false, reason: 'permission.respond requires a non-empty string requestId' };
|
|
91
130
|
}
|
|
92
|
-
if (decision
|
|
93
|
-
return {
|
|
131
|
+
if (!isPermissionDecision(decision)) {
|
|
132
|
+
return {
|
|
133
|
+
accepted: false,
|
|
134
|
+
reason: "permission.respond decision must be 'allow' | 'deny' | 'always-tool' | 'always-category'",
|
|
135
|
+
};
|
|
94
136
|
}
|
|
95
137
|
return { accepted: bridge.respond(requestId, decision) };
|
|
96
138
|
}
|
|
@@ -107,12 +149,26 @@ export function asRegistryAskHandler(bridge) {
|
|
|
107
149
|
const decision = await bridge.onPermissionAsk({
|
|
108
150
|
tool: req.toolName,
|
|
109
151
|
category: req.categories.join(',') || 'other',
|
|
152
|
+
categories: req.categories,
|
|
110
153
|
reason,
|
|
111
154
|
...(req.claims && req.claims.length > 0
|
|
112
155
|
? { inputPreview: req.claims.map((c) => c.summary).join(' · ') }
|
|
113
156
|
: {}),
|
|
114
157
|
});
|
|
115
|
-
|
|
158
|
+
if (decision === 'deny')
|
|
159
|
+
return false;
|
|
160
|
+
if (decision === 'always-tool') {
|
|
161
|
+
grantSessionTool(req.toolName);
|
|
162
|
+
bridge.releaseGranted();
|
|
163
|
+
}
|
|
164
|
+
else if (decision === 'always-category') {
|
|
165
|
+
for (const cat of req.categories) {
|
|
166
|
+
grantSessionCategory(cat);
|
|
167
|
+
}
|
|
168
|
+
grantSessionTool(req.toolName);
|
|
169
|
+
bridge.releaseGranted();
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
116
172
|
};
|
|
117
173
|
}
|
|
118
174
|
//# sourceMappingURL=permissionBridge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionBridge.js","sourceRoot":"","sources":["../../../src/cli/serve/permissionBridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"permissionBridge.js","sourceRoot":"","sources":["../../../src/cli/serve/permissionBridge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GAEjB,MAAM,8BAA8B,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAGhF,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,GAAG,GAAI,KAAiC,CAAC,gBAAgB,CAAC;IAChE,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,CAAE,wBAA8C,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;AAUD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO;IACP,MAAM;IACN,aAAa;IACb,iBAAiB;CACT,CAAC;AAGX,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACxB,oBAA0C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC5D,CAAC;AACJ,CAAC;AAsBD,MAAM,UAAU,2BAA2B,CACzC,KAA6B,EAC7B,SAAS,GAAG,OAAO;IAEnB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC9C,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,MAAM,MAAM,GAAG,CACb,SAAiB,EACjB,QAA4B,EAC5B,QAAQ,GAAG,KAAK,EACP,EAAE;QACX,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1B,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,CACH,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,oBAAoB;YAC1B,SAAS;YACT,QAAQ;YACR,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC,CACH,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO;QACL,eAAe,CAAC,OAAO;YACrB,MAAM,SAAS,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YAChD,MAAM,UAAU,GACd,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBACjD,CAAC,CAAC,OAAO,CAAC,UAAU;gBACpB,CAAC,CAAC,OAAO,CAAC,QAAQ;oBAChB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;oBAClE,CAAC,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,EAAE;gBACjD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,2DAA2D;oBAC3D,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpD,KAAK,CACH,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,oBAAoB;oBAC1B,SAAS;oBACT,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,UAAU;oBACV,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrF,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpE,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;QACpE,cAAc;YACZ,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,CACX,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;oBAC7D,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU;oBAC1B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ;wBACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;wBACxE,CAAC,CAAC,EAAE,CACW,CAAC;gBACtB,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;oBAC/C,IAAI,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC;wBAAE,CAAC,IAAI,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI;KACjC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAA6B,EAC7B,MAAe;IAEf,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;IACrF,CAAC;IACD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAiC,CAAC;IAClE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,0DAA0D,EAAE,CAAC;IACjG,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EACJ,0FAA0F;SAC7F,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA6B;IAChE,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,MAAM,GACV,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QACvF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC;YAC5C,IAAI,EAAE,GAAG,CAAC,QAAQ;YAClB,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO;YAC7C,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,MAAM;YACN,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBACrC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAChE,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC/B,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,CAAC;aAAM,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;YAC1C,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACjC,oBAAoB,CAAC,GAAqB,CAAC,CAAC;YAC9C,CAAC;YACD,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* - the server's `run.turn` dispatch carries the harness sessionId down the
|
|
9
9
|
* turn's async call-chain via AsyncLocalStorage (no new HeadlessOptions
|
|
10
10
|
* field, CLI/protocol surface unchanged, concurrent sessions isolated);
|
|
11
|
-
* - runOneTurn (serve mode ONLY)
|
|
12
|
-
* + cooperative cancel hook under
|
|
11
|
+
* - runOneTurn, runHeadlessCouncil, and runHeadlessZelari (serve mode ONLY)
|
|
12
|
+
* register a per-turn RuntimeControlQueue + cooperative cancel hook under
|
|
13
|
+
* that session id;
|
|
13
14
|
* - the server answers `session.steer` / `session.cancel` NDJSON methods by
|
|
14
15
|
* targeting the live registration, with protocol-v2 acks (§24:
|
|
15
16
|
* accepted ≠ applied — `control_applied` still fires from the queue drain
|
|
@@ -27,7 +28,8 @@ export function runWithSession(sessionId, fn) {
|
|
|
27
28
|
return dispatchContext.run({ sessionId, token: {} }, fn);
|
|
28
29
|
}
|
|
29
30
|
/**
|
|
30
|
-
*
|
|
31
|
+
* A serve-mode turn (runOneTurn / council / zelari) registers the per-turn
|
|
32
|
+
* control surface. Returns
|
|
31
33
|
* the unregister fn (identity-guarded, safe across back-to-back turns on
|
|
32
34
|
* the same session), or undefined when NOT dispatched by the harness server
|
|
33
35
|
* — plain `--headless` keeps its stdin control plane, zero behavior change.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionControl.js","sourceRoot":"","sources":["../../../src/cli/serve/sessionControl.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sessionControl.js","sourceRoot":"","sources":["../../../src/cli/serve/sessionControl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAoBrD,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAwC,CAAC;AAEtF,4EAA4E;AAC5E,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEpD,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAI,SAAiB,EAAE,EAAW;IAC9D,OAAO,eAAe,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAY,EAAE,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAwB;IAExB,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,UAAU,GAAmB,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACtE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3C,OAAO,GAAG,EAAE;QACV,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,UAAU,EAAE,CAAC;YAClD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,kBAAkB,CAChC,SAAiB;IAEjB,OAAO,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO;IACpD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QACnD,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
package/dist/cli/toolRegistry.js
CHANGED
|
@@ -29,7 +29,7 @@ import { AuditLogger } from './safety/auditLogger.js';
|
|
|
29
29
|
import { DEFAULT_PROVIDERS, formatDiagnostics, runDiagnosticsForFile, } from './diagnostics/engine.js';
|
|
30
30
|
import { existsSync } from 'node:fs';
|
|
31
31
|
import path from 'node:path';
|
|
32
|
-
import { createTaskTool } from './tools/taskTool.js';
|
|
32
|
+
import { createTaskTool, permissionsForTaskAgent, } from './tools/taskTool.js';
|
|
33
33
|
import { createKrakenSelectTool } from './tools/krakenSelectTool.js';
|
|
34
34
|
import { createAskUserTool } from './tools/askUser.js';
|
|
35
35
|
import { createSkillTool } from './tools/skillTool.js';
|
|
@@ -44,6 +44,7 @@ import { getSharedLspManager } from './lsp/manager.js';
|
|
|
44
44
|
import { createAstTools } from './ast/tools.js';
|
|
45
45
|
import { createSemanticTool } from './semantic/tools.js';
|
|
46
46
|
import { createBrowserTool } from './browser/tools.js';
|
|
47
|
+
import { createScreenshotTool } from './tools/screenshotTool.js';
|
|
47
48
|
import { createSshTools } from './ssh/tools.js';
|
|
48
49
|
import { createWorldModelTools } from './workspace/worldModel.js';
|
|
49
50
|
import { providerFromEnv, providerConfigFor, } from './provider/openai-compatible.js';
|
|
@@ -381,6 +382,17 @@ export function createBuiltinToolRegistry(options = {}) {
|
|
|
381
382
|
permissions: browserTool.permissions ?? [],
|
|
382
383
|
});
|
|
383
384
|
}
|
|
385
|
+
// Screen capture (screenshot) — full registry only; 'ui' permission keeps
|
|
386
|
+
// the user in control of every capture. Gated by ZELARI_SCREENSHOT=0.
|
|
387
|
+
if (!readOnly && !gauntletParent && process.env.ZELARI_SCREENSHOT !== '0') {
|
|
388
|
+
const screenshotTool = createScreenshotTool();
|
|
389
|
+
registry.register(screenshotTool);
|
|
390
|
+
tools.push({
|
|
391
|
+
name: screenshotTool.name,
|
|
392
|
+
description: screenshotTool.description,
|
|
393
|
+
permissions: screenshotTool.permissions ?? [],
|
|
394
|
+
});
|
|
395
|
+
}
|
|
384
396
|
// SSH deploy/monitor tools — full registry only. Gated by ZELARI_SSH=0.
|
|
385
397
|
// Targets from ~/.zelari-code/ssh-targets.json; ssh_run is allowlist-only.
|
|
386
398
|
if (!readOnly && !gauntletParent && process.env.ZELARI_SSH !== '0') {
|
|
@@ -426,6 +438,7 @@ export function createBuiltinToolRegistry(options = {}) {
|
|
|
426
438
|
// registry's own policy (permPolicy above) — they can never
|
|
427
439
|
// exceed it.
|
|
428
440
|
parentPolicy: permPolicy,
|
|
441
|
+
...(options.onPermissionAsk ? { onPermissionAsk: options.onPermissionAsk } : {}),
|
|
429
442
|
...(options.subAgentProvider ? { provider: options.subAgentProvider } : {}),
|
|
430
443
|
...(options.subAgentModel ? { model: options.subAgentModel } : {}),
|
|
431
444
|
}),
|
|
@@ -629,7 +642,7 @@ function taskAgentToProfile(agent) {
|
|
|
629
642
|
* (F6) — can build a `TaskToolDeps` without duplicating this wiring.
|
|
630
643
|
*/
|
|
631
644
|
export function createKrakenSubAgentContextFactory(opts) {
|
|
632
|
-
const { root, audit, sessionId, provider: providerOverride, model: modelOverride, parentPolicy } = opts;
|
|
645
|
+
const { root, audit, sessionId, provider: providerOverride, model: modelOverride, parentPolicy, onPermissionAsk } = opts;
|
|
633
646
|
return async ({ agent, cwd: subCwd }) => {
|
|
634
647
|
const cfg = providerOverride
|
|
635
648
|
? await providerConfigFor(providerOverride)
|
|
@@ -637,7 +650,8 @@ export function createKrakenSubAgentContextFactory(opts) {
|
|
|
637
650
|
if (!cfg)
|
|
638
651
|
return null;
|
|
639
652
|
const { resolveKrakenSubModel, parseQualifiedModelRef } = await import('./tools/krakenModel.js');
|
|
640
|
-
const
|
|
653
|
+
const parentModel = modelOverride || cfg.model;
|
|
654
|
+
const resolvedModel = resolveKrakenSubModel(agent, parentModel);
|
|
641
655
|
// Cross-provider tentacles (Desktop Settings → ZELARI_KRAKEN_*_MODEL): a
|
|
642
656
|
// provider-qualified ref ("grok/grok-4") selects both provider and model.
|
|
643
657
|
// Unknown provider → keep the raw id (previous behavior: sent to the lead
|
|
@@ -662,11 +676,11 @@ export function createKrakenSubAgentContextFactory(opts) {
|
|
|
662
676
|
// headless-style auto-allow (a tentacle has no interactive prompt to
|
|
663
677
|
// ask at); the effective policy is its intersection with the parent
|
|
664
678
|
// policy — deny > ask > allow per category, `auto` is the AND of both.
|
|
665
|
-
// If the intersection downgrades a category to `ask`,
|
|
666
|
-
//
|
|
667
|
-
//
|
|
668
|
-
//
|
|
669
|
-
//
|
|
679
|
+
// If the intersection downgrades a category to `ask`, the tentacle
|
|
680
|
+
// reuses the parent's onPermissionAsk (Desktop in-chat card / TUI
|
|
681
|
+
// picker). Session grants from "Always this category" apply process-
|
|
682
|
+
// wide, so a granted spawn does not re-ask inside the tentacle.
|
|
683
|
+
// Without a handler, wrapWithPermissions still fail-closes (typedErr).
|
|
670
684
|
const agentPolicyForSubProfile = defaultPermissionPolicy({ auto: true });
|
|
671
685
|
const effectiveSubPolicy = intersectPermissionPolicy(parentPolicy ?? agentPolicyForSubProfile, agentPolicyForSubProfile);
|
|
672
686
|
const { registry: subRegistry } = createBuiltinToolRegistry({
|
|
@@ -679,6 +693,7 @@ export function createKrakenSubAgentContextFactory(opts) {
|
|
|
679
693
|
diagnostics: false,
|
|
680
694
|
lspProvider: null,
|
|
681
695
|
permissionPolicy: effectiveSubPolicy,
|
|
696
|
+
...(onPermissionAsk ? { onPermissionAsk } : {}),
|
|
682
697
|
// P0.5: the tentacle's agent identity drives per-agent policy rules.
|
|
683
698
|
policyAgent: agent,
|
|
684
699
|
});
|
|
@@ -686,6 +701,15 @@ export function createKrakenSubAgentContextFactory(opts) {
|
|
|
686
701
|
providerStream: buildProviderStream(subCfg),
|
|
687
702
|
model,
|
|
688
703
|
provider: subCfg.providerId,
|
|
704
|
+
...(model !== parentModel
|
|
705
|
+
? {
|
|
706
|
+
fallback: {
|
|
707
|
+
model: parentModel,
|
|
708
|
+
provider: cfg.providerId,
|
|
709
|
+
providerStream: buildProviderStream({ ...cfg, model: parentModel }),
|
|
710
|
+
},
|
|
711
|
+
}
|
|
712
|
+
: {}),
|
|
689
713
|
registry: subRegistry,
|
|
690
714
|
tools: subRegistry.toOpenAITools().map((t) => ({
|
|
691
715
|
name: t.function.name,
|
|
@@ -711,14 +735,17 @@ function wrapWithPermissions(original, policy, onAsk, agentLayers, precedence =
|
|
|
711
735
|
return {
|
|
712
736
|
...original,
|
|
713
737
|
execute: async (input, ctx) => {
|
|
714
|
-
const
|
|
738
|
+
const requiredNow = original.name === 'task'
|
|
739
|
+
? permissionsForTaskAgent(input?.agent)
|
|
740
|
+
: required;
|
|
741
|
+
const decision = resolveToolPermission(original.name, requiredNow, policy);
|
|
715
742
|
// P0.A: resolve this agent's rule across the global+project layers —
|
|
716
743
|
// restrict-only by default (deny > ask > allow; a global deny/ask can
|
|
717
744
|
// never be relaxed by the project file; legacy precedence restores the
|
|
718
745
|
// v1 project-first override). The survivor only ever ADDS restriction
|
|
719
746
|
// to the category decision (mergeRuleEffect).
|
|
720
747
|
const rule = agentLayers
|
|
721
|
-
? matchAgentPolicyRuleLayered(agentLayers, precedence,
|
|
748
|
+
? matchAgentPolicyRuleLayered(agentLayers, precedence, requiredNow, (input ?? {}), root ?? process.cwd())
|
|
722
749
|
: null;
|
|
723
750
|
// P0.C1 resource claims: EVERY resource this invocation can touch gets
|
|
724
751
|
// its own layered match and the per-claim effects intersect into the
|
|
@@ -733,7 +760,7 @@ function wrapWithPermissions(original, policy, onAsk, agentLayers, precedence =
|
|
|
733
760
|
// deny can never be relaxed and a contract allow can never widen any
|
|
734
761
|
// other layer or the category decision (same deny>ask>allow lattice).
|
|
735
762
|
// No scoped contract ⇒ null ⇒ this slot is inert.
|
|
736
|
-
const contractRule = matchContractCapabilityRule(
|
|
763
|
+
const contractRule = matchContractCapabilityRule(requiredNow, (input ?? {}), root ?? process.cwd());
|
|
737
764
|
let action = intersectEffects(mergeRuleEffect(decision.action, rule), claims?.effect, contractRule?.effect);
|
|
738
765
|
// W3.1 (t46): provenance escalation at the choke-point. Write/execute
|
|
739
766
|
// args that EMBED fingerprinted non-user content (web fetch, MCP output,
|
|
@@ -742,13 +769,13 @@ function wrapWithPermissions(original, policy, onAsk, agentLayers, precedence =
|
|
|
742
769
|
// defaults. Deterministic substring match, zero LLM (P2); ask/deny
|
|
743
770
|
// already gated pass through; ZELARI_PROVENANCE=0 opts out entirely.
|
|
744
771
|
let actionReason = decision.reason;
|
|
745
|
-
if (action !== 'deny' && (
|
|
772
|
+
if (action !== 'deny' && (requiredNow.includes('write') || requiredNow.includes('execute'))) {
|
|
746
773
|
const provHit = provenanceMatchIn(JSON.stringify(input ?? {}));
|
|
747
|
-
if (provHit && provenanceAppliesTo(provHit.source,
|
|
774
|
+
if (provHit && provenanceAppliesTo(provHit.source, requiredNow)) {
|
|
748
775
|
const provNote = `[provenance] args embed non-user ${provHit.source} content (via ${provHit.tool})`;
|
|
749
776
|
if (action === 'allow') {
|
|
750
777
|
action = 'ask';
|
|
751
|
-
actionReason = `${provNote} — confirm before ${
|
|
778
|
+
actionReason = `${provNote} — confirm before ${requiredNow.join('+')}`;
|
|
752
779
|
}
|
|
753
780
|
else {
|
|
754
781
|
actionReason = `${decision.reason} · ${provNote}`;
|
|
@@ -764,9 +791,9 @@ function wrapWithPermissions(original, policy, onAsk, agentLayers, precedence =
|
|
|
764
791
|
// tool (the user already answered THIS ask) is honored. Deterministic
|
|
765
792
|
// regex, zero LLM (P2); ask/deny already gated pass through untouched.
|
|
766
793
|
if (action === 'allow' &&
|
|
767
|
-
|
|
794
|
+
requiredNow.includes('execute') &&
|
|
768
795
|
activePermissionPreset() !== 'yolo' &&
|
|
769
|
-
!isSessionGranted(original.name,
|
|
796
|
+
!isSessionGranted(original.name, requiredNow)) {
|
|
770
797
|
const destructiveHit = destructiveCommandHit((input ?? {}));
|
|
771
798
|
if (destructiveHit) {
|
|
772
799
|
action = 'ask';
|
|
@@ -821,7 +848,7 @@ function wrapWithPermissions(original, policy, onAsk, agentLayers, precedence =
|
|
|
821
848
|
const outcome = await original.execute(input, ctx);
|
|
822
849
|
// W3.1 (t46): fingerprint non-mutating tool results (web/mcp/file) so a
|
|
823
850
|
// LATER write/execute embedding this content escalates to ask.
|
|
824
|
-
recordResultForProvenance(original.name,
|
|
851
|
+
recordResultForProvenance(original.name, requiredNow, outcome);
|
|
825
852
|
return outcome;
|
|
826
853
|
},
|
|
827
854
|
};
|