botmux 2.2.7 → 2.3.0
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/README.en.md +63 -13
- package/README.md +52 -14
- package/dist/adapters/cli/aiden.d.ts.map +1 -1
- package/dist/adapters/cli/aiden.js +0 -40
- package/dist/adapters/cli/aiden.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +21 -67
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/coco.d.ts.map +1 -1
- package/dist/adapters/cli/coco.js +0 -33
- package/dist/adapters/cli/coco.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +0 -27
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/gemini.d.ts.map +1 -1
- package/dist/adapters/cli/gemini.js +1 -29
- package/dist/adapters/cli/gemini.js.map +1 -1
- package/dist/adapters/cli/opencode.d.ts.map +1 -1
- package/dist/adapters/cli/opencode.js +1 -44
- package/dist/adapters/cli/opencode.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +11 -8
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/cli.js +737 -16
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -0
- package/dist/config.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +8 -4
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/scheduler.d.ts +38 -16
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +335 -149
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/session-manager.d.ts +6 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +105 -16
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/types.d.ts +26 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts +15 -3
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +233 -31
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +49 -10
- package/dist/daemon.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +29 -1
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +240 -55
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +1 -0
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +200 -40
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/services/schedule-store.d.ts +20 -3
- package/dist/services/schedule-store.d.ts.map +1 -1
- package/dist/services/schedule-store.js +140 -16
- package/dist/services/schedule-store.js.map +1 -1
- package/dist/skills/definitions.d.ts +17 -0
- package/dist/skills/definitions.d.ts.map +1 -0
- package/dist/skills/definitions.js +254 -0
- package/dist/skills/definitions.js.map +1 -0
- package/dist/skills/installer.d.ts +9 -0
- package/dist/skills/installer.d.ts.map +1 -0
- package/dist/skills/installer.js +42 -0
- package/dist/skills/installer.js.map +1 -0
- package/dist/types.d.ts +80 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -5
- package/dist/types.js.map +1 -1
- package/dist/utils/lark-upload.d.ts +2 -0
- package/dist/utils/lark-upload.d.ts.map +1 -0
- package/dist/utils/lark-upload.js +27 -0
- package/dist/utils/lark-upload.js.map +1 -0
- package/dist/utils/screen-analyzer.d.ts +67 -0
- package/dist/utils/screen-analyzer.d.ts.map +1 -0
- package/dist/utils/screen-analyzer.js +256 -0
- package/dist/utils/screen-analyzer.js.map +1 -0
- package/dist/utils/screenshot-renderer.d.ts +11 -0
- package/dist/utils/screenshot-renderer.d.ts.map +1 -0
- package/dist/utils/screenshot-renderer.js +225 -0
- package/dist/utils/screenshot-renderer.js.map +1 -0
- package/dist/utils/terminal-renderer.d.ts +33 -0
- package/dist/utils/terminal-renderer.d.ts.map +1 -1
- package/dist/utils/terminal-renderer.js +33 -0
- package/dist/utils/terminal-renderer.js.map +1 -1
- package/dist/worker.js +283 -14
- package/dist/worker.js.map +1 -1
- package/package.json +2 -5
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -16
- package/dist/index.js.map +0 -1
- package/dist/server.d.ts +0 -3
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -133
- package/dist/server.js.map +0 -1
- package/dist/tools/get-thread-messages.d.ts +0 -26
- package/dist/tools/get-thread-messages.d.ts.map +0 -1
- package/dist/tools/get-thread-messages.js +0 -38
- package/dist/tools/get-thread-messages.js.map +0 -1
- package/dist/tools/index.d.ts +0 -9
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -10
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/list-bots.d.ts +0 -40
- package/dist/tools/list-bots.d.ts.map +0 -1
- package/dist/tools/list-bots.js +0 -77
- package/dist/tools/list-bots.js.map +0 -1
- package/dist/tools/send-to-thread.d.ts +0 -46
- package/dist/tools/send-to-thread.d.ts.map +0 -1
- package/dist/tools/send-to-thread.js +0 -275
- package/dist/tools/send-to-thread.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-store.js","sourceRoot":"","sources":["../../src/services/schedule-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"schedule-store.js","sourceRoot":"","sources":["../../src/services/schedule-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical skill definitions shipped with botmux.
|
|
3
|
+
*
|
|
4
|
+
* Each skill is a SKILL.md ready to drop into any CLI's skills directory.
|
|
5
|
+
* Skills here MUST:
|
|
6
|
+
* - use `botmux <subcmd>` shell commands (CLI is the canonical interface)
|
|
7
|
+
* - not depend on MCP tools (which may not be wired on every CLI)
|
|
8
|
+
* - keep frontmatter minimal — just `name` and `description` for discovery
|
|
9
|
+
*/
|
|
10
|
+
export interface SkillDef {
|
|
11
|
+
/** Filesystem-safe name — becomes the directory name under {skillsDir}/ */
|
|
12
|
+
name: string;
|
|
13
|
+
/** Markdown content including YAML frontmatter */
|
|
14
|
+
content: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const BUILTIN_SKILLS: SkillDef[];
|
|
17
|
+
//# sourceMappingURL=definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAoPD,eAAO,MAAM,cAAc,EAAE,QAAQ,EAKpC,CAAC"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical skill definitions shipped with botmux.
|
|
3
|
+
*
|
|
4
|
+
* Each skill is a SKILL.md ready to drop into any CLI's skills directory.
|
|
5
|
+
* Skills here MUST:
|
|
6
|
+
* - use `botmux <subcmd>` shell commands (CLI is the canonical interface)
|
|
7
|
+
* - not depend on MCP tools (which may not be wired on every CLI)
|
|
8
|
+
* - keep frontmatter minimal — just `name` and `description` for discovery
|
|
9
|
+
*/
|
|
10
|
+
const SCHEDULE_SKILL = `---
|
|
11
|
+
name: botmux-schedule
|
|
12
|
+
description: 当用户要求创建定时任务/提醒("每天X点提醒"、"30分钟后"、"每周一"、"remind me"、"schedule")时触发。使用 botmux schedule 命令操作定时任务(增删查改),支持 Lark 话题内自动路由。
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# botmux-schedule — 定时任务
|
|
16
|
+
|
|
17
|
+
当用户要求"定时"/"提醒"/"每天"/"每周"/"N 分钟后"等时间相关的自动化请求时,使用本技能创建/管理定时任务。
|
|
18
|
+
|
|
19
|
+
## 核心原则
|
|
20
|
+
|
|
21
|
+
1. **创建前必须跟用户确认** schedule 和 prompt 的具体内容,避免误加
|
|
22
|
+
2. **默认不传 --chat-id / --root-msg-id** —— 在 Lark 话题的 CLI 会话内运行时 botmux 会自动推断
|
|
23
|
+
3. 创建后把 task id 和下次执行时间回显给用户
|
|
24
|
+
4. 如果用户是在编程会话里顺手说"以后每天X点都这样做",先问他:是否希望到点以后自动在当前话题里继续
|
|
25
|
+
|
|
26
|
+
## 支持的 schedule 格式
|
|
27
|
+
|
|
28
|
+
| 格式 | 说明 | 示例 |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| cron 表达式 | 5 字段 | \`"0 9 * * *"\` 每天 09:00 |
|
|
31
|
+
| 英文 duration | 一次性 | \`"30m"\` 30 分钟后 / \`"2h"\` / \`"1d"\` |
|
|
32
|
+
| 英文 interval | 循环 | \`"every 30m"\` / \`"every 2h"\` |
|
|
33
|
+
| ISO 时间 | 一次性 | \`"2026-05-01T10:00"\` |
|
|
34
|
+
| 中文自然语言 | 推荐给中文用户 | \`"每日17:50"\` / \`"每周一10:00"\` / \`"30分钟后"\` / \`"明天9:00"\` |
|
|
35
|
+
|
|
36
|
+
## 子命令
|
|
37
|
+
|
|
38
|
+
### 创建
|
|
39
|
+
|
|
40
|
+
\`\`\`
|
|
41
|
+
botmux schedule add "<schedule>" "<prompt>" [--name <name>] [--deliver origin|local]
|
|
42
|
+
\`\`\`
|
|
43
|
+
|
|
44
|
+
prompt 是到点时会被执行的内容,就像用户新开一个话题向你发送这段 prompt 一样。
|
|
45
|
+
可选 \`--deliver local\` 表示只记录不推送(适合"每小时检查一次,没事就别打扰我")。
|
|
46
|
+
|
|
47
|
+
### 查看
|
|
48
|
+
|
|
49
|
+
\`\`\`
|
|
50
|
+
botmux schedule list
|
|
51
|
+
\`\`\`
|
|
52
|
+
|
|
53
|
+
### 管理
|
|
54
|
+
|
|
55
|
+
\`\`\`
|
|
56
|
+
botmux schedule pause <id> # 暂停(不删除)
|
|
57
|
+
botmux schedule resume <id> # 恢复
|
|
58
|
+
botmux schedule remove <id> # 删除
|
|
59
|
+
botmux schedule run <id> # 标记立即执行(< 30 秒内 daemon 会触发)
|
|
60
|
+
\`\`\`
|
|
61
|
+
|
|
62
|
+
## 典型用法
|
|
63
|
+
|
|
64
|
+
**用户**:"每天早上 9 点生成一下昨天的 PR 汇总"
|
|
65
|
+
|
|
66
|
+
你先跟用户确认:我打算建一个每天 09:00 的定时任务,到点自动在本话题生成 PR 汇总,可以吗?
|
|
67
|
+
|
|
68
|
+
用户确认后执行:
|
|
69
|
+
|
|
70
|
+
\`\`\`bash
|
|
71
|
+
botmux schedule add "每日9:00" "生成昨天的 GitHub PR 汇总(合并的 / 待 review 的),按 repo 分组"
|
|
72
|
+
\`\`\`
|
|
73
|
+
|
|
74
|
+
**用户**:"30 分钟后提醒我检查一下部署状态"
|
|
75
|
+
|
|
76
|
+
\`\`\`bash
|
|
77
|
+
botmux schedule add "30m" "检查部署状态(调用 kubectl get pods 看看有无 CrashLoop)"
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
## 到点会发生什么
|
|
81
|
+
|
|
82
|
+
- botmux daemon 每 30 秒 tick 一次,到点会在**原话题**里自动续一条消息并把 prompt 喂给一个新的 CLI 会话
|
|
83
|
+
- 工作目录与创建任务时一致
|
|
84
|
+
- 如果原话题的会话还活着,prompt 会直接注入现有会话(不会开新会话)
|
|
85
|
+
`;
|
|
86
|
+
const THREAD_MESSAGES_SKILL = `---
|
|
87
|
+
name: botmux-thread-messages
|
|
88
|
+
description: 需要查看当前 Lark 话题的历史消息时触发。适合"看看这个话题之前聊了什么"、"最近的消息"、"上下文"类请求。在 CLI 会话内自动推断 session-id。
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
# botmux-thread-messages — 读取话题消息历史
|
|
92
|
+
|
|
93
|
+
想回顾当前 Lark 话题里用户之前发过什么、别的机器人说了什么时使用。
|
|
94
|
+
|
|
95
|
+
## 用法
|
|
96
|
+
|
|
97
|
+
\`\`\`bash
|
|
98
|
+
# 拉取最近 50 条(默认)
|
|
99
|
+
botmux thread messages
|
|
100
|
+
|
|
101
|
+
# 拉取最近 100 条
|
|
102
|
+
botmux thread messages --limit 100
|
|
103
|
+
|
|
104
|
+
# 指定 session-id(不在 CLI 会话内时用)
|
|
105
|
+
botmux thread messages --session-id <uuid>
|
|
106
|
+
\`\`\`
|
|
107
|
+
|
|
108
|
+
## 输出
|
|
109
|
+
|
|
110
|
+
JSON 格式,字段:
|
|
111
|
+
|
|
112
|
+
\`\`\`json
|
|
113
|
+
{
|
|
114
|
+
"sessionId": "...",
|
|
115
|
+
"threadId": "...",
|
|
116
|
+
"messages": [
|
|
117
|
+
{ "messageId": "...", "senderId": "...", "senderType": "user|app", "msgType": "text|post|interactive", "content": "...", "createTime": "..." }
|
|
118
|
+
],
|
|
119
|
+
"total": 17
|
|
120
|
+
}
|
|
121
|
+
\`\`\`
|
|
122
|
+
|
|
123
|
+
## 注意
|
|
124
|
+
|
|
125
|
+
- 只返回属于当前话题的消息(按 rootMessageId 过滤)
|
|
126
|
+
- senderType="app" 表示机器人发的消息(包括 Claude Code / Codex / 其它 bot),"user" 表示用户
|
|
127
|
+
- 需要先把 JSON 读进来再做总结,不要直接把 JSON 扔给用户
|
|
128
|
+
`;
|
|
129
|
+
const SEND_SKILL = `---
|
|
130
|
+
name: botmux-send
|
|
131
|
+
description: 向飞书话题发送消息。用户在飞书上阅读看不到终端输出,需要用户看到的内容(关键结论、方案、最终结果、进度更新)必须通过 botmux send 发送。支持文本、图片、文件附件和 @mention。
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
# botmux-send — 向飞书话题发送消息
|
|
135
|
+
|
|
136
|
+
**核心规则**:用户在飞书上阅读,看不到你的终端输出。想让用户看到的内容**必须**通过 \`botmux send\` 发送。
|
|
137
|
+
|
|
138
|
+
## 什么时候用
|
|
139
|
+
|
|
140
|
+
- 关键结论、方案(等用户确认再执行)
|
|
141
|
+
- 最终结果
|
|
142
|
+
- 进度更新(长任务的中途汇报)
|
|
143
|
+
- 需要用户回复的问题
|
|
144
|
+
|
|
145
|
+
## 什么时候不用
|
|
146
|
+
|
|
147
|
+
- 中间过程的调试输出
|
|
148
|
+
- 给自己看的分析笔记
|
|
149
|
+
- 纯粹的代码操作(编辑/运行命令)
|
|
150
|
+
|
|
151
|
+
## 用法
|
|
152
|
+
|
|
153
|
+
### 纯文本(最常见)
|
|
154
|
+
|
|
155
|
+
\`\`\`bash
|
|
156
|
+
# 直接传参
|
|
157
|
+
botmux send "分析完成,核心问题是 X"
|
|
158
|
+
|
|
159
|
+
# heredoc(多行内容推荐)
|
|
160
|
+
botmux send <<'EOF'
|
|
161
|
+
## 分析报告
|
|
162
|
+
|
|
163
|
+
1. 发现问题 A
|
|
164
|
+
2. 建议方案 B
|
|
165
|
+
|
|
166
|
+
需要你确认后我再动手。
|
|
167
|
+
EOF
|
|
168
|
+
|
|
169
|
+
# 管道
|
|
170
|
+
echo "构建成功 ✅" | botmux send
|
|
171
|
+
\`\`\`
|
|
172
|
+
|
|
173
|
+
### 带图片(内联显示)
|
|
174
|
+
|
|
175
|
+
\`\`\`bash
|
|
176
|
+
botmux send --images /tmp/screenshot.png <<'EOF'
|
|
177
|
+
截图如上,红框部分是问题所在。
|
|
178
|
+
EOF
|
|
179
|
+
\`\`\`
|
|
180
|
+
|
|
181
|
+
### 带文件附件
|
|
182
|
+
|
|
183
|
+
\`\`\`bash
|
|
184
|
+
botmux send --files /tmp/report.pdf "报告已生成,请查收附件。"
|
|
185
|
+
\`\`\`
|
|
186
|
+
|
|
187
|
+
### @mention 其他机器人协作
|
|
188
|
+
|
|
189
|
+
\`\`\`bash
|
|
190
|
+
# 先查可用机器人
|
|
191
|
+
botmux bots list
|
|
192
|
+
|
|
193
|
+
# @mention 协作
|
|
194
|
+
botmux send --mention "ou_xxx:Aiden" "请 @Aiden 帮忙 review 这段代码"
|
|
195
|
+
\`\`\`
|
|
196
|
+
|
|
197
|
+
## 参数
|
|
198
|
+
|
|
199
|
+
| 参数 | 说明 |
|
|
200
|
+
|---|---|
|
|
201
|
+
| (positional 或 stdin) | 消息文本(纯文本,格式自动处理) |
|
|
202
|
+
| \`--content-file <path>\` | 从文件读取内容(优先于 stdin/positional) |
|
|
203
|
+
| \`--images <path>\` | 内联图片,可重复多次 |
|
|
204
|
+
| \`--files <path>\` | 附件文件,可重复多次,每个单独发送 |
|
|
205
|
+
| \`--mention <open_id:name>\` | @mention,可重复。用 \`botmux bots list\` 查 open_id |
|
|
206
|
+
| \`--session-id <id>\` | 手动指定 session(通常自动推断,不需要传) |
|
|
207
|
+
|
|
208
|
+
## 输出
|
|
209
|
+
|
|
210
|
+
成功返回 JSON: \`{"success":true,"messageId":"om_xxx","sessionId":"..."}\`
|
|
211
|
+
失败打印错误到 stderr 并 exit 1。
|
|
212
|
+
`;
|
|
213
|
+
const BOTS_SKILL = `---
|
|
214
|
+
name: botmux-bots
|
|
215
|
+
description: 列出当前飞书群聊中的机器人及其 open_id。在需要 @mention 其他机器人协作时使用。
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
# botmux-bots — 查询可用机器人
|
|
219
|
+
|
|
220
|
+
## 用法
|
|
221
|
+
|
|
222
|
+
\`\`\`bash
|
|
223
|
+
botmux bots list
|
|
224
|
+
\`\`\`
|
|
225
|
+
|
|
226
|
+
## 输出
|
|
227
|
+
|
|
228
|
+
JSON 格式:
|
|
229
|
+
\`\`\`json
|
|
230
|
+
{
|
|
231
|
+
"sessionId": "...",
|
|
232
|
+
"chatId": "...",
|
|
233
|
+
"bots": [
|
|
234
|
+
{ "name": "Claude", "openId": "ou_xxx", "isSelf": true },
|
|
235
|
+
{ "name": "Aiden", "openId": "ou_yyy", "isSelf": false }
|
|
236
|
+
],
|
|
237
|
+
"total": 2
|
|
238
|
+
}
|
|
239
|
+
\`\`\`
|
|
240
|
+
|
|
241
|
+
## 配合 botmux send 使用
|
|
242
|
+
|
|
243
|
+
\`\`\`bash
|
|
244
|
+
# 查到 Aiden 的 open_id 后
|
|
245
|
+
botmux send --mention "ou_yyy:Aiden" "请 @Aiden 帮忙处理"
|
|
246
|
+
\`\`\`
|
|
247
|
+
`;
|
|
248
|
+
export const BUILTIN_SKILLS = [
|
|
249
|
+
{ name: 'botmux-schedule', content: SCHEDULE_SKILL },
|
|
250
|
+
{ name: 'botmux-thread-messages', content: THREAD_MESSAGES_SKILL },
|
|
251
|
+
{ name: 'botmux-send', content: SEND_SKILL },
|
|
252
|
+
{ name: 'botmux-bots', content: BOTS_SKILL },
|
|
253
|
+
];
|
|
254
|
+
//# sourceMappingURL=definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EtB,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0C7B,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFlB,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkClB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE;IACpD,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,qBAAqB,EAAE;IAClE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE;CAC7C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install (or refresh) the built-in skill library into the given CLI's skills
|
|
3
|
+
* directory. Idempotent — only writes when content differs.
|
|
4
|
+
*
|
|
5
|
+
* Each skill becomes {skillsDir}/<name>/SKILL.md. Sub-directory layout
|
|
6
|
+
* matches Claude Code / Gemini / OpenCode convention.
|
|
7
|
+
*/
|
|
8
|
+
export declare function ensureSkills(cliId: string, skillsDir: string | undefined): void;
|
|
9
|
+
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAoB/E"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { writeFileSync, mkdirSync, existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
import { BUILTIN_SKILLS } from './definitions.js';
|
|
6
|
+
function expandHome(p) {
|
|
7
|
+
return p.startsWith('~') ? join(homedir(), p.slice(1)) : p;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Install (or refresh) the built-in skill library into the given CLI's skills
|
|
11
|
+
* directory. Idempotent — only writes when content differs.
|
|
12
|
+
*
|
|
13
|
+
* Each skill becomes {skillsDir}/<name>/SKILL.md. Sub-directory layout
|
|
14
|
+
* matches Claude Code / Gemini / OpenCode convention.
|
|
15
|
+
*/
|
|
16
|
+
export function ensureSkills(cliId, skillsDir) {
|
|
17
|
+
if (!skillsDir)
|
|
18
|
+
return;
|
|
19
|
+
const dir = expandHome(skillsDir);
|
|
20
|
+
try {
|
|
21
|
+
mkdirSync(dir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
catch { /* ignore */ }
|
|
24
|
+
for (const skill of BUILTIN_SKILLS) {
|
|
25
|
+
const skillDir = join(dir, skill.name);
|
|
26
|
+
const skillFile = join(skillDir, 'SKILL.md');
|
|
27
|
+
try {
|
|
28
|
+
if (existsSync(skillFile)) {
|
|
29
|
+
const current = readFileSync(skillFile, 'utf-8');
|
|
30
|
+
if (current === skill.content)
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
mkdirSync(skillDir, { recursive: true });
|
|
34
|
+
writeFileSync(skillFile, skill.content, 'utf-8');
|
|
35
|
+
logger.info(`[skills] Installed ${skill.name} for ${cliId} → ${skillFile}`);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
logger.warn(`[skills] Failed to install ${skill.name} for ${cliId}: ${err.message}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,SAA6B;IACvE,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC;QAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAEnE,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACjD,IAAI,OAAO,KAAK,KAAK,CAAC,OAAO;oBAAE,SAAS;YAC1C,CAAC;YACD,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,IAAI,QAAQ,KAAK,MAAM,SAAS,EAAE,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,8BAA8B,KAAK,CAAC,IAAI,QAAQ,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,6 +12,17 @@ export interface Session {
|
|
|
12
12
|
webPort?: number;
|
|
13
13
|
larkAppId?: string;
|
|
14
14
|
ownerOpenId?: string;
|
|
15
|
+
/** Persisted streaming-card state — allows the existing card to be PATCHed
|
|
16
|
+
* (rather than a fresh POST) after daemon restart. */
|
|
17
|
+
streamCardId?: string;
|
|
18
|
+
streamCardNonce?: string;
|
|
19
|
+
/** Legacy field kept for migrating sessions persisted before displayMode was added. */
|
|
20
|
+
streamExpanded?: boolean;
|
|
21
|
+
/** Card body display mode — 'hidden' | 'text' | 'screenshot'. */
|
|
22
|
+
displayMode?: DisplayMode;
|
|
23
|
+
/** Latest uploaded screenshot image_key, persisted so card can re-render after restart. */
|
|
24
|
+
currentImageKey?: string;
|
|
25
|
+
currentTurnTitle?: string;
|
|
15
26
|
/** Persisted adopt metadata — allows adopt sessions to survive daemon restarts. */
|
|
16
27
|
adoptedFrom?: {
|
|
17
28
|
tmuxTarget: string;
|
|
@@ -44,18 +55,57 @@ export interface LarkMessage {
|
|
|
44
55
|
attachments?: LarkAttachment[];
|
|
45
56
|
mentions?: LarkMention[];
|
|
46
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Structured schedule form, computed once at creation time from the raw
|
|
60
|
+
* schedule string. Parsed form is authoritative for runtime computation;
|
|
61
|
+
* the raw string is kept only for display/reconfigure.
|
|
62
|
+
*/
|
|
63
|
+
export interface ParsedSchedule {
|
|
64
|
+
kind: 'once' | 'interval' | 'cron';
|
|
65
|
+
/** For 'once': ISO timestamp of run time */
|
|
66
|
+
runAt?: string;
|
|
67
|
+
/** For 'interval': recurrence minutes */
|
|
68
|
+
minutes?: number;
|
|
69
|
+
/** For 'cron': cron expression (5 fields, minute/hour/dom/month/dow) */
|
|
70
|
+
expr?: string;
|
|
71
|
+
/** Human-friendly display text */
|
|
72
|
+
display: string;
|
|
73
|
+
}
|
|
47
74
|
export interface ScheduledTask {
|
|
48
75
|
id: string;
|
|
49
76
|
name: string;
|
|
50
|
-
|
|
77
|
+
/** Raw user input (e.g. "每日17:50" or "30m" or "0 9 * * *") */
|
|
51
78
|
schedule: string;
|
|
79
|
+
/** Structured form — authoritative for runtime */
|
|
80
|
+
parsed: ParsedSchedule;
|
|
52
81
|
prompt: string;
|
|
53
82
|
workingDir: string;
|
|
54
83
|
chatId: string;
|
|
84
|
+
/** Root message id of the topic where the task was created. When set,
|
|
85
|
+
* execution replies into this thread instead of creating a new one. */
|
|
86
|
+
rootMessageId?: string;
|
|
87
|
+
chatType?: 'group' | 'p2p' | 'topic_group';
|
|
88
|
+
larkAppId?: string;
|
|
55
89
|
enabled: boolean;
|
|
56
90
|
createdAt: string;
|
|
57
91
|
lastRunAt?: string;
|
|
92
|
+
nextRunAt?: string;
|
|
93
|
+
lastStatus?: 'ok' | 'error';
|
|
94
|
+
lastError?: string;
|
|
95
|
+
lastDeliveryError?: string;
|
|
96
|
+
/** Repeat counter — times=null means forever; times>0 auto-removes after N runs */
|
|
97
|
+
repeat?: {
|
|
98
|
+
times: number | null;
|
|
99
|
+
completed: number;
|
|
100
|
+
};
|
|
101
|
+
/** Delivery target: 'origin' (original thread, default), 'local' (log only, no delivery) */
|
|
102
|
+
deliver?: 'origin' | 'local';
|
|
103
|
+
type?: 'cron' | 'interval' | 'once';
|
|
58
104
|
}
|
|
105
|
+
/** Display modes for the streaming card output. */
|
|
106
|
+
export type DisplayMode = 'hidden' | 'text' | 'screenshot';
|
|
107
|
+
/** Quick-action keys sent from card buttons to the worker's PTY/tmux backend. */
|
|
108
|
+
export type TermActionKey = 'esc' | 'ctrlc' | 'tab' | 'enter' | 'space' | 'up' | 'down' | 'left' | 'right' | 'half_page_up' | 'half_page_down';
|
|
59
109
|
/** Messages sent from Daemon to Worker */
|
|
60
110
|
export type DaemonToWorker = {
|
|
61
111
|
type: 'init';
|
|
@@ -83,6 +133,16 @@ export type DaemonToWorker = {
|
|
|
83
133
|
type: 'close';
|
|
84
134
|
} | {
|
|
85
135
|
type: 'restart';
|
|
136
|
+
} | {
|
|
137
|
+
type: 'tui_keys';
|
|
138
|
+
keys: string[];
|
|
139
|
+
isFinal: boolean;
|
|
140
|
+
} | {
|
|
141
|
+
type: 'set_display_mode';
|
|
142
|
+
mode: DisplayMode;
|
|
143
|
+
} | {
|
|
144
|
+
type: 'term_action';
|
|
145
|
+
key: TermActionKey;
|
|
86
146
|
};
|
|
87
147
|
/** Messages sent from Worker to Daemon */
|
|
88
148
|
export type WorkerToDaemon = {
|
|
@@ -98,14 +158,27 @@ export type WorkerToDaemon = {
|
|
|
98
158
|
} | {
|
|
99
159
|
type: 'screen_update';
|
|
100
160
|
content: string;
|
|
101
|
-
status: 'working' | 'idle';
|
|
161
|
+
status: 'working' | 'idle' | 'analyzing';
|
|
102
162
|
} | {
|
|
103
163
|
type: 'error';
|
|
104
164
|
message: string;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
165
|
+
} | {
|
|
166
|
+
type: 'tui_prompt';
|
|
167
|
+
description: string;
|
|
168
|
+
options: Array<{
|
|
169
|
+
label?: string;
|
|
170
|
+
text: string;
|
|
171
|
+
selected: boolean;
|
|
172
|
+
type?: string;
|
|
173
|
+
keys?: string[];
|
|
174
|
+
}>;
|
|
175
|
+
multiSelect?: boolean;
|
|
176
|
+
} | {
|
|
177
|
+
type: 'tui_prompt_resolved';
|
|
178
|
+
selectedText?: string;
|
|
179
|
+
} | {
|
|
180
|
+
type: 'screenshot_uploaded';
|
|
181
|
+
imageKey: string;
|
|
182
|
+
status: 'working' | 'idle' | 'analyzing';
|
|
110
183
|
};
|
|
111
184
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,WAAW,CAAC,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lark-upload.d.ts","sourceRoot":"","sources":["../../src/utils/lark-upload.ts"],"names":[],"mappings":"AAkBA,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQnG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal Lark image uploader callable from worker process.
|
|
3
|
+
* Worker doesn't load bot-registry — it has LARK_APP_ID/LARK_APP_SECRET in env
|
|
4
|
+
* (see worker-pool.ts forkWorker).
|
|
5
|
+
*/
|
|
6
|
+
import { Client, LoggerLevel } from '@larksuiteoapi/node-sdk';
|
|
7
|
+
let cached = null;
|
|
8
|
+
function getClient(appId, secret) {
|
|
9
|
+
if (cached && cached.appId === appId)
|
|
10
|
+
return cached.client;
|
|
11
|
+
cached = {
|
|
12
|
+
appId,
|
|
13
|
+
client: new Client({ appId, appSecret: secret, loggerLevel: LoggerLevel.error }),
|
|
14
|
+
};
|
|
15
|
+
return cached.client;
|
|
16
|
+
}
|
|
17
|
+
export async function uploadImageBuffer(appId, secret, buf) {
|
|
18
|
+
const c = getClient(appId, secret);
|
|
19
|
+
const res = await c.im.v1.image.create({
|
|
20
|
+
data: { image_type: 'message', image: buf },
|
|
21
|
+
});
|
|
22
|
+
const key = res?.image_key;
|
|
23
|
+
if (!key)
|
|
24
|
+
throw new Error(`upload failed: ${JSON.stringify(res)}`);
|
|
25
|
+
return key;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=lark-upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lark-upload.js","sourceRoot":"","sources":["../../src/utils/lark-upload.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE9D,IAAI,MAAM,GAA0C,IAAI,CAAC;AAEzD,SAAS,SAAS,CAAC,KAAa,EAAE,MAAc;IAC9C,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IAC3D,MAAM,GAAG;QACP,KAAK;QACL,MAAM,EAAE,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;KACjF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAa,EAAE,MAAc,EAAE,GAAW;IAChF,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;QACrC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;KAC5C,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,GAAG,EAAE,SAAS,CAAC;IAC3B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnE,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-powered screen analyzer — detects interactive TUI prompts in terminal output
|
|
3
|
+
* by sending snapshots to a lightweight LLM and parsing structured responses.
|
|
4
|
+
*
|
|
5
|
+
* Token-saving protocol:
|
|
6
|
+
* 1. Text diff — skip if snapshot unchanged
|
|
7
|
+
* 2. Cumulative stability — require N consecutive unchanged snapshots
|
|
8
|
+
* 3. AI-driven cooldown — AI returns checkAgainWhen to control re-call timing
|
|
9
|
+
* 4. Prompt-active guard — stop calling AI once a prompt is reported, until resolved
|
|
10
|
+
*/
|
|
11
|
+
export interface ScreenAnalyzerConfig {
|
|
12
|
+
baseUrl: string;
|
|
13
|
+
apiKey: string;
|
|
14
|
+
model: string;
|
|
15
|
+
intervalMs: number;
|
|
16
|
+
stableCount: number;
|
|
17
|
+
snapshotMaxChars: number;
|
|
18
|
+
extraHeaders?: Record<string, string>;
|
|
19
|
+
extraBody?: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
export interface TuiPromptOption {
|
|
22
|
+
label: string;
|
|
23
|
+
text: string;
|
|
24
|
+
selected: boolean;
|
|
25
|
+
type: 'select' | 'toggle' | 'confirm' | 'input';
|
|
26
|
+
index: number;
|
|
27
|
+
}
|
|
28
|
+
export interface ScreenAnalysis {
|
|
29
|
+
needsInteraction: boolean;
|
|
30
|
+
description?: string;
|
|
31
|
+
options?: TuiPromptOption[];
|
|
32
|
+
multiSelect?: boolean;
|
|
33
|
+
toggleKey?: string;
|
|
34
|
+
confirmKey?: string;
|
|
35
|
+
checkAgainWhen: 'content_changed' | 'after_5s' | 'after_10s' | 'not_needed';
|
|
36
|
+
}
|
|
37
|
+
export interface ScreenAnalyzerCallbacks {
|
|
38
|
+
getSnapshot: () => string;
|
|
39
|
+
onAnalyzing: () => void;
|
|
40
|
+
onTuiPrompt: (description: string, options: TuiPromptOption[], multiSelect: boolean) => void;
|
|
41
|
+
onTuiPromptResolved: (selectedText?: string) => void;
|
|
42
|
+
log: (msg: string) => void;
|
|
43
|
+
}
|
|
44
|
+
export declare class ScreenAnalyzer {
|
|
45
|
+
private config;
|
|
46
|
+
private callbacks;
|
|
47
|
+
private timer;
|
|
48
|
+
private lastSnapshot;
|
|
49
|
+
private stableCount;
|
|
50
|
+
private lastAnalyzedSnapshot;
|
|
51
|
+
private waitingForContentChange;
|
|
52
|
+
private timerCooldownUntil;
|
|
53
|
+
private promptActive;
|
|
54
|
+
private _analyzing;
|
|
55
|
+
private disposed;
|
|
56
|
+
constructor(config: ScreenAnalyzerConfig, callbacks: ScreenAnalyzerCallbacks);
|
|
57
|
+
/** Whether an AI call is currently in flight */
|
|
58
|
+
get isAnalyzing(): boolean;
|
|
59
|
+
start(): void;
|
|
60
|
+
dispose(): void;
|
|
61
|
+
/** Called externally when user has made a selection via card click */
|
|
62
|
+
notifySelection(selectedText: string): void;
|
|
63
|
+
private tick;
|
|
64
|
+
private analyze;
|
|
65
|
+
private callAI;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=screen-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-analyzer.d.ts","sourceRoot":"","sources":["../../src/utils/screen-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,iBAAiB,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;CAC7E;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7F,mBAAmB,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B;AA8CD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,KAAK,CAA+C;IAG5D,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,WAAW,CAAK;IAGxB,OAAO,CAAC,oBAAoB,CAAM;IAClC,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,kBAAkB,CAAK;IAG/B,OAAO,CAAC,YAAY,CAAS;IAG7B,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,uBAAuB;IAK5E,gDAAgD;IAChD,IAAI,WAAW,IAAI,OAAO,CAA4B;IAEtD,KAAK,IAAI,IAAI;IAMb,OAAO,IAAI,IAAI;IAQf,sEAAsE;IACtE,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;YAU7B,IAAI;YA0CJ,OAAO;YAqDP,MAAM;CA6DrB"}
|