@brokkai/brokk-town-linux-arm64 0.6.2 → 0.6.3

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/BUILD.json CHANGED
@@ -1 +1 @@
1
- {"commit": "89acfb8925164416409466ca850936844d312bd5", "tag": "v0.6.2-town", "target": "linux-arm64"}
1
+ {"commit": "8c221ceb2c10c36e4c6c02f8c6e485872a7fee67", "tag": "v0.6.3-town", "target": "linux-arm64"}
package/README.md CHANGED
@@ -4,6 +4,13 @@ Brokk Town is a local service that coordinates independent repository bots throu
4
4
  private worker processes. Use the browser to watch and control work, or the CLI
5
5
  for scripts. Everything runs on your machine.
6
6
 
7
+ The browser has two themes. The default is the town; Frontline draws every
8
+ repository as a base flying one of three armies — humans, humanoid aliens or a
9
+ swarm — and every committed delivery as a strike between its installations. The
10
+ theme is a look, not a lever: it reads the same snapshot, keeps the theme and
11
+ any race chosen for a base in that browser, and never changes what Town does or writes
12
+ to GitHub.
13
+
7
14
  ## Build and run
8
15
 
9
16
  ```sh
@@ -13,7 +20,9 @@ make build
13
20
  ./bin/bt web --demo
14
21
  ```
15
22
 
16
- Bare `bt` runs in the foreground and prints its browser URL. Ctrl+C, SIGTERM or
23
+ Bare `bt` runs in the foreground and prints its browser URL. The URL carries the
24
+ access key, so it is printed only to a terminal; redirected output and the
25
+ background service's log point to `bt web` instead. Ctrl+C, SIGTERM or
17
26
  SIGHUP stops Town, its bots and their agent processes. Closing the browser does
18
27
  not stop the service. Demo mode is isolated and never invokes bots, agents or GitHub.
19
28
 
@@ -177,6 +186,51 @@ what it enforces. Where usage or cost is missing, Town Hall prints "not
177
186
  reported"; it never shows absent telemetry as zero. Attempts whose elapsed time
178
187
  never arrived are counted and reported separately rather than billed as free.
179
188
 
189
+ ### Quiet hours
190
+
191
+ Quiet hours are weekly windows in which Town starts no new agent work and
192
+ makes none of its own GitHub writes: no filing, repairing, reviewing, merging
193
+ or releasing. Set a default for every town, give one town its own windows, or
194
+ opt one town out:
195
+
196
+ ```sh
197
+ # Service default: weeknights and weekends.
198
+ ./bin/bt settings --quiet-hours "mon-fri 19:00-07:00; weekends 00:00-24:00"
199
+ ./bin/bt settings --quiet-hours none # remove the service default
200
+ # One town's own windows, none at all, or back to the service default.
201
+ ./bin/bt settings --repo BrokkAi/my-project --quiet-hours "daily 12:00-13:00"
202
+ ./bin/bt settings --repo BrokkAi/my-project --quiet-hours none
203
+ ./bin/bt settings --repo BrokkAi/my-project --quiet-hours default
204
+ ```
205
+
206
+ Each window is `DAYS HH:MM-HH:MM`, joined with `;`. Days are `mon` through
207
+ `sun`, ranges such as `mon-fri` or `fri-mon`, or `daily`, `weekdays` and
208
+ `weekends`, and name the day a window starts. An end at or before the start runs
209
+ past midnight into the next day, and `24:00` ends a window at midnight.
210
+ Overlapping windows count as one. A window with no day, an unknown day, a time
211
+ that is not `HH:MM`, or the same start and end is refused with the reason. The
212
+ browser edits the same schedules: the service default under Capacity, and a
213
+ town's own in Town settings. Config files take `"quiet_hours": [{"days":
214
+ ["mon"], "start": "19:00", "end": "07:00"}]` at the top level for the default
215
+ and in a town entry for its own, where `[]` opts the town out.
216
+
217
+ Windows are read on the local clock of the machine running Town, by the clock
218
+ on the wall: a window holds through a daylight-saving change, an hour the clock
219
+ skips is never quiet, and an hour it repeats is quiet both times.
220
+
221
+ Inside a window, work already running finishes as it would after Pause, and
222
+ the repository inventory keeps running so uncertain writes are still
223
+ reconciled. Town leaves closing declined issues and retired pull requests and
224
+ filing review follow-ups for the first inventory after the window. Issues you
225
+ submit yourself are still posted. Houses stay awake: the browser shows them as
226
+ *quiet* rather than paused, the town header reads "Quiet hours · until …",
227
+ Town Hall explains the hold, and `bt status` carries the same `quiet_hours`
228
+ state for each town. When the window ends, scheduling resumes on its own with
229
+ each house's usual cadence; nothing missed is replayed. Pause and quiet hours
230
+ are independent and both survive a restart: a paused house stays paused after
231
+ the window, and a woken one resumes. Release Bot's own release quiet period
232
+ (`--release-quiet-seconds`) is unrelated and keeps working as before.
233
+
180
234
  For each profile, select any agent from the
181
235
  [official ACP registry](https://agentclientprotocol.com/get-started/registry),
182
236
  plus **Anvil**, **Muse ACP**, **Draupnir**, or a custom ACP command. The full
@@ -273,8 +327,14 @@ To remove a town, choose **Settings → Delete town** and confirm, or run:
273
327
  Deletion cancels its workers, cancels queued issue submissions, and removes it
274
328
  from the browser and terminal. GitHub repositories, issues, and PRs are preserved.
275
329
  Local history, uncertain writes, and private worktrees remain as recovery records.
276
- Adding the same repository again restores that history and its previous settings,
277
- with automation paused and the reporter enabled. Wait for stopping workers to
330
+ Adding the same repository again restores that history and its previous
331
+ settings, with automation paused and the reporter enabled. A merge policy or
332
+ harness/agent choice given with the add replaces the previous one; budgets, work
333
+ policies, bot profiles, funnels and the branch are kept. A deleted town listed in
334
+ `bt serve --config` is restored with the file's settings, and one named by
335
+ `bt serve --repo` with its previous settings; `bt serve` prints a notice. A town
336
+ that already worked on one branch cannot be restored onto another. Deleting a
337
+ town that is already deleted reports `unknown town`. Wait for stopping workers to
278
338
  finish before restoring a town.
279
339
 
280
340
  ## How work moves
@@ -343,7 +403,8 @@ limit its authority to publish while forbidding its release-preparation PR merge
343
403
  Town pauses Release Bot and rejects attempts to start or retry it under this policy.
344
404
  `all` also permits eligible external PRs. Town-managed merges require current clean Town evidence, GitHub mergeability, required checks
345
405
  and approvals. Town uses an expected-head squash merge, without admin bypass.
346
- Change this at any time under **Town Settings → External contributions**.
406
+ Change this at any time under **Town Settings → External contributions**, or
407
+ with `./bin/bt settings --repo BrokkAi/my-project --merge-policy manual`.
347
408
  Repositories that require a merge queue or prohibit squash merging need manual
348
409
  merges for now. GitHub is the final authority at write time.
349
410
 
@@ -361,7 +422,10 @@ Configuration is a JSON array for town-only files. Each entry supplies `repo`, o
361
422
  `merge_policy`, `simplifier_mode`, optional `review_close_severity` (`P1`, `P2`
362
423
  or `P3`, default `P2`), optional `budget`, optional `bot_policies`,
363
424
  `poll_seconds`, `report_seconds`, and `max_cycles`. The example
364
- lists all required values. To persist global capacity alongside the town list,
425
+ lists all required values. A config-file entry gets no defaults for
426
+ `merge_policy`, `poll_seconds`, `report_seconds`, or `max_cycles`: omitting any
427
+ of them rejects the file. The defaults quoted below apply to towns added with
428
+ `bt add` or the browser. To persist global capacity alongside the town list,
365
429
  use the object form `{"max_workers": 2, "towns": [...]}`; the legacy array form
366
430
  remains accepted. When `serve --config` includes `max_workers`, that value
367
431
  overrides the persisted service setting in the same atomic state update; an
@@ -390,7 +454,9 @@ Repo-bot and issue/review scheduling use `poll_seconds` (default 60). Quiet repo
390
454
  use `report_seconds` (1800). Bug-bot, feature-bot, and simplifier-bot run at most every 30 minutes; mayor-bot
391
455
  writes a bulletin at most every `bulletin_seconds` (21600) and only after something merged; release-bot
392
456
  checks every five minutes and retains its own quiet window, minimum gap, and
393
- batching decisions. Each worker attempt has a two-hour deadline. A pull request
457
+ batching decisions. Each worker attempt, including the repo inventory, has a
458
+ two-hour deadline, and each GitHub call Town makes itself, such as the merge
459
+ gate's read, gives up after one minute. A pull request
394
460
  gets one fix round and two attempts per revision at any step; `max_cycles` is
395
461
  accepted for compatibility but no longer extends that.
396
462
 
@@ -500,10 +566,38 @@ the reported failure and ask Town to lift the budget:
500
566
 
501
567
  The next release run first calls the bot's `POST /v1/retry` worker API, which
502
568
  resets the pending release's attempt budget in its own workspace, then resumes
503
- the same release. Town never edits the bot's private state. The pinned Release
569
+ the same release. Unlike a task retry, a release retry also starts the release
570
+ house if it was paused. Town never edits the bot's private state. The pinned Release
504
571
  Bot must advertise the `retry` capability; older pins report that plainly.
505
572
  Use `bt status` to inspect saved details and GitHub to resolve conflicts.
506
573
 
574
+ ### Snoozing one task
575
+
576
+ To set one issue or pull request aside without pausing its house, snooze it
577
+ until a chosen time. Open the task in the browser and choose **Snooze…**, or:
578
+
579
+ ```sh
580
+ ./bin/bt defer --repo BrokkAi/my-project --task pr:123 --until 2d --reason "waiting on the vendor fix"
581
+ ./bin/bt defer --repo BrokkAi/my-project --task issue:45 --until 2026-10-01T09:00:00Z
582
+ ./bin/bt undefer --repo BrokkAi/my-project --task pr:123
583
+ ```
584
+
585
+ `--until` takes an RFC 3339 time or a delay from now (`90m`, `4h`, `2d`); the
586
+ resume time must be in the future and within 366 days, and the reason is one
587
+ line of at most 200 characters. The house keeps working the rest of its queue.
588
+ Until the resume time, no agent starts for the snoozed task: Issue, Review and
589
+ Simplifier Bots skip it, Mayor Bot does not judge it, and Town does not merge
590
+ it. A run already under way when you snooze finishes. The Mayor can still decide
591
+ a snoozed arrival by hand.
592
+
593
+ The task shows as **Snoozed** with its reason and resume time in the browser
594
+ and in `bt status` (`deferred_until`, `defer_reason`). Snoozed is distinct from
595
+ blocked and failed, so a snoozed task does not appear in the inbox. At the
596
+ resume time Town clears the snooze, wakes the house and records the event; the
597
+ snooze is saved state, so it survives a restart and repository reconciliation.
598
+ Resume now (`bt undefer`) makes the task eligible immediately. Finished work
599
+ (merged, closed, declined, or an implemented issue) cannot be snoozed.
600
+
507
601
  The HTTP listener accepts loopback IPs only (default `127.0.0.1:8099`). Host,
508
602
  origin, and bearer key checks protect the local API. A browser supporting WebMCP
509
603
  can list towns and navigate to a house through optional page tools. Unsupported
package/bin/bbb CHANGED
Binary file
package/bin/bfb CHANGED
Binary file
package/bin/bib CHANGED
Binary file
package/bin/brb CHANGED
Binary file
package/bin/brv CHANGED
Binary file
package/bin/bt CHANGED
Binary file
@@ -8,9 +8,9 @@ Node.js and Python interpreters are installed separately and are not bundled.
8
8
 
9
9
  ==============================================================================
10
10
 
11
- github.com/BrokkAi/acp-go v0.7.0
11
+ github.com/BrokkAi/acp-go v0.10.0
12
12
  License: Apache-2.0
13
- Source: https://github.com/BrokkAi/acp-go/tree/v0.7.0
13
+ Source: https://github.com/BrokkAi/acp-go/tree/v0.10.0
14
14
 
15
15
  ==============================================================================
16
16
 
@@ -8,9 +8,9 @@ Node.js and Python interpreters are installed separately and are not bundled.
8
8
 
9
9
  ==============================================================================
10
10
 
11
- github.com/BrokkAi/acp-go v0.1.0
11
+ github.com/BrokkAi/acp-go v0.8.1
12
12
  License: Apache-2.0
13
- Source: https://github.com/BrokkAi/acp-go/tree/v0.1.0
13
+ Source: https://github.com/BrokkAi/acp-go/tree/v0.8.1
14
14
 
15
15
  ==============================================================================
16
16
 
@@ -221,6 +221,25 @@ Source: https://github.com/BrokkAi/acp-go/tree/v0.1.0
221
221
 
222
222
  ==============================================================================
223
223
 
224
+ --- github.com/BrokkAi/acp-go/NOTICE ---
225
+
226
+ acp-go
227
+ Copyright 2026 Brokk.ai and contributors
228
+
229
+ This project is licensed under the Apache License, Version 2.0.
230
+ See LICENSE for the full terms. Third-party terms and attribution are
231
+ provided in licenses/THIRD_PARTY_NOTICES.txt.
232
+
233
+ Originally developed as part of BrokkAi/release-bot.
234
+
235
+ The pinned Agent Client Protocol JSON Schema artifacts in schema/
236
+ (schema.json, meta.json, VERSION) are distributed by the ACP project
237
+ (https://github.com/agentclientprotocol/agent-client-protocol) under the
238
+ Apache License 2.0. The generated code in schema/*_gen.go derives from
239
+ those artifacts.
240
+
241
+ ==============================================================================
242
+
224
243
  github.com/rivo/uniseg v0.4.7
225
244
  License: MIT AND Unicode-3.0
226
245
  Source: https://github.com/rivo/uniseg/tree/v0.4.7
package/bundle.json CHANGED
@@ -3,32 +3,32 @@
3
3
  "bug": {
4
4
  "project": "bug-bot",
5
5
  "command": "bbb",
6
- "version": "0.3.7",
7
- "source_commit": "ecac6efcee71e64b5ef3a6ad3ac8faf60aaca36a"
6
+ "version": "0.6.0",
7
+ "source_commit": "29d20411d60b0eab94910346efef28d42c9c66ac"
8
8
  },
9
9
  "feature": {
10
10
  "project": "feature-bot",
11
11
  "command": "bfb",
12
- "version": "0.1.4",
13
- "source_commit": "7f0967dc8e43d7cfa07c18e7e98cf49a88917fa2"
12
+ "version": "0.4.0",
13
+ "source_commit": "4c9cc8cd7dced2c065a5e43c3d875683d0534087"
14
14
  },
15
15
  "issue": {
16
16
  "project": "issue-bot",
17
17
  "command": "bib",
18
- "version": "0.5.7",
19
- "source_commit": "eec77420df17579ed02c8db6f27acce69c7fa0bc"
18
+ "version": "0.5.9",
19
+ "source_commit": "88ed397f9862f2c069372b15ef24282ec3bf4ed9"
20
20
  },
21
21
  "review": {
22
22
  "project": "review-bot",
23
23
  "command": "brv",
24
- "version": "0.2.6",
25
- "source_commit": "87ddecf9b1a567795c7624c16cc16ea6243f2779"
24
+ "version": "0.2.9",
25
+ "source_commit": "c940c1888346d6d77ad88257cec8946ed8adb90b"
26
26
  },
27
27
  "release": {
28
28
  "project": "release-bot",
29
29
  "command": "brb",
30
- "version": "0.6.3",
31
- "source_commit": "d7222a04471383ab228bda3c4b585ad73f61631d"
30
+ "version": "0.8.0",
31
+ "source_commit": "328694104cb6ce20d8276a79a517ff75809a12e8"
32
32
  },
33
33
  "repo": {
34
34
  "project": "repo-bot",
@@ -8,9 +8,9 @@ Node.js and Python interpreters are installed separately and are not bundled.
8
8
 
9
9
  ==============================================================================
10
10
 
11
- github.com/BrokkAi/acp-go v0.1.0
11
+ github.com/BrokkAi/acp-go v0.8.1
12
12
  License: Apache-2.0
13
- Source: https://github.com/BrokkAi/acp-go/tree/v0.1.0
13
+ Source: https://github.com/BrokkAi/acp-go/tree/v0.8.1
14
14
 
15
15
  ==============================================================================
16
16
 
@@ -221,6 +221,25 @@ Source: https://github.com/BrokkAi/acp-go/tree/v0.1.0
221
221
 
222
222
  ==============================================================================
223
223
 
224
+ --- github.com/BrokkAi/acp-go/NOTICE ---
225
+
226
+ acp-go
227
+ Copyright 2026 Brokk.ai and contributors
228
+
229
+ This project is licensed under the Apache License, Version 2.0.
230
+ See LICENSE for the full terms. Third-party terms and attribution are
231
+ provided in licenses/THIRD_PARTY_NOTICES.txt.
232
+
233
+ Originally developed as part of BrokkAi/release-bot.
234
+
235
+ The pinned Agent Client Protocol JSON Schema artifacts in schema/
236
+ (schema.json, meta.json, VERSION) are distributed by the ACP project
237
+ (https://github.com/agentclientprotocol/agent-client-protocol) under the
238
+ Apache License 2.0. The generated code in schema/*_gen.go derives from
239
+ those artifacts.
240
+
241
+ ==============================================================================
242
+
224
243
  Go runtime and standard library (BSD-3-Clause)
225
244
  Source: https://go.googlesource.com/go/+/refs/tags/go1.27.1/LICENSE
226
245
 
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.6.2",
2
+ "version": "0.6.3",
3
3
  "license": "Apache-2.0",
4
4
  "repository": {
5
5
  "type": "git",