@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 +53 -0
- package/README.md +84 -17
- package/bin/cohall.js +1922 -544
- package/bin/cohall.js.map +23 -22
- package/deploy/windows/install-device.ps1 +25 -2
- package/docs/grok-bot.md +7 -0
- package/docs/install.md +32 -5
- package/docs/integrations.md +188 -7
- package/docs/muse.md +162 -0
- package/docs/releasing.md +2 -2
- package/docs/services.md +68 -12
- package/package.json +1 -1
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.
|
|
170
|
-
|
|
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
|
|
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
|
-
|
|
201
|
-
|
|
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
|
|
211
|
-
results automatically.
|
|
212
|
-
`hasMore` when more are waiting;
|
|
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
|
|
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
|
|
314
|
-
<path
|
|
315
|
-
|
|
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
|
|
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`.
|
|
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
|
|