@yu_robotics/remote-cli 1.6.49 → 1.6.66
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/README.md +18 -8
- package/dist/client/MessageHandler.d.ts +8 -0
- package/dist/client/MessageHandler.d.ts.map +1 -1
- package/dist/client/MessageHandler.js +108 -3
- package/dist/client/MessageHandler.js.map +1 -1
- package/dist/client/TaskRecovery.d.ts +35 -0
- package/dist/client/TaskRecovery.d.ts.map +1 -0
- package/dist/client/TaskRecovery.js +237 -0
- package/dist/client/TaskRecovery.js.map +1 -0
- package/dist/client/WebSocketClient.d.ts +6 -0
- package/dist/client/WebSocketClient.d.ts.map +1 -1
- package/dist/client/WebSocketClient.js +39 -11
- package/dist/client/WebSocketClient.js.map +1 -1
- package/dist/commands/start.d.ts +3 -11
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +22 -99
- package/dist/commands/start.js.map +1 -1
- package/dist/executor/ClaudePersistentExecutor.d.ts +38 -2
- package/dist/executor/ClaudePersistentExecutor.d.ts.map +1 -1
- package/dist/executor/ClaudePersistentExecutor.js +369 -21
- package/dist/executor/ClaudePersistentExecutor.js.map +1 -1
- package/dist/executor/CodexAppServerExecutor.d.ts +13 -0
- package/dist/executor/CodexAppServerExecutor.d.ts.map +1 -1
- package/dist/executor/CodexAppServerExecutor.js +208 -5
- package/dist/executor/CodexAppServerExecutor.js.map +1 -1
- package/dist/executor/CodexSandbox.d.ts +23 -0
- package/dist/executor/CodexSandbox.d.ts.map +1 -0
- package/dist/executor/CodexSandbox.js +211 -0
- package/dist/executor/CodexSandbox.js.map +1 -0
- package/dist/executor/IExecutor.d.ts +5 -1
- package/dist/executor/IExecutor.d.ts.map +1 -1
- package/dist/executor/claude/ClaudeFilePolicy.d.ts +7 -0
- package/dist/executor/claude/ClaudeFilePolicy.d.ts.map +1 -0
- package/dist/executor/claude/ClaudeFilePolicy.js +88 -0
- package/dist/executor/claude/ClaudeFilePolicy.js.map +1 -0
- package/dist/executor/claude/ClaudeSandbox.d.ts +32 -0
- package/dist/executor/claude/ClaudeSandbox.d.ts.map +1 -0
- package/dist/executor/claude/ClaudeSandbox.js +245 -0
- package/dist/executor/claude/ClaudeSandbox.js.map +1 -0
- package/dist/executor/claude/approvalMcpServer.d.ts +2 -0
- package/dist/executor/claude/approvalMcpServer.d.ts.map +1 -0
- package/dist/executor/claude/approvalMcpServer.js +159 -0
- package/dist/executor/claude/approvalMcpServer.js.map +1 -0
- package/dist/executor/claude/filePolicyHook.d.ts +2 -0
- package/dist/executor/claude/filePolicyHook.d.ts.map +1 -0
- package/dist/executor/claude/filePolicyHook.js +63 -0
- package/dist/executor/claude/filePolicyHook.js.map +1 -0
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +4 -3
- package/dist/executor/index.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/thread/ThreadManager.d.ts.map +1 -1
- package/dist/thread/ThreadManager.js +2 -0
- package/dist/thread/ThreadManager.js.map +1 -1
- package/dist/types/config.d.ts +32 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/types/index.d.ts +53 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/update/AutomaticUpdater.d.ts +7 -1
- package/dist/update/AutomaticUpdater.d.ts.map +1 -1
- package/dist/update/AutomaticUpdater.js +25 -2
- package/dist/update/AutomaticUpdater.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ClaudeSandbox = void 0;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const os_1 = __importDefault(require("os"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const crypto_1 = require("crypto");
|
|
44
|
+
/**
|
|
45
|
+
* Local, per-thread Claude sandbox authorization. Backend session resets do
|
|
46
|
+
* not erase it. Mirrors CodexSandbox semantics; maps to Claude Code's native
|
|
47
|
+
* sandbox settings at process spawn.
|
|
48
|
+
*/
|
|
49
|
+
class ClaudeSandbox {
|
|
50
|
+
guard;
|
|
51
|
+
defaults;
|
|
52
|
+
override;
|
|
53
|
+
storePath;
|
|
54
|
+
constructor(guard, defaults, threadId) {
|
|
55
|
+
this.guard = guard;
|
|
56
|
+
this.defaults = defaults;
|
|
57
|
+
if (defaults !== undefined)
|
|
58
|
+
this.defaults = this.validate(defaults);
|
|
59
|
+
if (threadId && !/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,99}$/.test(threadId))
|
|
60
|
+
throw new Error('Invalid thread ID for sandbox storage.');
|
|
61
|
+
if (threadId) {
|
|
62
|
+
const id = encodeURIComponent(threadId);
|
|
63
|
+
this.storePath = path.join(os_1.default.homedir(), '.remote-cli', 'claude-sandbox', `${id}.json`);
|
|
64
|
+
if (fs.existsSync(this.storePath)) {
|
|
65
|
+
// Invalid authorization must fail closed, never fall back to full access.
|
|
66
|
+
const stored = JSON.parse(fs.readFileSync(this.storePath, 'utf8'));
|
|
67
|
+
this.override = this.validate(stored);
|
|
68
|
+
if (stored.writableRoots?.some((root, index) => root !== this.override.writableRoots[index])) {
|
|
69
|
+
throw new Error('A saved sandbox grant changed its symbolic-link target. Reauthorize the directory before continuing.');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
getConfig() {
|
|
75
|
+
const config = this.override ?? this.defaults;
|
|
76
|
+
return config ? { ...config, writableRoots: config.writableRoots ? [...config.writableRoots] : undefined } : undefined;
|
|
77
|
+
}
|
|
78
|
+
isRestricted() {
|
|
79
|
+
const mode = this.getConfig()?.mode;
|
|
80
|
+
return mode === 'workspace-write' || mode === 'read-only';
|
|
81
|
+
}
|
|
82
|
+
assertAvailable(cwd) {
|
|
83
|
+
if (!this.isRestricted())
|
|
84
|
+
return;
|
|
85
|
+
const platform = os_1.default.platform();
|
|
86
|
+
if (platform === 'darwin')
|
|
87
|
+
return;
|
|
88
|
+
if (platform !== 'linux') {
|
|
89
|
+
throw new Error('Claude sandbox requires macOS or Linux/WSL2. Native Windows is not supported.');
|
|
90
|
+
}
|
|
91
|
+
const directories = (process.env.PATH ?? '').split(path.delimiter);
|
|
92
|
+
const missing = ['bwrap', 'socat'].filter(tool => !directories.some(directory => {
|
|
93
|
+
const candidate = path.resolve(cwd, directory, tool);
|
|
94
|
+
try {
|
|
95
|
+
fs.accessSync(candidate, fs.constants.X_OK);
|
|
96
|
+
return fs.statSync(candidate).isFile();
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}));
|
|
102
|
+
if (missing.length > 0) {
|
|
103
|
+
throw new Error(`Claude sandbox dependencies missing from PATH: ${missing.join(', ')}. Install bubblewrap and socat before running sandboxed tasks (e.g. apt install bubblewrap socat).`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
configure(config) {
|
|
107
|
+
const validated = config === undefined ? undefined : this.validate(config);
|
|
108
|
+
if (this.storePath) {
|
|
109
|
+
if (validated) {
|
|
110
|
+
fs.mkdirSync(path.dirname(this.storePath), { recursive: true });
|
|
111
|
+
const temporary = `${this.storePath}.${(0, crypto_1.randomUUID)()}.tmp`;
|
|
112
|
+
try {
|
|
113
|
+
fs.writeFileSync(temporary, JSON.stringify(validated, null, 2), { mode: 0o600 });
|
|
114
|
+
fs.renameSync(temporary, this.storePath);
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
if (fs.existsSync(temporary))
|
|
118
|
+
fs.unlinkSync(temporary);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else if (fs.existsSync(this.storePath))
|
|
122
|
+
fs.unlinkSync(this.storePath);
|
|
123
|
+
}
|
|
124
|
+
this.override = validated;
|
|
125
|
+
}
|
|
126
|
+
deleteData() {
|
|
127
|
+
this.configure(undefined);
|
|
128
|
+
}
|
|
129
|
+
/** Resolve symlinks, including the existing parent of a new directory. */
|
|
130
|
+
normalize(directory, cwd) {
|
|
131
|
+
if (typeof directory !== 'string' || /[\x00-\x1f]/.test(directory)) {
|
|
132
|
+
throw new Error('Sandbox directories must be non-empty paths without control characters.');
|
|
133
|
+
}
|
|
134
|
+
const normalized = this.guard.normalizePath(directory, cwd);
|
|
135
|
+
let ancestor = normalized;
|
|
136
|
+
const suffix = [];
|
|
137
|
+
while (!fs.existsSync(ancestor)) {
|
|
138
|
+
if (fs.lstatSync(ancestor, { throwIfNoEntry: false })?.isSymbolicLink()) {
|
|
139
|
+
throw new Error(`Sandbox directory is a broken symbolic link: ${ancestor}`);
|
|
140
|
+
}
|
|
141
|
+
suffix.unshift(path.basename(ancestor));
|
|
142
|
+
const parent = path.dirname(ancestor);
|
|
143
|
+
if (parent === ancestor)
|
|
144
|
+
throw new Error(`Cannot resolve sandbox directory: ${directory}`);
|
|
145
|
+
ancestor = parent;
|
|
146
|
+
}
|
|
147
|
+
if (!fs.statSync(ancestor).isDirectory())
|
|
148
|
+
throw new Error(`Sandbox path is not a directory: ${ancestor}`);
|
|
149
|
+
return path.join(fs.realpathSync(ancestor), ...suffix);
|
|
150
|
+
}
|
|
151
|
+
/** Extra writable roots beyond the working directory (validated, normalized). */
|
|
152
|
+
extraWritableRoots() {
|
|
153
|
+
const config = this.getConfig();
|
|
154
|
+
if (config?.mode !== 'workspace-write')
|
|
155
|
+
return [];
|
|
156
|
+
for (const root of config.writableRoots ?? []) {
|
|
157
|
+
if (this.normalize(root) !== root)
|
|
158
|
+
throw new Error(`Authorized sandbox directory changed its symbolic-link target: ${root}`);
|
|
159
|
+
}
|
|
160
|
+
return [...new Set((config.writableRoots ?? []).map(root => this.normalize(root)))];
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Build the Claude Code settings object injected via --settings at spawn.
|
|
164
|
+
* Sandboxed commands run without prompts; widening requests surface through
|
|
165
|
+
* the permission-prompt tool instead.
|
|
166
|
+
*/
|
|
167
|
+
spawnSettings(cwd, fileHookCommand) {
|
|
168
|
+
const config = this.getConfig();
|
|
169
|
+
if (!config || !this.isRestricted())
|
|
170
|
+
return undefined;
|
|
171
|
+
const filesystem = {};
|
|
172
|
+
if (config.mode === 'workspace-write') {
|
|
173
|
+
const extra = this.extraWritableRoots();
|
|
174
|
+
if (extra.length > 0)
|
|
175
|
+
filesystem.allowWrite = extra;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
// read-only: revoke the default working-directory write grant.
|
|
179
|
+
filesystem.denyWrite = [this.normalize(cwd)];
|
|
180
|
+
}
|
|
181
|
+
const network = {};
|
|
182
|
+
if (config.networkAccess === false) {
|
|
183
|
+
// Hard-deny egress instead of prompting for each new domain.
|
|
184
|
+
network.allowedDomains = [];
|
|
185
|
+
// Native settings merge allowlists across scopes; an empty list alone
|
|
186
|
+
// would leave saved domains and WebFetch grants accessible.
|
|
187
|
+
network.deniedDomains = ['*'];
|
|
188
|
+
network.strictAllowlist = true;
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
// Permit routine networking without per-domain prompts. Native deny
|
|
192
|
+
// rules and managed domain restrictions still take precedence.
|
|
193
|
+
network.allowedDomains = ['*'];
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
permissions: {
|
|
197
|
+
// Ask rules take precedence over inherited allow rules. Bare Bash asks
|
|
198
|
+
// still permit auto-approval when the command runs inside the sandbox.
|
|
199
|
+
ask: ['Bash', 'PowerShell', 'Monitor', ...(fileHookCommand ? [] : ['Write', 'Edit', 'NotebookEdit'])],
|
|
200
|
+
},
|
|
201
|
+
...(fileHookCommand ? { hooks: {
|
|
202
|
+
SessionStart: [{ hooks: [{ type: 'command', command: fileHookCommand, timeout: 10 }] }],
|
|
203
|
+
PreToolUse: [{ matcher: '^(Write|Edit|NotebookEdit)$', hooks: [{ type: 'command', command: fileHookCommand, timeout: 10 }] }],
|
|
204
|
+
} } : {}),
|
|
205
|
+
sandbox: {
|
|
206
|
+
enabled: true,
|
|
207
|
+
failIfUnavailable: true,
|
|
208
|
+
autoAllowBashIfSandboxed: true,
|
|
209
|
+
// Widening requests must go through the permission-prompt channel.
|
|
210
|
+
allowUnsandboxedCommands: true,
|
|
211
|
+
filesystem,
|
|
212
|
+
network,
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
describe(cwd) {
|
|
217
|
+
const config = this.getConfig();
|
|
218
|
+
return [
|
|
219
|
+
`Claude sandbox: ${config?.mode ?? 'not configured (existing Claude Code settings apply)'}`,
|
|
220
|
+
...(this.isRestricted() ? [
|
|
221
|
+
'Scope: OS-enforced for Bash commands; ordinary file edits in authorized directories are automatic in workspace-write mode.',
|
|
222
|
+
`Network: ${config?.networkAccess === false ? 'denied' : 'enabled (native deny rules and managed restrictions still apply)'}`,
|
|
223
|
+
config?.mode === 'read-only'
|
|
224
|
+
? 'Workspace writes: require approval.'
|
|
225
|
+
: `Writable directories:\n- ${this.normalize(cwd)}\n${this.extraWritableRoots().map(root => `- ${root}`).join('\n')}`,
|
|
226
|
+
'Requests outside this policy require approval.',
|
|
227
|
+
] : []),
|
|
228
|
+
'Usage: /sandbox on|off|read-only|default; /sandbox network on|off; /sandbox allow <directory>; /sandbox remove <directory>',
|
|
229
|
+
'Directory authorizations belong to this thread and survive /clear, backend switches, and restarts.',
|
|
230
|
+
].join('\n');
|
|
231
|
+
}
|
|
232
|
+
validate(value) {
|
|
233
|
+
const config = value;
|
|
234
|
+
if (!config || typeof config !== 'object' || Array.isArray(config)
|
|
235
|
+
|| !['workspace-write', 'read-only', 'danger-full-access'].includes(config.mode)
|
|
236
|
+
|| (config.networkAccess !== undefined && typeof config.networkAccess !== 'boolean')
|
|
237
|
+
|| (config.writableRoots !== undefined && (!Array.isArray(config.writableRoots)
|
|
238
|
+
|| config.writableRoots.some(root => typeof root !== 'string' || !root.trim())))) {
|
|
239
|
+
throw new Error('Invalid Claude sandbox configuration. Expected mode, optional networkAccess boolean, and writableRoots paths.');
|
|
240
|
+
}
|
|
241
|
+
return { ...config, writableRoots: config.writableRoots?.map(root => this.normalize(root)) };
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
exports.ClaudeSandbox = ClaudeSandbox;
|
|
245
|
+
//# sourceMappingURL=ClaudeSandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeSandbox.js","sourceRoot":"","sources":["../../../src/executor/claude/ClaudeSandbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvalMcpServer.d.ts","sourceRoot":"","sources":["../../../src/executor/claude/approvalMcpServer.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
/**
|
|
37
|
+
* Standalone stdio MCP server that exposes Claude Code's permission-prompt tool.
|
|
38
|
+
* Spawned by the claude process via --mcp-config; forwards each permission
|
|
39
|
+
* request to the remote-cli executor over a local unix socket and returns the
|
|
40
|
+
* user's decision. Usage: node approvalMcpServer.js <socketPath>
|
|
41
|
+
*
|
|
42
|
+
* Wire format (NDJSON over the unix socket):
|
|
43
|
+
* request: { id, tool_name, input, tool_use_id }
|
|
44
|
+
* response: { id, behavior: 'allow' | 'deny', updatedInput?, message? }
|
|
45
|
+
*/
|
|
46
|
+
const net = __importStar(require("net"));
|
|
47
|
+
const crypto = __importStar(require("crypto"));
|
|
48
|
+
const socketPath = process.argv[2];
|
|
49
|
+
if (!socketPath) {
|
|
50
|
+
process.stderr.write('approvalMcpServer: missing socket path argument\n');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
// Backstop timeout; the executor enforces its own shorter approval expiry.
|
|
54
|
+
const REQUEST_TIMEOUT_MS = 15 * 60 * 1000;
|
|
55
|
+
function askExecutor(payload) {
|
|
56
|
+
return new Promise((resolve) => {
|
|
57
|
+
let settled = false;
|
|
58
|
+
const finish = (answer) => {
|
|
59
|
+
if (settled)
|
|
60
|
+
return;
|
|
61
|
+
settled = true;
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
socket.destroy();
|
|
64
|
+
resolve(answer);
|
|
65
|
+
};
|
|
66
|
+
const deny = (message) => finish({ id: payload.id, behavior: 'deny', message });
|
|
67
|
+
const timer = setTimeout(() => deny('Approval request timed out'), REQUEST_TIMEOUT_MS);
|
|
68
|
+
timer.unref?.();
|
|
69
|
+
const socket = net.createConnection(socketPath);
|
|
70
|
+
let buffer = '';
|
|
71
|
+
socket.on('connect', () => socket.write(JSON.stringify(payload) + '\n'));
|
|
72
|
+
socket.on('data', (chunk) => {
|
|
73
|
+
buffer += chunk;
|
|
74
|
+
const newline = buffer.indexOf('\n');
|
|
75
|
+
if (newline < 0)
|
|
76
|
+
return;
|
|
77
|
+
const line = buffer.slice(0, newline);
|
|
78
|
+
try {
|
|
79
|
+
const answer = JSON.parse(line);
|
|
80
|
+
if (answer && answer.id === payload.id)
|
|
81
|
+
finish(answer);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
deny('Invalid approval response');
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
socket.on('error', () => deny('Approval channel unavailable'));
|
|
88
|
+
socket.on('close', () => deny('Approval channel closed'));
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
let buffer = '';
|
|
92
|
+
process.stdin.on('data', (chunk) => {
|
|
93
|
+
buffer += chunk;
|
|
94
|
+
let index;
|
|
95
|
+
while ((index = buffer.indexOf('\n')) >= 0) {
|
|
96
|
+
const line = buffer.slice(0, index);
|
|
97
|
+
buffer = buffer.slice(index + 1);
|
|
98
|
+
if (!line.trim())
|
|
99
|
+
continue;
|
|
100
|
+
let message;
|
|
101
|
+
try {
|
|
102
|
+
message = JSON.parse(line);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
void handleMessage(message);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
async function handleMessage(message) {
|
|
111
|
+
if (message.method === 'initialize') {
|
|
112
|
+
reply(message.id, {
|
|
113
|
+
protocolVersion: message.params?.protocolVersion ?? '2024-11-05',
|
|
114
|
+
capabilities: { tools: {} },
|
|
115
|
+
serverInfo: { name: 'remote-cli-approval', version: '1.0.0' },
|
|
116
|
+
});
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (message.method === 'tools/list') {
|
|
120
|
+
reply(message.id, {
|
|
121
|
+
tools: [{
|
|
122
|
+
name: 'approval_prompt',
|
|
123
|
+
description: 'Ask the remote user for permission to run a tool call.',
|
|
124
|
+
inputSchema: {
|
|
125
|
+
type: 'object',
|
|
126
|
+
properties: {
|
|
127
|
+
tool_name: { type: 'string' },
|
|
128
|
+
input: { type: 'object' },
|
|
129
|
+
tool_use_id: { type: 'string' },
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
}],
|
|
133
|
+
});
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (message.method === 'tools/call') {
|
|
137
|
+
const args = message.params?.arguments ?? {};
|
|
138
|
+
const answer = await askExecutor({
|
|
139
|
+
id: crypto.randomUUID(),
|
|
140
|
+
tool_name: args.tool_name,
|
|
141
|
+
input: args.input,
|
|
142
|
+
tool_use_id: args.tool_use_id,
|
|
143
|
+
});
|
|
144
|
+
reply(message.id, {
|
|
145
|
+
content: [{ type: 'text', text: JSON.stringify({
|
|
146
|
+
behavior: answer.behavior === 'allow' ? 'allow' : 'deny',
|
|
147
|
+
...(answer.behavior === 'allow' ? { updatedInput: answer.updatedInput ?? args.input } : {}),
|
|
148
|
+
...(answer.behavior !== 'allow' ? { message: answer.message ?? 'Denied by remote user' } : {}),
|
|
149
|
+
}) }],
|
|
150
|
+
});
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (message.id !== undefined)
|
|
154
|
+
reply(message.id, {});
|
|
155
|
+
}
|
|
156
|
+
function reply(id, result) {
|
|
157
|
+
process.stdout.write(JSON.stringify({ jsonrpc: '2.0', id, result }) + '\n');
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=approvalMcpServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvalMcpServer.js","sourceRoot":"","sources":["../../../src/executor/claude/approvalMcpServer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,yCAA2B;AAC3B,+CAAiC;AAEjC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,CAAC,UAAU,EAAE,CAAC;IAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,2EAA2E;AAC3E,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C,SAAS,WAAW,CAAC,OAAgC;IACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,MAA+B,EAAE,EAAE;YACjD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAExF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACvF,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAEhB,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,OAAO,GAAG,CAAC;gBAAE,OAAO;YACxB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;oBAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACzD,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;IACjC,MAAM,IAAI,KAAK,CAAC;IAChB,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,aAAa,CAAC,OAAY;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACpC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;YAChB,eAAe,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,IAAI,YAAY;YAChE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE;SAC9D,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACpC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;YAChB,KAAK,EAAE,CAAC;oBACN,IAAI,EAAE,iBAAiB;oBACvB,WAAW,EAAE,wDAAwD;oBACrE,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACzB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAChC;qBACF;iBACF,CAAC;SACH,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC/B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QACH,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;YAChB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBAC7C,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;wBACxD,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3F,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC/F,CAAC,EAAE,CAAC;SACN,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS;QAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,KAAK,CAAC,EAAW,EAAE,MAAe;IACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filePolicyHook.d.ts","sourceRoot":"","sources":["../../../src/executor/claude/filePolicyHook.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/** Process-scoped Claude hooks; no global or project settings are modified. */
|
|
7
|
+
const net_1 = __importDefault(require("net"));
|
|
8
|
+
async function main() {
|
|
9
|
+
const [socketPath, token] = process.argv.slice(2);
|
|
10
|
+
if (!socketPath || !token)
|
|
11
|
+
throw new Error('Missing file policy connection.');
|
|
12
|
+
let text = '';
|
|
13
|
+
for await (const chunk of process.stdin)
|
|
14
|
+
text += chunk;
|
|
15
|
+
const event = JSON.parse(text);
|
|
16
|
+
const startup = event.hook_event_name === 'SessionStart';
|
|
17
|
+
if (!startup && event.hook_event_name !== 'PreToolUse')
|
|
18
|
+
throw new Error('Unexpected hook event.');
|
|
19
|
+
const input = event.tool_input ?? {};
|
|
20
|
+
const payload = { type: 'file_policy', token, startup, tool_name: event.tool_name,
|
|
21
|
+
input: { file_path: input.file_path, notebook_path: input.notebook_path } };
|
|
22
|
+
const answer = await new Promise((resolve, reject) => {
|
|
23
|
+
const socket = net_1.default.createConnection(socketPath);
|
|
24
|
+
const finish = (error, value) => {
|
|
25
|
+
clearTimeout(timer);
|
|
26
|
+
socket.destroy();
|
|
27
|
+
error ? reject(error) : resolve(value);
|
|
28
|
+
};
|
|
29
|
+
const timer = setTimeout(() => finish(new Error('File policy check timed out.')), 5000);
|
|
30
|
+
let buffer = '';
|
|
31
|
+
socket.on('error', error => finish(error));
|
|
32
|
+
socket.on('end', () => finish(new Error('File policy connection closed.')));
|
|
33
|
+
socket.on('connect', () => socket.write(JSON.stringify(payload) + '\n'));
|
|
34
|
+
socket.on('data', chunk => {
|
|
35
|
+
buffer += chunk;
|
|
36
|
+
const newline = buffer.indexOf('\n');
|
|
37
|
+
if (newline < 0)
|
|
38
|
+
return;
|
|
39
|
+
try {
|
|
40
|
+
finish(undefined, JSON.parse(buffer.slice(0, newline)));
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
finish(new Error('Invalid file policy response.'));
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
if (!['allow', 'ask', 'deny'].includes(answer?.decision))
|
|
48
|
+
throw new Error('Missing file policy decision.');
|
|
49
|
+
if (startup) {
|
|
50
|
+
if (answer.decision !== 'allow')
|
|
51
|
+
throw new Error('File policy startup rejected.');
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
process.stdout.write(JSON.stringify({ hookSpecificOutput: {
|
|
55
|
+
hookEventName: 'PreToolUse', permissionDecision: answer.decision, permissionDecisionReason: answer.reason,
|
|
56
|
+
} }) + '\n');
|
|
57
|
+
}
|
|
58
|
+
void main().catch(error => {
|
|
59
|
+
// Exit 2 is a blocking hook failure, including connection and parse errors.
|
|
60
|
+
process.stderr.write(`Remote CLI file policy unavailable: ${error.message}\n`);
|
|
61
|
+
process.exitCode = 2;
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=filePolicyHook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filePolicyHook.js","sourceRoot":"","sources":["../../../src/executor/claude/filePolicyHook.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAOtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAClG,YAAY,EACV,uBAAuB,IAAI,oBAAoB,EAC/C,sBAAsB,IAAI,mBAAmB,GAC9C,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,EAC9B,IAAI,GAAE,YAAqB,EAC3B,uBAAuB,CAAC,EAAE,MAAM,GAC/B,wBAAwB,CAM1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,cAAc,EAC9B,cAAc,GAAE,cAAiC,EACjD,uBAAuB,CAAC,EAAE,MAAM,EAChC,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAOtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAClG,YAAY,EACV,uBAAuB,IAAI,oBAAoB,EAC/C,sBAAsB,IAAI,mBAAmB,GAC9C,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,EAC9B,IAAI,GAAE,YAAqB,EAC3B,uBAAuB,CAAC,EAAE,MAAM,GAC/B,wBAAwB,CAM1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,cAAc,EAC9B,cAAc,GAAE,cAAiC,EACjD,uBAAuB,CAAC,EAAE,MAAM,EAChC,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,SAAS,CA4FX"}
|
package/dist/executor/index.js
CHANGED
|
@@ -73,6 +73,7 @@ function createExecutor(directoryGuard, executorConfig = { type: 'auto' }, initi
|
|
|
73
73
|
model: model ?? executorConfig.codex?.model,
|
|
74
74
|
effort,
|
|
75
75
|
autoApprove: executorConfig.codex?.autoApprove ?? true,
|
|
76
|
+
sandbox: executorConfig.codex?.sandbox,
|
|
76
77
|
initialWorkingDirectory,
|
|
77
78
|
codexCommand: executorConfig.codex?.command,
|
|
78
79
|
threadId,
|
|
@@ -120,14 +121,14 @@ function createExecutor(directoryGuard, executorConfig = { type: 'auto' }, initi
|
|
|
120
121
|
});
|
|
121
122
|
case 'claude-persistent':
|
|
122
123
|
console.log('[ExecutorFactory] Using Claude persistent executor');
|
|
123
|
-
return new ClaudePersistentExecutor_1.ClaudePersistentExecutor(directoryGuard, initialWorkingDirectory, threadId, model);
|
|
124
|
+
return new ClaudePersistentExecutor_1.ClaudePersistentExecutor(directoryGuard, initialWorkingDirectory, threadId, model, executorConfig.claude?.sandbox, executorConfig.claude?.command);
|
|
124
125
|
case 'claude-spawn':
|
|
125
126
|
console.warn('[ExecutorFactory] Claude spawn mode was removed; using persistent mode.');
|
|
126
|
-
return new ClaudePersistentExecutor_1.ClaudePersistentExecutor(directoryGuard, initialWorkingDirectory, threadId, model);
|
|
127
|
+
return new ClaudePersistentExecutor_1.ClaudePersistentExecutor(directoryGuard, initialWorkingDirectory, threadId, model, executorConfig.claude?.sandbox, executorConfig.claude?.command);
|
|
127
128
|
case 'auto':
|
|
128
129
|
default:
|
|
129
130
|
console.log('[ExecutorFactory] Using Claude persistent executor (auto)');
|
|
130
|
-
return new ClaudePersistentExecutor_1.ClaudePersistentExecutor(directoryGuard, initialWorkingDirectory, threadId, model);
|
|
131
|
+
return new ClaudePersistentExecutor_1.ClaudePersistentExecutor(directoryGuard, initialWorkingDirectory, threadId, model, executorConfig.claude?.sandbox, executorConfig.claude?.command);
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":";;;AAsCA,oDAUC;AAYD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -63,7 +63,7 @@ program
|
|
|
63
63
|
.command('start')
|
|
64
64
|
.description('Start the remote CLI service')
|
|
65
65
|
.option('-d, --daemon', 'Run as background daemon')
|
|
66
|
-
.option('--non-interactive', '
|
|
66
|
+
.option('--non-interactive', 'Exit after automatic updates for a process supervisor to restart')
|
|
67
67
|
.action(async (options) => {
|
|
68
68
|
try {
|
|
69
69
|
const result = await (0, start_1.startCommand)({
|