@akshar5/cohall 0.9.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,44 @@
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
+
3
42
  ## [0.9.0](https://github.com/AksharP5/cohall/compare/v0.8.0...v0.9.0) (2026-09-30)
4
43
 
5
44
 
package/README.md CHANGED
@@ -178,8 +178,10 @@ cohall relay use https://new-relay.example.com
178
178
  ```
179
179
 
180
180
  The switch verifies the existing credentials against the restored relay before
181
- changing local configuration, then restarts an active device service. Remote
182
- 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,
183
185
  such as Tailscale, already encrypts the connection.
184
186
 
185
187
  The backup contains the SQLite relay state, the plaintext owner token, and a
@@ -201,20 +203,27 @@ npx -y @akshar5/cohall delegate \
201
203
  --context 'Why: the deployment failed after local checks passed. Need: root cause, evidence, and recommended next step.'
202
204
  ```
203
205
 
204
- The command waits for a result by default. Queue longer work with `--no-wait`,
205
- 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:
206
208
 
207
209
  ```bash
208
210
  npx -y @akshar5/cohall wait <task-id> --timeout 1800
209
211
  npx -y @akshar5/cohall trace <task-id> --follow
210
212
  ```
211
213
 
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
+
212
221
  Task status and traces include the worker's latest progress note when it reports
213
222
  one. Workers can publish a brief milestone with `cohall progress --message
214
223
  "Running tests"`; the task ID is inherited during delegated work.
215
224
 
216
- Completed tasks also appear in the sending client's inbox. This covers queued
217
- work and tasks that finish after a wait times out:
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:
218
227
 
219
228
  ```bash
220
229
  npx -y @akshar5/cohall inbox
@@ -223,14 +232,31 @@ npx -y @akshar5/cohall inbox ack <task-id>
223
232
  ```
224
233
 
225
234
  The inbox shows short previews; `status` returns the full result. Acknowledge a
226
- task after handling it. Synchronous `delegate` calls acknowledge their own
227
- results automatically. The inbox shows up to 20 oldest entries and sets
228
- `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.
229
239
  Each client credential has its own inbox, including
230
240
  client-only pairings. The relay keeps at most 1,000 completed tasks by default,
231
241
  so an old unacknowledged result can leave the inbox when history is pruned.
232
242
  Tasks created before the inbox was added have no inbox entry.
233
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
+
234
260
  Attach up to two explicit files to a coding task. Each file may be up to 256 KiB.
235
261
  The target receives them as temporary files and can return up to two files by
236
262
  writing them to the output directory named in its task prompt. List task files
@@ -253,11 +279,23 @@ relay and target worker before sending attachments; older workers do not
253
279
  advertise attachment support. Named Grok Bots do not support file attachments.
254
280
  If a long result and output files exceed the 1 MiB transfer limit, the task
255
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.
256
285
 
257
286
  `--timeout` accepts 5 to 86400 seconds and defaults to 900. It limits how long
258
287
  the command waits; the task continues after that. Invalid timeout values are
259
288
  rejected before any work is sent, including with `--no-wait`.
260
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
+
261
299
  Reuse the returned `thread_id` for follow-ups so the target resumes its provider
262
300
  session. Queued follow-ups pick up the preceding turn's session when they start,
263
301
  including after a worker restart.
@@ -318,7 +356,8 @@ A Cohall thread records the exchange and lets follow-ups find the same Bot.
318
356
  It does not create an isolated Grok Bot conversation: messages sent in the
319
357
  Grok Bot app share that Bot's history. Bot tasks use the Bot's own permissions
320
358
  and computer context, so omit `--workspace`. Queued Bot tasks that have never
321
- 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
322
361
  the gateway cannot safely cancel a specific Cohall turn.
323
362
  A dispatched Bot request remains non-cancellable through Cohall if a disconnect
324
363
  or relay restart puts it back in the queue, even if its acceptance message was lost.
@@ -326,13 +365,16 @@ When upgrading an older relay without dispatch records, outstanding Bot requests
326
365
  are conservatively treated as potentially dispatched.
327
366
 
328
367
  Cohall includes a local callback command in each Bot request. After finishing,
329
- the Bot hands its result back by running `cohall reply <task-id> --message-file
330
- <path>` on its computer. The callback also accepts `--message -` for stdin,
331
- `--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.
332
374
  It records the result locally without relay credentials or transcript scraping.
333
375
  The task becomes completed when the worker receives this callback; a reply in
334
376
  the Grok Bot chat alone does not complete it. If no callback arrives within six
335
- 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
336
378
  stop the Bot's ongoing work.
337
379
 
338
380
  Pending or uncertain prompt acceptance is checked until the gateway confirms
@@ -389,7 +431,9 @@ Every device must already run Cohall 0.5.0 or newer; upgrade older installations
389
431
  individually once before using all-device upgrades.
390
432
  Each target must use a global npm, Bun, or pnpm installation that can upgrade
391
433
  itself. Preview the targets with `cohall upgrade --all --dry-run`, or pin an
392
- 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.
393
437
  Abandonment is an owner recovery action for a permanently unreachable target;
394
438
  it does not interrupt an upgrade that is already executing. Forgetting an
395
439
  offline device also closes its outstanding maintenance operation.
@@ -422,18 +466,22 @@ configuration.
422
466
  - The relay must be reachable to submit new work, but persisted tasks survive a
423
467
  relay restart.
424
468
  - The relay retains the newest 1,000 terminal tasks by default so history cannot
425
- 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.
426
472
  - Paired clients can ask a device's local provider to act with that user's normal
427
473
  authority. Pair only devices and users you trust.
428
474
  - Workspace roots are enforced after resolving symlinks, credentials are
429
475
  role-separated, and task traces omit prompts, results, tokens, and provider
430
- session IDs.
476
+ session IDs. Traces include worker progress and clarification text; inspect
477
+ those fields before sharing them.
431
478
 
432
479
  ## Documentation
433
480
 
434
481
  - [Installation, pairing, providers, and upgrades](docs/install.md)
435
482
  - [Grok Bot computer setup, Tailscale, and recovery](docs/grok-bot.md)
436
483
  - [Agent skill and MCP integrations](docs/integrations.md)
484
+ - [Muse requester setup and proxy access](docs/muse.md)
437
485
  - [Linux, macOS, and Windows services](docs/services.md)
438
486
  - [Contributing](CONTRIBUTING.md)
439
487