lark-kiro-bridge 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 lark-kiro-bridge contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.en.md ADDED
@@ -0,0 +1,293 @@
1
+ # lark-kiro-bridge
2
+
3
+ > Bridge **Kiro CLI** to Feishu / Lark โ€” chat code, run commands, and operate Feishu itself.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/lark-kiro-bridge.svg?color=cb3837)](https://www.npmjs.com/package/lark-kiro-bridge)
6
+ [![npm downloads](https://img.shields.io/npm/dm/lark-kiro-bridge.svg)](https://www.npmjs.com/package/lark-kiro-bridge)
7
+ [![license](https://img.shields.io/npm/l/lark-kiro-bridge.svg)](./LICENSE)
8
+ [![node](https://img.shields.io/node/v/lark-kiro-bridge.svg)](https://nodejs.org/)
9
+ [![GitHub stars](https://img.shields.io/github/stars/walterwang0x01/lark-kiro-bridge?style=social)](https://github.com/walterwang0x01/lark-kiro-bridge)
10
+
11
+ [๐Ÿ‡จ๐Ÿ‡ณ ไธญๆ–‡](./README.md) | ๐Ÿ‡บ๐Ÿ‡ธ English
12
+
13
+ ---
14
+
15
+ `@bot` in a group chat or DM the bot directly. Your message goes straight to local `kiro-cli chat`. Replies stream back as **structured cards with native typing cursor**. Each chat keeps an isolated session, and switching directories doesn't lose context.
16
+
17
+ **Why this exists**: cloud AI coding assistants (Cursor / Copilot / Devin) can't touch your local project directories, and have no way to operate Feishu's own APIs. lark-kiro-bridge **=** running local commands inside Feishu **+** orchestrating Feishu APIs from chat โ€” one bot for both.
18
+
19
+ ```
20
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
21
+ โ”‚ ๐Ÿ’ฌ Kiro โ”‚
22
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
23
+ โ”‚ โ˜• 3 tool calls โ–ธ (folded) โ”‚
24
+ โ”‚ โœ… Bash โ€” lark-cli calendar +createโ€ฆโ–พ โ”‚ โ† latest tool stays expanded
25
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
26
+ โ”‚ โ”‚ **Command** lark-cli calendar โ€ฆ โ”‚ โ”‚
27
+ โ”‚ โ”‚ **Output** {"ok": true, ...} โ”‚ โ”‚
28
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
29
+ โ”‚ โ”‚
30
+ โ”‚ Calendar event created โœ… โ”‚
31
+ โ”‚ Title: Test โ”‚
32
+ โ”‚ When: Today 23:00 ~ 00:00 (1h) โ”‚
33
+ โ”‚ โ”‚
34
+ โ”‚ โœ๏ธ Streaming [ โน Stop ] โ”‚
35
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
36
+ ```
37
+
38
+ ## Table of Contents
39
+
40
+ <details>
41
+ <summary>Expand</summary>
42
+
43
+ - [โœจ Features](#-features)
44
+ - [๐Ÿš€ Quick Start](#-quick-start)
45
+ - [๐Ÿ“– Slash Commands](#-slash-commands)
46
+ - [๐Ÿ’ก Use Cases](#-use-cases)
47
+ - [โš™๏ธ Configuration](#๏ธ-configuration)
48
+ - [๐Ÿ“š Documentation](#-documentation)
49
+ - [๐Ÿค Contributing](#-contributing)
50
+ - [๐Ÿ“„ License](#-license)
51
+
52
+ </details>
53
+
54
+ ## โœจ Features
55
+
56
+ - ๐ŸŽด **Structured cards** โ€” Each tool call gets its own collapsible panel; multi-call groups auto-condense; reasoning gets its own panel
57
+ - โšก **Streaming typing cursor** โ€” Native Feishu `streaming_mode` + footer status indicator
58
+ - ๐Ÿ—‚๏ธ **Workspace plan B** โ€” `/cd` doesn't drop context: per-`(chat, cwd)` Kiro session map auto-resumes
59
+ - ๐Ÿ”˜ **Clickable buttons** โ€” `/model` `/help` `/status` `/ws list` `/config` are all interactive cards, zero command memorization
60
+ - ๐Ÿ“ **`/config` in-Feishu form** โ€” Edit access control & preferences inside Feishu, takes effect instantly, anti-lockout validation
61
+ - ๐Ÿš„ **Rapid-fire message merging** โ€” Multiple short messages within 200ms merge into a single Kiro call, no more abort-and-retry
62
+ - ๐ŸŽค **Voice input** โ€” Send a voice message in Feishu โ†’ auto-transcribed (Feishu ASR) โ†’ fed to Kiro. Requires `ffmpeg` and ASR scope.
63
+ - ๐Ÿ›ก๏ธ **Process group kill** โ€” `detached: true` + `process.kill(-pid)` reaches kiro-cli's grandchildren
64
+ - โฑ **Idle watchdog** โ€” Stuck process auto-killed; tunable globally and per-chat
65
+ - ๐Ÿ” **Three-tier access control** โ€” User / chat / admin allowlists. **DMs always bypass the chat allowlist** so you can never lock yourself out.
66
+ - ๐ŸŽ **macOS native daemon** โ€” launchd auto-restart on crash, login auto-start
67
+ - ๐Ÿ“Š **`/doctor` self-diagnosis** โ€” Feed logs back to Kiro to analyze its own failures
68
+
69
+ ## ๐Ÿš€ Quick Start
70
+
71
+ ### Prerequisites
72
+
73
+ - macOS (Linux / Windows daemon on roadmap)
74
+ - Node.js โ‰ฅ 20
75
+ - `kiro-cli` installed and logged in
76
+ - A Feishu / Lark account (personal edition is fine โ€” the QR wizard auto-creates the app)
77
+ - **Optional**: `ffmpeg` for voice input (`brew install ffmpeg` / `apt install ffmpeg`) + Feishu `speech_to_text:speech` scope (free-tier tenants are not supported)
78
+
79
+ ### 30-second setup โšก
80
+
81
+ ```bash
82
+ # 1. Install
83
+ npm i -g lark-kiro-bridge
84
+
85
+ # 2. Run (first launch shows a QR โ€” scan, approve, done)
86
+ lark-kiro-bridge run
87
+ ```
88
+
89
+ > **That's it** โ€” scanning the QR in Feishu auto-creates the app, writes credentials, and grants required permissions.
90
+
91
+ DM the bot "hi" โ€” you should see a streaming card immediately.
92
+
93
+ ### Already have a Feishu app?
94
+
95
+ If you've manually created an app on the Feishu Open Platform and want to reuse the App ID/Secret:
96
+
97
+ ```bash
98
+ lark-kiro-bridge init --manual
99
+ # Interactive prompts for App ID and Secret
100
+ ```
101
+
102
+ Or one-line:
103
+
104
+ ```bash
105
+ lark-kiro-bridge init --app-id cli_xxx --app-secret xxx
106
+ ```
107
+
108
+ > Manual Feishu console setup (subscribe `im.message.receive_v1` + `card.action.trigger`) โ†’ [docs/FAQ.md](./docs/FAQ.md)
109
+
110
+ ### Background daemon (recommended for production)
111
+
112
+ ```bash
113
+ lark-kiro-bridge start # Install launchd plist and start
114
+ lark-kiro-bridge status # Check status
115
+ lark-kiro-bridge restart # Restart
116
+ ```
117
+
118
+ ## ๐Ÿ“– Slash Commands
119
+
120
+ ### Daily commands (everyone)
121
+
122
+ | Command | Aliases | Purpose |
123
+ |---|---|---|
124
+ | `/help` | `/h` `/?` | Help card with action buttons |
125
+ | `/status` | `/s` | Current cwd / session / watchdog |
126
+ | `/model [name]` | `/m` | View / switch / reset model with one click |
127
+ | `/new` | `/reset` | Reset Kiro session for current cwd |
128
+ | `/stop` | `/abort` | Abort the running task |
129
+ | `/pwd` | `/cwd` | Current working directory |
130
+ | `/ws list` | โ€” | List named workspaces with switch buttons |
131
+ | `/timeout [N\|off]` | `/to` | Idle watchdog threshold (minutes) |
132
+ | `/doctor [desc]` | โ€” | Let Kiro inspect logs and diagnose |
133
+
134
+ ### Admin commands
135
+
136
+ | Command | Purpose |
137
+ |---|---|
138
+ | `/config` | View / edit access control & preferences (in-Feishu form, applies instantly) |
139
+ | `/cd <path>` | Switch working directory (gated by `allowedRoots`) |
140
+ | `/ws save <name>` | Save current cwd as a named workspace |
141
+ | `/ws use <name>` | Switch to a named workspace |
142
+ | `/ws remove <name>` | Delete a named workspace |
143
+ | `/reconnect` | Force reconnect Feishu WebSocket |
144
+
145
+ > By default everyone is admin (`access.admins` empty). Tighten before sharing with a team.
146
+
147
+ **Trigger rules**: DMs respond to anything; group chats require `@bot`; `@all` is never answered.
148
+
149
+ ## ๐Ÿ’ก Use Cases
150
+
151
+ ```
152
+ You: Delete today's 23:00 meeting
153
+ ๐Ÿค– Calls lark-cli calendar +agenda โ†’ finds event โ†’ confirms โ†’ +delete
154
+
155
+ You: Summarize last week's meetings and post to the product channel
156
+ ๐Ÿค– lark-cli vc +list โ†’ extracts notes โ†’ lark-cli message +send to channel
157
+
158
+ You: Commit today's changes in the portfolio project
159
+ ๐Ÿค– cd portfolio โ†’ git diff โ†’ splits into atomic commits โ†’ git push
160
+
161
+ You: Find Alice's open_id and send her a meeting invite
162
+ ๐Ÿค– lark-cli contact +find Alice โ†’ gets open_id โ†’ lark-cli calendar +create
163
+
164
+ You: [drops a design mockup image] evaluate technical feasibility
165
+ ๐Ÿค– Auto-downloads image โ†’ @file feeds to Kiro โ†’ vision analysis + plan
166
+ ```
167
+
168
+ ## โš™๏ธ Configuration
169
+
170
+ ### Minimum (auto-generated)
171
+
172
+ `lark-kiro-bridge init` writes `~/.lark-kiro-bridge/config.json`:
173
+
174
+ ```json
175
+ {
176
+ "lark": {
177
+ "appId": "cli_xxxxxxxxxxx",
178
+ "appSecret": "xxxxxxxxxxxxxxxxxxxx"
179
+ }
180
+ }
181
+ ```
182
+
183
+ All other fields have sensible defaults.
184
+
185
+ ### Full reference
186
+
187
+ <details>
188
+ <summary>Click to expand all configurable fields</summary>
189
+
190
+ ```json
191
+ {
192
+ "lark": {
193
+ "appId": "cli_xxxxxxxxxxx",
194
+ "appSecret": "xxxxxxxxxxxxxxxxxxxx"
195
+ },
196
+ "kiro": {
197
+ "binPath": "kiro-cli",
198
+ "trustedTools": [
199
+ "fs_read", "fs_write", "grep", "glob", "code",
200
+ "execute_bash", "web_search", "web_fetch"
201
+ ],
202
+ "timeoutMs": 600000,
203
+ "idleTimeoutMinutes": 5,
204
+ "model": "claude-sonnet-4.6"
205
+ },
206
+ "workspace": {
207
+ "defaultCwd": "/Users/you/Projects",
208
+ "allowedRoots": ["/Users/you/Projects"]
209
+ },
210
+ "access": {
211
+ "allowedUsers": [],
212
+ "allowedChats": [],
213
+ "admins": []
214
+ },
215
+ "preferences": {
216
+ "requireMentionInGroup": true,
217
+ "cardUpdateIntervalMs": 800,
218
+ "logRetentionDays": 7
219
+ }
220
+ }
221
+ ```
222
+
223
+ **`trustedTools`** โ€” Tools Kiro can invoke without asking:
224
+ - `fs_read fs_write grep glob code` โ€” File and code operations
225
+ - `execute_bash` โ€” Run shell commands (lark-cli / git / etc). **Safe for personal use; evaluate for team scenarios**
226
+ - `web_search web_fetch` โ€” Internet search
227
+
228
+ **`access`** โ€” Three-tier allowlists, see [SECURITY.md](./SECURITY.md):
229
+ - Empty `allowedUsers` = everyone allowed
230
+ - Empty `allowedChats` = every chat allowed
231
+ - Empty `admins` = everyone is admin
232
+
233
+ **`workspace.allowedRoots`** โ€” Whitelist of directories `/cd` can reach. Limits blast radius.
234
+
235
+ </details>
236
+
237
+ ### CLI
238
+
239
+ ```bash
240
+ lark-kiro-bridge init # Scan QR to create Feishu app (recommended)
241
+ lark-kiro-bridge init --manual # Manually enter existing App ID/Secret
242
+ lark-kiro-bridge init --app-id <id> --app-secret <s> # One-shot (CI-friendly)
243
+ lark-kiro-bridge run # Foreground (auto-launches QR if no config)
244
+ lark-kiro-bridge config-show # Show current config (redacted)
245
+
246
+ lark-kiro-bridge start # Install and start daemon
247
+ lark-kiro-bridge stop # Stop daemon
248
+ lark-kiro-bridge restart # Restart
249
+ lark-kiro-bridge status # Daemon status
250
+ lark-kiro-bridge unregister # Uninstall
251
+
252
+ lark-kiro-bridge ps # List all bridge processes on this host
253
+ lark-kiro-bridge kill <id> [--force] # Kill a process
254
+ ```
255
+
256
+ ## ๐Ÿ“š Documentation
257
+
258
+ | Doc | Content |
259
+ |---|---|
260
+ | [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md) | Data flow, card rendering, workspace plan B, design trade-offs |
261
+ | [docs/FAQ.md](./docs/FAQ.md) | Common questions + troubleshooting |
262
+ | [SECURITY.md](./SECURITY.md) | Security policy, vulnerability disclosure, hardening |
263
+ | [CHANGELOG.md](./CHANGELOG.md) | Release notes |
264
+
265
+ > Most docs are in Chinese; English versions are on the roadmap. PRs welcome.
266
+
267
+ ## ๐Ÿค Contributing
268
+
269
+ PRs and issues welcome. Dev flow:
270
+
271
+ ```bash
272
+ git clone https://github.com/walterwang0x01/lark-kiro-bridge.git
273
+ cd lark-kiro-bridge
274
+ pnpm install
275
+ pnpm typecheck && pnpm lint && pnpm test # required before commit
276
+ pnpm build
277
+ node bin/lark-kiro-bridge.mjs run # local run (stop daemon first)
278
+ ```
279
+
280
+ Conventions: TypeScript strict / Biome lint / vitest tests / conventional commits.
281
+
282
+ ## Roadmap
283
+
284
+ - **v0.2** โœ… Current (structured cards + button callbacks + Slack-style tool panels + QR app binding + voice input via ASR)
285
+ - **v0.3** โœ… In-Feishu `/config` form + three-tier access control (DM bypass) + rapid-fire message merging
286
+ - **v0.4** Linux systemd / Windows Task Scheduler daemon
287
+ - **v0.4** `/ps` `/exit` to manage host processes from Feishu
288
+ - **v0.5** Group-name โ†’ workspace heuristic (joining "agenzo" group defaults cwd to agenzo dir)
289
+ - **v1.0** Centralized server deployment / multi-user isolation / web admin panel
290
+
291
+ ## ๐Ÿ“„ License
292
+
293
+ [MIT](./LICENSE) ยฉ 2026 walterwang0x01
package/README.md ADDED
@@ -0,0 +1,291 @@
1
+ # lark-kiro-bridge
2
+
3
+ > ๆŠŠ **Kiro CLI** ๆŽฅๅˆฐ้ฃžไนฆ / Lark โ€” ๅœจ้ฃžไนฆ้‡Œ่Šไปฃ็ ใ€่ท‘ๅ‘ฝไปคใ€ๆ“ไฝœ้ฃžไนฆ่‡ชๅทฑใ€‚
4
+
5
+ [![npm version](https://img.shields.io/npm/v/lark-kiro-bridge.svg?color=cb3837)](https://www.npmjs.com/package/lark-kiro-bridge)
6
+ [![npm downloads](https://img.shields.io/npm/dm/lark-kiro-bridge.svg)](https://www.npmjs.com/package/lark-kiro-bridge)
7
+ [![license](https://img.shields.io/npm/l/lark-kiro-bridge.svg)](./LICENSE)
8
+ [![node](https://img.shields.io/node/v/lark-kiro-bridge.svg)](https://nodejs.org/)
9
+ [![GitHub stars](https://img.shields.io/github/stars/walterwang0x01/lark-kiro-bridge?style=social)](https://github.com/walterwang0x01/lark-kiro-bridge)
10
+
11
+ ๐Ÿ‡จ๐Ÿ‡ณ ไธญๆ–‡ | [๐Ÿ‡บ๐Ÿ‡ธ English](./README.en.md)
12
+
13
+ ---
14
+
15
+ ็พค้‡Œ `@bot` ๆˆ–็ง่Šๆœบๅ™จไบบ๏ผŒๆถˆๆฏ็›ด่พพๆœฌๅœฐ `kiro-cli chat`๏ผŒๅ›žๅคไปฅ**็ป“ๆž„ๅŒ–ๅก็‰‡ + ๆตๅผๆ‰“ๅญ—ๅ…‰ๆ ‡**ๅฎžๆ—ถๅˆทๆ–ฐใ€‚ๆฏไธช chat ็‹ฌ็ซ‹ session๏ผŒๅˆ‡็›ฎๅฝ•ไธไธขไธŠไธ‹ๆ–‡ใ€‚
16
+
17
+ **ๆ ธๅฟƒไปทๅ€ผ**๏ผšไบ‘็ซฏ AI ็ผ–็จ‹ๅŠฉๆ‰‹๏ผˆCursor / Copilot / Devin๏ผ‰็ขฐไธๅˆฐไฝ ๆœฌๆœบ็š„้กน็›ฎ็›ฎๅฝ•๏ผŒไนŸๆฒกๆœ‰้ฃžไนฆ API ่ฐƒๅบฆ่ƒฝๅŠ›ใ€‚lark-kiro-bridge **=** ๅœจ้ฃžไนฆ้‡Œ่ท‘ๆœฌๅœฐๅ‘ฝไปค **+** ๆ“ไฝœ้ฃžไนฆ่‡ชๅทฑ๏ผŒไธ€ไธชๆœบๅ™จไบบ่งฃๅ†ณไธคไปถไบ‹ใ€‚
18
+
19
+ ```
20
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
21
+ โ”‚ ๐Ÿ’ฌ Kiro โ”‚
22
+ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
23
+ โ”‚ โ˜• 3 ไธชๅทฅๅ…ท่ฐƒ็”จ โ–ธ (folded) โ”‚
24
+ โ”‚ โœ… Bash โ€” lark-cli calendar +createโ€ฆโ–พ โ”‚ โ† ๆœ€ๆ–ฐๅทฅๅ…ทๅฎžๆ—ถๅฑ•ๅผ€
25
+ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
26
+ โ”‚ โ”‚ **Command** lark-cli calendar โ€ฆ โ”‚ โ”‚
27
+ โ”‚ โ”‚ **Output** {"ok": true, ...} โ”‚ โ”‚
28
+ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
29
+ โ”‚ โ”‚
30
+ โ”‚ ๆ—ฅ็จ‹ๅทฒๅˆ›ๅปบๆˆๅŠŸ โœ… โ”‚
31
+ โ”‚ ไธป้ข˜๏ผšๆต‹่ฏ• โ”‚
32
+ โ”‚ ๆ—ถ้—ด๏ผšไปŠๅคฉ 23:00 ~ ๆ˜Žๅคฉ 00:00 โ”‚
33
+ โ”‚ โ”‚
34
+ โ”‚ โœ๏ธ ๆญฃๅœจ่พ“ๅ‡บ [ โน ็ปˆๆญข ] โ”‚
35
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
36
+ ```
37
+
38
+ ## ็›ฎๅฝ•
39
+
40
+ <details>
41
+ <summary>ๅฑ•ๅผ€</summary>
42
+
43
+ - [โœจ ็‰นๆ€ง](#-็‰นๆ€ง)
44
+ - [๐Ÿš€ ๅฟซ้€ŸไธŠๆ‰‹](#-ๅฟซ้€ŸไธŠๆ‰‹)
45
+ - [๐Ÿ“– ้ฃžไนฆๅ†…็š„ๅ‘ฝไปค](#-้ฃžไนฆๅ†…็š„ๅ‘ฝไปค)
46
+ - [๐Ÿ’ก ไฝฟ็”จๅœบๆ™ฏ](#-ไฝฟ็”จๅœบๆ™ฏ)
47
+ - [โš™๏ธ ้…็ฝฎ](#๏ธ-้…็ฝฎ)
48
+ - [๐Ÿ“š ่ฟ›้˜ถๆ–‡ๆกฃ](#-่ฟ›้˜ถๆ–‡ๆกฃ)
49
+ - [๐Ÿค ๅ‚ไธŽ่ดก็Œฎ](#-ๅ‚ไธŽ่ดก็Œฎ)
50
+ - [๐Ÿ“„ License](#-license)
51
+
52
+ </details>
53
+
54
+ ## โœจ ็‰นๆ€ง
55
+
56
+ - ๐ŸŽด **็ป“ๆž„ๅŒ–ๅก็‰‡** โ€” ๆฏๆฌกๅทฅๅ…ท่ฐƒ็”จไธ€ไธช็‹ฌ็ซ‹ๅฏๆŠ˜ๅ ้ขๆฟ๏ผŒๅคš่ฐƒ็”จ่‡ชๅŠจ่šๅˆ๏ผŒๆ€่€ƒ่ฟ‡็จ‹็‹ฌ็ซ‹ๅฑ•็คบ
57
+ - โšก **ๆตๅผๆ‰“ๅญ—ๅ…‰ๆ ‡** โ€” ้ฃžไนฆๅŽŸ็”Ÿ `streaming_mode`๏ผŒ้…ๅˆ footer ๅฎžๆ—ถ็Šถๆ€ๆŒ‡็คบ
58
+ - ๐Ÿ—‚๏ธ **ๅทฅไฝœๅŒบๆ–นๆกˆ B** โ€” ๅˆ‡็›ฎๅฝ•ไธไธขไธŠไธ‹ๆ–‡๏ผšๆฏไธช `(chat, cwd)` ็‹ฌ็ซ‹ Kiro session๏ผŒ่‡ชๅŠจ็ปญ่Š
59
+ - ๐Ÿ”˜ **ๆŒ‰้’ฎๅฏ็‚น** โ€” `/model` `/help` `/status` `/ws list` `/config` ๅ…จ้ƒจๅฏ็‚นๅ‡ปๆ“ไฝœ๏ผŒ0 ๅ‘ฝไปค่ฎฐๅฟ†
60
+ - ๐Ÿ“ **`/config` ้ฃžไนฆๅ†…่กจๅ•** โ€” ๅœจ้ฃžไนฆ้‡Œๆ”น่ฎฟ้—ฎๆŽงๅˆถๅ’Œๅๅฅฝ๏ผŒๅณๆ—ถ็”Ÿๆ•ˆ๏ผŒ้˜ฒ่‡ช้”ๆ ก้ชŒ
61
+ - ๐Ÿš„ **rapid-fire ๆถˆๆฏๅˆๅนถ** โ€” 200ms ๅ†…่ฟžๅ‘็š„ๅคšๆก็Ÿญๆถˆๆฏ่‡ชๅŠจๅˆๅนถไธบไธ€ๆฌก Kiro ่ฐƒ็”จ๏ผŒไธๅ†่ขซๅ‰ไธ€ๆก abort
62
+ - ๐ŸŽค **่ฏญ้Ÿณ่พ“ๅ…ฅ** โ€” ้ฃžไนฆๅ‘่ฏญ้Ÿณๆถˆๆฏ โ†’ ่‡ชๅŠจ่ฝฌๅ†™๏ผˆ้ฃžไนฆ ASR๏ผ‰โ†’ ๅ–‚็ป™ Kiro๏ผŒ้œ€ `ffmpeg` ๅ’Œ ASR ๆƒ้™
63
+ - ๐Ÿ›ก๏ธ **่ฟ›็จ‹็ป„ kill** โ€” `detached: true` + `process.kill(-pid)` ๆ€ๆމ kiro-cli ๅ…จ้ƒจๅญๅญ™
64
+ - โฑ **Idle Watchdog** โ€” ๅกไฝ่‡ชๅŠจ killTree๏ผŒๅฏๅ…จๅฑ€ / per-chat ้…็ฝฎ
65
+ - ๐Ÿ” **ไธ‰ๅฑ‚่ฎฟ้—ฎๆŽงๅˆถ** โ€” ็”จๆˆท / ็พค / ็ฎก็†ๅ‘˜็™ฝๅๅ•๏ผŒ**DM ๆฐธ่ฟœ่ฑๅ…็พค็™ฝๅๅ•**๏ผŒไธไผšๆŠŠ่‡ชๅทฑ้”ๅค–้ข
66
+ - ๐ŸŽ **macOS ๅŽŸ็”ŸๅฎˆๆŠค** โ€” launchd ๅดฉๆบƒ่‡ชๅŠจๆ‹‰่ตท๏ผŒๅผ€ๆœบ่‡ชๅฏ
67
+ - ๐Ÿ“Š **`/doctor` ่‡ช่ฏŠๆ–ญ** โ€” ่ฎฉ Kiro ็œ‹ๆ—ฅๅฟ—่‡ชๅทฑๅˆ†ๆžๆ•…้šœ
68
+
69
+ ## ๐Ÿš€ ๅฟซ้€ŸไธŠๆ‰‹
70
+
71
+ ### ๅ‰็ฝฎๆกไปถ
72
+
73
+ - macOS๏ผˆLinux / Windows daemon ๅœจ่ทฏ็บฟๅ›พ๏ผ‰
74
+ - Node.js โ‰ฅ 20
75
+ - `kiro-cli` ๅทฒๅฎ‰่ฃ…ๅนถ็™ปๅฝ•
76
+ - ้ฃžไนฆ่ดฆๅท๏ผˆไธชไบบ็‰ˆๅณๅฏ๏ผŒๆ‰ซ็ ่‡ชๅŠจๅˆ›ๅปบๅบ”็”จ๏ผ‰
77
+ - **ๅฏ้€‰**๏ผš`ffmpeg`๏ผˆ็”จไบŽ่ฏญ้Ÿณ่พ“ๅ…ฅ่ฝฌๅ†™๏ผŒ`brew install ffmpeg` / `apt install ffmpeg`๏ผ‰+ ้ฃžไนฆ ASR scope `speech_to_text:speech`๏ผˆ้ฃžไนฆๅ…่ดน็‰ˆ็งŸๆˆทไธๆ”ฏๆŒ๏ผ‰
78
+
79
+ ### 30 ็ง’ไธŠ็บฟ โšก
80
+
81
+ ```bash
82
+ # 1. ๅฎ‰่ฃ…
83
+ npm i -g lark-kiro-bridge
84
+
85
+ # 2. ๅฏๅŠจ๏ผˆ้ฆ–ๆฌกไผš่‡ชๅŠจๅผนไบŒ็ปด็  โ†’ ๆ‰ซ็ ๅŒๆ„ โ†’ ๅฎŒๆˆ๏ผ‰
86
+ lark-kiro-bridge run
87
+ ```
88
+
89
+ > **ๅฐฑ่ฟ™ไนˆ็ฎ€ๅ•**โ€”โ€”้ฃžไนฆ App ๆ‰ซ็ ๅŒๆ„ๅŽ๏ผŒbridge ่‡ชๅŠจๅˆ›ๅปบๅบ”็”จใ€้…ๅฅฝๅ‡ญ่ฏใ€ๅผ€้€šๅฟ…่ฆๆƒ้™ใ€‚
90
+
91
+ ๅฏๅŠจๅŽๅœจ้ฃžไนฆ็ง่Šๆœบๅ™จไบบๅ‘ใ€Œไฝ ๅฅฝใ€๏ผŒๅบ”่ฏฅ็ซ‹ๅณ็œ‹ๅˆฐๆตๅผๅˆทๆ–ฐ็š„ๅก็‰‡ใ€‚
92
+
93
+ ### ๆƒณ็”จๅทฒๆœ‰็š„้ฃžไนฆๅบ”็”จ๏ผŸ
94
+
95
+ ๅฆ‚ๆžœไฝ ๅทฒ็ปๅœจ้ฃžไนฆๅผ€ๆ”พๅนณๅฐๆ‰‹ๅŠจๅปบ่ฟ‡ๅบ”็”จ๏ผŒๆƒณๅค็”จๅทฒๆœ‰็š„ App ID/Secret๏ผš
96
+
97
+ ```bash
98
+ lark-kiro-bridge init --manual
99
+ # ไบคไบ’ๅผ่พ“ๅ…ฅ App ID ๅ’Œ App Secret
100
+ ```
101
+
102
+ ๆˆ–ไธ€่กŒๆžๅฎš๏ผš
103
+
104
+ ```bash
105
+ lark-kiro-bridge init --app-id cli_xxx --app-secret xxx
106
+ ```
107
+
108
+ > ้ฃžไนฆๅŽๅฐๆ‰‹ๅŠจ้…็ฝฎ๏ผˆ่ฎข้˜…ไบ‹ไปถ `im.message.receive_v1` + `card.action.trigger`๏ผ‰โ†’ [docs/FAQ.md](./docs/FAQ.md)
109
+
110
+ ### ๅŽๅฐๅฎˆๆŠค๏ผˆๆŽจ่็”Ÿไบง๏ผ‰
111
+
112
+ ```bash
113
+ lark-kiro-bridge start # ่ฃ… launchd plist ๅนถๅฏๅŠจ
114
+ lark-kiro-bridge status # ็œ‹็Šถๆ€
115
+ lark-kiro-bridge restart # ้‡ๅฏ
116
+ ```
117
+
118
+ ## ๐Ÿ“– ้ฃžไนฆๅ†…็š„ๅ‘ฝไปค
119
+
120
+ ### ๆ—ฅๅธธๅ‘ฝไปค๏ผˆๆ‰€ๆœ‰ไบบ๏ผ‰
121
+
122
+ | ๅ‘ฝไปค | ๅˆซๅ | ไฝœ็”จ |
123
+ |---|---|---|
124
+ | `/help` | `/h` `/?` | ๅธฎๅŠฉๅก็‰‡๏ผˆๅฏ็‚นๆŒ‰้’ฎ๏ผ‰ |
125
+ | `/status` | `/s` | ๅฝ“ๅ‰ cwd / session / watchdog |
126
+ | `/model [name]` | `/m` | ๆŸฅ็œ‹ / ๅˆ‡ๆขๆจกๅž‹๏ผŒๆŒ‰้’ฎไธ€้”ฎๅˆ‡ |
127
+ | `/new` | `/reset` | ้‡็ฝฎๅฝ“ๅ‰ cwd ไธ‹็š„ Kiro ไผš่ฏ |
128
+ | `/stop` | `/abort` | ๅœๆญขๆญฃๅœจ่ท‘็š„ไปปๅŠก |
129
+ | `/pwd` | `/cwd` | ๅฝ“ๅ‰ๅทฅไฝœ็›ฎๅฝ• |
130
+ | `/ws list` | โ€” | ๅˆ—ๅ‡บๅ‘ฝๅๅทฅไฝœๅŒบ๏ผŒๆŒ‰้’ฎไธ€้”ฎๅˆ‡ |
131
+ | `/timeout [N\|off]` | `/to` | idle watchdog ้˜ˆๅ€ผ๏ผˆๅˆ†้’Ÿ๏ผ‰ |
132
+ | `/doctor [ๆ่ฟฐ]` | โ€” | ่ฎฉ Kiro ็œ‹ๆ—ฅๅฟ—่‡ช่ฏŠๆ–ญ |
133
+
134
+ ### ็ฎก็†ๅ‘˜ๅ‘ฝไปค
135
+
136
+ | ๅ‘ฝไปค | ไฝœ็”จ |
137
+ |---|---|
138
+ | `/config` | ๆŸฅ็œ‹ / ็ผ–่พ‘่ฎฟ้—ฎๆŽงๅˆถ + ๅๅฅฝ๏ผˆ้ฃžไนฆๅ†…่กจๅ•๏ผŒๅณๆ—ถ็”Ÿๆ•ˆ๏ผ‰ |
139
+ | `/cd <path>` | ๅˆ‡ๆขๅทฅไฝœ็›ฎๅฝ•๏ผˆๅ— `allowedRoots` ้™ๅˆถ๏ผ‰ |
140
+ | `/ws save <name>` | ๆŠŠๅฝ“ๅ‰ cwd ๅญ˜ไธบๅ‘ฝๅๅทฅไฝœๅŒบ |
141
+ | `/ws use <name>` | ๅˆ‡ๅˆฐๅ‘ฝๅๅทฅไฝœๅŒบ |
142
+ | `/ws remove <name>` | ๅˆ ้™คๅ‘ฝๅๅทฅไฝœๅŒบ |
143
+ | `/reconnect` | ๅผบๅˆถ้‡่ฟž้ฃžไนฆ WebSocket |
144
+
145
+ > ้ป˜่ฎคๆ‰€ๆœ‰ไบบ้ƒฝๆ˜ฏ็ฎก็†ๅ‘˜๏ผˆ`access.admins` ไธบ็ฉบ๏ผ‰ใ€‚ๅ›ข้˜ŸๆŽจๅนฟๅ‰่ฏทๆ”ถ็ดงใ€‚
146
+
147
+ **ๅ“ๅบ”่ง„ๅˆ™**๏ผš็ง่Šๅ…จๆ”ถ๏ผ›็พค้‡Œๅฟ…้กป `@bot`๏ผ›`@all` ๆฐธไธๅ“ๅบ”ใ€‚
148
+
149
+ ## ๐Ÿ’ก ไฝฟ็”จๅœบๆ™ฏ
150
+
151
+ ```
152
+ ไฝ : ๅˆ ๆމไปŠๅคฉ 23 ็‚น็š„ไผš่ฎฎ
153
+ ๐Ÿค– ่ฐƒ lark-cli calendar +agenda ๆ‰พๅˆฐๆ—ฅ็จ‹ โ†’ ไบŒๆฌก็กฎ่ฎค โ†’ +delete
154
+
155
+ ไฝ : ๆ•ด็†ไธ€ไธ‹ไธŠๅ‘จ็š„ไผš่ฎฎ็บช่ฆๅ‘ๅˆฐไบงๅ“็พค
156
+ ๐Ÿค– lark-cli vc +list โ†’ ๆๅ–็บช่ฆ โ†’ ่ฐƒ lark-cli message +send ๅˆฐๆŒ‡ๅฎš็พค
157
+
158
+ ไฝ : ๆŠŠ portfolio ้กน็›ฎไปŠๅคฉ็š„ๆ”นๅŠจ commit ไธ€ไธ‹
159
+ ๐Ÿค– cd portfolio โ†’ git diff โ†’ ๆ‹†ๅˆ† atomic commits โ†’ git push
160
+
161
+ ไฝ : ๆŸฅไธ€ไธ‹ๅผ ไธ‰็š„ open_id ้กบไพฟ็ป™ไป–ๅ‘ไธชไผš่ฎฎ้‚€่ฏท
162
+ ๐Ÿค– lark-cli contact +find ๅผ ไธ‰ โ†’ ๆ‹ฟๅˆฐ open_id โ†’ ่ฐƒ lark-cli calendar +create
163
+
164
+ ไฝ : [ๅ‘ไบ†ไธ€ๅผ ่ฎพ่ฎก็จฟ] ๅธฎๆˆ‘่ฏ„ไผฐๆŠ€ๆœฏๅฏ่กŒๆ€ง
165
+ ๐Ÿค– ่‡ชๅŠจไธ‹่ฝฝๅ›พ็‰‡ โ†’ @file ๅ–‚็ป™ Kiro โ†’ ่ง†่ง‰ๅˆ†ๆž + ็ป™ๅ‡บๅฎž็Žฐๆ–นๆกˆ
166
+ ```
167
+
168
+ ## โš™๏ธ ้…็ฝฎ
169
+
170
+ ### ๆœ€ๅฐๅฏ็”จ๏ผˆ่‡ชๅŠจ็”Ÿๆˆ๏ผ‰
171
+
172
+ `lark-kiro-bridge init` ๅ†™ๅ…ฅ `~/.lark-kiro-bridge/config.json`๏ผš
173
+
174
+ ```json
175
+ {
176
+ "lark": {
177
+ "appId": "cli_xxxxxxxxxxx",
178
+ "appSecret": "xxxxxxxxxxxxxxxxxxxx"
179
+ }
180
+ }
181
+ ```
182
+
183
+ ๅ…ถไป–ๅญ—ๆฎต้ƒฝๆœ‰ๅˆ็†้ป˜่ฎคๅ€ผใ€‚
184
+
185
+ ### ๅฎŒๆ•ด้…็ฝฎๅ‚่€ƒ
186
+
187
+ <details>
188
+ <summary>็‚นๅผ€็œ‹ๆ‰€ๆœ‰ๅฏ้…็ฝฎ้กน</summary>
189
+
190
+ ```json
191
+ {
192
+ "lark": {
193
+ "appId": "cli_xxxxxxxxxxx",
194
+ "appSecret": "xxxxxxxxxxxxxxxxxxxx"
195
+ },
196
+ "kiro": {
197
+ "binPath": "kiro-cli",
198
+ "trustedTools": [
199
+ "fs_read", "fs_write", "grep", "glob", "code",
200
+ "execute_bash", "web_search", "web_fetch"
201
+ ],
202
+ "timeoutMs": 600000,
203
+ "idleTimeoutMinutes": 5,
204
+ "model": "claude-sonnet-4.6"
205
+ },
206
+ "workspace": {
207
+ "defaultCwd": "/Users/you/Projects",
208
+ "allowedRoots": ["/Users/you/Projects"]
209
+ },
210
+ "access": {
211
+ "allowedUsers": [],
212
+ "allowedChats": [],
213
+ "admins": []
214
+ },
215
+ "preferences": {
216
+ "requireMentionInGroup": true,
217
+ "cardUpdateIntervalMs": 800,
218
+ "logRetentionDays": 7
219
+ }
220
+ }
221
+ ```
222
+
223
+ `trustedTools` โ€” Kiro ไธ่ฏข้—ฎๅฐฑ่ƒฝ่ฐƒ็”จ็š„ๅทฅๅ…ท๏ผš
224
+ - `fs_read fs_write grep glob code` โ€” ๆ–‡ไปถ่ฏปๅ†™ใ€ไปฃ็ ๆœ็ดข
225
+ - `execute_bash` โ€” ่ท‘ shell ๅ‘ฝไปค๏ผˆlark-cli / git / ็ญ‰๏ผ‰ใ€‚**ๅ•ไบบ็”จๅฎ‰ๅ…จ๏ผ›ๅ›ข้˜Ÿๅœบๆ™ฏ่ฏท่ฏ„ไผฐ**
226
+ - `web_search web_fetch` โ€” ่”็ฝ‘ๆœ่ต„ๆ–™
227
+
228
+ `access` โ€” ไธ‰ๅฑ‚็™ฝๅๅ•๏ผŒ่ฏฆ่ง [SECURITY.md](./SECURITY.md)๏ผš
229
+ - `allowedUsers` ไธบ็ฉบ = ๆ‰€ๆœ‰ไบบๅ…่ฎธ
230
+ - `allowedChats` ไธบ็ฉบ = ๆ‰€ๆœ‰ chat ๅ…่ฎธ
231
+ - `admins` ไธบ็ฉบ = ๆ‰€ๆœ‰ไบบ้ƒฝๆ˜ฏ็ฎก็†ๅ‘˜
232
+
233
+ `workspace.allowedRoots` โ€” `/cd` ่ƒฝๅŽป็š„ๆ น็›ฎๅฝ•็™ฝๅๅ•๏ผŒ้™ๅˆถ็ˆ†็‚ธๅŠๅพ„ใ€‚
234
+
235
+ </details>
236
+
237
+ ### CLI
238
+
239
+ ```bash
240
+ lark-kiro-bridge init # ๆ‰ซ็ ๅˆ›ๅปบ้ฃžไนฆๅบ”็”จ๏ผˆ้ฆ–้€‰๏ผ‰
241
+ lark-kiro-bridge init --manual # ๆ‰‹ๅŠจ่พ“ๅ…ฅๅทฒๆœ‰ App ID/Secret
242
+ lark-kiro-bridge init --app-id <id> --app-secret <s> # ไธ€่กŒๆžๅฎš๏ผˆCI ๅ‹ๅฅฝ๏ผ‰
243
+ lark-kiro-bridge run # ๅ‰ๅฐๅฏๅŠจ๏ผˆ้ฆ–ๆฌก่‡ชๅŠจ่ทณๆ‰ซ็ ๏ผ‰
244
+ lark-kiro-bridge config-show # ๆ˜พ็คบๅฝ“ๅ‰้…็ฝฎ๏ผˆ่„ฑๆ•๏ผ‰
245
+
246
+ lark-kiro-bridge start # ่ฃ…ๅนถ่ตท daemon
247
+ lark-kiro-bridge stop # ๅœ daemon
248
+ lark-kiro-bridge restart # ้‡ๅฏ
249
+ lark-kiro-bridge status # ็Šถๆ€
250
+ lark-kiro-bridge unregister # ๅธ่ฝฝ
251
+
252
+ lark-kiro-bridge ps # ๅˆ—ๆœฌๆœบๆ‰€ๆœ‰ bridge ่ฟ›็จ‹
253
+ lark-kiro-bridge kill <id> [--force] # ๆ€ๆމๆŸไธช่ฟ›็จ‹
254
+ ```
255
+
256
+ ## ๐Ÿ“š ่ฟ›้˜ถๆ–‡ๆกฃ
257
+
258
+ | ๆ–‡ๆกฃ | ๅ†…ๅฎน |
259
+ |---|---|
260
+ | [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md) | ๆ•ดไฝ“ๆ•ฐๆฎๆตใ€ๅก็‰‡ๆธฒๆŸ“ไฝ“็ณปใ€ๅทฅไฝœ็›ฎๅฝ•ๆ–นๆกˆ Bใ€่ฎพ่ฎกๅ–่ˆ |
261
+ | [docs/FAQ.md](./docs/FAQ.md) | ๅธธ่ง็–‘้—ฎ + ๆ•…้šœๆŽ’ๆŸฅ๏ผˆๆœบๅ™จไบบไธๅ“ๅบ” / 200340 / ๅก็‰‡ๅกๆญป / โ€ฆ๏ผ‰ |
262
+ | [SECURITY.md](./SECURITY.md) | ๅฎ‰ๅ…จ็ญ–็•ฅใ€ๆผๆดžๆŠซ้œฒใ€ๅŠ ๅ›บๆŒ‡ๅ— |
263
+ | [CHANGELOG.md](./CHANGELOG.md) | ็‰ˆๆœฌๅ˜ๆ›ดๆ—ฅๅฟ— |
264
+
265
+ ## ๐Ÿค ๅ‚ไธŽ่ดก็Œฎ
266
+
267
+ PR / Issue ้ƒฝๆฌข่ฟŽใ€‚ๅผ€ๅ‘ๆต็จ‹๏ผš
268
+
269
+ ```bash
270
+ git clone https://github.com/walterwang0x01/lark-kiro-bridge.git
271
+ cd lark-kiro-bridge
272
+ pnpm install
273
+ pnpm typecheck && pnpm lint && pnpm test # ๆไบคๅ‰ๅฟ…่ท‘
274
+ pnpm build
275
+ node bin/lark-kiro-bridge.mjs run # ๆœฌๅœฐ่ท‘๏ผˆๅ…ˆ stop daemon๏ผ‰
276
+ ```
277
+
278
+ ไปฃ็ ่ง„่Œƒ๏ผšTypeScript strict / Biome lint / vitest ๆต‹่ฏ• / commit ็”จ conventional commitsใ€‚
279
+
280
+ ## ่ทฏ็บฟๅ›พ
281
+
282
+ - **v0.2** โœ… ๅฝ“ๅ‰็‰ˆ๏ผˆ็ป“ๆž„ๅŒ–ๅก็‰‡ + ๆŒ‰้’ฎๅ›ž่ฐƒ + Slack-style ๅทฅๅ…ท้ขๆฟ + ๆ‰ซ็ ็ป‘ๅฎš + ่ฏญ้Ÿณ่พ“ๅ…ฅ ASR๏ผ‰
283
+ - **v0.3** โœ… `/config` ้ฃžไนฆๅ†…่กจๅ• + ไธ‰ๅฑ‚่ฎฟ้—ฎๆŽงๅˆถ๏ผˆDM ่ฑๅ…็พค็™ฝๅๅ•๏ผ‰+ rapid-fire ๆถˆๆฏๅˆๅนถ
284
+ - **v0.4** Linux systemd / Windows Task Scheduler ๅฎˆๆŠค
285
+ - **v0.4** `/ps` `/exit` ้ฃžไนฆๅ†…่ฐƒ็”จๆœฌๆœบ่ฟ›็จ‹
286
+ - **v0.5** ็พคๅ โ†’ ๅทฅไฝœๅŒบ็š„ๅฏๅ‘ๅผ้ป˜่ฎค๏ผˆ่ฟ› agenzo ็พค้ป˜่ฎคๅœจ agenzo ็›ฎๅฝ•๏ผ‰
287
+ - **v1.0** ๆœๅŠกๅ™จ้›†ไธญ้ƒจ็ฝฒ / ๅคš็”จๆˆท้š”็ฆป / Web ็ฎก็†้ขๆฟ
288
+
289
+ ## ๐Ÿ“„ License
290
+
291
+ [MIT](./LICENSE) ยฉ 2026 walterwang0x01
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/cli.js').catch((err) => {
3
+ console.error(err);
4
+ process.exit(1);
5
+ });
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+
2
+ export { }