toolroll 0.9.54 → 0.9.56
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 +19 -0
- package/README.md +29 -12
- package/dist/action-ledger.d.ts +2 -4
- package/dist/action-ledger.js +2 -10
- package/dist/agent-onboard.js +4 -1
- package/dist/approval-policy.d.ts +5 -5
- package/dist/approval-policy.js +4 -4
- package/dist/approval-rules-ui.d.ts +3 -2
- package/dist/approval-rules-ui.js +17 -22
- package/dist/assignment-ui.d.ts +3 -2
- package/dist/assignment-ui.js +4 -11
- package/dist/backup-ui.d.ts +2 -1
- package/dist/backup-ui.js +16 -27
- package/dist/brand-mark.d.ts +3 -2
- package/dist/brand-mark.js +4 -4
- package/dist/browser/workspace.css +1 -1
- package/dist/browser/workspace.js +25 -25
- package/dist/browser-shell.d.ts +2 -1
- package/dist/browser-shell.js +9 -9
- package/dist/browser-workspace.d.ts +14 -15
- package/dist/browser-workspace.js +0 -3
- package/dist/budget-alerts.js +3 -3
- package/dist/chat-actions.d.ts +23 -18
- package/dist/chat-actions.js +110 -88
- package/dist/chat-ask.d.ts +2 -2
- package/dist/chat-ask.js +5 -5
- package/dist/chat-channel.d.ts +15 -15
- package/dist/chat-channel.js +20 -20
- package/dist/chat-controls.d.ts +0 -4
- package/dist/chat-controls.js +0 -1
- package/dist/chat-core.js +1 -1
- package/dist/chat-delivery-state.js +2 -2
- package/dist/chat-delivery.d.ts +2 -2
- package/dist/chat-delivery.js +27 -34
- package/dist/chat-flow.js +3 -3
- package/dist/chat-messages.d.ts +1 -1
- package/dist/chat-messages.js +4 -4
- package/dist/chat-migration.d.ts +1 -1
- package/dist/chat-migration.js +11 -11
- package/dist/chat-polish.d.ts +5 -4
- package/dist/chat-polish.js +9 -10
- package/dist/chat-rooms.js +3 -3
- package/dist/chat-warmth.d.ts +2 -2
- package/dist/check-levels-ui.d.ts +2 -1
- package/dist/check-levels-ui.js +26 -53
- package/dist/cli.d.ts +3 -1
- package/dist/cli.js +15 -10
- package/dist/coding-shipping-ui.d.ts +2 -1
- package/dist/coding-shipping-ui.js +6 -6
- package/dist/coding-ui.d.ts +3 -1
- package/dist/coding-ui.js +30 -29
- package/dist/contracts/chat-actions.d.ts +32 -27
- package/dist/contracts/chat-actions.js +29 -11
- package/dist/contracts/chat-content.d.ts +1 -1
- package/dist/contracts/chat-content.js +1 -1
- package/dist/contracts/chat-tables.js +4 -4
- package/dist/contracts/cli.d.ts +1 -3
- package/dist/contracts/console-api.d.ts +7 -7
- package/dist/contracts/console-api.js +13 -12
- package/dist/contracts/flow-propose.d.ts +3 -3
- package/dist/contracts/flow.d.ts +132 -125
- package/dist/contracts/flow.js +27 -12
- package/dist/contracts/health.d.ts +1 -3
- package/dist/contracts/lead-context.d.ts +1 -1
- package/dist/contracts/lead-context.js +2 -2
- package/dist/contracts/lead-tools.d.ts +20 -18
- package/dist/contracts/lead-tools.js +15 -15
- package/dist/contracts/stage-output.d.ts +1 -1
- package/dist/contracts/stage-output.js +1 -1
- package/dist/contracts/store-json.d.ts +23 -22
- package/dist/contracts/store-json.js +17 -17
- package/dist/contracts/{teammate-turn.d.ts → subagent-turn.d.ts} +5 -5
- package/dist/contracts/{teammate-turn.js → subagent-turn.js} +7 -7
- package/dist/control-ui.d.ts +5 -4
- package/dist/control-ui.js +9 -34
- package/dist/converse.d.ts +23 -23
- package/dist/converse.js +28 -28
- package/dist/coordinator-proposals.d.ts +2 -2
- package/dist/coordinator-proposals.js +1 -1
- package/dist/coordinator.js +1 -1
- package/dist/credentials-ui.d.ts +5 -4
- package/dist/credentials-ui.js +23 -24
- package/dist/demo-chat.d.ts +3 -3
- package/dist/demo-chat.js +29 -76
- package/dist/deprecations.d.ts +12 -0
- package/dist/deprecations.js +20 -0
- package/dist/desktop-update-gate.js +8 -4
- package/dist/desktop-update.js +6 -1
- package/dist/discord-chat.js +6 -6
- package/dist/discord-settings.d.ts +3 -2
- package/dist/discord-settings.js +17 -42
- package/dist/dispatch.d.ts +1 -1
- package/dist/dispatch.js +1 -1
- package/dist/envelope.js +10 -1
- package/dist/evidence-pack.d.ts +2 -1
- package/dist/evidence-pack.js +45 -49
- package/dist/export-ui.d.ts +7 -2
- package/dist/export-ui.js +4 -10
- package/dist/export.js +7 -7
- package/dist/flow-engine.d.ts +2 -2
- package/dist/flow-engine.js +21 -21
- package/dist/flow-gallery-ui.d.ts +4 -3
- package/dist/flow-gallery-ui.js +28 -43
- package/dist/flow-insights.d.ts +1 -1
- package/dist/flow-share.js +13 -8
- package/dist/flow-starters-ui.d.ts +2 -1
- package/dist/flow-starters-ui.js +12 -15
- package/dist/flow-steps.d.ts +5 -5
- package/dist/flow-steps.js +19 -19
- package/dist/flow-triggers.d.ts +2 -1
- package/dist/flow-triggers.js +17 -15
- package/dist/flows-cli.js +1 -1
- package/dist/flows-ui.d.ts +4 -3
- package/dist/flows-ui.js +38 -49
- package/dist/flows.js +21 -20
- package/dist/guides.js +112 -6
- package/dist/html.d.ts +76 -0
- package/dist/html.js +173 -0
- package/dist/integrations-ui.d.ts +2 -1
- package/dist/integrations-ui.js +19 -23
- package/dist/invoke.js +1 -1
- package/dist/kits-ui.d.ts +5 -4
- package/dist/kits-ui.js +22 -24
- package/dist/kits.d.ts +12 -12
- package/dist/kits.js +31 -31
- package/dist/knowledge-ui.d.ts +6 -5
- package/dist/knowledge-ui.js +26 -25
- package/dist/{mate-cli.d.ts → lead-cli.d.ts} +11 -11
- package/dist/{mate-cli.js → lead-cli.js} +38 -38
- package/dist/lead-commitments.js +4 -4
- package/dist/lead-context.d.ts +12 -2
- package/dist/lead-context.js +15 -17
- package/dist/{mate-contract.d.ts → lead-contract.d.ts} +3 -3
- package/dist/{mate-contract.js → lead-contract.js} +7 -6
- package/dist/{mate-doors.d.ts → lead-doors.d.ts} +6 -6
- package/dist/{mate-doors.js → lead-doors.js} +24 -24
- package/dist/lead-follow.d.ts +5 -5
- package/dist/lead-follow.js +9 -9
- package/dist/lead-people.d.ts +5 -5
- package/dist/lead-people.js +14 -14
- package/dist/{mate-progress.d.ts → lead-progress.d.ts} +9 -9
- package/dist/{mate-progress.js → lead-progress.js} +3 -3
- package/dist/{mate-tools.d.ts → lead-tools.d.ts} +19 -19
- package/dist/{mate-tools.js → lead-tools.js} +109 -101
- package/dist/{mate.d.ts → lead.d.ts} +27 -27
- package/dist/{mate.js → lead.js} +102 -102
- package/dist/ledger-view.d.ts +2 -1
- package/dist/ledger-view.js +27 -29
- package/dist/limits-ui.d.ts +3 -2
- package/dist/limits-ui.js +8 -8
- package/dist/live-bus.d.ts +50 -8
- package/dist/live-bus.js +133 -50
- package/dist/mcp-connect.d.ts +1 -1
- package/dist/mcp-connect.js +3 -3
- package/dist/mcp-core.js +1 -1
- package/dist/mcp-oauth.js +35 -36
- package/dist/memory-pass.d.ts +2 -2
- package/dist/memory-pass.js +7 -7
- package/dist/models-ui.d.ts +2 -1
- package/dist/models-ui.js +25 -35
- package/dist/monitoring-ui.d.ts +4 -3
- package/dist/monitoring-ui.js +13 -26
- package/dist/notification-rows.d.ts +2 -2
- package/dist/openrouter-models.d.ts +2 -1
- package/dist/openrouter-models.js +5 -9
- package/dist/operate.d.ts +3 -3
- package/dist/operate.js +46 -41
- package/dist/people-audit-ui.d.ts +2 -1
- package/dist/people-audit-ui.js +13 -13
- package/dist/policy-ui.d.ts +3 -2
- package/dist/policy-ui.js +17 -23
- package/dist/policy.d.ts +1 -1
- package/dist/principal.d.ts +1 -1
- package/dist/principal.js +2 -2
- package/dist/project-delete-ui.d.ts +4 -3
- package/dist/project-delete-ui.js +16 -28
- package/dist/project-delete.d.ts +1 -1
- package/dist/project-delete.js +26 -26
- package/dist/project-memory.js +1 -1
- package/dist/project-tools.d.ts +1 -1
- package/dist/project-tools.js +1 -1
- package/dist/pull-request-ui.d.ts +2 -1
- package/dist/pull-request-ui.js +17 -32
- package/dist/recipe-ui.d.ts +8 -7
- package/dist/recipe-ui.js +39 -32
- package/dist/release-adapters.d.ts +60 -0
- package/dist/release-adapters.js +435 -0
- package/dist/release-cli.d.ts +24 -0
- package/dist/release-cli.js +181 -0
- package/dist/release-gate.d.ts +80 -0
- package/dist/release-gate.js +150 -0
- package/dist/release-links.d.ts +29 -0
- package/dist/release-links.js +102 -0
- package/dist/release.d.ts +331 -0
- package/dist/release.js +550 -0
- package/dist/reply-shape.d.ts +2 -1
- package/dist/reply-shape.js +5 -5
- package/dist/repository-context-ui.d.ts +2 -1
- package/dist/repository-context-ui.js +2 -7
- package/dist/request-budget-ui.d.ts +2 -1
- package/dist/request-budget-ui.js +16 -16
- package/dist/result-review.d.ts +2 -3
- package/dist/result-review.js +3 -9
- package/dist/retention-ui.d.ts +7 -1
- package/dist/retention-ui.js +7 -11
- package/dist/retention.js +4 -4
- package/dist/scope.d.ts +2 -2
- package/dist/scout-report.d.ts +1 -1
- package/dist/scout-report.js +1 -1
- package/dist/serve.d.ts +11 -2
- package/dist/serve.js +105 -99
- package/dist/server/chat.d.ts +7 -10
- package/dist/server/chat.js +984 -1021
- package/dist/server/chrome.d.ts +291 -0
- package/dist/server/chrome.js +747 -0
- package/dist/server/console.css +2819 -0
- package/dist/server/flows.d.ts +2 -6
- package/dist/server/flows.js +854 -773
- package/dist/server/guards.d.ts +1 -1
- package/dist/server/guards.js +8 -5
- package/dist/server/handler-context.d.ts +1 -1
- package/dist/server/handler-context.js +1 -1
- package/dist/server/handler-registry.d.ts +8 -6
- package/dist/server/handler-registry.js +14 -2
- package/dist/server/http.d.ts +274 -0
- package/dist/server/http.js +239 -0
- package/dist/server/live.d.ts +34 -0
- package/dist/server/live.js +309 -0
- package/dist/server/pages.d.ts +2 -6
- package/dist/server/pages.js +808 -789
- package/dist/server/people-tokens.d.ts +1 -6
- package/dist/server/people-tokens.js +581 -573
- package/dist/server/remote.d.ts +4 -7
- package/dist/server/remote.js +39 -70
- package/dist/server/render-chat.d.ts +402 -0
- package/dist/server/render-chat.js +927 -0
- package/dist/server/render-pages.d.ts +535 -0
- package/dist/server/render-pages.js +1277 -0
- package/dist/server/render-people.d.ts +32 -0
- package/dist/server/render-people.js +121 -0
- package/dist/server/render-results.d.ts +744 -0
- package/dist/server/render-results.js +2237 -0
- package/dist/server/render-settings.d.ts +154 -0
- package/dist/server/render-settings.js +580 -0
- package/dist/server/render-tasks.d.ts +632 -0
- package/dist/server/render-tasks.js +2345 -0
- package/dist/server/request-context.d.ts +46 -0
- package/dist/server/request-context.js +17 -0
- package/dist/server/route-table.d.ts +25 -3
- package/dist/server/route-table.js +167 -77
- package/dist/server/runtime.d.ts +28 -20
- package/dist/server/runtime.js +7 -1
- package/dist/server/session.d.ts +138 -0
- package/dist/server/session.js +94 -0
- package/dist/server/settings.d.ts +1 -5
- package/dist/server/settings.js +2186 -2121
- package/dist/server/task-views.d.ts +11 -4
- package/dist/server/task-views.js +26 -22
- package/dist/server/tasks.d.ts +9 -9
- package/dist/server/tasks.js +1489 -1420
- package/dist/server-telemetry.d.ts +4 -3
- package/dist/server-telemetry.js +4 -8
- package/dist/setup-guide.d.ts +2 -2
- package/dist/skills-ui.d.ts +4 -3
- package/dist/skills-ui.js +14 -17
- package/dist/skills.d.ts +1 -1
- package/dist/skills.js +2 -1
- package/dist/slack-chat.d.ts +2 -2
- package/dist/slack-chat.js +6 -6
- package/dist/slack-settings.d.ts +3 -2
- package/dist/slack-settings.js +17 -42
- package/dist/spend-ui.d.ts +5 -4
- package/dist/spend-ui.js +17 -40
- package/dist/spend.d.ts +14 -14
- package/dist/spend.js +31 -31
- package/dist/sso-ui.d.ts +3 -2
- package/dist/sso-ui.js +26 -27
- package/dist/storage-ui.d.ts +2 -1
- package/dist/storage-ui.js +14 -33
- package/dist/store-baseline.d.ts +19 -0
- package/dist/store-baseline.js +2873 -0
- package/dist/store.d.ts +197 -249
- package/dist/store.js +747 -3084
- package/dist/subagent-admin.d.ts +53 -0
- package/dist/{teammate-admin.js → subagent-admin.js} +37 -37
- package/dist/{teammate-desk.d.ts → subagent-desk.d.ts} +22 -23
- package/dist/{teammate-desk.js → subagent-desk.js} +26 -35
- package/dist/{teammate-memory.d.ts → subagent-memory.d.ts} +17 -17
- package/dist/{teammate-memory.js → subagent-memory.js} +41 -41
- package/dist/{teammate-question.d.ts → subagent-question.d.ts} +6 -6
- package/dist/{teammate-question.js → subagent-question.js} +17 -17
- package/dist/{teammate-tools.d.ts → subagent-tools.d.ts} +18 -18
- package/dist/{teammate-tools.js → subagent-tools.js} +36 -36
- package/dist/{teammate-week.d.ts → subagent-week.d.ts} +10 -10
- package/dist/{teammate-week.js → subagent-week.js} +23 -23
- package/dist/{teammate-work.d.ts → subagent-work.d.ts} +21 -21
- package/dist/{teammate-work.js → subagent-work.js} +50 -50
- package/dist/subagents-ui.d.ts +22 -0
- package/dist/subagents-ui.js +137 -0
- package/dist/{teammates.d.ts → subagents.d.ts} +11 -11
- package/dist/{teammates.js → subagents.js} +21 -21
- package/dist/subscription-chat.d.ts +13 -13
- package/dist/subscription-chat.js +19 -19
- package/dist/surface.d.ts +19 -2
- package/dist/surface.js +20 -33
- package/dist/task-composer.d.ts +2 -1
- package/dist/task-composer.js +7 -7
- package/dist/task-status.d.ts +4 -3
- package/dist/task-status.js +15 -16
- package/dist/team-cli.d.ts +1 -0
- package/dist/team-cli.js +14 -2
- package/dist/team-http.d.ts +5 -9
- package/dist/team-http.js +5 -63
- package/dist/team-leads.js +13 -13
- package/dist/team-runtime.d.ts +2 -2
- package/dist/team-runtime.js +8 -8
- package/dist/team-ui.d.ts +2 -1
- package/dist/team-ui.js +2 -5
- package/dist/teams-chat.js +6 -6
- package/dist/teams-settings.d.ts +3 -2
- package/dist/teams-settings.js +20 -31
- package/dist/telegram-flow.d.ts +3 -3
- package/dist/telegram-flow.js +3 -3
- package/dist/{telegram-mate.d.ts → telegram-lead.d.ts} +5 -5
- package/dist/{telegram-mate.js → telegram-lead.js} +27 -27
- package/dist/telegram-settings.d.ts +3 -2
- package/dist/telegram-settings.js +14 -25
- package/dist/telegram-status.js +1 -1
- package/dist/telegram-team.d.ts +1 -1
- package/dist/telegram-team.js +5 -5
- package/dist/telegram.d.ts +1 -1
- package/dist/telegram.js +9 -30
- package/dist/text-limits.d.ts +18 -18
- package/dist/text-limits.js +18 -18
- package/dist/toolroll-update-ui.d.ts +3 -2
- package/dist/toolroll-update-ui.js +35 -39
- package/dist/toolroll-update.d.ts +8 -0
- package/dist/toolroll-update.js +45 -8
- package/dist/tools-ui.d.ts +5 -2
- package/dist/tools-ui.js +31 -31
- package/dist/when-html.d.ts +11 -3
- package/dist/when-html.js +5 -6
- package/dist/workspace-ui.d.ts +4 -2
- package/dist/workspace-ui.js +10 -10
- package/package.json +1 -2
- package/dist/server/shared.d.ts +0 -3151
- package/dist/server/shared.js +0 -12001
- package/dist/teammate-admin.d.ts +0 -53
- package/dist/teammates-ui.d.ts +0 -20
- package/dist/teammates-ui.js +0 -166
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { html, postForm } from "./html.js";
|
|
1
2
|
import { effectiveLimits, limitOverrides, PER_DAY_MAX, PER_MINUTE_MAX, REQUEST_BUDGET_DEFAULTS } from "./request-budget.js";
|
|
2
|
-
const e = (value) => String(value ?? "").replace(/[&<>"']/g, c => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[c]);
|
|
3
3
|
const n = (value) => value.toLocaleString("en-US");
|
|
4
4
|
export const REQUEST_LIMITS_CSS = `.credentials .limits{display:grid;gap:14px}.credentials .limits form{display:grid;gap:10px}.credentials .limits label{display:grid;gap:6px}` +
|
|
5
5
|
`.credentials .limits input,.credentials .limits select{box-sizing:border-box;width:100%;min-width:0}.credentials .limits .pair{display:grid;grid-template-columns:1fr 1fr;gap:10px}.credentials .limits .actions{display:flex;flex-wrap:wrap;gap:8px}` +
|
|
@@ -10,22 +10,22 @@ export function tokenLimitWords(db, token) {
|
|
|
10
10
|
return `${n(limits.perMinute)} requests a minute · ${n(limits.perDay)} a day`;
|
|
11
11
|
}
|
|
12
12
|
/** The operator's disclosure: everyone's tokens, or one token. Blank fields use the default shown. */
|
|
13
|
-
export function requestLimitsHtml(db, tokens,
|
|
13
|
+
export function requestLimitsHtml(db, tokens, now) {
|
|
14
14
|
const overrides = limitOverrides(db);
|
|
15
15
|
const everyone = overrides.get("*") ?? { readPerMinute: null, actPerMinute: null, perDay: null };
|
|
16
|
-
const field = (name, label, value, placeholder, max) => `<label>${label}<input type="number" name="${name}" min="1" max="${max}" step="1" inputmode="numeric" value="${value === null ? "" : value}" placeholder="${placeholder}"></label>`;
|
|
17
|
-
const password = `<label>Your Toolroll password<input type="password" name="password" autocomplete="current-password"></label>`;
|
|
18
|
-
const buttons = `<div class="actions"><button name="action" value="save">Save limits</button><button class="secondary" name="action" value="clear">Use defaults</button></div>`;
|
|
16
|
+
const field = (name, label, value, placeholder, max) => html `<label>${label}<input type="number" name="${name}" min="1" max="${max}" step="1" inputmode="numeric" value="${value === null ? "" : value}" placeholder="${placeholder}"></label>`;
|
|
17
|
+
const password = html `<label>Your Toolroll password<input type="password" name="password" autocomplete="current-password"></label>`;
|
|
18
|
+
const buttons = html `<div class="actions"><button name="action" value="save">Save limits</button><button class="secondary" name="action" value="clear">Use defaults</button></div>`;
|
|
19
19
|
const live = tokens.filter(one => one.revokedAt === null && Date.parse(one.expiresAt) > now);
|
|
20
|
-
const installation =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const one = live.length === 0 ? "" :
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return `<details class="card"><summary>Request limits</summary><div class="limits">${installation}${one}</div></details>`;
|
|
20
|
+
const installation = postForm("/settings/request-limits", html `\
|
|
21
|
+
<h3>Everyone's tokens</h3><div class="pair">${field("read-per-minute", "Read tokens, a minute", everyone.readPerMinute, String(REQUEST_BUDGET_DEFAULTS.read), PER_MINUTE_MAX)}\
|
|
22
|
+
${field("act-per-minute", "Act tokens, a minute", everyone.actPerMinute, String(REQUEST_BUDGET_DEFAULTS.act), PER_MINUTE_MAX)}</div>\
|
|
23
|
+
${field("per-day", "Each token, a day", everyone.perDay, String(REQUEST_BUDGET_DEFAULTS.day), PER_DAY_MAX)}${password}${buttons}`, { hidden: { target: "*" } });
|
|
24
|
+
const one = live.length === 0 ? "" : postForm("/settings/request-limits", html `\
|
|
25
|
+
<h3>One token</h3><label>Token<select name="target">${live.map(row => {
|
|
26
|
+
const set = overrides.get(row.id);
|
|
27
|
+
return html `<option value="${row.id}">${row.name} (${row.account}, ${row.access === "act" ? "act" : "read"})${set === undefined ? "" : " · own limits"}</option>`;
|
|
28
|
+
})}</select></label>\
|
|
29
|
+
<div class="pair">${field("per-minute", "A minute", null, "Everyone's", PER_MINUTE_MAX)}${field("per-day", "A day", null, "Everyone's", PER_DAY_MAX)}</div>${password}${buttons}`);
|
|
30
|
+
return html `<details class="card"><summary>Request limits</summary><div class="limits">${installation}${one}</div></details>`;
|
|
31
31
|
}
|
package/dist/result-review.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Nothing here reads a database or renders a full page. The server
|
|
6
6
|
* assembles the same verified records it already reads (handoff, proof,
|
|
7
7
|
* diff, matrix, publication, report) into `SharedResultFacts`; every
|
|
8
|
-
* surface prints those facts through `
|
|
8
|
+
* surface prints those facts through `resultFactsAttributeMap` (as html attributes), so a test —
|
|
9
9
|
* or a person — can check that chat, run detail, and review agree on the
|
|
10
10
|
* run, its head, its checks, its caveats, and its publication.
|
|
11
11
|
*
|
|
@@ -141,8 +141,7 @@ export type SharedResultFacts = {
|
|
|
141
141
|
/** The shared facts as the panel's data attributes, unescaped (the rebuilt
|
|
142
142
|
* result page sets them through React). */
|
|
143
143
|
export declare function resultFactsAttributeMap(facts: SharedResultFacts): Record<string, string>;
|
|
144
|
-
|
|
145
|
-
/** The shared fact names, in the order `resultFactsAttributes` writes them. */
|
|
144
|
+
/** The shared fact names, in the order `resultFactsAttributeMap` lists them. */
|
|
146
145
|
export declare const RESULT_FACT_KEYS: readonly ["run", "head", "base", "head-source", "checks", "caveats", "evidence", "publication"];
|
|
147
146
|
/** Parse the shared facts back — the test-side and proof-side reader.
|
|
148
147
|
* Only the shared keys are read; a panel's own presentation attributes
|
package/dist/result-review.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Nothing here reads a database or renders a full page. The server
|
|
6
6
|
* assembles the same verified records it already reads (handoff, proof,
|
|
7
7
|
* diff, matrix, publication, report) into `SharedResultFacts`; every
|
|
8
|
-
* surface prints those facts through `
|
|
8
|
+
* surface prints those facts through `resultFactsAttributeMap` (as html attributes), so a test —
|
|
9
9
|
* or a person — can check that chat, run detail, and review agree on the
|
|
10
10
|
* run, its head, its checks, its caveats, and its publication.
|
|
11
11
|
*
|
|
@@ -126,10 +126,7 @@ export function resultFactsAttributeMap(facts) {
|
|
|
126
126
|
"data-result-publication": facts.publicationState,
|
|
127
127
|
};
|
|
128
128
|
}
|
|
129
|
-
|
|
130
|
-
return Object.entries(resultFactsAttributeMap(facts)).map(([name, value]) => ` ${name}="${escapeAttribute(value)}"`).join("");
|
|
131
|
-
}
|
|
132
|
-
/** The shared fact names, in the order `resultFactsAttributes` writes them. */
|
|
129
|
+
/** The shared fact names, in the order `resultFactsAttributeMap` lists them. */
|
|
133
130
|
export const RESULT_FACT_KEYS = ["run", "head", "base", "head-source", "checks", "caveats", "evidence", "publication"];
|
|
134
131
|
/** Parse the shared facts back — the test-side and proof-side reader.
|
|
135
132
|
* Only the shared keys are read; a panel's own presentation attributes
|
|
@@ -426,9 +423,6 @@ export const RESULT_REVIEW_SCRIPT = String.raw `
|
|
|
426
423
|
}
|
|
427
424
|
}
|
|
428
425
|
})();`;
|
|
429
|
-
function escapeAttribute(text) {
|
|
430
|
-
return text.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
431
|
-
}
|
|
432
426
|
function unescapeAttribute(text) {
|
|
433
|
-
return text.replace(/"/g, '"').replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&");
|
|
427
|
+
return text.replace(/"/g, '"').replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&");
|
|
434
428
|
}
|
package/dist/retention-ui.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings → Retention (v105): how long each kind of data is kept, and what
|
|
3
|
+
* the next daily sweep would remove. An instance operator's page; changes
|
|
4
|
+
* take a step-up.
|
|
5
|
+
*/
|
|
6
|
+
import { type Html } from "./html.js";
|
|
1
7
|
import { type RetentionCount, type RetentionKind, type RetentionPeriods } from "./retention.js";
|
|
2
8
|
export declare const RETENTION_CSS: string;
|
|
3
9
|
/** `chosen`: the kinds someone chose a period for; the rest keep their default. */
|
|
@@ -11,4 +17,4 @@ export type RetentionView = {
|
|
|
11
17
|
export declare function retentionHtml(view: RetentionView, notice: {
|
|
12
18
|
said?: string | null;
|
|
13
19
|
problem?: string | null;
|
|
14
|
-
}):
|
|
20
|
+
}): Html;
|
package/dist/retention-ui.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* the next daily sweep would remove. An instance operator's page; changes
|
|
4
4
|
* take a step-up.
|
|
5
5
|
*/
|
|
6
|
+
import { html, postForm } from "./html.js";
|
|
6
7
|
import { bytesWords } from "./storage.js";
|
|
7
8
|
import { RETENTION_KINDS, countWords, periodChoices, periodLabel } from "./retention.js";
|
|
8
|
-
const e = (value) => String(value ?? "").replace(/[&<>"']/g, c => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" })[c]);
|
|
9
9
|
export const RETENTION_CSS = `.retention{max-width:720px;min-width:0}.retention-next{margin:0 0 16px}` +
|
|
10
10
|
`.retention form{display:grid;gap:0}.retention .kind{display:grid;grid-template-columns:minmax(0,1fr) 11rem;gap:4px 16px;align-items:center;padding:12px 0;border-bottom:1px solid var(--border)}` +
|
|
11
11
|
`.retention .kind .name{font-weight:500;font-size:.875rem}.retention .kind .meta{grid-column:1;margin:0}.retention .kind select{grid-column:2;grid-row:1/span 2;width:100%;min-height:44px}` +
|
|
@@ -23,17 +23,13 @@ function nextWords(view) {
|
|
|
23
23
|
return `The next daily sweep removes ${listWords(due.map(countWords))} (about ${bytesWords(bytes)}).`;
|
|
24
24
|
}
|
|
25
25
|
export function retentionHtml(view, notice) {
|
|
26
|
-
const note = notice.problem ? `<p class="problem" role="alert">${
|
|
26
|
+
const note = notice.problem ? html `<p class="problem" role="alert">${notice.problem}</p>` : notice.said ? html `<p role="status">${notice.said}</p>` : "";
|
|
27
27
|
const rows = RETENTION_KINDS.map(({ kind, label, detail }) => {
|
|
28
28
|
const current = view.periods[kind];
|
|
29
29
|
const chosen = view.chosen.includes(kind);
|
|
30
|
-
const options = periodChoices(kind, current).map(days => `<option value="${days === null ? "forever" : days}"${days === current ?
|
|
31
|
-
return `<div class="kind" data-kind="${kind}"><label class="name" for="keep-${kind}">${
|
|
32
|
-
})
|
|
33
|
-
const last = view.lastSweep === null ? "" : ` Last sweep ${
|
|
34
|
-
return `<article class="retention">${note}<p class="retention-next" data-retention-next>${
|
|
35
|
-
`<form method="post" action="/settings/retention"><input type="hidden" name="csrf" value="${e(view.csrf)}">${rows}` +
|
|
36
|
-
`<label class="step-up">Your Toolroll password<input type="password" name="password" autocomplete="current-password" required></label>` +
|
|
37
|
-
`<button type="submit">Save</button></form>` +
|
|
38
|
-
`<p class="meta">Never removed: the action ledger, and anything a task still needs (unfinished tasks, results Ready for review, anything on hold).</p></article>`;
|
|
30
|
+
const options = periodChoices(kind, current).map(days => html `<option value="${days === null ? "forever" : days}"${days === current ? html ` selected` : ""}>${periodLabel(kind, days, chosen || days !== current)}</option>`);
|
|
31
|
+
return html `<div class="kind" data-kind="${kind}"><label class="name" for="keep-${kind}">${label}</label><p class="meta">${detail}</p><select id="keep-${kind}" name="${kind}">${options}</select></div>`;
|
|
32
|
+
});
|
|
33
|
+
const last = view.lastSweep === null ? "" : ` Last sweep ${view.lastSweep.slice(0, 10)}.`;
|
|
34
|
+
return html `<article class="retention">${note}<p class="retention-next" data-retention-next>${nextWords(view)}${last}</p>${postForm("/settings/retention", html `${rows}<label class="step-up">Your Toolroll password<input type="password" name="password" autocomplete="current-password" required></label><button type="submit">Save</button>`)}<p class="meta">Never removed: the action ledger, and anything a task still needs (unfinished tasks, results Ready for review, anything on hold).</p></article>`;
|
|
39
35
|
}
|
package/dist/retention.js
CHANGED
|
@@ -174,7 +174,7 @@ export function retentionPlan(store, evidenceRoot, now, periods = store.retentio
|
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
if (periods.chat !== null) {
|
|
177
|
-
const rows = db.prepare(`SELECT m.id AS id, length(m.text) + COALESCE(length(m.activity), 0) + 64 AS bytes FROM
|
|
177
|
+
const rows = db.prepare(`SELECT m.id AS id, length(m.text) + COALESCE(length(m.activity), 0) + 64 AS bytes FROM lead_message m JOIN lead_thread th ON th.id = m.thread
|
|
178
178
|
WHERE m.created_at < ?
|
|
179
179
|
AND NOT EXISTS (SELECT 1 FROM team_message tm WHERE tm.message = m.id AND tm.status IN ('queued', 'running', 'uncertain'))
|
|
180
180
|
AND NOT EXISTS (SELECT 1 FROM mate_turn turn WHERE turn.id = m.turn AND turn.state IN ('queued', 'running'))
|
|
@@ -263,10 +263,10 @@ export function sweepRetention(store, evidenceRoot, now, actor = "worker") {
|
|
|
263
263
|
}
|
|
264
264
|
if (periods.chat !== null) {
|
|
265
265
|
const team = db.prepare("DELETE FROM team_message WHERE message = ? AND status NOT IN ('queued', 'running', 'uncertain')");
|
|
266
|
-
const message = db.prepare("DELETE FROM
|
|
267
|
-
const asked = db.prepare("SELECT turn FROM
|
|
266
|
+
const message = db.prepare("DELETE FROM lead_message WHERE id = ? AND NOT EXISTS (SELECT 1 FROM team_message WHERE message = ?)");
|
|
267
|
+
const asked = db.prepare("SELECT turn FROM lead_message WHERE id = ? AND role = 'assistant' AND turn IS NOT NULL");
|
|
268
268
|
// The lead's question goes with the reply that asked it; its buttons then say it expired.
|
|
269
|
-
const ask = db.prepare("DELETE FROM
|
|
269
|
+
const ask = db.prepare("DELETE FROM lead_ask WHERE turn = ? AND NOT EXISTS (SELECT 1 FROM lead_message WHERE turn = ? AND role = 'assistant')");
|
|
270
270
|
for (const one of plan.items.chat) {
|
|
271
271
|
team.run(one.id);
|
|
272
272
|
const turn = asked.get(one.id)?.["turn"];
|
package/dist/scope.d.ts
CHANGED
|
@@ -304,10 +304,10 @@ export type Scope = SavedScopeTerms & {
|
|
|
304
304
|
* non-null verdict, so filtering, defaulting, or coercion can never
|
|
305
305
|
* turn a corrupt row into authority. Undefined on a hand-built scope. */
|
|
306
306
|
termsProblem?: string | null;
|
|
307
|
-
/** Who wrote the text (mate arc, ruling 2): a confirmed
|
|
307
|
+
/** Who wrote the text (mate arc, ruling 2): a confirmed lead proposal,
|
|
308
308
|
* the coordinator, a scout, or a person (null). Read raw and proved by
|
|
309
309
|
* `termsProblem` — a word outside these is a stated problem, never a
|
|
310
|
-
* value that slips past the
|
|
310
|
+
* value that slips past the lead quarantine at a mode seal. */
|
|
311
311
|
proposedVia?: "mate" | "coordinator" | "scout" | null;
|
|
312
312
|
};
|
|
313
313
|
export type Approval = {
|
package/dist/scout-report.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The scout's terminal handoff (mate arc §10), read against the report contract (src/contracts/scout-report.ts) with
|
|
3
3
|
* the 422 rule: fail closed, every problem reported at once, each naming its path (`items[0].url: must be an http or
|
|
4
4
|
* https address`), stable reasons, caps and control-character rejection on every string. A report reaches the task
|
|
5
|
-
* page, the ledger, the terminal, and — through
|
|
5
|
+
* page, the ledger, the terminal, and — through leadView — the lead; and each follow-up becomes a filing's title and
|
|
6
6
|
* goal at one tap, so it gets the park discipline exactly as the plan does.
|
|
7
7
|
*/
|
|
8
8
|
import { type ContractProblem } from "./contracts/contract.js";
|
package/dist/scout-report.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The scout's terminal handoff (mate arc §10), read against the report contract (src/contracts/scout-report.ts) with
|
|
3
3
|
* the 422 rule: fail closed, every problem reported at once, each naming its path (`items[0].url: must be an http or
|
|
4
4
|
* https address`), stable reasons, caps and control-character rejection on every string. A report reaches the task
|
|
5
|
-
* page, the ledger, the terminal, and — through
|
|
5
|
+
* page, the ledger, the terminal, and — through leadView — the lead; and each follow-up becomes a filing's title and
|
|
6
6
|
* goal at one tap, so it gets the park discipline exactly as the plan does.
|
|
7
7
|
*/
|
|
8
8
|
import { contractProblemOf } from "./contracts/contract.js";
|
package/dist/serve.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ServeOptions } from "./server/http.js";
|
|
2
|
+
import { type DecisionServer } from "./server/session.js";
|
|
2
3
|
export declare function createDecisionServer(options: ServeOptions): DecisionServer;
|
|
3
|
-
export {
|
|
4
|
+
export { PAGE_CSS, pinnedTheme, SENSITIVE_INPUT } from "./server/chrome.js";
|
|
5
|
+
export { redactedPath, SHUTDOWN_WAIT_MS, type ServeOptions } from "./server/http.js";
|
|
6
|
+
export { TASK_COMPOSER_MODES, type TaskComposerMode } from "./server/render-chat.js";
|
|
7
|
+
export { inboxFingerprints, parseInboxTab, queueScript, type InboxTab } from "./server/render-pages.js";
|
|
8
|
+
export { ssoStepUps, wrongHostPage } from "./server/render-people.js";
|
|
9
|
+
export { diffFileAnchor, editorFileHref, needActionOf, orderChangedFiles, plainConclusionOf, rankReviewQueue, reviewFilePriority, reviewPriorityOf, runFactsFragment, withinSignedTouches, type ReviewFileRow, type ReviewPriority, type ReviewQueueFacts } from "./server/render-results.js";
|
|
10
|
+
export { settingsGroups, settingsTiles } from "./server/render-settings.js";
|
|
11
|
+
export { decisionAnswerScript, earlierVersionsWords, revisionLineageWords, type RouteView } from "./server/render-tasks.js";
|
|
12
|
+
export { SIGN_IN_LINK_MS, SIGN_IN_LINK_PATH, type DecisionServer } from "./server/session.js";
|