toolroll 0.9.92 → 0.9.94
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 +87 -0
- package/dist/activity-line.d.ts +7 -4
- package/dist/activity-line.js +9 -7
- package/dist/agent-fence.d.ts +4 -0
- package/dist/agent-fence.js +4 -1
- package/dist/approval-authority.d.ts +7 -1
- package/dist/approval-authority.js +11 -2
- package/dist/approval-password.d.ts +31 -0
- package/dist/approval-password.js +26 -0
- package/dist/assignment-status.d.ts +1 -1
- package/dist/assignment-ui.js +3 -3
- package/dist/assignment.js +16 -3
- package/dist/boot-identity.d.ts +2 -1
- package/dist/boot-identity.js +6 -4
- package/dist/bounded-spawn.d.ts +57 -0
- package/dist/bounded-spawn.js +220 -0
- package/dist/browser/terminal.js +42 -42
- package/dist/browser/workspace.css +2 -2
- package/dist/browser/workspace.js +26 -26
- package/dist/browser-crew.js +2 -2
- package/dist/browser-shell.d.ts +1 -1
- package/dist/browser-shell.js +2 -2
- package/dist/browser-workspace.d.ts +48 -7
- package/dist/browser-workspace.js +3 -3
- package/dist/builder-restart.d.ts +21 -0
- package/dist/builder-restart.js +50 -0
- package/dist/builder.d.ts +4 -0
- package/dist/builder.js +73 -25
- package/dist/chat-acceptance.js +1 -1
- package/dist/chat-actions.d.ts +12 -2
- package/dist/chat-actions.js +25 -2
- package/dist/chat-channel.js +11 -0
- package/dist/chat-decide.d.ts +7 -2
- package/dist/chat-decide.js +37 -9
- package/dist/chat-quiet.js +3 -3
- package/dist/chat-voice.d.ts +1 -1
- package/dist/chat-voice.js +2 -2
- package/dist/check-facts.d.ts +126 -0
- package/dist/check-facts.js +318 -0
- package/dist/check-failure.d.ts +22 -3
- package/dist/check-failure.js +57 -13
- package/dist/check-levels-ui.d.ts +4 -0
- package/dist/check-levels-ui.js +10 -1
- package/dist/check-load.d.ts +85 -0
- package/dist/check-load.js +147 -0
- package/dist/check-only-standing.d.ts +36 -0
- package/dist/check-only-standing.js +39 -0
- package/dist/check-only.d.ts +15 -0
- package/dist/check-only.js +99 -0
- package/dist/check-report.d.ts +7 -0
- package/dist/check-report.js +4 -3
- package/dist/check-stamp.d.ts +46 -0
- package/dist/check-stamp.js +93 -0
- package/dist/checkout-cleanup.d.ts +36 -5
- package/dist/checkout-cleanup.js +166 -14
- package/dist/cli-help.d.ts +4 -1
- package/dist/cli-help.js +47 -30
- package/dist/cli.js +16 -1
- package/dist/code-extract.d.ts +44 -0
- package/dist/code-extract.js +88 -0
- package/dist/code-map-acts.d.ts +24 -0
- package/dist/code-map-acts.js +53 -0
- package/dist/code-map-admission.d.ts +52 -0
- package/dist/code-map-admission.js +295 -0
- package/dist/code-map-build.d.ts +63 -0
- package/dist/code-map-build.js +415 -0
- package/dist/code-map-cli.d.ts +153 -0
- package/dist/code-map-cli.js +103 -0
- package/dist/code-map-main.d.ts +1 -0
- package/dist/code-map-main.js +48 -0
- package/dist/code-map-read.d.ts +106 -0
- package/dist/code-map-read.js +171 -0
- package/dist/code-map-report.d.ts +37 -0
- package/dist/code-map-report.js +95 -0
- package/dist/code-map-shape.d.ts +172 -0
- package/dist/code-map-shape.js +327 -0
- package/dist/code-map-store.d.ts +136 -0
- package/dist/code-map-store.js +233 -0
- package/dist/coding-provider.d.ts +2 -0
- package/dist/coding-provider.js +3 -2
- package/dist/coding-update.js +3 -2
- package/dist/coding-workspace.js +4 -4
- package/dist/console-chrome.js +2 -2
- package/dist/containment.d.ts +5 -0
- package/dist/containment.js +14 -1
- package/dist/contracts/chat-actions.d.ts +9 -0
- package/dist/contracts/chat-actions.js +2 -0
- package/dist/contracts/cli.d.ts +52 -0
- package/dist/contracts/cli.js +4 -0
- package/dist/contracts/console-api.d.ts +12 -5
- package/dist/contracts/console-api.js +12 -5
- package/dist/contracts/gateway-tools.d.ts +17 -0
- package/dist/contracts/gateway-tools.js +3 -1
- package/dist/contracts/lead-tools.d.ts +61 -0
- package/dist/contracts/lead-tools.js +10 -1
- package/dist/contracts/project-knowledge.d.ts +38 -5
- package/dist/contracts/project-knowledge.js +11 -5
- package/dist/contracts/project-memory.d.ts +3 -1
- package/dist/contracts/project-memory.js +3 -2
- package/dist/contracts/release-check.d.ts +25 -1
- package/dist/contracts/release-check.js +19 -0
- package/dist/contracts/storage.d.ts +14 -0
- package/dist/contracts/storage.js +3 -1
- package/dist/contracts/store-json.d.ts +2 -0
- package/dist/contracts/youiyoux-request.d.ts +1 -1
- package/dist/contracts/youiyoux-request.js +1 -1
- package/dist/desktop-access.js +6 -2
- package/dist/desktop-update.d.ts +2 -2
- package/dist/desktop-update.js +13 -9
- package/dist/dispatch.js +18 -15
- package/dist/dispose.js +8 -2
- package/dist/easy-start.js +2 -3
- package/dist/eval-hooks.d.ts +55 -0
- package/dist/eval-hooks.js +227 -4
- package/dist/evals.js +2 -1
- package/dist/fast-start.d.ts +136 -0
- package/dist/fast-start.js +431 -0
- package/dist/fast-terms.d.ts +9 -0
- package/dist/fast-terms.js +23 -0
- package/dist/fenced-check-coverage.d.ts +62 -0
- package/dist/fenced-check-coverage.js +54 -0
- package/dist/first-run.js +1 -1
- package/dist/flaky-ci.d.ts +31 -0
- package/dist/flaky-ci.js +149 -0
- package/dist/flaky-cli.d.ts +60 -0
- package/dist/flaky-cli.js +60 -0
- package/dist/flaky.d.ts +83 -0
- package/dist/flaky.js +264 -0
- package/dist/flow-card-task.js +3 -0
- package/dist/flow-triggers.d.ts +1 -1
- package/dist/flow-triggers.js +1 -1
- package/dist/github-import.d.ts +62 -0
- package/dist/github-import.js +146 -0
- package/dist/guides.js +15 -10
- package/dist/invoke.d.ts +5 -1
- package/dist/invoke.js +49 -14
- package/dist/job-object-helper.ps1 +10 -3
- package/dist/keymap.d.ts +41 -0
- package/dist/keymap.js +51 -0
- package/dist/knowledge-cli.js +1 -1
- package/dist/knowledge-ui.d.ts +21 -4
- package/dist/knowledge-ui.js +75 -7
- package/dist/laptop-background.d.ts +16 -0
- package/dist/laptop-background.js +108 -2
- package/dist/lead-context.js +1 -1
- package/dist/lead-contract.d.ts +1 -1
- package/dist/lead-contract.js +2 -2
- package/dist/lead-progress.js +3 -0
- package/dist/lead-status.d.ts +2 -0
- package/dist/lead-status.js +6 -2
- package/dist/lead-tools.js +51 -2
- package/dist/lead.js +1 -1
- package/dist/lesson-notes.d.ts +81 -0
- package/dist/lesson-notes.js +336 -0
- package/dist/limits-ui.js +1 -1
- package/dist/local-owner.d.ts +1 -1
- package/dist/local-owner.js +11 -0
- package/dist/machine-check.d.ts +16 -0
- package/dist/machine-check.js +26 -0
- package/dist/machine-identity.d.ts +75 -0
- package/dist/machine-identity.js +170 -0
- package/dist/mcp-core.js +11 -1
- package/dist/memory-cli.d.ts +300 -1
- package/dist/memory-cli.js +62 -9
- package/dist/memory-pass.d.ts +16 -0
- package/dist/memory-pass.js +67 -3
- package/dist/memory-tidy.d.ts +181 -0
- package/dist/memory-tidy.js +523 -0
- package/dist/memory-use.d.ts +35 -0
- package/dist/memory-use.js +109 -0
- package/dist/merge-checklist.d.ts +55 -0
- package/dist/merge-checklist.js +182 -0
- package/dist/needs-you.d.ts +32 -13
- package/dist/needs-you.js +108 -49
- package/dist/nightly-github.d.ts +2 -0
- package/dist/nightly-github.js +4 -4
- package/dist/operate-remote-arguments.js +6 -1
- package/dist/operate-remote.js +3 -1
- package/dist/operate.d.ts +6 -1
- package/dist/operate.js +540 -70
- package/dist/phase-routing.js +2 -2
- package/dist/plain-schema.d.ts +23 -0
- package/dist/plain-schema.js +94 -0
- package/dist/plain-words.d.ts +20 -0
- package/dist/plain-words.js +66 -0
- package/dist/planner.js +2 -1
- package/dist/process-liveness.d.ts +2 -0
- package/dist/process-liveness.js +61 -17
- package/dist/project-delete-ui.d.ts +7 -2
- package/dist/project-delete-ui.js +12 -1
- package/dist/project-delete.js +13 -2
- package/dist/project-knowledge.d.ts +18 -11
- package/dist/project-knowledge.js +39 -9
- package/dist/project-learning.d.ts +2 -1
- package/dist/project-learning.js +15 -45
- package/dist/project-memory.d.ts +5 -0
- package/dist/project-memory.js +22 -2
- package/dist/proof.js +30 -5
- package/dist/provider-auth.js +1 -1
- package/dist/publish.js +9 -1
- package/dist/pull-request-flow.js +5 -0
- package/dist/push.d.ts +26 -3
- package/dist/push.js +55 -15
- package/dist/release-adapters.d.ts +9 -0
- package/dist/release-adapters.js +87 -1
- package/dist/release-approval.d.ts +191 -0
- package/dist/release-approval.js +382 -0
- package/dist/release-auto.js +26 -17
- package/dist/release-card.d.ts +74 -6
- package/dist/release-card.js +179 -23
- package/dist/release-carry.d.ts +7 -2
- package/dist/release-carry.js +39 -9
- package/dist/release-cli.d.ts +4 -0
- package/dist/release-cli.js +38 -23
- package/dist/release-coverage.js +1 -1
- package/dist/release-next.d.ts +48 -0
- package/dist/release-next.js +161 -0
- package/dist/release.d.ts +50 -1
- package/dist/release.js +118 -11
- package/dist/remote-destination.d.ts +36 -0
- package/dist/remote-destination.js +217 -0
- package/dist/remote-main.d.ts +48 -0
- package/dist/remote-main.js +84 -5
- package/dist/repository-context.d.ts +3 -2
- package/dist/repository-context.js +112 -70
- package/dist/restart-certification.d.ts +1 -0
- package/dist/restart-certification.js +8 -6
- package/dist/result-acts.d.ts +29 -21
- package/dist/result-acts.js +36 -25
- package/dist/result-follow-ups.d.ts +2 -2
- package/dist/result-follow-ups.js +18 -4
- package/dist/result-review.d.ts +1 -1
- package/dist/route-change-check.d.ts +4 -0
- package/dist/route-change-check.js +13 -0
- package/dist/route-change.d.ts +22 -0
- package/dist/route-change.js +89 -0
- package/dist/route-hooks.js +3 -2
- package/dist/route-results.d.ts +6 -1
- package/dist/route-results.js +14 -5
- package/dist/run-closeout.d.ts +1 -1
- package/dist/run-closeout.js +7 -5
- package/dist/runner-process.js +3 -2
- package/dist/runner.js +2 -1
- package/dist/scope.d.ts +6 -1
- package/dist/scope.js +22 -9
- package/dist/serve.d.ts +1 -1
- package/dist/serve.js +24 -18
- package/dist/server/chat.js +14 -12
- package/dist/server/chrome.d.ts +1 -1
- package/dist/server/chrome.js +26 -35
- package/dist/server/console.css +23 -0
- package/dist/server/guards.js +4 -0
- package/dist/server/home.d.ts +6 -0
- package/dist/server/home.js +21 -13
- package/dist/server/http.js +1 -1
- package/dist/server/kit.js +1 -1
- package/dist/server/merge-ready-view.d.ts +10 -0
- package/dist/server/merge-ready-view.js +30 -0
- package/dist/server/pages-assets.d.ts +1 -0
- package/dist/server/pages-assets.js +8 -5
- package/dist/server/pages.js +103 -82
- package/dist/server/render-chat.js +2 -2
- package/dist/server/render-code-map.d.ts +30 -0
- package/dist/server/render-code-map.js +137 -0
- package/dist/server/render-flaky.d.ts +20 -0
- package/dist/server/render-flaky.js +59 -0
- package/dist/server/render-history.js +1 -1
- package/dist/server/render-new-task.d.ts +26 -1
- package/dist/server/render-new-task.js +30 -5
- package/dist/server/render-pages.d.ts +1 -175
- package/dist/server/render-pages.js +38 -313
- package/dist/server/render-projects.d.ts +2 -1
- package/dist/server/render-projects.js +9 -7
- package/dist/server/render-release.d.ts +19 -0
- package/dist/server/render-release.js +84 -0
- package/dist/server/render-results.d.ts +2 -2
- package/dist/server/render-results.js +71 -73
- package/dist/server/render-tasks.d.ts +13 -2
- package/dist/server/render-tasks.js +156 -139
- package/dist/server/retired-routes.d.ts +17 -0
- package/dist/server/retired-routes.js +53 -0
- package/dist/server/route-table.d.ts +4 -1
- package/dist/server/route-table.js +52 -13
- package/dist/server/settings.js +129 -22
- package/dist/server/task-views.js +61 -26
- package/dist/server/tasks.d.ts +17 -6
- package/dist/server/tasks.js +273 -338
- package/dist/server/welcome.js +1 -1
- package/dist/settings-groups-ui.js +1 -1
- package/dist/setup-guide.d.ts +2 -2
- package/dist/stop-proof.d.ts +67 -0
- package/dist/stop-proof.js +295 -0
- package/dist/storage-sweep-process.js +1 -1
- package/dist/storage-sweep.d.ts +5 -3
- package/dist/storage-sweep.js +30 -9
- package/dist/storage-ui.js +28 -17
- package/dist/storage.d.ts +27 -2
- package/dist/storage.js +39 -2
- package/dist/store.d.ts +148 -34
- package/dist/store.js +626 -177
- package/dist/surface.js +46 -5
- package/dist/sweep-quarantine.d.ts +1 -0
- package/dist/sweep-quarantine.js +6 -4
- package/dist/tamper-scan.d.ts +4 -0
- package/dist/tamper-scan.js +90 -0
- package/dist/task-aliases.d.ts +5 -0
- package/dist/task-aliases.js +9 -0
- package/dist/task-control.js +4 -1
- package/dist/task-outcome-cli.d.ts +2 -0
- package/dist/task-outcome-cli.js +36 -17
- package/dist/task-sizing.d.ts +5 -0
- package/dist/task-sizing.js +2 -0
- package/dist/task-source.d.ts +7 -0
- package/dist/task-source.js +14 -0
- package/dist/task-status.d.ts +9 -0
- package/dist/task-status.js +40 -49
- package/dist/teardown-git.d.ts +16 -0
- package/dist/teardown-git.js +63 -5
- package/dist/telegram-progress.js +5 -3
- package/dist/telegram-status.js +6 -4
- package/dist/test-infra.d.ts +8 -0
- package/dist/test-infra.js +18 -0
- package/dist/tidy.js +1 -1
- package/dist/toolroll-update-ui.js +2 -2
- package/dist/toolroll-update.js +18 -5
- package/dist/tui-contract.d.ts +24 -0
- package/dist/tui-source.js +67 -8
- package/dist/tui.js +51 -51
- package/dist/vanished-retry.d.ts +30 -0
- package/dist/vanished-retry.js +174 -0
- package/dist/work-index.d.ts +2 -0
- package/dist/work-index.js +82 -70
- package/dist/work-summary.d.ts +2 -2
- package/dist/work-summary.js +2 -0
- package/dist/workspace-ui.d.ts +4 -2
- package/dist/workspace-ui.js +28 -22
- package/dist/worktree.d.ts +12 -3
- package/dist/worktree.js +68 -13
- package/package.json +1 -1
- package/dist/server/render-next.d.ts +0 -63
- package/dist/server/render-next.js +0 -109
package/dist/tui-source.js
CHANGED
|
@@ -9,11 +9,15 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
11
|
import { assignmentOf } from "./assignment.js";
|
|
12
|
+
import { checklistLines, mergeChecklistOf } from "./merge-checklist.js";
|
|
12
13
|
import { runAsLocalOwner } from "./local-owner.js";
|
|
13
14
|
import { snapshotLiveRuns } from "./peek-cli.js";
|
|
14
15
|
import { loadProjectRegistry } from "./repos.js";
|
|
15
16
|
import { describeScope } from "./scope.js";
|
|
16
17
|
import { localModeOf, openStoreReadOnly } from "./store.js";
|
|
18
|
+
import { routeChangeOf } from "./route-change.js";
|
|
19
|
+
import { flakyCount } from "./flaky.js";
|
|
20
|
+
import { memoryWaiting } from "./lesson-notes.js";
|
|
17
21
|
import { terminalText } from "./terminal-text.js";
|
|
18
22
|
import { welcomeHere, welcomeLines } from "./welcome-facts.js";
|
|
19
23
|
const record = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
@@ -26,13 +30,17 @@ function refusalOf(envelope) {
|
|
|
26
30
|
const message = shown(envelope.message, "That was refused.");
|
|
27
31
|
return { ok: false, message, needsPassword: envelope.reason === "refused" || envelope.reason === "machine-proof" || envelope.reason === "person-required" || /password/i.test(message) };
|
|
28
32
|
}
|
|
33
|
+
const routeLines = (store, id) => { const words = routeChangeOf(store, id); return words === null ? [] : [words]; };
|
|
29
34
|
export function createTuiSource(options) {
|
|
30
35
|
const file = options.databaseFile;
|
|
31
36
|
const clock = options.clock ?? (() => new Date());
|
|
32
37
|
const evidenceRoot = join(dirname(file), "evidence");
|
|
33
38
|
const tails = new Map();
|
|
34
39
|
let reader = null;
|
|
40
|
+
let closed = false;
|
|
35
41
|
const read = () => {
|
|
42
|
+
if (closed)
|
|
43
|
+
return null;
|
|
36
44
|
reader ??= openStoreReadOnly(file);
|
|
37
45
|
return reader;
|
|
38
46
|
};
|
|
@@ -74,7 +82,7 @@ export function createTuiSource(options) {
|
|
|
74
82
|
const store = read();
|
|
75
83
|
const mode = store === null ? null : localModeOf(store);
|
|
76
84
|
const passwordSet = store !== null && mode !== null && store.accountOf(mode.owner)?.passwordSet === true;
|
|
77
|
-
return { rows, needsYou, projects: "error" in registry ? [] : registry.repos, passwordSet };
|
|
85
|
+
return { rows, needsYou, projects: "error" in registry ? [] : registry.repos, passwordSet, learning: store === null ? null : learningLine(store, "error" in registry ? [] : registry.repos, clock()) };
|
|
78
86
|
},
|
|
79
87
|
async task(id) {
|
|
80
88
|
const answer = await command(["task", "show", id]);
|
|
@@ -83,7 +91,7 @@ export function createTuiSource(options) {
|
|
|
83
91
|
const task = record(answer["task"]), work = record(answer["work"]), status = record(work["status"]);
|
|
84
92
|
const store = read();
|
|
85
93
|
const scope = store === null ? null : store.getScope(id);
|
|
86
|
-
const plan = scope === null || scope.approvedDigest === scope.digest ? null : { digest: scope.digest, lines: describeScope(scope).map(line => terminalText(line)) };
|
|
94
|
+
const plan = scope === null || scope.approvedDigest === scope.digest ? null : { digest: scope.digest, lines: [...(store === null ? [] : routeLines(store, id)), ...describeScope(scope)].map(line => terminalText(line)) };
|
|
87
95
|
let hasResult = false;
|
|
88
96
|
try {
|
|
89
97
|
hasResult = store !== null && assignmentOf(store, id, clock(), { principal: "operator", repos: null })?.receipt != null;
|
|
@@ -93,9 +101,18 @@ export function createTuiSource(options) {
|
|
|
93
101
|
}
|
|
94
102
|
const decisions = store === null ? [] : store.listDecisions("unanswered").filter(one => one.taskId === id)
|
|
95
103
|
.map(one => ({ id: one.id, question: terminalText(one.question), options: one.options.map(option => ({ id: option.id, label: terminalText(option.label) })) }));
|
|
104
|
+
// "Can I merge?": the same checklist and lines as `toolroll task ready`, read from the same records.
|
|
105
|
+
let ready = [];
|
|
106
|
+
try {
|
|
107
|
+
const list = !hasResult || store === null ? null : mergeChecklistOf(store, id, clock(), { principal: "operator", repos: null }, evidenceRoot);
|
|
108
|
+
ready = list === null ? [] : checklistLines(list).map(line => terminalText(line));
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
ready = [];
|
|
112
|
+
}
|
|
96
113
|
return {
|
|
97
114
|
id, title: shown(task["title"], id), status: shown(status["label"], words(work["state"])), detail: shown(status["detail"]),
|
|
98
|
-
plan, liveRunId: typeof work["liveRunId"] === "number" ? work["liveRunId"] : null, hasResult, decisions,
|
|
115
|
+
plan, liveRunId: typeof work["liveRunId"] === "number" ? work["liveRunId"] : null, hasResult, decisions, ready,
|
|
99
116
|
};
|
|
100
117
|
},
|
|
101
118
|
live(id) {
|
|
@@ -125,6 +142,10 @@ export function createTuiSource(options) {
|
|
|
125
142
|
argv = ["task", "add", act.text, ...(act.repo === null ? [] : ["--repo", act.repo])];
|
|
126
143
|
done = "Filed. Its plan will be ready for you to approve.";
|
|
127
144
|
break;
|
|
145
|
+
case "build":
|
|
146
|
+
argv = ["task", "new", "--build", act.preview, "--digest", act.digest];
|
|
147
|
+
done = "Building. A builder starts it next.";
|
|
148
|
+
break;
|
|
128
149
|
case "approve":
|
|
129
150
|
argv = ["task", "approve", act.id, "--yes", "--digest", act.digest];
|
|
130
151
|
done = "Approved. An agent starts on it.";
|
|
@@ -135,12 +156,17 @@ export function createTuiSource(options) {
|
|
|
135
156
|
break;
|
|
136
157
|
case "revise":
|
|
137
158
|
argv = ["task", "revise", act.id, "--feedback", act.text];
|
|
138
|
-
done = "
|
|
159
|
+
done = "Sent back with your note.";
|
|
139
160
|
break;
|
|
140
161
|
case "answer":
|
|
141
162
|
argv = ["decide", String(act.decision), "--choose", act.option];
|
|
142
163
|
done = "Answered.";
|
|
143
164
|
break;
|
|
165
|
+
// Retry is today's requeue (the console's Retry), the same command and the same refusals.
|
|
166
|
+
case "retry":
|
|
167
|
+
argv = ["task", "retry", act.id];
|
|
168
|
+
done = "Queued again. A builder starts it next.";
|
|
169
|
+
break;
|
|
144
170
|
case "complete": {
|
|
145
171
|
const store = read();
|
|
146
172
|
let digest;
|
|
@@ -151,32 +177,65 @@ export function createTuiSource(options) {
|
|
|
151
177
|
digest = undefined;
|
|
152
178
|
}
|
|
153
179
|
if (digest === undefined)
|
|
154
|
-
return { ok: false, message: "This task has no finished result to
|
|
180
|
+
return { ok: false, message: "This task has no finished result to accept.", needsPassword: false };
|
|
155
181
|
argv = ["task", "complete", act.id, "--digest", digest];
|
|
156
|
-
done = "
|
|
182
|
+
done = "Accepted.";
|
|
157
183
|
break;
|
|
158
184
|
}
|
|
159
185
|
}
|
|
160
186
|
const answer = await command(argv);
|
|
161
187
|
if (answer.ok !== true)
|
|
162
188
|
return refusalOf(answer);
|
|
163
|
-
const filed = act.kind === "new" ? words(record(answer["task"])["id"], words(answer["id"])) : "";
|
|
189
|
+
const filed = act.kind === "new" ? words(record(answer["task"])["id"], words(answer["id"])) : act.kind === "build" ? words(answer["task"]) : "";
|
|
164
190
|
return { ok: true, message: done, ...(filed === "" ? {} : { id: filed }) };
|
|
165
191
|
},
|
|
192
|
+
async fastTerms(text, repo) {
|
|
193
|
+
if (repo === null)
|
|
194
|
+
return null;
|
|
195
|
+
const answer = await command(["task", "new", text, "--repo", repo, "--preview"]);
|
|
196
|
+
if (answer.ok !== true || answer["eligible"] !== true)
|
|
197
|
+
return null;
|
|
198
|
+
const terms = Array.isArray(answer["terms"]) ? answer["terms"].map(one => ({ label: words(record(one)["label"]), words: words(record(one)["words"]) })) : [];
|
|
199
|
+
return { preview: words(answer["preview"]), digest: words(answer["digest"]), terms };
|
|
200
|
+
},
|
|
166
201
|
async setup() {
|
|
167
202
|
if (setupCache !== null && Date.now() - setupCache.at < 30_000)
|
|
168
203
|
return setupCache.value;
|
|
169
204
|
const store = read();
|
|
170
205
|
if (store === null)
|
|
171
206
|
return null;
|
|
172
|
-
|
|
207
|
+
// The screen can close while this waits on the sign-in checks: the store it holds is gone then, and so is the question.
|
|
208
|
+
const here = await welcomeHere(store, file, clock(), options.check === undefined ? {} : { check: options.check }).catch((problem) => {
|
|
209
|
+
if (closed)
|
|
210
|
+
return null;
|
|
211
|
+
throw problem;
|
|
212
|
+
});
|
|
213
|
+
if (here === null)
|
|
214
|
+
return null;
|
|
173
215
|
const value = here.model.left === 0 ? null : { left: here.model.left, lines: welcomeLines(here.model).map(line => terminalText(line)) };
|
|
174
216
|
setupCache = { at: Date.now(), value };
|
|
175
217
|
return value;
|
|
176
218
|
},
|
|
177
219
|
close() {
|
|
220
|
+
closed = true;
|
|
178
221
|
reader?.close();
|
|
179
222
|
reader = null;
|
|
180
223
|
},
|
|
181
224
|
};
|
|
182
225
|
}
|
|
226
|
+
/** The screen's one line about the learning loops: flaky tests and what waits in project memory, each with its command. */
|
|
227
|
+
function learningLine(store, repos, now) {
|
|
228
|
+
let flaky = 0, memory = 0;
|
|
229
|
+
try {
|
|
230
|
+
for (const repo of repos) {
|
|
231
|
+
flaky += flakyCount(store, repo, now);
|
|
232
|
+
const waiting = memoryWaiting(store, repo);
|
|
233
|
+
memory += waiting.notes + waiting.cleanups;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
const parts = [flaky === 0 ? "" : `${flaky} flaky test${flaky === 1 ? "" : "s"}: open the project's Flaky tests in the browser`, memory === 0 ? "" : `${memory} project memory suggestion${memory === 1 ? "" : "s"}: open Settings → Knowledge`].filter(Boolean);
|
|
240
|
+
return parts.length === 0 ? null : parts.join(" · ");
|
|
241
|
+
}
|