@staix/agent-hub 0.12.23 → 0.12.24
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 +98 -0
- package/README.md +8 -3
- package/docs/addons/claude-mem.md +24 -0
- package/docs/addons/codex-plugin.md +8 -0
- package/docs/addons/dot-admit.md +8 -0
- package/docs/addons/open-code-review.md +8 -0
- package/docs/addons/ponytail.md +23 -0
- package/docs/addons/ripwire.md +22 -0
- package/docs/agent-notes/README.md +5 -0
- package/docs/agent-notes/adapters.md +8 -1
- package/docs/agent-notes/bus.md +3 -1
- package/docs/agent-notes/daemon.md +7 -1
- package/docs/agent-notes/local-worker.md +4 -2
- package/docs/agent-notes/tasks.md +4 -0
- package/docs/agent-notes/tests.md +2 -1
- package/docs/bench.md +28 -3
- package/docs/cooperbench.md +4 -0
- package/docs/data-policy.md +36 -0
- package/docs/events.md +3 -0
- package/docs/gsd-collaboration-analysis.md +48 -0
- package/docs/memory.md +231 -0
- package/docs/operations.md +651 -14
- package/docs/plans/2026-10-11-issues-109-sequential.md +81 -0
- package/docs/plans/2026-10-11-routing-evaluation-proposal.md +30 -0
- package/docs/profiles.md +57 -0
- package/docs/quickstart.md +1 -1
- package/docs/research.md +31 -1
- package/docs/roles.md +85 -0
- package/docs/sdlc.md +170 -0
- package/docs/security.md +111 -4
- package/docs/smoke.md +282 -0
- package/docs/specs/2026-09-19-agent-hub-design.md +601 -7
- package/docs/specs/2026-10-12-backlog-implementation-plan.md +186 -0
- package/docs/specs/2026-10-12-office-view-design.md +212 -0
- package/docs/text-projection.md +19 -0
- package/docs/verification/2026-10-11-acp-watch-t0.md +33 -0
- package/docs/verification/2026-10-11-agent-config-inventory.md +20 -0
- package/docs/verification/2026-10-11-jcode-peer-contract.md +27 -0
- package/docs/verification/2026-10-13-0.12.24.md +94 -0
- package/docs/verification/2026-10-13-board-phone.md +31 -0
- package/docs/verification/2026-10-13-fsmonitor-fixture-attribution.md +19 -0
- package/docs/verified.json +22 -13
- package/package.json +2 -1
- package/plugins/agent-hub/.claude-plugin/plugin.json +1 -1
- package/plugins/agent-hub/ROLE-NOTICE.md +26 -0
- package/plugins/agent-hub/server.js +1175 -339
- package/scripts/check-docs.mjs +129 -0
- package/src/adapters/acp.ts +112 -13
- package/src/adapters/claude-channel.ts +48 -11
- package/src/adapters/codex-appserver.ts +11 -0
- package/src/adapters/jcode.ts +110 -0
- package/src/adapters/local-worker.ts +10 -7
- package/src/adapters/pi.ts +94 -20
- package/src/cli/attention.ts +60 -0
- package/src/cli/bench.ts +24 -5
- package/src/cli/board-read.ts +12 -0
- package/src/cli/console-state.ts +103 -17
- package/src/cli/console.ts +54 -8
- package/src/cli/facts-hook.ts +12 -4
- package/src/cli/help.ts +35 -9
- package/src/cli/identity.ts +18 -7
- package/src/cli/init.ts +48 -10
- package/src/cli/jcode-mcp.ts +58 -0
- package/src/cli/kimi-mcp.ts +53 -0
- package/src/cli/launch.ts +16 -1
- package/src/cli/main.ts +392 -57
- package/src/cli/memory.ts +193 -0
- package/src/cli/output.ts +45 -4
- package/src/cli/pet-config.ts +1 -0
- package/src/cli/pet.ts +83 -0
- package/src/cli/preview.ts +38 -5
- package/src/cli/status-lines.ts +1 -1
- package/src/cli/tail-render.ts +1 -0
- package/src/cli/upgrade-runtime.ts +32 -3
- package/src/cli/watch.ts +31 -0
- package/src/hub/activity.ts +53 -0
- package/src/hub/ask.ts +10 -5
- package/src/hub/bench.ts +10 -3
- package/src/hub/board.ts +222 -16
- package/src/hub/bus.ts +48 -9
- package/src/hub/citations.ts +7 -0
- package/src/hub/conductor.ts +12 -7
- package/src/hub/config-trust.ts +4 -2
- package/src/hub/crash.ts +9 -0
- package/src/hub/daemon.ts +910 -120
- package/src/hub/delivery-journal.ts +5 -0
- package/src/hub/envelope.ts +1 -1
- package/src/hub/events.ts +12 -2
- package/src/hub/facts.ts +26 -7
- package/src/hub/git.ts +8 -2
- package/src/hub/github-import.ts +28 -0
- package/src/hub/hub-tools.ts +49 -10
- package/src/hub/inference.ts +1 -1
- package/src/hub/lifecycle-schema.ts +17 -0
- package/src/hub/listen.ts +15 -0
- package/src/hub/manager.ts +12 -5
- package/src/hub/path-policy.ts +96 -0
- package/src/hub/peer-catalog.ts +28 -0
- package/src/hub/permission-mode.ts +19 -5
- package/src/hub/planning.ts +70 -0
- package/src/hub/profiles.ts +74 -0
- package/src/hub/projected-diff.ts +73 -0
- package/src/hub/projection-exec.ts +24 -0
- package/src/hub/research.ts +144 -21
- package/src/hub/roles.ts +123 -0
- package/src/hub/roster.ts +23 -0
- package/src/hub/routing.ts +18 -5
- package/src/hub/sdlc-queue.ts +112 -0
- package/src/hub/sdlc-release.ts +125 -0
- package/src/hub/sdlc.ts +250 -0
- package/src/hub/settings.ts +34 -15
- package/src/hub/shipped-roles.ts +25 -0
- package/src/hub/snapshots.ts +89 -15
- package/src/hub/start-mode.ts +7 -5
- package/src/hub/supervision.ts +1 -0
- package/src/hub/task-sweep.ts +1 -1
- package/src/hub/tasks.ts +892 -87
- package/src/hub/text-projection.ts +126 -0
- package/src/hub/tooling.ts +159 -0
- package/src/hub/ui.ts +16 -2
- package/src/hub/workflow.ts +71 -0
- package/src/local/sandbox.ts +6 -4
- package/src/local/tools.ts +11 -6
- package/src/memory/brief.ts +28 -14
- package/src/memory/import.ts +55 -0
- package/src/memory/recall.ts +84 -0
- package/src/memory/store.ts +750 -0
- package/src/memory/sync.ts +145 -0
- package/src/pet/NOTICE.md +10 -0
- package/src/pet/characters.ts +1438 -0
- package/src/pet/config.ts +31 -0
- package/src/pet/frame.ts +17 -0
- package/src/pet/pixels.ts +28 -0
- package/src/role-text.d.ts +1 -0
- package/src/ui/index.html +842 -46
- package/src/ui/needs.ts +58 -0
- package/src/ui/office-model.ts +440 -0
- package/src/ui/peer-palette.ts +16 -0
- package/src/ui/task-board.ts +49 -0
- package/src/ui/task-progress.ts +5 -1
- package/templates/AGENTS.block.md +3 -2
- package/templates/config.json +5 -1
- package/templates/profiles/dev.json +22 -0
- package/templates/profiles/general.json +26 -0
- package/templates/profiles/research.json +57 -0
- package/templates/profiles/writing.json +28 -0
- package/templates/roles/NOTICE.md +26 -0
- package/templates/roles/dev/backend-engineer.md +26 -0
- package/templates/roles/dev/code-reviewer.md +26 -0
- package/templates/roles/dev/frontend-engineer.md +26 -0
- package/templates/roles/dev/security-reviewer.md +26 -0
- package/templates/roles/dev/software-architect.md +26 -0
- package/templates/roles/dev/test-engineer.md +26 -0
- package/templates/roles/research/analyst.md +26 -0
- package/templates/roles/research/fact-checker.md +26 -0
- package/templates/roles/research/research-lead.md +26 -0
- package/templates/roles/research/researcher.md +26 -0
- package/templates/roles/research/statistician.md +26 -0
package/docs/security.md
CHANGED
|
@@ -55,7 +55,7 @@ the console. Merged and generated Claude settings live in 0600 state files and
|
|
|
55
55
|
are passed by path, keeping caller settings out of process argv.
|
|
56
56
|
|
|
57
57
|
Claude ask-when-needed grants only resolving project file targets outside
|
|
58
|
-
.agenthub, .git, .claude, .codex, .qwen, .kimi, .pi and .
|
|
58
|
+
.agenthub, .git, .claude, .codex, .qwen, .kimi, .kimi-code, .pi, .mcp.json, .agents and .claude.json. Symlink escapes, protected aliases, traversal and
|
|
59
59
|
unresolved wildcard targets receive no decision. Names are compared folded (letter case, compatibility forms and
|
|
60
60
|
the code points HFS+ ignores; case-insensitive APFS folds case but ignored none in the probe; so a look-alike such
|
|
61
61
|
as a long s or a name with a zero-width joiner is the same name), the path is judged inside the project, and
|
|
@@ -109,11 +109,11 @@ Please report vulnerabilities privately through GitHub's "Report a vulnerability
|
|
|
109
109
|
|
|
110
110
|
- `ahub ui` uses the authenticated console control connection to start an ephemeral HTTP listener on `127.0.0.1`. No UI listener exists before that command. The control and Codex proxy ports continue to refuse every `Origin` header.
|
|
111
111
|
- The daemon issues a cryptographically random, single-use bootstrap ticket valid for 60 seconds. The CLI opens the dashboard with that ticket in the URL fragment, never a query string or the control token. The static page removes the fragment immediately and exchanges it with a same-origin POST. Tickets are consumed once; expired tickets cannot create sessions.
|
|
112
|
-
- The exchange creates a separate random session, valid for one hour without renewal, in an `HttpOnly; SameSite=Strict; Path=/` cookie named for this listener's port. Sessions and tickets live only in memory and die with the daemon. The page itself keeps one more cookie, `agent-hub-theme` (issue #246): script-set, `SameSite=Strict`, kept for a year for the whole `127.0.0.1` host, and read back only as one of `system`, `light` or `dark`. HTTP is loopback-only; the cookie is not a substitute for the origin checks.
|
|
112
|
+
- The exchange creates a separate random session, valid for one hour without renewal, in an `HttpOnly; SameSite=Strict; Path=/` cookie named for this listener's port. Sessions and tickets live only in memory and die with the daemon. The page itself keeps one more cookie, `agent-hub-theme` (issue #246): script-set, `SameSite=Strict`, kept for a year for the whole `127.0.0.1` host, and read back only as one of `system`, `light` or `dark`. A second script-set cookie, `agent-hub-office` (issue #264), keeps the Office view choice under the same attributes and is read back only as `off`, `flat` or `isometric`. HTTP is loopback-only; the cookie is not a substitute for the origin checks.
|
|
113
113
|
- Every request must have the exact listener Host. Every data or action request, including the ticket exchange and snapshot polling, must be POST with the exact listener Origin and JSON content type. Foreign and missing origins, missing or expired sessions, oversized bodies and unknown actions are rejected. There is no CORS support. The only unauthenticated GET is the fixed, data-free HTML shell. No files or paths are served dynamically.
|
|
114
114
|
- Responses are non-cacheable, cannot be framed, suppress referrers, and use a content security policy restricting scripts/styles to the shipped inline content and connections to this origin. Browser text is rendered with textContent, never interpreted as HTML.
|
|
115
|
-
- The browser receives a bounded redacted event stream, peer states and queue counts, public task views, budget windows, pending approvals, the settings rows (closed values and ids, the file each comes from) and each startable peer's start plan (issue #269),
|
|
116
|
-
- The closed action list
|
|
115
|
+
- The browser receives a bounded redacted event stream, peer states and queue counts, public task views, budget windows, pending approvals, the settings rows (closed values and ids, the file each comes from) and each startable peer's start plan (issue #269), benchmark run summaries (issue #251): the newest runs in `~/.agenthub/bench/`, whichever project on this machine ran them, by suite name, arm label, state, the task id in progress, counts, tokens and times, never suite text, and the office view's optional fields (issue #264): each peer's open turn (start time, attributed task id, attribution kind), a `checking` flag on tasks whose check is running, and warning `links` of overlapping, conflicting or cohort tasks (task and peer ids only, never paths, symbols or reasons; a PII task never joins a link, and a private or PII-attributed turn exposes no task id). Private envelope bodies and PII task text never cross this endpoint. Local-worker and Pi approval titles can contain PII, so their details remain terminal-only; the dashboard identifies the request and directs the operator to `ahub tail` before allowing it. Budget checkpoint summaries are also omitted.
|
|
116
|
+
- The closed action list includes permission response, peer pause/resume, console message, task proposal/assignment and the settings actions below (set, undo, preview). Project-board actions add revision-fenced planning, Backlog pull/return/split/undo and release planning/state changes through Tasks; they do not tag, publish or write GitHub state. These use the existing daemon/task paths and budget pause rules. `start_peer` (issue #269) starts a peer from a closed list in the mode a person set, with a command the hub assembles: the request carries a peer id and nothing else. There is no generic control proxy, task-detail read, shell, file access, free-form configuration edit, budget override, launch of a caller-chosen command or daemon shutdown API.
|
|
117
117
|
- The listener stops with the daemon. Expired sessions must be reopened with `ahub ui`; the page does not silently obtain new credentials.
|
|
118
118
|
|
|
119
119
|
## Dashboard settings and the settings session (issue #269)
|
|
@@ -144,3 +144,110 @@ The manager can start registered hubs in attended mode. Its project launches do
|
|
|
144
144
|
not inherit state, unattended or gateway URL/key overrides from the session that
|
|
145
145
|
opened the manager. Native memory is deliberately not a project-isolation boundary:
|
|
146
146
|
its existing basename/worktree aliases and provider accounts can remain shared.
|
|
147
|
+
|
|
148
|
+
## Peer roster authority
|
|
149
|
+
|
|
150
|
+
The running peer roster changes only through console-only settings requests.
|
|
151
|
+
`ahub roster` is a person's CLI command, including its read form; no hub tool
|
|
152
|
+
exposes the catalog or edits membership. An ordinary dashboard can remove a peer,
|
|
153
|
+
but adding requires the existing settings-session authority. Removing the
|
|
154
|
+
conductor holder is refused. Local and Pi scoped tools cannot write `.agenthub`.
|
|
155
|
+
Claude, Codex and Kimi still follow their own file permissions and can edit a
|
|
156
|
+
config file; such an edit changes participation only at the next hub start. A
|
|
157
|
+
live settings write or undo applies its own roster key and does not adopt other
|
|
158
|
+
file edits. External ids outside the known native catalog keep their prior
|
|
159
|
+
admission rules.
|
|
160
|
+
|
|
161
|
+
Kimi's pull-only TUI owns its tool approvals and session. The person's launcher
|
|
162
|
+
merges/removes only the hub MCP entry; the daemon never edits that file and
|
|
163
|
+
refuses headless starts while a stale entry exists. An attached Kimi TUI blocks
|
|
164
|
+
controlled recovery instead of being treated as a hub-owned headless process.
|
|
165
|
+
Scoped Pi and local-worker write/edit grants check both the original project-relative
|
|
166
|
+
path and its resolved target for protected agent configuration names. A protected
|
|
167
|
+
directory symlinked to an ordinary project directory still asks a person; an alias
|
|
168
|
+
into a protected directory also asks. Effects use the guarded real path and recheck
|
|
169
|
+
it after approval. Explicit approval and never-ask retain their existing meaning
|
|
170
|
+
(#322). ACP permissions arriving offline are cancelled before any auto-approval or
|
|
171
|
+
console request; pending permissions are withdrawn on watchdog, offline or stop,
|
|
172
|
+
and a late person answer cannot grant them (#311).
|
|
173
|
+
|
|
174
|
+
The shared scoped-grant exclusion also covers `.agents` skills and `.claude.json`.
|
|
175
|
+
The latter is conservatively protected by name; its default documented location
|
|
176
|
+
is in the home directory, not a project loader. The source inventory and limits
|
|
177
|
+
are in [the configuration inventory](verification/2026-10-11-agent-config-inventory.md).
|
|
178
|
+
Instruction files `AGENTS.md`, `CLAUDE.md` and `QWEN.md` remain grantable by default.
|
|
179
|
+
A person can set `scoped_grants.protect_instructions` to true to require approval
|
|
180
|
+
for scoped writes and edits through original or resolved spellings. It applies
|
|
181
|
+
live after a settings write or undo, never changes reads or never-ask, and cannot
|
|
182
|
+
be set through an agent, tools or conductor surface. Claude's daemon response
|
|
183
|
+
withholds the scoped mode on these writes so an older hook grants nothing too.
|
|
184
|
+
|
|
185
|
+
Qwen Code's optional production ACP peer requires qwen-code 0.25.0 native identity
|
|
186
|
+
and advertised mode ids before setting a policy or starting work. Its own tools
|
|
187
|
+
have no hub sandbox; auto-edit approves file edits, yolo every tool. Configured
|
|
188
|
+
never-ask still requires the person's confirmation. qwen_cmd is machine-local and
|
|
189
|
+
never editable through settings. Legacy benchmark adapters remain unmanaged by
|
|
190
|
+
this production table. Startup diagnostics withhold native host/payload details.
|
|
191
|
+
|
|
192
|
+
Jcode is optional, source/version-fenced and runs native tools without a hub sandbox or hub permission-mode mapping. .jcode joins the scoped-grant exclusion, including lexical/resolved aliases. Only a person writes its unique project MCP entry; foreign/override/symlink entries refuse. The hub owns a private daemon/socket and ACP group, never the global daemon, and copies no credentials. Native diagnostics withhold payloads/hosts. Unproved conversation loads refuse; no fresh replacement is called a restore.
|
|
193
|
+
|
|
194
|
+
# Transient ACP activity (#286)
|
|
195
|
+
|
|
196
|
+
- Watch activity can contain file contents, thoughts and command output. It is console-role only, kept in a bounded in-memory ring and exposed only through the `watch` control request. Agent shells, conductor tools, dashboard snapshots, hub tools and memory observers cannot read it. Terminal bodies pass through the console's sanitization and wrapping helpers. Slow sockets close instead of accumulating unbounded output.
|
|
197
|
+
- Private/PII turns show a single stub; the adapter latches privacy for that turn. The existing final-answer bus and native approval paths (console and dashboard) remain independent, with their existing privacy rules. Watch never adds activity to either path or any disk log.
|
|
198
|
+
- There is no Qwen dual-output input file or TUI transport in this slice; Q2-Q6 are unverified and TUI mode stays refused.
|
|
199
|
+
|
|
200
|
+
## Global attention metadata (#280, phase 3)
|
|
201
|
+
|
|
202
|
+
The optional status `needs` projection contains act/watch counts, a known state
|
|
203
|
+
and the first item (kind, level, peer/id and numeric times only). Status JSON has
|
|
204
|
+
no console-local unread-message count and no full item list. The console-role
|
|
205
|
+
reply to the existing status request additionally supplies `attentionItems`,
|
|
206
|
+
using the same body-free allowlist so stream navigation needs no board-text read.
|
|
207
|
+
Peer/tools status callers do not receive that full list. The summary and item
|
|
208
|
+
projection never reads task title/detail, approval title/options, pause reason,
|
|
209
|
+
error text or paths, and is never forwarded to memory. PROTOCOL remains 16 and
|
|
210
|
+
EVENTS_SCHEMA remains 1; clients that ignore optional fields remain compatible.
|
|
211
|
+
|
|
212
|
+
The file-reading pet command verifies the recorded process identity through the
|
|
213
|
+
shared liveness contract and treats missing/unconfirmed evidence as unavailable.
|
|
214
|
+
Recovery uses the existing lock/runner read path; unknown is never absent and
|
|
215
|
+
navigation grants no permission or mutation authority. Built-in characters and the dashboard projection use the same structural
|
|
216
|
+
privacy boundary described below.
|
|
217
|
+
|
|
218
|
+
Built-in text-frame characters are literal data, not user files or runtime image
|
|
219
|
+
loads. Presentation config admits only known ids/sizes/glyph modes, never paths
|
|
220
|
+
or arbitrary glyph bodies. Character cycling emits no workflow effects. Larger
|
|
221
|
+
frames carry only structural need ids/counts and exclude source/notice prose;
|
|
222
|
+
private task and approval details remain in their existing operator views.
|
|
223
|
+
|
|
224
|
+
The optional dashboard attention input contains only structural task ids, states,
|
|
225
|
+
owner/reviewer ids, approval ids and numeric times, peer delivery states and
|
|
226
|
+
budget pause times. It is assembled from the same allowlisted input as status;
|
|
227
|
+
task text, plans, approval prose, error text and paths are excluded. This input
|
|
228
|
+
is supplied only inside console-authorized dashboard snapshots, never ordinary
|
|
229
|
+
status replies or status.json. The pet creates trusted inline SVG pixel nodes
|
|
230
|
+
from built-in literal frames with existing theme colours, without HTML insertion,
|
|
231
|
+
inline handlers, style attributes or external assets. Existing CSP hashing,
|
|
232
|
+
headers, origin and session authorization remain in force. Clicking scrolls and
|
|
233
|
+
focuses only; it cannot grant permissions or invoke a mutation.
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
## Hub-owned structured memory (#258)
|
|
237
|
+
|
|
238
|
+
With a project config, native hub memory is enabled unless `memory.native` is
|
|
239
|
+
false. Append-only segments and their derived index stay in the private hub-home
|
|
240
|
+
memory directory, created with 0700 directory permissions. New note segments request mode 0600, and `index.db` receives a best-effort
|
|
241
|
+
0600 chmod. Existing file modes and SQLite-created WAL/shared-memory sidecar
|
|
242
|
+
modes are not a per-file guarantee; the store protects access through its
|
|
243
|
+
explicitly chmodded 0700 parent directory.
|
|
244
|
+
PII-task notes, PII-pattern notes and secret-looking text are refused before
|
|
245
|
+
persistence; promotions are
|
|
246
|
+
screened again. The index can be rebuilt from segments and does not replace the
|
|
247
|
+
separate claude-mem worker database.
|
|
248
|
+
|
|
249
|
+
Sync starts only after a person configures a remote. Public GitHub remotes are
|
|
250
|
+
refused; unknown visibility proceeds with a warning for the configured remote.
|
|
251
|
+
Short-term segments, machine identity and the derived index are excluded from
|
|
252
|
+
sync. Suggested graph edges are off by default and are not evidence until a
|
|
253
|
+
person confirms them. Operational details and limits: [hub memory](memory.md).
|
package/docs/smoke.md
CHANGED
|
@@ -2,6 +2,49 @@
|
|
|
2
2
|
|
|
3
3
|
`scripts/check.sh` covers everything against fakes. The legs below need real accounts and an interactive terminal, so they are run by hand and recorded here.
|
|
4
4
|
|
|
5
|
+
## Hub memory (#258)
|
|
6
|
+
|
|
7
|
+
Not run yet (2026-10-12). Source and fakes cover tiers, the graph, retrieval, sync between two simulated homes and a bare remote, leases, import and suggestions (`test/memory-*.test.ts`).
|
|
8
|
+
|
|
9
|
+
- [ ] Real sync between two physical machines through a private GitHub remote over SSH: entries, a forget, a lease and a conflict each visible on the other side.
|
|
10
|
+
- [ ] `gh` reports a public test remote and the sync refuses it.
|
|
11
|
+
- [ ] `ahub memory import claude-mem` against the live claude-mem store of this machine: counts and skipped classes, claude-mem unchanged.
|
|
12
|
+
- [ ] `memory.suggest_edges: true` with the hub's model reachable: suggestions appear, are drawn dashed, and stay out of briefs until confirmed.
|
|
13
|
+
- [ ] Dashboard Memory section and Long-term tasks tab in a browser, light and dark, at phone width.
|
|
14
|
+
- [ ] AC11 arms on a bench project (`--memory off`, `claude-mem`, `native`), 5 repeats each, and two weeks of research records with `briefs`.
|
|
15
|
+
|
|
16
|
+
## Office view (#264, phases 1-4)
|
|
17
|
+
|
|
18
|
+
Not run live yet (unverified). Phases 1-4 ship the office with its Off/Flat/
|
|
19
|
+
Isometric control: snapshot-driven motion (card moves, message arcs, delivery
|
|
20
|
+
marks, the busy latch, the settle rule), the optional turn/checking/links
|
|
21
|
+
snapshot fields (exact task bubble, check-running mark, finishing-a-turn,
|
|
22
|
+
warning lines), and the isometric projection of the same model.
|
|
23
|
+
`test/office-model.test.ts`, `test/office-view.test.ts`,
|
|
24
|
+
`test/tasks.test.ts` and `test/daemon.test.ts` cover the model, the daemon
|
|
25
|
+
fields, the cookie, the CSP cleanliness, the motion wiring, the settle rule and
|
|
26
|
+
the projection (same focus order and names as Flat) against fakes, but no
|
|
27
|
+
browser was opened.
|
|
28
|
+
The live leg: `ahub up` on a scratch project with two agents working, `ahub ui`,
|
|
29
|
+
set the Office View control to Flat and to Isometric. Check the scene in both
|
|
30
|
+
projections, in both themes and at phone
|
|
31
|
+
width with the browser console open (no CSP violations), that cards glide between
|
|
32
|
+
rooms and desks as tasks change state, that arcs and marks fade after about ten
|
|
33
|
+
seconds, that desks and cards are focusable with sensible names in the same
|
|
34
|
+
order under both projections, that activating
|
|
35
|
+
one scrolls to and highlights the matching list row, that reduced motion gives
|
|
36
|
+
static positions, and that the page weight stays within the 30 KB budget of the
|
|
37
|
+
issue. Record the look here when performed.
|
|
38
|
+
|
|
39
|
+
## Add-on arms and fingerprints (#248)
|
|
40
|
+
|
|
41
|
+
Not run yet (2026-10-12). Source and fakes cover the fingerprint, the arm check and the report (`test/tooling.test.ts`, `test/bench.test.ts`, `test/research.test.ts`).
|
|
42
|
+
|
|
43
|
+
- [ ] Live fingerprint: `ahub claude` and `ahub codex` attached on the development machine, `events.jsonl` shows one `tooling` event per attach with claude-mem, ponytail, ripwire and dot-admit as installed.
|
|
44
|
+
- [ ] Arms on a bench project for each of claude-mem, ponytail and ripwire: `all-on`, `<tool>-off`, `all-off`, 5 repeats each, interleaved and with a randomized task order (docs/bench.md, Add-on arms); then `ahub bench compare`.
|
|
45
|
+
- [ ] Field data: `research.enabled` on this repository for at least two weeks, then `ahub research addons`.
|
|
46
|
+
- [ ] Update `docs/addons/*.md` from the results.
|
|
47
|
+
|
|
5
48
|
## Settings from the dashboard and the terminal (#269, part 1)
|
|
6
49
|
|
|
7
50
|
Not run live yet (unverified). `test/settings.test.ts` drives a real daemon, its
|
|
@@ -1548,3 +1591,242 @@ In the console run `status --all`, `queue list`, `queue show <id>`, `turns`, `bu
|
|
|
1548
1591
|
run `ahub projects`, `ahub doctor --orphans` and `ahub models status` in the terminal outside the console. Status's informational ids can be compared with `status --full`.
|
|
1549
1592
|
Confirm JSON output stays plain under `--color=always`. Record the exact head and visual verdict here after the owner performs this leg.
|
|
1550
1593
|
|
|
1594
|
+
|
|
1595
|
+
## Live roster return (#315)
|
|
1596
|
+
|
|
1597
|
+
- Codex 0.146.0: run without a model turn against the real native app-server and
|
|
1598
|
+
hub proxy. The TUI reached attached/idle with zero input/output tokens; removal
|
|
1599
|
+
closed its socket with 4000, and it printed the off-roster reason and exited 1.
|
|
1600
|
+
Re-adding left the preserved proxy/app-server unattached. A person must relaunch
|
|
1601
|
+
with `ahub codex resume <thread-id>` (or the resume picker) after adding it back. No tool
|
|
1602
|
+
update or model prompt was run. Actual native resume after the exit is not
|
|
1603
|
+
verified: the follow-up no-turn probe was admission-deferred with exit 75
|
|
1604
|
+
before starting, and was not bypassed or retried. The scripted proxy test sends
|
|
1605
|
+
thread/resume with the same thread id; this is separate transport evidence.
|
|
1606
|
+
- Pi native TUI: not run. Resource admission deferred the live probe with exit
|
|
1607
|
+
75; it was not bypassed. The scripted authenticated bridge tests separately
|
|
1608
|
+
verify retained owner identity, idle/busy return and queue delivery.
|
|
1609
|
+
|
|
1610
|
+
|
|
1611
|
+
## Kimi TUI pull mode (#316), not run live
|
|
1612
|
+
|
|
1613
|
+
- Kimi Code 2.1.1 source preflight: trusted ACP workspaces read the project MCP
|
|
1614
|
+
file, and the model request path ignores MCP initialize instructions. This is
|
|
1615
|
+
source evidence, not a live session observation.
|
|
1616
|
+
- In a disposable initialized project, run `ahub kimi --print-command`, confirm
|
|
1617
|
+
no file changed, then `ahub kimi`. Observe the folder-trust prompt naming the
|
|
1618
|
+
server and confirm the tool list includes hub_inbox and hub_send. Unverified.
|
|
1619
|
+
- With another peer attached, queue chat, an explicitly owned task and a named
|
|
1620
|
+
review. Ask the model to call hub_inbox, then hub_send; confirm one read and one
|
|
1621
|
+
reply per item, public PII stubs only, and last-read status. Confirm managed
|
|
1622
|
+
AGENTS instructions and tool descriptions are available; do not claim MCP
|
|
1623
|
+
initialize instructions are model-visible. Unverified.
|
|
1624
|
+
- End the TUI, start `ahub kimi --mode headless`, and inspect that only the project
|
|
1625
|
+
hub entry was removed before ACP starts. Confirm no second baseline hub MCP
|
|
1626
|
+
process in a trusted project. Stop ACP and return to a new TUI, preserving queued
|
|
1627
|
+
work and task ownership. Unverified.
|
|
1628
|
+
|
|
1629
|
+
## Initial SDLC gates (#257)
|
|
1630
|
+
|
|
1631
|
+
Unverified: a live repository cycle through merge/release under advise. Fake-gh and task fixture checks are source/unit evidence only. Custom lifecycle gates and full release-readiness presentation remain pending; no live cycle or automatic merge is claimed.
|
|
1632
|
+
## Qwen Code 0.25.0 production peer (#256)
|
|
1633
|
+
|
|
1634
|
+
Unverified: real provider handshake, a native model/tool turn, context occupancy,
|
|
1635
|
+
owned stop/recovery and the first authoritative quota refusal. Fake ACP tests are
|
|
1636
|
+
separate evidence. CLI --version returned 0.25.0 locally but installed package and
|
|
1637
|
+
ACP source returned 0.24.1; this drift is not a native readiness claim. Select
|
|
1638
|
+
roster.qwen and a verified qwen_cmd before the live leg. Confirm mode ids and
|
|
1639
|
+
visible boundaries, inbox/tool approval, stop and exact-head results, then record
|
|
1640
|
+
the native version and observed outcome here. No hub-driven Qwen TUI is offered.
|
|
1641
|
+
|
|
1642
|
+
Qwen recovery source/fake proof: saved ids pass through the driver and CLI to ACP session/load, and the crash loader restores the recorded id/model. Actual native/provider recovery remains unverified.
|
|
1643
|
+
|
|
1644
|
+
## Jcode 0.94.0 peer (#332)
|
|
1645
|
+
|
|
1646
|
+
Source/fixture proof is recorded in verification/2026-10-11-jcode-peer-contract.md. Unverified: real provider/model, native project MCP discovery and hub-tool receipt, native tool policy and stop/child teardown. Native automatic restoration is withheld because the pinned ACP load does not prove the id. No benchmark comparison or default replacement ran.
|
|
1647
|
+
|
|
1648
|
+
|
|
1649
|
+
## Project board (#263)
|
|
1650
|
+
|
|
1651
|
+
- Source model and isolated DOM/daemon regressions cover five columns, ready/wait
|
|
1652
|
+
reasons, public stubs, owner/reviewer markers, keyboard buttons, assignment and
|
|
1653
|
+
staging authority, stale/foreign gesture fences and legacy capability refusal.
|
|
1654
|
+
- Current source checks are pending for this draft; browser visual verification
|
|
1655
|
+
at desktop/phone widths and real peer permission/state readback are unverified.
|
|
1656
|
+
- Native planner grooming into two releases, planned/actual date measurement and
|
|
1657
|
+
GitHub import remain unverified or unimplemented in later source slices. No
|
|
1658
|
+
release, installation, account experiment or live activation is implied.
|
|
1659
|
+
|
|
1660
|
+
|
|
1661
|
+
## Planning and release controls (#263)
|
|
1662
|
+
|
|
1663
|
+
Source/fixture coverage is in planning.test.ts and planning-surfaces.test.ts:
|
|
1664
|
+
legacy/restart persistence, revision/role/pin/person order/frozen scope/undo/ship,
|
|
1665
|
+
actual task dates, CLI marker authority, public PII and research reset identities.
|
|
1666
|
+
All current platform and seeded checks remain pending. Desktop/phone rendering and
|
|
1667
|
+
native planner grooming into two releases are unverified; no real account run,
|
|
1668
|
+
tag, publish, install or live activation was performed.
|
|
1669
|
+
|
|
1670
|
+
## Office stack merge review (#355, #357, #358, #360)
|
|
1671
|
+
|
|
1672
|
+
Current-main integration and review corrections are being verified on an owned
|
|
1673
|
+
merge worktree. Source regressions cover the visible Off selector, filtered-card
|
|
1674
|
+
activation, card/desk sibling layers, sparse sticky bounds, Work/rework overflow,
|
|
1675
|
+
reduced-motion/settled cleanup, expired arcs, explicit unattributed turn omission,
|
|
1676
|
+
conflict priority under the cap and distinct parallel warning coordinates.
|
|
1677
|
+
Platform/full206-guard proof is pending. Desktop/phone/real-peer visual readback
|
|
1678
|
+
remains unverified; no account, release, installation or live activation ran.
|
|
1679
|
+
|
|
1680
|
+
|
|
1681
|
+
Dependency/reservation grooming regression covers direct/transitive cycles,
|
|
1682
|
+
missing or duplicate ids, off-roster reservations, atomic rejection and undo,
|
|
1683
|
+
and started-task refusal. Current source/fixture proof remains pending.
|
|
1684
|
+
|
|
1685
|
+
|
|
1686
|
+
Planner pull source regressions cover slot capacity, role and revision, P0/person
|
|
1687
|
+
reservation floors, post-screen races, offer-time capacity changes, dependency
|
|
1688
|
+
approval and pin refusal, pending-only undo, bounded integer settings/local
|
|
1689
|
+
store and actual HTTP/tool/status projections. Current full proof and native
|
|
1690
|
+
planner/two-release/desktop/phone readback remain unverified.
|
|
1691
|
+
|
|
1692
|
+
|
|
1693
|
+
Split fixtures cover atomic callbacks/rollback, earlier-part DAGs, cycle refusal,
|
|
1694
|
+
changed/referenced children, private phase inheritance, P0 prerequisites and
|
|
1695
|
+
actual tool/CLI/authenticated HTTP undo. Full current source/native/visual proof
|
|
1696
|
+
remains pending; the inherited started fixture exception is still unresolved.
|
|
1697
|
+
|
|
1698
|
+
|
|
1699
|
+
GitHub intake fixtures cover fixed read-only selection, page and identity
|
|
1700
|
+
validation, persistent/restart/after-screen dedupe, PII source projection,
|
|
1701
|
+
confirmed partial progress and person CLI classification. Current full and
|
|
1702
|
+
native/visual evidence remain pending. No real-account import ran.
|
|
1703
|
+
|
|
1704
|
+
|
|
1705
|
+
Remaining board projection fixtures exercise shared column mapping/waits and
|
|
1706
|
+
actual CLI release/JSON filters with peer backlog floors. Cut flags derive
|
|
1707
|
+
structured approval history and retain missing approval/cut as unknown. Current
|
|
1708
|
+
full source/phone/native proof remains pending.
|
|
1709
|
+
## Console attention (#280, phase 1)
|
|
1710
|
+
|
|
1711
|
+
Automated coverage targets request ordering, read-only navigation/modal ownership,
|
|
1712
|
+
fixed footer/cursor cells at 80/99/100/120 columns and 24/40 rows, allowlisted
|
|
1713
|
+
structural projection, configuration precedence, deadline-only blink and plain
|
|
1714
|
+
message acknowledgement. Platform/full seeded gates are pending. Light/dark
|
|
1715
|
+
terminal, tmux, colour-off and actual terminal glyph readbacks are unverified;
|
|
1716
|
+
this phase renders ASCII only. No native account or live hub was activated.
|
|
1717
|
+
|
|
1718
|
+
## Global attention status and CLI (#280, phase 3 in progress)
|
|
1719
|
+
|
|
1720
|
+
Source/fixture checks target person review, offline ownership, unknown/absent
|
|
1721
|
+
recovery runners, status privacy/role separation, signed file ownership and CLI
|
|
1722
|
+
output without a token or connection. Full immutable-head platform/seed/review
|
|
1723
|
+
gates remain pending. Native light/dark terminal, tmux, glyph and account readback
|
|
1724
|
+
is unverified; no release, installation or live hub activation ran.
|
|
1725
|
+
|
|
1726
|
+
## Attention status follow-up (#280)
|
|
1727
|
+
|
|
1728
|
+
Regression fixtures cover reserved pseudo-peer ownership, preserved person
|
|
1729
|
+
reviews, selected SQL columns and actual status reads with unreadable unrelated
|
|
1730
|
+
JSON payloads. The focused tests pass; immutable-head platform/255-guard proof
|
|
1731
|
+
is pending. Native/account/artwork/dashboard legs remain unverified.
|
|
1732
|
+
|
|
1733
|
+
Latest planner source fixes have an actual focused result of 11 pass/0 fail:
|
|
1734
|
+
reservation normalization/unsupported-id rejection and returned-work notices.
|
|
1735
|
+
The previous full262 guard job reached its 10-minute CI limit; the job cap is
|
|
1736
|
+
now20 minutes, with all named assertion and per-test/watchdog limits unchanged.
|
|
1737
|
+
Current immutable-head265 proof is pending.
|
|
1738
|
+
|
|
1739
|
+
The actual queued planner notice regression and prior grooming/conductor group
|
|
1740
|
+
passed23/0 with235 assertions. The bus pull omitted a stale batch and the next
|
|
1741
|
+
notice contained only the remaining backlog id. Current full gates remain
|
|
1742
|
+
pending; no native grooming or live-account claim.
|
|
1743
|
+
|
|
1744
|
+
Per-recipient retry and overflow source fixes passed26/0 with255 assertions
|
|
1745
|
+
once the owner approved the notice-only fixture. A separate no-worker diagnostic
|
|
1746
|
+
verified first2 ids, one consumed copy, stale0, retry1 to Pi, repeated Claude0.
|
|
1747
|
+
Roster, per-recipient retry and overflow guards each have actual isolated green
|
|
1748
|
+
-> named assertion detected proof. The owner also approved realPath normalization
|
|
1749
|
+
in three CLI fixtures, retaining every earlier assertion and identity validation.
|
|
1750
|
+
The descendant integration group passed53/0 with368 assertions, including real
|
|
1751
|
+
fake-account CLI pull/split/import and five-peer notice baselines. Full current
|
|
1752
|
+
platform/seed/review and native account verification remain pending.
|
|
1753
|
+
|
|
1754
|
+
## Approved character source fixtures (#280, phase 2)
|
|
1755
|
+
|
|
1756
|
+
The original STAIx reference and four existing Higgsfield concepts were inspected;
|
|
1757
|
+
210 hand-reduced frames satisfy the literal glyph and geometry limits. Actual
|
|
1758
|
+
console fixtures exercise all five choices plus off, full scroll geometry,
|
|
1759
|
+
resize fallback, keyboard-modal ownership, prompt preservation and unchanged
|
|
1760
|
+
config bytes. The focused console/config/geometry/runtime group passed138/0
|
|
1761
|
+
with23808 assertions. Immutable-head platform/seed/review proof is pending.
|
|
1762
|
+
Light/dark physical terminal, tmux and ambiguous-wide block glyphs are unverified.
|
|
1763
|
+
|
|
1764
|
+
## Dashboard character (#280, phase 4 in progress)
|
|
1765
|
+
|
|
1766
|
+
Source fixtures cover shared body-free review projection, selected configuration,
|
|
1767
|
+
status-input separation, bounded SVG pixels, unchanged-snapshot DOM writes,
|
|
1768
|
+
exact-row navigation, missing-row guidance and stale-navigation refusal. Existing
|
|
1769
|
+
dashboard authentication/CSP/page-size and Office regressions are retained.
|
|
1770
|
+
Current full platform, mutation, browser, mobile, light/dark and reduced-motion
|
|
1771
|
+
proof is pending. Native terminal/tmux/account legs remain unverified.
|
|
1772
|
+
|
|
1773
|
+
Actual source-only Ego Chromium QA at b54b7c6c exercised STAIx and all four
|
|
1774
|
+
selected alternatives. Screenshots were opened and inspected at390x844 and
|
|
1775
|
+
1440x1000 in light/dark projections: document widths matched, Enter on the
|
|
1776
|
+
review control focused exact task4, and no action callback ran. Reduced motion
|
|
1777
|
+
reported no animation, open pose opacity1 and blink pose opacity0. The task
|
|
1778
|
+
space finished and the admitted helper exited0. This is fixture/browser proof,
|
|
1779
|
+
not a native account or production runtime claim. Served bytes compared against
|
|
1780
|
+
phase2 with the same upstream main:146871 before,164034 after (+17163).
|
|
1781
|
+
The focused production-boundary correction group passed35/0 (145589 assertions);
|
|
1782
|
+
current full platform/seed/review proof remains pending.
|
|
1783
|
+
The expanded-footer follow-up group passed7/0 with6687 assertions: primary
|
|
1784
|
+
stream rows survive alternate panels and are cleared before queued events return;
|
|
1785
|
+
expired notices restore the selected approval id and expiry. No earlier assertion
|
|
1786
|
+
was removed. Native terminal/tmux proof and final full gates remain pending.
|
|
1787
|
+
|
|
1788
|
+
After the optional dashboard title initializer was isolated from missing DOM
|
|
1789
|
+
capabilities, the unchanged Settings/role/Office regressions and new pet suite
|
|
1790
|
+
passed61/0 with139938 assertions. This fixes the full Linux gate's three helper
|
|
1791
|
+
initialization failures in production code; final platform/seed proof is pending.
|
|
1792
|
+
|
|
1793
|
+
Dashboard blink now requires a live approval item, not merely waiting state
|
|
1794
|
+
(which also includes pending defaults). The actual pet suite passed6/0 with
|
|
1795
|
+
138742 assertions across defaults, live approvals, expired approvals and blink-off;
|
|
1796
|
+
a mutation guard covers this distinction. Full current-head proof is pending.
|
|
1797
|
+
Line-size console faces now honor the resolved ASCII/block selection, with the
|
|
1798
|
+
locale fallback retained and ASCII/CLI defaults unchanged. Actual line glyph,
|
|
1799
|
+
geometry, modal and runtime regression group passed19/0 with7165 assertions.
|
|
1800
|
+
All five faces stayed100 cells wide without colour escapes. Full gates pending.
|
|
1801
|
+
|
|
1802
|
+
The first final265-guard run found a surviving line-glyph seed: shipped ASCII
|
|
1803
|
+
and block line faces intentionally have identical bytes. Added a separate
|
|
1804
|
+
observable catalog fixture, restored in finally, retaining every earlier assertion.
|
|
1805
|
+
Local execution of this additional case is admission-deferred, not a pass;
|
|
1806
|
+
current immutable-head full platform/seed proof is pending.
|
|
1807
|
+
|
|
1808
|
+
Lowercase review eyes retain a distinct pixel mask, and Gyul leaf pixels use
|
|
1809
|
+
the defined amber attention tone in light/dark/system themes. The actual pet
|
|
1810
|
+
suite passed7/0 with138010 assertions across all five characters. Two mutation
|
|
1811
|
+
guards cover case preservation and the existing theme variable. Final full
|
|
1812
|
+
platform/seed/review and updated browser readback remain pending.
|
|
1813
|
+
|
|
1814
|
+
The review-eye mask guard has actual admitted isolated green -> named assertion
|
|
1815
|
+
failure proof. Leaf-tone coverage now checks the bounded CSS fill value in a
|
|
1816
|
+
separate test while retaining the earlier HTML assertions: printing the entire
|
|
1817
|
+
HTML on failure contained unrelated runtime diagnostic strings, so the strict
|
|
1818
|
+
classifier correctly rejected the previous detection. The bounded leaf test now
|
|
1819
|
+
also has actual green -> named assertion detected proof. Full final gates pending.
|
|
1820
|
+
Final review found active notices suppressed by expanded footers. Source now
|
|
1821
|
+
shows them in panel body or once in the local stream, away from the character.
|
|
1822
|
+
Added output/expiry/prompt geometry regressions and two guards. First local
|
|
1823
|
+
execution was admission-deferred; final actual proof remains pending.
|
|
1824
|
+
|
|
1825
|
+
|
|
1826
|
+
## Project board phone-width fixture (2026-10-13)
|
|
1827
|
+
|
|
1828
|
+
The current source fixture at 6d311a51dccd41d3703079175cac65a487189b15 used the normal loopback ticket/session/CSP path with synthetic data and refused production changes. Source board desktop/390px light/dark, release-cut text, pending WIP 2/0/inherit and Save payload, and date-control containment were verified. All nine PNGs were viewed. The refresh exposed and fixed phone date-field clipping that document width alone missed. The same approved Space 44 was reused and finished once; its server was stopped. Receipt: [phone-width verification](verification/2026-10-13-board-phone.md).
|
|
1829
|
+
|
|
1830
|
+
This supersedes earlier phone-fixture pending statements only for this source. The old 1bbced04 captures remain historical; no later byte-identity premise is used. Native planner/two-release, accounts, model ingestion and measured effects remain unverified.
|
|
1831
|
+
|
|
1832
|
+
The later bounded release-audit preview text is verified by DOM tests, not by a refreshed phone capture. The6d311a51 PNGs remain evidence for their pinned source; see the later-audit note in the phone verification report.
|