cli-jaw 1.6.0 → 1.6.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.
- package/README.ko.md +24 -17
- package/README.md +29 -20
- package/README.zh-CN.md +24 -17
- package/dist/bin/commands/dispatch.js +8 -1
- package/dist/bin/commands/dispatch.js.map +1 -1
- package/dist/server.js +5 -3
- package/dist/server.js.map +1 -1
- package/dist/src/agent/spawn.js +6 -5
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/cli/acp-client.js +4 -2
- package/dist/src/cli/acp-client.js.map +1 -1
- package/dist/src/orchestrator/distribute.js +16 -11
- package/dist/src/orchestrator/distribute.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +27 -0
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/prompt/builder.js +5 -7
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/employee.md +3 -4
- package/package.json +1 -1
- package/public/css/layout.css +5 -1
- package/public/dist/assets/{index-CmAU0d96.js → index-CLd0BsAu.js} +1 -1
- package/public/dist/assets/index-D6ci1wCN.css +1 -0
- package/public/dist/index.html +2 -2
- package/public/js/features/sidebar.ts +33 -5
- package/scripts/release-1.6.0.sh +69 -0
- package/dist/lib/token-keepalive.js +0 -34
- package/dist/lib/token-keepalive.js.map +0 -1
- package/public/dist/assets/index-Br2UdKlR.css +0 -1
package/README.ko.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
*Claude, Codex, Gemini... 이제 번갈아 쓰지 마세요.*
|
|
8
8
|
|
|
9
|
-
[](#-테스트)
|
|
10
10
|
[](https://typescriptlang.org)
|
|
11
11
|
[](https://nodejs.org)
|
|
12
12
|
[](LICENSE)
|
|
@@ -182,7 +182,7 @@ CLI-JAW는 내 컴퓨터에 상주하며 이미 익숙한 인터페이스인 **
|
|
|
182
182
|
> 💬 *"이 모듈 리팩토링하고 테스트도 짜줘"* → 서브에이전트가 알아서, 커피 한 잔 하고 오면 돼요
|
|
183
183
|
> 💬 *"저 PDF 다운받아서 핵심만 노션에 정리해"* → 브라우저 + 노션 스킬 조합으로 뚝딱
|
|
184
184
|
|
|
185
|
-
단일 모델만을 사용하는 기존 비서들과 달리, CLI-JAW는 5개의 AI 엔진(Claude, Codex, Gemini, OpenCode, Copilot)을 공식 CLI를 통해 오케스트레이션하여 모든 제공업체의 장점을 통합된 경험으로 제공합니다. 하나의 엔진 사용량이 초과되면 자동으로 다음 엔진으로 전환됩니다.
|
|
185
|
+
단일 모델만을 사용하는 기존 비서들과 달리, CLI-JAW는 5개의 AI 엔진(Claude, Codex, Gemini, OpenCode, Copilot)을 공식 CLI를 통해 오케스트레이션하여 모든 제공업체의 장점을 통합된 경험으로 제공합니다. 하나의 엔진 사용량이 초과되면 자동으로 다음 엔진으로 전환됩니다. **100개 이상의 내장 스킬**이 브라우저 자동화부터 문서 생성까지 다양한 작업을 처리합니다.
|
|
186
186
|
|
|
187
187
|
| | 왜 CLI-JAW인가요? |
|
|
188
188
|
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
@@ -190,25 +190,32 @@ CLI-JAW는 내 컴퓨터에 상주하며 이미 익숙한 인터페이스인 **
|
|
|
190
190
|
| 🤖 **검증된 에이전트 도구** | 실전에서 검증된 5개의 코딩 에이전트(Claude, Codex, Gemini, OpenCode, Copilot)를 한 곳에서 사용하세요. |
|
|
191
191
|
| ⚡ **멀티 에이전트 자동 전환(Fallback)** | 엔진 하나가 멈춰도 걱정 없습니다. 다음 엔진이 즉시 이어받아 중단 없는 작업이 가능합니다. |
|
|
192
192
|
| 🎭 **오케스트레이션 기반 성능 극대화** | 복잡한 작업은 전문화된 서브 에이전트에게 분산시켜 처리량을 극대화합니다. |
|
|
193
|
-
| 📦 **
|
|
193
|
+
| 📦 **100개+ 내장 스킬** | 브라우저 자동화, 문서 생성, 텔레그램 연동, 영구 메모리 등 설치 즉시 사용 가능한 기능들을 제공합니다. |
|
|
194
194
|
| 🖥️ **크로스 플랫폼** | macOS, Linux, Windows — ENOENT-safe CLI 스폰, 자동 감지, `.cmd` shim 지원, 네이티브 설치 전부 크로스플랫폼 동작. |
|
|
195
195
|
|
|
196
196
|

|
|
197
197
|
|
|
198
198
|
---
|
|
199
199
|
|
|
200
|
-
## 🆕 새로운 기능 (v1.
|
|
200
|
+
## 🆕 새로운 기능 (v1.6.0)
|
|
201
201
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
|
210
|
-
|
|
|
211
|
-
|
|
|
202
|
+
`v1.6.0`은 `v1.2.0` 이후 누적된 대규모 제품 확장을 처음으로 한 번에 정리하는 문서 캐치업 릴리즈입니다.
|
|
203
|
+
|
|
204
|
+
- 전체 업데이트 로그: [CHANGELOG.md](CHANGELOG.md#160---2026-04-13)
|
|
205
|
+
- 범위: `v1.2.0` → `v1.5.1`
|
|
206
|
+
- 규모: `59` commits, `307` files changed, `32,760` insertions, `4,263` deletions
|
|
207
|
+
- 핵심 변화: 오케스트레이션, 구조화 메모리, Discord/음성 채널, 대폭 확장된 UI, 다이어그램/위젯 렌더링, 릴리즈/운영 툴링 강화
|
|
208
|
+
|
|
209
|
+
| 기능 | 설명 |
|
|
210
|
+
| ---- | ---- |
|
|
211
|
+
| 🎭 **PABCD 오케스트레이션** | `jaw dispatch`, `jaw orchestrate`, 영속 상태머신, 워커 레지스트리, 리서치 디스패치, 웹 UI 상태 표시까지 포함하는 본격적인 오케스트레이션 표면이 추가되었습니다. |
|
|
212
|
+
| 🧠 **구조화 메모리 런타임** | 단순 저장을 넘어 구조화 저장소, 인덱싱, 쿼리 확장, task snapshot, 리인덱스/감사 UI까지 갖춘 메모리 서브시스템으로 확장되었습니다. |
|
|
213
|
+
| 💬 **Discord + 음성 채널** | Web, Terminal, Telegram뿐 아니라 Discord와 음성/STT 흐름이 제품의 핵심 인터페이스로 올라왔습니다. |
|
|
214
|
+
| 🖥️ **대폭 확장된 웹 UI** | 설정 패널, 메모리/하트비트 제어, tool UI, provider icon, gesture, drag/drop 보호, virtual scroll, 렌더링 개선이 대거 추가되었습니다. |
|
|
215
|
+
| 📊 **다이어그램/위젯 렌더링** | iframe renderer, validator, 전용 CSS를 기반으로 인라인 다이어그램과 위젯 렌더링이 가시적인 기능군이 되었습니다. |
|
|
216
|
+
| ⌨️ **CLI/TUI 사용성 개선** | `/compact`, 오버레이/셀렉터, 세션 지속성, resume 분류, readiness 점검 등 터미널 사용성이 크게 개선되었습니다. |
|
|
217
|
+
| 🧪 **운영/CI/설치 강화** | `jaw doctor`, 브라우저 launch policy, 스킬 fallback/reset, submodule-safe CI, preview release, Vite 기반 배포가 강화되었습니다. |
|
|
218
|
+
| 📄 **오피스 자동화 성숙** | OfficeCLI 설치, smoke test, 로컬 바이너리, Office/PDF 워크플로가 `v1.2.0` 대비 훨씬 실전형이 되었습니다. |
|
|
212
219
|
|
|
213
220
|
---
|
|
214
221
|
|
|
@@ -234,7 +241,7 @@ graph LR
|
|
|
234
241
|
- 🎭 **멀티 에이전트 오케스트레이션** — 복잡한 작업은 전문화된 서브 에이전트들에게 자동으로 분산됩니다.
|
|
235
242
|
- 🎤 **음성 입력** — 웹 마이크 버튼 + 텔레그램 음성 메시지. 멀티 프로바이더 STT (OpenAI, Vertex AI).
|
|
236
243
|
- 📝 **프롬프트 템플릿** — 시각적 노드맵 에디터로 프롬프트 템플릿 생성, 관리, 재사용.
|
|
237
|
-
- 📦 **
|
|
244
|
+
- 📦 **100개+ 스킬** — 브라우저 제어, 파일 편집, 이미지 생성, 웹 검색 외 [다양한 기능](#-스킬-시스템).
|
|
238
245
|
- 🧠 **영구 메모리** — 세션을 넘나들며 과거의 대화와 사용자 선호도를 기억합니다.
|
|
239
246
|
- 📱 **텔레그램 봇** — 휴대폰으로 비서와 채팅하고, 음성/사진/파일을 전송하세요.
|
|
240
247
|
- 🌐 **브라우저 자동화** — 비서가 알아서 웹을 탐색하고, 클릭하고, 타이핑하고, 스크린샷을 찍을 수 있습니다.
|
|
@@ -257,7 +264,7 @@ jaw service install # 부팅 시 자동 실행 (systemd/launchd/docker 자동
|
|
|
257
264
|
|
|
258
265
|
## 📦 스킬 시스템
|
|
259
266
|
|
|
260
|
-
**
|
|
267
|
+
**100개+ 스킬** 내장 — 브라우저, GitHub, 노션, 텔레그램, 메모리, PDF, 이미지 생성 등 [다양하게](#).
|
|
261
268
|
|
|
262
269
|
<details>
|
|
263
270
|
<summary>전체 스킬 목록 보기</summary>
|
|
@@ -536,7 +543,7 @@ src/
|
|
|
536
543
|
## 🧪 테스트
|
|
537
544
|
|
|
538
545
|
<details>
|
|
539
|
-
<summary
|
|
546
|
+
<summary>현재 패스 수와 인벤토리는 TESTS.md 기준</summary>
|
|
540
547
|
|
|
541
548
|
```bash
|
|
542
549
|
npm test
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
*One assistant. Five brains. Always on.*
|
|
8
8
|
|
|
9
|
-
[](#-tests)
|
|
10
10
|
[](https://typescriptlang.org)
|
|
11
11
|
[](https://nodejs.org)
|
|
12
12
|
[](LICENSE)
|
|
@@ -184,7 +184,7 @@ CLI-JAW is a **personal AI assistant** that lives on your machine and works from
|
|
|
184
184
|
> 💬 *"Refactor this module and write tests"* → sub-agents handle it while you grab coffee
|
|
185
185
|
> 💬 *"Download that PDF and put the key points in Notion"* → browser + Notion skill, done
|
|
186
186
|
|
|
187
|
-
Unlike single-model assistants, CLI-JAW orchestrates **5 AI engines** (Claude, Codex, Gemini, OpenCode, Copilot) through their official CLIs — giving you the best of every provider in one unified experience. If one engine is busy, it automatically falls back to the next.
|
|
187
|
+
Unlike single-model assistants, CLI-JAW orchestrates **5 AI engines** (Claude, Codex, Gemini, OpenCode, Copilot) through their official CLIs — giving you the best of every provider in one unified experience. If one engine is busy, it automatically falls back to the next. **100+ built-in skills** handle everything from browser automation to document generation.
|
|
188
188
|
|
|
189
189
|
| | Why CLI-JAW? |
|
|
190
190
|
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -192,25 +192,32 @@ Unlike single-model assistants, CLI-JAW orchestrates **5 AI engines** (Claude, C
|
|
|
192
192
|
| 🤖**Verified Agent Tools** | 5 battle-tested coding agents (Claude, Codex, Gemini, OpenCode, Copilot) under one roof. |
|
|
193
193
|
| ⚡**Multi-Agent Fallback** | One engine down? The next picks up automatically. Zero downtime. |
|
|
194
194
|
| 🎭**PABCD Orchestration** | DB-persisted FSM pipeline — Plan → Audit → Build → Check → Done. Workers are read-only. You approve every phase. |
|
|
195
|
-
| 📦**
|
|
195
|
+
| 📦**100+ Built-in Skills** | Browser automation, document generation, Telegram/Discord, memory — ready out of the box. |
|
|
196
196
|
| 🖥️**Cross-Platform** | macOS, Linux, Windows — ENOENT-safe CLI spawn, auto-detection,`.cmd` shim support, and native install all work across platforms. |
|
|
197
197
|
|
|
198
198
|

|
|
199
199
|
|
|
200
200
|
---
|
|
201
201
|
|
|
202
|
-
## 🆕 What's New (v1.
|
|
202
|
+
## 🆕 What's New (v1.6.0)
|
|
203
203
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
|
212
|
-
|
|
|
213
|
-
|
|
|
204
|
+
`v1.6.0` is the documentation catch-up release that finally summarizes the major product expansion that happened after `v1.2.0`.
|
|
205
|
+
|
|
206
|
+
- Full update log: [CHANGELOG.md](CHANGELOG.md#160---2026-04-13)
|
|
207
|
+
- Range covered: `v1.2.0` → `v1.5.1`
|
|
208
|
+
- Scope: `59` commits, `307` files changed, `32,760` insertions, `4,263` deletions
|
|
209
|
+
- Theme: CLI-JAW grew from a capable personal assistant into a broader operating environment with richer orchestration, memory, channels, UI, and release tooling
|
|
210
|
+
|
|
211
|
+
| Feature | Description |
|
|
212
|
+
| ------- | ----------- |
|
|
213
|
+
| 🎭 **PABCD Orchestration** | Orchestration is now a first-class surface: `jaw dispatch`, `jaw orchestrate`, persisted PABCD state, worker registry, research dispatch, and live orchestration status in the product. |
|
|
214
|
+
| 🧠 **Structured Memory Runtime** | Memory moved beyond plain persistence into a layered indexed subsystem: structured storage, bootstrap/migration, SQLite FTS5 indexing, query expansion, task snapshots, and UI controls for audit/reindex flows. |
|
|
215
|
+
| 💬 **Discord + Voice Channels** | CLI-JAW now works across Web, Terminal, Telegram, and Discord. Voice/STT also became a first-class workflow with web recording, Telegram voice handling, and provider-configurable transcription. |
|
|
216
|
+
| 🖥️ **Major Web UI Expansion** | The web app gained richer settings panes, memory and heartbeat controls, tool UI, provider icons, gesture handling, drag/drop protections, stronger streaming render behavior, and virtual scrolling. |
|
|
217
|
+
| 📊 **Diagram & Widget Rendering** | Inline diagrams and sandboxed widget rendering became visible product features, backed by dedicated iframe rendering, validation, and CSS/runtime updates. |
|
|
218
|
+
| ⌨️ **CLI/TUI Usability Pass** | Terminal workflows now include `/compact`, better overlays and selectors, session persistence, resume classification, readiness checks, and more stable command handling. |
|
|
219
|
+
| 🧪 **Ops, CI, and Installability** | `jaw doctor`, browser launch policy, skill reset/fallback behavior, submodule-safe CI, preview releases, Vite-based frontend delivery, service worker assets, and stronger install troubleshooting all improved. |
|
|
220
|
+
| 📄 **Office Automation Maturity** | OfficeCLI integration, smoke tests, local binaries, and Office/PDF workflows are much more production-ready than they were at `v1.2.0`. |
|
|
214
221
|
|
|
215
222
|
---
|
|
216
223
|
|
|
@@ -236,7 +243,7 @@ graph LR
|
|
|
236
243
|
- 🎭 **Multi-agent orchestration** — Complex tasks get split across specialized sub-agents automatically.
|
|
237
244
|
- 🎤 **Voice input** — Mic button on the web + Telegram voice messages. Multi-provider STT (OpenAI, Vertex AI).
|
|
238
245
|
- 📝 **Prompt templates** — Create, manage, and reuse prompt templates with a visual node-map editor.
|
|
239
|
-
- 📦 **
|
|
246
|
+
- 📦 **100+ skills** — Browser control, file editing, image generation, web search, and [much more](#-skill-system).
|
|
240
247
|
- 🧠 **Persistent memory** — Your assistant remembers past conversations and preferences across sessions.
|
|
241
248
|
- 📱 **Telegram bot** — Chat with your assistant from your phone, send voice/photos/files.
|
|
242
249
|
- 🌐 **Browser automation** — Your assistant can navigate the web, click, type, and screenshot.
|
|
@@ -248,7 +255,7 @@ graph LR
|
|
|
248
255
|
|
|
249
256
|
## 📦 Skill System
|
|
250
257
|
|
|
251
|
-
**
|
|
258
|
+
**100+ skills** out of the box — browser, github, notion, telegram, memory, pdf, image generation, and [much more](#).
|
|
252
259
|
|
|
253
260
|
<details>
|
|
254
261
|
<summary>View all skills</summary>
|
|
@@ -589,7 +596,7 @@ src/
|
|
|
589
596
|
## 🧪 Tests
|
|
590
597
|
|
|
591
598
|
<details>
|
|
592
|
-
<summary>
|
|
599
|
+
<summary>See TESTS.md for current pass counts and inventory</summary>
|
|
593
600
|
|
|
594
601
|
```bash
|
|
595
602
|
npm test
|
|
@@ -605,10 +612,12 @@ All tests run via `tsx --test` (native Node.js test runner + TypeScript).
|
|
|
605
612
|
|
|
606
613
|
## 📖 Documentation
|
|
607
614
|
|
|
608
|
-
| Document
|
|
609
|
-
|
|
|
615
|
+
| Document | What's inside |
|
|
616
|
+
| -------- | ------------- |
|
|
617
|
+
| [CHANGELOG.md](CHANGELOG.md) | Long-form release log, including the `v1.6.0` catch-up notes covering `v1.2.0` → `v1.5.1` |
|
|
610
618
|
| [ARCHITECTURE.md](docs/ARCHITECTURE.md) | System design, module graph, REST API (40+ endpoints) |
|
|
611
|
-
| [TESTS.md](TESTS.md)
|
|
619
|
+
| [TESTS.md](TESTS.md) | Test coverage, current counts, and test plan |
|
|
620
|
+
| [memory-architecture.md](docs/memory-architecture.md) | Structured memory model, indexing, and runtime behavior |
|
|
612
621
|
|
|
613
622
|
---
|
|
614
623
|
|
package/README.zh-CN.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
*Claude、Codex、Gemini... 从此告别来回切换。*
|
|
8
8
|
|
|
9
|
-
[](#-测试)
|
|
10
10
|
[](https://typescriptlang.org)
|
|
11
11
|
[](https://nodejs.org)
|
|
12
12
|
[](LICENSE)
|
|
@@ -182,7 +182,7 @@ CLI-JAW 是驻留在您本地机器上的**专属 AI 助手**,并在您熟悉
|
|
|
182
182
|
> 💬 *"重构这个模块,顺便写好测试"* → 子 Agent 搞定,你喝杯咖啡回来就行
|
|
183
183
|
> 💬 *"把那个 PDF 下载下来,关键信息放到 Notion 里"* → 浏览器 + Notion 技能组合,搞定
|
|
184
184
|
|
|
185
|
-
与单一模型的助手不同,CLI-JAW 通过官方 CLI 命令行工具对 **5 大 AI 引擎**(Claude、Codex、Gemini、OpenCode、Copilot)进行编排 —
|
|
185
|
+
与单一模型的助手不同,CLI-JAW 通过官方 CLI 命令行工具对 **5 大 AI 引擎**(Claude、Codex、Gemini、OpenCode、Copilot)进行编排 — 为您提供各大供应商最优势的能力及统一的体验。当一个引擎处于繁忙状态时,它会自动无缝切换至下一个。**100+ 内置技能**可处理从浏览器自动化到文档生成的广泛任务。
|
|
186
186
|
|
|
187
187
|
| | 为什么选择 CLI-JAW? |
|
|
188
188
|
| ------------------------------- | ------------------------------------------------------------------------------------- |
|
|
@@ -190,25 +190,32 @@ CLI-JAW 是驻留在您本地机器上的**专属 AI 助手**,并在您熟悉
|
|
|
190
190
|
| 🤖 **经过验证的智能体工具** | 5 大实战级编码智能体(Claude、Codex、Gemini、OpenCode、Copilot)集于一身。 |
|
|
191
191
|
| ⚡ **多模型自动回退 (Fallback)** | 单一引擎发生故障?下一个立即接管。确保零停机。 |
|
|
192
192
|
| 🎭 **基于编排的性能优化** | 复杂的任务会被拆分给专业的子智能体,以实现效率最大化。 |
|
|
193
|
-
| 📦 **
|
|
193
|
+
| 📦 **100+ 个内置技能** | 浏览器自动化、文档生成、Telegram 通知、持久化记忆 — 开箱即用。 |
|
|
194
194
|
| 🖥️ **跨平台支持** | macOS、Linux、Windows — ENOENT-safe CLI 启动、自动检测、`.cmd` 支持,跨平台原生运行。 |
|
|
195
195
|
|
|
196
196
|

|
|
197
197
|
|
|
198
198
|
---
|
|
199
199
|
|
|
200
|
-
## 🆕 新功能 (v1.
|
|
200
|
+
## 🆕 新功能 (v1.6.0)
|
|
201
201
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
|
210
|
-
|
|
|
211
|
-
|
|
|
202
|
+
`v1.6.0` 是一次文档补票式发布,用来首次完整总结 `v1.2.0` 之后累计的大量产品变化。
|
|
203
|
+
|
|
204
|
+
- 完整更新日志:[CHANGELOG.md](CHANGELOG.md#160---2026-04-13)
|
|
205
|
+
- 覆盖范围:`v1.2.0` → `v1.5.1`
|
|
206
|
+
- 规模:`59` commits,`307` files changed,`32,760` insertions,`4,263` deletions
|
|
207
|
+
- 核心主题:编排、结构化记忆、Discord/语音通道、更强的 UI、图表/组件渲染、发布与运维工具链全面增强
|
|
208
|
+
|
|
209
|
+
| 功能 | 说明 |
|
|
210
|
+
| ---- | ---- |
|
|
211
|
+
| 🎭 **PABCD 编排能力** | `jaw dispatch`、`jaw orchestrate`、持久化状态机、worker registry、research dispatch、Web UI 状态展示都成为正式产品表面。 |
|
|
212
|
+
| 🧠 **结构化记忆运行时** | 记忆系统从简单持久化扩展为带结构化存储、索引、查询扩展、task snapshot、审计/重建索引控制的完整子系统。 |
|
|
213
|
+
| 💬 **Discord + 语音通道** | CLI-JAW 不再只限于 Web / Terminal / Telegram,Discord 与语音/STT 也成为一等工作流。 |
|
|
214
|
+
| 🖥️ **大幅扩展的 Web UI** | 设置面板、记忆/心跳控制、tool UI、provider icon、手势、拖拽保护、virtual scroll 与渲染行为都明显增强。 |
|
|
215
|
+
| 📊 **图表与组件渲染** | iframe renderer、validator 与专用 CSS 让内联图表/组件渲染成为可见功能族,而非单纯实现细节。 |
|
|
216
|
+
| ⌨️ **CLI/TUI 可用性提升** | `/compact`、overlay/selector、session persistence、resume classification、readiness 检查等都明显改善了终端体验。 |
|
|
217
|
+
| 🧪 **运维 / CI / 安装增强** | `jaw doctor`、browser launch policy、skill reset/fallback、submodule-safe CI、preview release、Vite 构建链都得到强化。 |
|
|
218
|
+
| 📄 **Office 自动化成熟** | OfficeCLI 安装、smoke test、本地二进制与 Office/PDF 工作流相比 `v1.2.0` 更接近生产级。 |
|
|
212
219
|
|
|
213
220
|
---
|
|
214
221
|
|
|
@@ -234,7 +241,7 @@ graph LR
|
|
|
234
241
|
- 🎭 **多智能体编排** — 复杂任务会自动拆分给专业的子智能体并行处理。
|
|
235
242
|
- 🎤 **语音输入** — Web 麦克风按钮 + Telegram 语音消息。多供应商 STT(OpenAI、Vertex AI)。
|
|
236
243
|
- 📝 **提示词模板** — 使用可视化节点地图编辑器创建、管理和复用提示词模板。
|
|
237
|
-
- 📦 **
|
|
244
|
+
- 📦 **100+ 个技能** — 浏览器控制、文件编辑、图片生成、网页搜索以及[更多功能](#-技能系统)。
|
|
238
245
|
- 🧠 **持久化记忆** — 跨越不同会话,记住您过往的对话和偏好设定。
|
|
239
246
|
- 📱 **Telegram 机器人** — 通过手机即可与您的助手聊天、发送语音/图片/文件。
|
|
240
247
|
- 🌐 **浏览器自动化** — 您的助手能够自动导航网页、点击、打字并进行截图。
|
|
@@ -257,7 +264,7 @@ jaw service install # 开机自动启动 (systemd/launchd/docker 自动检测)
|
|
|
257
264
|
|
|
258
265
|
## 📦 技能系统
|
|
259
266
|
|
|
260
|
-
**
|
|
267
|
+
**100+ 个技能**开箱即用 — 浏览器、GitHub、Notion、Telegram、记忆、PDF、图片生成等[应有尽有](#)。
|
|
261
268
|
|
|
262
269
|
<details>
|
|
263
270
|
<summary>查看全部技能</summary>
|
|
@@ -536,7 +543,7 @@ src/
|
|
|
536
543
|
## 🧪 测试
|
|
537
544
|
|
|
538
545
|
<details>
|
|
539
|
-
<summary
|
|
546
|
+
<summary>当前通过数与清单请以 TESTS.md 为准</summary>
|
|
540
547
|
|
|
541
548
|
```bash
|
|
542
549
|
npm test
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
// Dispatches a jaw employee via the server API (pipe-mode compatible).
|
|
4
4
|
import { loadSettings, getServerUrl } from '../../src/core/config.js';
|
|
5
5
|
loadSettings();
|
|
6
|
+
if (process.env.JAW_EMPLOYEE_MODE === '1') {
|
|
7
|
+
console.error('❌ jaw employee sessions cannot dispatch other employees. Complete the assigned task directly.');
|
|
8
|
+
process.exit(2);
|
|
9
|
+
}
|
|
6
10
|
const portIdx = process.argv.indexOf('--port');
|
|
7
11
|
const PORT = (portIdx !== -1 && process.argv[portIdx + 1]) ? process.argv[portIdx + 1] : undefined;
|
|
8
12
|
const BASE = getServerUrl(PORT);
|
|
@@ -24,7 +28,10 @@ try {
|
|
|
24
28
|
console.log(`🚀 Dispatching to ${agent}...`);
|
|
25
29
|
const res = await fetch(`${BASE}/api/orchestrate/dispatch`, {
|
|
26
30
|
method: 'POST',
|
|
27
|
-
headers: {
|
|
31
|
+
headers: {
|
|
32
|
+
'Content-Type': 'application/json',
|
|
33
|
+
'X-Jaw-Dispatch-Source': process.env.JAW_EMPLOYEE_MODE === '1' ? 'employee' : 'boss',
|
|
34
|
+
},
|
|
28
35
|
body: JSON.stringify({ agent, task }),
|
|
29
36
|
});
|
|
30
37
|
const body = await res.json();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../bin/commands/dispatch.ts"],"names":[],"mappings":";AACA,4EAA4E;AAC5E,uEAAuE;AAEvE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEtE,YAAY,EAAE,CAAC;AAEf,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC/C,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnG,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AAEhC,SAAS,OAAO,CAAC,IAAY;IACzB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3D,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACjC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE/B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACrF,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,IAAI,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,KAAK,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,2BAA2B,EAAE;QACxD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../bin/commands/dispatch.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -37,7 +37,7 @@ import { getState, getCtx, setState, resetState, canTransition } from './src/orc
|
|
|
37
37
|
import { resolveOrcScope } from './src/orchestrator/scope.js';
|
|
38
38
|
import { listActiveOrcStates } from './src/core/db.js';
|
|
39
39
|
import { submitMessage } from './src/orchestrator/gateway.js';
|
|
40
|
-
import { getActiveWorkers, claimWorker, finishWorker, failWorker } from './src/orchestrator/worker-registry.js';
|
|
40
|
+
import { getActiveWorkers, claimWorker, finishWorker, failWorker, markWorkerReplayed } from './src/orchestrator/worker-registry.js';
|
|
41
41
|
import { findEmployee, runSingleAgent } from './src/orchestrator/distribute.js';
|
|
42
42
|
import { makeCommandCtx } from './src/cli/command-context.js';
|
|
43
43
|
import { telegramBot, telegramActiveChatIds } from './src/telegram/bot.js';
|
|
@@ -47,7 +47,6 @@ import { sendChannelOutput, normalizeChannelSendRequest } from './src/messaging/
|
|
|
47
47
|
import { startHeartbeat, stopHeartbeat, watchHeartbeatFile } from './src/memory/heartbeat.js';
|
|
48
48
|
import { validateHeartbeatScheduleInput } from './src/memory/heartbeat-schedule.js';
|
|
49
49
|
import { fetchCopilotQuota, refreshCopilotFromKeychain } from './lib/quota-copilot.js';
|
|
50
|
-
import { startTokenKeepAlive } from './lib/token-keepalive.js';
|
|
51
50
|
import { CLI_REGISTRY } from './src/cli/registry.js';
|
|
52
51
|
import { clearMainSessionState, syncMainSessionToSettings, resetSessionPreservingHistory } from './src/core/main-session.js';
|
|
53
52
|
import { applyRuntimeSettingsPatch } from './src/core/runtime-settings.js';
|
|
@@ -365,6 +364,9 @@ app.get('/api/orchestrate/snapshot', (_req, res) => {
|
|
|
365
364
|
});
|
|
366
365
|
// ─── Dispatch: pipe-mode employee dispatch ──────────
|
|
367
366
|
app.post('/api/orchestrate/dispatch', async (req, res) => {
|
|
367
|
+
if (String(req.headers['x-jaw-dispatch-source'] || '').toLowerCase() === 'employee') {
|
|
368
|
+
return fail(res, 409, 'Employee self-dispatch is blocked in employee sessions');
|
|
369
|
+
}
|
|
368
370
|
const { agent: agentName, task } = req.body || {};
|
|
369
371
|
if (!agentName || !task)
|
|
370
372
|
return fail(res, 400, 'Missing agent or task');
|
|
@@ -382,6 +384,7 @@ app.post('/api/orchestrate/dispatch', async (req, res) => {
|
|
|
382
384
|
};
|
|
383
385
|
const result = await runSingleAgent(ap, emp, {}, 1, { origin: 'api' }, []);
|
|
384
386
|
finishWorker(slot.agentId, result.text || '');
|
|
387
|
+
markWorkerReplayed(slot.agentId);
|
|
385
388
|
res.json({ ok: true, result });
|
|
386
389
|
}
|
|
387
390
|
catch (err) {
|
|
@@ -1119,7 +1122,6 @@ server.listen(PORT, () => {
|
|
|
1119
1122
|
console.error('[messaging:boot]', e.message);
|
|
1120
1123
|
});
|
|
1121
1124
|
startHeartbeat();
|
|
1122
|
-
startTokenKeepAlive();
|
|
1123
1125
|
// ─── Seed default employees if none exist ────────
|
|
1124
1126
|
const seeded = seedDefaultEmployees();
|
|
1125
1127
|
if (seeded.seeded > 0) {
|