toolroll 0.9.73 → 0.9.74
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 +32 -0
- package/THIRD_PARTY_NOTICES.md +40 -0
- package/dist/agent-turns.js +5 -0
- package/dist/agents-live.d.ts +31 -0
- package/dist/agents-live.js +43 -0
- package/dist/browser/THIRD_PARTY_NOTICES.txt +40 -0
- package/dist/browser/workspace.css +2 -2
- package/dist/browser/workspace.js +31 -30
- package/dist/browser-workspace.d.ts +6 -0
- package/dist/builder.js +1 -1
- package/dist/chat-continuity.js +10 -0
- package/dist/chat-quiet.js +3 -3
- package/dist/deploy-gate.js +5 -2
- package/dist/desktop-update.d.ts +1 -1
- package/dist/dispose.js +35 -2
- package/dist/exec.js +13 -16
- package/dist/first-run.d.ts +17 -1
- package/dist/first-run.js +38 -0
- package/dist/invoke.d.ts +13 -0
- package/dist/invoke.js +21 -12
- package/dist/knowledge-ui.d.ts +4 -1
- package/dist/knowledge-ui.js +10 -5
- package/dist/lead-progress.d.ts +4 -1
- package/dist/lead-progress.js +3 -1
- package/dist/lead.js +4 -0
- package/dist/live-bus.d.ts +2 -0
- package/dist/live-bus.js +1 -0
- package/dist/live-children-read.d.ts +52 -0
- package/dist/live-children-read.js +333 -0
- package/dist/live-children.d.ts +73 -0
- package/dist/live-children.js +318 -0
- package/dist/live-detail.d.ts +4 -3
- package/dist/live-detail.js +9 -5
- package/dist/live-input.js +7 -8
- package/dist/live-main-read.d.ts +19 -0
- package/dist/live-main-read.js +91 -0
- package/dist/live-open.d.ts +28 -0
- package/dist/live-open.js +125 -0
- package/dist/live-records.d.ts +10 -1
- package/dist/live-records.js +16 -5
- package/dist/live.d.ts +54 -22
- package/dist/live.js +218 -69
- package/dist/operate.js +3 -2
- package/dist/peek-cli.d.ts +10 -3
- package/dist/peek-cli.js +17 -8
- package/dist/planner.js +1 -1
- package/dist/provider-limits.d.ts +3 -1
- package/dist/provider-limits.js +5 -2
- package/dist/provider.js +6 -12
- package/dist/release-adapters.js +4 -0
- package/dist/release.d.ts +3 -0
- package/dist/release.js +3 -0
- package/dist/repository-context-ui.js +2 -1
- package/dist/run-efficiency.d.ts +3 -3
- package/dist/run-efficiency.js +20 -8
- package/dist/scout.d.ts +3 -0
- package/dist/scout.js +5 -3
- package/dist/serve.js +34 -23
- package/dist/server/agents-live-lead.d.ts +47 -0
- package/dist/server/agents-live-lead.js +116 -0
- package/dist/server/agents-live-room.d.ts +23 -0
- package/dist/server/agents-live-room.js +88 -0
- package/dist/server/chat.js +84 -30
- package/dist/server/chrome.js +2 -2
- package/dist/server/console.css +68 -40
- package/dist/server/live.d.ts +4 -0
- package/dist/server/live.js +42 -2
- package/dist/server/pages.js +81 -1
- package/dist/server/render-chat.d.ts +15 -1
- package/dist/server/render-chat.js +14 -7
- package/dist/server/render-pages.d.ts +8 -4
- package/dist/server/render-pages.js +55 -50
- package/dist/server/render-tasks.js +10 -3
- package/dist/server/route-table.js +5 -1
- package/dist/server/runtime.d.ts +1 -1
- package/dist/server/settings.js +3 -3
- package/dist/server/task-views.js +1 -1
- package/dist/server/tasks.js +59 -41
- package/dist/store.d.ts +31 -1
- package/dist/store.js +75 -2
- package/dist/stream-scope.d.ts +18 -0
- package/dist/stream-scope.js +28 -0
- package/dist/subscription-chat.js +5 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.74 — 2026-10-27
|
|
4
|
+
|
|
5
|
+
- **Agents → Live: every agent and subagent at a glance.** A read-only grid
|
|
6
|
+
of everything running, on desktop and phone: what each agent is doing
|
|
7
|
+
right now, how long it has run and its latest lines. Subagents get their
|
|
8
|
+
own tiles nested under their parent; they appear when they start and show
|
|
9
|
+
Done for 30 seconds before leaving. A quiet agent reads **Needs you** with
|
|
10
|
+
a thin amber outline. Click a tile's title to open it full screen (Escape
|
|
11
|
+
brings you back). Your own lead chats show as lead tiles. Nothing on the
|
|
12
|
+
page acts, and the grid holds still while you look at it. Terminals you
|
|
13
|
+
drive yourself stay off the grid; one line links to Live terminals. Only a
|
|
14
|
+
signed-in browser can read it: tokens are refused.
|
|
15
|
+
- **Visiting a page starts nothing.** Opening Chat, a task, a result or a
|
|
16
|
+
project shows the page with a ready composer; your first message starts
|
|
17
|
+
the conversation. A retry or double submit lands in the conversation it
|
|
18
|
+
started. Link previews and prefetches can't start one.
|
|
19
|
+
- **A cleaner console.** One status chip everywhere, framed panels on the
|
|
20
|
+
Board, Settings, Knowledge and Projects, and a road on every task (Plan →
|
|
21
|
+
You approve → Build → Checks → Ready) built only from what happened.
|
|
22
|
+
Attempts show as a timeline and warnings as plain notices. Amber now means
|
|
23
|
+
only "waits on you". Built from ReUI's free, MIT-licensed components
|
|
24
|
+
(credited in THIRD_PARTY_NOTICES.md).
|
|
25
|
+
- **The old task list is retired.** `/tasks` now opens Work, which gained a
|
|
26
|
+
state filter (`/work?state=`), templates (`/tasks/new?template=`) and keeps
|
|
27
|
+
your draft when a filing is refused.
|
|
28
|
+
- **Rerunning a failed release check keeps your approval.**
|
|
29
|
+
`toolroll task regate` queues the same approved commit again instead of
|
|
30
|
+
re-filing it, and `toolroll release` waits for the rerun and uses it. A
|
|
31
|
+
changed commit, scope or approval still refuses.
|
|
32
|
+
- Database: schema v136 (each run's "Show commands" answer is kept for the
|
|
33
|
+
live view).
|
|
34
|
+
|
|
3
35
|
## 0.9.73 — 2026-10-25
|
|
4
36
|
|
|
5
37
|
- **Carry release approvals when checks aren't sandboxed.** A project whose
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -321,6 +321,46 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
321
321
|
SOFTWARE.
|
|
322
322
|
|
|
323
323
|
|
|
324
|
+
## ReUI — MIT
|
|
325
|
+
|
|
326
|
+
Components in `src/browser/components/ui/` adapt free, MIT-licensed ReUI
|
|
327
|
+
primitives and examples (the Radix base) from:
|
|
328
|
+
https://github.com/keenthemes/reui/tree/067aa0d/registry-reui/bases/radix/reui
|
|
329
|
+
|
|
330
|
+
Source inspected 27 October 2026, revision `067aa0d`. Files copied by hand (the
|
|
331
|
+
shadcn CLI and ReUI's registry CSS variables are not used) and cut to Toolroll's
|
|
332
|
+
tokens:
|
|
333
|
+
|
|
334
|
+
- `badge.tsx` — the light badge and its status-dot example (`c-badge-22`): one
|
|
335
|
+
20px chip size and a decorative dot on the existing tones, plus a "Needs you"
|
|
336
|
+
tone. The style variants, solid fills and focus/invert tones are omitted.
|
|
337
|
+
- `frame.tsx` — the well of panels: one geometry (a raised well, hairline,
|
|
338
|
+
concentric panel corners) with the style variants, spacing scale, stacking
|
|
339
|
+
modes and panel shadows omitted; `FramePanel` can render as its child.
|
|
340
|
+
- `alert.tsx` — cut to a neutral and a destructive tone with an icon column;
|
|
341
|
+
the info, warning, success and invert tones, the title/action slots and the
|
|
342
|
+
style variants are omitted.
|
|
343
|
+
- `timeline.tsx` — cut to a read-only vertical list (item, indicator on a
|
|
344
|
+
hairline rail, content, date); the active-step context, horizontal mode and
|
|
345
|
+
styled indicators are omitted.
|
|
346
|
+
- `stepper.tsx` — its read-only horizontal layout (indicator, separator,
|
|
347
|
+
title, `aria-current="step"`) is followed by the task page's road
|
|
348
|
+
(`src/browser/first-run.tsx` `Journey`); no stepper source is copied, and
|
|
349
|
+
the controlled state, keyboard navigation and triggers are omitted.
|
|
350
|
+
|
|
351
|
+
No ReUI Pro blocks, icons or templates are included.
|
|
352
|
+
|
|
353
|
+
MIT License
|
|
354
|
+
|
|
355
|
+
Copyright (c) 2025 Keenthemes Inc
|
|
356
|
+
|
|
357
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
358
|
+
|
|
359
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
360
|
+
|
|
361
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
362
|
+
|
|
363
|
+
|
|
324
364
|
## Integration logos: Simple Icons (CC0 1.0) and svgl (MIT)
|
|
325
365
|
|
|
326
366
|
The integration logos in `src/brand-icons.ts` are generated by
|
package/dist/agent-turns.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
import { topLevelEvent } from "./stream-scope.js";
|
|
1
2
|
/** What one stream event says about the turn; null when it says nothing. */
|
|
2
3
|
export function turnSignalOf(event) {
|
|
3
4
|
const type = typeof event["type"] === "string" ? event["type"] : "";
|
|
5
|
+
// A subagent's events are not the parent's turn: its result never marks the parent idle or clears its open tools,
|
|
6
|
+
// and its init or words never mark it busy (stream-scope.ts).
|
|
7
|
+
if (!topLevelEvent(event))
|
|
8
|
+
return null;
|
|
4
9
|
switch (type) {
|
|
5
10
|
// Claude stream-json: the session starts, the assistant speaks or calls a tool, a tool answers; then one result.
|
|
6
11
|
case "system": return event["subtype"] === "init" ? "busy" : null;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type AgentsLiveRun, type Store } from "./store.js";
|
|
2
|
+
/** An ended agent stays on the grid this long, then leaves (it remains on the List). */
|
|
3
|
+
export declare const LIVE_ENDED_KEEP_MS: number;
|
|
4
|
+
export type AgentLiveState = "working" | "needs-you" | "done" | "failed" | "stopped" | "parked";
|
|
5
|
+
export type AgentLiveTile = {
|
|
6
|
+
runId: number;
|
|
7
|
+
role: AgentsLiveRun["role"];
|
|
8
|
+
taskId: string;
|
|
9
|
+
title: string;
|
|
10
|
+
project: string | null;
|
|
11
|
+
agent: string;
|
|
12
|
+
model: string | null;
|
|
13
|
+
startedAt: string;
|
|
14
|
+
endedAt: string | null;
|
|
15
|
+
state: AgentLiveState;
|
|
16
|
+
/** Why it needs you: it has been quiet (the board's Stuck rule) or it asked a question. */
|
|
17
|
+
why: "quiet" | "question" | null;
|
|
18
|
+
/** Since when it has been quiet, when that is why. */
|
|
19
|
+
quietSince: string | null;
|
|
20
|
+
/** Its output is on this computer (another runner's can't be read here). */
|
|
21
|
+
local: boolean;
|
|
22
|
+
/** A repair's build: the tile it nests under. */
|
|
23
|
+
parentRun: number | null;
|
|
24
|
+
/** The task's own page, for a task this console keeps (an outside tracker's task has none here). */
|
|
25
|
+
taskHref: string | null;
|
|
26
|
+
};
|
|
27
|
+
/** The grid's tiles for one viewer: `canSee` is the caller's proof (ceiling and account access) for each run. */
|
|
28
|
+
export declare function agentsLiveOf(store: Store, now: Date, viewer: {
|
|
29
|
+
canSee: (run: AgentsLiveRun) => boolean;
|
|
30
|
+
localRunner: string | undefined;
|
|
31
|
+
}): AgentLiveTile[];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Agents view's Live grid (docs/plans/agents-view.md §1, §2.5): which agents are running now (every role) and
|
|
3
|
+
* which ended in the last ten minutes, with the facts a tile shows. Store facts only — it verifies nothing, grants
|
|
4
|
+
* nothing, and reads no live file; visibility is proved by the caller's `canSee` for each run.
|
|
5
|
+
*/
|
|
6
|
+
import { attemptKeyOf, agentNowForRun, openAgentQuestions } from "./agent-board.js";
|
|
7
|
+
import { agentsLiveRuns } from "./store.js";
|
|
8
|
+
/** An ended agent stays on the grid this long, then leaves (it remains on the List). */
|
|
9
|
+
export const LIVE_ENDED_KEEP_MS = 10 * 60_000;
|
|
10
|
+
const stateOf = (outcome) => outcome === null ? "working" : outcome === "built" || outcome === "no-change" ? "done" : outcome === "parked" ? "parked" : outcome === "interrupted" ? "stopped" : "failed";
|
|
11
|
+
/** The grid's tiles for one viewer: `canSee` is the caller's proof (ceiling and account access) for each run. */
|
|
12
|
+
export function agentsLiveOf(store, now, viewer) {
|
|
13
|
+
const tiles = [];
|
|
14
|
+
for (const run of agentsLiveRuns(store, new Date(now.getTime() - LIVE_ENDED_KEEP_MS))) {
|
|
15
|
+
if (!viewer.canSee(run))
|
|
16
|
+
continue;
|
|
17
|
+
let state = stateOf(run.outcome);
|
|
18
|
+
let why = null, quietSince = null;
|
|
19
|
+
if (state === "working") {
|
|
20
|
+
try {
|
|
21
|
+
const key = attemptKeyOf(store, run.id);
|
|
22
|
+
const facts = key === null ? null : agentNowForRun(store, run.id, key);
|
|
23
|
+
if (run.role === "builder" && openAgentQuestions(store, run.taskRef).length > 0)
|
|
24
|
+
why = "question";
|
|
25
|
+
else if (facts !== null && facts.stuckAt !== null) {
|
|
26
|
+
why = "quiet";
|
|
27
|
+
quietSince = facts.stuckAt;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch { /* display state: no word yet */ }
|
|
31
|
+
if (why !== null)
|
|
32
|
+
state = "needs-you";
|
|
33
|
+
}
|
|
34
|
+
tiles.push({
|
|
35
|
+
runId: run.id, role: run.role, taskId: run.taskId, title: run.title, project: run.repo, agent: run.provider, model: run.model,
|
|
36
|
+
startedAt: run.startedAt, endedAt: run.finishedAt, state, why, quietSince,
|
|
37
|
+
local: viewer.localRunner !== undefined && run.runner === viewer.localRunner,
|
|
38
|
+
parentRun: run.role === "repair" ? run.parentRun : null,
|
|
39
|
+
taskHref: run.builtIn ? `/t/${encodeURIComponent(run.taskId)}` : null,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return tiles;
|
|
43
|
+
}
|
|
@@ -321,6 +321,46 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
321
321
|
SOFTWARE.
|
|
322
322
|
|
|
323
323
|
|
|
324
|
+
## ReUI — MIT
|
|
325
|
+
|
|
326
|
+
Components in `src/browser/components/ui/` adapt free, MIT-licensed ReUI
|
|
327
|
+
primitives and examples (the Radix base) from:
|
|
328
|
+
https://github.com/keenthemes/reui/tree/067aa0d/registry-reui/bases/radix/reui
|
|
329
|
+
|
|
330
|
+
Source inspected 27 October 2026, revision `067aa0d`. Files copied by hand (the
|
|
331
|
+
shadcn CLI and ReUI's registry CSS variables are not used) and cut to Toolroll's
|
|
332
|
+
tokens:
|
|
333
|
+
|
|
334
|
+
- `badge.tsx` — the light badge and its status-dot example (`c-badge-22`): one
|
|
335
|
+
20px chip size and a decorative dot on the existing tones, plus a "Needs you"
|
|
336
|
+
tone. The style variants, solid fills and focus/invert tones are omitted.
|
|
337
|
+
- `frame.tsx` — the well of panels: one geometry (a raised well, hairline,
|
|
338
|
+
concentric panel corners) with the style variants, spacing scale, stacking
|
|
339
|
+
modes and panel shadows omitted; `FramePanel` can render as its child.
|
|
340
|
+
- `alert.tsx` — cut to a neutral and a destructive tone with an icon column;
|
|
341
|
+
the info, warning, success and invert tones, the title/action slots and the
|
|
342
|
+
style variants are omitted.
|
|
343
|
+
- `timeline.tsx` — cut to a read-only vertical list (item, indicator on a
|
|
344
|
+
hairline rail, content, date); the active-step context, horizontal mode and
|
|
345
|
+
styled indicators are omitted.
|
|
346
|
+
- `stepper.tsx` — its read-only horizontal layout (indicator, separator,
|
|
347
|
+
title, `aria-current="step"`) is followed by the task page's road
|
|
348
|
+
(`src/browser/first-run.tsx` `Journey`); no stepper source is copied, and
|
|
349
|
+
the controlled state, keyboard navigation and triggers are omitted.
|
|
350
|
+
|
|
351
|
+
No ReUI Pro blocks, icons or templates are included.
|
|
352
|
+
|
|
353
|
+
MIT License
|
|
354
|
+
|
|
355
|
+
Copyright (c) 2025 Keenthemes Inc
|
|
356
|
+
|
|
357
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
358
|
+
|
|
359
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
360
|
+
|
|
361
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
362
|
+
|
|
363
|
+
|
|
324
364
|
## Integration logos: Simple Icons (CC0 1.0) and svgl (MIT)
|
|
325
365
|
|
|
326
366
|
The integration logos in `src/brand-icons.ts` are generated by
|