@brokkai/brokk-town-linux-x64 0.1.1 → 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": "f75803f0b79af78c32e55de064f1ee589714b9e3", "tag": "v0.1.1", "target": "linux-amd64"}
1
+ {"commit": "8222b017b527bd9879b1261370f64c12e297f8b4", "tag": "v0.1.2", "target": "linux-amd64"}
package/README.md CHANGED
@@ -70,13 +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 stable release is available from [GitHub](https://github.com/BrokkAi/brokk-town/releases/tag/v0.1.0)
73
+ The stable release is available from [GitHub](https://github.com/BrokkAi/brokk-town/releases/tag/v0.1.1)
74
74
  and npm:
75
75
 
76
76
  ```sh
77
77
  npm install -g @brokkai/brokk-town
78
78
  ```
79
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
+
80
86
  You can also build from source as above or install the current branch:
81
87
 
82
88
  ```sh
@@ -106,6 +112,10 @@ coding agent. Town does not require a separate bot installation: each dispatch
106
112
  uses `npx --yes` with an exact compatible release of bug-bot, feature-bot,
107
113
  issue-bot, review-bot, or release-bot, then communicates with it over a private
108
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.
109
119
 
110
120
  The worker uses
111
121
  standard-library HTTP/JSON, negotiates protocol and capabilities before work,
@@ -284,6 +294,13 @@ Animation never initiates a GitHub write. Reconnecting does not replay previousl
284
294
  seen deliveries. External PRs receive reviews but their branches are left to their
285
295
  authors; only locally recorded Town-created branches enter automatic repair.
286
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
+
287
304
  A review is bound to the exact base, head, PR description, and discussion snapshot. A suppressed
288
305
  duplicate comment is still a finding to check. Complete coverage, explicit
289
306
  resolution of every concern, and validation evidence are required for a clean
@@ -293,6 +310,7 @@ repair cycles become visible tasks needing attention.
293
310
  The default merge policy is `bot`: auto-merge eligible Town-created PRs. `manual`
294
311
  leaves merging to the operator; `all` also permits eligible external PRs. Town-managed merges require current clean Town evidence, GitHub mergeability, required checks
295
312
  and approvals. Town uses an expected-head squash merge, without admin bypass.
313
+ Change this at any time under **Town Settings → External contributions**.
296
314
  Repositories that require a merge queue or prohibit squash merging need manual
297
315
  merges for now. GitHub is the final authority at write time.
298
316
 
@@ -307,7 +325,8 @@ bot profiles, verification command, and policy, then run:
307
325
 
308
326
  Configuration is a JSON array for town-only files. Each entry supplies `repo`, optional `branch` and
309
327
  `harness`, `agent`, optional `bot_agents`, optional `verify` argument vector,
310
- `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
311
330
  lists all required values. To persist global capacity alongside the town list,
312
331
  use the object form `{"max_workers": 2, "towns": [...]}`; the legacy array form
313
332
  remains accepted. When `serve --config` includes `max_workers`, that value
@@ -351,6 +370,45 @@ local key in a URL fragment. `connection.json` and state snapshots are mode 0600
351
370
  Private agent commands, environment, and authentication configuration are omitted
352
371
  from public configuration snapshots for both town defaults and bot profiles;
353
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.
354
412
  Local logs and worktrees can contain repository content; keep this directory private.
355
413
 
356
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.1",
2
+ "version": "0.1.2",
3
3
  "license": "Apache-2.0",
4
4
  "repository": {
5
5
  "type": "git",