quadwork 1.19.2 → 2.0.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.md +19 -35
- package/bin/quadwork.js +48 -1118
- package/out/404.html +1 -1
- package/out/__next.__PAGE__.txt +3 -3
- package/out/__next._full.txt +14 -14
- package/out/__next._head.txt +4 -4
- package/out/__next._index.txt +8 -8
- package/out/__next._tree.txt +2 -2
- package/out/_next/static/chunks/{030cjkhts487t.js → 079wdniva~de1.js} +1 -1
- package/out/_next/static/chunks/{0n~dq4kpx9xxx.js → 07lhk_q6pmm3r.js} +1 -1
- package/out/_next/static/chunks/0_79hkefw1mo2.js +1 -0
- package/out/_next/static/chunks/{153f.fj8jlvle.js → 0_lyyn..t63bc.js} +1 -1
- package/out/_next/static/chunks/0oxv9vrvc17to.js +2 -0
- package/out/_next/static/chunks/0py7102i226n5.js +1 -0
- package/out/_next/static/chunks/{13fv-yi7.v52g.js → 0q4bm04c1jl_3.js} +1 -1
- package/out/_next/static/chunks/{0_idxioyl0p7h.js → 0sjhy6oe3mbon.js} +1 -1
- package/out/_next/static/chunks/13xk0vgfbrcld.css +2 -0
- package/out/_next/static/chunks/14k3bfe537f9_.js +25 -0
- package/out/_next/static/chunks/{turbopack-0qm-e3ifrz~2u.js → turbopack-0y2u-q0l2m67w.js} +1 -1
- package/out/_not-found/__next._full.txt +13 -13
- package/out/_not-found/__next._head.txt +4 -4
- package/out/_not-found/__next._index.txt +8 -8
- package/out/_not-found/__next._not-found.__PAGE__.txt +2 -2
- package/out/_not-found/__next._not-found.txt +3 -3
- package/out/_not-found/__next._tree.txt +2 -2
- package/out/_not-found.html +1 -1
- package/out/_not-found.txt +13 -13
- package/out/app-shell/__next._full.txt +13 -13
- package/out/app-shell/__next._head.txt +4 -4
- package/out/app-shell/__next._index.txt +8 -8
- package/out/app-shell/__next._tree.txt +2 -2
- package/out/app-shell/__next.app-shell.__PAGE__.txt +2 -2
- package/out/app-shell/__next.app-shell.txt +3 -3
- package/out/app-shell.html +1 -1
- package/out/app-shell.txt +13 -13
- package/out/index.html +1 -1
- package/out/index.txt +14 -14
- package/out/project/_/__next._full.txt +14 -14
- package/out/project/_/__next._head.txt +4 -4
- package/out/project/_/__next._index.txt +8 -8
- package/out/project/_/__next._tree.txt +2 -2
- package/out/project/_/__next.project.$d$id.__PAGE__.txt +3 -3
- package/out/project/_/__next.project.$d$id.txt +3 -3
- package/out/project/_/__next.project.txt +3 -3
- package/out/project/_/queue/__next._full.txt +14 -14
- package/out/project/_/queue/__next._head.txt +4 -4
- package/out/project/_/queue/__next._index.txt +8 -8
- package/out/project/_/queue/__next._tree.txt +2 -2
- package/out/project/_/queue/__next.project.$d$id.queue.__PAGE__.txt +3 -3
- package/out/project/_/queue/__next.project.$d$id.queue.txt +3 -3
- package/out/project/_/queue/__next.project.$d$id.txt +3 -3
- package/out/project/_/queue/__next.project.txt +3 -3
- package/out/project/_/queue.html +1 -1
- package/out/project/_/queue.txt +14 -14
- package/out/project/_.html +1 -1
- package/out/project/_.txt +14 -14
- package/out/settings/__next._full.txt +14 -14
- package/out/settings/__next._head.txt +4 -4
- package/out/settings/__next._index.txt +8 -8
- package/out/settings/__next._tree.txt +2 -2
- package/out/settings/__next.settings.__PAGE__.txt +3 -3
- package/out/settings/__next.settings.txt +3 -3
- package/out/settings.html +1 -1
- package/out/settings.txt +14 -14
- package/out/setup/__next._full.txt +14 -14
- package/out/setup/__next._head.txt +4 -4
- package/out/setup/__next._index.txt +8 -8
- package/out/setup/__next._tree.txt +2 -2
- package/out/setup/__next.setup.__PAGE__.txt +3 -3
- package/out/setup/__next.setup.txt +3 -3
- package/out/setup.html +1 -1
- package/out/setup.txt +14 -14
- package/package.json +4 -2
- package/server/ac-restore.js +128 -0
- package/server/bridges/discord.js +183 -0
- package/server/bridges/telegram.js +210 -0
- package/server/config.js +4 -60
- package/server/file-chat.js +318 -0
- package/server/index.js +173 -1286
- package/server/install-agentchattr.js +3 -284
- package/server/mcp-chat-shim.js +171 -0
- package/server/migrate-ac.js +158 -0
- package/server/pty-dispatcher.js +188 -0
- package/server/routes.js +149 -1397
- package/templates/CLAUDE.md +2 -2
- package/templates/OVERNIGHT-QUEUE.md +1 -1
- package/templates/seeds/butler.CLAUDE.md +30 -62
- package/templates/seeds/dev.AGENTS.md +10 -1
- package/templates/seeds/head.AGENTS.md +3 -3
- package/templates/seeds/re1.AGENTS.md +3 -3
- package/templates/seeds/re2.AGENTS.md +3 -3
- package/bridges/discord/__pycache__/discord_bridge.cpython-314.pyc +0 -0
- package/bridges/discord/discord_bridge.py +0 -666
- package/bridges/discord/requirements.txt +0 -2
- package/out/_next/static/chunks/0_bb~2.5h2ntm.css +0 -2
- package/out/_next/static/chunks/0makcdqkwobp6.js +0 -25
- package/out/_next/static/chunks/0uz5svjlo9dwl.js +0 -1
- package/out/_next/static/chunks/0zahstmgdrpy5.js +0 -1
- package/out/_next/static/chunks/0zfotsowwll1x.js +0 -2
- package/server/__tests__/bridge-auto-stop-guard.test.js +0 -134
- package/server/__tests__/rate-limit-handling.test.js +0 -168
- package/server/__tests__/scrub-secrets.test.js +0 -235
- package/server/__tests__/v1110-security-qa.test.js +0 -312
- package/server/agentchattr-registry.js +0 -188
- package/server/install-agentchattr.patchCrashTimeout.test.js +0 -71
- package/server/queue-watcher.js +0 -171
- package/server/queue-watcher.test.js +0 -64
- package/server/routes.batchProgress.test.js +0 -94
- package/server/routes.chatWsSend.test.js +0 -161
- package/server/routes.discordBridge.test.js +0 -80
- package/server/routes.parseActiveBatch.test.js +0 -88
- package/server/routes.telegramBridge.test.js +0 -241
- package/templates/config.toml +0 -72
- package/templates/wrapper.py +0 -70
- /package/out/_next/static/{K7A3YZrh4sLaRRP1-Lq7v → 479UD5Kit4YvCmtgO25VT}/_buildManifest.js +0 -0
- /package/out/_next/static/{K7A3YZrh4sLaRRP1-Lq7v → 479UD5Kit4YvCmtgO25VT}/_clientMiddlewareManifest.js +0 -0
- /package/out/_next/static/{K7A3YZrh4sLaRRP1-Lq7v → 479UD5Kit4YvCmtgO25VT}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -11,8 +11,7 @@
|
|
|
11
11
|
<a href="#-quick-start"><strong>Quick Start</strong></a> ·
|
|
12
12
|
<a href="#-how-it-works"><strong>How it Works</strong></a> ·
|
|
13
13
|
<a href="#-features"><strong>Features</strong></a> ·
|
|
14
|
-
<a href="#-external-tools"><strong>Credits</strong></a>
|
|
15
|
-
<a href="https://github.com/bcurts/agentchattr"><strong>Built on AgentChattr</strong></a>
|
|
14
|
+
<a href="#-external-tools"><strong>Credits</strong></a>
|
|
16
15
|
</p>
|
|
17
16
|
|
|
18
17
|
<p>
|
|
@@ -21,7 +20,6 @@
|
|
|
21
20
|
<img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey" alt="platform" />
|
|
22
21
|
<img src="https://img.shields.io/badge/runs-locally-00d4aa" alt="runs locally" />
|
|
23
22
|
<img src="https://img.shields.io/badge/team-Head%20%C2%B7%20Dev%20%C2%B7%20RE1%20%C2%B7%20RE2-orange" alt="team: Head · Dev · RE1 · RE2" />
|
|
24
|
-
<a href="https://github.com/bcurts/agentchattr"><img src="https://img.shields.io/badge/built_on-AgentChattr-8b5cf6" alt="AgentChattr" /></a>
|
|
25
23
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License" /></a>
|
|
26
24
|
</p>
|
|
27
25
|
|
|
@@ -103,7 +101,7 @@ npx quadwork init
|
|
|
103
101
|
|
|
104
102
|
4. The wizard installs everything else and opens your dashboard.
|
|
105
103
|
|
|
106
|
-
That's it. The wizard handles
|
|
104
|
+
That's it. The wizard handles GitHub CLI, AI tools, and
|
|
107
105
|
authentication — you just follow the prompts. Subsequent runs are one
|
|
108
106
|
command: `npx quadwork start`.
|
|
109
107
|
|
|
@@ -167,7 +165,7 @@ Head: merges, picks the next issue
|
|
|
167
165
|
- 📲 **Telegram bridge** — mirror the chat to your phone for remote monitoring
|
|
168
166
|
- 💬 **Discord bridge** — forward agent chat to a Discord channel for team visibility
|
|
169
167
|
- 💾 **Project history export/import** — JSON snapshots of the full chat transcript
|
|
170
|
-
- 🧯 **Loop Guard control** — raise the hop limit and auto-resume stuck chains
|
|
168
|
+
- 🧯 **Loop Guard control** — raise the hop limit and auto-resume stuck chains
|
|
171
169
|
- 🔔 **Notification sounds** — Web Audio chime on new agent messages with a background-only mode
|
|
172
170
|
- 🎞️ **Current Batch Progress panel** — per-issue progress bars computed from live GitHub state
|
|
173
171
|
- 🗂️ **Recently closed / merged feed** — so finished work doesn't disappear from the GitHub panel
|
|
@@ -175,7 +173,7 @@ Head: merges, picks the next issue
|
|
|
175
173
|
|
|
176
174
|
### Workflow
|
|
177
175
|
|
|
178
|
-
- 🧭 **Multi-project support** — each project has its own
|
|
176
|
+
- 🧭 **Multi-project support** — each project has its own chat instance + isolated worktrees
|
|
179
177
|
- 📝 **Per-project `OVERNIGHT-QUEUE.md`** with auto-incrementing batch numbers
|
|
180
178
|
- 💬 **Slash commands** — `/continue`, `/clear`, `/summary`, `/poetry`, `/roastreview`
|
|
181
179
|
- 🏷️ **Chat polish** — threaded replies, colored `@mentions`, short reviewer labels (RE1/RE2)
|
|
@@ -186,16 +184,15 @@ Head: merges, picks the next issue
|
|
|
186
184
|
- 🚧 **GitHub branch protection** enforced on `main`
|
|
187
185
|
- ✅ **2-of-2 reviewer approval** required before merge
|
|
188
186
|
- 🛑 **Sender lockdown** — chat POSTs can't impersonate an agent (`head`, `dev`, …) from the UI
|
|
189
|
-
- 🗄️ **Auto-snapshot** of chat history to `~/.quadwork/{project}/history-snapshots/`
|
|
187
|
+
- 🗄️ **Auto-snapshot** of chat history to `~/.quadwork/{project}/history-snapshots/` with an in-dashboard **Restore** button
|
|
190
188
|
|
|
191
189
|
## ─ External Tools
|
|
192
190
|
|
|
193
191
|
QuadWork stands on top of some great open-source work. Explicit thanks:
|
|
194
192
|
|
|
195
193
|
- **[AgentChattr](https://github.com/bcurts/agentchattr)** — by [@bcurts](https://github.com/bcurts).
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
bcurts for building such a clean foundation.
|
|
194
|
+
QuadWork's file-based chat system was originally inspired by AgentChattr.
|
|
195
|
+
Thanks to bcurts for the foundational ideas.
|
|
199
196
|
- **[GitHub CLI (`gh`)](https://cli.github.com)** — used by all four agents
|
|
200
197
|
for issues, PRs, reviews, and merges.
|
|
201
198
|
- **[Claude Code](https://github.com/anthropics/claude-code)** — Anthropic's
|
|
@@ -210,9 +207,8 @@ QuadWork stands on top of some great open-source work. Explicit thanks:
|
|
|
210
207
|
|
|
211
208
|
## ─ Configuration
|
|
212
209
|
|
|
213
|
-
Global config lives at `~/.quadwork/config.json`.
|
|
214
|
-
|
|
215
|
-
project queue lives at `~/.quadwork/{project_id}/OVERNIGHT-QUEUE.md`.
|
|
210
|
+
Global config lives at `~/.quadwork/config.json`. The per-project queue
|
|
211
|
+
lives at `~/.quadwork/{project_id}/OVERNIGHT-QUEUE.md`.
|
|
216
212
|
|
|
217
213
|
```json
|
|
218
214
|
{
|
|
@@ -224,7 +220,6 @@ project queue lives at `~/.quadwork/{project_id}/OVERNIGHT-QUEUE.md`.
|
|
|
224
220
|
"name": "My Project",
|
|
225
221
|
"repo": "owner/repo",
|
|
226
222
|
"working_dir": "/path/to/project",
|
|
227
|
-
"agentchattr_url": "http://127.0.0.1:8300",
|
|
228
223
|
"mcp_http_port": 8200,
|
|
229
224
|
"mcp_sse_port": 8201,
|
|
230
225
|
"auto_continue_loop_guard": false,
|
|
@@ -241,7 +236,7 @@ project queue lives at `~/.quadwork/{project_id}/OVERNIGHT-QUEUE.md`.
|
|
|
241
236
|
}
|
|
242
237
|
```
|
|
243
238
|
|
|
244
|
-
Each project gets its own
|
|
239
|
+
Each project gets its own chat instance, MCP ports, and git worktrees.
|
|
245
240
|
|
|
246
241
|
## ─ Architecture
|
|
247
242
|
|
|
@@ -249,10 +244,10 @@ QuadWork runs as a single Express server on `127.0.0.1:8400`:
|
|
|
249
244
|
|
|
250
245
|
- **Static frontend** — pre-built Next.js export (the `out/` directory)
|
|
251
246
|
- **REST API** — agent lifecycle, config, GitHub proxy, chat proxy, triggers, loop guard, batch progress, project history
|
|
252
|
-
- **WebSocket** — xterm.js terminal PTY sessions +
|
|
247
|
+
- **WebSocket** — xterm.js terminal PTY sessions + chat event fan-out
|
|
253
248
|
|
|
254
|
-
Per-project
|
|
255
|
-
|
|
249
|
+
Per-project chat data lives at `~/.quadwork/{project}/chat/`.
|
|
250
|
+
Per-project git worktrees sit next to the repo:
|
|
256
251
|
`{repo}-head`, `{repo}-dev`, `{repo}-re1`, `{repo}-re2`. The
|
|
257
252
|
dashboard's xterm.js tiles attach to node-pty sessions over a WebSocket;
|
|
258
253
|
nothing about the agent state is held client-side.
|
|
@@ -264,28 +259,17 @@ nothing about the agent state is held client-side.
|
|
|
264
259
|
| `npx quadwork init` | One-time setup — installs prerequisites, opens the dashboard |
|
|
265
260
|
| `npx quadwork start` | Start the dashboard server |
|
|
266
261
|
| `npx quadwork stop` | Stop all processes |
|
|
267
|
-
| `npx quadwork cleanup --project <id>` | Remove a project's
|
|
268
|
-
| `npx quadwork cleanup --legacy` | Remove
|
|
262
|
+
| `npx quadwork cleanup --project <id>` | Remove a project's data and config entry |
|
|
263
|
+
| `npx quadwork cleanup --legacy` | Remove legacy pre-v2 files |
|
|
269
264
|
|
|
270
265
|
After `init`, create projects from the web UI at `http://127.0.0.1:8400/setup`.
|
|
271
266
|
|
|
272
267
|
### Disk usage
|
|
273
268
|
|
|
274
|
-
Each project
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|---------:|-----:|
|
|
279
|
-
| 1 | ~77 MB |
|
|
280
|
-
| 5 | ~385 MB |
|
|
281
|
-
| 10 | ~770 MB |
|
|
282
|
-
|
|
283
|
-
Per-project clones are necessary so multiple projects can run AgentChattr
|
|
284
|
-
simultaneously without port conflicts. Existing v1 users are auto-migrated
|
|
285
|
-
to per-project clones on the next `npx quadwork start`; once every project
|
|
286
|
-
has a working clone, the legacy shared install can be removed safely via
|
|
287
|
-
`npx quadwork cleanup --legacy` (which refuses to run if any project is
|
|
288
|
-
still on the legacy install).
|
|
269
|
+
Each project stores its chat data at `~/.quadwork/{project_id}/chat/`.
|
|
270
|
+
Disk usage is minimal — chat logs are plain JSON files.
|
|
271
|
+
|
|
272
|
+
Existing v1 users can remove legacy files via `npx quadwork cleanup --legacy`.
|
|
289
273
|
|
|
290
274
|
## ─ Website
|
|
291
275
|
|