toolroll 0.9.85 → 0.9.87
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 +83 -0
- package/dist/agent-fence.d.ts +6 -2
- package/dist/agent-fence.js +3 -2
- package/dist/agents-board.d.ts +12 -0
- package/dist/agents-board.js +26 -0
- package/dist/approval-rules-ui.d.ts +4 -1
- package/dist/approval-rules-ui.js +31 -15
- package/dist/assignment-ui.js +1 -1
- package/dist/assignment.js +4 -3
- package/dist/backup-ui.d.ts +5 -4
- package/dist/backup-ui.js +65 -32
- package/dist/browser/terminal.css +1 -1
- package/dist/browser/terminal.js +57 -54
- package/dist/browser/workspace.css +2 -2
- package/dist/browser/workspace.js +35 -68
- package/dist/browser-crew.js +1 -1
- package/dist/browser-workspace.d.ts +363 -177
- package/dist/browser-workspace.js +10 -9
- package/dist/chat-actions.d.ts +11 -1
- package/dist/chat-actions.js +53 -1
- package/dist/chat-channel.js +1 -0
- package/dist/chat-controls.d.ts +1 -1
- package/dist/chat-controls.js +1 -1
- package/dist/chat-quiet.js +3 -2
- package/dist/chat-settings-page.d.ts +29 -9
- package/dist/chat-settings-page.js +59 -28
- package/dist/check-levels-ui.d.ts +2 -1
- package/dist/check-levels-ui.js +67 -58
- package/dist/claim.d.ts +3 -0
- package/dist/claim.js +4 -1
- package/dist/contracts/chat-actions.d.ts +9 -0
- package/dist/contracts/chat-actions.js +3 -0
- package/dist/contracts/cli.d.ts +43 -0
- package/dist/contracts/cli.js +4 -0
- package/dist/contracts/console-api.d.ts +4 -1
- package/dist/contracts/console-api.js +4 -1
- package/dist/contracts/flow-propose.d.ts +4 -1
- package/dist/contracts/flow-propose.js +1 -1
- package/dist/contracts/flow.d.ts +41 -0
- package/dist/contracts/flow.js +4 -2
- package/dist/contracts/lead-tools.d.ts +21 -0
- package/dist/contracts/lead-tools.js +2 -0
- package/dist/contracts/store-json.d.ts +2 -0
- package/dist/contracts/trigger-payloads.d.ts +20 -0
- package/dist/contracts/trigger-payloads.js +4 -0
- package/dist/coordinator.js +1 -0
- package/dist/credentials-ui.d.ts +5 -3
- package/dist/credentials-ui.js +58 -31
- package/dist/deploy-gate.js +4 -0
- package/dist/design/kit.css +685 -0
- package/dist/design/kit.d.ts +208 -0
- package/dist/design/kit.js +177 -0
- package/dist/design/tokens.css +19 -1
- package/dist/discord-settings.js +8 -4
- package/dist/dispatch.d.ts +3 -0
- package/dist/dispatch.js +4 -1
- package/dist/export-ui.d.ts +6 -4
- package/dist/export-ui.js +18 -8
- package/dist/flow-browser.d.ts +103 -0
- package/dist/flow-browser.js +204 -0
- package/dist/flow-changed.d.ts +14 -0
- package/dist/flow-changed.js +53 -0
- package/dist/flow-code.d.ts +5 -1
- package/dist/flow-code.js +4 -1
- package/dist/flow-engine.js +16 -0
- package/dist/flow-gallery-ui.d.ts +41 -4
- package/dist/flow-gallery-ui.js +95 -63
- package/dist/flow-live.js +9 -1
- package/dist/flow-pull-request.js +15 -7
- package/dist/flow-share.js +3 -1
- package/dist/flow-starters-ui.d.ts +3 -9
- package/dist/flow-starters-ui.js +12 -23
- package/dist/flow-steps.d.ts +9 -1
- package/dist/flow-steps.js +55 -5
- package/dist/flow-triggers.js +55 -0
- package/dist/flow-unattended-words.d.ts +20 -0
- package/dist/flow-unattended-words.js +24 -0
- package/dist/flow-unattended.d.ts +9 -5
- package/dist/flow-unattended.js +45 -23
- package/dist/flows-cli.d.ts +19 -0
- package/dist/flows-cli.js +54 -5
- package/dist/flows-ui.d.ts +12 -6
- package/dist/flows-ui.js +152 -32
- package/dist/flows.js +5 -2
- package/dist/integrations-ui.d.ts +6 -4
- package/dist/integrations-ui.js +34 -40
- package/dist/integrations.d.ts +2 -2
- package/dist/integrations.js +4 -4
- package/dist/kits-ui.d.ts +8 -10
- package/dist/kits-ui.js +29 -33
- package/dist/kits.js +1 -1
- package/dist/knowledge-ui.js +76 -19
- package/dist/lead-tools.js +35 -6
- package/dist/lead-voice.js +16 -5
- package/dist/ledger-view.d.ts +2 -0
- package/dist/ledger-view.js +41 -38
- package/dist/models-ui.d.ts +8 -3
- package/dist/models-ui.js +82 -59
- package/dist/monitoring-ui.d.ts +4 -2
- package/dist/monitoring-ui.js +44 -13
- package/dist/needs-you.d.ts +1 -1
- package/dist/needs-you.js +8 -0
- package/dist/operate-remote-arguments.js +1 -0
- package/dist/operate-remote.js +1 -1
- package/dist/operate.d.ts +1 -1
- package/dist/operate.js +249 -6
- package/dist/passwordless.d.ts +1 -1
- package/dist/passwordless.js +1 -1
- package/dist/people-audit-ui.d.ts +2 -1
- package/dist/people-audit-ui.js +25 -23
- package/dist/policy-ui.d.ts +3 -2
- package/dist/policy-ui.js +27 -21
- package/dist/policy.d.ts +3 -0
- package/dist/policy.js +14 -1
- package/dist/project-delete-ui.d.ts +4 -2
- package/dist/project-delete-ui.js +135 -126
- package/dist/project-delete.js +7 -3
- package/dist/project-knowledge.d.ts +10 -10
- package/dist/publish.d.ts +11 -0
- package/dist/publish.js +16 -3
- package/dist/pull-request-flow.js +35 -4
- package/dist/pull-request-ui.d.ts +2 -1
- package/dist/pull-request-ui.js +39 -28
- package/dist/recipe-ui.d.ts +4 -2
- package/dist/recipe-ui.js +14 -4
- package/dist/release-adapters.d.ts +3 -0
- package/dist/release-adapters.js +22 -2
- package/dist/release-cli.js +81 -9
- package/dist/release.d.ts +21 -0
- package/dist/release.js +40 -4
- package/dist/releases.js +1 -1
- package/dist/request-budget-ui.d.ts +4 -2
- package/dist/request-budget-ui.js +30 -19
- package/dist/result-follow-ups.js +4 -0
- package/dist/retention-ui.d.ts +4 -3
- package/dist/retention-ui.js +15 -12
- package/dist/scope.d.ts +8 -0
- package/dist/scope.js +13 -0
- package/dist/serve.d.ts +0 -1
- package/dist/serve.js +51 -7
- package/dist/server/agents-computers.d.ts +9 -0
- package/dist/server/agents-computers.js +67 -0
- package/dist/server/chat.js +20 -18
- package/dist/server/chrome.d.ts +1 -1
- package/dist/server/chrome.js +19 -9
- package/dist/server/console.css +31 -2
- package/dist/server/flows.js +79 -36
- package/dist/server/home.d.ts +35 -0
- package/dist/server/home.js +104 -0
- package/dist/server/http.d.ts +3 -0
- package/dist/server/http.js +5 -0
- package/dist/server/kit-standalone.d.ts +22 -0
- package/dist/server/kit-standalone.js +69 -0
- package/dist/server/kit.d.ts +405 -0
- package/dist/server/kit.js +361 -0
- package/dist/server/pages.d.ts +2 -1
- package/dist/server/pages.js +213 -174
- package/dist/server/people-tokens.js +26 -85
- package/dist/server/render-history.d.ts +51 -0
- package/dist/server/render-history.js +228 -0
- package/dist/server/render-new-task.d.ts +29 -0
- package/dist/server/render-new-task.js +96 -0
- package/dist/server/render-next.d.ts +63 -0
- package/dist/server/render-next.js +109 -0
- package/dist/server/render-pages.d.ts +35 -190
- package/dist/server/render-pages.js +154 -563
- package/dist/server/render-people.d.ts +24 -3
- package/dist/server/render-people.js +93 -72
- package/dist/server/render-projects.d.ts +103 -0
- package/dist/server/render-projects.js +247 -0
- package/dist/server/render-results.d.ts +5 -24
- package/dist/server/render-results.js +48 -185
- package/dist/server/render-settings.d.ts +5 -74
- package/dist/server/render-settings.js +102 -493
- package/dist/server/render-tasks.d.ts +43 -5
- package/dist/server/render-tasks.js +131 -91
- package/dist/server/route-table.js +31 -5
- package/dist/server/settings.js +276 -255
- package/dist/server/task-views.d.ts +8 -0
- package/dist/server/task-views.js +90 -2
- package/dist/server/tasks.d.ts +18 -0
- package/dist/server/tasks.js +148 -41
- package/dist/server/terminals.js +1 -1
- package/dist/server/welcome.d.ts +22 -0
- package/dist/server/welcome.js +69 -0
- package/dist/settings-groups-ui.d.ts +279 -0
- package/dist/settings-groups-ui.js +615 -0
- package/dist/settings-kit.d.ts +42 -6
- package/dist/settings-kit.js +69 -7
- package/dist/settings-proofs.js +1 -0
- package/dist/setup-guide.d.ts +2 -2
- package/dist/skills-ui.js +59 -7
- package/dist/slack-settings.js +12 -5
- package/dist/spend-ui.d.ts +45 -26
- package/dist/spend-ui.js +124 -56
- package/dist/sso-ui.d.ts +5 -2
- package/dist/sso-ui.js +63 -31
- package/dist/storage-ui.d.ts +3 -2
- package/dist/storage-ui.js +56 -50
- package/dist/store.d.ts +182 -5
- package/dist/store.js +512 -38
- package/dist/surface.js +23 -3
- package/dist/task-archive.d.ts +10 -0
- package/dist/task-archive.js +16 -0
- package/dist/task-control.d.ts +1 -1
- package/dist/teams-settings.d.ts +2 -1
- package/dist/teams-settings.js +24 -41
- package/dist/telegram-settings.d.ts +0 -4
- package/dist/telegram-settings.js +52 -25
- package/dist/tidy.d.ts +130 -0
- package/dist/tidy.js +503 -0
- package/dist/toolroll-update-ui.d.ts +8 -4
- package/dist/toolroll-update-ui.js +55 -45
- package/dist/tools-ui.d.ts +5 -3
- package/dist/tools-ui.js +107 -42
- package/dist/work-index.d.ts +24 -0
- package/dist/work-index.js +56 -30
- package/dist/workspace-ui.d.ts +1 -1
- package/dist/workspace-ui.js +8 -4
- package/package.json +1 -1
package/dist/browser-crew.js
CHANGED
|
@@ -12,7 +12,7 @@ export function browserWorkActionHref(item) {
|
|
|
12
12
|
if (action.code === 'inspect-decisions')
|
|
13
13
|
return '/';
|
|
14
14
|
if (action.code === 'sign-in')
|
|
15
|
-
return '/settings#providers';
|
|
15
|
+
return '/settings/agents#providers';
|
|
16
16
|
if (action.code === 'answer-agent' && runId !== null)
|
|
17
17
|
return `/agents?run=${runId}`;
|
|
18
18
|
if (action.code === 'confirm-stopped')
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
import { type DisplayState, type StateCounts } from './agent-state-words.js';
|
|
5
5
|
import type { TeamSnapshot } from './team-contract.js';
|
|
6
6
|
import type { RunActivity } from './activity-line.js';
|
|
7
|
-
import type { BrandIconId } from './brand-icons.js';
|
|
8
7
|
import type { AssignmentSnapshot } from './assignment.js';
|
|
9
8
|
export { browserCrewFromIndex, browserWorkActionHref } from './browser-crew.js';
|
|
10
9
|
import type { Store } from './store.js';
|
|
@@ -166,11 +165,29 @@ export type BrowserLink = {
|
|
|
166
165
|
};
|
|
167
166
|
export type BrowserTasksView = {
|
|
168
167
|
kind: 'tasks';
|
|
168
|
+
/** List (rows under group headings) or Board (the same index as columns). */
|
|
169
|
+
layout: 'list' | 'board';
|
|
170
|
+
/** The status filters (All, Needs you, Running, Queued, Finished), as addresses with their counts. */
|
|
169
171
|
tabs: (BrowserLink & {
|
|
172
|
+
key?: string;
|
|
170
173
|
count: number;
|
|
171
174
|
active: boolean;
|
|
172
175
|
})[];
|
|
173
|
-
/**
|
|
176
|
+
/** The project filter: All and each project in view (null with one project). */
|
|
177
|
+
projects?: {
|
|
178
|
+
key: string;
|
|
179
|
+
label: string;
|
|
180
|
+
href: string;
|
|
181
|
+
active: boolean;
|
|
182
|
+
}[] | null;
|
|
183
|
+
/** The List and Board addresses for this same filter. */
|
|
184
|
+
layouts: {
|
|
185
|
+
list: string;
|
|
186
|
+
board: string;
|
|
187
|
+
};
|
|
188
|
+
/** The scope the counts cover, in words ("in payments-api", "across all your projects"). */
|
|
189
|
+
scope?: string;
|
|
190
|
+
/** Tasks waiting on a person in this view's scope. */
|
|
174
191
|
needsYou: number;
|
|
175
192
|
/** All and Needs you list their rows in these groups, in this order (empty ones left out); null: one plain list. */
|
|
176
193
|
groups: {
|
|
@@ -178,27 +195,21 @@ export type BrowserTasksView = {
|
|
|
178
195
|
label: string;
|
|
179
196
|
count: number;
|
|
180
197
|
}[] | null;
|
|
181
|
-
rows:
|
|
182
|
-
|
|
183
|
-
|
|
198
|
+
rows: BrowserTaskRow[];
|
|
199
|
+
/** The Board view's columns (Needs you, Queued, Running, Finished); null in the List view. */
|
|
200
|
+
board?: {
|
|
201
|
+
key: 'needs' | 'queued' | 'running' | 'finished';
|
|
202
|
+
label: string;
|
|
203
|
+
count: number;
|
|
184
204
|
href: string;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
ask: Ask | null;
|
|
194
|
-
/** The row's chip under its group: the specific ask (Plan, Result, Mismatch, Plan changed, Failed, Builder offline), or none. */
|
|
195
|
-
chip: AskChip | null;
|
|
196
|
-
group: BrowserTaskGroup;
|
|
197
|
-
action: BrowserLink | null;
|
|
198
|
-
detail: string | null;
|
|
199
|
-
problem: string | null;
|
|
200
|
-
notes: string[];
|
|
201
|
-
}[];
|
|
205
|
+
empty: string;
|
|
206
|
+
rows: BrowserTaskRow[];
|
|
207
|
+
}[] | null;
|
|
208
|
+
/** Archived tasks, offered at the foot of Finished (and current in Archived). */
|
|
209
|
+
archived?: (BrowserLink & {
|
|
210
|
+
count: number;
|
|
211
|
+
active: boolean;
|
|
212
|
+
}) | null;
|
|
202
213
|
empty: {
|
|
203
214
|
text: string;
|
|
204
215
|
action: BrowserLink | null;
|
|
@@ -209,6 +220,8 @@ export type BrowserTasksView = {
|
|
|
209
220
|
};
|
|
210
221
|
tools: BrowserLink[];
|
|
211
222
|
newTask: BrowserLink;
|
|
223
|
+
/** Put away old tasks (an approver's): the preview page. */
|
|
224
|
+
putAway?: BrowserLink | null;
|
|
212
225
|
/** v105: subscription windows and monthly budgets, one tile each (an instance operator's; null when there are none). */
|
|
213
226
|
limits: BrowserLimits | null;
|
|
214
227
|
/** The stored-state filter (Any state, Queued, Running, Done, Failed, Cancelled), each a real link starting on page one. */
|
|
@@ -216,6 +229,40 @@ export type BrowserTasksView = {
|
|
|
216
229
|
active: boolean;
|
|
217
230
|
})[];
|
|
218
231
|
};
|
|
232
|
+
export type BrowserTaskRow = {
|
|
233
|
+
id: string;
|
|
234
|
+
title: string;
|
|
235
|
+
href: string;
|
|
236
|
+
project: string | null;
|
|
237
|
+
age: string;
|
|
238
|
+
status: {
|
|
239
|
+
label: string;
|
|
240
|
+
tone: StatusTone;
|
|
241
|
+
token: string;
|
|
242
|
+
};
|
|
243
|
+
/** The row's chip word and tone (src/design/KIT.md): the ask under Needs you, else the headline. */
|
|
244
|
+
word: {
|
|
245
|
+
word: string;
|
|
246
|
+
tone: '' | 'needs' | 'ask' | 'live' | 'done' | 'failed';
|
|
247
|
+
};
|
|
248
|
+
/** What a Needs you row asks: its group. */
|
|
249
|
+
ask: Ask | null;
|
|
250
|
+
/** The row's chip under its group: the specific ask (Plan, Result, Mismatch, Plan changed, Failed, Builder offline), or none. */
|
|
251
|
+
chip: AskChip | null;
|
|
252
|
+
group: BrowserTaskGroup;
|
|
253
|
+
/** The status rank: 0 waits on a person, 1 runs, 2 queued or waiting, 3 finished, 4 stopped or put away. */
|
|
254
|
+
rank: number;
|
|
255
|
+
action: BrowserLink | null;
|
|
256
|
+
detail: string | null;
|
|
257
|
+
problem: string | null;
|
|
258
|
+
notes: string[];
|
|
259
|
+
/** Put away, or Restore in Archived (task-tidy.md): a POST to the task's own route; null for a viewer or live work. */
|
|
260
|
+
tidy?: {
|
|
261
|
+
action: string;
|
|
262
|
+
label: 'Put away' | 'Restore';
|
|
263
|
+
returnTo: string;
|
|
264
|
+
} | null;
|
|
265
|
+
};
|
|
219
266
|
/** One limit: a plan's usage window ("Claude · 5-hour, 48%") or a monthly budget ("shop · Budget, $4.20 of $10"). */
|
|
220
267
|
export type BrowserTaskGroup = WorkIndexGroup;
|
|
221
268
|
export type BrowserLimitTile = {
|
|
@@ -242,135 +289,6 @@ export type BrowserUsageChip = {
|
|
|
242
289
|
href: string;
|
|
243
290
|
title: string;
|
|
244
291
|
};
|
|
245
|
-
export type BrowserSettingsView = {
|
|
246
|
-
kind: 'settings';
|
|
247
|
-
said: string | null;
|
|
248
|
-
/** Using it from a phone, under Chat apps (approvers only). */
|
|
249
|
-
phone?: BrowserPhoneCard;
|
|
250
|
-
/** The settings destinations under short headings; a chat app's tile says whether it is connected and gets alerts. */
|
|
251
|
-
groups: BrowserSettingsGroup[];
|
|
252
|
-
theme: 'system' | 'light' | 'dark';
|
|
253
|
-
/** The signal colour chosen for this browser (Settings → Appearance), "#rrggbb"; chart magenta by default. */
|
|
254
|
-
accent: string;
|
|
255
|
-
accentPresets: {
|
|
256
|
-
id: string;
|
|
257
|
-
name: string;
|
|
258
|
-
year: number | null;
|
|
259
|
-
hex: string;
|
|
260
|
-
}[];
|
|
261
|
-
permission: {
|
|
262
|
-
mode: string;
|
|
263
|
-
canManage: boolean;
|
|
264
|
-
changed: string | null;
|
|
265
|
-
} | null;
|
|
266
|
-
quality: {
|
|
267
|
-
mode: string;
|
|
268
|
-
canManage: boolean;
|
|
269
|
-
changed: string | null;
|
|
270
|
-
} | null;
|
|
271
|
-
providers: {
|
|
272
|
-
provider: string;
|
|
273
|
-
name: string;
|
|
274
|
-
tone: 'ok' | 'warn' | 'off' | 'neutral';
|
|
275
|
-
words: string;
|
|
276
|
-
connection: {
|
|
277
|
-
words: string;
|
|
278
|
-
facts: string;
|
|
279
|
-
checkAction: string;
|
|
280
|
-
} | null;
|
|
281
|
-
usage: string;
|
|
282
|
-
envName: string;
|
|
283
|
-
subscriptionCapable: boolean;
|
|
284
|
-
mode: 'subscription' | 'api-key';
|
|
285
|
-
set: boolean;
|
|
286
|
-
}[] | null;
|
|
287
|
-
legacyWebhookWarning?: string;
|
|
288
|
-
services: {
|
|
289
|
-
configured: string[];
|
|
290
|
-
channel: string | null;
|
|
291
|
-
implicit: boolean;
|
|
292
|
-
} | null;
|
|
293
|
-
push: {
|
|
294
|
-
available: boolean;
|
|
295
|
-
devices: {
|
|
296
|
-
id: number;
|
|
297
|
-
words: string;
|
|
298
|
-
state: string;
|
|
299
|
-
removable: boolean;
|
|
300
|
-
}[];
|
|
301
|
-
} | null;
|
|
302
|
-
/** Quiet chat: how chats reach this person, and their evening digest time (null: off). */
|
|
303
|
-
chat?: {
|
|
304
|
-
mode: 'quiet' | 'all';
|
|
305
|
-
digestAt: string | null;
|
|
306
|
-
/** Whether a result's saved screenshots follow its chat message: off, the first one, or up to 4. */
|
|
307
|
-
screenshots?: 'off' | 'first' | 'all';
|
|
308
|
-
/** Each project this person can see; a muted one sends no pings but stays in Tasks and the digest. */
|
|
309
|
-
projects?: {
|
|
310
|
-
repo: string;
|
|
311
|
-
name: string;
|
|
312
|
-
muted: boolean;
|
|
313
|
-
}[];
|
|
314
|
-
} | null;
|
|
315
|
-
digest: {
|
|
316
|
-
every: string;
|
|
317
|
-
held: string | null;
|
|
318
|
-
} | null;
|
|
319
|
-
telegram: {
|
|
320
|
-
state: string;
|
|
321
|
-
current: string;
|
|
322
|
-
/** v98: how the bot's messages reach Toolroll (pushed, or asked for), in words. */
|
|
323
|
-
delivery?: string | null;
|
|
324
|
-
};
|
|
325
|
-
/** Each worker: how many tasks it runs at once, and what it is running now. */
|
|
326
|
-
workers?: {
|
|
327
|
-
name: string;
|
|
328
|
-
tone: 'ok' | 'warn' | 'off';
|
|
329
|
-
state: string;
|
|
330
|
-
capacity: number;
|
|
331
|
-
busy: number;
|
|
332
|
-
running: {
|
|
333
|
-
taskId: string;
|
|
334
|
-
title: string;
|
|
335
|
-
href: string;
|
|
336
|
-
project: string | null;
|
|
337
|
-
}[];
|
|
338
|
-
}[] | null;
|
|
339
|
-
/** v87: the mail server Send email steps use (approvers only); the password is never shown back. */
|
|
340
|
-
email?: {
|
|
341
|
-
set: boolean;
|
|
342
|
-
host: string;
|
|
343
|
-
port: number;
|
|
344
|
-
secure: boolean;
|
|
345
|
-
user: string;
|
|
346
|
-
from: string;
|
|
347
|
-
/** v89: where Email inbox triggers read (IMAP), and a Google account connected instead of a mail server (`redirect`: the address to register with Google, when this page's address can take one). */
|
|
348
|
-
imapHost: string;
|
|
349
|
-
imapPort: number;
|
|
350
|
-
google: {
|
|
351
|
-
connected: string | null;
|
|
352
|
-
clientId: string;
|
|
353
|
-
redirect: string | null;
|
|
354
|
-
};
|
|
355
|
-
} | null;
|
|
356
|
-
/** The installation's first Ready result, in words ("first result in 7 min"); null before it arrives. */
|
|
357
|
-
firstResult?: string | null;
|
|
358
|
-
/** Settings → Updates: this version, the latest known one and its notes, how to update, the daily-check switch, and each worker's version. */
|
|
359
|
-
updates?: BrowserUpdates | null;
|
|
360
|
-
};
|
|
361
|
-
/** A tile's `brand` is a chat app's logo (brand-mark.ts), drawn in place of its icon. */
|
|
362
|
-
export type BrowserSettingsGroup = {
|
|
363
|
-
title: string;
|
|
364
|
-
tiles: {
|
|
365
|
-
href: string;
|
|
366
|
-
label: string;
|
|
367
|
-
brand?: BrandIconId;
|
|
368
|
-
status?: {
|
|
369
|
-
tone: 'ok' | 'warn' | 'off';
|
|
370
|
-
words: string;
|
|
371
|
-
};
|
|
372
|
-
}[];
|
|
373
|
-
};
|
|
374
292
|
export type BrowserUpdates = {
|
|
375
293
|
current: string;
|
|
376
294
|
/** The latest release the last check found; null before any check has worked. */
|
|
@@ -449,6 +367,15 @@ export type BrowserTaskView = {
|
|
|
449
367
|
label: string;
|
|
450
368
|
current: BrowserLink;
|
|
451
369
|
} | null;
|
|
370
|
+
/** Put away (task-tidy.md): "Archived by tidy: <why>", when, and Restore for an approver. */
|
|
371
|
+
archived?: {
|
|
372
|
+
words: string;
|
|
373
|
+
at: string;
|
|
374
|
+
restore: {
|
|
375
|
+
action: string;
|
|
376
|
+
returnTo: string;
|
|
377
|
+
} | null;
|
|
378
|
+
} | null;
|
|
452
379
|
/** The status card; `statusHtml` stands in when no assignment projection exists. */
|
|
453
380
|
status: AssignmentCard | null;
|
|
454
381
|
statusHtml: string;
|
|
@@ -573,10 +500,61 @@ export type BrowserTaskView = {
|
|
|
573
500
|
} | null;
|
|
574
501
|
/** Where the approval sits: under the header when it is the thing to do now, else at the top of the Plan tab. */
|
|
575
502
|
approvalPlacement?: "lead" | "plan";
|
|
503
|
+
/** The kit approval box (src/design/KIT.md): the act's form and the facts that decide password, one click or none;
|
|
504
|
+
* `planHtml` is what it signs, for the Plan tab. Null when nothing waits on this person's approval here. */
|
|
505
|
+
approve?: {
|
|
506
|
+
action: string;
|
|
507
|
+
fields: Record<string, string>;
|
|
508
|
+
label: string;
|
|
509
|
+
heading: string;
|
|
510
|
+
text: string;
|
|
511
|
+
kind: import("./design/kit.js").ApprovalKind;
|
|
512
|
+
facts: {
|
|
513
|
+
passwordless: boolean;
|
|
514
|
+
remembered: boolean;
|
|
515
|
+
automatic?: boolean;
|
|
516
|
+
};
|
|
517
|
+
/** When a remembered password stops counting (ISO); the page words it in the viewer's zone. */
|
|
518
|
+
rememberedUntil: string | null;
|
|
519
|
+
planHtml: string;
|
|
520
|
+
} | null;
|
|
521
|
+
/** Ship: the pull request's checks, each on one time axis (task ship's twin). Null: no checks read yet. */
|
|
522
|
+
ship?: {
|
|
523
|
+
pr: number;
|
|
524
|
+
head: string;
|
|
525
|
+
state: "running" | "passed" | "failed" | "none";
|
|
526
|
+
rows: import("./design/kit.js").TimingRow[];
|
|
527
|
+
summary: string;
|
|
528
|
+
observedAt: string;
|
|
529
|
+
} | null;
|
|
530
|
+
/** A release's own steps (release status's twin). Null: this task is no release, or nothing recorded. */
|
|
531
|
+
release?: {
|
|
532
|
+
tag: string;
|
|
533
|
+
version: string;
|
|
534
|
+
pr: number | null;
|
|
535
|
+
state: "running" | "waiting" | "failed" | "done";
|
|
536
|
+
rows: import("./design/kit.js").TimingRow[];
|
|
537
|
+
headline: string;
|
|
538
|
+
stopped: {
|
|
539
|
+
step: string;
|
|
540
|
+
message: string;
|
|
541
|
+
at: string;
|
|
542
|
+
} | null;
|
|
543
|
+
startedAt: string;
|
|
544
|
+
} | null;
|
|
545
|
+
/** How the plan was approved: by whom and how, or the rule that approved it automatically. */
|
|
546
|
+
approved?: {
|
|
547
|
+
by: string;
|
|
548
|
+
at: string;
|
|
549
|
+
automatic: boolean;
|
|
550
|
+
rule: string | null;
|
|
551
|
+
how: string;
|
|
552
|
+
version: string;
|
|
553
|
+
} | null;
|
|
576
554
|
/** ⋯ More actions: the task's secondary acts, the same order on the task and agent pages, destructive last. */
|
|
577
555
|
more?: BrowserTaskMore[];
|
|
578
556
|
};
|
|
579
|
-
export type BrowserTaskTab = "activity" | "result" | "plan";
|
|
557
|
+
export type BrowserTaskTab = "activity" | "result" | "plan" | "attempts";
|
|
580
558
|
/** One ⋯ item: a plain link, a copy of this page's address, a one-click POST (never a ceremony), or a go-to that switches
|
|
581
559
|
* to the tab holding the item's own form, opens it and focuses it (`target`: that element's id). */
|
|
582
560
|
export type BrowserTaskMore = {
|
|
@@ -601,44 +579,34 @@ export type BrowserProjectRow = {
|
|
|
601
579
|
name: string;
|
|
602
580
|
path: string;
|
|
603
581
|
shortPath: string;
|
|
582
|
+
/** The project's own page (/projects/<name>). */
|
|
583
|
+
href: string;
|
|
584
|
+
/** The session's open project. */
|
|
604
585
|
open: boolean;
|
|
605
586
|
/** When it was last opened here; null for a project only seen in the queue. */
|
|
606
587
|
openedAt: string | null;
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
on: boolean;
|
|
612
|
-
};
|
|
613
|
-
/** Settings → Projects → Checks for this project, and its level in words. */
|
|
614
|
-
checks?: {
|
|
615
|
-
href: string;
|
|
616
|
-
level: string;
|
|
617
|
-
};
|
|
618
|
-
/** What waits, runs, queues or finished today; null when not scanned. */
|
|
619
|
-
peek: {
|
|
620
|
-
label: string;
|
|
621
|
-
href: string;
|
|
622
|
-
tone: 'attention' | 'info' | 'neutral' | 'success';
|
|
623
|
-
}[] | null;
|
|
588
|
+
/** The row's chip: something waits on this person, or runs; null for neither. */
|
|
589
|
+
status: 'needs' | 'running' | null;
|
|
590
|
+
/** Its counts in words ("2 need you · 1 running"); null when not scanned. */
|
|
591
|
+
summary: string | null;
|
|
624
592
|
};
|
|
625
593
|
export type BrowserProjectsView = {
|
|
626
594
|
kind: 'projects';
|
|
627
|
-
activity?: {
|
|
628
|
-
project: string;
|
|
629
|
-
report: import('./project-outcomes.js').ProjectOutcomes | null;
|
|
630
|
-
};
|
|
631
595
|
/** Arrived from New task: choosing where the task belongs. */
|
|
632
596
|
choosing: boolean;
|
|
597
|
+
/** A refusal that belongs to the page, not to one form (already says what didn't change). */
|
|
633
598
|
problem: string | null;
|
|
599
|
+
/** A neutral line (a finished clone). */
|
|
600
|
+
said: string | null;
|
|
634
601
|
returnTo: string;
|
|
635
602
|
recent: BrowserProjectRow[];
|
|
636
603
|
available: BrowserProjectRow[];
|
|
637
|
-
/** The add
|
|
604
|
+
/** The add ways (the server's forms), the clone review a preview minted, and whether the drawer opens at once
|
|
605
|
+
* (a refused GitHub link, shown next to its field). */
|
|
638
606
|
add: {
|
|
639
|
-
browse: string | null;
|
|
640
|
-
github: string | null;
|
|
641
607
|
html: string;
|
|
608
|
+
review: string | null;
|
|
609
|
+
openOnLoad: boolean;
|
|
642
610
|
};
|
|
643
611
|
};
|
|
644
612
|
export type BrowserResultTab = 'summary' | 'changes' | 'checks';
|
|
@@ -977,6 +945,8 @@ export type BrowserFlowStage = {
|
|
|
977
945
|
}[] | undefined;
|
|
978
946
|
/** A Build zone in another project: its path. */
|
|
979
947
|
repo?: string | undefined;
|
|
948
|
+
/** v144: a script zone that starts a browser (Playwright's Chromium); it runs only once a person allows browser use for the flow. */
|
|
949
|
+
browser?: true | undefined;
|
|
980
950
|
next: string | null;
|
|
981
951
|
onFail: string | null;
|
|
982
952
|
};
|
|
@@ -1000,6 +970,8 @@ export type BrowserFlowCard = {
|
|
|
1000
970
|
stage: string;
|
|
1001
971
|
state: "active" | "done" | "cancelled";
|
|
1002
972
|
waiting: string | null;
|
|
973
|
+
/** It waits because browser use isn't allowed for the flow (flow-browser.ts): the card offers Allow browser. */
|
|
974
|
+
browserWait?: true;
|
|
1003
975
|
task: {
|
|
1004
976
|
id: string;
|
|
1005
977
|
href: string;
|
|
@@ -1251,6 +1223,8 @@ export type BrowserFlowView = {
|
|
|
1251
1223
|
body: string;
|
|
1252
1224
|
timeoutMinutes: number;
|
|
1253
1225
|
version: number;
|
|
1226
|
+
/** The content digest the panel showed: an approval of a held script carries it back. */
|
|
1227
|
+
digest: string;
|
|
1254
1228
|
savedBy: string;
|
|
1255
1229
|
savedAt: string;
|
|
1256
1230
|
usedHere: string[];
|
|
@@ -1293,7 +1267,31 @@ export type BrowserFlowView = {
|
|
|
1293
1267
|
optional: string | null;
|
|
1294
1268
|
}[];
|
|
1295
1269
|
schedulesDigest: string;
|
|
1270
|
+
/** The latest grant a change ended early (flow-unattended.ts unattendedViewOf): why and when. */
|
|
1271
|
+
ended?: {
|
|
1272
|
+
why: string;
|
|
1273
|
+
at: string;
|
|
1274
|
+
} | null;
|
|
1296
1275
|
};
|
|
1276
|
+
/** Browser use (flow-browser.ts browserViewOf): null when no zone says it starts a browser. */
|
|
1277
|
+
browser: {
|
|
1278
|
+
status: "allowed" | "ended" | "none";
|
|
1279
|
+
words: string;
|
|
1280
|
+
signedBy: string | null;
|
|
1281
|
+
signedAt: string | null;
|
|
1282
|
+
zones: {
|
|
1283
|
+
zone: string;
|
|
1284
|
+
title: string;
|
|
1285
|
+
script: string;
|
|
1286
|
+
version: number;
|
|
1287
|
+
digest: string;
|
|
1288
|
+
}[];
|
|
1289
|
+
terms: string[];
|
|
1290
|
+
digest: string | null;
|
|
1291
|
+
problem: string | null;
|
|
1292
|
+
/** Whether this person may allow it here: an approver whose account reaches every project (as the route requires). */
|
|
1293
|
+
canApprove: boolean;
|
|
1294
|
+
} | null;
|
|
1297
1295
|
approvers: string[];
|
|
1298
1296
|
/** The projects a Build zone may work in: the flow's own first, then others the viewer can reach. */
|
|
1299
1297
|
projects?: {
|
|
@@ -1458,9 +1456,107 @@ export type BrowserAgentsView = {
|
|
|
1458
1456
|
empty: string | null;
|
|
1459
1457
|
/** The Live grid (?view=live): every running agent's live output, watching only. */
|
|
1460
1458
|
live?: boolean;
|
|
1459
|
+
/** The Finished group's window (?window=), 24 hours unless the address says otherwise. */
|
|
1460
|
+
window?: AgentLaneWindow;
|
|
1461
|
+
/** The computers that build (what /fleet showed), for a person with access to the whole installation; null otherwise. */
|
|
1462
|
+
computers?: BrowserComputers | null;
|
|
1463
|
+
/** Which model runs each phase (what /system showed), for a person with access to the whole installation. */
|
|
1464
|
+
phases?: BrowserAgentPhase[] | null;
|
|
1465
|
+
/** The rest of what /system showed: workspaces, the background service, notifications and external work. */
|
|
1466
|
+
system?: BrowserAgentsSystem | null;
|
|
1467
|
+
/** This person may open terminals (an installation-wide operator in a browser). */
|
|
1468
|
+
terminals?: boolean;
|
|
1469
|
+
/** What a computer act said, in fixed words (a retired computer, by the name the store knows). */
|
|
1470
|
+
computerSaid?: {
|
|
1471
|
+
tone: 'info' | 'error';
|
|
1472
|
+
text: string;
|
|
1473
|
+
} | null;
|
|
1461
1474
|
};
|
|
1462
|
-
|
|
1475
|
+
/** One computer that builds (a registered runner): what it is doing and what waits for it. */
|
|
1476
|
+
export type BrowserComputer = {
|
|
1477
|
+
name: string;
|
|
1478
|
+
host: string;
|
|
1479
|
+
state: 'building' | 'idle' | 'offline';
|
|
1480
|
+
capacity: number;
|
|
1481
|
+
/** Retired, listed only while tasks are still reserved for it. */
|
|
1482
|
+
retired: boolean;
|
|
1483
|
+
/** Its live builds this person may see; `hidden` counts the ones in projects they can't. */
|
|
1484
|
+
building: {
|
|
1485
|
+
taskId: string;
|
|
1486
|
+
title: string;
|
|
1487
|
+
href: string;
|
|
1488
|
+
project: string | null;
|
|
1489
|
+
}[];
|
|
1490
|
+
hidden: number;
|
|
1491
|
+
heardAt: string;
|
|
1492
|
+
registeredAt: string;
|
|
1493
|
+
/** The projects it takes work from, that this person may see. */
|
|
1494
|
+
projects: string[];
|
|
1495
|
+
/** The operator's note on its queue (display only). */
|
|
1496
|
+
note: string | null;
|
|
1497
|
+
/** Queued tasks reserved for it, that this person may see. */
|
|
1498
|
+
reserved: {
|
|
1499
|
+
id: string;
|
|
1500
|
+
title: string;
|
|
1501
|
+
href: string;
|
|
1502
|
+
project: string | null;
|
|
1503
|
+
taken: boolean;
|
|
1504
|
+
}[];
|
|
1505
|
+
};
|
|
1506
|
+
export type BrowserComputers = {
|
|
1507
|
+
list: BrowserComputer[];
|
|
1508
|
+
/** Register, retire, move reserved work and notes: an approver in a browser session. */
|
|
1509
|
+
manage: boolean;
|
|
1510
|
+
/** The queue's revision, for a move (POST /queue/move). */
|
|
1511
|
+
queueRevision: number;
|
|
1512
|
+
/** Queued tasks no computer is reserved for. */
|
|
1513
|
+
shared: number;
|
|
1514
|
+
};
|
|
1515
|
+
export type BrowserAgentPhase = {
|
|
1516
|
+
phase: 'plan' | 'build' | 'repair' | 'review';
|
|
1517
|
+
/** The provider and model in words; null when it can't be worked out (`problem` says why). */
|
|
1518
|
+
model: string | null;
|
|
1519
|
+
problem: string | null;
|
|
1520
|
+
/** Where the choice comes from, in words ("Set for the whole installation by alex"). */
|
|
1521
|
+
source: string;
|
|
1522
|
+
/** This provider reports tokens, not dollars. */
|
|
1523
|
+
noDollars: boolean;
|
|
1524
|
+
};
|
|
1525
|
+
export type BrowserAgentsSystem = {
|
|
1526
|
+
workspaces: {
|
|
1527
|
+
name: string;
|
|
1528
|
+
branch: string;
|
|
1529
|
+
state: 'building' | 'free' | 'needs review';
|
|
1530
|
+
}[];
|
|
1531
|
+
/** The background service's latest run on the open project: running since `at`, or ended at `at`. */
|
|
1532
|
+
service: {
|
|
1533
|
+
running: boolean;
|
|
1534
|
+
at: string;
|
|
1535
|
+
built: number;
|
|
1536
|
+
broke: number;
|
|
1537
|
+
} | null;
|
|
1538
|
+
outbox: number;
|
|
1539
|
+
external: {
|
|
1540
|
+
repo: string;
|
|
1541
|
+
state: string;
|
|
1542
|
+
}[];
|
|
1543
|
+
};
|
|
1544
|
+
export type BrowserView = BrowserTasksView | BrowserTaskView | BrowserProjectsView | BrowserResultView | BrowserFlowView | BrowserAgentsView | BrowserHomeView | BrowserSearchView;
|
|
1463
1545
|
export type BrowserWorkspace = {
|
|
1546
|
+
/** The one Needs-you count (tasks only) with its scope: the Tasks list's own count for the project in view (`scope`,
|
|
1547
|
+
* a project path) or every project (null), its words ("5 need you in payments-api") and the list it opens. */
|
|
1548
|
+
needsYou?: {
|
|
1549
|
+
count: number;
|
|
1550
|
+
saturated: boolean;
|
|
1551
|
+
scope: string | null;
|
|
1552
|
+
label: string;
|
|
1553
|
+
href: string;
|
|
1554
|
+
};
|
|
1555
|
+
/** The same Needs-you count for each project (`path` null: work with no project), from the same work index totals. */
|
|
1556
|
+
needsYouByProject?: {
|
|
1557
|
+
path: string | null;
|
|
1558
|
+
count: number;
|
|
1559
|
+
}[];
|
|
1464
1560
|
version: 1;
|
|
1465
1561
|
path: string;
|
|
1466
1562
|
title: string;
|
|
@@ -1533,6 +1629,96 @@ export type BrowserWorkspace = {
|
|
|
1533
1629
|
/** The Chat landing's live view: who is working now, four counts, and Catch up in tabs. */
|
|
1534
1630
|
home?: BrowserHome | null;
|
|
1535
1631
|
};
|
|
1632
|
+
/** Home ("/"): one sentence that answers "what needs me?", four counts that agree with the Tasks filters they open,
|
|
1633
|
+
* what waits on this person grouped by what it asks, what is running, and the selected item answered in place. */
|
|
1634
|
+
export type BrowserHomeView = {
|
|
1635
|
+
kind: 'home';
|
|
1636
|
+
/** "7 need you across 2 projects.", derived from the same counts as the figures. */
|
|
1637
|
+
say: string;
|
|
1638
|
+
/** The project in view (a path) or every project (null), and the scope links (null with one project). */
|
|
1639
|
+
project: string | null;
|
|
1640
|
+
scopes: {
|
|
1641
|
+
key: string;
|
|
1642
|
+
label: string;
|
|
1643
|
+
href: string;
|
|
1644
|
+
active: boolean;
|
|
1645
|
+
}[] | null;
|
|
1646
|
+
counts: {
|
|
1647
|
+
key: 'needs' | 'running' | 'queued' | 'finished';
|
|
1648
|
+
label: string;
|
|
1649
|
+
value: number;
|
|
1650
|
+
href: string;
|
|
1651
|
+
}[];
|
|
1652
|
+
groups: {
|
|
1653
|
+
key: 'decide' | 'review' | 'unblock' | 'running';
|
|
1654
|
+
label: string;
|
|
1655
|
+
rows: BrowserHomeRow[];
|
|
1656
|
+
}[];
|
|
1657
|
+
/** More waits than the list shows: open them all in Tasks. */
|
|
1658
|
+
more: {
|
|
1659
|
+
count: number;
|
|
1660
|
+
href: string;
|
|
1661
|
+
} | null;
|
|
1662
|
+
newTask: string;
|
|
1663
|
+
/** The lead's message box, where chat is allowed for this person: a POST to /chat in this scope. */
|
|
1664
|
+
ask: {
|
|
1665
|
+
project: string | null;
|
|
1666
|
+
placeholder: string;
|
|
1667
|
+
} | null;
|
|
1668
|
+
empty: {
|
|
1669
|
+
title: string;
|
|
1670
|
+
text: string;
|
|
1671
|
+
} | null;
|
|
1672
|
+
};
|
|
1673
|
+
export type BrowserHomeRow = {
|
|
1674
|
+
id: string;
|
|
1675
|
+
title: string;
|
|
1676
|
+
href: string;
|
|
1677
|
+
project: string | null;
|
|
1678
|
+
age: string;
|
|
1679
|
+
chip: {
|
|
1680
|
+
word: string;
|
|
1681
|
+
tone: '' | 'needs' | 'ask' | 'live' | 'done' | 'failed';
|
|
1682
|
+
};
|
|
1683
|
+
/** One line: what it asks, or what the agent is doing now. */
|
|
1684
|
+
line: string | null;
|
|
1685
|
+
/** The one act that resolves it (a link), or null. */
|
|
1686
|
+
action: {
|
|
1687
|
+
label: string;
|
|
1688
|
+
href: string;
|
|
1689
|
+
} | null;
|
|
1690
|
+
/** An agent's question, answered in place (POST /d/<id>/answer, one click); null when it must be answered on its page. */
|
|
1691
|
+
question: {
|
|
1692
|
+
id: number;
|
|
1693
|
+
text: string;
|
|
1694
|
+
recap: string;
|
|
1695
|
+
options: {
|
|
1696
|
+
id: string;
|
|
1697
|
+
label: string;
|
|
1698
|
+
consequence: string;
|
|
1699
|
+
recommended: boolean;
|
|
1700
|
+
}[];
|
|
1701
|
+
} | null;
|
|
1702
|
+
};
|
|
1703
|
+
/** Search ("/search"): the places and the tasks in view that match the words; the ⌘K menu's "See all results". */
|
|
1704
|
+
export type BrowserSearchView = {
|
|
1705
|
+
kind: 'search';
|
|
1706
|
+
q: string;
|
|
1707
|
+
tasks: {
|
|
1708
|
+
id: string;
|
|
1709
|
+
title: string;
|
|
1710
|
+
href: string;
|
|
1711
|
+
project: string | null;
|
|
1712
|
+
age: string;
|
|
1713
|
+
chip: {
|
|
1714
|
+
word: string;
|
|
1715
|
+
tone: '' | 'needs' | 'ask' | 'live' | 'done' | 'failed';
|
|
1716
|
+
};
|
|
1717
|
+
archived: boolean;
|
|
1718
|
+
}[];
|
|
1719
|
+
/** More tasks exist than were read: the Tasks list has them all. */
|
|
1720
|
+
truncated: boolean;
|
|
1721
|
+
};
|
|
1536
1722
|
/** One agent at work now: its task and the machine's own phase, in words. */
|
|
1537
1723
|
export type BrowserHomeAgent = {
|
|
1538
1724
|
runId: number;
|