@akshar5/cohall 0.8.0 → 0.10.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/CHANGELOG.md CHANGED
@@ -1,5 +1,58 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.10.0](https://github.com/AksharP5/cohall/compare/v0.9.0...v0.10.0) (2026-10-04)
4
+
5
+
6
+ ### Features
7
+
8
+ * **tasks:** answer worker questions without restarting tasks ([#107](https://github.com/AksharP5/cohall/issues/107)) ([02c11a2](https://github.com/AksharP5/cohall/commit/02c11a27ca5b419eb721ed866331d350322406b8))
9
+ * **tasks:** recover submissions after a lost response ([#113](https://github.com/AksharP5/cohall/issues/113)) ([ced2061](https://github.com/AksharP5/cohall/commit/ced20612e70b44d653b6d0e3470722aa12524cc8))
10
+ * **tasks:** stop delegated coding work at a deadline ([#111](https://github.com/AksharP5/cohall/issues/111)) ([c221892](https://github.com/AksharP5/cohall/commit/c221892981c14478006fecd86c92e74750fe4f53))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **attachments:** bound local file reads after size checks ([#117](https://github.com/AksharP5/cohall/issues/117)) ([3c170e3](https://github.com/AksharP5/cohall/commit/3c170e3040add5216a835dbd9b7285993ee92f8a))
16
+ * **client:** read large task traces without relaxing other limits ([#138](https://github.com/AksharP5/cohall/issues/138)) ([48b7022](https://github.com/AksharP5/cohall/commit/48b70227717a118f8f091f84b8931e3179728ca5))
17
+ * **device:** clean task files before cancellation completes ([#127](https://github.com/AksharP5/cohall/issues/127)) ([9c7910e](https://github.com/AksharP5/cohall/commit/9c7910e862851b2500602a5f0f1b60fa33f0e6a7))
18
+ * **device:** reconnect when relay connections stall ([#129](https://github.com/AksharP5/cohall/issues/129)) ([c734f1d](https://github.com/AksharP5/cohall/commit/c734f1dcee1f1aa55b6a8883ba61a19aa2e48c21))
19
+ * **device:** reject queued work for disabled providers ([#152](https://github.com/AksharP5/cohall/issues/152)) ([baf441b](https://github.com/AksharP5/cohall/commit/baf441b9feae9398a34d72f0bb8d263ca9298ace))
20
+ * **device:** restore task status after reconnect ([#150](https://github.com/AksharP5/cohall/issues/150)) ([902c49a](https://github.com/AksharP5/cohall/commit/902c49ac626a6b5b606cfce4e0b6cc697c495266))
21
+ * **device:** retry relay switches without starting stopped workers ([#134](https://github.com/AksharP5/cohall/issues/134)) ([5a3817b](https://github.com/AksharP5/cohall/commit/5a3817b911f829a386fc11685f36f2abe3495c57))
22
+ * **device:** stop coding providers before worker exit ([#119](https://github.com/AksharP5/cohall/issues/119)) ([5835dc5](https://github.com/AksharP5/cohall/commit/5835dc5223333836f18ad4251f7d8d0035538934))
23
+ * **discovery:** read large device inventories through bounded pages ([#142](https://github.com/AksharP5/cohall/issues/142)) ([e02bf88](https://github.com/AksharP5/cohall/commit/e02bf884f3d7b139b70510feb5f323e5b76029ae))
24
+ * **doctor:** warn about unavailable gateways in automatic mode ([#146](https://github.com/AksharP5/cohall/issues/146)) ([44cbbdb](https://github.com/AksharP5/cohall/commit/44cbbdb1d4d7c4d1b4bff2d6f7015f2888c2c2eb))
25
+ * **mcp:** preserve results when requester waits are cancelled ([#123](https://github.com/AksharP5/cohall/issues/123)) ([ef7ca4a](https://github.com/AksharP5/cohall/commit/ef7ca4a13eddf1418c64e56df9a4eabd991cb998))
26
+ * **providers:** reject answers lost to event limits ([#122](https://github.com/AksharP5/cohall/issues/122)) ([5d2877b](https://github.com/AksharP5/cohall/commit/5d2877b07d3d4cc9db351a102c0a4e1145126efd))
27
+ * **relay:** preserve Bot questions completed while offline ([#151](https://github.com/AksharP5/cohall/issues/151)) ([024a319](https://github.com/AksharP5/cohall/commit/024a3199a171506963ac888d06bfccbb2ff5a0f7))
28
+ * **relay:** release Bot slots after rejected questions ([#154](https://github.com/AksharP5/cohall/issues/154)) ([6714f25](https://github.com/AksharP5/cohall/commit/6714f25536df87aeaccf8cfa887fccbffc72ac0a))
29
+ * **relay:** settle worker replies after history pruning ([#149](https://github.com/AksharP5/cohall/issues/149)) ([4bec2fd](https://github.com/AksharP5/cohall/commit/4bec2fd1e74873d0964bdf3bf15b8a9e9d03c1ea))
30
+ * **service:** honor the Linux user config directory ([#155](https://github.com/AksharP5/cohall/issues/155)) ([4d74a5e](https://github.com/AksharP5/cohall/commit/4d74a5edb591b7d197c2e26d70b83b06e82ff255))
31
+ * **service:** keep pnpm workers on the upgraded version ([#145](https://github.com/AksharP5/cohall/issues/145)) ([d72fc2c](https://github.com/AksharP5/cohall/commit/d72fc2cac0eadbb1991bdd848780f1a52b37b8a9))
32
+ * **setup:** preserve worker settings when repairing setup ([#153](https://github.com/AksharP5/cohall/issues/153)) ([9845f49](https://github.com/AksharP5/cohall/commit/9845f4982996c920e8f1aa3519264164d859f3bd))
33
+ * **tasks:** finish offline deadlines and confirm cancellation ([#118](https://github.com/AksharP5/cohall/issues/118)) ([639d185](https://github.com/AksharP5/cohall/commit/639d185b41572eb8c67f5f59c6d6fdbceb77a357))
34
+ * **tasks:** honor wait timeouts through relay responses ([#126](https://github.com/AksharP5/cohall/issues/126)) ([7918a3c](https://github.com/AksharP5/cohall/commit/7918a3c96a3c5079f5389b09d7adcc5202e7108b))
35
+ * **tasks:** preserve cancellation acknowledgements after reconnect ([#110](https://github.com/AksharP5/cohall/issues/110)) ([a5d503e](https://github.com/AksharP5/cohall/commit/a5d503e88a4a1585a595e2fea5ef1cf49e354c12))
36
+ * **upgrade:** keep unfinished restarts when changing versions ([#141](https://github.com/AksharP5/cohall/issues/141)) ([32bebb0](https://github.com/AksharP5/cohall/commit/32bebb079cebb66c6731000f9e2c0764cc04f798))
37
+ * **upgrade:** preserve newer installations when latest is older ([#103](https://github.com/AksharP5/cohall/issues/103)) ([1932a6a](https://github.com/AksharP5/cohall/commit/1932a6a359f5481a0ba11f9b6368b46c85c48553))
38
+ * **upgrade:** preserve unfinished restarts and validate recovery ([#137](https://github.com/AksharP5/cohall/issues/137)) ([c5c7930](https://github.com/AksharP5/cohall/commit/c5c7930ee1943bc1dc6bc847ed648b8368a3d2e8))
39
+ * **upgrade:** reject Windows tasks using a different installation ([#131](https://github.com/AksharP5/cohall/issues/131)) ([5c3987f](https://github.com/AksharP5/cohall/commit/5c3987f75ad3532788235c7195e120f65e75276f))
40
+ * **upgrade:** verify global installations before changing them ([#156](https://github.com/AksharP5/cohall/issues/156)) ([068e619](https://github.com/AksharP5/cohall/commit/068e619490173d1bbfcfbebcb218c8559ce61a2a))
41
+
42
+ ## [0.9.0](https://github.com/AksharP5/cohall/compare/v0.8.0...v0.9.0) (2026-09-30)
43
+
44
+
45
+ ### Features
46
+
47
+ * **devices:** show queue depth and oldest wait ([#95](https://github.com/AksharP5/cohall/issues/95)) ([f9a6f94](https://github.com/AksharP5/cohall/commit/f9a6f943b61a22840ce4be73f79a965fb5a193c3))
48
+ * **tasks:** report bounded worker progress ([#97](https://github.com/AksharP5/cohall/issues/97)) ([ced7062](https://github.com/AksharP5/cohall/commit/ced706251800fb4daa47f5ef9fe8e2672c9d445a))
49
+
50
+
51
+ ### Bug Fixes
52
+
53
+ * **doctor:** report rejected client credentials ([#92](https://github.com/AksharP5/cohall/issues/92)) ([8744622](https://github.com/AksharP5/cohall/commit/87446220f84753d18b29d670dc5636c3036ac502))
54
+ * **mcp:** warn when upgrades need a connection restart ([#99](https://github.com/AksharP5/cohall/issues/99)) ([106e4a6](https://github.com/AksharP5/cohall/commit/106e4a645d0cf0814195ca8387cc45b2cb630c86))
55
+
3
56
  ## [0.8.0](https://github.com/AksharP5/cohall/compare/v0.7.0...v0.8.0) (2026-09-27)
4
57
 
5
58
 
package/README.md CHANGED
@@ -8,6 +8,18 @@ One npm package provides a durable self-hosted relay, outbound-only device
8
8
  workers, a CLI, an installable agent skill, an optional MCP server, and local
9
9
  Codex, Claude Code, and OpenCode adapters, plus an experimental Grok Bot adapter.
10
10
 
11
+ https://github.com/user-attachments/assets/7db8ebb2-da77-484f-bba9-703a44f95f4a
12
+
13
+ <details>
14
+ <summary>Video music credits</summary>
15
+
16
+ Music: ["Hang Low" by Rewob (feat. DustyZonda)](https://ccmixter.org/files/rewob/69753),
17
+ including ["Hang Low a capella - Ashes and Dreams - main vox" by DustyZonda (feat. Liv Mircea)](https://ccmixter.org/files/DustyZonda/60053).
18
+ Both licensed under [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/).
19
+ Trimmed and mixed for this video.
20
+
21
+ </details>
22
+
11
23
  ## How it works
12
24
 
13
25
  ```text
@@ -166,8 +178,10 @@ cohall relay use https://new-relay.example.com
166
178
  ```
167
179
 
168
180
  The switch verifies the existing credentials against the restored relay before
169
- changing local configuration, then restarts an active device service. Remote
170
- addresses require HTTPS by default. Use `--allow-http` only when another layer,
181
+ changing local configuration, then restarts an active device service. Stopped
182
+ workers stay stopped. Repeat the command to retry a failed restart, even when
183
+ the address is already saved. Remote addresses require HTTPS by default. Use
184
+ `--allow-http` only when another layer,
171
185
  such as Tailscale, already encrypts the connection.
172
186
 
173
187
  The backup contains the SQLite relay state, the plaintext owner token, and a
@@ -189,16 +203,27 @@ npx -y @akshar5/cohall delegate \
189
203
  --context 'Why: the deployment failed after local checks passed. Need: root cause, evidence, and recommended next step.'
190
204
  ```
191
205
 
192
- The command waits for a result by default. Queue longer work with `--no-wait`,
193
- then inspect it later:
206
+ The command waits for a result or a clarification question by default. Queue
207
+ longer work with `--no-wait`, then inspect it later:
194
208
 
195
209
  ```bash
196
210
  npx -y @akshar5/cohall wait <task-id> --timeout 1800
197
211
  npx -y @akshar5/cohall trace <task-id> --follow
198
212
  ```
199
213
 
200
- Completed tasks also appear in the sending client's inbox. This covers queued
201
- work and tasks that finish after a wait times out:
214
+ If a submission response is lost, retry with a UUID v4 generated before the
215
+ first attempt. Supply it through `--request-id` or MCP `delegate.request_id` and
216
+ keep the input and client credential unchanged. Cohall returns the original
217
+ task's current status. Use a device ID or `@device-id/bot-id` target so discovery
218
+ changes cannot affect the retry. See [retrying submissions](docs/integrations.md#retrying-submissions)
219
+ for limits and retention.
220
+
221
+ Task status and traces include the worker's latest progress note when it reports
222
+ one. Workers can publish a brief milestone with `cohall progress --message
223
+ "Running tests"`; the task ID is inherited during delegated work.
224
+
225
+ Questions awaiting answers and completed tasks appear in the sending client's
226
+ inbox. This covers queued work and tasks that finish after a wait times out:
202
227
 
203
228
  ```bash
204
229
  npx -y @akshar5/cohall inbox
@@ -207,14 +232,31 @@ npx -y @akshar5/cohall inbox ack <task-id>
207
232
  ```
208
233
 
209
234
  The inbox shows short previews; `status` returns the full result. Acknowledge a
210
- task after handling it. Synchronous `delegate` calls acknowledge their own
211
- results automatically. The inbox shows up to 20 oldest entries and sets
212
- `hasMore` when more are waiting; acknowledge handled entries to reveal the rest.
235
+ completed task after handling it. Synchronous `delegate` calls acknowledge their
236
+ completed results automatically. Questions require an answer or cancellation.
237
+ The inbox shows up to 20 oldest entries and sets `hasMore` when more are waiting;
238
+ handle entries to reveal the rest.
213
239
  Each client credential has its own inbox, including
214
240
  client-only pairings. The relay keeps at most 1,000 completed tasks by default,
215
241
  so an old unacknowledged result can leave the inbox when history is pruned.
216
242
  Tasks created before the inbox was added have no inbox entry.
217
243
 
244
+ If essential information is missing, a worker can run
245
+ `cohall request-input --question 'Which branch should I use?'` and end its turn.
246
+ The task becomes `needs_input`, frees the worker slot, and returns the question
247
+ as `input_request` in `status` or a waiting command. The original requester or
248
+ relay owner answers using its question ID:
249
+
250
+ ```bash
251
+ cohall answer <task-id> --request-id <question-id> --message 'Use main.'
252
+ cohall wait <task-id> --timeout 1800
253
+ ```
254
+
255
+ The same task resumes on the same target with its saved provider session when
256
+ available. Answers remain in its resumed prompt after a restart. Upgrade the
257
+ relay, requester, and worker first. See [clarification and resume](docs/integrations.md#clarification-and-resume)
258
+ for MCP, limits, and worker instructions.
259
+
218
260
  Attach up to two explicit files to a coding task. Each file may be up to 256 KiB.
219
261
  The target receives them as temporary files and can return up to two files by
220
262
  writing them to the output directory named in its task prompt. List task files
@@ -237,11 +279,23 @@ relay and target worker before sending attachments; older workers do not
237
279
  advertise attachment support. Named Grok Bots do not support file attachments.
238
280
  If a long result and output files exceed the 1 MiB transfer limit, the task
239
281
  completes with its text result and a notice that the files were omitted.
282
+ Provider text results must fit 128 KiB. Codex and OpenCode JSON events are capped
283
+ at 1 MiB each. If an event is discarded at that limit, the provider must return
284
+ a later text answer or the task fails explicitly.
240
285
 
241
286
  `--timeout` accepts 5 to 86400 seconds and defaults to 900. It limits how long
242
287
  the command waits; the task continues after that. Invalid timeout values are
243
288
  rejected before any work is sent, including with `--no-wait`.
244
289
 
290
+ To stop coding work at a fixed time, pass `--deadline <UTC-ISO-timestamp>` to
291
+ `delegate`, or `deadline` to the MCP tool. The future deadline is saved on the
292
+ task and stays unchanged through retries and clarification. Expired tasks fail
293
+ with `Task deadline exceeded`. Tasks awaiting their first dispatch fail on the
294
+ relay. Tasks that may have reached a worker stay `cancelling` until it confirms
295
+ termination, including after a disconnect. Upgrade the requester, relay, and
296
+ worker before using deadlines. Named Grok Bots do not support them.
297
+ See [task deadlines](docs/integrations.md#task-deadlines) for details.
298
+
245
299
  Reuse the returned `thread_id` for follow-ups so the target resumes its provider
246
300
  session. Queued follow-ups pick up the preceding turn's session when they start,
247
301
  including after a worker restart.
@@ -302,7 +356,8 @@ A Cohall thread records the exchange and lets follow-ups find the same Bot.
302
356
  It does not create an isolated Grok Bot conversation: messages sent in the
303
357
  Grok Bot app share that Bot's history. Bot tasks use the Bot's own permissions
304
358
  and computer context, so omit `--workspace`. Queued Bot tasks that have never
305
- been dispatched can be cancelled; active Bot turns must be stopped in Grok Bot because
359
+ been dispatched and tasks paused for clarification can be cancelled. Active Bot
360
+ turns must be stopped in Grok Bot because
306
361
  the gateway cannot safely cancel a specific Cohall turn.
307
362
  A dispatched Bot request remains non-cancellable through Cohall if a disconnect
308
363
  or relay restart puts it back in the queue, even if its acceptance message was lost.
@@ -310,13 +365,16 @@ When upgrading an older relay without dispatch records, outstanding Bot requests
310
365
  are conservatively treated as potentially dispatched.
311
366
 
312
367
  Cohall includes a local callback command in each Bot request. After finishing,
313
- the Bot hands its result back by running `cohall reply <task-id> --message-file
314
- <path>` on its computer. The callback also accepts `--message -` for stdin,
315
- `--message <text>`, or `--error <text>` when the Bot cannot complete the task.
368
+ the Bot hands its result back by running the supplied command,
369
+ `cohall reply <task-id> --run-id <run-id> --message-file <path>`, on its computer.
370
+ Preserve the supplied task and run IDs. The callback also accepts `--message -`
371
+ for stdin, `--message <text>`, or `--error <text>` when the Bot cannot complete
372
+ the task. Use `--question <text>` to ask for essential missing information, then
373
+ end the Bot turn; the sender's answer resumes the same task with a new callback.
316
374
  It records the result locally without relay credentials or transcript scraping.
317
375
  The task becomes completed when the worker receives this callback; a reply in
318
376
  the Grok Bot chat alone does not complete it. If no callback arrives within six
319
- hours of the first dispatch, Cohall reports failure. That deadline does not
377
+ hours of that turn's first dispatch, Cohall reports failure. That deadline does not
320
378
  stop the Bot's ongoing work.
321
379
 
322
380
  Pending or uncertain prompt acceptance is checked until the gateway confirms
@@ -351,6 +409,9 @@ cohall usage
351
409
  ```
352
410
 
353
411
  `doctor --all` reports connectivity, providers, workspaces, and version drift.
412
+ It and `cohall devices` include each device's current queue count and the
413
+ creation time of its oldest queued task. Assigned, running, cancelling, and
414
+ terminal tasks do not count as queued. Queue fields are absent with older relays.
354
415
  `usage` reports retained Cohall task activity by device, status, and provider;
355
416
  provider token counts and billing are not available to the relay.
356
417
 
@@ -370,7 +431,9 @@ Every device must already run Cohall 0.5.0 or newer; upgrade older installations
370
431
  individually once before using all-device upgrades.
371
432
  Each target must use a global npm, Bun, or pnpm installation that can upgrade
372
433
  itself. Preview the targets with `cohall upgrade --all --dry-run`, or pin an
373
- exact release with `--to 1.2.3`. `cohall upgrades` returns the 50 newest results.
434
+ exact release with `--to 1.2.3`. Updated daemons leave newer installations untouched
435
+ when `latest` is older; an exact `--to` version can intentionally roll back.
436
+ `cohall upgrades` returns the 50 newest results.
374
437
  Abandonment is an owner recovery action for a permanently unreachable target;
375
438
  it does not interrupt an upgrade that is already executing. Forgetting an
376
439
  offline device also closes its outstanding maintenance operation.
@@ -403,18 +466,22 @@ configuration.
403
466
  - The relay must be reachable to submit new work, but persisted tasks survive a
404
467
  relay restart.
405
468
  - The relay retains the newest 1,000 terminal tasks by default so history cannot
406
- grow without bound.
469
+ grow without bound. It acknowledges replayed task and upgrade replies after
470
+ pruning so workers can discard local replies; this does not restore deleted
471
+ history.
407
472
  - Paired clients can ask a device's local provider to act with that user's normal
408
473
  authority. Pair only devices and users you trust.
409
474
  - Workspace roots are enforced after resolving symlinks, credentials are
410
475
  role-separated, and task traces omit prompts, results, tokens, and provider
411
- session IDs.
476
+ session IDs. Traces include worker progress and clarification text; inspect
477
+ those fields before sharing them.
412
478
 
413
479
  ## Documentation
414
480
 
415
481
  - [Installation, pairing, providers, and upgrades](docs/install.md)
416
482
  - [Grok Bot computer setup, Tailscale, and recovery](docs/grok-bot.md)
417
483
  - [Agent skill and MCP integrations](docs/integrations.md)
484
+ - [Muse requester setup and proxy access](docs/muse.md)
418
485
  - [Linux, macOS, and Windows services](docs/services.md)
419
486
  - [Contributing](CONTRIBUTING.md)
420
487