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.
Files changed (117) hide show
  1. package/README.md +19 -35
  2. package/bin/quadwork.js +48 -1118
  3. package/out/404.html +1 -1
  4. package/out/__next.__PAGE__.txt +3 -3
  5. package/out/__next._full.txt +14 -14
  6. package/out/__next._head.txt +4 -4
  7. package/out/__next._index.txt +8 -8
  8. package/out/__next._tree.txt +2 -2
  9. package/out/_next/static/chunks/{030cjkhts487t.js → 079wdniva~de1.js} +1 -1
  10. package/out/_next/static/chunks/{0n~dq4kpx9xxx.js → 07lhk_q6pmm3r.js} +1 -1
  11. package/out/_next/static/chunks/0_79hkefw1mo2.js +1 -0
  12. package/out/_next/static/chunks/{153f.fj8jlvle.js → 0_lyyn..t63bc.js} +1 -1
  13. package/out/_next/static/chunks/0oxv9vrvc17to.js +2 -0
  14. package/out/_next/static/chunks/0py7102i226n5.js +1 -0
  15. package/out/_next/static/chunks/{13fv-yi7.v52g.js → 0q4bm04c1jl_3.js} +1 -1
  16. package/out/_next/static/chunks/{0_idxioyl0p7h.js → 0sjhy6oe3mbon.js} +1 -1
  17. package/out/_next/static/chunks/13xk0vgfbrcld.css +2 -0
  18. package/out/_next/static/chunks/14k3bfe537f9_.js +25 -0
  19. package/out/_next/static/chunks/{turbopack-0qm-e3ifrz~2u.js → turbopack-0y2u-q0l2m67w.js} +1 -1
  20. package/out/_not-found/__next._full.txt +13 -13
  21. package/out/_not-found/__next._head.txt +4 -4
  22. package/out/_not-found/__next._index.txt +8 -8
  23. package/out/_not-found/__next._not-found.__PAGE__.txt +2 -2
  24. package/out/_not-found/__next._not-found.txt +3 -3
  25. package/out/_not-found/__next._tree.txt +2 -2
  26. package/out/_not-found.html +1 -1
  27. package/out/_not-found.txt +13 -13
  28. package/out/app-shell/__next._full.txt +13 -13
  29. package/out/app-shell/__next._head.txt +4 -4
  30. package/out/app-shell/__next._index.txt +8 -8
  31. package/out/app-shell/__next._tree.txt +2 -2
  32. package/out/app-shell/__next.app-shell.__PAGE__.txt +2 -2
  33. package/out/app-shell/__next.app-shell.txt +3 -3
  34. package/out/app-shell.html +1 -1
  35. package/out/app-shell.txt +13 -13
  36. package/out/index.html +1 -1
  37. package/out/index.txt +14 -14
  38. package/out/project/_/__next._full.txt +14 -14
  39. package/out/project/_/__next._head.txt +4 -4
  40. package/out/project/_/__next._index.txt +8 -8
  41. package/out/project/_/__next._tree.txt +2 -2
  42. package/out/project/_/__next.project.$d$id.__PAGE__.txt +3 -3
  43. package/out/project/_/__next.project.$d$id.txt +3 -3
  44. package/out/project/_/__next.project.txt +3 -3
  45. package/out/project/_/queue/__next._full.txt +14 -14
  46. package/out/project/_/queue/__next._head.txt +4 -4
  47. package/out/project/_/queue/__next._index.txt +8 -8
  48. package/out/project/_/queue/__next._tree.txt +2 -2
  49. package/out/project/_/queue/__next.project.$d$id.queue.__PAGE__.txt +3 -3
  50. package/out/project/_/queue/__next.project.$d$id.queue.txt +3 -3
  51. package/out/project/_/queue/__next.project.$d$id.txt +3 -3
  52. package/out/project/_/queue/__next.project.txt +3 -3
  53. package/out/project/_/queue.html +1 -1
  54. package/out/project/_/queue.txt +14 -14
  55. package/out/project/_.html +1 -1
  56. package/out/project/_.txt +14 -14
  57. package/out/settings/__next._full.txt +14 -14
  58. package/out/settings/__next._head.txt +4 -4
  59. package/out/settings/__next._index.txt +8 -8
  60. package/out/settings/__next._tree.txt +2 -2
  61. package/out/settings/__next.settings.__PAGE__.txt +3 -3
  62. package/out/settings/__next.settings.txt +3 -3
  63. package/out/settings.html +1 -1
  64. package/out/settings.txt +14 -14
  65. package/out/setup/__next._full.txt +14 -14
  66. package/out/setup/__next._head.txt +4 -4
  67. package/out/setup/__next._index.txt +8 -8
  68. package/out/setup/__next._tree.txt +2 -2
  69. package/out/setup/__next.setup.__PAGE__.txt +3 -3
  70. package/out/setup/__next.setup.txt +3 -3
  71. package/out/setup.html +1 -1
  72. package/out/setup.txt +14 -14
  73. package/package.json +4 -2
  74. package/server/ac-restore.js +128 -0
  75. package/server/bridges/discord.js +183 -0
  76. package/server/bridges/telegram.js +210 -0
  77. package/server/config.js +4 -60
  78. package/server/file-chat.js +318 -0
  79. package/server/index.js +173 -1286
  80. package/server/install-agentchattr.js +3 -284
  81. package/server/mcp-chat-shim.js +171 -0
  82. package/server/migrate-ac.js +158 -0
  83. package/server/pty-dispatcher.js +188 -0
  84. package/server/routes.js +149 -1397
  85. package/templates/CLAUDE.md +2 -2
  86. package/templates/OVERNIGHT-QUEUE.md +1 -1
  87. package/templates/seeds/butler.CLAUDE.md +30 -62
  88. package/templates/seeds/dev.AGENTS.md +10 -1
  89. package/templates/seeds/head.AGENTS.md +3 -3
  90. package/templates/seeds/re1.AGENTS.md +3 -3
  91. package/templates/seeds/re2.AGENTS.md +3 -3
  92. package/bridges/discord/__pycache__/discord_bridge.cpython-314.pyc +0 -0
  93. package/bridges/discord/discord_bridge.py +0 -666
  94. package/bridges/discord/requirements.txt +0 -2
  95. package/out/_next/static/chunks/0_bb~2.5h2ntm.css +0 -2
  96. package/out/_next/static/chunks/0makcdqkwobp6.js +0 -25
  97. package/out/_next/static/chunks/0uz5svjlo9dwl.js +0 -1
  98. package/out/_next/static/chunks/0zahstmgdrpy5.js +0 -1
  99. package/out/_next/static/chunks/0zfotsowwll1x.js +0 -2
  100. package/server/__tests__/bridge-auto-stop-guard.test.js +0 -134
  101. package/server/__tests__/rate-limit-handling.test.js +0 -168
  102. package/server/__tests__/scrub-secrets.test.js +0 -235
  103. package/server/__tests__/v1110-security-qa.test.js +0 -312
  104. package/server/agentchattr-registry.js +0 -188
  105. package/server/install-agentchattr.patchCrashTimeout.test.js +0 -71
  106. package/server/queue-watcher.js +0 -171
  107. package/server/queue-watcher.test.js +0 -64
  108. package/server/routes.batchProgress.test.js +0 -94
  109. package/server/routes.chatWsSend.test.js +0 -161
  110. package/server/routes.discordBridge.test.js +0 -80
  111. package/server/routes.parseActiveBatch.test.js +0 -88
  112. package/server/routes.telegramBridge.test.js +0 -241
  113. package/templates/config.toml +0 -72
  114. package/templates/wrapper.py +0 -70
  115. /package/out/_next/static/{K7A3YZrh4sLaRRP1-Lq7v → 479UD5Kit4YvCmtgO25VT}/_buildManifest.js +0 -0
  116. /package/out/_next/static/{K7A3YZrh4sLaRRP1-Lq7v → 479UD5Kit4YvCmtgO25VT}/_clientMiddlewareManifest.js +0 -0
  117. /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 Python, GitHub CLI, AI tools, and
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 without restarting AC
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 AgentChattr instance + isolated worktrees
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/` before every AgentChattr restart, with an in-dashboard **Restore** button and an optional auto-restore-on-restart opt-in
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
- The local chat server + MCP tooling that lets QuadWork's agents talk to
197
- each other. **QuadWork would not exist without it** — huge thanks to
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`. Per-project AgentChattr
214
- config lives at `~/.quadwork/{project_id}/agentchattr/config.toml`. The per-
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 AgentChattr instance, ports, and git worktrees.
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 + AgentChattr ws fan-out
247
+ - **WebSocket** — xterm.js terminal PTY sessions + chat event fan-out
253
248
 
254
- Per-project AgentChattr clones live at `~/.quadwork/{project}/agentchattr/`,
255
- each with their own ports. Per-project git worktrees sit next to the repo:
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 AgentChattr clone and config entry |
268
- | `npx quadwork cleanup --legacy` | Remove the legacy `~/.quadwork/agentchattr/` install after migration |
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 gets its own AgentChattr clone at
275
- `~/.quadwork/{project_id}/agentchattr/` (~77 MB per project):
276
-
277
- | Projects | Disk |
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