wechat-bridge-opencode 0.1.2

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 (82) hide show
  1. package/.opencode/tools/send-wechat.ts +88 -0
  2. package/LICENSE +21 -0
  3. package/README.md +244 -0
  4. package/dist/bin/wechat-acp.d.ts +14 -0
  5. package/dist/bin/wechat-acp.d.ts.map +1 -0
  6. package/dist/bin/wechat-acp.js +284 -0
  7. package/dist/bin/wechat-acp.js.map +1 -0
  8. package/dist/bin/wechat-opencode.d.ts +14 -0
  9. package/dist/bin/wechat-opencode.d.ts.map +1 -0
  10. package/dist/bin/wechat-opencode.js +284 -0
  11. package/dist/bin/wechat-opencode.js.map +1 -0
  12. package/dist/package.json +60 -0
  13. package/dist/src/acp/agent-manager.d.ts +23 -0
  14. package/dist/src/acp/agent-manager.d.ts.map +1 -0
  15. package/dist/src/acp/agent-manager.js +134 -0
  16. package/dist/src/acp/agent-manager.js.map +1 -0
  17. package/dist/src/acp/client.d.ts +49 -0
  18. package/dist/src/acp/client.d.ts.map +1 -0
  19. package/dist/src/acp/client.js +219 -0
  20. package/dist/src/acp/client.js.map +1 -0
  21. package/dist/src/acp/opencode-sessions.d.ts +17 -0
  22. package/dist/src/acp/opencode-sessions.d.ts.map +1 -0
  23. package/dist/src/acp/opencode-sessions.js +59 -0
  24. package/dist/src/acp/opencode-sessions.js.map +1 -0
  25. package/dist/src/acp/session.d.ts +75 -0
  26. package/dist/src/acp/session.d.ts.map +1 -0
  27. package/dist/src/acp/session.js +273 -0
  28. package/dist/src/acp/session.js.map +1 -0
  29. package/dist/src/acp/workspace-manager.d.ts +48 -0
  30. package/dist/src/acp/workspace-manager.d.ts.map +1 -0
  31. package/dist/src/acp/workspace-manager.js +141 -0
  32. package/dist/src/acp/workspace-manager.js.map +1 -0
  33. package/dist/src/adapter/inbound.d.ts +10 -0
  34. package/dist/src/adapter/inbound.d.ts.map +1 -0
  35. package/dist/src/adapter/inbound.js +149 -0
  36. package/dist/src/adapter/inbound.js.map +1 -0
  37. package/dist/src/adapter/outbound.d.ts +9 -0
  38. package/dist/src/adapter/outbound.d.ts.map +1 -0
  39. package/dist/src/adapter/outbound.js +25 -0
  40. package/dist/src/adapter/outbound.js.map +1 -0
  41. package/dist/src/adapter/workspace-cmd.d.ts +53 -0
  42. package/dist/src/adapter/workspace-cmd.d.ts.map +1 -0
  43. package/dist/src/adapter/workspace-cmd.js +172 -0
  44. package/dist/src/adapter/workspace-cmd.js.map +1 -0
  45. package/dist/src/bridge.d.ts +42 -0
  46. package/dist/src/bridge.d.ts.map +1 -0
  47. package/dist/src/bridge.js +557 -0
  48. package/dist/src/bridge.js.map +1 -0
  49. package/dist/src/config.d.ts +63 -0
  50. package/dist/src/config.d.ts.map +1 -0
  51. package/dist/src/config.js +88 -0
  52. package/dist/src/config.js.map +1 -0
  53. package/dist/src/index.d.ts +7 -0
  54. package/dist/src/index.d.ts.map +1 -0
  55. package/dist/src/index.js +6 -0
  56. package/dist/src/index.js.map +1 -0
  57. package/dist/src/weixin/api.d.ts +50 -0
  58. package/dist/src/weixin/api.d.ts.map +1 -0
  59. package/dist/src/weixin/api.js +87 -0
  60. package/dist/src/weixin/api.js.map +1 -0
  61. package/dist/src/weixin/auth.d.ts +20 -0
  62. package/dist/src/weixin/auth.d.ts.map +1 -0
  63. package/dist/src/weixin/auth.js +88 -0
  64. package/dist/src/weixin/auth.js.map +1 -0
  65. package/dist/src/weixin/media.d.ts +24 -0
  66. package/dist/src/weixin/media.d.ts.map +1 -0
  67. package/dist/src/weixin/media.js +91 -0
  68. package/dist/src/weixin/media.js.map +1 -0
  69. package/dist/src/weixin/monitor.d.ts +16 -0
  70. package/dist/src/weixin/monitor.d.ts.map +1 -0
  71. package/dist/src/weixin/monitor.js +111 -0
  72. package/dist/src/weixin/monitor.js.map +1 -0
  73. package/dist/src/weixin/send.d.ts +32 -0
  74. package/dist/src/weixin/send.d.ts.map +1 -0
  75. package/dist/src/weixin/send.js +193 -0
  76. package/dist/src/weixin/send.js.map +1 -0
  77. package/dist/src/weixin/types.d.ts +150 -0
  78. package/dist/src/weixin/types.d.ts.map +1 -0
  79. package/dist/src/weixin/types.js +33 -0
  80. package/dist/src/weixin/types.js.map +1 -0
  81. package/package.json +60 -0
  82. package/scripts/install-tool.mjs +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/acp/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Per-user workspace management.
3
+ *
4
+ * Workspace = project = cwd.
5
+ * Each user has multiple workspaces, one active at a time.
6
+ * Persisted to ~/.wechat-opencode/users/<userId>.json
7
+ */
8
+ export interface Workspace {
9
+ id: string;
10
+ name: string;
11
+ cwd: string;
12
+ createdAt: number;
13
+ }
14
+ export interface UserState {
15
+ userId: string;
16
+ workspaces: Workspace[];
17
+ activeWorkspaceId: string | null;
18
+ }
19
+ export interface UserManagerOpts {
20
+ storageDir: string;
21
+ defaultCwd: string;
22
+ log: (msg: string) => void;
23
+ }
24
+ export declare class UserManager {
25
+ private opts;
26
+ private stateDir;
27
+ private cache;
28
+ constructor(opts: UserManagerOpts);
29
+ getState(userId: string): UserState;
30
+ getActiveWorkspace(userId: string): Workspace | null;
31
+ addWorkspace(userId: string, name: string, cwd: string): {
32
+ workspace: Workspace;
33
+ created: boolean;
34
+ };
35
+ switchWorkspace(userId: string, nameOrId: string): Workspace | null;
36
+ removeWorkspace(userId: string, nameOrId: string): {
37
+ success: boolean;
38
+ message: string;
39
+ };
40
+ listWorkspaces(userId: string): {
41
+ workspaces: Workspace[];
42
+ activeId: string | null;
43
+ };
44
+ clearCache(userId?: string): void;
45
+ private stateFile;
46
+ private saveState;
47
+ }
48
+ //# sourceMappingURL=workspace-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-manager.d.ts","sourceRoot":"","sources":["../../../src/acp/workspace-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B;AAsBD,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAgC;gBAEjC,IAAI,EAAE,eAAe;IAMjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAqCnC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAMpD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAkBnG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAWnE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAsBxF,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAKpF,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAQjC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,SAAS;CAQlB"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Per-user workspace management.
3
+ *
4
+ * Workspace = project = cwd.
5
+ * Each user has multiple workspaces, one active at a time.
6
+ * Persisted to ~/.wechat-opencode/users/<userId>.json
7
+ */
8
+ import fs from "node:fs";
9
+ import path from "node:path";
10
+ function nameToId(name) {
11
+ return name
12
+ .toLowerCase()
13
+ .replace(/[^a-z0-9\u4e00-\u9fff_-]/g, "-")
14
+ .replace(/-+/g, "-")
15
+ .replace(/^-|-$/g, "")
16
+ .substring(0, 32);
17
+ }
18
+ function generateId(name, existing) {
19
+ const base = nameToId(name) || `ws-${Date.now()}`;
20
+ let id = base;
21
+ let counter = 1;
22
+ while (existing.includes(id)) {
23
+ id = `${base}-${counter}`;
24
+ counter++;
25
+ }
26
+ return id;
27
+ }
28
+ export class UserManager {
29
+ opts;
30
+ stateDir;
31
+ cache = new Map();
32
+ constructor(opts) {
33
+ this.opts = opts;
34
+ this.stateDir = path.join(opts.storageDir, "users");
35
+ fs.mkdirSync(this.stateDir, { recursive: true });
36
+ }
37
+ getState(userId) {
38
+ const cached = this.cache.get(userId);
39
+ if (cached)
40
+ return cached;
41
+ const stateFile = this.stateFile(userId);
42
+ let state = null;
43
+ try {
44
+ const raw = fs.readFileSync(stateFile, "utf-8");
45
+ state = JSON.parse(raw);
46
+ }
47
+ catch {
48
+ // Not found or invalid
49
+ }
50
+ if (!state || !Array.isArray(state.workspaces)) {
51
+ const defaultWs = {
52
+ id: "default",
53
+ name: "Default",
54
+ cwd: this.opts.defaultCwd,
55
+ createdAt: Date.now(),
56
+ };
57
+ state = {
58
+ userId,
59
+ workspaces: [defaultWs],
60
+ activeWorkspaceId: defaultWs.id,
61
+ };
62
+ this.saveState(state);
63
+ }
64
+ if (state.activeWorkspaceId && !state.workspaces.some((w) => w.id === state.activeWorkspaceId)) {
65
+ state.activeWorkspaceId = state.workspaces[0]?.id ?? null;
66
+ }
67
+ this.cache.set(userId, state);
68
+ return state;
69
+ }
70
+ getActiveWorkspace(userId) {
71
+ const state = this.getState(userId);
72
+ if (!state.activeWorkspaceId)
73
+ return null;
74
+ return state.workspaces.find((w) => w.id === state.activeWorkspaceId) ?? null;
75
+ }
76
+ addWorkspace(userId, name, cwd) {
77
+ const state = this.getState(userId);
78
+ const existingByCwd = state.workspaces.find((w) => w.cwd === cwd);
79
+ if (existingByCwd)
80
+ return { workspace: existingByCwd, created: false };
81
+ const existingByName = state.workspaces.find((w) => w.name.toLowerCase() === name.toLowerCase());
82
+ if (existingByName)
83
+ return { workspace: existingByName, created: false };
84
+ const id = generateId(name, state.workspaces.map((w) => w.id));
85
+ const workspace = { id, name, cwd, createdAt: Date.now() };
86
+ state.workspaces.push(workspace);
87
+ state.activeWorkspaceId = workspace.id;
88
+ this.saveState(state);
89
+ return { workspace, created: true };
90
+ }
91
+ switchWorkspace(userId, nameOrId) {
92
+ const state = this.getState(userId);
93
+ const target = state.workspaces.find((w) => w.id === nameOrId || w.name.toLowerCase() === nameOrId.toLowerCase());
94
+ if (!target)
95
+ return null;
96
+ state.activeWorkspaceId = target.id;
97
+ this.saveState(state);
98
+ return target;
99
+ }
100
+ removeWorkspace(userId, nameOrId) {
101
+ const state = this.getState(userId);
102
+ if (state.workspaces.length <= 1) {
103
+ return { success: false, message: "Cannot remove the last workspace" };
104
+ }
105
+ const idx = state.workspaces.findIndex((w) => w.id === nameOrId || w.name.toLowerCase() === nameOrId.toLowerCase());
106
+ if (idx === -1)
107
+ return { success: false, message: `Workspace "${nameOrId}" not found` };
108
+ const removed = state.workspaces[idx];
109
+ state.workspaces.splice(idx, 1);
110
+ if (state.activeWorkspaceId === removed.id) {
111
+ state.activeWorkspaceId = state.workspaces[0]?.id ?? null;
112
+ }
113
+ this.saveState(state);
114
+ return { success: true, message: `Removed workspace "${removed.name}"` };
115
+ }
116
+ listWorkspaces(userId) {
117
+ const state = this.getState(userId);
118
+ return { workspaces: [...state.workspaces], activeId: state.activeWorkspaceId };
119
+ }
120
+ clearCache(userId) {
121
+ if (userId) {
122
+ this.cache.delete(userId);
123
+ }
124
+ else {
125
+ this.cache.clear();
126
+ }
127
+ }
128
+ stateFile(userId) {
129
+ return path.join(this.stateDir, `${userId}.json`);
130
+ }
131
+ saveState(state) {
132
+ try {
133
+ const file = this.stateFile(state.userId);
134
+ fs.writeFileSync(file, JSON.stringify(state, null, 2), "utf-8");
135
+ }
136
+ catch (err) {
137
+ this.opts.log(`Failed to save state for ${state.userId}: ${String(err)}`);
138
+ }
139
+ }
140
+ }
141
+ //# sourceMappingURL=workspace-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-manager.js","sourceRoot":"","sources":["../../../src/acp/workspace-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Inbound adapter: convert WeChat messages to ACP ContentBlock[].
3
+ */
4
+ import type * as acp from "@agentclientprotocol/sdk";
5
+ import type { WeixinMessage } from "../weixin/types.js";
6
+ /**
7
+ * Convert a WeChat message to ACP ContentBlock[] for use in session/prompt.
8
+ */
9
+ export declare function weixinMessageToPrompt(msg: WeixinMessage, cdnBaseUrl: string, log: (msg: string) => void, tempDir: string): Promise<acp.ContentBlock[]>;
10
+ //# sourceMappingURL=inbound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../../src/adapter/inbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,oBAAoB,CAAC;AAuDrE;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,aAAa,EAClB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAmC7B"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Inbound adapter: convert WeChat messages to ACP ContentBlock[].
3
+ */
4
+ import fs from "node:fs";
5
+ import path from "node:path";
6
+ import crypto from "node:crypto";
7
+ import { MessageItemType } from "../weixin/types.js";
8
+ import { parseAesKey, downloadAndDecrypt } from "../weixin/media.js";
9
+ /**
10
+ * Save downloaded file to temp directory with a unique name.
11
+ */
12
+ function saveToTemp(buffer, fileName, tempDir) {
13
+ fs.mkdirSync(tempDir, { recursive: true });
14
+ const safeName = `${Date.now()}-${crypto.randomBytes(4).toString("hex")}-${fileName.replace(/[^\w.-]/g, "_")}`;
15
+ const filePath = path.join(tempDir, safeName);
16
+ fs.writeFileSync(filePath, buffer);
17
+ return filePath;
18
+ }
19
+ /**
20
+ * Extract text body from a WeChat message's item_list.
21
+ */
22
+ function extractText(itemList) {
23
+ if (!itemList?.length)
24
+ return "";
25
+ for (const item of itemList) {
26
+ if (item.type === MessageItemType.TEXT && item.text_item?.text != null) {
27
+ const text = String(item.text_item.text);
28
+ const ref = item.ref_msg;
29
+ if (!ref)
30
+ return text;
31
+ // Build quoted context
32
+ const parts = [];
33
+ if (ref.title)
34
+ parts.push(ref.title);
35
+ if (ref.message_item?.text_item?.text)
36
+ parts.push(ref.message_item.text_item.text);
37
+ if (!parts.length)
38
+ return text;
39
+ return `[引用: ${parts.join(" | ")}]\n${text}`;
40
+ }
41
+ // Voice transcription
42
+ if (item.type === MessageItemType.VOICE && item.voice_item?.text) {
43
+ return item.voice_item.text;
44
+ }
45
+ }
46
+ return "";
47
+ }
48
+ /**
49
+ * Find the first media item in a message.
50
+ */
51
+ function findMediaItem(itemList) {
52
+ if (!itemList)
53
+ return undefined;
54
+ return (itemList.find((i) => i.type === MessageItemType.IMAGE && i.image_item?.media?.encrypt_query_param) ??
55
+ itemList.find((i) => i.type === MessageItemType.VIDEO && i.video_item?.media?.encrypt_query_param) ??
56
+ itemList.find((i) => i.type === MessageItemType.FILE && i.file_item?.media?.encrypt_query_param) ??
57
+ itemList.find((i) => i.type === MessageItemType.VOICE && i.voice_item?.media?.encrypt_query_param && !i.voice_item.text));
58
+ }
59
+ /**
60
+ * Convert a WeChat message to ACP ContentBlock[] for use in session/prompt.
61
+ */
62
+ export async function weixinMessageToPrompt(msg, cdnBaseUrl, log, tempDir) {
63
+ const blocks = [];
64
+ // Extract text
65
+ const text = extractText(msg.item_list);
66
+ if (text) {
67
+ blocks.push({
68
+ type: "text",
69
+ text: `${text}\n\n[系统提示: 你正在通过微信(WeChat)与用户聊天。]`,
70
+ });
71
+ }
72
+ // Try to download and attach media
73
+ const mediaItem = findMediaItem(msg.item_list);
74
+ if (mediaItem) {
75
+ try {
76
+ const attached = await convertMediaItem(mediaItem, cdnBaseUrl, log, tempDir);
77
+ if (attached)
78
+ blocks.push(attached);
79
+ }
80
+ catch (err) {
81
+ log(`Media download failed, skipping: ${String(err)}`);
82
+ const mediaType = mediaItem.type === MessageItemType.IMAGE ? "image"
83
+ : mediaItem.type === MessageItemType.VIDEO ? "video"
84
+ : mediaItem.type === MessageItemType.FILE ? `file (${mediaItem.file_item?.file_name ?? "unknown"})`
85
+ : mediaItem.type === MessageItemType.VOICE ? "voice"
86
+ : "media";
87
+ blocks.push({ type: "text", text: `[Received ${mediaType} - download failed]` });
88
+ }
89
+ }
90
+ // Fallback: always have at least one content block
91
+ if (blocks.length === 0) {
92
+ blocks.push({ type: "text", text: "[empty message]" });
93
+ }
94
+ return blocks;
95
+ }
96
+ async function convertMediaItem(item, cdnBaseUrl, log, tempDir) {
97
+ if (item.type === MessageItemType.IMAGE && item.image_item?.media) {
98
+ const media = item.image_item.media;
99
+ const aesKey = parseAesKey(media);
100
+ if (!aesKey || !media.encrypt_query_param)
101
+ return null;
102
+ log("Downloading image from CDN...");
103
+ const buffer = await downloadAndDecrypt(media.encrypt_query_param, aesKey, cdnBaseUrl);
104
+ const realPath = saveToTemp(buffer, "image.jpg", tempDir);
105
+ return {
106
+ type: "text",
107
+ text: `[收到图片] 文件已保存到: ${realPath}`,
108
+ };
109
+ }
110
+ if (item.type === MessageItemType.FILE && item.file_item?.media) {
111
+ const media = item.file_item.media;
112
+ const aesKey = parseAesKey(media);
113
+ if (!aesKey || !media.encrypt_query_param)
114
+ return null;
115
+ log(`Downloading file "${item.file_item.file_name}" from CDN...`);
116
+ const buffer = await downloadAndDecrypt(media.encrypt_query_param, aesKey, cdnBaseUrl);
117
+ const fileName = item.file_item.file_name ?? "file";
118
+ const realPath = saveToTemp(buffer, fileName, tempDir);
119
+ // Text files: also read content and include it
120
+ if (isTextFile(fileName)) {
121
+ const content = buffer.toString("utf-8");
122
+ return {
123
+ type: "text",
124
+ text: `[收到文件: ${fileName}]\n文件路径: ${realPath}\n\n文件内容:\n${content}`,
125
+ };
126
+ }
127
+ // Binary files: just tell agent where it is
128
+ return {
129
+ type: "text",
130
+ text: `[收到文件: ${fileName}] 文件已保存到: ${realPath}\n你可以使用这个路径来读取或处理文件。`,
131
+ };
132
+ }
133
+ if (item.type === MessageItemType.VOICE && item.voice_item?.media) {
134
+ return { type: "text", text: "[Received voice message - no transcription available]" };
135
+ }
136
+ if (item.type === MessageItemType.VIDEO) {
137
+ return { type: "text", text: "[Received video message]" };
138
+ }
139
+ return null;
140
+ }
141
+ function isTextFile(name) {
142
+ const ext = name.split(".").pop()?.toLowerCase() ?? "";
143
+ return [
144
+ "txt", "md", "json", "js", "ts", "py", "java", "c", "cpp", "h",
145
+ "css", "html", "xml", "yaml", "yml", "toml", "ini", "cfg", "sh",
146
+ "bash", "rs", "go", "rb", "php", "sql", "csv", "log", "env",
147
+ ].includes(ext);
148
+ }
149
+ //# sourceMappingURL=inbound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound.js","sourceRoot":"","sources":["../../../src/adapter/inbound.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Outbound adapter: format ACP output for WeChat delivery.
3
+ */
4
+ /**
5
+ * Strip markdown formatting for cleaner WeChat display.
6
+ * Preserves code blocks (as they're useful even in plain text).
7
+ */
8
+ export declare function formatForWeChat(text: string): string;
9
+ //# sourceMappingURL=outbound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound.d.ts","sourceRoot":"","sources":["../../../src/adapter/outbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqBpD"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Outbound adapter: format ACP output for WeChat delivery.
3
+ */
4
+ /**
5
+ * Strip markdown formatting for cleaner WeChat display.
6
+ * Preserves code blocks (as they're useful even in plain text).
7
+ */
8
+ export function formatForWeChat(text) {
9
+ // Remove image references ![alt](url)
10
+ let out = text.replace(/!\[([^\]]*)\]\([^)]+\)/g, "[$1]");
11
+ // Convert links [text](url) → text (url)
12
+ out = out.replace(/\[([^\]]+)\]\(([^)]+)\)/g, "$1 ($2)");
13
+ // Remove bold/italic markers but keep text
14
+ out = out.replace(/\*\*\*(.+?)\*\*\*/g, "$1");
15
+ out = out.replace(/\*\*(.+?)\*\*/g, "$1");
16
+ out = out.replace(/\*(.+?)\*/g, "$1");
17
+ out = out.replace(/__(.+?)__/g, "$1");
18
+ out = out.replace(/_(.+?)_/g, "$1");
19
+ // Remove heading markers
20
+ out = out.replace(/^#{1,6}\s+/gm, "");
21
+ // Clean up excessive blank lines
22
+ out = out.replace(/\n{3,}/g, "\n\n");
23
+ return out.trim();
24
+ }
25
+ //# sourceMappingURL=outbound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound.js","sourceRoot":"","sources":["../../../src/adapter/outbound.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,sCAAsC;IACtC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAE1D,yCAAyC;IACzC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;IAEzD,2CAA2C;IAC3C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IAC9C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAC1C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACtC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACtC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAEpC,yBAAyB;IACzB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAEtC,iCAAiC;IACjC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAErC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Parse workspace and session commands from WeChat messages.
3
+ *
4
+ * Workspace commands (/workspace or /ws):
5
+ * list — List all workspaces
6
+ * add /path [name] — Add a workspace
7
+ * switch <name|id> — Switch to a workspace
8
+ * remove <name|id> — Remove a workspace
9
+ * status — Show current workspace
10
+ *
11
+ * Session commands (/session or /s):
12
+ * new [name] — Create a new session
13
+ * switch <name|id> — Switch to an existing session
14
+ * remove <name|id> — Remove a session
15
+ * list — List all sessions
16
+ * status — Show current session info
17
+ */
18
+ export interface WorkspaceCommand {
19
+ kind: "list" | "add" | "switch" | "remove" | "status";
20
+ path?: string;
21
+ name?: string;
22
+ }
23
+ export interface SessionCommand {
24
+ kind: "new" | "switch" | "remove" | "list" | "status";
25
+ name?: string;
26
+ }
27
+ export declare function parseWorkspaceCommand(text: string): WorkspaceCommand | null;
28
+ export declare function parseSessionCommand(text: string): SessionCommand | null;
29
+ export declare function formatWorkspaceList(workspaces: Array<{
30
+ id: string;
31
+ name: string;
32
+ cwd: string;
33
+ }>, activeId: string | null): string;
34
+ export declare function formatWorkspaceStatus(name: string, id: string, cwd: string): string;
35
+ export declare function formatSessionList(sessions: Array<{
36
+ id: string;
37
+ name: string;
38
+ workspaceId: string;
39
+ workspaceName?: string;
40
+ }>, activeId: string | null, workspaces?: Array<{
41
+ id: string;
42
+ name: string;
43
+ }>): string;
44
+ export declare function formatSessionStatus(sessionName: string, sessionId: string, workspaceName: string, workspaceId: string): string;
45
+ /**
46
+ * Check if a message is a help command.
47
+ */
48
+ export declare function parseHelpCommand(text: string): boolean;
49
+ /**
50
+ * Format the help message listing all available commands.
51
+ */
52
+ export declare function formatHelp(): string;
53
+ //# sourceMappingURL=workspace-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-cmd.d.ts","sourceRoot":"","sources":["../../../src/adapter/workspace-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA2C3E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA0CvE;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,CAUR;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC1F,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,UAAU,GAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAM,GACnD,MAAM,CAuBR;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAuBnC"}