mindweave 3.2.8 → 3.3.0
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/dist/cli/App.js +293 -19
- package/dist/cli/App.js.map +1 -1
- package/dist/cli/altScreen.js +6 -0
- package/dist/cli/altScreen.js.map +1 -1
- package/dist/cli/blockHeights.js +3 -0
- package/dist/cli/blockHeights.js.map +1 -1
- package/dist/cli/chatAnchor.js +17 -0
- package/dist/cli/chatAnchor.js.map +1 -1
- package/dist/cli/components/BlockView.js +10 -1
- package/dist/cli/components/BlockView.js.map +1 -1
- package/dist/cli/components/KeyManager.js +63 -7
- package/dist/cli/components/KeyManager.js.map +1 -1
- package/dist/cli/components/Picker.js +31 -5
- package/dist/cli/components/Picker.js.map +1 -1
- package/dist/cli/components/PromptInput.js +41 -9
- package/dist/cli/components/PromptInput.js.map +1 -1
- package/dist/cli/components/ToolLine.js +6 -0
- package/dist/cli/components/ToolLine.js.map +1 -1
- package/dist/cli/components/WorkGroup.js +27 -10
- package/dist/cli/components/WorkGroup.js.map +1 -1
- package/dist/cli/framebuffer/writer.js +29 -6
- package/dist/cli/framebuffer/writer.js.map +1 -1
- package/dist/cli/help.js +1 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/messageQueue.js +7 -2
- package/dist/cli/messageQueue.js.map +1 -1
- package/dist/cli/pickerSearch.js +59 -0
- package/dist/cli/pickerSearch.js.map +1 -0
- package/dist/cli/selectionGrow.js +86 -3
- package/dist/cli/selectionGrow.js.map +1 -1
- package/dist/cli/toolDisplay.js +20 -5
- package/dist/cli/toolDisplay.js.map +1 -1
- package/dist/cli/transcript.js +24 -7
- package/dist/cli/transcript.js.map +1 -1
- package/dist/cli/wheelStep.js +2 -2
- package/dist/cli/workLines.js +26 -7
- package/dist/cli/workLines.js.map +1 -1
- package/dist/core/turnRunner.js +7 -1
- package/dist/core/turnRunner.js.map +1 -1
- package/dist/dynamo/engine.js +8 -4
- package/dist/dynamo/engine.js.map +1 -1
- package/dist/dynamo/prompt.js +9 -0
- package/dist/dynamo/prompt.js.map +1 -1
- package/dist/memory/compaction.js +15 -3
- package/dist/memory/compaction.js.map +1 -1
- package/dist/memory/localCommand.js +138 -0
- package/dist/memory/localCommand.js.map +1 -0
- package/dist/memory/store.js +4 -1
- package/dist/memory/store.js.map +1 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/tools/detail.js +2 -0
- package/dist/tools/detail.js.map +1 -1
- package/dist/tools/rebuildDetail.js +49 -1
- package/dist/tools/rebuildDetail.js.map +1 -1
- package/dist/tools/runCommand.js +8 -4
- package/dist/tools/runCommand.js.map +1 -1
- package/dist/tools/untrusted.js +7 -0
- package/dist/tools/untrusted.js.map +1 -1
- package/dist/tools/userCommand.js +52 -0
- package/dist/tools/userCommand.js.map +1 -0
- package/dist/tools/viewImage.js +14 -2
- package/dist/tools/viewImage.js.map +1 -1
- package/dist/tools/webSearch.js +42 -20
- package/dist/tools/webSearch.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { localCommandEntry } from "../memory/localCommand.js";
|
|
2
|
+
import { isInteractiveServerCommand } from "./backgroundShells.js";
|
|
3
|
+
import { sessionDetailFull } from "./detail.js";
|
|
4
|
+
import { runCommand } from "./runCommand.js";
|
|
5
|
+
/** Background shells the person started with `!`, by shell manager. Esc stops what the agent started, not these. */
|
|
6
|
+
const userShells = new WeakMap();
|
|
7
|
+
/** Whether a background shell is one the person started themselves. */
|
|
8
|
+
export function isUserShell(shells, id) {
|
|
9
|
+
return !!shells && !!userShells.get(shells)?.has(id);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Run `command` as the person's own and record it in the conversation.
|
|
13
|
+
*
|
|
14
|
+
* Returns what the shell tool answered, for the row to draw, and the entry that was added.
|
|
15
|
+
* The entry goes in AFTER the command ends (or is handed to the background), so a conversation never
|
|
16
|
+
* holds a command that has no result yet. A command stopped with Esc is recorded with whatever it
|
|
17
|
+
* printed, and says so.
|
|
18
|
+
*/
|
|
19
|
+
export async function runUserCommand(session, command, options = {}) {
|
|
20
|
+
// A copy, so the turn that last ran does not leave its (aborted) signal on this one. The forbidden
|
|
21
|
+
// paths and commands are rules for what the AGENT may do; the person typing a command is not
|
|
22
|
+
// the agent, so they do not apply (and nothing asks the person for leave to lift them).
|
|
23
|
+
const governance = session.toolContext.governance;
|
|
24
|
+
const ctx = {
|
|
25
|
+
...session.toolContext,
|
|
26
|
+
abortSignal: options.signal,
|
|
27
|
+
userInitiated: true,
|
|
28
|
+
...(governance ? { governance: { ...governance, forbidden: { patterns: [], commands: [], mcpTools: [], root: governance.forbidden.root } } } : {}),
|
|
29
|
+
};
|
|
30
|
+
// The agent hears about a long-running command of the person's the way it hears about its own: the
|
|
31
|
+
// caller wakes it once when the command is handed to the background (so it can say so), and the shell
|
|
32
|
+
// manager wakes it again when the command finishes (`on_finish`), or, for an app or a dev server
|
|
33
|
+
// (`npm start`, `vite`, `electron .`), when it is up or stops early (`on_failure`). Those never end,
|
|
34
|
+
// so they start in the background at once and the person gets the prompt back.
|
|
35
|
+
// And `hidden: false`: what a person starts, they start to SEE.
|
|
36
|
+
const server = isInteractiveServerCommand(command);
|
|
37
|
+
const result = await runCommand.execute({ command, notify: server ? "on_failure" : "on_finish", hidden: false, ...(server ? { run_in_background: true } : {}) }, ctx, {
|
|
38
|
+
id: "user-command",
|
|
39
|
+
progress: (text) => options.onProgress?.(text),
|
|
40
|
+
});
|
|
41
|
+
const moved = /^(?:Backgrounded|Running) as shell #(\d+)/.exec(result.summary ?? "");
|
|
42
|
+
const shells = session.toolContext.backgroundShells;
|
|
43
|
+
if (moved && shells) {
|
|
44
|
+
const set = userShells.get(shells) ?? new Set();
|
|
45
|
+
set.add(Number(moved[1]));
|
|
46
|
+
userShells.set(shells, set);
|
|
47
|
+
}
|
|
48
|
+
const entry = localCommandEntry(command, result, Date.now(), sessionDetailFull);
|
|
49
|
+
session.transcript.push(entry);
|
|
50
|
+
return { result, entry };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=userCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userCommand.js","sourceRoot":"","sources":["../../src/tools/userCommand.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAkB,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAU7C,oHAAoH;AACpH,MAAM,UAAU,GAAG,IAAI,OAAO,EAAuB,CAAC;AAEtD,uEAAuE;AACvE,MAAM,UAAU,WAAW,CAAC,MAA0B,EAAE,EAAU;IAChE,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAgB,EAChB,OAAe,EACf,UAA8B,EAAE;IAEhC,mGAAmG;IACnG,6FAA6F;IAC7F,wFAAwF;IACxF,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC;IAClD,MAAM,GAAG,GAAgB;QACvB,GAAG,OAAO,CAAC,WAAW;QACtB,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,aAAa,EAAE,IAAI;QACnB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnJ,CAAC;IACF,mGAAmG;IACnG,sGAAsG;IACtG,iGAAiG;IACjG,qGAAqG;IACrG,+EAA+E;IAC/E,gEAAgE;IAChE,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CACrC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EACvH,GAAG,EACH;QACE,EAAE,EAAE,cAAc;QAClB,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC;KACvD,CACF,CAAC;IACF,MAAM,KAAK,GAAG,2CAA2C,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC;IACpD,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAChF,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC"}
|
package/dist/tools/viewImage.js
CHANGED
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
* that it is being told rather than shown. A tool never asks which provider is running.
|
|
18
18
|
*/
|
|
19
19
|
import { promises as fs } from "node:fs";
|
|
20
|
-
import {
|
|
20
|
+
import { extname } from "node:path";
|
|
21
|
+
import { humanSize } from "../mcp/resultStore.js";
|
|
21
22
|
import { describeImage, isImage, isRejection, IMAGE_EXTS } from "../memory/images.js";
|
|
22
23
|
import { guardedPathReason } from "./guard.js";
|
|
23
24
|
import { relativize, resolvePath, touch } from "./paths.js";
|
|
@@ -75,10 +76,21 @@ export const viewImage = {
|
|
|
75
76
|
touch(ctx, path);
|
|
76
77
|
const shown = relativize(ctx, path);
|
|
77
78
|
const size = ref.width && ref.height ? `${ref.width}x${ref.height}` : "image";
|
|
79
|
+
// What the row says about the picture (display only, never sent to the model): the whole
|
|
80
|
+
// path, the format, how big it is on screen when that could be read, and how big the file is.
|
|
81
|
+
const format = extname(path).slice(1).toLowerCase();
|
|
82
|
+
const dimensions = ref.width && ref.height ? `${ref.width}×${ref.height}` : "";
|
|
83
|
+
const fileSize = humanSize(stat.size);
|
|
78
84
|
return {
|
|
79
85
|
output: `Opened ${shown} (${size}). The image follows this result — look at it and say ` +
|
|
80
86
|
`what you see.`,
|
|
81
|
-
summary:
|
|
87
|
+
summary: [format, dimensions, fileSize].filter(Boolean).join(" · "),
|
|
88
|
+
detail: [
|
|
89
|
+
`File ${path.replace(/\\/g, "/")}`,
|
|
90
|
+
...(format ? [`Format ${format}`] : []),
|
|
91
|
+
...(dimensions ? [`Dimensions ${dimensions}`] : []),
|
|
92
|
+
`Size ${fileSize}`,
|
|
93
|
+
].join("\n"),
|
|
82
94
|
images: [ref],
|
|
83
95
|
// The picture is the slow part, and it happens AFTER this returns.
|
|
84
96
|
awaitsModel: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewImage.js","sourceRoot":"","sources":["../../src/tools/viewImage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"viewImage.js","sourceRoot":"","sources":["../../src/tools/viewImage.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/webSearch.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { activeDriver } from "../drivers/registry.js";
|
|
2
2
|
import { frameExternal } from "./untrusted.js";
|
|
3
|
-
import { outputDetail } from "./detail.js";
|
|
3
|
+
import { FULL_DETAIL_MAX, SEARCH_PREVIEW_SOURCES, capLines, collapseBlanks, outputDetail, stripAnsi } from "./detail.js";
|
|
4
4
|
import { fail, failQuietly } from "./results.js";
|
|
5
5
|
/** Sources listed per answer. Enough to judge the answer, short enough to read. */
|
|
6
6
|
const MAX_SOURCES = 8;
|
|
@@ -59,6 +59,7 @@ const webSearchTool = {
|
|
|
59
59
|
output: formatSearch(query, result),
|
|
60
60
|
summary: `searched "${query}" (${result.sources.length} source${result.sources.length === 1 ? "" : "s"})`,
|
|
61
61
|
detail: formatSearchDetail(result, driver.label, elapsedMs),
|
|
62
|
+
detailFull: formatSearchDetailFull(result, driver.label, elapsedMs),
|
|
62
63
|
web: {
|
|
63
64
|
kind: "search",
|
|
64
65
|
query,
|
|
@@ -106,31 +107,52 @@ export function formatSearch(query, result) {
|
|
|
106
107
|
return frameExternal({ tag: "web_search", attrs: { query }, what: "a web search" }, lines.join("\n"));
|
|
107
108
|
}
|
|
108
109
|
/**
|
|
109
|
-
* The
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
110
|
+
* The line above the sources: which service answered, how long it took, how many pages it
|
|
111
|
+
* found. Each part is left out when unknown rather than guessed. A search row is one of the
|
|
112
|
+
* few places where the cost of the call is not otherwise visible, and an invented number
|
|
113
|
+
* would be worse than no number.
|
|
114
|
+
*/
|
|
115
|
+
function searchSummaryLine(count, engine, elapsedMs) {
|
|
116
|
+
const parts = [];
|
|
117
|
+
if (engine)
|
|
118
|
+
parts.push(engine);
|
|
119
|
+
if (elapsedMs !== undefined)
|
|
120
|
+
parts.push(formatElapsed(elapsedMs));
|
|
121
|
+
parts.push(`${count} source${count === 1 ? "" : "s"}`);
|
|
122
|
+
return parts.join(" · ");
|
|
123
|
+
}
|
|
124
|
+
/** A page title on one line: a title is the open web's text and may carry line breaks. */
|
|
125
|
+
function oneLine(title) {
|
|
126
|
+
return title.replace(/\s+/g, " ").trim();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The UI-only detail block: the summary line and the first few sources, never sent to the
|
|
130
|
+
* model (that's `formatSearchDetail`'s sibling `formatSearch`, with its own framing and
|
|
131
|
+
* injection defense). This is purely what the transcript row shows under the search. Empty
|
|
132
|
+
* when there are no sources, so a bare-answer result shows just its summary line.
|
|
113
133
|
*/
|
|
114
134
|
export function formatSearchDetail(result, engine, elapsedMs) {
|
|
115
135
|
if (result.sources.length === 0)
|
|
116
136
|
return "";
|
|
117
|
-
const
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
// when unknown — a search row is one of the few places where the cost of the call is
|
|
121
|
-
// not otherwise visible, and an invented number would be worse than no number.
|
|
122
|
-
if (engine)
|
|
123
|
-
lines.push(`Engine: ${engine}`);
|
|
124
|
-
if (elapsedMs !== undefined)
|
|
125
|
-
lines.push(`Query time: ${formatElapsed(elapsedMs)}`);
|
|
126
|
-
lines.push(`Found ${result.sources.length} source${result.sources.length === 1 ? "" : "s"}`);
|
|
127
|
-
for (const [i, source] of shown.entries())
|
|
128
|
-
lines.push(`${i + 1}. ${source.title}`);
|
|
129
|
-
const hidden = result.sources.length - shown.length;
|
|
130
|
-
if (hidden > 0)
|
|
131
|
-
lines.push(`(+${hidden} more)`);
|
|
137
|
+
const lines = [searchSummaryLine(result.sources.length, engine, elapsedMs)];
|
|
138
|
+
for (const [i, source] of result.sources.slice(0, SEARCH_PREVIEW_SOURCES).entries())
|
|
139
|
+
lines.push(`${i + 1}. ${oneLine(source.title)}`);
|
|
132
140
|
return outputDetail(lines.join("\n"));
|
|
133
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* The same block with every source, for the row to open on a click like a command's output.
|
|
144
|
+
* Equal to the closed block when there is nothing more to show, so such a row stays plain.
|
|
145
|
+
*/
|
|
146
|
+
export function formatSearchDetailFull(result, engine, elapsedMs) {
|
|
147
|
+
if (result.sources.length === 0)
|
|
148
|
+
return "";
|
|
149
|
+
const lines = [searchSummaryLine(result.sources.length, engine, elapsedMs)];
|
|
150
|
+
// Numbers padded to one width so the titles start in the same column past nine.
|
|
151
|
+
const width = String(result.sources.length).length;
|
|
152
|
+
for (const [i, source] of result.sources.entries())
|
|
153
|
+
lines.push(`${String(i + 1).padStart(width)}. ${oneLine(source.title)}`);
|
|
154
|
+
return capLines(collapseBlanks(stripAnsi(lines.join("\n")).split("\n")), FULL_DETAIL_MAX);
|
|
155
|
+
}
|
|
134
156
|
/** A wait, at the precision it is worth reading: `310ms`, `1.4s`. */
|
|
135
157
|
export function formatElapsed(ms) {
|
|
136
158
|
return ms < 1000 ? `${Math.round(ms)}ms` : `${(ms / 1000).toFixed(1)}s`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webSearch.js","sourceRoot":"","sources":["../../src/tools/webSearch.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"webSearch.js","sourceRoot":"","sources":["../../src/tools/webSearch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mindweave",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Mindweave — a fast, model-adaptive terminal coding agent.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"install-global": "npm run build && npm link",
|
|
40
40
|
"typecheck": "tsc --noEmit",
|
|
41
41
|
"test": "npm run test:main && npm run test:cli && npm run test:lang",
|
|
42
|
-
"test:main": "node --max-old-space-size=4096 --import tsx --import ./scripts/testState.mjs --test --test-concurrency=4 --test-timeout=120000 src/drivers/clientId.test.ts src/core/turnRunner.test.ts src/drivers/openrouter/openrouter.test.ts src/drivers/ollama/ollama.test.ts src/drivers/contextOverflow.test.ts src/drivers/retryPolicy.test.ts src/drivers/partialTurn.test.ts src/drivers/retryTransport.test.ts src/tools/tools.test.ts src/tools/quietFailures.test.ts src/tools/readBatch.test.ts src/tools/readLines.test.ts src/tools/readBudget.test.ts src/tools/search.test.ts src/tools/searchPrecision.test.ts src/tools/ripgrepBundle.test.ts src/tools/shellLint.test.ts src/tools/askUser.test.ts src/tools/newtools.test.ts src/tools/selfService.test.ts src/tools/webSearch.test.ts src/tools/webFetch.test.ts src/tools/screenshot.test.ts src/tools/ui.test.ts src/tools/uiPage.test.ts src/tools/uiBatch.test.ts src/tools/listeningPorts.test.ts src/tools/hiddenDesktop.test.ts src/dynamo/auxModel.test.ts src/dynamo/usageLimits.test.ts src/dynamo/limitStop.test.ts src/dynamo/marathon.test.ts src/tools/viewImage.test.ts src/tools/openDefault.test.ts src/tools/commandOutput.test.ts src/tools/commandProgress.test.ts src/tools/runCommandExit.test.ts src/tools/exitPlan.test.ts src/dynamo/planLifecycle.test.ts src/dynamo/steering.test.ts src/dynamo/loopLab.test.ts src/dynamo/toolBatches.test.ts src/dynamo/stopAtTurnStart.test.ts src/dynamo/backgroundNotes.test.ts src/dynamo/streamStall.test.ts src/dynamo/callCap.test.ts src/dynamo/hooks.test.ts src/dynamo/todoReminder.test.ts src/dynamo/todoReminderEngine.test.ts src/dynamo/truncationRecovery.test.ts src/dynamo/callTags.test.ts src/tools/webSecurity.test.ts src/tools/stateGuard.test.ts src/tools/guardedPath.test.ts src/tools/runsLater.test.ts src/tools/destructiveDelete.test.ts src/tools/commandPolicy.test.ts src/tools/codeIntel.test.ts src/memory/resumeFidelity.test.ts src/memory/clearedKeepsWhatWasSaid.test.ts src/memory/memory.test.ts src/memory/durability.test.ts src/memory/memoryIndex.test.ts src/memory/callLog.test.ts src/memory/earlier.test.ts src/memory/sessionTitle.test.ts src/memory/callRecords.test.ts src/memory/auditFixes.test.ts src/memory/compactionHygiene.test.ts src/memory/rounds.test.ts src/memory/subagentCost.test.ts src/memory/sessionMemory.test.ts src/memory/sessionMemoryRefresh.test.ts src/memory/sessionMemoryMidTurn.test.ts src/memory/sessionMemoryCompact.test.ts src/memory/notesInTail.test.ts src/memory/clearedArchive.test.ts src/memory/clearKinds.test.ts src/memory/todosResume.test.ts src/memory/counters.test.ts src/cli/attachBudget.test.ts src/memory/summaryHistory.test.ts src/memory/restore.test.ts src/memory/rewind.test.ts src/memory/resumeReads.test.ts src/memory/autoMemory.test.ts src/memory/projectMemory.test.ts src/memory/projectNotes.test.ts src/memory/workingSet.test.ts src/memory/presence.test.ts src/memory/pastedText.test.ts src/memory/profile.test.ts src/cli/projectEnv.test.ts src/core/providerKeys.test.ts src/core/mcpServers.test.ts src/core/permissions.test.ts src/core/rulesSkills.test.ts src/core/contextSettings.test.ts src/core/spendView.test.ts src/core/marathonRun.test.ts src/core/agentAdded.test.ts src/memory/images.test.ts src/dynamo/contextWindow.test.ts src/dynamo/contextBudget.test.ts src/dynamo/compactPaths.test.ts src/dynamo/cacheBreak.test.ts src/dynamo/coldCache.test.ts src/drivers/anthropic/cachePoints.test.ts src/dynamo/planArtifact.test.ts src/tools/focus.test.ts src/tools/workingSetTools.test.ts src/project/context.test.ts src/dynamo/hiddenText.test.ts src/tools/invisible.test.ts src/dynamo/model.test.ts src/dynamo/engine.test.ts src/drivers/docsCurrent.test.ts src/drivers/registry.test.ts src/drivers/providerSwitch.test.ts src/drivers/dynamicManifest.test.ts src/drivers/newProviders.test.ts src/drivers/providerError.test.ts src/drivers/deepseek/client.test.ts src/drivers/deepseek/vision.test.ts src/drivers/deepseek/live.test.ts src/drivers/anthropic/client.test.ts src/drivers/openai/client.test.ts src/drivers/qwen/client.test.ts src/drivers/kimi/client.test.ts src/drivers/glm/client.test.ts src/drivers/tencent/client.test.ts src/drivers/gemini/client.test.ts src/drivers/gemini/thoughtSignature.test.ts src/drivers/meta/client.test.ts src/drivers/minimax/client.test.ts src/dynamo/pricing.test.ts src/dynamo/spend.test.ts src/dynamo/liveMeter.test.ts src/drivers/deepseek/inlineTools.test.ts src/dynamo/verify.test.ts src/dynamo/promptAssembly.test.ts src/dynamo/prefixStability.test.ts src/dynamo/providerNeutrality.test.ts src/dynamo/guard.test.ts src/tools/sessionTools.test.ts src/tools/registry.test.ts src/tools/toolFuzz.test.ts src/tools/toolSurface.test.ts src/tools/runCommandShell.test.ts src/tools/runCommandCross.test.ts src/tools/childEnv.test.ts src/tools/untrusted.test.ts src/tools/runCommandEncoding.test.ts src/tools/ripgrepShell.test.ts src/tools/posixShell.test.ts src/tools/processOwnership.test.ts src/tools/editRipple.test.ts src/tools/editCore.test.ts src/tools/workspaceBoundary.test.ts src/tools/atomicWrite.test.ts src/tools/edit.test.ts src/tools/checkpoints.test.ts src/tools/shellCheckpoint.test.ts src/tools/spanCore.test.ts src/tools/symbolTools.test.ts src/tools/subagent.test.ts src/tools/subagentReport.test.ts src/tools/subagentOutcome.test.ts src/tools/verifierRun.test.ts src/tools/childReport.test.ts src/tools/verifierCommands.test.ts src/tools/treeGuard.test.ts src/tools/verifyReport.test.ts src/tools/testSummary.test.ts src/tools/outputShape.test.ts src/tools/detail.test.ts src/tools/rebuildDetail.test.ts src/tools/writtenFromDisk.test.ts src/tools/uiRow.test.ts src/tools/approval.test.ts src/tools/agentData.test.ts src/tools/multiroot.test.ts src/tools/gitignore.test.ts src/tools/chassisMux.test.ts src/tools/workspaceDiscover.test.ts src/tools/backgroundShells.test.ts src/tools/appLaunchSettle.test.ts src/tools/killTree.test.ts src/governor/scope.test.ts src/governor/freshness.test.ts src/governor/governor.test.ts src/tools/governorTools.test.ts src/alternator/chassis/chassis.test.ts src/alternator/chassis/domRefs.test.ts src/alternator/chassis/servers.test.ts src/alternator/chassis/provision.test.ts src/tools/serverConsent.test.ts src/alternator/chassis/lsp.test.ts src/mcp/protocol.test.ts src/mcp/mrtr.test.ts src/mcp/discover.test.ts src/mcp/catalog.test.ts src/mcp/paramHeaders.test.ts src/mcp/paramHeadersLive.test.ts src/mcp/transport/stdio.test.ts src/mcp/config.test.ts src/mcp/projectApproval.test.ts src/mcp/transport/http.test.ts src/mcp/manager.test.ts src/mcp/resultView.test.ts src/mcp/subscriptions.test.ts src/mcp/deferred.test.ts src/tools/mcpSearch.test.ts src/mcp/trust.test.ts src/mcp/governance.test.ts src/mcp/configWrite.test.ts src/tools/mcpAdd.test.ts src/tools/mcpManage.test.ts src/tools/foregroundCommands.test.ts src/mcp/resultStore.test.ts src/mcp/resources.test.ts src/mcp/prompts.test.ts src/mcp/oauth/metadata.test.ts src/mcp/oauth/flow.test.ts src/mcp/oauth/callback.test.ts src/mcp/oauth/tokenStore.test.ts src/mcp/oauth/index.test.ts src/mcp/oauth/endToEnd.test.ts src/tools/editMatching.test.ts src/tools/editScope.test.ts src/tools/editFreshness.test.ts src/dynamo/batchEdit.test.ts",
|
|
43
|
-
"test:cli": "node --max-old-space-size=4096 --import tsx --import ./scripts/testState.mjs --test --test-concurrency=4 --test-timeout=120000 src/cli/approvalText.probe.test.tsx src/cli/analytics.test.ts src/cli/desktopApp.test.ts src/cli/userBandAlign.probe.test.tsx src/cli/version.test.ts src/cli/updateCheck.test.ts src/cli/quietConsole.test.ts src/cli/appIdentity.test.ts src/cli/memoryTuning.test.ts src/cli/keyField.test.ts src/cli/keyStore.test.ts src/cli/keyManager.probe.test.tsx src/cli/mcpMinitabs.probe.test.tsx src/cli/components/minitabs.probe.test.tsx src/cli/trust.probe.test.tsx src/cli/firstRunFrame.probe.test.tsx src/cli/keySetup.probe.test.tsx src/cli/firstRun.test.ts src/cli/startupFill.test.ts src/cli/liveSize.test.ts src/cli/frameBottom.probe.test.tsx src/cli/screenMode.test.ts src/cli/screenPicker.probe.test.tsx src/cli/pickerFilter.probe.test.tsx src/cli/toolRowClip.probe.test.tsx src/cli/screenShell.test.ts src/cli/screenStore.test.ts src/cli/inlineShell.probe.test.tsx src/cli/inlineCaret.probe.test.tsx src/cli/startupArgs.test.ts src/cli/markdown.test.ts src/cli/help.test.ts src/cli/feedback.test.ts src/cli/approvalText.addLine.probe.test.tsx src/cli/providerSwitch.test.ts src/cli/attachments.test.ts src/cli/pasteAssembler.test.ts src/cli/approvalQueue.test.ts src/cli/transcript.test.ts src/cli/expandRow.probe.test.tsx src/cli/openWrap.probe.test.tsx src/cli/workGroup.probe.test.tsx src/cli/diffWrap.test.ts src/cli/uiLines.test.ts src/cli/uiRow.probe.test.tsx src/cli/expandHover.probe.test.tsx src/cli/viewWait.probe.test.tsx src/cli/compaction.test.ts src/cli/commandLabel.test.ts src/cli/restart.test.ts src/cli/selfUpdate.test.ts src/cli/blockHeights.test.ts src/cli/resizePolicy.probe.test.tsx src/cli/blockSpacing.test.ts src/cli/shellNotes.test.ts src/cli/inputView.test.ts src/cli/wordEdit.test.ts src/cli/wordEdit.probe.test.tsx src/cli/dropHandles.test.ts src/cli/dropHandles.probe.test.tsx src/cli/tipLine.probe.test.tsx src/cli/marathonUi.test.ts src/cli/marathonBox.probe.test.tsx src/cli/selection.test.ts src/cli/selectionGrow.test.ts src/cli/blockBoxes.test.ts src/cli/mouseLayer.probe.test.tsx src/cli/caret.probe.test.tsx src/cli/caretPark.test.ts src/cli/shuttle.probe.test.tsx src/cli/toolReveal.test.tsx src/cli/blockPerf.probe.test.tsx src/cli/blockSpacing.probe.test.tsx src/cli/workingVerb.test.ts src/cli/typingPerf.probe.test.tsx src/cli/inkOutputPatch.test.ts src/cli/widestLinePatch.test.ts src/cli/prodEnv.test.ts src/cli/inputText.test.ts src/cli/appInlineStart.test.ts src/cli/bannerFit.test.ts src/cli/scrollPerf.probe.test.tsx src/cli/virtualWindow.test.ts src/cli/virtualRender.probe.test.tsx src/cli/incrementalResize.probe.test.tsx src/cli/framebuffer/paint.test.ts src/cli/framebuffer/terminalAgreement.test.ts src/cli/framebuffer/writer.test.tsx src/cli/framebuffer/frameHold.test.ts src/cli/framebuffer/stoodDown.test.tsx src/cli/framebuffer/resizeCorruption.probe.test.tsx src/cli/toolItems.test.ts src/cli/agentLines.test.ts src/cli/approvalText.test.ts src/cli/toolDisplay.test.ts src/cli/toolColour.probe.test.tsx src/cli/mouse.test.ts src/cli/wheelCoalesce.test.ts src/cli/wheelStep.test.ts src/cli/terminalRestore.test.ts src/cli/exitCursor.test.ts src/cli/ctrlC.test.ts src/cli/wrap.test.ts src/cli/chatAnchor.test.ts src/cli/chatAnchor.probe.test.tsx src/cli/scrollPill.test.ts src/cli/scrollPill.probe.test.tsx src/cli/pillClick.probe.test.tsx src/cli/inlineReading.probe.test.tsx src/cli/readingClose.probe.test.tsx src/cli/footerRemount.probe.test.tsx src/cli/scrollFlicker.probe.test.tsx src/cli/headerScroll.probe.test.tsx src/cli/reflowAnchor.test.ts src/cli/growAnchor.test.ts src/cli/revealPace.test.ts src/cli/messageQueue.test.ts src/cli/backgroundWake.test.ts src/cli/resumeParity.test.ts src/cli/commands.test.ts src/cli/commandBackground.test.ts src/cli/commandMenu.test.ts src/cli/revealOpen.test.ts src/cli/mcpRow.probe.test.tsx src/cli/commandHint.probe.test.tsx src/cli/commandRoute.test.ts src/cli/commandArgs.test.ts src/cli/pickerOrder.test.ts src/cli/clearSession.test.ts src/cli/queuePop.probe.test.tsx src/cli/menuContinuity.probe.test.tsx src/cli/refusalNotice.probe.test.tsx src/cli/modes.test.ts",
|
|
42
|
+
"test:main": "node --max-old-space-size=4096 --import tsx --import ./scripts/testState.mjs --test --test-concurrency=4 --test-timeout=120000 src/drivers/clientId.test.ts src/core/turnRunner.test.ts src/drivers/openrouter/openrouter.test.ts src/drivers/ollama/ollama.test.ts src/drivers/contextOverflow.test.ts src/drivers/retryPolicy.test.ts src/drivers/partialTurn.test.ts src/drivers/retryTransport.test.ts src/tools/tools.test.ts src/tools/quietFailures.test.ts src/tools/readBatch.test.ts src/tools/readLines.test.ts src/tools/readBudget.test.ts src/tools/search.test.ts src/tools/searchPrecision.test.ts src/tools/ripgrepBundle.test.ts src/tools/shellLint.test.ts src/tools/askUser.test.ts src/tools/newtools.test.ts src/tools/selfService.test.ts src/tools/webSearch.test.ts src/tools/webFetch.test.ts src/tools/screenshot.test.ts src/tools/ui.test.ts src/tools/uiPage.test.ts src/tools/uiBatch.test.ts src/tools/listeningPorts.test.ts src/tools/hiddenDesktop.test.ts src/dynamo/auxModel.test.ts src/dynamo/usageLimits.test.ts src/dynamo/limitStop.test.ts src/dynamo/marathon.test.ts src/tools/viewImage.test.ts src/tools/openDefault.test.ts src/tools/commandOutput.test.ts src/tools/commandProgress.test.ts src/tools/runCommandExit.test.ts src/tools/userCommand.test.ts src/tools/exitPlan.test.ts src/dynamo/planLifecycle.test.ts src/dynamo/steering.test.ts src/dynamo/loopLab.test.ts src/dynamo/toolBatches.test.ts src/dynamo/stopAtTurnStart.test.ts src/dynamo/backgroundNotes.test.ts src/dynamo/streamStall.test.ts src/dynamo/callCap.test.ts src/dynamo/hooks.test.ts src/dynamo/todoReminder.test.ts src/dynamo/todoReminderEngine.test.ts src/dynamo/truncationRecovery.test.ts src/dynamo/callTags.test.ts src/tools/webSecurity.test.ts src/tools/stateGuard.test.ts src/tools/guardedPath.test.ts src/tools/runsLater.test.ts src/tools/destructiveDelete.test.ts src/tools/commandPolicy.test.ts src/tools/codeIntel.test.ts src/memory/resumeFidelity.test.ts src/memory/clearedKeepsWhatWasSaid.test.ts src/memory/memory.test.ts src/memory/durability.test.ts src/memory/memoryIndex.test.ts src/memory/callLog.test.ts src/memory/earlier.test.ts src/memory/sessionTitle.test.ts src/memory/callRecords.test.ts src/memory/auditFixes.test.ts src/memory/compactionHygiene.test.ts src/memory/rounds.test.ts src/memory/subagentCost.test.ts src/memory/sessionMemory.test.ts src/memory/sessionMemoryRefresh.test.ts src/memory/sessionMemoryMidTurn.test.ts src/memory/sessionMemoryCompact.test.ts src/memory/notesInTail.test.ts src/memory/clearedArchive.test.ts src/memory/clearKinds.test.ts src/memory/todosResume.test.ts src/memory/counters.test.ts src/cli/attachBudget.test.ts src/memory/summaryHistory.test.ts src/memory/restore.test.ts src/memory/rewind.test.ts src/memory/localCommand.test.ts src/memory/resumeReads.test.ts src/memory/autoMemory.test.ts src/memory/projectMemory.test.ts src/memory/projectNotes.test.ts src/memory/workingSet.test.ts src/memory/presence.test.ts src/memory/pastedText.test.ts src/memory/profile.test.ts src/cli/projectEnv.test.ts src/core/providerKeys.test.ts src/core/mcpServers.test.ts src/core/permissions.test.ts src/core/rulesSkills.test.ts src/core/contextSettings.test.ts src/core/spendView.test.ts src/core/marathonRun.test.ts src/core/agentAdded.test.ts src/memory/images.test.ts src/dynamo/contextWindow.test.ts src/dynamo/contextBudget.test.ts src/dynamo/compactPaths.test.ts src/dynamo/cacheBreak.test.ts src/dynamo/coldCache.test.ts src/drivers/anthropic/cachePoints.test.ts src/dynamo/planArtifact.test.ts src/tools/focus.test.ts src/tools/workingSetTools.test.ts src/project/context.test.ts src/dynamo/hiddenText.test.ts src/tools/invisible.test.ts src/dynamo/model.test.ts src/dynamo/engine.test.ts src/drivers/docsCurrent.test.ts src/drivers/registry.test.ts src/drivers/providerSwitch.test.ts src/drivers/dynamicManifest.test.ts src/drivers/newProviders.test.ts src/drivers/providerError.test.ts src/drivers/deepseek/client.test.ts src/drivers/deepseek/vision.test.ts src/drivers/deepseek/live.test.ts src/drivers/anthropic/client.test.ts src/drivers/openai/client.test.ts src/drivers/qwen/client.test.ts src/drivers/kimi/client.test.ts src/drivers/glm/client.test.ts src/drivers/tencent/client.test.ts src/drivers/gemini/client.test.ts src/drivers/gemini/thoughtSignature.test.ts src/drivers/meta/client.test.ts src/drivers/minimax/client.test.ts src/dynamo/pricing.test.ts src/dynamo/spend.test.ts src/dynamo/liveMeter.test.ts src/drivers/deepseek/inlineTools.test.ts src/dynamo/verify.test.ts src/dynamo/promptAssembly.test.ts src/dynamo/prefixStability.test.ts src/dynamo/providerNeutrality.test.ts src/dynamo/guard.test.ts src/tools/sessionTools.test.ts src/tools/registry.test.ts src/tools/toolFuzz.test.ts src/tools/toolSurface.test.ts src/tools/runCommandShell.test.ts src/tools/runCommandCross.test.ts src/tools/childEnv.test.ts src/tools/untrusted.test.ts src/tools/runCommandEncoding.test.ts src/tools/ripgrepShell.test.ts src/tools/posixShell.test.ts src/tools/processOwnership.test.ts src/tools/editRipple.test.ts src/tools/editCore.test.ts src/tools/workspaceBoundary.test.ts src/tools/atomicWrite.test.ts src/tools/edit.test.ts src/tools/checkpoints.test.ts src/tools/shellCheckpoint.test.ts src/tools/spanCore.test.ts src/tools/symbolTools.test.ts src/tools/subagent.test.ts src/tools/subagentReport.test.ts src/tools/subagentOutcome.test.ts src/tools/verifierRun.test.ts src/tools/childReport.test.ts src/tools/verifierCommands.test.ts src/tools/treeGuard.test.ts src/tools/verifyReport.test.ts src/tools/testSummary.test.ts src/tools/outputShape.test.ts src/tools/detail.test.ts src/tools/rebuildDetail.test.ts src/tools/writtenFromDisk.test.ts src/tools/uiRow.test.ts src/tools/approval.test.ts src/tools/agentData.test.ts src/tools/multiroot.test.ts src/tools/gitignore.test.ts src/tools/chassisMux.test.ts src/tools/workspaceDiscover.test.ts src/tools/backgroundShells.test.ts src/tools/appLaunchSettle.test.ts src/tools/killTree.test.ts src/governor/scope.test.ts src/governor/freshness.test.ts src/governor/governor.test.ts src/tools/governorTools.test.ts src/alternator/chassis/chassis.test.ts src/alternator/chassis/domRefs.test.ts src/alternator/chassis/servers.test.ts src/alternator/chassis/provision.test.ts src/tools/serverConsent.test.ts src/alternator/chassis/lsp.test.ts src/mcp/protocol.test.ts src/mcp/mrtr.test.ts src/mcp/discover.test.ts src/mcp/catalog.test.ts src/mcp/paramHeaders.test.ts src/mcp/paramHeadersLive.test.ts src/mcp/transport/stdio.test.ts src/mcp/config.test.ts src/mcp/projectApproval.test.ts src/mcp/transport/http.test.ts src/mcp/manager.test.ts src/mcp/resultView.test.ts src/mcp/subscriptions.test.ts src/mcp/deferred.test.ts src/tools/mcpSearch.test.ts src/mcp/trust.test.ts src/mcp/governance.test.ts src/mcp/configWrite.test.ts src/tools/mcpAdd.test.ts src/tools/mcpManage.test.ts src/tools/foregroundCommands.test.ts src/mcp/resultStore.test.ts src/mcp/resources.test.ts src/mcp/prompts.test.ts src/mcp/oauth/metadata.test.ts src/mcp/oauth/flow.test.ts src/mcp/oauth/callback.test.ts src/mcp/oauth/tokenStore.test.ts src/mcp/oauth/index.test.ts src/mcp/oauth/endToEnd.test.ts src/tools/editMatching.test.ts src/tools/editScope.test.ts src/tools/editFreshness.test.ts src/dynamo/batchEdit.test.ts",
|
|
43
|
+
"test:cli": "node --max-old-space-size=4096 --import tsx --import ./scripts/testState.mjs --test --test-concurrency=4 --test-timeout=120000 src/cli/approvalText.probe.test.tsx src/cli/analytics.test.ts src/cli/desktopApp.test.ts src/cli/userBandAlign.probe.test.tsx src/cli/version.test.ts src/cli/updateCheck.test.ts src/cli/quietConsole.test.ts src/cli/appIdentity.test.ts src/cli/memoryTuning.test.ts src/cli/keyField.test.ts src/cli/keyStore.test.ts src/cli/keyManager.probe.test.tsx src/cli/mcpMinitabs.probe.test.tsx src/cli/components/minitabs.probe.test.tsx src/cli/trust.probe.test.tsx src/cli/firstRunFrame.probe.test.tsx src/cli/keySetup.probe.test.tsx src/cli/firstRun.test.ts src/cli/startupFill.test.ts src/cli/liveSize.test.ts src/cli/frameBottom.probe.test.tsx src/cli/screenMode.test.ts src/cli/screenPicker.probe.test.tsx src/cli/pickerFilter.probe.test.tsx src/cli/toolRowClip.probe.test.tsx src/cli/screenShell.test.ts src/cli/screenStore.test.ts src/cli/inlineShell.probe.test.tsx src/cli/inlineCaret.probe.test.tsx src/cli/startupArgs.test.ts src/cli/markdown.test.ts src/cli/help.test.ts src/cli/feedback.test.ts src/cli/approvalText.addLine.probe.test.tsx src/cli/providerSwitch.test.ts src/cli/attachments.test.ts src/cli/pasteAssembler.test.ts src/cli/approvalQueue.test.ts src/cli/transcript.test.ts src/cli/expandRow.probe.test.tsx src/cli/openWrap.probe.test.tsx src/cli/workGroup.probe.test.tsx src/cli/diffWrap.test.ts src/cli/uiLines.test.ts src/cli/uiRow.probe.test.tsx src/cli/expandHover.probe.test.tsx src/cli/viewWait.probe.test.tsx src/cli/compaction.test.ts src/cli/commandLabel.test.ts src/cli/restart.test.ts src/cli/selfUpdate.test.ts src/cli/blockHeights.test.ts src/cli/resizePolicy.probe.test.tsx src/cli/blockSpacing.test.ts src/cli/shellNotes.test.ts src/cli/inputView.test.ts src/cli/wordEdit.test.ts src/cli/wordEdit.probe.test.tsx src/cli/dropHandles.test.ts src/cli/dropHandles.probe.test.tsx src/cli/tipLine.probe.test.tsx src/cli/marathonUi.test.ts src/cli/marathonBox.probe.test.tsx src/cli/selection.test.ts src/cli/selectionGrow.test.ts src/cli/blockBoxes.test.ts src/cli/mouseLayer.probe.test.tsx src/cli/caret.probe.test.tsx src/cli/caretPark.test.ts src/cli/shuttle.probe.test.tsx src/cli/toolReveal.test.tsx src/cli/blockPerf.probe.test.tsx src/cli/blockSpacing.probe.test.tsx src/cli/workingVerb.test.ts src/cli/typingPerf.probe.test.tsx src/cli/inkOutputPatch.test.ts src/cli/widestLinePatch.test.ts src/cli/prodEnv.test.ts src/cli/inputText.test.ts src/cli/appInlineStart.test.ts src/cli/bannerFit.test.ts src/cli/scrollPerf.probe.test.tsx src/cli/virtualWindow.test.ts src/cli/virtualRender.probe.test.tsx src/cli/incrementalResize.probe.test.tsx src/cli/framebuffer/paint.test.ts src/cli/framebuffer/terminalAgreement.test.ts src/cli/framebuffer/writer.test.tsx src/cli/framebuffer/frameHold.test.ts src/cli/framebuffer/stoodDown.test.tsx src/cli/framebuffer/resizeCorruption.probe.test.tsx src/cli/toolItems.test.ts src/cli/agentLines.test.ts src/cli/approvalText.test.ts src/cli/toolDisplay.test.ts src/cli/toolColour.probe.test.tsx src/cli/mouse.test.ts src/cli/wheelCoalesce.test.ts src/cli/wheelStep.test.ts src/cli/terminalRestore.test.ts src/cli/exitCursor.test.ts src/cli/ctrlC.test.ts src/cli/wrap.test.ts src/cli/chatAnchor.test.ts src/cli/chatAnchor.probe.test.tsx src/cli/scrollPill.test.ts src/cli/scrollPill.probe.test.tsx src/cli/pillClick.probe.test.tsx src/cli/inlineReading.probe.test.tsx src/cli/readingClose.probe.test.tsx src/cli/footerRemount.probe.test.tsx src/cli/scrollFlicker.probe.test.tsx src/cli/headerScroll.probe.test.tsx src/cli/reflowAnchor.test.ts src/cli/growAnchor.test.ts src/cli/revealPace.test.ts src/cli/messageQueue.test.ts src/cli/backgroundWake.test.ts src/cli/resumeParity.test.ts src/cli/commands.test.ts src/cli/commandBackground.test.ts src/cli/commandMenu.test.ts src/cli/revealOpen.test.ts src/cli/mcpRow.probe.test.tsx src/cli/commandHint.probe.test.tsx src/cli/commandRoute.test.ts src/cli/commandArgs.test.ts src/cli/pickerOrder.test.ts src/cli/clearSession.test.ts src/cli/queuePop.probe.test.tsx src/cli/menuContinuity.probe.test.tsx src/cli/searchBox.probe.test.tsx src/cli/userCommandRow.probe.test.tsx src/cli/userCommandBox.probe.test.tsx src/cli/keySearch.probe.test.tsx src/cli/refusalNotice.probe.test.tsx src/cli/modes.test.ts",
|
|
44
44
|
"test:lang": "node --max-old-space-size=4096 --import tsx --import ./scripts/testState.mjs --test --test-concurrency=1 src/alternator/chassis/treesitter.test.ts src/alternator/chassis/treesitterIsolation.test.ts src/alternator/chassis/markup.test.ts src/alternator/chassis/treesitterLangs.test.ts src/alternator/chassis/treesitterLangs2.test.ts src/alternator/chassis/treesitterLangs3.test.ts src/alternator/chassis/treesitterLangs4.test.ts src/alternator/chassis/langBudget.test.ts"
|
|
45
45
|
},
|
|
46
46
|
"engines": {
|