wezard 0.3.3
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/.claude-plugin/marketplace.json +14 -0
- package/.claude-plugin/plugin.json +14 -0
- package/CLAUDE.md +83 -0
- package/LICENSE +21 -0
- package/README.md +410 -0
- package/cli/weclaude.sh +236 -0
- package/commands/audit.md +7 -0
- package/commands/wrc.md +7 -0
- package/config.example.jsonc +102 -0
- package/dist/cli/audit.js +156 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/init.js +311 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/sync.js +175 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/daemon/approval.js +1301 -0
- package/dist/daemon/approval.js.map +1 -0
- package/dist/daemon/ask.js +101 -0
- package/dist/daemon/ask.js.map +1 -0
- package/dist/daemon/audit.js +168 -0
- package/dist/daemon/audit.js.map +1 -0
- package/dist/daemon/cc-bridge.js +204 -0
- package/dist/daemon/cc-bridge.js.map +1 -0
- package/dist/daemon/cfg-sync.js +240 -0
- package/dist/daemon/cfg-sync.js.map +1 -0
- package/dist/daemon/claim.js +95 -0
- package/dist/daemon/claim.js.map +1 -0
- package/dist/daemon/detail.js +153 -0
- package/dist/daemon/detail.js.map +1 -0
- package/dist/daemon/graph.js +176 -0
- package/dist/daemon/graph.js.map +1 -0
- package/dist/daemon/http.js +83 -0
- package/dist/daemon/http.js.map +1 -0
- package/dist/daemon/inbound.js +919 -0
- package/dist/daemon/inbound.js.map +1 -0
- package/dist/daemon/index.js +569 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/last-response.js +59 -0
- package/dist/daemon/last-response.js.map +1 -0
- package/dist/daemon/mirror-bridge.js +3512 -0
- package/dist/daemon/mirror-bridge.js.map +1 -0
- package/dist/daemon/mirror-store.js +39 -0
- package/dist/daemon/mirror-store.js.map +1 -0
- package/dist/daemon/outbound.js +42 -0
- package/dist/daemon/outbound.js.map +1 -0
- package/dist/daemon/peers.js +146 -0
- package/dist/daemon/peers.js.map +1 -0
- package/dist/daemon/pending.js +90 -0
- package/dist/daemon/pending.js.map +1 -0
- package/dist/daemon/quota.js +164 -0
- package/dist/daemon/quota.js.map +1 -0
- package/dist/daemon/redact.js +27 -0
- package/dist/daemon/redact.js.map +1 -0
- package/dist/daemon/session-cache.js +149 -0
- package/dist/daemon/session-cache.js.map +1 -0
- package/dist/daemon/session-scan.js +273 -0
- package/dist/daemon/session-scan.js.map +1 -0
- package/dist/daemon/sessions.js +35 -0
- package/dist/daemon/sessions.js.map +1 -0
- package/dist/daemon/spawn-tmux.js +213 -0
- package/dist/daemon/spawn-tmux.js.map +1 -0
- package/dist/daemon/tips.js +25 -0
- package/dist/daemon/tips.js.map +1 -0
- package/dist/daemon/topics.js +197 -0
- package/dist/daemon/topics.js.map +1 -0
- package/dist/daemon/usage.js +358 -0
- package/dist/daemon/usage.js.map +1 -0
- package/dist/daemon/wedoc.js +210 -0
- package/dist/daemon/wedoc.js.map +1 -0
- package/dist/daemon/ws.js +67 -0
- package/dist/daemon/ws.js.map +1 -0
- package/dist/mcp/server.js +385 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/shared/ansi.js +134 -0
- package/dist/shared/ansi.js.map +1 -0
- package/dist/shared/chat-http.js +195 -0
- package/dist/shared/chat-http.js.map +1 -0
- package/dist/shared/chat-render.js +53 -0
- package/dist/shared/chat-render.js.map +1 -0
- package/dist/shared/chat-view.js +116 -0
- package/dist/shared/chat-view.js.map +1 -0
- package/dist/shared/cli-backends.js +304 -0
- package/dist/shared/cli-backends.js.map +1 -0
- package/dist/shared/config-writer.js +39 -0
- package/dist/shared/config-writer.js.map +1 -0
- package/dist/shared/config.js +278 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/detail-render.js +836 -0
- package/dist/shared/detail-render.js.map +1 -0
- package/dist/shared/detail-store.js +205 -0
- package/dist/shared/detail-store.js.map +1 -0
- package/dist/shared/highlight.js +154 -0
- package/dist/shared/highlight.js.map +1 -0
- package/dist/shared/lan-ip.js +35 -0
- package/dist/shared/lan-ip.js.map +1 -0
- package/dist/shared/log.js +18 -0
- package/dist/shared/log.js.map +1 -0
- package/dist/shared/md-chunk.js +99 -0
- package/dist/shared/md-chunk.js.map +1 -0
- package/dist/shared/paths.js +12 -0
- package/dist/shared/paths.js.map +1 -0
- package/dist/shared/session-label.js +67 -0
- package/dist/shared/session-label.js.map +1 -0
- package/dist/shared/web-assets.js +51 -0
- package/dist/shared/web-assets.js.map +1 -0
- package/dist/svr/index.js +246 -0
- package/dist/svr/index.js.map +1 -0
- package/hooks/hooks.json +16 -0
- package/hooks/pre-tool-use.sh +167 -0
- package/launchd/com.weclaude.daemon.plist.template +45 -0
- package/package.json +97 -0
- package/scripts/install.sh +73 -0
- package/scripts/postinstall.sh +12 -0
- package/scripts/uninstall.sh +44 -0
- package/systemd/weclaude.service.template +17 -0
- package/web/chat.css +171 -0
- package/web/chat.js +367 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail-render.js","sourceRoot":"","sources":["../../shared/detail-render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// Detail record store — factory pattern so daemon (local, sits behind card links)
|
|
2
|
+
// and svr (standalone, chat 端浏览器直连的公网/共享网络机) can each own an isolated
|
|
3
|
+
// instance. Pure state + IO. Rendering lives in ./detail-render.
|
|
4
|
+
//
|
|
5
|
+
// Persistence: append-only JSONL → <stateDir>/details.jsonl, replay on init;
|
|
6
|
+
// TTL 24h, LRU 上限 1000 条; 超过 COMPACT_BYTES 时按 store 快照重写整个文件。
|
|
7
|
+
import { mkdirSync, existsSync, readFileSync, appendFileSync, writeFileSync, statSync } from "node:fs";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { expandHome } from "./paths.js";
|
|
10
|
+
const TTL_MS = 24 * 3600_000;
|
|
11
|
+
const MAX = 1000;
|
|
12
|
+
const COMPACT_BYTES = 5 * 1024 * 1024;
|
|
13
|
+
export const createDetailStore = (opts) => {
|
|
14
|
+
const store = new Map();
|
|
15
|
+
const dir = expandHome(opts.stateDir);
|
|
16
|
+
mkdirSync(dir, { recursive: true });
|
|
17
|
+
const logPath = join(dir, "details.jsonl");
|
|
18
|
+
const gc = () => {
|
|
19
|
+
const cutoff = Date.now() - TTL_MS;
|
|
20
|
+
for (const [k, v] of store)
|
|
21
|
+
if (v.createdAt < cutoff)
|
|
22
|
+
store.delete(k);
|
|
23
|
+
if (store.size > MAX) {
|
|
24
|
+
const sorted = [...store.entries()].sort((a, b) => a[1].createdAt - b[1].createdAt);
|
|
25
|
+
for (let i = 0; i < sorted.length - MAX; i++)
|
|
26
|
+
store.delete(sorted[i][0]);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const persist = (rec) => {
|
|
30
|
+
try {
|
|
31
|
+
appendFileSync(logPath, `${JSON.stringify(rec)}\n`);
|
|
32
|
+
}
|
|
33
|
+
catch { /* ignore */ }
|
|
34
|
+
};
|
|
35
|
+
const compact = () => {
|
|
36
|
+
const lines = [...store.values()].map((r) => JSON.stringify(r));
|
|
37
|
+
try {
|
|
38
|
+
writeFileSync(logPath, lines.length ? `${lines.join("\n")}\n` : "");
|
|
39
|
+
}
|
|
40
|
+
catch { /* ignore */ }
|
|
41
|
+
};
|
|
42
|
+
const maybeCompact = () => {
|
|
43
|
+
try {
|
|
44
|
+
if (statSync(logPath).size > COMPACT_BYTES)
|
|
45
|
+
compact();
|
|
46
|
+
}
|
|
47
|
+
catch { /* ignore */ }
|
|
48
|
+
};
|
|
49
|
+
if (existsSync(logPath)) {
|
|
50
|
+
const cutoff = Date.now() - TTL_MS;
|
|
51
|
+
let replayed = 0, dropped = 0;
|
|
52
|
+
try {
|
|
53
|
+
const text = readFileSync(logPath, "utf8");
|
|
54
|
+
for (const line of text.split("\n")) {
|
|
55
|
+
if (!line)
|
|
56
|
+
continue;
|
|
57
|
+
try {
|
|
58
|
+
const r = JSON.parse(line);
|
|
59
|
+
if (!r?.id || (r.kind !== "tool" && r.kind !== "approval" && r.kind !== "turn"))
|
|
60
|
+
continue;
|
|
61
|
+
if (typeof r.createdAt !== "number" || r.createdAt < cutoff) {
|
|
62
|
+
dropped++;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
store.set(r.id, r);
|
|
66
|
+
replayed++;
|
|
67
|
+
}
|
|
68
|
+
catch { /* skip malformed line */ }
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
opts.log?.warn({ err: e.message }, "detail store: replay failed");
|
|
73
|
+
}
|
|
74
|
+
gc();
|
|
75
|
+
compact();
|
|
76
|
+
opts.log?.info({ logPath, replayed, dropped, kept: store.size }, "detail store: replay done");
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
opts.log?.info({ logPath }, "detail store: fresh log");
|
|
80
|
+
}
|
|
81
|
+
// 订阅者异常不该拖垮写入路径 (一个断掉的 SSE 连接 ≠ 丢一条 detail)。
|
|
82
|
+
const subscribers = new Set();
|
|
83
|
+
const notify = (rec) => {
|
|
84
|
+
for (const fn of subscribers) {
|
|
85
|
+
try {
|
|
86
|
+
fn(rec);
|
|
87
|
+
}
|
|
88
|
+
catch { /* ignore */ }
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const put = (rec) => {
|
|
92
|
+
store.set(rec.id, rec);
|
|
93
|
+
if (store.size > MAX)
|
|
94
|
+
gc();
|
|
95
|
+
persist(rec);
|
|
96
|
+
maybeCompact();
|
|
97
|
+
notify(rec);
|
|
98
|
+
};
|
|
99
|
+
return {
|
|
100
|
+
put,
|
|
101
|
+
get: (id) => store.get(id),
|
|
102
|
+
list: () => [...store.values()],
|
|
103
|
+
subscribe: (fn) => {
|
|
104
|
+
subscribers.add(fn);
|
|
105
|
+
return () => { subscribers.delete(fn); };
|
|
106
|
+
},
|
|
107
|
+
recordTool: (rec) => {
|
|
108
|
+
put({ kind: "tool", ...rec, createdAt: rec.createdAt ?? Date.now() });
|
|
109
|
+
},
|
|
110
|
+
recordToolResult: (toolUseId, full) => {
|
|
111
|
+
const r = store.get(toolUseId);
|
|
112
|
+
if (!r || r.kind !== "tool")
|
|
113
|
+
return;
|
|
114
|
+
put({ ...r, toolResult: full, resultAt: Date.now() });
|
|
115
|
+
},
|
|
116
|
+
recordApproval: (rec) => {
|
|
117
|
+
put({ kind: "approval", ...rec, createdAt: rec.createdAt ?? Date.now() });
|
|
118
|
+
},
|
|
119
|
+
recordApprovalDecision: (reqId, decision, decidedBy) => {
|
|
120
|
+
const r = store.get(reqId);
|
|
121
|
+
if (!r || r.kind !== "approval")
|
|
122
|
+
return;
|
|
123
|
+
put({ ...r, decision, decidedBy, decidedAt: Date.now() });
|
|
124
|
+
},
|
|
125
|
+
startTurn: (rec) => {
|
|
126
|
+
const now = Date.now();
|
|
127
|
+
put({
|
|
128
|
+
kind: "turn",
|
|
129
|
+
...rec,
|
|
130
|
+
createdAt: rec.createdAt ?? now,
|
|
131
|
+
updatedAt: now,
|
|
132
|
+
closed: false,
|
|
133
|
+
items: [],
|
|
134
|
+
});
|
|
135
|
+
},
|
|
136
|
+
appendTurnItem: (id, item) => {
|
|
137
|
+
const r = store.get(id);
|
|
138
|
+
if (!r || r.kind !== "turn")
|
|
139
|
+
return;
|
|
140
|
+
put({ ...r, items: [...r.items, item], updatedAt: Date.now() });
|
|
141
|
+
},
|
|
142
|
+
addTurnUsage: (id, delta) => {
|
|
143
|
+
const r = store.get(id);
|
|
144
|
+
if (!r || r.kind !== "turn")
|
|
145
|
+
return;
|
|
146
|
+
// 同一 message.id 的重复行只入账一次 (thinking / tool_use 拆行, 共享 usage)。
|
|
147
|
+
// 无 messageId 时保守累加 — 兼容早期 caller 或 headless (cc-bridge) 路径。
|
|
148
|
+
const seenIds = r.usageMsgIds ?? [];
|
|
149
|
+
const dupe = delta.messageId ? seenIds.includes(delta.messageId) : false;
|
|
150
|
+
const cur = r.usage;
|
|
151
|
+
const nextUsage = dupe
|
|
152
|
+
? (cur ?? { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, calls: 0 })
|
|
153
|
+
: (() => {
|
|
154
|
+
// 这一次调用送入的上下文 = 新鲜输入 + 缓存读 + 缓存写 (delta 恒为单次调用)。
|
|
155
|
+
const callCtx = delta.usage.input + delta.usage.cacheRead + delta.usage.cacheWrite;
|
|
156
|
+
return cur
|
|
157
|
+
? {
|
|
158
|
+
input: cur.input + delta.usage.input,
|
|
159
|
+
output: cur.output + delta.usage.output,
|
|
160
|
+
cacheRead: cur.cacheRead + delta.usage.cacheRead,
|
|
161
|
+
cacheWrite: cur.cacheWrite + delta.usage.cacheWrite,
|
|
162
|
+
serviceTier: cur.serviceTier ?? delta.usage.serviceTier,
|
|
163
|
+
calls: cur.calls + delta.usage.calls,
|
|
164
|
+
ctxPeak: Math.max(cur.ctxPeak ?? 0, callCtx),
|
|
165
|
+
}
|
|
166
|
+
: { ...delta.usage, ctxPeak: callCtx };
|
|
167
|
+
})();
|
|
168
|
+
const nextIds = delta.messageId && !dupe ? [...seenIds, delta.messageId] : seenIds;
|
|
169
|
+
let model = r.model;
|
|
170
|
+
let modelAlt = r.modelAlt;
|
|
171
|
+
if (delta.model) {
|
|
172
|
+
if (!model)
|
|
173
|
+
model = delta.model;
|
|
174
|
+
else if (model !== delta.model)
|
|
175
|
+
modelAlt = (modelAlt ?? 0) + 1;
|
|
176
|
+
}
|
|
177
|
+
put({ ...r, model, modelAlt, usage: nextUsage, usageMsgIds: nextIds.length ? nextIds : undefined, updatedAt: Date.now() });
|
|
178
|
+
},
|
|
179
|
+
closeTurn: (id) => {
|
|
180
|
+
const r = store.get(id);
|
|
181
|
+
if (!r || r.kind !== "turn" || r.closed)
|
|
182
|
+
return;
|
|
183
|
+
put({ ...r, closed: true, updatedAt: Date.now() });
|
|
184
|
+
},
|
|
185
|
+
closeOpenTurns: ({ target, sessionId, exceptIds }) => {
|
|
186
|
+
const now = Date.now();
|
|
187
|
+
const keep = new Set(exceptIds ?? []);
|
|
188
|
+
const closed = [];
|
|
189
|
+
for (const [id, r] of store) {
|
|
190
|
+
if (r.kind !== "turn" || r.closed)
|
|
191
|
+
continue;
|
|
192
|
+
if (keep.has(id))
|
|
193
|
+
continue;
|
|
194
|
+
if (target && r.target !== target)
|
|
195
|
+
continue;
|
|
196
|
+
if (sessionId && r.sessionId !== sessionId)
|
|
197
|
+
continue;
|
|
198
|
+
put({ ...r, closed: true, updatedAt: now });
|
|
199
|
+
closed.push(id);
|
|
200
|
+
}
|
|
201
|
+
return closed;
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
//# sourceMappingURL=detail-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail-store.js","sourceRoot":"","sources":["../../shared/detail-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// 服务端轻量代码高亮: 简易状态机 tokenizer, 不引外部依赖, 离线可用。
|
|
2
|
+
// 仅覆盖最常见的语言, 未识别时回退 escHtml。CSS 类与 detail.ts 的 SHARED_CSS 共享:
|
|
3
|
+
// .hc 注释 .hs 字符串 .hk 关键字 .hl 字面量 .hn 数字 .hv 变量
|
|
4
|
+
const ESC_RE = /[&<>"']/g;
|
|
5
|
+
const ESC_MAP = {
|
|
6
|
+
"&": "&", "<": "<", ">": ">", '"': """, "'": "'",
|
|
7
|
+
};
|
|
8
|
+
const escHtml = (s) => s.replace(ESC_RE, (c) => ESC_MAP[c]);
|
|
9
|
+
const KEYWORDS = {
|
|
10
|
+
bash: ["if", "then", "elif", "else", "fi", "for", "in", "do", "done", "while", "until", "case", "esac", "function", "return", "break", "continue", "exit", "local", "export", "set", "trap", "source", "alias", "unset", "read", "test", "let", "declare", "typeset", "select", "time"],
|
|
11
|
+
ts: ["abstract", "as", "async", "await", "break", "case", "catch", "class", "const", "continue", "debugger", "declare", "default", "delete", "do", "else", "enum", "export", "extends", "finally", "for", "from", "function", "get", "if", "implements", "import", "in", "instanceof", "interface", "is", "keyof", "let", "module", "namespace", "new", "of", "package", "private", "protected", "public", "readonly", "require", "return", "satisfies", "set", "static", "super", "switch", "throw", "try", "type", "typeof", "var", "void", "while", "with", "yield"],
|
|
12
|
+
py: ["and", "as", "assert", "async", "await", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import", "in", "is", "lambda", "nonlocal", "not", "or", "pass", "raise", "return", "try", "while", "with", "yield", "match", "case"],
|
|
13
|
+
go: ["break", "case", "chan", "const", "continue", "default", "defer", "else", "fallthrough", "for", "func", "go", "goto", "if", "import", "interface", "map", "package", "range", "return", "select", "struct", "switch", "type", "var"],
|
|
14
|
+
rust: ["as", "async", "await", "break", "const", "continue", "crate", "dyn", "else", "enum", "extern", "fn", "for", "if", "impl", "in", "let", "loop", "match", "mod", "move", "mut", "pub", "ref", "return", "self", "static", "struct", "super", "trait", "try", "type", "unsafe", "use", "where", "while"],
|
|
15
|
+
};
|
|
16
|
+
const LITERALS = ["true", "false", "null", "undefined", "None", "True", "False", "nil", "NaN", "Infinity"];
|
|
17
|
+
const PROFILES = {
|
|
18
|
+
bash: { keywords: KEYWORDS.bash, lineComment: ["#"], strings: ["'", '"', "`"], variables: true, commentNeedsBoundary: true },
|
|
19
|
+
ts: { keywords: KEYWORDS.ts, lineComment: ["//"], blockComment: [["/*", "*/"]], strings: ["'", '"', "`"] },
|
|
20
|
+
py: { keywords: KEYWORDS.py, lineComment: ["#"], strings: ["'", '"'] },
|
|
21
|
+
go: { keywords: KEYWORDS.go, lineComment: ["//"], blockComment: [["/*", "*/"]], strings: ['"', "`"] },
|
|
22
|
+
rust: { keywords: KEYWORDS.rust, lineComment: ["//"], blockComment: [["/*", "*/"]], strings: ['"'] },
|
|
23
|
+
};
|
|
24
|
+
const EXT_LANG = {
|
|
25
|
+
sh: "bash", bash: "bash", zsh: "bash",
|
|
26
|
+
ts: "ts", tsx: "ts", mts: "ts", cts: "ts",
|
|
27
|
+
js: "ts", jsx: "ts", mjs: "ts", cjs: "ts",
|
|
28
|
+
py: "py", pyw: "py", pyi: "py",
|
|
29
|
+
go: "go",
|
|
30
|
+
rs: "rust",
|
|
31
|
+
};
|
|
32
|
+
export const langFromPath = (path) => {
|
|
33
|
+
const m = /\.([a-zA-Z0-9]+)$/.exec(path);
|
|
34
|
+
if (!m)
|
|
35
|
+
return undefined;
|
|
36
|
+
return EXT_LANG[m[1].toLowerCase()];
|
|
37
|
+
};
|
|
38
|
+
const isIdentStart = (c) => /[A-Za-z_$]/.test(c);
|
|
39
|
+
const isIdentCont = (c) => /[A-Za-z0-9_$]/.test(c);
|
|
40
|
+
const isDigit = (c) => c >= "0" && c <= "9";
|
|
41
|
+
const wordBoundary = (c) => c === undefined || /[\s;|&<>(){}\[\]`'"=]/.test(c);
|
|
42
|
+
const NUM_RE = /^0[xX][0-9a-fA-F]+|^\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/;
|
|
43
|
+
export const highlightCode = (src, lang) => {
|
|
44
|
+
const p = lang ? PROFILES[lang] : undefined;
|
|
45
|
+
if (!p)
|
|
46
|
+
return escHtml(src);
|
|
47
|
+
let out = "";
|
|
48
|
+
let i = 0;
|
|
49
|
+
const n = src.length;
|
|
50
|
+
while (i < n) {
|
|
51
|
+
const c = src[i];
|
|
52
|
+
// line comment
|
|
53
|
+
if (p.lineComment) {
|
|
54
|
+
const lc = p.lineComment.find((s) => src.startsWith(s, i));
|
|
55
|
+
if (lc) {
|
|
56
|
+
const ok = !p.commentNeedsBoundary || wordBoundary(i === 0 ? undefined : src[i - 1]);
|
|
57
|
+
if (ok) {
|
|
58
|
+
const eol = src.indexOf("\n", i);
|
|
59
|
+
const end = eol === -1 ? n : eol;
|
|
60
|
+
out += `<span class="hc">${escHtml(src.slice(i, end))}</span>`;
|
|
61
|
+
i = end;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// block comment
|
|
67
|
+
if (p.blockComment) {
|
|
68
|
+
const bc = p.blockComment.find(([open]) => src.startsWith(open, i));
|
|
69
|
+
if (bc) {
|
|
70
|
+
const [open, close] = bc;
|
|
71
|
+
const ce = src.indexOf(close, i + open.length);
|
|
72
|
+
const end = ce === -1 ? n : ce + close.length;
|
|
73
|
+
out += `<span class="hc">${escHtml(src.slice(i, end))}</span>`;
|
|
74
|
+
i = end;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// string
|
|
79
|
+
if (p.strings) {
|
|
80
|
+
const q = p.strings.find((s) => src.startsWith(s, i));
|
|
81
|
+
if (q) {
|
|
82
|
+
let j = i + q.length;
|
|
83
|
+
while (j < n) {
|
|
84
|
+
if (src[j] === "\\" && j + 1 < n) {
|
|
85
|
+
j += 2;
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (src.startsWith(q, j)) {
|
|
89
|
+
j += q.length;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
// 单 / 双引号不跨行: 防止整段被吞 (常见场景: 一行有奇数个引号)
|
|
93
|
+
if (src[j] === "\n" && q !== "`")
|
|
94
|
+
break;
|
|
95
|
+
j++;
|
|
96
|
+
}
|
|
97
|
+
out += `<span class="hs">${escHtml(src.slice(i, j))}</span>`;
|
|
98
|
+
i = j;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// bash variable: $foo / ${foo} / $1 / $$ / $@ / $#
|
|
103
|
+
if (p.variables && c === "$") {
|
|
104
|
+
const next = src[i + 1] ?? "";
|
|
105
|
+
let j = i + 1;
|
|
106
|
+
if (next === "{") {
|
|
107
|
+
const close = src.indexOf("}", j + 1);
|
|
108
|
+
j = close === -1 ? n : close + 1;
|
|
109
|
+
}
|
|
110
|
+
else if (isIdentStart(next)) {
|
|
111
|
+
while (j < n && isIdentCont(src[j]))
|
|
112
|
+
j++;
|
|
113
|
+
}
|
|
114
|
+
else if (/[0-9#@*?$!\-]/.test(next)) {
|
|
115
|
+
j++;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
out += escHtml(c);
|
|
119
|
+
i++;
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
out += `<span class="hv">${escHtml(src.slice(i, j))}</span>`;
|
|
123
|
+
i = j;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
// identifier → keyword / literal / plain
|
|
127
|
+
if (isIdentStart(c)) {
|
|
128
|
+
let j = i + 1;
|
|
129
|
+
while (j < n && isIdentCont(src[j]))
|
|
130
|
+
j++;
|
|
131
|
+
const word = src.slice(i, j);
|
|
132
|
+
if (p.keywords.includes(word))
|
|
133
|
+
out += `<span class="hk">${escHtml(word)}</span>`;
|
|
134
|
+
else if (LITERALS.includes(word))
|
|
135
|
+
out += `<span class="hl">${escHtml(word)}</span>`;
|
|
136
|
+
else
|
|
137
|
+
out += escHtml(word);
|
|
138
|
+
i = j;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
// number
|
|
142
|
+
if (isDigit(c)) {
|
|
143
|
+
const m = NUM_RE.exec(src.slice(i));
|
|
144
|
+
const len = m ? m[0].length : 1;
|
|
145
|
+
out += `<span class="hn">${escHtml(src.slice(i, i + len))}</span>`;
|
|
146
|
+
i += len;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
out += escHtml(c);
|
|
150
|
+
i++;
|
|
151
|
+
}
|
|
152
|
+
return out;
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=highlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../shared/highlight.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,8DAA8D;AAC9D,sDAAsD;AAEtD,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,OAAO,GAA2B;IACtC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO;CACpE,CAAC;AACF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;AAE7E,MAAM,QAAQ,GAAG;IACf,IAAI,EAAE,CAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,UAAU,EAAC,QAAQ,EAAC,OAAO,EAAC,UAAU,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,KAAK,EAAC,SAAS,EAAC,SAAS,EAAC,QAAQ,EAAC,MAAM,CAAC;IACxP,EAAE,EAAE,CAAC,UAAU,EAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,MAAM,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,QAAQ,EAAC,SAAS,EAAC,SAAS,EAAC,KAAK,EAAC,MAAM,EAAC,UAAU,EAAC,KAAK,EAAC,IAAI,EAAC,YAAY,EAAC,QAAQ,EAAC,IAAI,EAAC,YAAY,EAAC,WAAW,EAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAC,QAAQ,EAAC,WAAW,EAAC,KAAK,EAAC,IAAI,EAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAC,QAAQ,EAAC,UAAU,EAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,QAAQ,EAAC,OAAO,EAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,EAAC,KAAK,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAC,OAAO,CAAC;IAC9e,EAAE,EAAE,CAAC,KAAK,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,QAAQ,EAAC,SAAS,EAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAAC,UAAU,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,KAAK,EAAC,OAAO,EAAC,MAAM,EAAC,OAAO,EAAC,OAAO,EAAC,MAAM,CAAC;IAClQ,EAAE,EAAE,CAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,OAAO,EAAC,UAAU,EAAC,SAAS,EAAC,OAAO,EAAC,MAAM,EAAC,aAAa,EAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,QAAQ,EAAC,WAAW,EAAC,KAAK,EAAC,SAAS,EAAC,OAAO,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,EAAC,MAAM,EAAC,KAAK,CAAC;IACjN,IAAI,EAAE,CAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,KAAK,EAAC,MAAM,EAAC,OAAO,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,EAAC,KAAK,EAAC,OAAO,EAAC,OAAO,CAAC;CAClQ,CAAC;AAEX,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAC,WAAW,EAAC,MAAM,EAAC,MAAM,EAAC,OAAO,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,CAAC,CAAC;AAalG,MAAM,QAAQ,GAA4B;IACxC,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE;IAC5H,EAAE,EAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;IAC5G,EAAE,EAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;IACxE,EAAE,EAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;IACvG,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE;CACrG,CAAC;AAEF,MAAM,QAAQ,GAA2B;IACvC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IACrC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IACzC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IACzC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IAC9B,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,MAAM;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAsB,EAAE;IAC/D,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpE,MAAM,OAAO,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;AAC7D,MAAM,YAAY,GAAG,CAAC,CAAqB,EAAW,EAAE,CACtD,CAAC,KAAK,SAAS,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAErD,MAAM,MAAM,GAAG,oDAAoD,CAAC;AAEpE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,IAAa,EAAU,EAAE;IAClE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5C,IAAI,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IAE5B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAErB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QAElB,eAAe;QACf,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB,IAAI,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACrF,IAAI,EAAE,EAAE,CAAC;oBACP,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACjC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBACjC,GAAG,IAAI,oBAAoB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;oBAC/D,CAAC,GAAG,GAAG,CAAC;oBACR,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YACnB,MAAM,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;gBACzB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/C,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC9C,GAAG,IAAI,oBAAoB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;gBAC/D,CAAC,GAAG,GAAG,CAAC;gBACR,SAAS;YACX,CAAC;QACH,CAAC;QAED,SAAS;QACT,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBACb,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAC,CAAC,IAAI,CAAC,CAAC;wBAAC,SAAS;oBAAC,CAAC;oBACvD,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;wBAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;wBAAC,MAAM;oBAAC,CAAC;oBACnD,sCAAsC;oBACtC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG;wBAAE,MAAM;oBACxC,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,GAAG,IAAI,oBAAoB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7D,CAAC,GAAG,CAAC,CAAC;gBACN,SAAS;YACX,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtC,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;oBAAE,CAAC,EAAE,CAAC;YAC5C,CAAC;iBAAM,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,GAAG,IAAI,oBAAoB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7D,CAAC,GAAG,CAAC,CAAC;YACN,SAAS;QACX,CAAC;QAED,yCAAyC;QACzC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;gBAAE,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,GAAG,IAAI,oBAAoB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBAC5E,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,GAAG,IAAI,oBAAoB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;;gBAC/E,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC,GAAG,CAAC,CAAC;YACN,SAAS;QACX,CAAC;QAED,SAAS;QACT,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,GAAG,IAAI,oBAAoB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC;YACnE,CAAC,IAAI,GAAG,CAAC;YACT,SAAS;QACX,CAAC;QAED,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// LAN IPv4 lookup for detail URLs. 当 daemon 绑 0.0.0.0 时, 详情链接里塞回环地址
|
|
2
|
+
// 手机端就打不开; 这里挑一张物理网卡的私网 IP 替换回环。
|
|
3
|
+
//
|
|
4
|
+
// 排序策略: 物理网卡 (en0/eth0/wlan0) > 普通 > 隧道/Docker/虚拟网卡。
|
|
5
|
+
// VPN 在跑的时候 utun* 会有公网/内网 IP, 但企微桌面端走系统 DNS, 让物理网段优先更稳。
|
|
6
|
+
import { networkInterfaces } from "node:os";
|
|
7
|
+
const PRIVATE = /^(10\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.)/;
|
|
8
|
+
const PHYS = /^(en0|eth0|wlan0|en1)$/;
|
|
9
|
+
const VIRT = /^(utun|tun|tap|docker|br-|veth|vmnet|vboxnet|awdl|llw|bridge)/;
|
|
10
|
+
const score = (name) => PHYS.test(name) ? 0 : VIRT.test(name) ? 2 : 1;
|
|
11
|
+
// 网卡枚举本身很便宜, 但每次构造 detail URL 都查一次也无意义。30s 缓存够用;
|
|
12
|
+
// 拔网线/切 WiFi 后最多 30s 内 URL 还指向旧 IP — 详情页是 nice-to-have, 不影响主流程。
|
|
13
|
+
const TTL_MS = 30_000;
|
|
14
|
+
let cached = null;
|
|
15
|
+
export const getLanIP = () => {
|
|
16
|
+
if (cached && Date.now() - cached.at < TTL_MS)
|
|
17
|
+
return cached.ip;
|
|
18
|
+
const ip = Object.entries(networkInterfaces())
|
|
19
|
+
.flatMap(([name, list]) => (list ?? []).map((i) => ({ name, ...i })))
|
|
20
|
+
.filter((i) => i.family === "IPv4" &&
|
|
21
|
+
!i.internal &&
|
|
22
|
+
PRIVATE.test(i.address) &&
|
|
23
|
+
!i.address.startsWith("169.254."))
|
|
24
|
+
.sort((a, b) => score(a.name) - score(b.name))[0]?.address;
|
|
25
|
+
cached = { ip, at: Date.now() };
|
|
26
|
+
return ip;
|
|
27
|
+
};
|
|
28
|
+
// 仅在 host 是通配地址时把回环替换成 LAN IP; 显式 127.0.0.1 / 自定义 host 保持原样。
|
|
29
|
+
export const resolvePublicHost = (host) => {
|
|
30
|
+
if (host === "0.0.0.0" || host === "::" || host === "") {
|
|
31
|
+
return getLanIP() ?? "127.0.0.1";
|
|
32
|
+
}
|
|
33
|
+
return host;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=lan-ip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lan-ip.js","sourceRoot":"","sources":["../../shared/lan-ip.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,iCAAiC;AACjC,EAAE;AACF,qDAAqD;AACrD,wDAAwD;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,OAAO,GAAG,8CAA8C,CAAC;AAC/D,MAAM,IAAI,GAAG,wBAAwB,CAAC;AACtC,MAAM,IAAI,GAAG,+DAA+D,CAAC;AAE7E,MAAM,KAAK,GAAG,CAAC,IAAY,EAAU,EAAE,CACrC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhD,iDAAiD;AACjD,gEAAgE;AAChE,MAAM,MAAM,GAAG,MAAM,CAAC;AACtB,IAAI,MAAM,GAAkD,IAAI,CAAC;AAEjE,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAuB,EAAE;IAC/C,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC;IAChE,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;SAC3C,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;SACpE,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,MAAM,KAAK,MAAM;QACnB,CAAC,CAAC,CAAC,QAAQ;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QACvB,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CACpC;SACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IAC7D,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAChC,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE;IACxD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACvD,OAAO,QAAQ,EAAE,IAAI,WAAW,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Logger: pino, dual sink (stdout pretty in TTY, file always).
|
|
2
|
+
import { existsSync, mkdirSync, createWriteStream } from "node:fs";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import pino from "pino";
|
|
5
|
+
import { expandHome } from "./paths.js";
|
|
6
|
+
const ensureDir = (filePath) => {
|
|
7
|
+
const d = dirname(filePath);
|
|
8
|
+
if (!existsSync(d))
|
|
9
|
+
mkdirSync(d, { recursive: true });
|
|
10
|
+
};
|
|
11
|
+
export const makeLogger = ({ logFile, logLevel, name }) => {
|
|
12
|
+
const abs = expandHome(logFile);
|
|
13
|
+
ensureDir(abs);
|
|
14
|
+
const fileStream = createWriteStream(abs, { flags: "a" });
|
|
15
|
+
const opts = { name, level: logLevel, base: { pid: process.pid } };
|
|
16
|
+
return pino(opts, fileStream);
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../shared/log.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAyC,MAAM,MAAM,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAQ,EAAE;IAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,SAAS,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAkB,EAAU,EAAE;IAChF,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,GAAG,CAAC,CAAC;IACf,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;IAClF,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Markdown-aware chunking for WeCom pushes. WeCom caps a single markdown
|
|
2
|
+
// payload (~2048), so long replies must be cut — but a naive line-wise cut
|
|
3
|
+
// bisects fenced code and tables, and the tail piece then renders as raw
|
|
4
|
+
// garbage (unterminated ``` swallows the rest, a headerless table row shows
|
|
5
|
+
// as pipes). So: parse into blocks, keep each block whole when it fits, and
|
|
6
|
+
// when a block alone is oversized, re-emit its *head* (fence opener / table
|
|
7
|
+
// header+separator) on every piece so each chunk stands on its own.
|
|
8
|
+
//
|
|
9
|
+
// Pure — no IO, no config. Callers own the budget and the per-chunk tagging.
|
|
10
|
+
const FENCE_RE = /^\s*(`{3,}|~{3,})/;
|
|
11
|
+
/** A table separator row: only pipes, dashes, colons, spaces — and ≥1 dash. */
|
|
12
|
+
const TABLE_SEP_RE = /^\s*\|?[\s:|-]*-[\s:|-]*\|?\s*$/;
|
|
13
|
+
/** Rendered length of a line run joined by "\n". */
|
|
14
|
+
const sizeOf = (lines) => lines.length === 0 ? 0 : lines.reduce((n, l) => n + l.length + 1, -1);
|
|
15
|
+
const sliceLine = (line, max) => Array.from({ length: Math.ceil(line.length / max) }, (_, i) => line.slice(i * max, (i + 1) * max));
|
|
16
|
+
const isTableRow = (l) => !!l && l.includes("|");
|
|
17
|
+
const parseBlocks = (s) => {
|
|
18
|
+
const lines = s.split("\n");
|
|
19
|
+
const out = [];
|
|
20
|
+
let i = 0;
|
|
21
|
+
while (i < lines.length) {
|
|
22
|
+
const line = lines[i];
|
|
23
|
+
const fence = line.match(FENCE_RE)?.[1];
|
|
24
|
+
if (fence) {
|
|
25
|
+
const closes = (l) => l.trimStart().startsWith(fence);
|
|
26
|
+
let j = i + 1;
|
|
27
|
+
while (j < lines.length && !closes(lines[j]))
|
|
28
|
+
j++;
|
|
29
|
+
// Unterminated fence (truncated transcript) still gets a closer so every
|
|
30
|
+
// piece — and the chat after it — renders sanely.
|
|
31
|
+
out.push({ head: [line], body: lines.slice(i + 1, j), tail: [j < lines.length ? lines[j] : fence] });
|
|
32
|
+
i = j + 1;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (isTableRow(line) && isTableRow(lines[i + 1]) && TABLE_SEP_RE.test(lines[i + 1])) {
|
|
36
|
+
let j = i + 2;
|
|
37
|
+
while (j < lines.length && isTableRow(lines[j]))
|
|
38
|
+
j++;
|
|
39
|
+
out.push({ head: lines.slice(i, i + 2), body: lines.slice(i + 2, j), tail: [] });
|
|
40
|
+
i = j;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
out.push({ head: [], body: [line], tail: [] });
|
|
44
|
+
i += 1;
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
};
|
|
48
|
+
/** Cut one oversized block into self-contained pieces (head/tail repeated). */
|
|
49
|
+
const explode = (b, max) => {
|
|
50
|
+
const frame = sizeOf([...b.head, ...b.tail]);
|
|
51
|
+
const budget = Math.max(1, max - (frame ? frame + 1 : 0));
|
|
52
|
+
const pieces = [];
|
|
53
|
+
let cur = [];
|
|
54
|
+
for (const line of b.body) {
|
|
55
|
+
for (const p of line.length > budget ? sliceLine(line, budget) : [line]) {
|
|
56
|
+
if (cur.length && sizeOf(cur) + 1 + p.length > budget) {
|
|
57
|
+
pieces.push(cur);
|
|
58
|
+
cur = [];
|
|
59
|
+
}
|
|
60
|
+
cur.push(p);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (cur.length)
|
|
64
|
+
pieces.push(cur);
|
|
65
|
+
return pieces.map((p) => [...b.head, ...p, ...b.tail].join("\n"));
|
|
66
|
+
};
|
|
67
|
+
const blockLines = (b) => [...b.head, ...b.body, ...b.tail];
|
|
68
|
+
/** Greedy block-wise packing into ≤max chunks; atomic blocks stay whole unless
|
|
69
|
+
* they alone exceed max, in which case they split into renderable pieces. */
|
|
70
|
+
export const splitMarkdown = (s, max) => {
|
|
71
|
+
if (s.length <= max)
|
|
72
|
+
return [s];
|
|
73
|
+
const chunks = [];
|
|
74
|
+
let cur = [];
|
|
75
|
+
const flush = () => {
|
|
76
|
+
const t = cur.join("\n").replace(/^\n+|\n+$/g, "");
|
|
77
|
+
if (t)
|
|
78
|
+
chunks.push(t);
|
|
79
|
+
cur = [];
|
|
80
|
+
};
|
|
81
|
+
for (const b of parseBlocks(s)) {
|
|
82
|
+
const lines = blockLines(b);
|
|
83
|
+
if (cur.length && sizeOf(cur) + 1 + sizeOf(lines) > max)
|
|
84
|
+
flush();
|
|
85
|
+
if (sizeOf(lines) > max) {
|
|
86
|
+
flush();
|
|
87
|
+
const pieces = explode(b, max);
|
|
88
|
+
chunks.push(...pieces.slice(0, -1));
|
|
89
|
+
// Last piece stays open so a short trailing block (a closing sentence)
|
|
90
|
+
// rides along instead of arriving as its own two-character bubble.
|
|
91
|
+
cur = (pieces.at(-1) ?? "").split("\n");
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
cur.push(...lines);
|
|
95
|
+
}
|
|
96
|
+
flush();
|
|
97
|
+
return chunks.length ? chunks : [s];
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=md-chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"md-chunk.js","sourceRoot":"","sources":["../../shared/md-chunk.ts"],"names":[],"mappings":"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"}
|