@staix/agent-hub 0.12.21 → 0.12.23
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 +29 -0
- package/README.md +27 -12
- package/docs/agent-notes/adapters.md +15 -7
- package/docs/agent-notes/benchmarks.md +4 -1
- package/docs/agent-notes/budget.md +4 -0
- package/docs/agent-notes/bus.md +2 -1
- package/docs/agent-notes/daemon.md +12 -1
- package/docs/agent-notes/local-worker.md +4 -1
- package/docs/agent-notes/tasks.md +2 -1
- package/docs/agent-notes/tests.md +4 -0
- package/docs/events.md +17 -4
- package/docs/operations.md +478 -41
- package/docs/quickstart.md +14 -6
- package/docs/security.md +23 -11
- package/docs/smoke.md +133 -7
- package/docs/specs/2026-09-19-agent-hub-design.md +115 -15
- package/docs/specs/2026-09-20-upgrade-recovery-design.md +84 -8
- package/docs/verification/2026-10-10-cli-output-phase1.md +309 -0
- package/docs/verification/2026-10-10-cli-output-phase2.md +672 -0
- package/docs/verification/2026-10-11-0.12.23.md +90 -0
- package/docs/verified.json +32 -17
- package/package.json +1 -1
- package/plugins/agent-hub/.claude-plugin/plugin.json +1 -1
- package/plugins/agent-hub/server.js +14 -3
- package/src/adapters/acp-quota.ts +13 -0
- package/src/adapters/acp.ts +105 -17
- package/src/adapters/codex-appserver.ts +70 -35
- package/src/adapters/local-worker.ts +44 -10
- package/src/adapters/pi.ts +158 -19
- package/src/cli/bench.ts +2 -1
- package/src/cli/console-state.ts +28 -22
- package/src/cli/console.ts +20 -10
- package/src/cli/help.ts +25 -19
- package/src/cli/identity.ts +3 -3
- package/src/cli/init.ts +1 -1
- package/src/cli/launch.ts +182 -7
- package/src/cli/main.ts +409 -177
- package/src/cli/output.ts +363 -0
- package/src/cli/preview.ts +2 -1
- package/src/cli/recovery-package.ts +17 -0
- package/src/cli/reset.ts +3 -0
- package/src/cli/status-lines.ts +0 -28
- package/src/cli/terminal-recovery.ts +27 -1
- package/src/cli/upgrade-interactive.ts +297 -0
- package/src/cli/upgrade-runtime.ts +80 -9
- package/src/cli/upgrade.ts +50 -15
- package/src/hub/board.ts +2 -0
- package/src/hub/budget.ts +39 -7
- package/src/hub/bus.ts +15 -14
- package/src/hub/child-process.ts +11 -0
- package/src/hub/conductor.ts +23 -11
- package/src/hub/config-trust.ts +16 -5
- package/src/hub/conflicts.ts +2 -0
- package/src/hub/context-window.ts +8 -1
- package/src/hub/crash.ts +2 -1
- package/src/hub/daemon.ts +483 -83
- package/src/hub/db-timeout.ts +3 -0
- package/src/hub/delivery-journal.ts +2 -1
- package/src/hub/envelope.ts +1 -1
- package/src/hub/events.ts +4 -1
- package/src/hub/execution-budget.ts +2 -0
- package/src/hub/facts.ts +5 -4
- package/src/hub/git.ts +32 -0
- package/src/hub/hub-tools.ts +1 -1
- package/src/hub/lifecycle.ts +10 -4
- package/src/hub/manager.ts +18 -5
- package/src/hub/peers.ts +7 -5
- package/src/hub/permission-mode.ts +14 -0
- package/src/hub/project.ts +2 -1
- package/src/hub/recovery-error.ts +31 -0
- package/src/hub/recovery-store.ts +43 -4
- package/src/hub/registry.ts +2 -1
- package/src/hub/routing.ts +114 -13
- package/src/hub/settings.ts +392 -0
- package/src/hub/snapshots.ts +4 -2
- package/src/hub/start-mode.ts +48 -0
- package/src/hub/tasks.ts +158 -43
- package/src/hub/terminal-open.ts +64 -0
- package/src/hub/ui.ts +25 -13
- package/src/local/deny.ts +71 -2
- package/src/local/sandbox.ts +47 -6
- package/src/local/tools.ts +25 -6
- package/src/memory/recall.ts +2 -2
- package/src/models/mlx.ts +2 -1
- package/src/pi/extension.ts +43 -20
- package/src/pi/tool-receipts.ts +19 -2
- package/src/ui/index.html +172 -21
|
@@ -0,0 +1,672 @@
|
|
|
1
|
+
# Command output fixture (#284 phases 2 and 3)
|
|
2
|
+
|
|
3
|
+
Synthetic deterministic data at now=1800000000000. Before uses the previous command formatting (turn locale in UTC for determinism); after uses the current pure renderer. This is automated evidence, not a human terminal inspection.
|
|
4
|
+
|
|
5
|
+
## projects, 80 columns
|
|
6
|
+
|
|
7
|
+
Before:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
p_123456789012345678901234 running /project/경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로
|
|
11
|
+
peers 2, control 12345, tasks {"approved":6,"in_progress":1}
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
After:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
PROJECT STATE PEERS TASKS ROOT
|
|
18
|
+
p_123456789012345678901234 running 2 6 approved, /project/
|
|
19
|
+
1 in_progress 경로경로경로
|
|
20
|
+
경로경로경로
|
|
21
|
+
경로경로경로
|
|
22
|
+
경로경로경로
|
|
23
|
+
경로경로경로
|
|
24
|
+
경로경로경로
|
|
25
|
+
경로경로경로
|
|
26
|
+
경로경로경로
|
|
27
|
+
경로경로경로
|
|
28
|
+
경로경로경로
|
|
29
|
+
경로경로경로
|
|
30
|
+
경로경로경로
|
|
31
|
+
경로경로경로
|
|
32
|
+
경로경로경로
|
|
33
|
+
경로경로경로
|
|
34
|
+
경로경로경로
|
|
35
|
+
경로경로
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## status --all, 80 columns
|
|
39
|
+
|
|
40
|
+
Before:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
p_123456789012345678901234 running /project/경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로
|
|
44
|
+
peers 2, control 12345, tasks {"approved":6,"in_progress":1}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
After:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
PROJECT STATE PEERS TASKS ROOT
|
|
51
|
+
p_123456789012345678901234 running 2 6 approved, /project/
|
|
52
|
+
1 in_progress 경로경로경로
|
|
53
|
+
경로경로경로
|
|
54
|
+
경로경로경로
|
|
55
|
+
경로경로경로
|
|
56
|
+
경로경로경로
|
|
57
|
+
경로경로경로
|
|
58
|
+
경로경로경로
|
|
59
|
+
경로경로경로
|
|
60
|
+
경로경로경로
|
|
61
|
+
경로경로경로
|
|
62
|
+
경로경로경로
|
|
63
|
+
경로경로경로
|
|
64
|
+
경로경로경로
|
|
65
|
+
경로경로경로
|
|
66
|
+
경로경로경로
|
|
67
|
+
경로경로경로
|
|
68
|
+
경로경로
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## queue list, 80 columns
|
|
72
|
+
|
|
73
|
+
Before:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
abcdef12-1111-2222-3333-444444444444 codex needs_review revision 3 important
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
After:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
ID PEER STATE REV AGE
|
|
83
|
+
abcdef12-1111-2222-3333-444444444444 codex needs_review 3 1m
|
|
84
|
+
priority important
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## turns, 80 columns
|
|
88
|
+
|
|
89
|
+
Before:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
turn-12345678901234567890 1/15/2027, 7:59:00 AM 8 files: src/한글경로/file-0.ts, src/한글경로/file-1.ts, src/한글경로/file-2.ts, src/한글경로/file-3.ts, src/한글경로/file-4.ts, ...
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
After:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
TURN PEER STARTED STATE FILES
|
|
99
|
+
turn-12345678901234567890 codex 1m ago completed 8 files:
|
|
100
|
+
src/한글경로/file-0.ts,
|
|
101
|
+
src/한글경로/file-1.ts,
|
|
102
|
+
src/한글경로/file-2.ts,
|
|
103
|
+
src/한글경로/file-3.ts,
|
|
104
|
+
src/한글경로/file-4.ts,
|
|
105
|
+
src/한글경로/file-5.ts,
|
|
106
|
+
src/한글경로/file-6.ts,
|
|
107
|
+
src/한글경로/file-7.ts
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## doctor --orphans, 80 columns
|
|
111
|
+
|
|
112
|
+
Before:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
orphaned hub registrations (the project root is gone):
|
|
116
|
+
p_123456789012345678901234 /project/경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로 live pid 12345
|
|
117
|
+
kill live orphans with `ahub doctor --orphans --kill`, then forget each row with `ahub projects remove <id>`
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
After:
|
|
121
|
+
|
|
122
|
+
```text
|
|
123
|
+
orphaned hub registrations (the project root is gone):
|
|
124
|
+
PROJECT STATE PIDS ROOT
|
|
125
|
+
p_123456789012345678901234 live 12345 /project/
|
|
126
|
+
경로경로경로경로경로경로경로경로경로경
|
|
127
|
+
로경로경로경로경로경로경로경로경로경로
|
|
128
|
+
경로경로경로경로경로경로경로경로경로경
|
|
129
|
+
로경로경로경로경로경로경로경로경로경로
|
|
130
|
+
경로경로경로경로경로경로경로경로경로경
|
|
131
|
+
로경로경로
|
|
132
|
+
|
|
133
|
+
kill live orphans with ahub doctor --orphans --kill
|
|
134
|
+
forget ahub projects remove p_123456789012345678901234
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## queue show, 80 columns
|
|
138
|
+
|
|
139
|
+
Before:
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
{
|
|
143
|
+
"id": "abcdef12-1111-2222-3333-444444444444",
|
|
144
|
+
"peer": "codex",
|
|
145
|
+
"state": "needs_review",
|
|
146
|
+
"revision": 3,
|
|
147
|
+
"important": true,
|
|
148
|
+
"createdAt": 1799999940000,
|
|
149
|
+
"updatedAt": 1799999970000,
|
|
150
|
+
"envelopeIds": [
|
|
151
|
+
"8d03b496-1111-2222-3333-444444444444"
|
|
152
|
+
],
|
|
153
|
+
"messages": [
|
|
154
|
+
{
|
|
155
|
+
"id": "8d03b496-1111-2222-3333-444444444444",
|
|
156
|
+
"from": "claude",
|
|
157
|
+
"priority": "important",
|
|
158
|
+
"kind": "chat",
|
|
159
|
+
"body": "[private: inspect the associated task with ahub task show]"
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
After:
|
|
166
|
+
|
|
167
|
+
```text
|
|
168
|
+
Delivery
|
|
169
|
+
FIELD VALUE
|
|
170
|
+
id abcdef12-1111-2222-3333-444444444444
|
|
171
|
+
peer codex
|
|
172
|
+
state needs_review
|
|
173
|
+
revision 3
|
|
174
|
+
important true
|
|
175
|
+
createdAt 1m ago
|
|
176
|
+
updatedAt 30s ago
|
|
177
|
+
envelopeIds 1 8d03b496-1111-2222-3333-444444444444
|
|
178
|
+
messages 1 id 8d03b496-1111-2222-3333-444444444444
|
|
179
|
+
messages 1 from claude
|
|
180
|
+
messages 1 priority important
|
|
181
|
+
messages 1 kind chat
|
|
182
|
+
messages 1 body [private: inspect the associated task with ahub task show]
|
|
183
|
+
|
|
184
|
+
resolve ahub queue resolve abcdef12-1111-2222-3333-444444444444 --action
|
|
185
|
+
completed|retry|discard --reason <text>
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## models status, 80 columns
|
|
189
|
+
|
|
190
|
+
Before:
|
|
191
|
+
|
|
192
|
+
```text
|
|
193
|
+
{
|
|
194
|
+
"state": "ready",
|
|
195
|
+
"model": "qwen/long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-",
|
|
196
|
+
"expiresAt": "2027-01-15T08:10:00.000Z",
|
|
197
|
+
"active": 0,
|
|
198
|
+
"contextWindow": 32768
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
After:
|
|
203
|
+
|
|
204
|
+
```text
|
|
205
|
+
Models
|
|
206
|
+
FIELD VALUE
|
|
207
|
+
state ready
|
|
208
|
+
model qwen/long-model-name-long-model-name-long-model-name-long-model-n
|
|
209
|
+
ame-long-model-name-long-model-name-long-model-name-long-model-na
|
|
210
|
+
me-long-model-name-long-model-name-
|
|
211
|
+
expiresAt in 10m
|
|
212
|
+
active 0
|
|
213
|
+
contextWindow 32768
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## budget execution status, 80 columns
|
|
217
|
+
|
|
218
|
+
Before:
|
|
219
|
+
|
|
220
|
+
```text
|
|
221
|
+
[
|
|
222
|
+
{
|
|
223
|
+
"id": "budget-12345678901234567890",
|
|
224
|
+
"kind": "task",
|
|
225
|
+
"taskId": 3,
|
|
226
|
+
"peers": [
|
|
227
|
+
"local",
|
|
228
|
+
"pi"
|
|
229
|
+
],
|
|
230
|
+
"createdAt": 1799999940000,
|
|
231
|
+
"updatedAt": 1799999970000,
|
|
232
|
+
"units": {
|
|
233
|
+
"tokens": {
|
|
234
|
+
"used": 100,
|
|
235
|
+
"limit": 200,
|
|
236
|
+
"remaining": 100
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
After:
|
|
244
|
+
|
|
245
|
+
```text
|
|
246
|
+
Execution budget
|
|
247
|
+
FIELD VALUE
|
|
248
|
+
1 id budget-12345678901234567890
|
|
249
|
+
1 kind task
|
|
250
|
+
1 taskId 3
|
|
251
|
+
1 peers 1 local
|
|
252
|
+
1 peers 2 pi
|
|
253
|
+
1 createdAt 1m ago
|
|
254
|
+
1 updatedAt 30s ago
|
|
255
|
+
1 units tokens used 100
|
|
256
|
+
1 units tokens limit 200
|
|
257
|
+
1 units tokens remaining 100
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## report, 80 columns
|
|
261
|
+
|
|
262
|
+
Before:
|
|
263
|
+
|
|
264
|
+
```text
|
|
265
|
+
period: 2027-01-15T07:59:00.000Z .. 2027-01-15T08:00:00.000Z
|
|
266
|
+
peer codex: 1 turn, 0.5 busy minutes, 120 tokens
|
|
267
|
+
usage codex: no usage records; input unknown (0 known), output unknown (0 known), cache read unknown (0 known), cache write unknown (0 known), reported total unknown (0 known); coverage unknown
|
|
268
|
+
usage team totals: reported token total unknown (0 known records); incomplete or unknown peer coverage (codex); estimated price unknown; measured spend unknown
|
|
269
|
+
messages: 0 (dropped: none; overflow 0; undeliverable 0); 0 per task that had any
|
|
270
|
+
overlap warnings: 0, task pairs: 0; edit conflicts: 0
|
|
271
|
+
task events: accepted 1
|
|
272
|
+
quota readings: 0 (0 hard limits)
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
After:
|
|
276
|
+
|
|
277
|
+
```text
|
|
278
|
+
period: 1m ago .. 0s ago
|
|
279
|
+
|
|
280
|
+
Counters
|
|
281
|
+
METRIC COUNT
|
|
282
|
+
messages 0
|
|
283
|
+
overflow 0
|
|
284
|
+
undeliverable 0
|
|
285
|
+
messages per task 0
|
|
286
|
+
overlap warnings 0
|
|
287
|
+
task pairs 0
|
|
288
|
+
edit conflicts 0
|
|
289
|
+
quota readings 0
|
|
290
|
+
hard limits 0
|
|
291
|
+
|
|
292
|
+
Peers
|
|
293
|
+
PEER TURNS BUSY TOKENS
|
|
294
|
+
codex 1 0.5m 120
|
|
295
|
+
peer codex: 1 turn, 0.5 busy minutes, 120 tokens
|
|
296
|
+
|
|
297
|
+
Usage
|
|
298
|
+
usage codex: no usage records; input unknown (0 known), output unknown (0
|
|
299
|
+
known), cache read unknown (0 known), cache write unknown (0 known),
|
|
300
|
+
reported total unknown (0 known); coverage unknown
|
|
301
|
+
usage team totals: reported token total unknown (0 known records); incomplete
|
|
302
|
+
or unknown peer coverage (codex); estimated price unknown; measured spend
|
|
303
|
+
unknown
|
|
304
|
+
|
|
305
|
+
Messages
|
|
306
|
+
messages: 0 (dropped: none; overflow 0; undeliverable 0); 0 per task that had
|
|
307
|
+
any
|
|
308
|
+
|
|
309
|
+
Coordination
|
|
310
|
+
overlap warnings: 0, task pairs: 0; edit conflicts: 0
|
|
311
|
+
|
|
312
|
+
Tasks
|
|
313
|
+
task events: accepted 1
|
|
314
|
+
|
|
315
|
+
Quota
|
|
316
|
+
quota readings: 0 (0 hard limits)
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
## report --by task, 80 columns
|
|
320
|
+
|
|
321
|
+
Before:
|
|
322
|
+
|
|
323
|
+
```text
|
|
324
|
+
period: 2027-01-15T07:59:00.000Z .. 2027-01-15T08:00:00.000Z
|
|
325
|
+
task #3: class implement, outcome in_progress, turns 1, wall unknown
|
|
326
|
+
peer codex: tokens 120; inputTokens unknown (0/0 known), outputTokens unknown (0/0 known), cacheReadTokens unknown (0/0 known), cacheWriteTokens unknown (0/0 known), totalTokens unknown (0/0 known)
|
|
327
|
+
class implement: turns 1
|
|
328
|
+
peer codex: tokens 120; inputTokens unknown (0/0 known), outputTokens unknown (0/0 known), cacheReadTokens unknown (0/0 known), cacheWriteTokens unknown (0/0 known), totalTokens unknown (0/0 known)
|
|
329
|
+
unattributed: tokens 0/120 (0.0%), usage records 0/0 (unknown), turns 0
|
|
330
|
+
before attribution: tokens 0, usage records 0, turns 0
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
After:
|
|
334
|
+
|
|
335
|
+
```text
|
|
336
|
+
period: 1m ago .. 0s ago
|
|
337
|
+
|
|
338
|
+
Tasks
|
|
339
|
+
TASK CLASS OUTCOME TURNS WALL
|
|
340
|
+
#3 implement in_progress 1 unknown
|
|
341
|
+
task #3: class implement, outcome in_progress, turns 1, wall unknown
|
|
342
|
+
peer codex: tokens 120; inputTokens unknown (0/0 known), outputTokens
|
|
343
|
+
unknown (0/0 known), cacheReadTokens unknown (0/0 known),
|
|
344
|
+
cacheWriteTokens unknown (0/0 known), totalTokens unknown (0/0 known)
|
|
345
|
+
|
|
346
|
+
Classes
|
|
347
|
+
class implement: turns 1
|
|
348
|
+
peer codex: tokens 120; inputTokens unknown (0/0 known), outputTokens
|
|
349
|
+
unknown (0/0 known), cacheReadTokens unknown (0/0 known),
|
|
350
|
+
cacheWriteTokens unknown (0/0 known), totalTokens unknown (0/0 known)
|
|
351
|
+
|
|
352
|
+
Unattributed
|
|
353
|
+
unattributed: tokens 0/120 (0.0%), usage records 0/0 (unknown), turns 0
|
|
354
|
+
|
|
355
|
+
Before attribution
|
|
356
|
+
before attribution: tokens 0, usage records 0, turns 0
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
## projects, 120 columns
|
|
360
|
+
|
|
361
|
+
Before:
|
|
362
|
+
|
|
363
|
+
```text
|
|
364
|
+
p_123456789012345678901234 running /project/경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로
|
|
365
|
+
peers 2, control 12345, tasks {"approved":6,"in_progress":1}
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
After:
|
|
369
|
+
|
|
370
|
+
```text
|
|
371
|
+
PROJECT STATE PEERS TASKS ROOT
|
|
372
|
+
p_123456789012345678901234 running 2 6 approved, 1 in_progress /project/
|
|
373
|
+
경로경로경로경로경로경로경로경로경로경로경로경로
|
|
374
|
+
경로경로경로경로경로경로경로경로경로경로경로경로
|
|
375
|
+
경로경로경로경로경로경로경로경로경로경로경로경로
|
|
376
|
+
경로경로경로경로경로경로경로경로경로경로경로경로
|
|
377
|
+
경로경로
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
## status --all, 120 columns
|
|
381
|
+
|
|
382
|
+
Before:
|
|
383
|
+
|
|
384
|
+
```text
|
|
385
|
+
p_123456789012345678901234 running /project/경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로
|
|
386
|
+
peers 2, control 12345, tasks {"approved":6,"in_progress":1}
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
After:
|
|
390
|
+
|
|
391
|
+
```text
|
|
392
|
+
PROJECT STATE PEERS TASKS ROOT
|
|
393
|
+
p_123456789012345678901234 running 2 6 approved, 1 in_progress /project/
|
|
394
|
+
경로경로경로경로경로경로경로경로경로경로경로경로
|
|
395
|
+
경로경로경로경로경로경로경로경로경로경로경로경로
|
|
396
|
+
경로경로경로경로경로경로경로경로경로경로경로경로
|
|
397
|
+
경로경로경로경로경로경로경로경로경로경로경로경로
|
|
398
|
+
경로경로
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
## queue list, 120 columns
|
|
402
|
+
|
|
403
|
+
Before:
|
|
404
|
+
|
|
405
|
+
```text
|
|
406
|
+
abcdef12-1111-2222-3333-444444444444 codex needs_review revision 3 important
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
After:
|
|
410
|
+
|
|
411
|
+
```text
|
|
412
|
+
ID PEER STATE REV AGE
|
|
413
|
+
abcdef12-1111-2222-3333-444444444444 codex needs_review 3 1m
|
|
414
|
+
priority important
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
## turns, 120 columns
|
|
418
|
+
|
|
419
|
+
Before:
|
|
420
|
+
|
|
421
|
+
```text
|
|
422
|
+
turn-12345678901234567890 1/15/2027, 7:59:00 AM 8 files: src/한글경로/file-0.ts, src/한글경로/file-1.ts, src/한글경로/file-2.ts, src/한글경로/file-3.ts, src/한글경로/file-4.ts, ...
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
After:
|
|
426
|
+
|
|
427
|
+
```text
|
|
428
|
+
TURN PEER STARTED STATE FILES
|
|
429
|
+
turn-12345678901234567890 codex 1m ago completed 8 files: src/한글경로/file-0.ts, src/한글경로/file-1.ts,
|
|
430
|
+
src/한글경로/file-2.ts, src/한글경로/file-3.ts,
|
|
431
|
+
src/한글경로/file-4.ts, src/한글경로/file-5.ts,
|
|
432
|
+
src/한글경로/file-6.ts, src/한글경로/file-7.ts
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
## doctor --orphans, 120 columns
|
|
436
|
+
|
|
437
|
+
Before:
|
|
438
|
+
|
|
439
|
+
```text
|
|
440
|
+
orphaned hub registrations (the project root is gone):
|
|
441
|
+
p_123456789012345678901234 /project/경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로 live pid 12345
|
|
442
|
+
kill live orphans with `ahub doctor --orphans --kill`, then forget each row with `ahub projects remove <id>`
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
After:
|
|
446
|
+
|
|
447
|
+
```text
|
|
448
|
+
orphaned hub registrations (the project root is gone):
|
|
449
|
+
PROJECT STATE PIDS ROOT
|
|
450
|
+
p_123456789012345678901234 live 12345 /project/
|
|
451
|
+
경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경
|
|
452
|
+
로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로경로
|
|
453
|
+
경로경로경로경로경로경로경로경로경로경로경로
|
|
454
|
+
|
|
455
|
+
kill live orphans with ahub doctor --orphans --kill
|
|
456
|
+
forget ahub projects remove p_123456789012345678901234
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
## queue show, 120 columns
|
|
460
|
+
|
|
461
|
+
Before:
|
|
462
|
+
|
|
463
|
+
```text
|
|
464
|
+
{
|
|
465
|
+
"id": "abcdef12-1111-2222-3333-444444444444",
|
|
466
|
+
"peer": "codex",
|
|
467
|
+
"state": "needs_review",
|
|
468
|
+
"revision": 3,
|
|
469
|
+
"important": true,
|
|
470
|
+
"createdAt": 1799999940000,
|
|
471
|
+
"updatedAt": 1799999970000,
|
|
472
|
+
"envelopeIds": [
|
|
473
|
+
"8d03b496-1111-2222-3333-444444444444"
|
|
474
|
+
],
|
|
475
|
+
"messages": [
|
|
476
|
+
{
|
|
477
|
+
"id": "8d03b496-1111-2222-3333-444444444444",
|
|
478
|
+
"from": "claude",
|
|
479
|
+
"priority": "important",
|
|
480
|
+
"kind": "chat",
|
|
481
|
+
"body": "[private: inspect the associated task with ahub task show]"
|
|
482
|
+
}
|
|
483
|
+
]
|
|
484
|
+
}
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
After:
|
|
488
|
+
|
|
489
|
+
```text
|
|
490
|
+
Delivery
|
|
491
|
+
FIELD VALUE
|
|
492
|
+
id abcdef12-1111-2222-3333-444444444444
|
|
493
|
+
peer codex
|
|
494
|
+
state needs_review
|
|
495
|
+
revision 3
|
|
496
|
+
important true
|
|
497
|
+
createdAt 1m ago
|
|
498
|
+
updatedAt 30s ago
|
|
499
|
+
envelopeIds 1 8d03b496-1111-2222-3333-444444444444
|
|
500
|
+
messages 1 id 8d03b496-1111-2222-3333-444444444444
|
|
501
|
+
messages 1 from claude
|
|
502
|
+
messages 1 priority important
|
|
503
|
+
messages 1 kind chat
|
|
504
|
+
messages 1 body [private: inspect the associated task with ahub task show]
|
|
505
|
+
|
|
506
|
+
resolve ahub queue resolve abcdef12-1111-2222-3333-444444444444 --action completed|retry|discard --reason <text>
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
## models status, 120 columns
|
|
510
|
+
|
|
511
|
+
Before:
|
|
512
|
+
|
|
513
|
+
```text
|
|
514
|
+
{
|
|
515
|
+
"state": "ready",
|
|
516
|
+
"model": "qwen/long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-",
|
|
517
|
+
"expiresAt": "2027-01-15T08:10:00.000Z",
|
|
518
|
+
"active": 0,
|
|
519
|
+
"contextWindow": 32768
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
After:
|
|
524
|
+
|
|
525
|
+
```text
|
|
526
|
+
Models
|
|
527
|
+
FIELD VALUE
|
|
528
|
+
state ready
|
|
529
|
+
model qwen/long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long-model-name-long
|
|
530
|
+
-model-name-long-model-name-long-model-name-long-model-name-
|
|
531
|
+
expiresAt in 10m
|
|
532
|
+
active 0
|
|
533
|
+
contextWindow 32768
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
## budget execution status, 120 columns
|
|
537
|
+
|
|
538
|
+
Before:
|
|
539
|
+
|
|
540
|
+
```text
|
|
541
|
+
[
|
|
542
|
+
{
|
|
543
|
+
"id": "budget-12345678901234567890",
|
|
544
|
+
"kind": "task",
|
|
545
|
+
"taskId": 3,
|
|
546
|
+
"peers": [
|
|
547
|
+
"local",
|
|
548
|
+
"pi"
|
|
549
|
+
],
|
|
550
|
+
"createdAt": 1799999940000,
|
|
551
|
+
"updatedAt": 1799999970000,
|
|
552
|
+
"units": {
|
|
553
|
+
"tokens": {
|
|
554
|
+
"used": 100,
|
|
555
|
+
"limit": 200,
|
|
556
|
+
"remaining": 100
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
]
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
After:
|
|
564
|
+
|
|
565
|
+
```text
|
|
566
|
+
Execution budget
|
|
567
|
+
FIELD VALUE
|
|
568
|
+
1 id budget-12345678901234567890
|
|
569
|
+
1 kind task
|
|
570
|
+
1 taskId 3
|
|
571
|
+
1 peers 1 local
|
|
572
|
+
1 peers 2 pi
|
|
573
|
+
1 createdAt 1m ago
|
|
574
|
+
1 updatedAt 30s ago
|
|
575
|
+
1 units tokens used 100
|
|
576
|
+
1 units tokens limit 200
|
|
577
|
+
1 units tokens remaining 100
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
## report, 120 columns
|
|
581
|
+
|
|
582
|
+
Before:
|
|
583
|
+
|
|
584
|
+
```text
|
|
585
|
+
period: 2027-01-15T07:59:00.000Z .. 2027-01-15T08:00:00.000Z
|
|
586
|
+
peer codex: 1 turn, 0.5 busy minutes, 120 tokens
|
|
587
|
+
usage codex: no usage records; input unknown (0 known), output unknown (0 known), cache read unknown (0 known), cache write unknown (0 known), reported total unknown (0 known); coverage unknown
|
|
588
|
+
usage team totals: reported token total unknown (0 known records); incomplete or unknown peer coverage (codex); estimated price unknown; measured spend unknown
|
|
589
|
+
messages: 0 (dropped: none; overflow 0; undeliverable 0); 0 per task that had any
|
|
590
|
+
overlap warnings: 0, task pairs: 0; edit conflicts: 0
|
|
591
|
+
task events: accepted 1
|
|
592
|
+
quota readings: 0 (0 hard limits)
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
After:
|
|
596
|
+
|
|
597
|
+
```text
|
|
598
|
+
period: 1m ago .. 0s ago
|
|
599
|
+
|
|
600
|
+
Counters
|
|
601
|
+
METRIC COUNT
|
|
602
|
+
messages 0
|
|
603
|
+
overflow 0
|
|
604
|
+
undeliverable 0
|
|
605
|
+
messages per task 0
|
|
606
|
+
overlap warnings 0
|
|
607
|
+
task pairs 0
|
|
608
|
+
edit conflicts 0
|
|
609
|
+
quota readings 0
|
|
610
|
+
hard limits 0
|
|
611
|
+
|
|
612
|
+
Peers
|
|
613
|
+
PEER TURNS BUSY TOKENS
|
|
614
|
+
codex 1 0.5m 120
|
|
615
|
+
peer codex: 1 turn, 0.5 busy minutes, 120 tokens
|
|
616
|
+
|
|
617
|
+
Usage
|
|
618
|
+
usage codex: no usage records; input unknown (0 known), output unknown (0 known), cache read unknown (0 known), cache
|
|
619
|
+
write unknown (0 known), reported total unknown (0 known); coverage unknown
|
|
620
|
+
usage team totals: reported token total unknown (0 known records); incomplete or unknown peer coverage (codex);
|
|
621
|
+
estimated price unknown; measured spend unknown
|
|
622
|
+
|
|
623
|
+
Messages
|
|
624
|
+
messages: 0 (dropped: none; overflow 0; undeliverable 0); 0 per task that had any
|
|
625
|
+
|
|
626
|
+
Coordination
|
|
627
|
+
overlap warnings: 0, task pairs: 0; edit conflicts: 0
|
|
628
|
+
|
|
629
|
+
Tasks
|
|
630
|
+
task events: accepted 1
|
|
631
|
+
|
|
632
|
+
Quota
|
|
633
|
+
quota readings: 0 (0 hard limits)
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
## report --by task, 120 columns
|
|
637
|
+
|
|
638
|
+
Before:
|
|
639
|
+
|
|
640
|
+
```text
|
|
641
|
+
period: 2027-01-15T07:59:00.000Z .. 2027-01-15T08:00:00.000Z
|
|
642
|
+
task #3: class implement, outcome in_progress, turns 1, wall unknown
|
|
643
|
+
peer codex: tokens 120; inputTokens unknown (0/0 known), outputTokens unknown (0/0 known), cacheReadTokens unknown (0/0 known), cacheWriteTokens unknown (0/0 known), totalTokens unknown (0/0 known)
|
|
644
|
+
class implement: turns 1
|
|
645
|
+
peer codex: tokens 120; inputTokens unknown (0/0 known), outputTokens unknown (0/0 known), cacheReadTokens unknown (0/0 known), cacheWriteTokens unknown (0/0 known), totalTokens unknown (0/0 known)
|
|
646
|
+
unattributed: tokens 0/120 (0.0%), usage records 0/0 (unknown), turns 0
|
|
647
|
+
before attribution: tokens 0, usage records 0, turns 0
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
After:
|
|
651
|
+
|
|
652
|
+
```text
|
|
653
|
+
period: 1m ago .. 0s ago
|
|
654
|
+
|
|
655
|
+
Tasks
|
|
656
|
+
TASK CLASS OUTCOME TURNS WALL
|
|
657
|
+
#3 implement in_progress 1 unknown
|
|
658
|
+
task #3: class implement, outcome in_progress, turns 1, wall unknown
|
|
659
|
+
peer codex: tokens 120; inputTokens unknown (0/0 known), outputTokens unknown (0/0 known), cacheReadTokens unknown
|
|
660
|
+
(0/0 known), cacheWriteTokens unknown (0/0 known), totalTokens unknown (0/0 known)
|
|
661
|
+
|
|
662
|
+
Classes
|
|
663
|
+
class implement: turns 1
|
|
664
|
+
peer codex: tokens 120; inputTokens unknown (0/0 known), outputTokens unknown (0/0 known), cacheReadTokens unknown
|
|
665
|
+
(0/0 known), cacheWriteTokens unknown (0/0 known), totalTokens unknown (0/0 known)
|
|
666
|
+
|
|
667
|
+
Unattributed
|
|
668
|
+
unattributed: tokens 0/120 (0.0%), usage records 0/0 (unknown), turns 0
|
|
669
|
+
|
|
670
|
+
Before attribution
|
|
671
|
+
before attribution: tokens 0, usage records 0, turns 0
|
|
672
|
+
```
|