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.
Files changed (117) hide show
  1. package/.claude-plugin/marketplace.json +14 -0
  2. package/.claude-plugin/plugin.json +14 -0
  3. package/CLAUDE.md +83 -0
  4. package/LICENSE +21 -0
  5. package/README.md +410 -0
  6. package/cli/weclaude.sh +236 -0
  7. package/commands/audit.md +7 -0
  8. package/commands/wrc.md +7 -0
  9. package/config.example.jsonc +102 -0
  10. package/dist/cli/audit.js +156 -0
  11. package/dist/cli/audit.js.map +1 -0
  12. package/dist/cli/init.js +311 -0
  13. package/dist/cli/init.js.map +1 -0
  14. package/dist/cli/sync.js +175 -0
  15. package/dist/cli/sync.js.map +1 -0
  16. package/dist/daemon/approval.js +1301 -0
  17. package/dist/daemon/approval.js.map +1 -0
  18. package/dist/daemon/ask.js +101 -0
  19. package/dist/daemon/ask.js.map +1 -0
  20. package/dist/daemon/audit.js +168 -0
  21. package/dist/daemon/audit.js.map +1 -0
  22. package/dist/daemon/cc-bridge.js +204 -0
  23. package/dist/daemon/cc-bridge.js.map +1 -0
  24. package/dist/daemon/cfg-sync.js +240 -0
  25. package/dist/daemon/cfg-sync.js.map +1 -0
  26. package/dist/daemon/claim.js +95 -0
  27. package/dist/daemon/claim.js.map +1 -0
  28. package/dist/daemon/detail.js +153 -0
  29. package/dist/daemon/detail.js.map +1 -0
  30. package/dist/daemon/graph.js +176 -0
  31. package/dist/daemon/graph.js.map +1 -0
  32. package/dist/daemon/http.js +83 -0
  33. package/dist/daemon/http.js.map +1 -0
  34. package/dist/daemon/inbound.js +919 -0
  35. package/dist/daemon/inbound.js.map +1 -0
  36. package/dist/daemon/index.js +569 -0
  37. package/dist/daemon/index.js.map +1 -0
  38. package/dist/daemon/last-response.js +59 -0
  39. package/dist/daemon/last-response.js.map +1 -0
  40. package/dist/daemon/mirror-bridge.js +3512 -0
  41. package/dist/daemon/mirror-bridge.js.map +1 -0
  42. package/dist/daemon/mirror-store.js +39 -0
  43. package/dist/daemon/mirror-store.js.map +1 -0
  44. package/dist/daemon/outbound.js +42 -0
  45. package/dist/daemon/outbound.js.map +1 -0
  46. package/dist/daemon/peers.js +146 -0
  47. package/dist/daemon/peers.js.map +1 -0
  48. package/dist/daemon/pending.js +90 -0
  49. package/dist/daemon/pending.js.map +1 -0
  50. package/dist/daemon/quota.js +164 -0
  51. package/dist/daemon/quota.js.map +1 -0
  52. package/dist/daemon/redact.js +27 -0
  53. package/dist/daemon/redact.js.map +1 -0
  54. package/dist/daemon/session-cache.js +149 -0
  55. package/dist/daemon/session-cache.js.map +1 -0
  56. package/dist/daemon/session-scan.js +273 -0
  57. package/dist/daemon/session-scan.js.map +1 -0
  58. package/dist/daemon/sessions.js +35 -0
  59. package/dist/daemon/sessions.js.map +1 -0
  60. package/dist/daemon/spawn-tmux.js +213 -0
  61. package/dist/daemon/spawn-tmux.js.map +1 -0
  62. package/dist/daemon/tips.js +25 -0
  63. package/dist/daemon/tips.js.map +1 -0
  64. package/dist/daemon/topics.js +197 -0
  65. package/dist/daemon/topics.js.map +1 -0
  66. package/dist/daemon/usage.js +358 -0
  67. package/dist/daemon/usage.js.map +1 -0
  68. package/dist/daemon/wedoc.js +210 -0
  69. package/dist/daemon/wedoc.js.map +1 -0
  70. package/dist/daemon/ws.js +67 -0
  71. package/dist/daemon/ws.js.map +1 -0
  72. package/dist/mcp/server.js +385 -0
  73. package/dist/mcp/server.js.map +1 -0
  74. package/dist/shared/ansi.js +134 -0
  75. package/dist/shared/ansi.js.map +1 -0
  76. package/dist/shared/chat-http.js +195 -0
  77. package/dist/shared/chat-http.js.map +1 -0
  78. package/dist/shared/chat-render.js +53 -0
  79. package/dist/shared/chat-render.js.map +1 -0
  80. package/dist/shared/chat-view.js +116 -0
  81. package/dist/shared/chat-view.js.map +1 -0
  82. package/dist/shared/cli-backends.js +304 -0
  83. package/dist/shared/cli-backends.js.map +1 -0
  84. package/dist/shared/config-writer.js +39 -0
  85. package/dist/shared/config-writer.js.map +1 -0
  86. package/dist/shared/config.js +278 -0
  87. package/dist/shared/config.js.map +1 -0
  88. package/dist/shared/detail-render.js +836 -0
  89. package/dist/shared/detail-render.js.map +1 -0
  90. package/dist/shared/detail-store.js +205 -0
  91. package/dist/shared/detail-store.js.map +1 -0
  92. package/dist/shared/highlight.js +154 -0
  93. package/dist/shared/highlight.js.map +1 -0
  94. package/dist/shared/lan-ip.js +35 -0
  95. package/dist/shared/lan-ip.js.map +1 -0
  96. package/dist/shared/log.js +18 -0
  97. package/dist/shared/log.js.map +1 -0
  98. package/dist/shared/md-chunk.js +99 -0
  99. package/dist/shared/md-chunk.js.map +1 -0
  100. package/dist/shared/paths.js +12 -0
  101. package/dist/shared/paths.js.map +1 -0
  102. package/dist/shared/session-label.js +67 -0
  103. package/dist/shared/session-label.js.map +1 -0
  104. package/dist/shared/web-assets.js +51 -0
  105. package/dist/shared/web-assets.js.map +1 -0
  106. package/dist/svr/index.js +246 -0
  107. package/dist/svr/index.js.map +1 -0
  108. package/hooks/hooks.json +16 -0
  109. package/hooks/pre-tool-use.sh +167 -0
  110. package/launchd/com.weclaude.daemon.plist.template +45 -0
  111. package/package.json +97 -0
  112. package/scripts/install.sh +73 -0
  113. package/scripts/postinstall.sh +12 -0
  114. package/scripts/uninstall.sh +44 -0
  115. package/systemd/weclaude.service.template +17 -0
  116. package/web/chat.css +171 -0
  117. 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
+ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;",
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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"}