@brokkai/brokk-town-linux-arm64 0.1.0 → 0.1.2

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": "8006469e2b861513f469c4b481b551cc22ce1594", "tag": "v0.1.0", "target": "linux-arm64"}
1
+ {"commit": "8222b017b527bd9879b1261370f64c12e297f8b4", "tag": "v0.1.2", "target": "linux-arm64"}
package/README.md CHANGED
@@ -70,12 +70,19 @@ a commit shipped. Columns, prompts and transitions are not programmable.
70
70
  ## Installation and releases
71
71
 
72
72
  Source is published at [BrokkAi/brokk-town](https://github.com/BrokkAi/brokk-town).
73
- The bootstrap prerelease is available on npm:
73
+ The stable release is available from [GitHub](https://github.com/BrokkAi/brokk-town/releases/tag/v0.1.1)
74
+ and npm:
74
75
 
75
76
  ```sh
76
- npm install -g @brokkai/brokk-town@next
77
+ npm install -g @brokkai/brokk-town
77
78
  ```
78
79
 
80
+ While the service is running, Town checks npm outside its input and render loops.
81
+ When a newer stable release is available, the browser offers an **Upgrade Town**
82
+ button and the TUI offers `u`. After confirmation, the service installs that exact
83
+ version and asks for a restart. A failed or offline check never interrupts local
84
+ operation.
85
+
79
86
  You can also build from source as above or install the current branch:
80
87
 
81
88
  ```sh
@@ -84,8 +91,8 @@ go install github.com/BrokkAi/brokk-town/cmd/bt@master
84
91
 
85
92
  The release pipeline builds checksum-verified Linux/macOS archives for amd64 and
86
93
  arm64, plus `@brokkai/brokk-town` and four native npm packages. All packages carry
87
- the project license, attribution, and complete third-party notices. The initial `0.1.0-rc.1` npm bootstrap is published. After the first stable GitHub
88
- release, the supported installer commands are:
94
+ the project license, attribution, and complete third-party notices. The supported
95
+ installer commands are:
89
96
 
90
97
  ```sh
91
98
  sh install.sh # From a checkout; defaults to ~/.local/bin
@@ -100,24 +107,17 @@ for first-release setup, access checks, publishing, and recovery.
100
107
 
101
108
  ## Connect real repositories
102
109
 
103
- Install and authenticate `git`, GitHub CLI (`gh`), your chosen coding agent, and
104
- Brokk bot releases that advertise **Town Worker Protocol v1**. Town no longer
105
- compiles the bots into `bt`; each dispatch starts the installed `bbb`, `bfb`,
106
- `bib`, `brv`, or `brb` executable from the service PATH and communicates over a
107
- private Unix socket. Run `<command> version` and `<command> worker --help` to
108
- confirm a compatible release.
109
-
110
- Install the released Worker Protocol v1 npm distributions:
111
-
112
- ```sh
113
- npm install -g @brokkai/bug-bot@0.3.1 \
114
- @brokkai/feature-bot@0.1.1 \
115
- @brokkai/issue-bot@0.5.1 \
116
- @brokkai/review-bot@0.2.1 \
117
- @brokkai/release-bot@0.5.1
118
- ```
119
-
120
- Checksum-verified native bot releases are equally supported. The worker uses
110
+ Install and authenticate `git`, GitHub CLI (`gh`), Node.js/npm, and your chosen
111
+ coding agent. Town does not require a separate bot installation: each dispatch
112
+ uses `npx --yes` with an exact compatible release of bug-bot, feature-bot,
113
+ issue-bot, review-bot, or release-bot, then communicates with it over a private
114
+ Unix socket. Town never selects an ambient or floating bot version.
115
+ Each bot's Settings panel shows its current pin. **Check for bot update** reads
116
+ npm's stable tag, and **Use VERSION** stages that exact version for the Mayor to
117
+ save. The pin changes only for that town and takes effect on the bot's next run;
118
+ capability and reported-version checks still run before any repository work.
119
+
120
+ The worker uses
121
121
  standard-library HTTP/JSON, negotiates protocol and capabilities before work,
122
122
  streams contiguous progress events, and returns explicit typed results. It never
123
123
  requires Town to parse bot-private state. See
@@ -128,11 +128,10 @@ requires Node.js and `npx`. Choose another harness in Settings as described belo
128
128
  Git must already be able to clone and push your GitHub repositories; Town uses
129
129
  the current Git/gh credentials.
130
130
 
131
- Bot executables can be replaced while the Town service remains running. The next
132
- dispatch resolves PATH again and negotiates with the new service. An active
133
- dispatch pins its resolved path, executable hash, and reported version, then
134
- rechecks all three; a mid-dispatch replacement fails uncertainly and is resolved
135
- through durable bot state and GitHub reconciliation.
131
+ Town resolves and hashes the `npx` executable for every dispatch and rechecks it
132
+ and the pinned bot's reported version afterward. A mid-dispatch executable or
133
+ version change fails uncertainly and is resolved through durable bot state and
134
+ GitHub reconciliation.
136
135
 
137
136
  ```sh
138
137
  ./bin/bt serve --repo BrokkAi/my-project
@@ -295,6 +294,13 @@ Animation never initiates a GitHub write. Reconnecting does not replay previousl
295
294
  seen deliveries. External PRs receive reviews but their branches are left to their
296
295
  authors; only locally recorded Town-created branches enter automatic repair.
297
296
 
297
+ New external issues and PRs first wait at Town Hall for a durable Mayoral
298
+ decision. **Admit** sends the work to Issue Bot or Review Bot; **Decline** keeps
299
+ Town from acting on it without changing GitHub. Feature Bot proposals follow the
300
+ same route by default and can be exempted in **Town Settings → External
301
+ contributions**. The browser provides the primary decision UX; scripts may use
302
+ `bt admit --repo OWNER/REPO --task issue:123` or `bt decline ...`.
303
+
298
304
  A review is bound to the exact base, head, PR description, and discussion snapshot. A suppressed
299
305
  duplicate comment is still a finding to check. Complete coverage, explicit
300
306
  resolution of every concern, and validation evidence are required for a clean
@@ -304,6 +310,7 @@ repair cycles become visible tasks needing attention.
304
310
  The default merge policy is `bot`: auto-merge eligible Town-created PRs. `manual`
305
311
  leaves merging to the operator; `all` also permits eligible external PRs. Town-managed merges require current clean Town evidence, GitHub mergeability, required checks
306
312
  and approvals. Town uses an expected-head squash merge, without admin bypass.
313
+ Change this at any time under **Town Settings → External contributions**.
307
314
  Repositories that require a merge queue or prohibit squash merging need manual
308
315
  merges for now. GitHub is the final authority at write time.
309
316
 
@@ -318,7 +325,8 @@ bot profiles, verification command, and policy, then run:
318
325
 
319
326
  Configuration is a JSON array for town-only files. Each entry supplies `repo`, optional `branch` and
320
327
  `harness`, `agent`, optional `bot_agents`, optional `verify` argument vector,
321
- `merge_policy`, `poll_seconds`, `report_seconds`, and `max_cycles`. The example
328
+ `merge_policy`, `mayoral_feature_review`, `poll_seconds`, `report_seconds`, and
329
+ `max_cycles`. The example
322
330
  lists all required values. To persist global capacity alongside the town list,
323
331
  use the object form `{"max_workers": 2, "towns": [...]}`; the legacy array form
324
332
  remains accepted. When `serve --config` includes `max_workers`, that value
@@ -362,6 +370,45 @@ local key in a URL fragment. `connection.json` and state snapshots are mode 0600
362
370
  Private agent commands, environment, and authentication configuration are omitted
363
371
  from public configuration snapshots for both town defaults and bot profiles;
364
372
  each bot's effective harness, model, and effort are visible.
373
+
374
+ ### Source funnels
375
+
376
+ Optional `funnels` make issue intake source-neutral. Each named funnel declares a
377
+ provider, validated location/filter, a local credential reference, explicit
378
+ priority policy, overlap policy, and allowlisted lifecycle mappings. Credential
379
+ references are resolved by adapters at request time; secret values never enter
380
+ Town state, model prompts, events, logs, or public snapshots. Public state shows
381
+ the safe funnel configuration and each normalized item's source identity, URL,
382
+ revision, external state, eligibility, capabilities, priority policy, last sync,
383
+ and typed outcome.
384
+
385
+ GitHub funnels support query, `selected_issues`, and comma-separated
386
+ `include_labels`/`exclude_labels`. Focused selections are read by issue identity
387
+ instead of relying on search indexing. `working` and `blocked` mappings translate
388
+ the normalized lifecycle into confirmed label changes. Slack is the second real
389
+ adapter: it reads a configured channel through paginated Web API calls and maps
390
+ configured lifecycle actions to reactions plus bounded thread replies. Slack
391
+ tokens are obtained from a private resolver immediately before each request.
392
+ Read-only funnels and empty per-transition mappings stay visibly unsupported.
393
+
394
+ Funnels also recognize provider-native done signals on inbound reads. A Slack
395
+ message with a present `:white_check_mark:` or `:heavy_check_mark:` reaction is
396
+ normalized as **Done**; a GitHub issue whose state is `closed` is normalized as
397
+ **Closed**. Both remain in the durable inventory with their source provenance,
398
+ but become ineligible and leave the worker queue. A GitHub selector must include
399
+ closed issues (for example `is:issue`, not `is:issue is:open`) if Town is to
400
+ observe that transition. Done is based only on an explicit item state or reaction;
401
+ an incomplete or empty inventory never closes missing work by implication.
402
+
403
+ Lifecycle mutations use a durable intent before the provider call. A lost
404
+ response remains `uncertain`; reconciliation is read-only and absence of a
405
+ receipt never permits a duplicate label, reaction, comment, or thread reply.
406
+ Incomplete reads, partial discovery, authentication failures, rate limits,
407
+ unsupported actions, and uncertain writes remain distinct outcomes. Funnel
408
+ declaration order is never scheduling priority. Overlapping source identities
409
+ are retained, deduplicated, or rejected only according to the explicit overlap
410
+ policy. Demo and tests use synthetic or fake providers and perform no live source
411
+ or agent automation. See the complete JSON example for GitHub and Slack shapes.
365
412
  Local logs and worktrees can contain repository content; keep this directory private.
366
413
 
367
414
  If a push or merge response is lost, Town checks GitHub rather than assuming
package/bin/bt CHANGED
Binary file
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.0",
2
+ "version": "0.1.2",
3
3
  "license": "Apache-2.0",
4
4
  "repository": {
5
5
  "type": "git",