@brokkai/brokk-town-linux-arm64 0.6.1 → 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": "a73312969bddc85802cdd968d342cb4fcf54a614", "tag": "v0.6.1-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
 
@@ -110,6 +119,118 @@ the Mayor as decision maker and shows Simplifier Bot's advice on every pending
110
119
  arrival. Auto lets the bot's assessment route routine work without a separate
111
120
  Mayoral decision, including closing low-value complex issues.
112
121
 
122
+ ### What each bot takes on
123
+
124
+ Each house can be told what work to accept and how much of it to produce. Every
125
+ setting here is one the bot already supports, and a house refuses a setting it
126
+ cannot honour rather than accepting it and ignoring it:
127
+
128
+ | Setting | Flag | Houses |
129
+ | --- | --- | --- |
130
+ | Required labels | `--labels` | bug, feature, issue, review, simplifier |
131
+ | Excluded labels | `--exclude-labels` | issue, review |
132
+ | One selected item | `--only` | issue (an issue number), review (a PR number) |
133
+ | Discovery focus | `--focus` | bug, feature, review |
134
+ | Per-run limit | `--limit` | bug/feature (issues filed), review (findings), simplifier (proposals), repo (repair attempts per revision), hall (bulletin items) |
135
+ | Attempts per item | `--attempts` | bug, feature, issue, review, release |
136
+ | Verification command | `--verify` | every house; overrides the town's `verify` |
137
+ | Release cadence, preflight, required workflows and assets | `--release-*` | release |
138
+
139
+ ```sh
140
+ ./bin/bt settings --repo BrokkAi/my-project --role issue --labels agent-ready --exclude-labels needs-discussion
141
+ ./bin/bt settings --repo BrokkAi/my-project --role issue --only 412
142
+ ./bin/bt settings --repo BrokkAi/my-project --role bug --focus 'the storage layer' --limit 3
143
+ ./bin/bt settings --repo BrokkAi/my-project --role review --verify '["make","review-check"]'
144
+ ./bin/bt settings --repo BrokkAi/my-project --role release --release-quiet-seconds 900 --release-burst 10 --release-burst-window-seconds 3600 --release-triage on
145
+ ./bin/bt settings --repo BrokkAi/my-project --role issue --clear-policy
146
+ ```
147
+
148
+ Config-file towns take the same settings under `bot_policies`, keyed by house;
149
+ the example lists every supported field. A town that sets none behaves exactly
150
+ as it did before these settings existed.
151
+
152
+ Town applies the same filters to its own queue that it sends to the bot, so the
153
+ queue you read is the queue the house will take from. Filtered work is not
154
+ hidden: each house's inspector states its policy, counts the inventory it holds
155
+ back, and marks each held item, so you can always see what your own filter
156
+ excluded. A house whose bundled bot is too old to read a policy is refused the
157
+ dispatch with the bot and version named, instead of running unfiltered.
158
+
159
+ ### Agent budgets
160
+
161
+ A town can bound how much automation it starts in a repeating accounting period:
162
+
163
+ ```sh
164
+ ./bin/bt settings --repo BrokkAi/my-project --budget-period day --budget-attempts 40 --budget-agent-minutes 600
165
+ ./bin/bt settings --repo BrokkAi/my-project --budget-period none
166
+ ```
167
+
168
+ The period is `day`, `week`, or `month` on your local clock, and at least one of
169
+ `--budget-attempts` or `--budget-agent-minutes` is required. Config-file towns
170
+ take the same settings as `"budget": {"period": "day", "max_attempts": 40,
171
+ "max_agent_minutes": 600}`.
172
+
173
+ Town charges the budget for every attempt that started an agent. A repository
174
+ inventory reads GitHub without one and is never charged; a branch repair is.
175
+ When a ceiling is reached, Town stops dispatching new agent work for that town
176
+ and says so in Town Hall with the time the period resets. Work already running
177
+ finishes normally, cancellation and saved work are untouched, and the repository
178
+ inventory keeps running so uncertain writes can still be reconciled. Other towns
179
+ are unaffected: a budget is per town, not per worker slot.
180
+
181
+ **Town cannot cap token or dollar spend.** No bundled agent harness reports usage
182
+ back through the worker protocol -- the acp-go runner hands a bot the agent's
183
+ final text and nothing else -- so Town would be enforcing a limit against numbers
184
+ it never receives. Attempts and agent minutes are what it measures, so those are
185
+ what it enforces. Where usage or cost is missing, Town Hall prints "not
186
+ reported"; it never shows absent telemetry as zero. Attempts whose elapsed time
187
+ never arrived are counted and reported separately rather than billed as free.
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
+
113
234
  For each profile, select any agent from the
114
235
  [official ACP registry](https://agentclientprotocol.com/get-started/registry),
115
236
  plus **Anvil**, **Muse ACP**, **Draupnir**, or a custom ACP command. The full
@@ -206,8 +327,14 @@ To remove a town, choose **Settings → Delete town** and confirm, or run:
206
327
  Deletion cancels its workers, cancels queued issue submissions, and removes it
207
328
  from the browser and terminal. GitHub repositories, issues, and PRs are preserved.
208
329
  Local history, uncertain writes, and private worktrees remain as recovery records.
209
- Adding the same repository again restores that history and its previous settings,
210
- 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
211
338
  finish before restoring a town.
212
339
 
213
340
  ## How work moves
@@ -276,7 +403,8 @@ limit its authority to publish while forbidding its release-preparation PR merge
276
403
  Town pauses Release Bot and rejects attempts to start or retry it under this policy.
277
404
  `all` also permits eligible external PRs. Town-managed merges require current clean Town evidence, GitHub mergeability, required checks
278
405
  and approvals. Town uses an expected-head squash merge, without admin bypass.
279
- 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`.
280
408
  Repositories that require a merge queue or prohibit squash merging need manual
281
409
  merges for now. GitHub is the final authority at write time.
282
410
 
@@ -292,9 +420,12 @@ bot profiles, verification command, and policy, then run:
292
420
  Configuration is a JSON array for town-only files. Each entry supplies `repo`, optional `branch` and
293
421
  `harness`, `agent`, optional `bot_agents`, optional `verify` argument vector,
294
422
  `merge_policy`, `simplifier_mode`, optional `review_close_severity` (`P1`, `P2`
295
- or `P3`, default `P2`), `poll_seconds`, `report_seconds`, and
296
- `max_cycles`. The example
297
- lists all required values. To persist global capacity alongside the town list,
423
+ or `P3`, default `P2`), optional `budget`, optional `bot_policies`,
424
+ `poll_seconds`, `report_seconds`, and `max_cycles`. The example
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,
298
429
  use the object form `{"max_workers": 2, "towns": [...]}`; the legacy array form
299
430
  remains accepted. When `serve --config` includes `max_workers`, that value
300
431
  overrides the persisted service setting in the same atomic state update; an
@@ -323,7 +454,9 @@ Repo-bot and issue/review scheduling use `poll_seconds` (default 60). Quiet repo
323
454
  use `report_seconds` (1800). Bug-bot, feature-bot, and simplifier-bot run at most every 30 minutes; mayor-bot
324
455
  writes a bulletin at most every `bulletin_seconds` (21600) and only after something merged; release-bot
325
456
  checks every five minutes and retains its own quiet window, minimum gap, and
326
- 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
327
460
  gets one fix round and two attempts per revision at any step; `max_cycles` is
328
461
  accepted for compatibility but no longer extends that.
329
462
 
@@ -433,10 +566,38 @@ the reported failure and ask Town to lift the budget:
433
566
 
434
567
  The next release run first calls the bot's `POST /v1/retry` worker API, which
435
568
  resets the pending release's attempt budget in its own workspace, then resumes
436
- 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
437
571
  Bot must advertise the `retry` capability; older pins report that plainly.
438
572
  Use `bt status` to inspect saved details and GitHub to resolve conflicts.
439
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
+
440
601
  The HTTP listener accepts loopback IPs only (default `127.0.0.1:8099`). Host,
441
602
  origin, and bearer key checks protect the local API. A browser supporting WebMCP
442
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/bmb CHANGED
Binary file
package/bin/brb CHANGED
Binary file
package/bin/brp CHANGED
Binary file
package/bin/brv CHANGED
Binary file
package/bin/bsb 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
@@ -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.6",
19
- "source_commit": "03fea25c14b28a7e3b86488c5f99b90ea6bb28a4"
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.1",
2
+ "version": "0.6.3",
3
3
  "license": "Apache-2.0",
4
4
  "repository": {
5
5
  "type": "git",