weclaude 0.0.4 → 0.1.1
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/LICENSE +1 -1
- package/README.md +105 -28
- package/cli/{wrc.sh → weclaude.sh} +34 -18
- package/commands/wrc.md +4 -4
- package/config.example.jsonc +6 -6
- package/dist/cli/init.js +10 -10
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/sync.js +35 -18
- package/dist/cli/sync.js.map +1 -1
- package/dist/daemon/approval.js +487 -37
- package/dist/daemon/approval.js.map +1 -1
- package/dist/daemon/cc-bridge.js +37 -20
- package/dist/daemon/cc-bridge.js.map +1 -1
- package/dist/daemon/claim.js +20 -1
- package/dist/daemon/claim.js.map +1 -1
- package/dist/daemon/detail.js +500 -0
- package/dist/daemon/detail.js.map +1 -0
- package/dist/daemon/http.js +2 -1
- package/dist/daemon/http.js.map +1 -1
- package/dist/daemon/inbound.js +115 -21
- package/dist/daemon/inbound.js.map +1 -1
- package/dist/daemon/index.js +30 -8
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/mirror-bridge.js +1010 -153
- package/dist/daemon/mirror-bridge.js.map +1 -1
- package/dist/daemon/mirror-store.js +39 -0
- package/dist/daemon/mirror-store.js.map +1 -0
- package/dist/daemon/pending.js +46 -0
- package/dist/daemon/pending.js.map +1 -1
- package/dist/daemon/session-cache.js +71 -3
- package/dist/daemon/session-cache.js.map +1 -1
- package/dist/daemon/spawn-tmux.js +132 -0
- package/dist/daemon/spawn-tmux.js.map +1 -0
- package/dist/mcp/server.js +104 -65
- package/dist/mcp/server.js.map +1 -1
- package/dist/shared/config-writer.js +1 -1
- package/dist/shared/config.js +34 -20
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/paths.js +6 -0
- package/dist/shared/paths.js.map +1 -1
- package/docs/DESIGN-INIT.md +6 -6
- package/docs/ONBOARDING.md +25 -25
- package/hooks/pre-tool-use.sh +42 -7
- package/launchd/{com.cc-wecom.daemon.plist.template → com.weclaude.daemon.plist.template} +3 -3
- package/package.json +10 -11
- package/scripts/install.sh +6 -6
- package/scripts/uninstall.sh +3 -3
- package/systemd/{cc-wecom.service.template → weclaude.service.template} +3 -3
package/dist/daemon/inbound.js
CHANGED
|
@@ -2,14 +2,48 @@
|
|
|
2
2
|
// (mode=headless) or the mirror bridge (mode=mirror).
|
|
3
3
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
4
4
|
import { join } from "node:path";
|
|
5
|
-
import { expandHome } from "../shared/paths.js";
|
|
5
|
+
import { expandHome, sanitizeId } from "../shared/paths.js";
|
|
6
6
|
import { tryConsumeClaim, persistClaim, ackClaim } from "./claim.js";
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import { spawnTmuxClaude } from "./spawn-tmux.js";
|
|
8
|
+
// Chat-binding key: stable id for "this conversation thread". Used as
|
|
9
|
+
// session-map key, mirror target, defaultChat. NOT used for auth.
|
|
10
|
+
const chatPrincipal = (msg) => msg.chattype === "group" && msg.chatid ? `chat:${msg.chatid}` : `user:${msg.from.userid}`;
|
|
11
|
+
// Auth principals: any-of test against allowFrom. Tiered — allowing a user
|
|
12
|
+
// grants them access in any chat; allowing a group grants every member of
|
|
13
|
+
// that group access. DMs collapse to just the sender.
|
|
14
|
+
const authPrincipals = (msg) => {
|
|
15
|
+
const user = `user:${msg.from.userid}`;
|
|
16
|
+
if (msg.chattype === "group" && msg.chatid)
|
|
17
|
+
return [`chat:${msg.chatid}`, user];
|
|
18
|
+
return [user];
|
|
19
|
+
};
|
|
20
|
+
// "会话id" = chat-binding (session/mirror key); "权限id" = either the group
|
|
21
|
+
// OR the sender — allowFrom passes if any one of them is whitelisted.
|
|
22
|
+
const renderIds = (msg) => {
|
|
23
|
+
const sender = `user:${msg.from.userid}`;
|
|
24
|
+
if (msg.chattype === "group" && msg.chatid) {
|
|
25
|
+
const chat = `chat:${msg.chatid}`;
|
|
26
|
+
return `[weclaude] 会话id: \`${chat}\`\n发送者: \`${sender}\`\n权限id (allowFrom): \`${chat}\` 或 \`${sender}\` 任一即可`;
|
|
27
|
+
}
|
|
28
|
+
return `[weclaude] 会话id / 权限id: \`${sender}\``;
|
|
29
|
+
};
|
|
30
|
+
const isIdCommand = (text) => text.trim() === "/id";
|
|
31
|
+
const isNewCommand = (text) => text.trim() === "/new";
|
|
32
|
+
// Strip any "@<botname>" mention (leading, mid-text, or trailing) so it doesn't
|
|
33
|
+
// leak into claude's prompt. WeCom may place the mention anywhere depending on
|
|
34
|
+
// where the user typed it.
|
|
35
|
+
const stripMentions = (text) => text.replace(/\s*@\S+\s*/gu, " ").replace(/\s+/gu, " ").trim();
|
|
36
|
+
const isAllowed = (cfg, principals) => {
|
|
9
37
|
if (cfg.wrc.allowFrom.length === 0)
|
|
10
38
|
return false;
|
|
11
|
-
|
|
39
|
+
// Tolerate invisible chars sneaking into hand-edited config (paste artifacts).
|
|
40
|
+
const allowed = new Set(cfg.wrc.allowFrom.map((e) => sanitizeId(e)));
|
|
41
|
+
return principals.some((p) => allowed.has(p));
|
|
12
42
|
};
|
|
43
|
+
// Mirror mode grants implicit talkback: any chat that's currently a mirror
|
|
44
|
+
// target can post back without being in `allowFrom`. The act of /wrc'ing into
|
|
45
|
+
// that chat is the authorization signal.
|
|
46
|
+
const isMirrorTarget = (bridge, who) => "hasMirrorTarget" in bridge && bridge.hasMirrorTarget(who);
|
|
13
47
|
// Sniff extension from magic bytes; falls back to .bin. WeCom doesn't always
|
|
14
48
|
// give us a filename for images, and we want claude's Read tool to recognize
|
|
15
49
|
// the file (it dispatches on extension).
|
|
@@ -44,10 +78,38 @@ const downloadToInbox = async (deps, url, aesKey, msgid, index) => {
|
|
|
44
78
|
};
|
|
45
79
|
export const installInboundRouter = (client, cfg, log, bridge, sourcePath) => {
|
|
46
80
|
const inboxDir = expandHome(cfg.wrc.mirror.inboxDir);
|
|
81
|
+
// Mirror-only auto-spawn: create a fresh tmux+claude and attach it to `who`.
|
|
82
|
+
// Returns the user-facing status string; void when not in mirror mode.
|
|
83
|
+
const autoSpawnAndAttach = async (who) => {
|
|
84
|
+
if (!("attach" in bridge))
|
|
85
|
+
return "[weclaude] /new only available in mirror mode";
|
|
86
|
+
const r = await spawnTmuxClaude({ cfg, log: log.child({ sub: "spawn", who }), windowName: who });
|
|
87
|
+
if (!r.ok)
|
|
88
|
+
return `[weclaude] auto-spawn failed: ${r.reason ?? "unknown"}`;
|
|
89
|
+
const att = bridge.attach({
|
|
90
|
+
sessionId: r.sessionId,
|
|
91
|
+
jsonlPath: r.jsonlPath,
|
|
92
|
+
target: who,
|
|
93
|
+
tmuxPane: r.tmuxPane,
|
|
94
|
+
tmuxSession: r.tmuxSession,
|
|
95
|
+
});
|
|
96
|
+
if (!att.ok)
|
|
97
|
+
return `[weclaude] attach failed: ${att.reason ?? "unknown"}`;
|
|
98
|
+
return `✅ tmux \`${r.tmuxSession}\` → claude session \`${r.sessionId}\` attached`;
|
|
99
|
+
};
|
|
47
100
|
// Common gating: claim bootstrap + allowFrom check. Returns true if the
|
|
48
101
|
// caller should stop (claim consumed or message rejected).
|
|
49
102
|
const gate = async (frame, msg, text) => {
|
|
50
|
-
const who =
|
|
103
|
+
const who = chatPrincipal(msg);
|
|
104
|
+
const auths = authPrincipals(msg);
|
|
105
|
+
// /id — bypass allowFrom so users can discover their ids before configuring.
|
|
106
|
+
if (isIdCommand(text)) {
|
|
107
|
+
try {
|
|
108
|
+
await client.replyStream(frame, msg.msgid, renderIds(msg), true);
|
|
109
|
+
}
|
|
110
|
+
catch { /* ignore */ }
|
|
111
|
+
return { stop: true, who };
|
|
112
|
+
}
|
|
51
113
|
if (tryConsumeClaim(text, who)) {
|
|
52
114
|
log.info({ who }, "claim consumed — bootstrapping defaultChat + allowFrom");
|
|
53
115
|
try {
|
|
@@ -63,24 +125,50 @@ export const installInboundRouter = (client, cfg, log, bridge, sourcePath) => {
|
|
|
63
125
|
catch { /* ignore */ }
|
|
64
126
|
return { stop: true, who };
|
|
65
127
|
}
|
|
66
|
-
if (!isAllowed(cfg, who)) {
|
|
67
|
-
log.warn({ from: who }, "drop: not in allowFrom");
|
|
128
|
+
if (!isAllowed(cfg, auths) && !isMirrorTarget(bridge, who)) {
|
|
129
|
+
log.warn({ from: who, auths }, "drop: not in allowFrom");
|
|
130
|
+
try {
|
|
131
|
+
await client.replyStream(frame, msg.msgid, `[weclaude] 未授权\n${renderIds(msg)}\n请将上述任一权限id加入 config 的 wrc.allowFrom 数组`, true);
|
|
132
|
+
}
|
|
133
|
+
catch { /* ignore */ }
|
|
134
|
+
return { stop: true, who };
|
|
135
|
+
}
|
|
136
|
+
// Authorized `/new` — spawn a tmux+claude pair and attach it to this chat.
|
|
137
|
+
// Runs BEFORE the mirror-not-attached short-circuit so it works as the
|
|
138
|
+
// very first message from a fresh user.
|
|
139
|
+
if (isNewCommand(text)) {
|
|
140
|
+
const reply = await autoSpawnAndAttach(who);
|
|
68
141
|
try {
|
|
69
|
-
await client.replyStream(frame, msg.msgid,
|
|
142
|
+
await client.replyStream(frame, msg.msgid, reply, true);
|
|
70
143
|
}
|
|
71
144
|
catch { /* ignore */ }
|
|
72
145
|
return { stop: true, who };
|
|
73
146
|
}
|
|
147
|
+
// Mirror mode but no Claude session attached for this chat yet. Since the
|
|
148
|
+
// sender is already in allowFrom, we treat that authorization as license
|
|
149
|
+
// to auto-spawn: this inbound becomes both the binding signal and the
|
|
150
|
+
// first prompt — attach, then fall through to dispatch.
|
|
151
|
+
if ("hasMirrorTarget" in bridge && !bridge.hasMirrorTarget(who)) {
|
|
152
|
+
const reply = await autoSpawnAndAttach(who);
|
|
153
|
+
if (!reply.startsWith("✅")) {
|
|
154
|
+
try {
|
|
155
|
+
await client.replyStream(frame, msg.msgid, reply, true);
|
|
156
|
+
}
|
|
157
|
+
catch { /* ignore */ }
|
|
158
|
+
return { stop: true, who };
|
|
159
|
+
}
|
|
160
|
+
// attached — fall through to dispatch
|
|
161
|
+
}
|
|
74
162
|
return { stop: false, who };
|
|
75
163
|
};
|
|
76
|
-
const send = async (frame, msg, who, text) => {
|
|
164
|
+
const send = async (frame, msg, who, text, images = []) => {
|
|
77
165
|
try {
|
|
78
|
-
await bridge.dispatch({ principal: who, text, frame, streamId: msg.msgid });
|
|
166
|
+
await bridge.dispatch({ principal: who, text, images, frame, streamId: msg.msgid });
|
|
79
167
|
}
|
|
80
168
|
catch (e) {
|
|
81
169
|
log.error({ err: e.message }, "bridge dispatch failed");
|
|
82
170
|
try {
|
|
83
|
-
await client.replyStream(frame, msg.msgid, `[
|
|
171
|
+
await client.replyStream(frame, msg.msgid, `[weclaude] error: ${e.message}`, true);
|
|
84
172
|
}
|
|
85
173
|
catch { /* ignore */ }
|
|
86
174
|
}
|
|
@@ -89,7 +177,8 @@ export const installInboundRouter = (client, cfg, log, bridge, sourcePath) => {
|
|
|
89
177
|
const msg = frame.body;
|
|
90
178
|
if (!msg)
|
|
91
179
|
return;
|
|
92
|
-
const
|
|
180
|
+
const raw = msg.text?.content ?? "";
|
|
181
|
+
const text = stripMentions(raw);
|
|
93
182
|
log.info({ msgid: msg.msgid, len: text.length }, "rx text");
|
|
94
183
|
const { stop, who } = await gate(frame, msg, text);
|
|
95
184
|
if (stop)
|
|
@@ -107,14 +196,16 @@ export const installInboundRouter = (client, cfg, log, bridge, sourcePath) => {
|
|
|
107
196
|
const path = await downloadToInbox({ client, log, inboxDir }, msg.image.url, msg.image.aeskey, msg.msgid, 0);
|
|
108
197
|
if (!path) {
|
|
109
198
|
try {
|
|
110
|
-
await client.replyStream(frame, msg.msgid, "[
|
|
199
|
+
await client.replyStream(frame, msg.msgid, "[weclaude] 图片下载失败", true);
|
|
111
200
|
}
|
|
112
201
|
catch { /* ignore */ }
|
|
113
202
|
return;
|
|
114
203
|
}
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
|
|
204
|
+
// Pass the path through the bridge's `images` channel — mirror mode pumps
|
|
205
|
+
// each via macOS clipboard + Ctrl+V into the live TTY (matches Claude
|
|
206
|
+
// Code's documented image paste flow → image content block, no Read tool
|
|
207
|
+
// turn). Spawn-mode falls back to `@<path>` automatically.
|
|
208
|
+
await send(frame, msg, who, "", [path]);
|
|
118
209
|
});
|
|
119
210
|
client.on("message.mixed", async (frame) => {
|
|
120
211
|
const msg = frame.body;
|
|
@@ -124,21 +215,24 @@ export const installInboundRouter = (client, cfg, log, bridge, sourcePath) => {
|
|
|
124
215
|
const { stop, who } = await gate(frame, msg, "");
|
|
125
216
|
if (stop)
|
|
126
217
|
return;
|
|
127
|
-
const
|
|
218
|
+
const texts = [];
|
|
219
|
+
const images = [];
|
|
128
220
|
let imgIdx = 0;
|
|
129
221
|
for (const item of msg.mixed?.msg_item ?? []) {
|
|
130
222
|
if (item.msgtype === "text" && item.text?.content) {
|
|
131
|
-
|
|
223
|
+
const t = stripMentions(item.text.content);
|
|
224
|
+
if (t)
|
|
225
|
+
texts.push(t);
|
|
132
226
|
}
|
|
133
227
|
else if (item.msgtype === "image" && item.image?.url) {
|
|
134
228
|
const path = await downloadToInbox({ client, log, inboxDir }, item.image.url, item.image.aeskey, msg.msgid, imgIdx++);
|
|
135
229
|
if (path)
|
|
136
|
-
|
|
230
|
+
images.push(path);
|
|
137
231
|
}
|
|
138
232
|
}
|
|
139
|
-
if (
|
|
233
|
+
if (texts.length === 0 && images.length === 0)
|
|
140
234
|
return;
|
|
141
|
-
await send(frame, msg, who,
|
|
235
|
+
await send(frame, msg, who, texts.join("\n"), images);
|
|
142
236
|
});
|
|
143
237
|
// template_card_event is handled in approval module; no listener here.
|
|
144
238
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound.js","sourceRoot":"","sources":["../../daemon/inbound.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inbound.js","sourceRoot":"","sources":["../../daemon/inbound.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/index.js
CHANGED
|
@@ -5,9 +5,12 @@ import { startWs } from "./ws.js";
|
|
|
5
5
|
import { startHttp, json } from "./http.js";
|
|
6
6
|
import { installInboundRouter } from "./inbound.js";
|
|
7
7
|
import { loadSessionStore } from "./sessions.js";
|
|
8
|
+
import { loadMirrorStore } from "./mirror-store.js";
|
|
8
9
|
import { makeBridge } from "./cc-bridge.js";
|
|
9
|
-
import { startMirror } from "./mirror-bridge.js";
|
|
10
|
+
import { startMirror, installMirrorEventListener } from "./mirror-bridge.js";
|
|
10
11
|
import { installApprovalEventListener, makeApproveHandler } from "./approval.js";
|
|
12
|
+
import { initDetailPersistence, makeDetailHandler } from "./detail.js";
|
|
13
|
+
import { initAutoWindowPersistence } from "./session-cache.js";
|
|
11
14
|
import { makeMessageHandler } from "./outbound.js";
|
|
12
15
|
import { makeCardHandler, makeAskHandler, installAskEventListener } from "./ask.js";
|
|
13
16
|
import { makeClaimStartHandler, makeClaimStatusHandler, makeClaimResetHandler, } from "./claim.js";
|
|
@@ -15,7 +18,7 @@ import { makeClaimStartHandler, makeClaimStatusHandler, makeClaimResetHandler, }
|
|
|
15
18
|
// vanishes. Mirror anything fatal to stderr too so launchd's stderr.log captures it.
|
|
16
19
|
const fatalExit = (msg, extra) => {
|
|
17
20
|
// eslint-disable-next-line no-console
|
|
18
|
-
console.error(`[
|
|
21
|
+
console.error(`[weclaude-daemon] FATAL: ${msg}`, extra ?? "");
|
|
19
22
|
process.exit(1);
|
|
20
23
|
};
|
|
21
24
|
const main = async () => {
|
|
@@ -23,32 +26,51 @@ const main = async () => {
|
|
|
23
26
|
const log = makeLogger({
|
|
24
27
|
logFile: cfg.daemon.logFile,
|
|
25
28
|
logLevel: cfg.daemon.logLevel,
|
|
26
|
-
name: "
|
|
29
|
+
name: "weclaude-daemon",
|
|
27
30
|
});
|
|
28
31
|
log.info({ sourcePath, pid: process.pid }, "daemon start");
|
|
32
|
+
// Restore auto-approve windows persisted across daemon restarts —
|
|
33
|
+
// otherwise a `weclaude reload` silently drops the user's "10min" choice.
|
|
34
|
+
initAutoWindowPersistence(cfg.daemon.stateDir);
|
|
35
|
+
// Replay tool/approval detail records so reload doesn't lose click-to-detail
|
|
36
|
+
// links from messages already on the user's WeCom timeline.
|
|
37
|
+
initDetailPersistence(cfg.daemon.stateDir, log.child({ mod: "detail" }));
|
|
29
38
|
const ws = startWs(cfg, log);
|
|
30
39
|
const sessions = loadSessionStore(cfg.wrc.sessionMapFile);
|
|
40
|
+
const mirrorStore = loadMirrorStore(cfg.wrc.mirror.attachmentsFile);
|
|
31
41
|
const bridge = cfg.wrc.mode === "mirror"
|
|
32
|
-
? startMirror({ cfg, log: log.child({ mod: "mirror" }), client: ws.client })
|
|
42
|
+
? startMirror({ cfg, log: log.child({ mod: "mirror" }), client: ws.client, store: mirrorStore })
|
|
33
43
|
: makeBridge({ cfg, log: log.child({ mod: "bridge" }), client: ws.client, sessions });
|
|
34
44
|
if (!bridge) {
|
|
35
45
|
log.fatal("bridge failed to start");
|
|
36
46
|
fatalExit("bridge failed to start");
|
|
37
47
|
}
|
|
38
48
|
installInboundRouter(ws.client, cfg, log, bridge, sourcePath);
|
|
39
|
-
|
|
49
|
+
// In mirror mode, approval clicks should also finalize the live stream so
|
|
50
|
+
// post-click tool output falls through to the debounced standalone path.
|
|
51
|
+
const onApprovalClicked = cfg.wrc.mode === "mirror"
|
|
52
|
+
? (sid) => bridge.terminateLiveStream(sid)
|
|
53
|
+
: undefined;
|
|
54
|
+
installApprovalEventListener(ws.client, log.child({ mod: "approval" }), cfg, onApprovalClicked);
|
|
55
|
+
// In mirror mode, route approval cards to the WeCom chat bound to the requesting session.
|
|
56
|
+
// Falls back to cfg.approval.approvers / cfg.defaultChat when no mirror is attached.
|
|
57
|
+
const getMirrorTarget = cfg.wrc.mode === "mirror"
|
|
58
|
+
? (sid) => bridge.targetForSession(sid)
|
|
59
|
+
: undefined;
|
|
40
60
|
const http = startHttp({ cfg, ws, log, sourcePath });
|
|
41
|
-
http.register("POST /approve", makeApproveHandler({ cfg, log: log.child({ mod: "approval" }), client: ws.client }));
|
|
61
|
+
http.register("POST /approve", makeApproveHandler({ cfg, log: log.child({ mod: "approval" }), client: ws.client, getMirrorTarget }));
|
|
42
62
|
http.register("POST /message", makeMessageHandler(ws.client, log.child({ mod: "outbound" })));
|
|
43
63
|
http.register("POST /card", makeCardHandler(ws.client, log.child({ mod: "outbound" })));
|
|
44
64
|
http.register("POST /ask", makeAskHandler(ws.client, log.child({ mod: "ask" })));
|
|
45
65
|
http.register("POST /claim/start", makeClaimStartHandler({ log: log.child({ mod: "claim" }) }));
|
|
46
66
|
http.register("GET /claim/status", makeClaimStatusHandler());
|
|
47
67
|
http.register("POST /claim/reset", makeClaimResetHandler());
|
|
68
|
+
http.register("GET /detail", makeDetailHandler(log.child({ mod: "detail" })));
|
|
48
69
|
installAskEventListener(ws.client, log.child({ mod: "ask" }));
|
|
49
70
|
// Mirror-mode: expose attach/status so a slash command can pin the live session.
|
|
50
71
|
if (cfg.wrc.mode === "mirror") {
|
|
51
72
|
const m = bridge;
|
|
73
|
+
installMirrorEventListener(ws.client, m, log.child({ mod: "mirror" }));
|
|
52
74
|
http.register("GET /mirror/status", (_req, res) => json(res, 200, m.status()));
|
|
53
75
|
http.register("POST /mirror/attach", async (req, res) => {
|
|
54
76
|
const { readBody } = await import("./http.js");
|
|
@@ -57,7 +79,7 @@ const main = async () => {
|
|
|
57
79
|
json(res, 400, { ok: false, reason: "sessionId and jsonlPath required" });
|
|
58
80
|
return;
|
|
59
81
|
}
|
|
60
|
-
const r = m.attach({ sessionId: body.sessionId, jsonlPath: body.jsonlPath, target: body.target });
|
|
82
|
+
const r = m.attach({ sessionId: body.sessionId, jsonlPath: body.jsonlPath, target: body.target, tmuxPane: body.tmuxPane, tmuxSession: body.tmuxSession });
|
|
61
83
|
json(res, r.ok ? 200 : 400, r);
|
|
62
84
|
});
|
|
63
85
|
}
|
|
@@ -79,7 +101,7 @@ const main = async () => {
|
|
|
79
101
|
};
|
|
80
102
|
main().catch((e) => {
|
|
81
103
|
// eslint-disable-next-line no-console
|
|
82
|
-
console.error("[
|
|
104
|
+
console.error("[weclaude-daemon] fatal:", e);
|
|
83
105
|
process.exit(1);
|
|
84
106
|
});
|
|
85
107
|
//# sourceMappingURL=index.js.map
|
package/dist/daemon/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../daemon/index.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../daemon/index.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAqB,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,qFAAqF;AACrF,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,KAA+B,EAAS,EAAE;IACxE,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC;IACjD,MAAM,GAAG,GAAG,UAAU,CAAC;QACrB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO;QAC3B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ;QAC7B,IAAI,EAAE,iBAAiB;KACxB,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IAE3D,kEAAkE;IAClE,0EAA0E;IAC1E,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,4DAA4D;IAC5D,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAEzE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACpE,MAAM,MAAM,GACV,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ;QACvB,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAChG,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1F,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACtC,CAAC;IACD,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9D,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,iBAAiB,GACrB,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ;QACvB,CAAC,CAAC,CAAC,GAAW,EAAQ,EAAE,CAAE,MAAuB,CAAC,mBAAmB,CAAC,GAAG,CAAC;QAC1E,CAAC,CAAC,SAAS,CAAC;IAChB,4BAA4B,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAChG,0FAA0F;IAC1F,qFAAqF;IACrF,MAAM,eAAe,GACnB,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ;QACvB,CAAC,CAAC,CAAC,GAAW,EAAsB,EAAE,CAAE,MAAuB,CAAC,gBAAgB,CAAC,GAAG,CAAC;QACrF,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CACX,eAAe,EACf,kBAAkB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CACrG,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9E,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAE9D,iFAAiF;IACjF,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,MAAsB,CAAC;QACjC,0BAA0B,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAA6G,CAAC;YAC/I,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC,CAAC;gBAC1E,OAAO;YACT,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1J,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QACvD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACxC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAG,CAAW,CAAC,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAC;QAC/D,SAAS,CAAC,UAAU,EAAE,EAAE,GAAG,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|