@prplkane/roundtable 0.0.0-stage → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +513 -0
- package/LICENSE +21 -0
- package/README.md +188 -3
- package/SECURITY.md +299 -0
- package/docs/workflow.md +1325 -0
- package/package.json +52 -6
- package/scripts/agent.mjs +40 -0
- package/scripts/export.mjs +20 -0
- package/scripts/mcp.mjs +175 -0
- package/scripts/run-debate.mjs +70 -0
- package/scripts/server.mjs +28 -0
- package/scripts/setup.mjs +182 -0
- package/skills/roundtable/SKILL.md +55 -0
- package/src/adapters/agy.js +7 -0
- package/src/adapters/catalogue.js +49 -0
- package/src/adapters/claude.js +6 -0
- package/src/adapters/codex.js +6 -0
- package/src/adapters/common.js +304 -0
- package/src/adapters/config.js +432 -0
- package/src/adapters/endpoint.js +178 -0
- package/src/adapters/errors.js +69 -0
- package/src/adapters/index.js +11 -0
- package/src/adapters/models.js +106 -0
- package/src/adapters/quota.js +305 -0
- package/src/adapters/spawn.js +178 -0
- package/src/agent-client.js +108 -0
- package/src/cli.js +44 -0
- package/src/contract.js +256 -0
- package/src/diagnostics.js +133 -0
- package/src/doctor.js +96 -0
- package/src/engine.js +902 -0
- package/src/estimate.js +331 -0
- package/src/export.js +307 -0
- package/src/fake.js +75 -0
- package/src/folder-picker.js +46 -0
- package/src/history.js +220 -0
- package/src/local-http.js +39 -0
- package/src/local-server.js +82 -0
- package/src/notes.js +16 -0
- package/src/personas.js +49 -0
- package/src/preflight.js +126 -0
- package/src/progress.js +30 -0
- package/src/prompts.js +278 -0
- package/src/research.js +113 -0
- package/src/review-view.js +157 -0
- package/src/seats.js +272 -0
- package/src/server.js +913 -0
- package/src/settings.js +27 -0
- package/src/setup-toml.js +124 -0
- package/src/snapshot.js +93 -0
- package/src/store.js +303 -0
- package/src/terminal.js +53 -0
- package/src/terms.js +52 -0
- package/src/ui/app.js +1967 -0
- package/src/ui/avatars.js +132 -0
- package/src/ui/ceremony.js +87 -0
- package/src/ui/design/app.css +714 -0
- package/src/ui/design/preset-dusk.css +91 -0
- package/src/ui/design/tokens.css +129 -0
- package/src/ui/diagnostics.js +61 -0
- package/src/ui/help.js +122 -0
- package/src/ui/icons.js +64 -0
- package/src/ui/index.html +272 -0
- package/src/ui/loader.js +73 -0
- package/src/ui/logo.svg +4 -0
- package/src/ui/scan.js +57 -0
- package/src/ui/scribe.js +64 -0
- package/src/ui/sound.js +80 -0
- package/src/validate.js +112 -0
- package/src/version.js +5 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.6.3
|
|
4
|
+
|
|
5
|
+
### Assistant integration
|
|
6
|
+
|
|
7
|
+
- Add `roundtable setup` to connect user-level MCP tools and a workflow skill for Codex,
|
|
8
|
+
Claude Code and Antigravity across projects. Include checks and removal, preserve unrelated
|
|
9
|
+
settings and refuse to overwrite edited entries. No automatic npm install hook is added.
|
|
10
|
+
- Add a dependency-free stdio MCP adapter using the existing JSON client. Start a hidden
|
|
11
|
+
local board on demand, expose questions and bounded extensions, and keep reviews running
|
|
12
|
+
when the host disconnects. Report completion only after a ready chairman verdict.
|
|
13
|
+
- Recommend one critique round for normal agent reviews and reserve zero for quick
|
|
14
|
+
comparisons. Report actual completed rounds so agents cannot mistake blind positions
|
|
15
|
+
for a discussion. Bundle the skill in the npm payload and test installation outside a checkout.
|
|
16
|
+
- Count attempted rounds separately from rounds with usable replies, so failed critiques do
|
|
17
|
+
not inflate review depth. Share the HTTP client and validation bounds between MCP and CLI;
|
|
18
|
+
remove the subprocess watchdog that could interrupt a valid long wait.
|
|
19
|
+
- Check server health without waiting for provider catalogues; retry transient readiness
|
|
20
|
+
errors and refuse incompatible versions, modes or explicit storage directories. Add idle-only
|
|
21
|
+
server status/start/stop/restart commands for installed updates.
|
|
22
|
+
- Preserve all unmanaged TOML declaration forms, literal dollar strings, selected modes and
|
|
23
|
+
ports. Honor Claude profile overrides, check the Node executable and repair missing managed
|
|
24
|
+
files. Test a real npm archive installation after moving its source checkout.
|
|
25
|
+
|
|
26
|
+
### Review workflow
|
|
27
|
+
|
|
28
|
+
- Make attended checkpoints finite in both the browser and agent client: 15 seconds for a
|
|
29
|
+
correction window and two minutes for a question by default, configurable separately.
|
|
30
|
+
An unanswered window continues with unknowns intact; it never supplies an answer or accepts
|
|
31
|
+
the recommendation. The hard wall clock still applies.
|
|
32
|
+
- Replace permanent holds on incidental browser clicks with bounded extensions while writing
|
|
33
|
+
or requesting More time. Show question countdowns, draw attention in the tab title, and
|
|
34
|
+
retain automatic-continuation notices after reload.
|
|
35
|
+
- Return an explicit question handoff, answer template, deadline and commands to coordinating
|
|
36
|
+
agents. Add `agent hold` for a bounded extension and `wait --after-round` to await a response
|
|
37
|
+
without asking the same question again. Empty checkpoints need no user confirmation.
|
|
38
|
+
|
|
39
|
+
### Documentation
|
|
40
|
+
|
|
41
|
+
- Add Linux first-connection steps, including a direct GitHub archive install, assistant
|
|
42
|
+
registration, discovery checks and a provider-free demo.
|
|
43
|
+
- Show the app's pixel logo tile in interactive help and foreground startup, drawn with half
|
|
44
|
+
blocks in the orchid and aubergine of the board header, with the wordmark and installed
|
|
45
|
+
version beside it. Respect terminal width, UTF-8 support and `NO_COLOR`; keep redirected
|
|
46
|
+
output and machine protocols undecorated.
|
|
47
|
+
- Add a Known issues entry to the guide, linked from the README: Codex calls can stall, what
|
|
48
|
+
Roundtable does about it and what it cannot do.
|
|
49
|
+
|
|
50
|
+
## 0.6.2
|
|
51
|
+
|
|
52
|
+
- Simplify model names to default and lightest annotations, removing inferred plan restrictions.
|
|
53
|
+
- Let Claude's next quota refresh recover after a free `/usage` answer without limits.
|
|
54
|
+
Keep the safeguards for answers that may have called a model.
|
|
55
|
+
- Show the latest quota on every provider card and replace the first-call promise with
|
|
56
|
+
"quota unavailable" when no figure is known.
|
|
57
|
+
- Make Clear include interrupted sessions as well as finished ones. Running reviews and
|
|
58
|
+
reviews waiting for input remain protected, with the full selection checked before deletion.
|
|
59
|
+
- Remove deletion success banners from the history list.
|
|
60
|
+
- Clarify that usage statistics describe your own agents' Roundtable calls, stay on your
|
|
61
|
+
machine, and are not sent to Roundtable's developers. Document restarting after updates.
|
|
62
|
+
- Take the version shown in the board footer and sent in the Codex app-server handshake from
|
|
63
|
+
`package.json`; both still said 0.6.1.
|
|
64
|
+
|
|
65
|
+
### Review fixes
|
|
66
|
+
|
|
67
|
+
- Stream Codex replies over WebSocket, so a response that never starts is caught. A request
|
|
68
|
+
can be held for minutes before its response starts (one traced call: 173 seconds). Over SSE,
|
|
69
|
+
Codex starts its idle timer only once response headers arrive, so that wait had no limit short
|
|
70
|
+
of Roundtable's call limit; over WebSocket the timer starts when the request is sent. Against a
|
|
71
|
+
local server that never answers, SSE waited until it was killed, while WebSocket reconnected at
|
|
72
|
+
each idle limit. On the real backend, 18 WebSocket calls at low, medium and high effort all
|
|
73
|
+
answered, with no reconnect on a healthy call; the three stalls were resent at their idle
|
|
74
|
+
limit. After its reconnects Codex falls back to HTTPS for the rest of the call, where the wait
|
|
75
|
+
for response headers is again bounded only by the call limit, and a WebSocket that does not
|
|
76
|
+
open within 10 seconds does the same. Reconnects are now counted from Codex's retry log too,
|
|
77
|
+
since its events leave out the first WebSocket retry.
|
|
78
|
+
- Reconnect a silent Codex request after 15 seconds instead of up to 95. Each request a Codex
|
|
79
|
+
call makes either streams within a few seconds or stays silent, on every model and search mode
|
|
80
|
+
tried, through `codex exec` and `codex app-server` alike, with or without Roundtable's
|
|
81
|
+
settings. A Codex seat, chairman or searcher at low effort (or none or minimal) now reconnects
|
|
82
|
+
after 15 seconds of silence, up to five times, and a reconnect resends only the silent request.
|
|
83
|
+
This does not make stalls rarer (in testing, 15, 35 and 60 second limits each saw one or two
|
|
84
|
+
slow calls in eight); it makes a silent one cost about 15 seconds instead of 95 for a seat at
|
|
85
|
+
the default call limit, where stalled low-effort seats took 101 to 220 seconds. Other efforts
|
|
86
|
+
keep the limit derived from the call limit, since a request that reasons longer may stay silent
|
|
87
|
+
while healthy (GPT-6.1 Sol at high effort sent no stream events for 15 to 17 seconds).
|
|
88
|
+
- Count a Codex searcher's reconnect notices as progress, and start once more a searcher call
|
|
89
|
+
whose reconnects all failed. The reconnects are bounded, and a reconnect keeps a finished
|
|
90
|
+
search, so stopping the call at a reconnect threw that search away. The fresh attempt follows
|
|
91
|
+
the 0.6.1 rules: at least 30 seconds must remain, and both attempts share the time limit.
|
|
92
|
+
- Keep a search whose sources include a date the searcher could not give as a real `YYYY-MM-DD`
|
|
93
|
+
date. One such date (a month only, a year only, "unknown") used to reject the whole source
|
|
94
|
+
bundle and stop the review before discussion; that source's date is now saved as not reported
|
|
95
|
+
and the other sources keep theirs.
|
|
96
|
+
|
|
97
|
+
### Security and usage
|
|
98
|
+
|
|
99
|
+
- Ask a Codex searcher for one search call carrying several queries. Each further call is another
|
|
100
|
+
request that can stall, and it resends everything gathered so far: input grew from about 22k
|
|
101
|
+
tokens for one search to 103k for four. In testing, one call returned as many sources (3 on
|
|
102
|
+
average) at 23k input tokens on average instead of 35k, with a median of 13 seconds instead of
|
|
103
|
+
41. The search limit is unchanged: a second call is still allowed when the first returned
|
|
104
|
+
nothing usable. Claude and Antigravity search one query per call and get no such hint.
|
|
105
|
+
|
|
106
|
+
## 0.6.1
|
|
107
|
+
|
|
108
|
+
### Security and usage
|
|
109
|
+
|
|
110
|
+
- Require acknowledgment of Antigravity's account-risk notice before provider calls, model
|
|
111
|
+
lists or quota reads. Google's [FAQ](https://antigravity.google/docs/faq) says third-party
|
|
112
|
+
wrappers are unsupported under consumer plans and third-party access can lead to account
|
|
113
|
+
suspension or termination. The board records the acknowledgment locally; it can be
|
|
114
|
+
withdrawn and is requested again when the notice is updated.
|
|
115
|
+
- **Upgrading Antigravity workflows:** agent requests now need
|
|
116
|
+
`options.acknowledgeTermsRisk: true`, after the person agrees. `doctor` needs
|
|
117
|
+
`--acknowledge-terms-risk` for anything beyond `agy --version`. These are separate from
|
|
118
|
+
limited-isolation consent. See the [setup guide](docs/workflow.md#antigravity-google).
|
|
119
|
+
|
|
120
|
+
### Review fixes
|
|
121
|
+
|
|
122
|
+
- Restore GPT-6.1 Terra in the Codex picker and order model families from stronger to lighter,
|
|
123
|
+
keeping plan restrictions visible. Custom model IDs remain editable instead of reverting to Default.
|
|
124
|
+
- Align card controls and effort indicators; put provider warnings in an expandable row.
|
|
125
|
+
Refresh the status after an account notice is acknowledged or withdrawn.
|
|
126
|
+
- Start the searcher query from the question and options, with a preview and an editable custom query.
|
|
127
|
+
Other context and discussion answers stay out of research.
|
|
128
|
+
- Put the chairman's recommended option above its answer in bold uppercase. Rename history's
|
|
129
|
+
cleanup action to Clear; its confirmation still identifies the finished sessions to remove.
|
|
130
|
+
|
|
131
|
+
- Stop a Codex searcher call after 40 seconds without progress and allow one fresh attempt
|
|
132
|
+
when at least 30 seconds remain. Both attempts share the searcher's time limit and are
|
|
133
|
+
recorded. Reconnect notices do not count as progress. Missing usage from the first attempt
|
|
134
|
+
remains unknown and can block the second under a token cap. Each attempt has its own
|
|
135
|
+
search-operation limit. This bounds recovery; it does not repair a failing network route.
|
|
136
|
+
|
|
137
|
+
### Documentation
|
|
138
|
+
|
|
139
|
+
- Explain provider regional availability, the limits of login/status checks, and how to
|
|
140
|
+
investigate stalled connections. Clarify that Roundtable leaves VPN, proxy and DNS settings
|
|
141
|
+
unchanged; network comparisons are optional diagnostics.
|
|
142
|
+
- Clarify that Codex's stream-idle timer does not cover every connection stage. Roundtable's
|
|
143
|
+
overall call limit still applies while the CLI waits for a response to begin.
|
|
144
|
+
|
|
145
|
+
## 0.6.0
|
|
146
|
+
|
|
147
|
+
### Review fixes
|
|
148
|
+
|
|
149
|
+
- Keep successful research when the searcher repeats a source URL. Repeated URLs become one
|
|
150
|
+
citation, with distinct excerpts combined when they fit the existing limit. Every record
|
|
151
|
+
still passes URL, date and length checks; no extra model call is made to repair duplicates.
|
|
152
|
+
- Offer each Codex model only the effort levels it takes. The Luna models stop at `max`
|
|
153
|
+
(`codex debug models`), but every Codex model was offered `ultra`. The pips, the chairman's
|
|
154
|
+
effort list and the server's check now follow the chosen model, and picking a model that
|
|
155
|
+
does not take the chosen level returns the seat to the CLI's default.
|
|
156
|
+
|
|
157
|
+
### Security and usage
|
|
158
|
+
|
|
159
|
+
- Read Claude's remaining quota with `claude -p /usage`, which the CLI answers itself with no
|
|
160
|
+
model call, at start, on Refresh status, after each Claude reply and when a debate ends. Claude
|
|
161
|
+
no longer shows "not reported" until its first reply after every server start, and its
|
|
162
|
+
per-model weekly limit (for example "7d Fable") now appears beside the session and weekly
|
|
163
|
+
ones. Only the limit lines are kept; the local activity summary in the same answer is
|
|
164
|
+
discarded. A reply's own figure stands in when the read gives nothing. An answer that shows a
|
|
165
|
+
turn, tokens or a cost, one with no plan limits (API-key billing), or a read that times out
|
|
166
|
+
stops further reads until restart. Calibration now treats reset times a few minutes apart as
|
|
167
|
+
the same window, since `/usage` prints them to the minute.
|
|
168
|
+
- Read Antigravity's remaining quota with `agy -p /usage`, which the CLI answers itself with no
|
|
169
|
+
model call. Its limits come per model group (Gemini; Claude and GPT; Gemini 4 Argon on some
|
|
170
|
+
plans), and the seat lamps, the quota line and the quota picture show the windows of the
|
|
171
|
+
group each seat's model draws on, with the used share and the reset time. An answer that
|
|
172
|
+
shows a turn, tokens or a conversation, or a read that times out, stops further reads until
|
|
173
|
+
the server restarts, so a CLI change can cost one call, never one per reply. Measured quota
|
|
174
|
+
rates for Antigravity are kept per model and only against that model's group.
|
|
175
|
+
- Bench only the used-up Antigravity model group, not the whole login: when an Argon seat
|
|
176
|
+
reports a used-up quota, the Gemini and Claude seats on the same login keep answering. A
|
|
177
|
+
seat on the default model, whose group cannot be told, and a logged-out CLI still take the
|
|
178
|
+
whole login out, as for every other vendor.
|
|
179
|
+
- Keep Roundtable's calls out of each CLI's own history. Claude seats now pass
|
|
180
|
+
`--no-session-persistence` and Codex seats `--ephemeral`, so a stateless seat, chairman or
|
|
181
|
+
searcher call no longer leaves a session, prompts included, under `~/.claude/projects` or
|
|
182
|
+
`~/.codex/sessions`. Only seats in resume memory, whose next round continues the session,
|
|
183
|
+
still save it. Antigravity has no such flag.
|
|
184
|
+
- Read Antigravity's AI credits with `agy -p /credits`, which the CLI answers itself with no
|
|
185
|
+
model call, beside the `/usage` read and at most every ten minutes. The usage table shows
|
|
186
|
+
"AI credits left", which you previously had to type in from the credits page.
|
|
187
|
+
|
|
188
|
+
### Local operation and interface
|
|
189
|
+
|
|
190
|
+
- Keep Windows history and login profiles in `%USERPROFILE%\.roundtable` instead of
|
|
191
|
+
`%LOCALAPPDATA%\Roundtable`. Windows redirects the AppData writes of anything started from a
|
|
192
|
+
packaged app, such as the Claude or Codex desktop app and their terminals, into a private copy
|
|
193
|
+
per app, so each app saw its own history and its own one-server lock. At startup Roundtable
|
|
194
|
+
now lists every older folder that still holds a review the data folder lacks: a checkout's
|
|
195
|
+
`debates/`, the earlier AppData folder and each packaged app's copy of it. It never moves them
|
|
196
|
+
itself. A login profile made under the earlier AppData default keeps working until it is moved.
|
|
197
|
+
- Stream Codex replies over SSE with an idle limit that fits inside the call limit and two
|
|
198
|
+
reconnects, through a provider entry named per call that points at the same ChatGPT backend
|
|
199
|
+
with the same login. The built-in provider offers no idle or reconnect setting, and the CLI's
|
|
200
|
+
documented stream-idle default equals the default call limit, so a stalled reply ran the full
|
|
201
|
+
five minutes before failing; it now reconnects after 95 seconds at that limit and fails sooner
|
|
202
|
+
once the reconnects are used up. That a custom provider may use the ChatGPT login is not documented;
|
|
203
|
+
`SECURITY.md` names both ways a future CLI could react. Every reconnect is counted into the
|
|
204
|
+
attempt's saved progress and shown as a "reconnected ×N" mark on the reply card, in failure
|
|
205
|
+
details, error logs and the agent state, so a recovered stall stays visible.
|
|
206
|
+
- Wait out an API endpoint's short rate limit once instead of benching its host for the rest of
|
|
207
|
+
the debate. A `429` whose `Retry-After` asks for 30 seconds or less, the delay `agy` itself
|
|
208
|
+
waits out, is retried once after that wait when it ends before the wall clock does. Without
|
|
209
|
+
`Retry-After`, with a longer one, or at a second `429` the host is benched as before; `402`
|
|
210
|
+
and every other status are unchanged. A `429` now counts as zero tokens, since the server
|
|
211
|
+
refused the request before the model ran, so a seat's token cap no longer blocks the retry or
|
|
212
|
+
later rounds as unknown spending. Stop, finish and the wall clock end a retry's wait at once,
|
|
213
|
+
for this wait and a network failure's, and a retry is skipped when another seat benched the
|
|
214
|
+
same login during the wait. The limited attempt is recorded with the kind `throttled`.
|
|
215
|
+
|
|
216
|
+
## 0.5.0
|
|
217
|
+
|
|
218
|
+
### Security and usage
|
|
219
|
+
|
|
220
|
+
- Fix the Antigravity tool guard for CLI 1.4, which reports each tool as a `step_update` with
|
|
221
|
+
the tool inside it. The guard read only the older shapes, so a tool that no Antigravity
|
|
222
|
+
permission rule can deny, its web search, went unnoticed. Any reported tool step now stops
|
|
223
|
+
the seat at once, as it does for Claude and Codex.
|
|
224
|
+
|
|
225
|
+
### Local operation and interface
|
|
226
|
+
|
|
227
|
+
- Move a reply card as it opens and folds: the body under its seat and position unrolls over
|
|
228
|
+
the board's base motion time and rolls up a little faster before the card folds. Reduced
|
|
229
|
+
motion opens and folds it at once. The card head is also a button, so Enter or Space opens
|
|
230
|
+
and folds it, and focus stays on it while other replies land.
|
|
231
|
+
- Codex calls disable analytics/telemetry uploads and unlimited connection retries. A valid
|
|
232
|
+
completed answer with measured usage survives a CLI that hangs during shutdown; incomplete
|
|
233
|
+
answers still fail without a timeout retry. Search and reconnect stages appear in diagnostics.
|
|
234
|
+
- Treat Codex warning items as diagnostics instead of tool use, and surface a failed turn's
|
|
235
|
+
provider error promptly. Unknown tools remain blocked. Resolve npm and native CLIs in PATH
|
|
236
|
+
order so a later desktop binary cannot replace the terminal's selected installation.
|
|
237
|
+
- Stop presenting Codex defaults from user configuration that isolated calls ignore. Keep
|
|
238
|
+
model and effort choices explicit when reproducibility matters.
|
|
239
|
+
- Keep parent Codex app routing and session variables out of child CLIs and quota reads.
|
|
240
|
+
Use a shorter decision-review base prompt for Codex instead of its coding-agent prompt;
|
|
241
|
+
the tool restrictions remain unchanged. The temporary instruction file is removed after
|
|
242
|
+
each call, including failures.
|
|
243
|
+
- Charge Codex resume calls by the increase in session token counters. Previous rounds are no
|
|
244
|
+
longer counted again against usage and budget caps. Missing or decreasing baselines remain
|
|
245
|
+
unknown; fresh sessions start their accounting from zero.
|
|
246
|
+
- Show the chairman at work: while the verdict call runs, the Conclusion panel draws a pixel
|
|
247
|
+
sheet being written under a quill instead of staying hidden. Reduced motion shows a still page.
|
|
248
|
+
- Keep a round or detail the person folded or opened across redraws; before, every server
|
|
249
|
+
event reopened the latest round and closed everything else.
|
|
250
|
+
- Give the option columns their own grid, so two options fill the row with no blank third
|
|
251
|
+
column beside them when a note or the thinking strip is present.
|
|
252
|
+
- Move reported quota to one quiet line above the board; the question now heads the review
|
|
253
|
+
state, the conclusion and the rounds directly.
|
|
254
|
+
- Show a plain boot screen when setup takes longer than a moment: the logo in pixels, its
|
|
255
|
+
ring breathing slowly in and out while a light runs round the seats, and one line of text.
|
|
256
|
+
- Box only the main controls. Row Delete appears on hover or focus (always on touch), Show all
|
|
257
|
+
and Clear finished are quiet text at the foot of the debates list, the review state and CLI
|
|
258
|
+
seats are unboxed, recommended states take their colour, and partial token sums show "+".
|
|
259
|
+
- Fewer controls in the header: Compact is gone; each reply card starts folded to its seat and
|
|
260
|
+
position, even in the round that is still coming in, and opens by a click on its head;
|
|
261
|
+
theme and sound are pixel icons; Save error log moved to the status line. The debates list
|
|
262
|
+
folds and the browser remembers it.
|
|
263
|
+
- Lead the board with the question as its heading and the review state as a small tag beside
|
|
264
|
+
it. Usage details is a toggle that never moves; its table groups seats under one line per
|
|
265
|
+
account, right-aligns numbers and marks partial sums with "+" as the debates list does.
|
|
266
|
+
- Start every fold closed: debates, More context, the Quota picture, login profiles, and rounds
|
|
267
|
+
once a review is finished. More context spans the panel; run settings take the width they
|
|
268
|
+
need. Quota cards share one layout, with a shade per seat and a hatched chairman in the bar.
|
|
269
|
+
- Rework the paper theme on night's structure: a faint plum page, white fields with visible
|
|
270
|
+
borders, seat colours closer to night's hues at text contrast, softer position tints.
|
|
271
|
+
- Make research a visible role, the **searcher**: a card added with **+ Add searcher** beside
|
|
272
|
+
the chairman, with an open pixel eye as its mark. It has its own vendor, model,
|
|
273
|
+
effort and login profile instead of borrowing the first Codex seat's. Pick Claude, Codex or
|
|
274
|
+
Antigravity on its card; it starts on that vendor's lightest model at low effort, and agent
|
|
275
|
+
requests may set all four in `options.research` (Codex when no vendor is named). Claude
|
|
276
|
+
searches with WebSearch as its only tool, and its own search count and search-model tokens
|
|
277
|
+
are included; on Antigravity any tool but its web search stops it. It
|
|
278
|
+
replaces the research panel and its switch, and is named on the board, in Usage details and in
|
|
279
|
+
the quota picture. While it works the review state reads "Searcher at work" and the sources
|
|
280
|
+
panel shows its eye moving down a column of results, lighting the ones it keeps; with reduced
|
|
281
|
+
motion the picture stays still. Its card title and Effort carry a help tip, the README's
|
|
282
|
+
"How a review works" names it as an optional step, and the chairman's Effort has the tip too.
|
|
283
|
+
- Show Antigravity's limited isolation on the card that runs on it, seat, chairman or searcher:
|
|
284
|
+
one warning line whose tip says in three sentences what cannot be sealed off, what Roundtable
|
|
285
|
+
denies and stops, and that choosing Antigravity accepts it. Choosing it there is the consent
|
|
286
|
+
the board sends, so there is no separate switch and no refusal when the table opens. Agent
|
|
287
|
+
requests still send `allowLimitedIsolation: true`; without it the server refuses Antigravity.
|
|
288
|
+
- Fix a stray brace in the stylesheet that dropped the quota readout grid, and debate titles
|
|
289
|
+
squeezed to one letter at medium widths.
|
|
290
|
+
|
|
291
|
+
## 0.4.0
|
|
292
|
+
|
|
293
|
+
- Add optional Codex web research before discussion, with an explicit public search question,
|
|
294
|
+
time limit and reported search-operation limit. Save one cited evidence bundle for every
|
|
295
|
+
seat, recovery and export; show research spending separately. Failures stop before discussion,
|
|
296
|
+
interrupted research never automatically reruns, and debate tools remain disabled.
|
|
297
|
+
Project safe research fields in agent snapshots, including older saved failures. Include
|
|
298
|
+
shared source context in setup estimates and admission checks for discussion and verdicts.
|
|
299
|
+
|
|
300
|
+
- Save safe provider progress on timeout, cancellation and failure, including first output,
|
|
301
|
+
last stage, idle time and byte counts. Show it in failure details and diagnostic downloads;
|
|
302
|
+
preserve complete usage received before a stalled exit without retrying unknown spending.
|
|
303
|
+
|
|
304
|
+
- Enforce the provider tool guard on every discussion and verdict call, including recovered
|
|
305
|
+
reviews. Stop reported tool activity without a repair; retain spending and exclude rejected
|
|
306
|
+
text from later prompts. Inspect bounded CLI streams while running, strengthen Claude and
|
|
307
|
+
Codex isolation flags, send Antigravity prompts on stdin and require explicit consent to
|
|
308
|
+
Antigravity's remaining isolation limits with session-only tool denial rules.
|
|
309
|
+
Invalid, incomplete or oversized streams stop the seat without retry or session reuse.
|
|
310
|
+
Agent help documents Antigravity's explicit consent option and remaining isolation limits.
|
|
311
|
+
|
|
312
|
+
- Clear the board's reconnecting state as soon as its event stream reconnects, including
|
|
313
|
+
while waiting for human input with no new events to replay.
|
|
314
|
+
|
|
315
|
+
- Explain when an earlier timeout or interruption left a seat's spending unknown. Show that
|
|
316
|
+
cause on the blocked reply and distinguish unknown usage from a projected cap crossing.
|
|
317
|
+
|
|
318
|
+
- Recover interrupted discussions in fresh provider sessions seeded with completed rounds
|
|
319
|
+
and saved notes, retaining earlier spending and deadlines. Preserve discussion completion
|
|
320
|
+
reasons when a later verdict is cancelled.
|
|
321
|
+
|
|
322
|
+
- Resolve protected export directories through filesystem aliases, refuse linked record/index
|
|
323
|
+
files, and exclusively create temporary files. Public exports now require an empty staging
|
|
324
|
+
directory (an existing `.git` is preserved) and never delete destination contents.
|
|
325
|
+
Preserve existing export/index permission bits on POSIX; new files respect the process umask.
|
|
326
|
+
|
|
327
|
+
- Redact known endpoint credentials from decoded replies and error excerpts before recording
|
|
328
|
+
them. Endpoint configuration continues to belong to the trusted local user.
|
|
329
|
+
|
|
330
|
+
- Quote peer replies, repair text and discussion notes as attributed input records. Reject
|
|
331
|
+
duplicate reply and verdict headers while preserving ordinary Markdown in content.
|
|
332
|
+
|
|
333
|
+
- Preserve Resume on server shutdown without recording a human Stop; close event streams and
|
|
334
|
+
retain cancelled-call spending. Accept emphasis around whole reply and verdict header lines
|
|
335
|
+
while preserving punctuation inside option labels.
|
|
336
|
+
|
|
337
|
+
### Review fixes
|
|
338
|
+
|
|
339
|
+
- Normalize replies, verdict headers, option punctuation and persona parentheticals in linear
|
|
340
|
+
time, including adversarial whitespace and Unicode input. Preserve exact option labels
|
|
341
|
+
ending in quotes, stars or punctuation before applying formatting tolerance.
|
|
342
|
+
- Flush a dispatch intent before every provider call; unfinished attempts remain unknown
|
|
343
|
+
after restart and cannot bypass admission caps. Settled calls are counted once.
|
|
344
|
+
- Stop engines before cancelling server calls and refuse dispatch during shutdown.
|
|
345
|
+
- Rebuild failed reviews after cancelled turns settle so repaired storage can resume without
|
|
346
|
+
restarting the server. Keep unknown spend and transcript-recovery warnings.
|
|
347
|
+
- Read history summaries asynchronously, cache unchanged records, bound inactive replays and
|
|
348
|
+
avoid adding global pool/quota events to idle finished records.
|
|
349
|
+
- Remove invalid key-variable values before saving or restoring browser preferences.
|
|
350
|
+
- Preserve unreadable pool/calibration files, report their failure and block writes until
|
|
351
|
+
repair and restart; replace valid settings atomically.
|
|
352
|
+
|
|
353
|
+
### Security and usage
|
|
354
|
+
|
|
355
|
+
- Require HTTPS for hosted endpoints, including names with private-address-like prefixes.
|
|
356
|
+
Limit decoded API responses, including errors, to 1 MiB.
|
|
357
|
+
- Check budgets before every provider attempt, including retries and fallback chairmen.
|
|
358
|
+
Reserve for concurrent calls and the verdict; refused calls add no usage.
|
|
359
|
+
- Recheck the wall-clock deadline after a retry delay, before dispatching another provider call.
|
|
360
|
+
- Carry the saved cumulative cost into resumed CLI calls so a server restart does not charge it twice.
|
|
361
|
+
- Keep missing token counts unknown and block further calls to that vendor under a token cap,
|
|
362
|
+
including after restart. Show unknown or partial totals while retaining reported costs.
|
|
363
|
+
- Make preflight reads cached-only. Authenticate refreshes, share overlapping checks, and
|
|
364
|
+
bound concurrent work, queue size and cache size.
|
|
365
|
+
- Send a Content-Security-Policy, `nosniff` and a no-referrer policy with every response, so
|
|
366
|
+
only the server's own scripts can run in the page that holds the launch token.
|
|
367
|
+
- Pin CI actions to commit IDs and make the dependency-update cooldown explicit.
|
|
368
|
+
|
|
369
|
+
### Records and recovery
|
|
370
|
+
|
|
371
|
+
- Treat an expired input pause as final even when its timer fires before the overall deadline
|
|
372
|
+
timer. Do not start a chairman call after the pause expires.
|
|
373
|
+
|
|
374
|
+
- Add Delete and Clear finished with confirmation and protection for active sessions. Keep
|
|
375
|
+
exported files and usage statistics after cleanup. Default history to the OS user-data folder,
|
|
376
|
+
outside the checkout, and allow one server per data folder.
|
|
377
|
+
- Make Stop cancel the whole review, including automatic and manually requested verdicts.
|
|
378
|
+
Keep Stop visible during synthesis and distinguish cancellation from successful completion.
|
|
379
|
+
Cancel active calls even if a transcript write fails; fatal engine errors cancel them too.
|
|
380
|
+
- Add Finish with verdict after the first usable round, so ending discussion and aborting the
|
|
381
|
+
whole review are separate choices in the board and agent client.
|
|
382
|
+
- Keep agent-submitted notes distinct from human notes in the board, prompts, replay and exports.
|
|
383
|
+
- Ignore explicit no-question placeholders when deciding whether to pause. Preserve the blind
|
|
384
|
+
round pause and questions that still need an answer, without another model call.
|
|
385
|
+
- Recover an incomplete final transcript line with an exact backup before appending.
|
|
386
|
+
Show recovery notices; keep corrupt completed records visible and block further writes.
|
|
387
|
+
- Preserve Resume notes before the first round and Stop notes entered during a round.
|
|
388
|
+
Honor Stop without waiting for another input gate and prevent further seat retries.
|
|
389
|
+
- Retain the original chairman's model, effort and profile when requesting a missing verdict.
|
|
390
|
+
Restore the human decision and reason on reload.
|
|
391
|
+
|
|
392
|
+
### Local operation and interface
|
|
393
|
+
|
|
394
|
+
- Present the final answer and its reasons before supporting detail. Distinguish material
|
|
395
|
+
clarifications from optional questions, and collapse panel positions and run metadata.
|
|
396
|
+
- Add Copy result with a manual clipboard fallback. Keep the agent verdict contract and full
|
|
397
|
+
exports unchanged; old reviews remain readable without another model call.
|
|
398
|
+
- Ask for a direct, conditional conclusion when important facts are missing, and allow a
|
|
399
|
+
nuanced synthesis for reflective questions. Do not manufacture questions or thresholds.
|
|
400
|
+
|
|
401
|
+
- Keep optional cat and alien personas in the public build, with their prompts and artwork in
|
|
402
|
+
a readable catalogue. The public-tree test checks the catalogue before publication.
|
|
403
|
+
- Add preview status and clear feedback and support links to the README.
|
|
404
|
+
- Lay out a round as one column per option, in option order, from the first reply on. A reply
|
|
405
|
+
lands at the foot of its column and nothing else moves; seats still thinking wait in a strip
|
|
406
|
+
under the columns. Before, cards regrouped as each reply arrived and the page jumped.
|
|
407
|
+
- Tint a card against the majority as soon as replies arrive (provisional, "so far" in the
|
|
408
|
+
tooltip) and settle the tint at the end of the round, instead of colouring only then.
|
|
409
|
+
- Show one banner with a **Reload** button when the board belongs to an earlier server
|
|
410
|
+
session, and stop retrying from that page. Before, a board left open across a restart
|
|
411
|
+
reported a page error and retried its diagnostics every 15 seconds, refused each time.
|
|
412
|
+
- Tell the chairman of an unattended review that any seat question is still open, so it lands
|
|
413
|
+
under its open questions instead of reading as agreement.
|
|
414
|
+
- Recommend the chairman one effort step above the seats, in the agent recipe and the guide:
|
|
415
|
+
the verdict is the call that decides, and a low-effort chairman dismisses the hardest
|
|
416
|
+
objection in a word.
|
|
417
|
+
- Play a distinct rising cue when the table stops for you (after the blind round and for a
|
|
418
|
+
seat's question), so a review left in another tab can call you back. The gavel sounds stay
|
|
419
|
+
for opening and ending.
|
|
420
|
+
- Add an **Unattended** switch to the round settings, off by default: the review skips every
|
|
421
|
+
pause, and the seats are told to state what they would have asked as assumptions instead of
|
|
422
|
+
asking, since nobody answers; the question line leaves their contract, so its tokens leave
|
|
423
|
+
every call too. For a review nobody will watch. The JSON client takes it as
|
|
424
|
+
`options.unattended`.
|
|
425
|
+
- Explain each mood on hover: the mood list, the mood on a reply card and the mood of a seat
|
|
426
|
+
that asked a question all carry its one-line description.
|
|
427
|
+
- Add a **Compact** switch in the header: every card folds to its seat and stance, so a round
|
|
428
|
+
reads as who chose what; a click on a card opens that reply. The switch is remembered.
|
|
429
|
+
- Name every seat that asked a question above its answer field (name, lens and mood, with a
|
|
430
|
+
persona's avatar), not only the lens. Seats still see each other by lens only.
|
|
431
|
+
- Show the effort a blank seat really runs at when the CLI's own default is known:
|
|
432
|
+
"default (max)" for Codex, read from its config.
|
|
433
|
+
- Optional personas on Antigravity run on the lightest Gemini the account lists (Flash Lite
|
|
434
|
+
where offered, otherwise Flash at low), instead of a fixed id.
|
|
435
|
+
|
|
436
|
+
- Seats and the chairman reply in the language of the decision; section headers stay English.
|
|
437
|
+
- Add **Choose…** beside both export fields: it opens the system's own folder dialog, so the
|
|
438
|
+
folder no longer has to be typed.
|
|
439
|
+
- Give a chairman whose first attempt held no recommendation the whole question again on its
|
|
440
|
+
retry. Before, a stateless retry carried only the format errors, so it could not know the
|
|
441
|
+
decision it was judging.
|
|
442
|
+
- Use the same external data folder for live diagnostic workspaces and headless calibration
|
|
443
|
+
reads as for saved reviews. Respect `ROUNDTABLE_DEBATES_DIR` in both commands.
|
|
444
|
+
- Reduce the demo quick start to clone, enter the folder and start the board.
|
|
445
|
+
|
|
446
|
+
- Mark session opening and completion with the chairman seat's pixel gavel and a quiet generated sound, with
|
|
447
|
+
separate endings for a verdict, no verdict and a failure. Add a sound toggle. Keep the gavel out
|
|
448
|
+
of saved-review replay and the JSON agent client, and keep the card still under reduced motion.
|
|
449
|
+
Events a board missed while its connection was down now arrive as new, so a review that ends
|
|
450
|
+
during the drop still shows its ending.
|
|
451
|
+
- Give the JSON agent client a `board` link in every result with a review id, so an agent can
|
|
452
|
+
hand a person the page to watch. Add a small-review recipe for lenses, moods, effort, model
|
|
453
|
+
and context fields to `agent --help` and the workflow guide.
|
|
454
|
+
- Redraw the grill, steelman, builder, contrarian and chairman icons, and the session gavel with them.
|
|
455
|
+
- Add per-seat token limits. Missing or partial usage blocks further calls for that seat,
|
|
456
|
+
including retries and resumed reviews; other seats can continue.
|
|
457
|
+
- Select Haiku 4.5 by its explicit model id instead of the `haiku` alias.
|
|
458
|
+
- Keep the folder picker available while its dialog is open, and distinguish cancellation from
|
|
459
|
+
a timeout or launch failure. Errors are visible beside the export field.
|
|
460
|
+
- Trim a reply with too many DISAGREE or NEW bullets to the limit instead of re-prompting the
|
|
461
|
+
seat; the extra call cost more than the lost bullet. Show agents `gate.reopenCalls` when the
|
|
462
|
+
seats already agree at round 0, so answering only reopens the table when it could change a
|
|
463
|
+
position.
|
|
464
|
+
- Put delayed hover explanations on text labels. Separate positions from arguments, emphasize
|
|
465
|
+
rejection words, and collapse usage into quota bars with expandable details.
|
|
466
|
+
- Collect questions and answers in one area, combine identical questions without a model call,
|
|
467
|
+
and wait for final-round answers before the verdict. Reject stale-round submissions.
|
|
468
|
+
- Close discussion controls when rounds end. Explain Stop, provider timeout and review expiry
|
|
469
|
+
separately, including expiry while waiting for input; retain those reasons on replay.
|
|
470
|
+
- Add JSON agent commands for setup checks, estimates, start, bounded waits, answers and recovery.
|
|
471
|
+
Keep launch tokens in memory and require explicit actions for calls. Shorten response targets.
|
|
472
|
+
- Give added seats distinct starter lenses and recover empty lenses in saved drafts. Highlight
|
|
473
|
+
and focus missing or duplicate lenses and empty custom moods before a review starts.
|
|
474
|
+
- Explain lenses, moods and round settings with delayed, keyboard-accessible hints. Add a
|
|
475
|
+
gentle reveal for hints and new replies, respect reduced motion, and keep replays still.
|
|
476
|
+
- Add local, rotating diagnostic logs and a **Save error log** download. Give failed actions
|
|
477
|
+
reference IDs and next steps; keep pending browser diagnostics through reloads. Exclude
|
|
478
|
+
review content, credentials, URLs and personal paths from the diagnostic data.
|
|
479
|
+
- Report failed quota saves and distinguish provider failures from malformed verdicts.
|
|
480
|
+
- Show Demo or Live mode, the active data folder, and backup guidance. Default to two seats
|
|
481
|
+
and one critique round; remember saved settings and prefer ready logins on first use.
|
|
482
|
+
- Retain drafts after failed requests, explain errors, and prevent duplicate pending actions.
|
|
483
|
+
Add setup/history retries and explicit status refresh; confirm pauses after acknowledgement.
|
|
484
|
+
- Improve keyboard focus, effort targets, narrow layouts and space for the action bar.
|
|
485
|
+
Keep saved dollar caps editable when no dollar estimate is available.
|
|
486
|
+
- Serve the guide and fonts locally. Clarify setup, billing, tool restrictions and provider
|
|
487
|
+
retention in the documentation and doctor output.
|
|
488
|
+
|
|
489
|
+
## 0.3.0
|
|
490
|
+
|
|
491
|
+
First public release.
|
|
492
|
+
|
|
493
|
+
- **Debates between the coding agents you already pay for.** Claude, Codex and Antigravity seats
|
|
494
|
+
on their own subscriptions, any number per vendor, each with its own lens, mood, model and
|
|
495
|
+
thinking level. A blind first round, critique rounds with a fixed reply format, stops for
|
|
496
|
+
consensus, no movement, round limit, wall clock, budget or you.
|
|
497
|
+
- **You take part.** The board waits after the blind round, stops for any question a seat asks
|
|
498
|
+
you, and carries your notes into every later round.
|
|
499
|
+
- **A sceptical chairman.** A fresh session writes the verdict: a recommendation, the dissent,
|
|
500
|
+
kill criteria and open questions. It recommends; you accept an option on the board.
|
|
501
|
+
- **Usage tracking.** Per account: remaining quota where the vendor reports it, the projected
|
|
502
|
+
draw per seat, and token or dollar caps checked against available usage estimates.
|
|
503
|
+
- **Failures you can read.** Each seat card has a lamp (ready, nearly used, out, not checked)
|
|
504
|
+
from a free pre-flight check. A used-up quota or a lost login benches that account for the
|
|
505
|
+
debate instead of failing every round.
|
|
506
|
+
- **API endpoint seats.** An OpenAI-compatible endpoint can take a seat: a local server (Ollama,
|
|
507
|
+
LM Studio, vLLM, llama.cpp) or a pay-per-token API (DeepSeek, Moonshot, OpenAI). Every card and
|
|
508
|
+
record says whether a seat is a CLI on a subscription or an API.
|
|
509
|
+
- **Decision records.** Export a debate as a markdown record and an index into any codebase, so
|
|
510
|
+
your coding agents can read what was decided.
|
|
511
|
+
- **The `roundtable` command** starts the board and opens it in your browser (as
|
|
512
|
+
`npx @prplkane/roundtable` once the package is published); `doctor` shows what your machine
|
|
513
|
+
can seat.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 prplkane
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|