cli-jaw 1.3.0-preview.6 → 1.3.0-preview.8

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.ko.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  *Claude, Codex, Gemini... 이제 번갈아 쓰지 마세요.*
8
8
 
9
- [![Tests](https://img.shields.io/badge/tests-608%20pass-brightgreen)](#-테스트)
9
+ [![Tests](https://img.shields.io/badge/tests-639%20pass-brightgreen)](#-테스트)
10
10
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue)](https://typescriptlang.org)
11
11
  [![Node](https://img.shields.io/badge/node-%3E%3D22-blue)](https://nodejs.org)
12
12
  [![License](https://img.shields.io/badge/license-ISC-yellow)](LICENSE)
@@ -133,7 +133,7 @@ gemini # Google Gemini — 첫 실행 시 인증
133
133
  ✅ OpenCode CLI installed
134
134
  ✅ Copilot CLI installed
135
135
  ✅ Database jaw.db OK
136
- ✅ Skills 17 active, 90 reference
136
+ ✅ Skills 20 active, 89 reference
137
137
  ✅ MCP 3 servers configured
138
138
  ✅ Memory MEMORY.md exists
139
139
  ✅ Server port 3457 available
@@ -154,7 +154,7 @@ CLI-JAW는 내 컴퓨터에 상주하며 이미 익숙한 인터페이스인 **
154
154
  > 💬 *"이 모듈 리팩토링하고 테스트도 짜줘"* → 서브에이전트가 알아서, 커피 한 잔 하고 오면 돼요
155
155
  > 💬 *"저 PDF 다운받아서 핵심만 노션에 정리해"* → 브라우저 + 노션 스킬 조합으로 뚝딱
156
156
 
157
- 단일 모델만을 사용하는 기존 비서들과 달리, CLI-JAW는 5개의 AI 엔진(Claude, Codex, Gemini, OpenCode, Copilot)을 공식 CLI를 통해 오케스트레이션하여 모든 제공업체의 장점을 통합된 경험으로 제공합니다. 하나의 엔진 사용량이 초과되면 자동으로 다음 엔진으로 전환됩니다. 108개의 내장 스킬이 브라우저 자동화부터 문서 생성까지 모든 것을 처리합니다.
157
+ 단일 모델만을 사용하는 기존 비서들과 달리, CLI-JAW는 5개의 AI 엔진(Claude, Codex, Gemini, OpenCode, Copilot)을 공식 CLI를 통해 오케스트레이션하여 모든 제공업체의 장점을 통합된 경험으로 제공합니다. 하나의 엔진 사용량이 초과되면 자동으로 다음 엔진으로 전환됩니다. 109개의 내장 스킬이 브라우저 자동화부터 문서 생성까지 모든 것을 처리합니다.
158
158
 
159
159
  | | 왜 CLI-JAW인가요? |
160
160
  | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
@@ -162,13 +162,28 @@ CLI-JAW는 내 컴퓨터에 상주하며 이미 익숙한 인터페이스인 **
162
162
  | 🤖 **검증된 에이전트 도구** | 실전에서 검증된 5개의 코딩 에이전트(Claude, Codex, Gemini, OpenCode, Copilot)를 한 곳에서 사용하세요. |
163
163
  | ⚡ **멀티 에이전트 자동 전환(Fallback)** | 엔진 하나가 멈춰도 걱정 없습니다. 다음 엔진이 즉시 이어받아 중단 없는 작업이 가능합니다. |
164
164
  | 🎭 **오케스트레이션 기반 성능 극대화** | 복잡한 작업은 전문화된 서브 에이전트에게 분산시켜 처리량을 극대화합니다. |
165
- | 📦 **108개의 내장 스킬** | 브라우저 자동화, 문서 생성, 텔레그램 연동, 영구 메모리 등 설치 즉시 사용 가능한 기능들을 제공합니다. |
165
+ | 📦 **109개의 내장 스킬** | 브라우저 자동화, 문서 생성, 텔레그램 연동, 영구 메모리 등 설치 즉시 사용 가능한 기능들을 제공합니다. |
166
166
  | 🖥️ **크로스 플랫폼** | macOS, Linux, Windows — ENOENT-safe CLI 스폰, 자동 감지, `.cmd` shim 지원, 네이티브 설치 전부 크로스플랫폼 동작. |
167
167
 
168
168
  ![CLI-JAW 터미널](docs/screenshots/terminal-cli.png)
169
169
 
170
170
  ---
171
171
 
172
+ ## 🆕 새로운 기능 (v1.3.0)
173
+
174
+ | 기능 | 설명 |
175
+ |------|------|
176
+ | 🎤 **음성 & STT** | 웹 마이크 버튼 + 텔레그램 음성 전사. 멀티 프로바이더 STT: OpenAI 호환, Google Vertex AI, 커스텀 엔드포인트. 설정 UI에서 API 키 관리. |
177
+ | 📝 **프롬프트 템플릿** | 웹 UI에서 프롬프트 템플릿 생성, 편집, 관리. 노드맵 시각화 + 전체 CRUD API. |
178
+ | 📊 **쿼타 대시보드** | 압축된 쿼타 바 + 리셋 시간 표시. 429 사용량 제한 시 캐시된 사용량 데이터로 안정적 처리. |
179
+ | 🔍 **IDE Diff View** | 핑거프린트 기반 변경 감지. VS Code 또는 Antigravity 자동 감지 후 인라인 diff 열기. |
180
+ | 🎭 **PABCD 개선** | 라이브 로드맵 바 + 🦈 샤크 러너 애니메이션. 페이즈 전환 시 글로우, 펄스, 뱃지 피드백. |
181
+ | 🪟 **WSL 설치 개선** | 사전 필수 패키지(`unzip`, `curl`, `git`) 자동 설치, `jaw` 명령어 PATH 수정, 문제 해결 가이드 추가. |
182
+ | 🧪 **639개 테스트** | 608개에서 증가 — STT, 쿼타 캐싱, 오케스트레이션, CI 안정성 커버리지 추가. |
183
+ | 📦 **109개 스킬** | 20개 활성 + 89개 참조. 신규: `dev-pabcd`, `dev-scaffolding`, `dev-code-reviewer`. |
184
+
185
+ ---
186
+
172
187
  ## 비서가 어떤 일을 할 수 있나요?
173
188
 
174
189
  ```mermaid
@@ -189,7 +204,9 @@ graph LR
189
204
  - 🤖 **5개의 AI 엔진, 1명의 비서** — Claude · Codex · Gemini · OpenCode · Copilot. `/cli` 명령어로 전환하세요.
190
205
  - ⚡ **자동 전환(Fallback)** — 엔진 하나가 다운되면 다음 엔진이 매끄럽게 이어받습니다.
191
206
  - 🎭 **멀티 에이전트 오케스트레이션** — 복잡한 작업은 전문화된 서브 에이전트들에게 자동으로 분산됩니다.
192
- - 📦 **108개의 스킬**브라우저 제어, 파일 편집, 이미지 생성, 검색 [다양한 기능](#-스킬-시스템).
207
+ - 🎤 **음성 입력** 마이크 버튼 + 텔레그램 음성 메시지. 멀티 프로바이더 STT (OpenAI, Vertex AI).
208
+ - 📝 **프롬프트 템플릿** — 시각적 노드맵 에디터로 프롬프트 템플릿 생성, 관리, 재사용.
209
+ - 📦 **109개의 스킬** — 브라우저 제어, 파일 편집, 이미지 생성, 웹 검색 외 [다양한 기능](#-스킬-시스템).
193
210
  - 🧠 **영구 메모리** — 세션을 넘나들며 과거의 대화와 사용자 선호도를 기억합니다.
194
211
  - 📱 **텔레그램 봇** — 휴대폰으로 비서와 채팅하고, 음성/사진/파일을 전송하세요.
195
212
  - 🌐 **브라우저 자동화** — 비서가 알아서 웹을 탐색하고, 클릭하고, 타이핑하고, 스크린샷을 찍을 수 있습니다.
@@ -212,15 +229,15 @@ jaw service install # 부팅 시 자동 실행 (systemd/launchd/docker 자동
212
229
 
213
230
  ## 📦 스킬 시스템
214
231
 
215
- **108개 스킬** 내장 — 브라우저, GitHub, 노션, 텔레그램, 메모리, PDF, 이미지 생성 등 [다양하게](#).
232
+ **109개 스킬** 내장 — 브라우저, GitHub, 노션, 텔레그램, 메모리, PDF, 이미지 생성 등 [다양하게](#).
216
233
 
217
234
  <details>
218
235
  <summary>전체 스킬 목록 보기</summary>
219
236
 
220
237
  | 티어 | 수량 | 작동 방식 |
221
238
  | ------------------ | :---: | ------------------------------------------------ |
222
- | **Active 스킬** | 17 | 매번 AI한테 자동으로 주입돼요. 항상 켜져 있어요. |
223
- | **Reference 스킬** | 90 | 관련 작업을 시키면 그때 AI가 읽어서 써요. |
239
+ | **Active 스킬** | 20 | 매번 AI한테 자동으로 주입돼요. 항상 켜져 있어요. |
240
+ | **Reference 스킬** | 89 | 관련 작업을 시키면 그때 AI가 읽어서 써요. |
224
241
 
225
242
  #### Active 스킬 (항상 켜짐)
226
243
 
@@ -237,10 +254,11 @@ jaw service install # 부팅 시 자동 실행 (systemd/launchd/docker 자동
237
254
  | `screen-capture` | macOS 스크린샷 및 카메라 캡처 |
238
255
  | `openai-docs` | 최신 OpenAI API 문서 |
239
256
  | `dev` / `dev-frontend` / `dev-backend` / `dev-data` / `dev-testing` | 서브에이전트용 개발 가이드 |
257
+ | `dev-pabcd` / `dev-scaffolding` / `dev-code-reviewer` | 오케스트레이션, 스캐폴딩, 코드 리뷰 가이드 |
240
258
 
241
259
  #### Reference 스킬 (필요할 때만)
242
260
 
243
- 90개 스킬이 더 있어요 — spotify, 날씨, 딥리서치, TTS, 비디오 다운로드, Apple 미리알림, 1Password, Terraform, PostgreSQL, Jupyter 등.
261
+ 89개 스킬이 더 있어요 — spotify, 날씨, 딥리서치, TTS, 비디오 다운로드, Apple 미리알림, 1Password, Terraform, PostgreSQL, Jupyter 등.
244
262
 
245
263
  ```bash
246
264
  jaw skill install <name> # reference → active로 영구 활성화
@@ -286,6 +304,26 @@ jaw skill install <name> # reference → active로 영구 활성화
286
304
 
287
305
  ---
288
306
 
307
+ ## 🎤 음성 & STT — 음성 인식
308
+
309
+ CLI-JAW는 멀티 프로바이더 STT로 모든 인터페이스에서 음성 입력을 지원합니다:
310
+
311
+ | 프로바이더 | 설정 방법 |
312
+ |-----------|----------|
313
+ | **OpenAI 호환** | Settings UI → STT → OpenAI 엔드포인트 + API 키 |
314
+ | **Google Vertex AI** | Settings UI → STT → Vertex AI 인증 정보 |
315
+ | **커스텀 엔드포인트** | OpenAI 호환 STT API URL 직접 입력 |
316
+
317
+ **음성을 사용할 수 있는 곳:**
318
+
319
+ - 🌐 **웹 UI** — 마이크 버튼으로 실시간 녹음 및 전사
320
+ - 📱 **텔레그램** — 음성 메시지 전송 시 AI에 전달 전 자동 전사
321
+ - 🎙️ **멀티모달** — 음성 + 텍스트 + 파일 첨부를 하나의 메시지에 조합 가능
322
+
323
+ 모든 STT 설정(프로바이더, API 키, 언어)은 **Settings UI**에서 관리 — 설정 파일 편집 불필요.
324
+
325
+ ---
326
+
289
327
  ## 🎭 멀티 에이전트 오케스트레이션
290
328
 
291
329
  ![오케스트레이션 로그](docs/screenshots/orchestration-log.png)
@@ -470,7 +508,7 @@ src/
470
508
  ## 🧪 테스트
471
509
 
472
510
  <details>
473
- <summary>608 pass · 1 skipped · 외부 의존성 0</summary>
511
+ <summary>639 pass · 1 skipped · 외부 의존성 0</summary>
474
512
 
475
513
  ```bash
476
514
  npm test
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  *One assistant. Five brains. Always on.*
8
8
 
9
- [![Tests](https://img.shields.io/badge/tests-608%20pass-brightgreen)](#-tests)
9
+ [![Tests](https://img.shields.io/badge/tests-639%20pass-brightgreen)](#-tests)
10
10
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue)](https://typescriptlang.org)
11
11
  [![Node](https://img.shields.io/badge/node-%3E%3D22-blue)](https://nodejs.org)
12
12
  [![License](https://img.shields.io/badge/license-ISC-yellow)](LICENSE)
@@ -37,7 +37,15 @@ Restart your computer when prompted. After reboot, open **Ubuntu** from the Star
37
37
  curl -fsSL https://raw.githubusercontent.com/lidge-jun/cli-jaw/master/scripts/install-wsl.sh | bash
38
38
  ```
39
39
 
40
- **Step 3: Authenticate an AI Engine** (pick one)
40
+ The script automatically installs prerequisites (`curl`, `unzip`, `git`), Node.js 22+, and CLI-JAW.
41
+
42
+ **Step 3: Reload your shell** (important — picks up PATH changes)
43
+
44
+ ```bash
45
+ source ~/.bashrc
46
+ ```
47
+
48
+ **Step 4: Authenticate an AI Engine** (pick one)
41
49
 
42
50
  ```bash
43
51
  copilot login # GitHub Copilot (Free)
@@ -47,7 +55,7 @@ codex login # OpenAI Codex
47
55
  gemini # Google Gemini
48
56
  ```
49
57
 
50
- **Step 4: Start Chatting**
58
+ **Step 5: Start Chatting**
51
59
 
52
60
  ```bash
53
61
  jaw serve
@@ -56,6 +64,18 @@ jaw serve
56
64
 
57
65
  > 💡 The script uses [fnm](https://github.com/Schniz/fnm) for Node.js management. If you already have `nvm`, it will use that instead.
58
66
 
67
+ <details>
68
+ <summary>🔧 <b>Troubleshooting WSL</b></summary>
69
+
70
+ | Problem | Fix |
71
+ |---------|-----|
72
+ | `unzip: command not found` | Rerun the installer — it now auto-installs `unzip` |
73
+ | `jaw: command not found` after install | Run `source ~/.bashrc` to reload PATH |
74
+ | Still can't find `jaw` | Run `export PATH="$(npm config get prefix)/bin:$PATH"` |
75
+ | Permission errors with `npm install -g` | Run `sudo chown -R $USER $(npm config get prefix)` |
76
+
77
+ </details>
78
+
59
79
  </details>
60
80
 
61
81
  <details>
@@ -133,7 +153,7 @@ Check what's ready: `jaw doctor`
133
153
  ✅ OpenCode CLI installed
134
154
  ✅ Copilot CLI installed
135
155
  ✅ Database jaw.db OK
136
- ✅ Skills 17 active, 90 reference
156
+ ✅ Skills 20 active, 89 reference
137
157
  ✅ MCP 3 servers configured
138
158
  ✅ Memory MEMORY.md exists
139
159
  ✅ Server port 3457 available
@@ -169,6 +189,21 @@ Unlike single-model assistants, CLI-JAW orchestrates **5 AI engines** (Claude, C
169
189
 
170
190
  ---
171
191
 
192
+ ## 🆕 What's New (v1.3.0)
193
+
194
+ | Feature | Description |
195
+ |---------|-------------|
196
+ | 🎤 **Voice & STT** | Web mic button + Telegram voice transcription. Multi-provider STT: OpenAI-compatible, Google Vertex AI, custom endpoints. Settings UI with API key management. |
197
+ | 📝 **Prompt Templates** | Create, edit, and manage prompt templates via the Web UI. Node-map visualization + full CRUD API. |
198
+ | 📊 **Quota Dashboard** | Compact quota bars with reset-time display. Graceful 429 rate-limit handling with cached usage data. |
199
+ | 🔍 **IDE Diff View** | Fingerprint-based change detection. Auto-detects VS Code or Antigravity and opens inline diffs. |
200
+ | 🎭 **PABCD Enhancements** | Live roadmap bar with 🦈 shark runner animation. Glow, pulse, and badge feedback on phase transitions. |
201
+ | 🪟 **WSL Installer v2** | Auto-installs prerequisites (`unzip`, `curl`, `git`), fixes PATH for `jaw` command, adds troubleshooting guide. |
202
+ | 🧪 **639 Tests** | Up from 608 — new coverage for STT, quota caching, orchestration, and CI stability. |
203
+ | 📦 **109 Skills** | 20 active + 89 reference. New: `dev-pabcd`, `dev-scaffolding`, `dev-code-reviewer`. |
204
+
205
+ ---
206
+
172
207
  ## What can your assistant do?
173
208
 
174
209
  ```mermaid
@@ -189,7 +224,9 @@ graph LR
189
224
  - 🤖 **5 AI engines, 1 assistant** — Claude · Codex · Gemini · OpenCode · Copilot. Switch with `/cli`.
190
225
  - ⚡ **Auto fallback** — If one engine is down, the next picks up seamlessly.
191
226
  - 🎭 **Multi-agent orchestration** — Complex tasks get split across specialized sub-agents automatically.
192
- - 📦 **108 skills** — Browser control, file editing, image generation, web search, and [much more](#-skill-system).
227
+ - 🎤 **Voice input** — Mic button on the web + Telegram voice messages. Multi-provider STT (OpenAI, Vertex AI).
228
+ - 📝 **Prompt templates** — Create, manage, and reuse prompt templates with a visual node-map editor.
229
+ - 📦 **109 skills** — Browser control, file editing, image generation, web search, and [much more](#-skill-system).
193
230
  - 🧠 **Persistent memory** — Your assistant remembers past conversations and preferences across sessions.
194
231
  - 📱 **Telegram bot** — Chat with your assistant from your phone, send voice/photos/files.
195
232
  - 🌐 **Browser automation** — Your assistant can navigate the web, click, type, and screenshot.
@@ -201,15 +238,15 @@ graph LR
201
238
 
202
239
  ## 📦 Skill System
203
240
 
204
- **108 skills** out of the box — browser, github, notion, telegram, memory, pdf, image generation, and [much more](#).
241
+ **109 skills** out of the box — browser, github, notion, telegram, memory, pdf, image generation, and [much more](#).
205
242
 
206
243
  <details>
207
244
  <summary>View all skills</summary>
208
245
 
209
246
  | Tier | Count | How it works |
210
247
  | -------------------- | :---: | --------------------------------------------------------- |
211
- | **Active Skills** | 17 | Auto-injected into every AI prompt. Always available. |
212
- | **Reference Skills** | 90 | AI reads them on-demand when you ask for a relevant task. |
248
+ | **Active Skills** | 20 | Auto-injected into every AI prompt. Always available. |
249
+ | **Reference Skills** | 89 | AI reads them on-demand when you ask for a relevant task. |
213
250
 
214
251
  #### Active Skills (always on)
215
252
 
@@ -226,10 +263,11 @@ graph LR
226
263
  | `screen-capture` | macOS screenshot and camera capture |
227
264
  | `openai-docs` | Up-to-date OpenAI API documentation |
228
265
  | `dev` / `dev-frontend` / `dev-backend` / `dev-data` / `dev-testing` | Development guidelines for sub-agents |
266
+ | `dev-pabcd` / `dev-scaffolding` / `dev-code-reviewer` | Orchestration, scaffolding, and code review guides |
229
267
 
230
268
  #### Reference Skills (on-demand)
231
269
 
232
- 90 more skills ready to use — spotify, weather, deep-research, tts, video-downloader, apple-reminders, 1password, terraform, postgres, jupyter-notebook, sentry, whatsapp, and more.
270
+ 89 more skills ready to use — spotify, weather, deep-research, tts, video-downloader, apple-reminders, 1password, terraform, postgres, jupyter-notebook, sentry, whatsapp, and more.
233
271
 
234
272
  ```bash
235
273
  jaw skill install <name> # Activate a reference skill permanently
@@ -259,8 +297,9 @@ Your assistant isn't tied to your desk. Chat from anywhere via Telegram:
259
297
  **What you can do from Telegram:**
260
298
 
261
299
  - 💬 Chat with your assistant (any of 5 AI engines)
262
- - 🎤 Send voice messages (auto-transcribed)
300
+ - 🎤 Send voice messages (auto-transcribed via multi-provider STT)
263
301
  - 📎 Send files and photos for processing
302
+ - 🎙️ Combine voice + text + attachments in a single message
264
303
  - ⚡ Run commands (`/cli`, `/model`, `/status`)
265
304
  - 🔄 Switch AI engines on the fly
266
305
 
@@ -277,6 +316,26 @@ Your assistant isn't tied to your desk. Chat from anywhere via Telegram:
277
316
 
278
317
  ---
279
318
 
319
+ ## 🎤 Voice & STT — Speech-to-Text
320
+
321
+ CLI-JAW supports voice input across all interfaces with multi-provider STT:
322
+
323
+ | Provider | How to enable |
324
+ |----------|--------------|
325
+ | **OpenAI-compatible** | Settings UI → STT → OpenAI endpoint + API key |
326
+ | **Google Vertex AI** | Settings UI → STT → Vertex AI credentials |
327
+ | **Custom endpoint** | Any OpenAI-compatible STT API URL |
328
+
329
+ **Where you can use voice:**
330
+
331
+ - 🌐 **Web UI** — Click the mic button to record and transcribe in real-time
332
+ - 📱 **Telegram** — Send voice messages; auto-transcribed before reaching the AI
333
+ - 🎙️ **Multimodal** — Combine voice + text + file attachments in a single message
334
+
335
+ All STT settings (provider, API keys, language) are managed in the **Settings UI** — no config files to edit.
336
+
337
+ ---
338
+
280
339
  ## 🎭 Multi-Agent Orchestration — PABCD
281
340
 
282
341
  For complex tasks, CLI-JAW uses **PABCD** — a finite state machine that enforces a strict 5-phase pipeline:
@@ -521,7 +580,7 @@ src/
521
580
  ## 🧪 Tests
522
581
 
523
582
  <details>
524
- <summary>608 pass · 1 skipped · zero external dependencies</summary>
583
+ <summary>639 pass · 1 skipped · zero external dependencies</summary>
525
584
 
526
585
  ```bash
527
586
  npm test
package/README.zh-CN.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  *Claude、Codex、Gemini... 从此告别来回切换。*
8
8
 
9
- [![Tests](https://img.shields.io/badge/tests-608%20pass-brightgreen)](#-测试)
9
+ [![Tests](https://img.shields.io/badge/tests-639%20pass-brightgreen)](#-测试)
10
10
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue)](https://typescriptlang.org)
11
11
  [![Node](https://img.shields.io/badge/node-%3E%3D22-blue)](https://nodejs.org)
12
12
  [![License](https://img.shields.io/badge/license-ISC-yellow)](LICENSE)
@@ -133,7 +133,7 @@ gemini # Google Gemini — 首次运行触发认证
133
133
  ✅ OpenCode CLI installed
134
134
  ✅ Copilot CLI installed
135
135
  ✅ Database jaw.db OK
136
- ✅ Skills 17 active, 90 reference
136
+ ✅ Skills 20 active, 89 reference
137
137
  ✅ MCP 3 servers configured
138
138
  ✅ Memory MEMORY.md exists
139
139
  ✅ Server port 3457 available
@@ -154,7 +154,7 @@ CLI-JAW 是驻留在您本地机器上的**专属 AI 助手**,并在您熟悉
154
154
  > 💬 *"重构这个模块,顺便写好测试"* → 子 Agent 搞定,你喝杯咖啡回来就行
155
155
  > 💬 *"把那个 PDF 下载下来,关键信息放到 Notion 里"* → 浏览器 + Notion 技能组合,搞定
156
156
 
157
- 与单一模型的助手不同,CLI-JAW 通过官方 CLI 命令行工具对 **5 大 AI 引擎**(Claude、Codex、Gemini、OpenCode、Copilot)进行编排 — 为您提供各大供应商最优势的能力及统一的体验。当一个引擎处于繁忙状态时,它会自动无缝切换至下一个。108 个内置技能可处理从浏览器自动化到文档生成的所有事务。
157
+ 与单一模型的助手不同,CLI-JAW 通过官方 CLI 命令行工具对 **5 大 AI 引擎**(Claude、Codex、Gemini、OpenCode、Copilot)进行编排 — 为您提供各大供应商最优势的能力及统一的体验。当一个引擎处于繁忙状态时,它会自动无缝切换至下一个。109 个内置技能可处理从浏览器自动化到文档生成的所有事务。
158
158
 
159
159
  | | 为什么选择 CLI-JAW? |
160
160
  | ------------------------------- | ------------------------------------------------------------------------------------- |
@@ -162,13 +162,28 @@ CLI-JAW 是驻留在您本地机器上的**专属 AI 助手**,并在您熟悉
162
162
  | 🤖 **经过验证的智能体工具** | 5 大实战级编码智能体(Claude、Codex、Gemini、OpenCode、Copilot)集于一身。 |
163
163
  | ⚡ **多模型自动回退 (Fallback)** | 单一引擎发生故障?下一个立即接管。确保零停机。 |
164
164
  | 🎭 **基于编排的性能优化** | 复杂的任务会被拆分给专业的子智能体,以实现效率最大化。 |
165
- | 📦 **108 个内置技能** | 浏览器自动化、文档生成、Telegram 通知、持久化记忆 — 开箱即用。 |
165
+ | 📦 **109 个内置技能** | 浏览器自动化、文档生成、Telegram 通知、持久化记忆 — 开箱即用。 |
166
166
  | 🖥️ **跨平台支持** | macOS、Linux、Windows — ENOENT-safe CLI 启动、自动检测、`.cmd` 支持,跨平台原生运行。 |
167
167
 
168
168
  ![CLI-JAW 终端](docs/screenshots/terminal-cli.png)
169
169
 
170
170
  ---
171
171
 
172
+ ## 🆕 新功能 (v1.3.0)
173
+
174
+ | 功能 | 说明 |
175
+ |------|------|
176
+ | 🎤 **语音 & STT** | Web 麦克风按钮 + Telegram 语音转写。多供应商 STT:OpenAI 兼容、Google Vertex AI、自定义端点。设置 UI 中管理 API 密钥。 |
177
+ | 📝 **提示词模板** | 通过 Web UI 创建、编辑和管理提示词模板。节点地图可视化 + 完整 CRUD API。 |
178
+ | 📊 **配额仪表盘** | 紧凑型配额条 + 重置时间显示。429 速率限制时使用缓存数据优雅处理。 |
179
+ | 🔍 **IDE Diff 视图** | 基于指纹的变更检测。自动检测 VS Code 或 Antigravity 并打开内联 diff。 |
180
+ | 🎭 **PABCD 增强** | 实时路线图进度条 + 🦈 鲨鱼跑步动画。阶段切换时有发光、脉冲和徽章反馈。 |
181
+ | 🪟 **WSL 安装改进** | 自动安装前置依赖(`unzip`、`curl`、`git`),修复 `jaw` 命令 PATH,新增故障排除指南。 |
182
+ | 🧪 **639 项测试** | 从 608 项增加 — 新增 STT、配额缓存、编排和 CI 稳定性覆盖。 |
183
+ | 📦 **109 个技能** | 20 个活跃 + 89 个参考。新增:`dev-pabcd`、`dev-scaffolding`、`dev-code-reviewer`。 |
184
+
185
+ ---
186
+
172
187
  ## 您的助手能做什么?
173
188
 
174
189
  ```mermaid
@@ -189,7 +204,9 @@ graph LR
189
204
  - 🤖 **5 大 AI 引擎,1 个专属助手** — Claude · Codex · Gemini · OpenCode · Copilot。使用 `/cli` 命令一键切换。
190
205
  - ⚡ **自动回退 (Fallback)** — 即使一个引擎出现故障,下一个也会无缝接管。
191
206
  - 🎭 **多智能体编排** — 复杂任务会自动拆分给专业的子智能体并行处理。
192
- - 📦 **108 个技能** 浏览器控制、文件编辑、图片生成、网页搜索以及[更多功能](#-技能系统)。
207
+ - 🎤 **语音输入**Web 麦克风按钮 + Telegram 语音消息。多供应商 STT(OpenAI、Vertex AI)。
208
+ - 📝 **提示词模板** — 使用可视化节点地图编辑器创建、管理和复用提示词模板。
209
+ - 📦 **109 个技能** — 浏览器控制、文件编辑、图片生成、网页搜索以及[更多功能](#-技能系统)。
193
210
  - 🧠 **持久化记忆** — 跨越不同会话,记住您过往的对话和偏好设定。
194
211
  - 📱 **Telegram 机器人** — 通过手机即可与您的助手聊天、发送语音/图片/文件。
195
212
  - 🌐 **浏览器自动化** — 您的助手能够自动导航网页、点击、打字并进行截图。
@@ -212,15 +229,15 @@ jaw service install # 开机自动启动 (systemd/launchd/docker 自动检测)
212
229
 
213
230
  ## 📦 技能系统
214
231
 
215
- **108 个技能**开箱即用 — 浏览器、GitHub、Notion、Telegram、记忆、PDF、图片生成等[应有尽有](#)。
232
+ **109 个技能**开箱即用 — 浏览器、GitHub、Notion、Telegram、记忆、PDF、图片生成等[应有尽有](#)。
216
233
 
217
234
  <details>
218
235
  <summary>查看全部技能</summary>
219
236
 
220
237
  | 层级 | 数量 | 工作方式 |
221
238
  | ------------ | :---: | ---------------------------------- |
222
- | **活跃技能** | 17 | 每次对话自动加载,随时可用。 |
223
- | **参考技能** | 90 | 用到的时候 AI 自己去读,按需调用。 |
239
+ | **活跃技能** | 20 | 每次对话自动加载,随时可用。 |
240
+ | **参考技能** | 89 | 用到的时候 AI 自己去读,按需调用。 |
224
241
 
225
242
  #### 活跃技能(常驻)
226
243
 
@@ -237,10 +254,11 @@ jaw service install # 开机自动启动 (systemd/launchd/docker 自动检测)
237
254
  | `screen-capture` | macOS 截图和摄像头捕获 |
238
255
  | `openai-docs` | 最新 OpenAI API 文档 |
239
256
  | `dev` / `dev-frontend` / `dev-backend` / `dev-data` / `dev-testing` | 子 Agent 开发指南 |
257
+ | `dev-pabcd` / `dev-scaffolding` / `dev-code-reviewer` | 编排、脚手架和代码审查指南 |
240
258
 
241
259
  #### 参考技能(按需调用)
242
260
 
243
- 90 个技能随时待命 — Spotify、天气、深度研究、TTS、视频下载、Apple 提醒事项、1Password、Terraform、PostgreSQL、Jupyter 等。
261
+ 89 个技能随时待命 — Spotify、天气、深度研究、TTS、视频下载、Apple 提醒事项、1Password、Terraform、PostgreSQL、Jupyter 等。
244
262
 
245
263
  ```bash
246
264
  jaw skill install <name> # 参考 → 活跃,永久激活
@@ -286,6 +304,26 @@ jaw skill install <name> # 参考 → 活跃,永久激活
286
304
 
287
305
  ---
288
306
 
307
+ ## 🎤 语音 & STT — 语音转文字
308
+
309
+ CLI-JAW 通过多供应商 STT 在所有界面支持语音输入:
310
+
311
+ | 供应商 | 设置方法 |
312
+ |-------|---------|
313
+ | **OpenAI 兼容** | Settings UI → STT → OpenAI 端点 + API 密钥 |
314
+ | **Google Vertex AI** | Settings UI → STT → Vertex AI 凭证 |
315
+ | **自定义端点** | 任何 OpenAI 兼容的 STT API URL |
316
+
317
+ **可以使用语音的场景:**
318
+
319
+ - 🌐 **Web UI** — 点击麦克风按钮实时录音并转写
320
+ - 📱 **Telegram** — 发送语音消息,AI 处理前自动转写
321
+ - 🎙️ **多模态** — 在单条消息中组合语音 + 文字 + 文件附件
322
+
323
+ 所有 STT 设置(供应商、API 密钥、语言)均在 **Settings UI** 中管理 — 无需编辑配置文件。
324
+
325
+ ---
326
+
289
327
  ## 🎭 多智能体编排
290
328
 
291
329
  对于复杂的任务,您的助手会自动将其委派给专业的子智能体:
@@ -470,7 +508,7 @@ src/
470
508
  ## 🧪 测试
471
509
 
472
510
  <details>
473
- <summary>608 pass · 1 skipped · 零外部依赖</summary>
511
+ <summary>639 pass · 1 skipped · 零外部依赖</summary>
474
512
 
475
513
  ```bash
476
514
  npm test
@@ -1,6 +1,6 @@
1
1
  // ─── Agent CLI Argument Builders ──────────────────────
2
2
  // Extracted from agent.js for 500-line compliance.
3
- export function buildArgs(cli, model, effort, prompt, sysPrompt, permissions = 'auto') {
3
+ export function buildArgs(cli, model, effort, prompt, sysPrompt, permissions = 'auto', options = {}) {
4
4
  const autoPerm = permissions === 'auto';
5
5
  switch (cli) {
6
6
  case 'claude':
@@ -15,6 +15,7 @@ export function buildArgs(cli, model, effort, prompt, sysPrompt, permissions = '
15
15
  return ['exec',
16
16
  ...(model && model !== 'default' ? ['-m', model] : []),
17
17
  ...(effort ? ['-c', `model_reasoning_effort="${effort}"`] : []),
18
+ ...(options.fastMode ? ['--enable', 'fast_mode'] : []),
18
19
  ...(autoPerm ? ['--dangerously-bypass-approvals-and-sandbox'] : []),
19
20
  '--skip-git-repo-check', '--json'];
20
21
  case 'gemini':
@@ -31,7 +32,7 @@ export function buildArgs(cli, model, effort, prompt, sysPrompt, permissions = '
31
32
  return [];
32
33
  }
33
34
  }
34
- export function buildResumeArgs(cli, model, effort, sessionId, prompt, permissions = 'auto') {
35
+ export function buildResumeArgs(cli, model, effort, sessionId, prompt, permissions = 'auto', options = {}) {
35
36
  const autoPerm = permissions === 'auto';
36
37
  switch (cli) {
37
38
  case 'claude':
@@ -45,6 +46,7 @@ export function buildResumeArgs(cli, model, effort, sessionId, prompt, permissio
45
46
  case 'codex':
46
47
  return ['exec', 'resume',
47
48
  ...(model && model !== 'default' ? ['--model', model] : []),
49
+ ...(options.fastMode ? ['--enable', 'fast_mode'] : []),
48
50
  ...(autoPerm ? ['--dangerously-bypass-approvals-and-sandbox'] : []),
49
51
  '--skip-git-repo-check',
50
52
  sessionId, prompt || '', '--json'];
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/agent/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/agent/args.ts"],"names":[],"mappings":"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"}
@@ -298,10 +298,10 @@ export function spawnAgent(prompt, opts = {}) {
298
298
  let args;
299
299
  if (isResume) {
300
300
  console.log(`[jaw:resume] ${cli} session=${resumeSessionId.slice(0, 12)}...`);
301
- args = buildResumeArgs(cli, model, effort, resumeSessionId, prompt, permissions);
301
+ args = buildResumeArgs(cli, model, effort, resumeSessionId, prompt, permissions, { fastMode: cfg.fastMode });
302
302
  }
303
303
  else {
304
- args = buildArgs(cli, model, effort, promptForArgs, sysPrompt, permissions);
304
+ args = buildArgs(cli, model, effort, promptForArgs, sysPrompt, permissions, { fastMode: cfg.fastMode });
305
305
  }
306
306
  const agentLabel = agentId || 'main';
307
307
  // ─── DIFF-A: Preflight — verify CLI binary exists before spawn ───