sessix-server 0.2.8 → 0.2.9
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/index.js +63 -23
- package/dist/server.js +63 -23
- package/package.json +10 -1
- package/dist/approval/ApprovalProxy.d.ts +0 -86
- package/dist/approval/ApprovalProxy.d.ts.map +0 -1
- package/dist/approval/ApprovalProxy.js +0 -363
- package/dist/approval/ApprovalProxy.js.map +0 -1
- package/dist/hooks/HookInstaller.d.ts +0 -55
- package/dist/hooks/HookInstaller.d.ts.map +0 -1
- package/dist/hooks/HookInstaller.js +0 -215
- package/dist/hooks/HookInstaller.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/mdns/MdnsService.d.ts +0 -36
- package/dist/mdns/MdnsService.d.ts.map +0 -1
- package/dist/mdns/MdnsService.js +0 -66
- package/dist/mdns/MdnsService.js.map +0 -1
- package/dist/notification/ActivityPushChannel.d.ts +0 -54
- package/dist/notification/ActivityPushChannel.d.ts.map +0 -1
- package/dist/notification/ActivityPushChannel.js +0 -235
- package/dist/notification/ActivityPushChannel.js.map +0 -1
- package/dist/notification/ExpoNotificationChannel.d.ts +0 -17
- package/dist/notification/ExpoNotificationChannel.d.ts.map +0 -1
- package/dist/notification/ExpoNotificationChannel.js +0 -57
- package/dist/notification/ExpoNotificationChannel.js.map +0 -1
- package/dist/notification/MacNotificationChannel.d.ts +0 -22
- package/dist/notification/MacNotificationChannel.d.ts.map +0 -1
- package/dist/notification/MacNotificationChannel.js +0 -33
- package/dist/notification/MacNotificationChannel.js.map +0 -1
- package/dist/notification/NotificationService.d.ts +0 -50
- package/dist/notification/NotificationService.d.ts.map +0 -1
- package/dist/notification/NotificationService.js +0 -177
- package/dist/notification/NotificationService.js.map +0 -1
- package/dist/providers/ExecutionProvider.d.ts +0 -60
- package/dist/providers/ExecutionProvider.d.ts.map +0 -1
- package/dist/providers/ExecutionProvider.js +0 -3
- package/dist/providers/ExecutionProvider.js.map +0 -1
- package/dist/providers/ProcessProvider.d.ts +0 -117
- package/dist/providers/ProcessProvider.d.ts.map +0 -1
- package/dist/providers/ProcessProvider.js +0 -507
- package/dist/providers/ProcessProvider.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/session/ProjectReader.d.ts +0 -44
- package/dist/session/ProjectReader.d.ts.map +0 -1
- package/dist/session/ProjectReader.js +0 -471
- package/dist/session/ProjectReader.js.map +0 -1
- package/dist/session/SessionFileWatcher.d.ts +0 -35
- package/dist/session/SessionFileWatcher.d.ts.map +0 -1
- package/dist/session/SessionFileWatcher.js +0 -207
- package/dist/session/SessionFileWatcher.js.map +0 -1
- package/dist/session/SessionManager.d.ts +0 -114
- package/dist/session/SessionManager.d.ts.map +0 -1
- package/dist/session/SessionManager.js +0 -356
- package/dist/session/SessionManager.js.map +0 -1
- package/dist/ws/WsBridge.d.ts +0 -55
- package/dist/ws/WsBridge.d.ts.map +0 -1
- package/dist/ws/WsBridge.js +0 -220
- package/dist/ws/WsBridge.js.map +0 -1
|
@@ -1,363 +0,0 @@
|
|
|
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
|
-
exports.ApprovalProxy = void 0;
|
|
7
|
-
const node_http_1 = __importDefault(require("node:http"));
|
|
8
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
-
const node_os_1 = __importDefault(require("node:os"));
|
|
11
|
-
const uuid_1 = require("uuid");
|
|
12
|
-
/**
|
|
13
|
-
* 审批代理 HTTP 服务
|
|
14
|
-
*
|
|
15
|
-
* 接收 Claude Code hook 发来的工具审批请求,通过长轮询机制
|
|
16
|
-
* hold 住响应,等待手机端用户做出审批决策后再返回。
|
|
17
|
-
*/
|
|
18
|
-
class ApprovalProxy {
|
|
19
|
-
server;
|
|
20
|
-
token;
|
|
21
|
-
port;
|
|
22
|
-
settingsPath = node_path_1.default.join(node_os_1.default.homedir(), '.claude', 'settings.json');
|
|
23
|
-
/** 待处理的审批请求:requestId -> { resolve, timer, request } */
|
|
24
|
-
pendingApprovals = new Map();
|
|
25
|
-
/** 审批请求回调(通知外部推送到手机) */
|
|
26
|
-
approvalRequestCallbacks = [];
|
|
27
|
-
/** 获取状态信息的回调(由外部注入) */
|
|
28
|
-
statusInfoProvider = null;
|
|
29
|
-
constructor(options) {
|
|
30
|
-
this.token = options.token;
|
|
31
|
-
this.port = options.port;
|
|
32
|
-
this.server = node_http_1.default.createServer((req, res) => {
|
|
33
|
-
this.handleRequest(req, res);
|
|
34
|
-
});
|
|
35
|
-
this.server.listen(options.port, () => {
|
|
36
|
-
console.log(`[ApprovalProxy] HTTP 审批服务已启动,端口 ${options.port}`);
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* 异步工厂方法:等待端口监听成功后 resolve,端口占用等错误时 reject。
|
|
41
|
-
*/
|
|
42
|
-
static async create(options) {
|
|
43
|
-
return new Promise((resolve, reject) => {
|
|
44
|
-
const proxy = new ApprovalProxy(options);
|
|
45
|
-
proxy.server.once('listening', () => {
|
|
46
|
-
proxy.server.on('error', (err) => console.error('[ApprovalProxy] 服务运行错误:', err));
|
|
47
|
-
resolve(proxy);
|
|
48
|
-
});
|
|
49
|
-
proxy.server.once('error', reject);
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
// ============================================
|
|
53
|
-
// 公开 API
|
|
54
|
-
// ============================================
|
|
55
|
-
/** 注册审批请求回调(当有新的审批请求时触发) */
|
|
56
|
-
onApprovalRequest(callback) {
|
|
57
|
-
this.approvalRequestCallbacks.push(callback);
|
|
58
|
-
}
|
|
59
|
-
/** 设置状态信息提供者(用于 /health 端点) */
|
|
60
|
-
setStatusInfoProvider(provider) {
|
|
61
|
-
this.statusInfoProvider = provider;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* 注入审批结果
|
|
65
|
-
*
|
|
66
|
-
* 从 pendingApprovals 中取出对应请求,resolve promise,
|
|
67
|
-
* 让长轮询的 HTTP 响应返回审批结果给 Claude Code hook。
|
|
68
|
-
*/
|
|
69
|
-
resolveApproval(requestId, decision) {
|
|
70
|
-
const pending = this.pendingApprovals.get(requestId);
|
|
71
|
-
if (!pending) {
|
|
72
|
-
console.warn(`[ApprovalProxy] 审批请求 ${requestId} 不存在或已超时`);
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
// 清除超时定时器
|
|
76
|
-
clearTimeout(pending.timer);
|
|
77
|
-
// resolve promise,长轮询响应将返回
|
|
78
|
-
pending.resolve(decision);
|
|
79
|
-
// 从 map 中移除
|
|
80
|
-
this.pendingApprovals.delete(requestId);
|
|
81
|
-
console.log(`[ApprovalProxy] 审批请求 ${requestId} 已处理: ${decision.decision}`);
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
/** 获取当前待处理的审批数量 */
|
|
85
|
-
getPendingCount() {
|
|
86
|
-
return this.pendingApprovals.size;
|
|
87
|
-
}
|
|
88
|
-
/** 检查指定审批请求是否仍在等待用户决策 */
|
|
89
|
-
isPending(requestId) {
|
|
90
|
-
return this.pendingApprovals.has(requestId);
|
|
91
|
-
}
|
|
92
|
-
/** 检查工具是否已在 settings.json permissions.allow 中(检查项目级和全局) */
|
|
93
|
-
isToolInClaudeSettings(toolName, projectPath) {
|
|
94
|
-
const checkPath = (filepath) => {
|
|
95
|
-
try {
|
|
96
|
-
const raw = node_fs_1.default.readFileSync(filepath, 'utf-8');
|
|
97
|
-
const settings = JSON.parse(raw);
|
|
98
|
-
const allow = settings?.permissions?.allow ?? [];
|
|
99
|
-
// 匹配 "Edit(*)" 或 "Edit" 开头的任何条目
|
|
100
|
-
return allow.some(entry => entry === `${toolName}(*)` || entry === toolName);
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
// 优先检查项目级(若提供)
|
|
107
|
-
if (projectPath) {
|
|
108
|
-
const projectSettingsPath = node_path_1.default.join(projectPath, '.claude', 'settings.json');
|
|
109
|
-
if (checkPath(projectSettingsPath))
|
|
110
|
-
return true;
|
|
111
|
-
}
|
|
112
|
-
// 再检查全局
|
|
113
|
-
return checkPath(this.settingsPath);
|
|
114
|
-
}
|
|
115
|
-
/** 将工具写入 settings.json permissions.allow(项目级或全局) */
|
|
116
|
-
addToClaudeSettings(projectPath, toolName) {
|
|
117
|
-
const targetPath = projectPath
|
|
118
|
-
? node_path_1.default.join(projectPath, '.claude', 'settings.json')
|
|
119
|
-
: this.settingsPath;
|
|
120
|
-
try {
|
|
121
|
-
// 确保目录存在
|
|
122
|
-
if (projectPath) {
|
|
123
|
-
const dir = node_path_1.default.dirname(targetPath);
|
|
124
|
-
if (!node_fs_1.default.existsSync(dir)) {
|
|
125
|
-
node_fs_1.default.mkdirSync(dir, { recursive: true });
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
let settings = {};
|
|
129
|
-
try {
|
|
130
|
-
settings = JSON.parse(node_fs_1.default.readFileSync(targetPath, 'utf-8'));
|
|
131
|
-
}
|
|
132
|
-
catch {
|
|
133
|
-
// 文件不存在时从空对象开始
|
|
134
|
-
}
|
|
135
|
-
if (!settings.permissions) {
|
|
136
|
-
settings.permissions = {};
|
|
137
|
-
}
|
|
138
|
-
const perms = settings.permissions;
|
|
139
|
-
if (!Array.isArray(perms.allow)) {
|
|
140
|
-
perms.allow = [];
|
|
141
|
-
}
|
|
142
|
-
const allow = perms.allow;
|
|
143
|
-
const entry = `${toolName}(*)`;
|
|
144
|
-
if (!allow.includes(entry)) {
|
|
145
|
-
allow.push(entry);
|
|
146
|
-
node_fs_1.default.writeFileSync(targetPath, JSON.stringify(settings, null, 2), 'utf-8');
|
|
147
|
-
const label = projectPath ? `${projectPath}/.claude/settings.json` : '~/.claude/settings.json';
|
|
148
|
-
console.log(`[ApprovalProxy] 已将 ${entry} 写入 ${label}`);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
catch (err) {
|
|
152
|
-
console.error('[ApprovalProxy] 写入 settings.json 失败:', err);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
/** 获取指定会话的所有 pending approval requests(用于 subscribe 重发) */
|
|
156
|
-
getPendingRequestsForSession(sessionId) {
|
|
157
|
-
const result = [];
|
|
158
|
-
for (const { request } of this.pendingApprovals.values()) {
|
|
159
|
-
if (request.sessionId === sessionId) {
|
|
160
|
-
result.push(request);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return result;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* 批量允许所有待处理的审批请求(手机端断线时调用)
|
|
167
|
-
*/
|
|
168
|
-
approveAll(reason) {
|
|
169
|
-
const entries = Array.from(this.pendingApprovals.entries());
|
|
170
|
-
for (const [requestId, pending] of entries) {
|
|
171
|
-
clearTimeout(pending.timer);
|
|
172
|
-
pending.resolve({ decision: 'allow' });
|
|
173
|
-
this.pendingApprovals.delete(requestId);
|
|
174
|
-
console.log(`[ApprovalProxy] 审批请求 ${requestId} 已自动允许${reason ? `(${reason})` : ''}`);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
/** 优雅关闭 HTTP 服务 */
|
|
178
|
-
close() {
|
|
179
|
-
return new Promise((resolve, reject) => {
|
|
180
|
-
// 清理所有待处理的审批(默认放行)
|
|
181
|
-
// 先收集再清理,避免迭代中删除
|
|
182
|
-
const pendingEntries = Array.from(this.pendingApprovals.entries());
|
|
183
|
-
for (const [, pending] of pendingEntries) {
|
|
184
|
-
clearTimeout(pending.timer);
|
|
185
|
-
pending.resolve({ decision: 'deny', reason: '服务器已关闭' });
|
|
186
|
-
}
|
|
187
|
-
this.pendingApprovals.clear();
|
|
188
|
-
this.server.close((err) => {
|
|
189
|
-
if (err) {
|
|
190
|
-
reject(err);
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
console.log('[ApprovalProxy] HTTP 审批服务已关闭');
|
|
194
|
-
resolve();
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
// ============================================
|
|
200
|
-
// 内部方法
|
|
201
|
-
// ============================================
|
|
202
|
-
/** 路由请求 */
|
|
203
|
-
handleRequest(req, res) {
|
|
204
|
-
// CORS 支持(局域网跨域)
|
|
205
|
-
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
206
|
-
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
207
|
-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
208
|
-
// 预检请求直接返回
|
|
209
|
-
if (req.method === 'OPTIONS') {
|
|
210
|
-
res.writeHead(204);
|
|
211
|
-
res.end();
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
const url = new URL(req.url ?? '/', `http://${req.headers.host}`);
|
|
215
|
-
const pathname = url.pathname;
|
|
216
|
-
if (req.method === 'POST' && pathname === '/hook/approval') {
|
|
217
|
-
this.handleApprovalHook(req, res);
|
|
218
|
-
}
|
|
219
|
-
else if (req.method === 'GET' && pathname === '/health') {
|
|
220
|
-
this.handleHealth(req, res);
|
|
221
|
-
}
|
|
222
|
-
else if (req.method === 'GET' && pathname === '/token') {
|
|
223
|
-
this.handleToken(req, res);
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
this.sendJson(res, 404, { error: 'Not Found' });
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* 核心端点:处理 Claude Code hook 的审批请求
|
|
231
|
-
*
|
|
232
|
-
* 长轮询实现:
|
|
233
|
-
* 1. 解析请求 body
|
|
234
|
-
* 2. 创建 ApprovalRequest 对象
|
|
235
|
-
* 3. 通知外部(推到手机)
|
|
236
|
-
* 4. 创建 Promise 并 hold 住 response
|
|
237
|
-
* 5. 等待 resolveApproval() 被调用或超时
|
|
238
|
-
*/
|
|
239
|
-
async handleApprovalHook(req, res) {
|
|
240
|
-
try {
|
|
241
|
-
// 手动解析 JSON body
|
|
242
|
-
const body = await this.parseJsonBody(req);
|
|
243
|
-
// 构建 ApprovalRequest 对象
|
|
244
|
-
// hook 脚本发送格式: { sessionId, projectPath, payload: { tool_name, tool_input, ... } }
|
|
245
|
-
const payload = body.payload ?? body;
|
|
246
|
-
const requestId = (0, uuid_1.v4)();
|
|
247
|
-
const projectPath = String(body.projectPath ?? 'unknown');
|
|
248
|
-
const toolName = String(payload.tool_name ?? body.tool_name ?? 'unknown');
|
|
249
|
-
const toolInput = payload.tool_input ?? body.tool_input ?? {};
|
|
250
|
-
const approvalRequest = {
|
|
251
|
-
id: requestId,
|
|
252
|
-
sessionId: String(body.sessionId ?? 'unknown'),
|
|
253
|
-
projectPath,
|
|
254
|
-
toolName,
|
|
255
|
-
toolInput,
|
|
256
|
-
description: String(payload.description ?? body.description ?? `${toolName} 工具调用请求`),
|
|
257
|
-
createdAt: Date.now(),
|
|
258
|
-
};
|
|
259
|
-
console.log(`[ApprovalProxy] 收到审批请求: ${requestId} (${approvalRequest.toolName})`);
|
|
260
|
-
// 检查工具是否已在 Claude Code settings 中被允许,如果是直接放行(不需要手机审批)
|
|
261
|
-
// 优先检查项目级,再检查全局
|
|
262
|
-
if (this.isToolInClaudeSettings(approvalRequest.toolName, projectPath !== 'unknown' ? projectPath : undefined)) {
|
|
263
|
-
console.log(`[ApprovalProxy] ${approvalRequest.toolName} 已在 settings.json 中被允许,直接放行`);
|
|
264
|
-
this.sendJson(res, 200, { decision: 'allow' });
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
// 通知外部(会被推送到手机端)
|
|
268
|
-
this.notifyApprovalRequest(approvalRequest);
|
|
269
|
-
// 长轮询:创建 Promise,等待审批结果或超时
|
|
270
|
-
const decision = await new Promise((resolve) => {
|
|
271
|
-
// 5 分钟超时,默认允许(手机端可能已断线,不应阻塞任务)
|
|
272
|
-
const timer = setTimeout(() => {
|
|
273
|
-
console.log(`[ApprovalProxy] 审批请求 ${requestId} 已超时,默认允许`);
|
|
274
|
-
this.pendingApprovals.delete(requestId);
|
|
275
|
-
resolve({ decision: 'allow' });
|
|
276
|
-
}, 300_000);
|
|
277
|
-
// 存入待处理 map(包含完整的 request 对象用于 subscribe 重发)
|
|
278
|
-
this.pendingApprovals.set(requestId, { resolve, timer, request: approvalRequest });
|
|
279
|
-
});
|
|
280
|
-
// 返回审批结果给 Claude Code hook
|
|
281
|
-
this.sendJson(res, 200, decision);
|
|
282
|
-
}
|
|
283
|
-
catch (err) {
|
|
284
|
-
console.error('[ApprovalProxy] 处理审批请求失败:', err);
|
|
285
|
-
// 出错时默认拒绝(安全优先)
|
|
286
|
-
this.sendJson(res, 200, { decision: 'deny', reason: '服务器处理请求失败' });
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
/** 健康检查端点 */
|
|
290
|
-
handleHealth(_req, res) {
|
|
291
|
-
const info = this.statusInfoProvider?.() ?? { connections: 0, activeSessions: 0 };
|
|
292
|
-
this.sendJson(res, 200, {
|
|
293
|
-
status: 'ok',
|
|
294
|
-
connections: info.connections,
|
|
295
|
-
activeSessions: info.activeSessions,
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
/** 返回连接 token(仅本机访问) */
|
|
299
|
-
handleToken(req, res) {
|
|
300
|
-
// 检查是否为本机访问
|
|
301
|
-
const remoteAddress = req.socket.remoteAddress;
|
|
302
|
-
const isLocal = remoteAddress === '127.0.0.1'
|
|
303
|
-
|| remoteAddress === '::1'
|
|
304
|
-
|| remoteAddress === '::ffff:127.0.0.1';
|
|
305
|
-
if (!isLocal) {
|
|
306
|
-
this.sendJson(res, 403, { error: 'Forbidden: 仅允许本机访问' });
|
|
307
|
-
return;
|
|
308
|
-
}
|
|
309
|
-
this.sendJson(res, 200, { token: this.token });
|
|
310
|
-
}
|
|
311
|
-
/** 通知所有注册的审批请求回调 */
|
|
312
|
-
notifyApprovalRequest(request) {
|
|
313
|
-
for (const callback of this.approvalRequestCallbacks) {
|
|
314
|
-
try {
|
|
315
|
-
callback(request);
|
|
316
|
-
}
|
|
317
|
-
catch (err) {
|
|
318
|
-
console.error('[ApprovalProxy] 审批请求回调执行异常:', err);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
/** 手动解析请求的 JSON body(限制最大 1MB 防止滥用) */
|
|
323
|
-
parseJsonBody(req) {
|
|
324
|
-
const MAX_BODY_SIZE = 1024 * 1024; // 1MB
|
|
325
|
-
return new Promise((resolve, reject) => {
|
|
326
|
-
const chunks = [];
|
|
327
|
-
let totalSize = 0;
|
|
328
|
-
req.on('data', (chunk) => {
|
|
329
|
-
totalSize += chunk.length;
|
|
330
|
-
if (totalSize > MAX_BODY_SIZE) {
|
|
331
|
-
req.destroy();
|
|
332
|
-
reject(new Error('请求 body 过大(超过 1MB)'));
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
chunks.push(chunk);
|
|
336
|
-
});
|
|
337
|
-
req.on('end', () => {
|
|
338
|
-
try {
|
|
339
|
-
const raw = Buffer.concat(chunks).toString('utf-8');
|
|
340
|
-
const parsed = JSON.parse(raw);
|
|
341
|
-
resolve(parsed);
|
|
342
|
-
}
|
|
343
|
-
catch {
|
|
344
|
-
reject(new Error('无效的 JSON body'));
|
|
345
|
-
}
|
|
346
|
-
});
|
|
347
|
-
req.on('error', (err) => {
|
|
348
|
-
reject(err);
|
|
349
|
-
});
|
|
350
|
-
});
|
|
351
|
-
}
|
|
352
|
-
/** 发送 JSON 响应的辅助方法 */
|
|
353
|
-
sendJson(res, statusCode, data) {
|
|
354
|
-
const body = JSON.stringify(data);
|
|
355
|
-
res.writeHead(statusCode, {
|
|
356
|
-
'Content-Type': 'application/json; charset=utf-8',
|
|
357
|
-
'Content-Length': Buffer.byteLength(body),
|
|
358
|
-
});
|
|
359
|
-
res.end(body);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
exports.ApprovalProxy = ApprovalProxy;
|
|
363
|
-
//# sourceMappingURL=ApprovalProxy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ApprovalProxy.js","sourceRoot":"","sources":["../../src/approval/ApprovalProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hook 安装器
|
|
3
|
-
*
|
|
4
|
-
* 负责将 Sessix 的审批 hook 脚本安装到 Claude Code 中:
|
|
5
|
-
* 1. 创建 ~/.sessix/hooks/ 目录并写入 approval-hook.sh
|
|
6
|
-
* 2. 在 ~/.claude/settings.json 中注册 PreToolUse hook
|
|
7
|
-
*/
|
|
8
|
-
export declare class HookInstaller {
|
|
9
|
-
/**
|
|
10
|
-
* 安装 hook
|
|
11
|
-
*
|
|
12
|
-
* 1. 创建 ~/.sessix/hooks/ 目录
|
|
13
|
-
* 2. 写入 approval-hook.sh 脚本
|
|
14
|
-
* 3. 赋予执行权限
|
|
15
|
-
* 4. 更新 Claude Code settings.json 添加 hook 配置
|
|
16
|
-
*/
|
|
17
|
-
install(): Promise<void>;
|
|
18
|
-
/**
|
|
19
|
-
* 卸载 hook
|
|
20
|
-
*
|
|
21
|
-
* 从 Claude Code settings.json 中移除 Sessix hook 配置。
|
|
22
|
-
* 注意:不删除 hook 脚本文件(保持幂等性,避免误删)。
|
|
23
|
-
*/
|
|
24
|
-
uninstall(): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* 检查 hook 是否已安装
|
|
27
|
-
* 脚本文件和 settings.json 配置必须同时存在才算已安装
|
|
28
|
-
*/
|
|
29
|
-
isInstalled(): Promise<boolean>;
|
|
30
|
-
/**
|
|
31
|
-
* 向 Claude Code settings.json 添加 Sessix hook 配置
|
|
32
|
-
*/
|
|
33
|
-
private addHookToSettings;
|
|
34
|
-
/**
|
|
35
|
-
* 从 Claude Code settings.json 移除 Sessix hook 配置
|
|
36
|
-
*/
|
|
37
|
-
private removeHookFromSettings;
|
|
38
|
-
/**
|
|
39
|
-
* 读取 Claude Code settings.json
|
|
40
|
-
*/
|
|
41
|
-
private readClaudeSettings;
|
|
42
|
-
/**
|
|
43
|
-
* 写入 Claude Code settings.json
|
|
44
|
-
*/
|
|
45
|
-
private writeClaudeSettings;
|
|
46
|
-
/**
|
|
47
|
-
* 检查 settings 中是否已包含 Sessix hook 配置
|
|
48
|
-
*/
|
|
49
|
-
private hasHookConfig;
|
|
50
|
-
/**
|
|
51
|
-
* 判断一个 hook 条目是否是 Sessix 的
|
|
52
|
-
*/
|
|
53
|
-
private isSessionHookEntry;
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=HookInstaller.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HookInstaller.d.ts","sourceRoot":"","sources":["../../src/hooks/HookInstaller.ts"],"names":[],"mappings":"AAkEA;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAsBrC;;OAEG;YACW,iBAAiB;IA+B/B;;OAEG;YACW,sBAAsB;IAyBpC;;OAEG;YACW,kBAAkB;IAUhC;;OAEG;YACW,mBAAmB;IAMjC;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAS3B"}
|
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HookInstaller = void 0;
|
|
4
|
-
const promises_1 = require("node:fs/promises");
|
|
5
|
-
const node_path_1 = require("node:path");
|
|
6
|
-
const node_os_1 = require("node:os");
|
|
7
|
-
/** Sessix hook 脚本存放目录 */
|
|
8
|
-
const SESSIX_HOOKS_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.sessix', 'hooks');
|
|
9
|
-
/** Hook 脚本文件路径 */
|
|
10
|
-
const HOOK_SCRIPT_PATH = (0, node_path_1.join)(SESSIX_HOOKS_DIR, 'approval-hook.sh');
|
|
11
|
-
/** Claude Code settings.json 路径 */
|
|
12
|
-
const CLAUDE_SETTINGS_PATH = (0, node_path_1.join)((0, node_os_1.homedir)(), '.claude', 'settings.json');
|
|
13
|
-
/** hook 脚本命令(使用 ~ 前缀,Claude Code 会展开) */
|
|
14
|
-
const HOOK_COMMAND = '~/.sessix/hooks/approval-hook.sh';
|
|
15
|
-
/**
|
|
16
|
-
* approval-hook.sh 脚本模板
|
|
17
|
-
*
|
|
18
|
-
* 仅在 Sessix 管理的会话中激活(检查 SESSIX_SESSION_ID 环境变量)。
|
|
19
|
-
* 将 hook payload 发送到 Sessix HTTP 审批端点,等待用户决定。
|
|
20
|
-
* 通过 exit code 向 Claude Code 报告批准结果:
|
|
21
|
-
* - exit 0: 批准(用户同意或服务器超时自动批准)
|
|
22
|
-
* - exit 1: 拒绝(用户明确拒绝)
|
|
23
|
-
*/
|
|
24
|
-
const HOOK_SCRIPT_TEMPLATE = `#!/bin/bash
|
|
25
|
-
# Sessix Approval Hook
|
|
26
|
-
# 仅在 Sessix 管理的会话中激活
|
|
27
|
-
|
|
28
|
-
if [ -z "$SESSIX_SESSION_ID" ]; then
|
|
29
|
-
exit 0
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
# 从 stdin 读取 hook payload
|
|
33
|
-
PAYLOAD=$(cat)
|
|
34
|
-
|
|
35
|
-
# 获取项目路径(当前工作目录)
|
|
36
|
-
PROJECT_PATH="$PWD"
|
|
37
|
-
|
|
38
|
-
# 发送审批请求到 Sessix 服务器(长轮询,超时时间 > 300s)
|
|
39
|
-
RESPONSE=$(curl -s -X POST "http://localhost:3746/hook/approval" \\
|
|
40
|
-
-H "Content-Type: application/json" \\
|
|
41
|
-
-d "{\\"sessionId\\": \\"$SESSIX_SESSION_ID\\", \\"projectPath\\": \\"$PROJECT_PATH\\", \\"payload\\": $PAYLOAD}" \\
|
|
42
|
-
--max-time 330 \\
|
|
43
|
-
2>/dev/null)
|
|
44
|
-
|
|
45
|
-
if [ $? -ne 0 ] || [ -z "$RESPONSE" ]; then
|
|
46
|
-
# 如果 Sessix 服务器不可用,默认放行(exit 0 = 批准)
|
|
47
|
-
exit 0
|
|
48
|
-
fi
|
|
49
|
-
|
|
50
|
-
# 解析服务器响应
|
|
51
|
-
DECISION=\$(echo "$RESPONSE" | grep -o '\\"decision\\":\\"[^"]*\\"' | cut -d'"' -f4)
|
|
52
|
-
|
|
53
|
-
if [ "$DECISION" = "allow" ]; then
|
|
54
|
-
# 用户批准或服务器超时自动批准
|
|
55
|
-
exit 0
|
|
56
|
-
elif [ "$DECISION" = "deny" ]; then
|
|
57
|
-
# 用户明确拒绝
|
|
58
|
-
exit 1
|
|
59
|
-
else
|
|
60
|
-
# 未知响应,默认放行
|
|
61
|
-
exit 0
|
|
62
|
-
fi
|
|
63
|
-
`;
|
|
64
|
-
/**
|
|
65
|
-
* Hook 安装器
|
|
66
|
-
*
|
|
67
|
-
* 负责将 Sessix 的审批 hook 脚本安装到 Claude Code 中:
|
|
68
|
-
* 1. 创建 ~/.sessix/hooks/ 目录并写入 approval-hook.sh
|
|
69
|
-
* 2. 在 ~/.claude/settings.json 中注册 PreToolUse hook
|
|
70
|
-
*/
|
|
71
|
-
class HookInstaller {
|
|
72
|
-
/**
|
|
73
|
-
* 安装 hook
|
|
74
|
-
*
|
|
75
|
-
* 1. 创建 ~/.sessix/hooks/ 目录
|
|
76
|
-
* 2. 写入 approval-hook.sh 脚本
|
|
77
|
-
* 3. 赋予执行权限
|
|
78
|
-
* 4. 更新 Claude Code settings.json 添加 hook 配置
|
|
79
|
-
*/
|
|
80
|
-
async install() {
|
|
81
|
-
// 1. 创建 hooks 目录
|
|
82
|
-
await (0, promises_1.mkdir)(SESSIX_HOOKS_DIR, { recursive: true });
|
|
83
|
-
// 2. 写入 hook 脚本
|
|
84
|
-
await (0, promises_1.writeFile)(HOOK_SCRIPT_PATH, HOOK_SCRIPT_TEMPLATE, 'utf-8');
|
|
85
|
-
// 3. 添加执行权限
|
|
86
|
-
await (0, promises_1.chmod)(HOOK_SCRIPT_PATH, 0o755);
|
|
87
|
-
// 4. 更新 Claude Code settings.json
|
|
88
|
-
await this.addHookToSettings();
|
|
89
|
-
console.log('[HookInstaller] Hook 安装完成');
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* 卸载 hook
|
|
93
|
-
*
|
|
94
|
-
* 从 Claude Code settings.json 中移除 Sessix hook 配置。
|
|
95
|
-
* 注意:不删除 hook 脚本文件(保持幂等性,避免误删)。
|
|
96
|
-
*/
|
|
97
|
-
async uninstall() {
|
|
98
|
-
await this.removeHookFromSettings();
|
|
99
|
-
console.log('[HookInstaller] Hook 已卸载');
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* 检查 hook 是否已安装
|
|
103
|
-
* 脚本文件和 settings.json 配置必须同时存在才算已安装
|
|
104
|
-
*/
|
|
105
|
-
async isInstalled() {
|
|
106
|
-
// 检查脚本文件是否存在
|
|
107
|
-
let scriptExists = false;
|
|
108
|
-
try {
|
|
109
|
-
await (0, promises_1.access)(HOOK_SCRIPT_PATH);
|
|
110
|
-
scriptExists = true;
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
// 脚本不存在
|
|
114
|
-
}
|
|
115
|
-
// 检查 settings.json 中是否有 Sessix hook 配置
|
|
116
|
-
const settings = await this.readClaudeSettings();
|
|
117
|
-
const configExists = this.hasHookConfig(settings);
|
|
118
|
-
// 两者都存在才算已安装
|
|
119
|
-
return scriptExists && configExists;
|
|
120
|
-
}
|
|
121
|
-
// ============================================
|
|
122
|
-
// 内部方法
|
|
123
|
-
// ============================================
|
|
124
|
-
/**
|
|
125
|
-
* 向 Claude Code settings.json 添加 Sessix hook 配置
|
|
126
|
-
*/
|
|
127
|
-
async addHookToSettings() {
|
|
128
|
-
let settings = await this.readClaudeSettings();
|
|
129
|
-
// 如果已经存在,跳过
|
|
130
|
-
if (this.hasHookConfig(settings)) {
|
|
131
|
-
console.log('[HookInstaller] Hook 配置已存在,跳过');
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
// 确保 hooks 和 PreToolUse 结构存在
|
|
135
|
-
if (!settings.hooks) {
|
|
136
|
-
settings.hooks = {};
|
|
137
|
-
}
|
|
138
|
-
if (!settings.hooks.PreToolUse) {
|
|
139
|
-
settings.hooks.PreToolUse = [];
|
|
140
|
-
}
|
|
141
|
-
// 添加 Sessix hook 配置
|
|
142
|
-
settings.hooks.PreToolUse.push({
|
|
143
|
-
matcher: '',
|
|
144
|
-
hooks: [
|
|
145
|
-
{
|
|
146
|
-
type: 'command',
|
|
147
|
-
command: HOOK_COMMAND,
|
|
148
|
-
},
|
|
149
|
-
],
|
|
150
|
-
});
|
|
151
|
-
await this.writeClaudeSettings(settings);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* 从 Claude Code settings.json 移除 Sessix hook 配置
|
|
155
|
-
*/
|
|
156
|
-
async removeHookFromSettings() {
|
|
157
|
-
let settings = await this.readClaudeSettings();
|
|
158
|
-
if (!settings.hooks?.PreToolUse) {
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
// 过滤掉包含 Sessix hook 命令的条目
|
|
162
|
-
settings.hooks.PreToolUse = settings.hooks.PreToolUse.filter((entry) => !this.isSessionHookEntry(entry));
|
|
163
|
-
// 如果 PreToolUse 为空,删除它
|
|
164
|
-
if (settings.hooks.PreToolUse.length === 0) {
|
|
165
|
-
delete settings.hooks.PreToolUse;
|
|
166
|
-
}
|
|
167
|
-
// 如果 hooks 为空,删除它
|
|
168
|
-
if (Object.keys(settings.hooks).length === 0) {
|
|
169
|
-
delete settings.hooks;
|
|
170
|
-
}
|
|
171
|
-
await this.writeClaudeSettings(settings);
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* 读取 Claude Code settings.json
|
|
175
|
-
*/
|
|
176
|
-
async readClaudeSettings() {
|
|
177
|
-
try {
|
|
178
|
-
const content = await (0, promises_1.readFile)(CLAUDE_SETTINGS_PATH, 'utf-8');
|
|
179
|
-
return JSON.parse(content);
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
// 文件不存在或解析失败,返回空对象
|
|
183
|
-
return {};
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* 写入 Claude Code settings.json
|
|
188
|
-
*/
|
|
189
|
-
async writeClaudeSettings(settings) {
|
|
190
|
-
// 确保 .claude 目录存在
|
|
191
|
-
await (0, promises_1.mkdir)((0, node_path_1.join)((0, node_os_1.homedir)(), '.claude'), { recursive: true });
|
|
192
|
-
await (0, promises_1.writeFile)(CLAUDE_SETTINGS_PATH, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* 检查 settings 中是否已包含 Sessix hook 配置
|
|
196
|
-
*/
|
|
197
|
-
hasHookConfig(settings) {
|
|
198
|
-
const preToolUse = settings?.hooks?.PreToolUse;
|
|
199
|
-
if (!Array.isArray(preToolUse)) {
|
|
200
|
-
return false;
|
|
201
|
-
}
|
|
202
|
-
return preToolUse.some((entry) => this.isSessionHookEntry(entry));
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* 判断一个 hook 条目是否是 Sessix 的
|
|
206
|
-
*/
|
|
207
|
-
isSessionHookEntry(entry) {
|
|
208
|
-
if (!entry?.hooks || !Array.isArray(entry.hooks)) {
|
|
209
|
-
return false;
|
|
210
|
-
}
|
|
211
|
-
return entry.hooks.some((hook) => hook.type === 'command' && hook.command === HOOK_COMMAND);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
exports.HookInstaller = HookInstaller;
|
|
215
|
-
//# sourceMappingURL=HookInstaller.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HookInstaller.js","sourceRoot":"","sources":["../../src/hooks/HookInstaller.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|