Check Point
Rolling release / release (push) Successful in 6m36s

This commit is contained in:
2026-09-12 09:07:09 -04:00
parent e9040d110a
commit a4073b9020
63 changed files with 2459 additions and 632 deletions
+11
View File
@@ -12,6 +12,7 @@ const MAX_DESC = 2000;
const bySession = new Map();
const sessionOpts = new Map();
const handlers = new Map();
const permissions = new Map();
function setReserved(names) {
reserved = new Set(names);
@@ -83,6 +84,9 @@ function register(sessionId, tools) {
throw new Error('too many custom tools (max ' + MAX_TOOLS + ')');
}
map.set(schema.name, schema);
let gates = permissions.get(sessionId);
if (!gates) permissions.set(sessionId, gates = new Map());
gates.set(schema.name, t.permission || 'write');
if (typeof t.execute === 'function') {
let h = handlers.get(sessionId);
if (!h) {
@@ -101,6 +105,7 @@ function unregister(sessionId, name) {
if (map && name) map.delete(name);
const h = handlers.get(sessionId);
if (h && name) h.delete(name);
permissions.get(sessionId)?.delete(name);
return list(sessionId);
}
@@ -108,6 +113,7 @@ function clear(sessionId) {
bySession.delete(sessionId);
sessionOpts.delete(sessionId);
handlers.delete(sessionId);
permissions.delete(sessionId);
}
function has(sessionId, name) {
@@ -120,11 +126,16 @@ function getHandler(sessionId, name) {
return h && h.get(name);
}
function needsPermission(sessionId, name, mode) {
return mode !== 'always-approve' && has(sessionId, name) && permissions.get(sessionId)?.get(name) !== 'read';
}
function defs(sessionId) {
return list(sessionId);
}
module.exports = {
needsPermission,
NAME_RE,
MAX_TOOLS,
setReserved,
+1 -1
View File
@@ -781,7 +781,7 @@ async function runTurn(ctx) {
continue;
}
if (sandbox.needsPermission(name, mode) && !planMode.isPlanFilePath(args.path, tracker.planPath)) {
if (customTools.needsPermission(session.id, name, mode) || (sandbox.needsPermission(name, mode) && !((name === 'write_file' || name === 'search_replace') && planMode.isPlanFilePath(args.path, tracker.planPath)))) {
let remembered = null;
try {
remembered = permStore.resolve(name, args);