mindweave 3.4.0 → 3.4.2
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/README.md +26 -3
- package/dist/alternator/chassis/lsp.js +1 -1
- package/dist/alternator/chassis/lsp.js.map +1 -1
- package/dist/alternator/chassis/provision.js +2 -2
- package/dist/alternator/chassis/provision.js.map +1 -1
- package/dist/cli/App.js +152 -42
- package/dist/cli/App.js.map +1 -1
- package/dist/cli/attachments.js +2 -1
- package/dist/cli/attachments.js.map +1 -1
- package/dist/cli/blockHeights.js +14 -0
- package/dist/cli/blockHeights.js.map +1 -1
- package/dist/cli/commands.js +1 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/components/BlockView.js +9 -1
- package/dist/cli/components/BlockView.js.map +1 -1
- package/dist/cli/components/EditGroup.js +50 -0
- package/dist/cli/components/EditGroup.js.map +1 -0
- package/dist/cli/components/PromptInput.js +4 -3
- package/dist/cli/components/PromptInput.js.map +1 -1
- package/dist/cli/components/ToolLine.js +5 -3
- package/dist/cli/components/ToolLine.js.map +1 -1
- package/dist/cli/components/WorkGroup.js +85 -56
- package/dist/cli/components/WorkGroup.js.map +1 -1
- package/dist/cli/editGroup.js +122 -0
- package/dist/cli/editGroup.js.map +1 -0
- package/dist/cli/inkSpeedLoader.js +9 -5
- package/dist/cli/inkSpeedLoader.js.map +1 -1
- package/dist/cli/inkThrottlePatch.js +43 -0
- package/dist/cli/inkThrottlePatch.js.map +1 -0
- package/dist/cli/screenMode.js +8 -1
- package/dist/cli/screenMode.js.map +1 -1
- package/dist/cli/sessionCarry.js.map +1 -1
- package/dist/cli/startupArgs.js +24 -4
- package/dist/cli/startupArgs.js.map +1 -1
- package/dist/cli/toolDisplay.js +2 -2
- package/dist/cli/toolDisplay.js.map +1 -1
- package/dist/cli/transcript.js +81 -14
- package/dist/cli/transcript.js.map +1 -1
- package/dist/cli/workLines.js +67 -4
- package/dist/cli/workLines.js.map +1 -1
- package/dist/core/turnRunner.js +133 -30
- package/dist/core/turnRunner.js.map +1 -1
- package/dist/dynamo/cacheBreak.js +8 -5
- package/dist/dynamo/cacheBreak.js.map +1 -1
- package/dist/dynamo/contextWindow.js +28 -36
- package/dist/dynamo/contextWindow.js.map +1 -1
- package/dist/dynamo/engine.js +119 -57
- package/dist/dynamo/engine.js.map +1 -1
- package/dist/dynamo/guard.js +1 -1
- package/dist/dynamo/guard.js.map +1 -1
- package/dist/dynamo/prompt.js +9 -3
- package/dist/dynamo/prompt.js.map +1 -1
- package/dist/dynamo/toolAliases.js +73 -0
- package/dist/dynamo/toolAliases.js.map +1 -0
- package/dist/dynamo/toolArgs.js +82 -0
- package/dist/dynamo/toolArgs.js.map +1 -0
- package/dist/dynamo/verify.js +16 -2
- package/dist/dynamo/verify.js.map +1 -1
- package/dist/headless/args.js +82 -0
- package/dist/headless/args.js.map +1 -0
- package/dist/headless/main.js +87 -0
- package/dist/headless/main.js.map +1 -0
- package/dist/headless/output.js +150 -0
- package/dist/headless/output.js.map +1 -0
- package/dist/headless/run.js +188 -0
- package/dist/headless/run.js.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/main.js +5 -0
- package/dist/main.js.map +1 -1
- package/dist/memory/clearedArchive.js +2 -20
- package/dist/memory/clearedArchive.js.map +1 -1
- package/dist/memory/compaction.js +94 -2
- package/dist/memory/compaction.js.map +1 -1
- package/dist/memory/presence.js +44 -0
- package/dist/memory/presence.js.map +1 -1
- package/dist/memory/rewind.js +10 -6
- package/dist/memory/rewind.js.map +1 -1
- package/dist/memory/session.js +2 -2
- package/dist/memory/session.js.map +1 -1
- package/dist/memory/sessionMemory.js +270 -69
- package/dist/memory/sessionMemory.js.map +1 -1
- package/dist/memory/store.js +27 -4
- package/dist/memory/store.js.map +1 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/memory/userNotes.js +17 -0
- package/dist/memory/userNotes.js.map +1 -0
- package/dist/project/context.js +34 -6
- package/dist/project/context.js.map +1 -1
- package/dist/tools/backgroundShells.js +7 -4
- package/dist/tools/backgroundShells.js.map +1 -1
- package/dist/tools/coauthor.js +154 -0
- package/dist/tools/coauthor.js.map +1 -0
- package/dist/tools/codeIntel.js +38 -10
- package/dist/tools/codeIntel.js.map +1 -1
- package/dist/tools/docOutline.js +250 -0
- package/dist/tools/docOutline.js.map +1 -0
- package/dist/tools/edit.js +18 -3
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/editCore.js +107 -1
- package/dist/tools/editCore.js.map +1 -1
- package/dist/tools/editRipple.js +29 -2
- package/dist/tools/editRipple.js.map +1 -1
- package/dist/tools/emptyResult.js +24 -0
- package/dist/tools/emptyResult.js.map +1 -0
- package/dist/tools/glob.js +11 -2
- package/dist/tools/glob.js.map +1 -1
- package/dist/tools/grep.js +4 -3
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/missingPath.js +90 -0
- package/dist/tools/missingPath.js.map +1 -0
- package/dist/tools/readFile.js +19 -2
- package/dist/tools/readFile.js.map +1 -1
- package/dist/tools/rebuildDetail.js +101 -6
- package/dist/tools/rebuildDetail.js.map +1 -1
- package/dist/tools/runCommand.js +6 -2
- package/dist/tools/runCommand.js.map +1 -1
- package/dist/tools/screenshot.js +42 -3
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/screenshotWin.js +221 -216
- package/dist/tools/screenshotWin.js.map +1 -1
- package/dist/tools/search.js +4 -1
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/shellTools.js +7 -2
- package/dist/tools/shellTools.js.map +1 -1
- package/dist/tools/ui.js +26 -9
- package/dist/tools/ui.js.map +1 -1
- package/dist/tools/uiWin.js +4 -1
- package/dist/tools/uiWin.js.map +1 -1
- package/dist/tools/webSearch.js +3 -1
- package/dist/tools/webSearch.js.map +1 -1
- package/package.json +78 -78
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* coauthor.ts — the "Co-authored-by: mwcode" line on commits the agent makes.
|
|
3
|
+
*
|
|
4
|
+
* Only a commit the AGENT runs through `run_command` gets it. A commit the person types (`!git commit`) never
|
|
5
|
+
* does, and neither does one the agent has not been allowed to credit: the first time the agent commits in a
|
|
6
|
+
* project it asks once, and the answer is remembered for that project (or for every project, if the person said
|
|
7
|
+
* so). After that there is no question. Where nobody can be asked (a headless run, a sub-agent) there is no
|
|
8
|
+
* question either, and the line is added only when the person already said yes.
|
|
9
|
+
*
|
|
10
|
+
* The line goes in with git's own `--trailer` option, so it lands in the trailer block whatever else the message
|
|
11
|
+
* holds, and it works with `-m`, `-F` and `--amend`. The command is rewritten only when its text can be read
|
|
12
|
+
* with certainty: the places `git commit` appears in the parsed command and in the raw text have to agree,
|
|
13
|
+
* so a `git commit` inside a quoted string is never touched.
|
|
14
|
+
*/
|
|
15
|
+
import { execFile } from "node:child_process";
|
|
16
|
+
import { promises as fs } from "node:fs";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
import { governanceDir } from "../governor/index.js";
|
|
19
|
+
import { verbOf } from "./commandParse.js";
|
|
20
|
+
/** The line, as it appears at the end of a commit message. The address is the account's private GitHub address. */
|
|
21
|
+
export const CO_AUTHOR_LINE = "Co-authored-by: mwcode <344669505+mwcode-agent@users.noreply.github.com>";
|
|
22
|
+
/** What identifies the line inside a command, so one that already carries it is left alone. */
|
|
23
|
+
const MARK = "mwcode-agent@users.noreply.github.com";
|
|
24
|
+
const FILE = "coauthor.json";
|
|
25
|
+
export const YES_PROJECT = "Yes, for this project";
|
|
26
|
+
export const YES_ALL = "Yes, for all my projects";
|
|
27
|
+
export const NO_PROJECT = "No, not in this project";
|
|
28
|
+
export const COAUTHOR_QUESTION = "Credit mwcode as a co-author on the commits I make?";
|
|
29
|
+
export const COAUTHOR_DETAIL = `It adds one line to the end of each commit message I make:\n${CO_AUTHOR_LINE}\n` +
|
|
30
|
+
"Commits you make yourself never get it. You will not be asked again in this project; /coauthor changes it.";
|
|
31
|
+
async function readFile(dir) {
|
|
32
|
+
try {
|
|
33
|
+
const raw = JSON.parse(await fs.readFile(join(dir, FILE), "utf8"));
|
|
34
|
+
return typeof raw.credit === "boolean" ? raw.credit : null;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** The answer in force for a project: its own, else the one for all projects, else none yet. */
|
|
41
|
+
export async function coauthorSetting(cwd) {
|
|
42
|
+
const project = await readFile(governanceDir(cwd, "project"));
|
|
43
|
+
if (project !== null)
|
|
44
|
+
return { credit: project, from: "project" };
|
|
45
|
+
const global = await readFile(governanceDir(cwd, "global"));
|
|
46
|
+
return global === null ? null : { credit: global, from: "global" };
|
|
47
|
+
}
|
|
48
|
+
/** Record an answer for one scope, or (null) forget it so the next commit asks again. */
|
|
49
|
+
export async function setCoauthor(cwd, scope, credit) {
|
|
50
|
+
const dir = governanceDir(cwd, scope);
|
|
51
|
+
const file = join(dir, FILE);
|
|
52
|
+
if (credit === null) {
|
|
53
|
+
await fs.rm(file, { force: true });
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
await fs.mkdir(dir, { recursive: true });
|
|
57
|
+
await fs.writeFile(file, JSON.stringify({ credit }, null, 2), "utf8");
|
|
58
|
+
}
|
|
59
|
+
/** Git's global options that take the next word as their value. */
|
|
60
|
+
const OPTIONS_WITH_VALUE = new Set(["-C", "-c", "--git-dir", "--work-tree", "--namespace", "--exec-path"]);
|
|
61
|
+
/** Whether this simple command is `git commit`, past git's own options (`git -C dir commit`). */
|
|
62
|
+
function isGitCommit(words) {
|
|
63
|
+
for (let i = 1; i < words.length; i++) {
|
|
64
|
+
const w = words[i];
|
|
65
|
+
if (OPTIONS_WITH_VALUE.has(w)) {
|
|
66
|
+
i++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (w.startsWith("-"))
|
|
70
|
+
continue;
|
|
71
|
+
return w === "commit";
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
/** How many real `git commit` commands the parsed text runs. */
|
|
76
|
+
export function countGitCommits(parsed) {
|
|
77
|
+
return parsed.commands.filter((c) => verbOf(c) === "git" && isGitCommit(c.words)).length;
|
|
78
|
+
}
|
|
79
|
+
/** `git`, git's own options, then `commit`, in the raw text. Each option is one word or an option with its value. */
|
|
80
|
+
const COMMIT_IN_TEXT = /\bgit(?:\.exe)?(?:\s+(?:-C|-c)\s+(?:"[^"]*"|'[^']*'|\S+)|\s+--?[A-Za-z][\w-]*(?:=(?:"[^"]*"|'[^']*'|\S+))?)*\s+commit(?=\s|$|;|&|\|)/gi;
|
|
81
|
+
/**
|
|
82
|
+
* The command with the trailer added to every `git commit` in it, or null when that cannot be done with
|
|
83
|
+
* certainty: the raw text and the parsed command must find the same number of commits, so a `git commit` inside
|
|
84
|
+
* a string, or an option this does not read, leaves the command exactly as written.
|
|
85
|
+
*/
|
|
86
|
+
export function addTrailer(command, parsed) {
|
|
87
|
+
const real = countGitCommits(parsed);
|
|
88
|
+
if (real === 0 || parsed.unreadable)
|
|
89
|
+
return null;
|
|
90
|
+
const found = command.match(COMMIT_IN_TEXT)?.length ?? 0;
|
|
91
|
+
if (found !== real)
|
|
92
|
+
return null;
|
|
93
|
+
return command.replace(COMMIT_IN_TEXT, (m) => `${m} --trailer "${CO_AUTHOR_LINE}"`);
|
|
94
|
+
}
|
|
95
|
+
/** `--trailer` arrived in git 2.32. */
|
|
96
|
+
let trailerSupport;
|
|
97
|
+
export function gitSupportsTrailer() {
|
|
98
|
+
trailerSupport ??= new Promise((resolve) => {
|
|
99
|
+
execFile("git", ["--version"], { timeout: 5000, windowsHide: true }, (error, stdout) => {
|
|
100
|
+
const m = /(\d+)\.(\d+)/.exec(String(stdout));
|
|
101
|
+
if (error || !m)
|
|
102
|
+
return resolve(false);
|
|
103
|
+
const major = Number(m[1]);
|
|
104
|
+
const minor = Number(m[2]);
|
|
105
|
+
resolve(major > 2 || (major === 2 && minor >= 32));
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
return trailerSupport;
|
|
109
|
+
}
|
|
110
|
+
/** For tests: forget the cached git version. */
|
|
111
|
+
export function resetGitVersionForTests() {
|
|
112
|
+
trailerSupport = undefined;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The command to run: the same text, with the trailer added when the agent is committing and the project has
|
|
116
|
+
* said yes. Asks once when it has not been asked. Anything unclear leaves the command unchanged.
|
|
117
|
+
*/
|
|
118
|
+
export async function withCoauthor(command, parsed, ctx) {
|
|
119
|
+
// The person's own commands are theirs. A commit that already carries the line needs nothing.
|
|
120
|
+
if (ctx.userInitiated || command.includes(MARK))
|
|
121
|
+
return command;
|
|
122
|
+
if (countGitCommits(parsed) === 0)
|
|
123
|
+
return command;
|
|
124
|
+
const root = ctx.governance?.forbidden.root ?? ctx.cwd;
|
|
125
|
+
let setting = await coauthorSetting(root);
|
|
126
|
+
if (!setting) {
|
|
127
|
+
// Nobody to ask (a headless run, a sub-agent): no question, and no credit until the person has said yes.
|
|
128
|
+
if (!ctx.requestApproval)
|
|
129
|
+
return command;
|
|
130
|
+
const choice = await ctx.requestApproval(COAUTHOR_QUESTION, [YES_PROJECT, YES_ALL, NO_PROJECT], COAUTHOR_DETAIL);
|
|
131
|
+
if (choice === YES_PROJECT) {
|
|
132
|
+
await setCoauthor(root, "project", true);
|
|
133
|
+
setting = { credit: true, from: "project" };
|
|
134
|
+
}
|
|
135
|
+
else if (choice === YES_ALL) {
|
|
136
|
+
await setCoauthor(root, "global", true);
|
|
137
|
+
setting = { credit: true, from: "global" };
|
|
138
|
+
}
|
|
139
|
+
else if (choice === NO_PROJECT) {
|
|
140
|
+
await setCoauthor(root, "project", false);
|
|
141
|
+
return command;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// Dismissed, or an answer that is none of the options: not an answer. Commit without the line, ask next time.
|
|
145
|
+
return command;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (!setting.credit)
|
|
149
|
+
return command;
|
|
150
|
+
if (!(await gitSupportsTrailer()))
|
|
151
|
+
return command;
|
|
152
|
+
return addTrailer(command, parsed) ?? command;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=coauthor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coauthor.js","sourceRoot":"","sources":["../../src/tools/coauthor.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/codeIntel.js
CHANGED
|
@@ -16,6 +16,23 @@ import { excludedFromSearch, guardedPathReason } from "./guard.js";
|
|
|
16
16
|
import { isSupported } from "../alternator/chassis/treesitter.js";
|
|
17
17
|
import { isMarkupSupported } from "../alternator/chassis/markup.js";
|
|
18
18
|
import { fail, failQuietly } from "./results.js";
|
|
19
|
+
import { DOC_MAX_BYTES, docOutline, isDocFile } from "./docOutline.js";
|
|
20
|
+
/** Documents and data files outlined when a folder is: how many, and how many entries each. */
|
|
21
|
+
const DIR_DOC_CAP = 12;
|
|
22
|
+
const DIR_DOC_ENTRIES = 12;
|
|
23
|
+
/** The outline lines of one document or data file, or null when it is not one, is too large, or cannot be read. */
|
|
24
|
+
async function docLines(abs, limit) {
|
|
25
|
+
if (!isDocFile(abs))
|
|
26
|
+
return null;
|
|
27
|
+
try {
|
|
28
|
+
if ((await fs.stat(abs)).size > DOC_MAX_BYTES)
|
|
29
|
+
return null;
|
|
30
|
+
return docOutline(abs, await fs.readFile(abs, "utf8"), limit);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
19
36
|
const DIR_FILE_CAP = 40;
|
|
20
37
|
const REF_CAP = 100;
|
|
21
38
|
function indexingNote(ctx) {
|
|
@@ -42,9 +59,8 @@ const outlineDef = {
|
|
|
42
59
|
"unfamiliar area, and it costs one call. " +
|
|
43
60
|
`A directory outline covers at most ${DIR_FILE_CAP} files, so for anything larger ` +
|
|
44
61
|
"treat it as a sample and narrow to a subfolder. Files with no symbols are left out. " +
|
|
45
|
-
"Works on HTML
|
|
46
|
-
"
|
|
47
|
-
"top to bottom.",
|
|
62
|
+
"Works on HTML, CSS, markdown, JSON, YAML, TOML and CSV too: sections, selectors, " +
|
|
63
|
+
"headings and keys with line numbers, so you can navigate a big file without reading it.",
|
|
48
64
|
parameters: {
|
|
49
65
|
type: "object",
|
|
50
66
|
additionalProperties: false,
|
|
@@ -68,11 +84,17 @@ const outlineDef = {
|
|
|
68
84
|
return fail(`path not found: ${rawPath}`);
|
|
69
85
|
}
|
|
70
86
|
const groups = [];
|
|
87
|
+
const docGroups = [];
|
|
88
|
+
let moreDocs = 0;
|
|
71
89
|
let rollup = "";
|
|
72
90
|
let dirTruncated = null;
|
|
73
91
|
if (stat.isFile()) {
|
|
74
92
|
const entries = await (chassisForPath(ctx, abs)?.outline(abs) ?? Promise.resolve([]));
|
|
75
|
-
|
|
93
|
+
const lines = entries.length === 0 ? await docLines(abs) : null;
|
|
94
|
+
if (lines)
|
|
95
|
+
docGroups.push({ file: abs, lines });
|
|
96
|
+
else
|
|
97
|
+
groups.push({ file: abs, entries });
|
|
76
98
|
}
|
|
77
99
|
else {
|
|
78
100
|
// A directory: lead with a folder rollup (counts, central symbols, deps).
|
|
@@ -98,13 +120,19 @@ const outlineDef = {
|
|
|
98
120
|
if (entries.length)
|
|
99
121
|
groups.push({ file: f.abs, entries });
|
|
100
122
|
}
|
|
123
|
+
// The folder's documents and data files after its code: headings and keys, a few per file.
|
|
124
|
+
const docs = files.filter((f) => !excludedFromSearch(f.abs) && isDocFile(f.abs));
|
|
125
|
+
for (const f of docs.slice(0, DIR_DOC_CAP)) {
|
|
126
|
+
const lines = await docLines(f.abs, DIR_DOC_ENTRIES);
|
|
127
|
+
if (lines)
|
|
128
|
+
docGroups.push({ file: f.abs, lines });
|
|
129
|
+
}
|
|
130
|
+
moreDocs = Math.max(0, docs.length - DIR_DOC_CAP);
|
|
101
131
|
}
|
|
102
|
-
const outlineBody =
|
|
103
|
-
.map((g) => {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
})
|
|
107
|
-
.join("\n\n");
|
|
132
|
+
const outlineBody = [
|
|
133
|
+
...groups.map((g) => `${relativize(ctx, g.file)}\n${renderOutlineEntries(g.entries).join("\n")}`),
|
|
134
|
+
...docGroups.map((g) => `${relativize(ctx, g.file)}\n${g.lines.join("\n")}`),
|
|
135
|
+
].join("\n\n") + (moreDocs ? `\n\n(${moreDocs} more document and data files not outlined)` : "");
|
|
108
136
|
const truncNote = dirTruncated
|
|
109
137
|
? `\n\n(outlined ${dirTruncated.shown} of ${dirTruncated.total} files — this is a ` +
|
|
110
138
|
`sample, not the whole folder; narrow to a subfolder to see the rest)`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeIntel.js","sourceRoot":"","sources":["../../src/tools/codeIntel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codeIntel.js","sourceRoot":"","sources":["../../src/tools/codeIntel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* docOutline.ts — the outline of a file that is not code: markdown headings, and the keys of JSON, YAML, TOML and
|
|
3
|
+
* ini files, with line numbers.
|
|
4
|
+
*
|
|
5
|
+
* `outline` knew code, HTML and stylesheets. For everything else the only way to orient in a file was to read it,
|
|
6
|
+
* which is the expensive habit the tool exists to prevent. This is read straight from the text on demand rather
|
|
7
|
+
* than put in the code graph: a heading or a key such as `name` is not a symbol, and indexing them would make
|
|
8
|
+
* every definition lookup for a common word answer with every package.json in the repo.
|
|
9
|
+
*
|
|
10
|
+
* Pure text in, lines out. A file it cannot read the shape of gives null, and the caller says nothing about it.
|
|
11
|
+
*/
|
|
12
|
+
import { extname } from "node:path";
|
|
13
|
+
/** Largest file read to outline. Past it a file's shape is not something to list line by line. */
|
|
14
|
+
export const DOC_MAX_BYTES = 512 * 1024;
|
|
15
|
+
/** Entries shown for one file. */
|
|
16
|
+
export const DOC_MAX_ENTRIES = 80;
|
|
17
|
+
const KINDS = {
|
|
18
|
+
".md": "markdown", ".markdown": "markdown", ".mdx": "markdown",
|
|
19
|
+
".json": "json", ".jsonc": "json",
|
|
20
|
+
".yaml": "yaml", ".yml": "yaml",
|
|
21
|
+
".toml": "toml", ".ini": "toml", ".cfg": "toml",
|
|
22
|
+
".csv": "csv", ".tsv": "csv",
|
|
23
|
+
};
|
|
24
|
+
/** Lock files and generated manifests: huge, and a list of their keys says nothing. */
|
|
25
|
+
const SKIP_NAME = /(^|[\\/])(package-lock\.json|npm-shrinkwrap\.json|yarn\.lock|pnpm-lock\.yaml|composer\.lock|Cargo\.lock|poetry\.lock)$/i;
|
|
26
|
+
/** Whether this path is a file the outline can read the shape of. */
|
|
27
|
+
export function isDocFile(path) {
|
|
28
|
+
return extname(path).toLowerCase() in KINDS && !SKIP_NAME.test(path);
|
|
29
|
+
}
|
|
30
|
+
const row = (line, indent, text) => ` ${String(line).padStart(4)} ${" ".repeat(indent)}${text}`;
|
|
31
|
+
const clip = (s, n = 48) => (s.length > n ? `${s.slice(0, n - 1)}…` : s);
|
|
32
|
+
/** The outline of `text` as printable lines, or null when the file type is not one it reads. */
|
|
33
|
+
export function docOutline(path, text, limit = DOC_MAX_ENTRIES) {
|
|
34
|
+
const kind = KINDS[extname(path).toLowerCase()];
|
|
35
|
+
if (!kind || SKIP_NAME.test(path))
|
|
36
|
+
return null;
|
|
37
|
+
const lines = kind === "markdown" ? markdown(text)
|
|
38
|
+
: kind === "json" ? json(text)
|
|
39
|
+
: kind === "yaml" ? yaml(text)
|
|
40
|
+
: kind === "toml" ? toml(text)
|
|
41
|
+
: csv(text);
|
|
42
|
+
if (lines.length === 0)
|
|
43
|
+
return null;
|
|
44
|
+
if (lines.length <= limit)
|
|
45
|
+
return lines;
|
|
46
|
+
return [...lines.slice(0, limit), ` … ${lines.length - limit} more entries`];
|
|
47
|
+
}
|
|
48
|
+
function markdown(text) {
|
|
49
|
+
const out = [];
|
|
50
|
+
let fence = null;
|
|
51
|
+
text.split(/\r?\n/).forEach((raw, i) => {
|
|
52
|
+
const f = /^\s{0,3}(`{3,}|~{3,})/.exec(raw);
|
|
53
|
+
if (f) {
|
|
54
|
+
if (fence === null)
|
|
55
|
+
fence = f[1][0];
|
|
56
|
+
else if (f[1][0] === fence)
|
|
57
|
+
fence = null;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (fence !== null)
|
|
61
|
+
return;
|
|
62
|
+
const h = /^(#{1,6})\s+(.+?)\s*#*\s*$/.exec(raw);
|
|
63
|
+
if (h)
|
|
64
|
+
out.push(row(i + 1, h[1].length - 1, `${h[1]} ${clip(h[2], 80)}`));
|
|
65
|
+
});
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
/** Keys down to the second level of a JSON document, each with what its value is. Reads JSON with comments too. */
|
|
69
|
+
function json(text) {
|
|
70
|
+
const recs = [];
|
|
71
|
+
const stack = [];
|
|
72
|
+
let line = 1;
|
|
73
|
+
let pendingKey = null;
|
|
74
|
+
let lastRec = null;
|
|
75
|
+
const n = text.length;
|
|
76
|
+
const top = () => stack[stack.length - 1];
|
|
77
|
+
const countValue = () => {
|
|
78
|
+
const t = top();
|
|
79
|
+
if (t && !t.seen) {
|
|
80
|
+
t.seen = true;
|
|
81
|
+
t.items = 1;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
// Only keys of objects nested in objects are listed: an array of records would repeat its keys once per element.
|
|
85
|
+
const listed = () => stack.length >= 1 && stack.length <= 2 && stack.every((f) => f.type === "{");
|
|
86
|
+
for (let i = 0; i < n; i++) {
|
|
87
|
+
const c = text[i];
|
|
88
|
+
if (c === "\n") {
|
|
89
|
+
line++;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (c === " " || c === "\t" || c === "\r")
|
|
93
|
+
continue;
|
|
94
|
+
if (c === "/" && text[i + 1] === "/") {
|
|
95
|
+
while (i < n && text[i] !== "\n")
|
|
96
|
+
i++;
|
|
97
|
+
i--;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (c === "/" && text[i + 1] === "*") {
|
|
101
|
+
i += 2;
|
|
102
|
+
while (i < n && !(text[i] === "*" && text[i + 1] === "/")) {
|
|
103
|
+
if (text[i] === "\n")
|
|
104
|
+
line++;
|
|
105
|
+
i++;
|
|
106
|
+
}
|
|
107
|
+
i++;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (c === '"') {
|
|
111
|
+
const start = i;
|
|
112
|
+
i++;
|
|
113
|
+
while (i < n && text[i] !== '"') {
|
|
114
|
+
if (text[i] === "\\")
|
|
115
|
+
i++;
|
|
116
|
+
if (text[i] === "\n")
|
|
117
|
+
line++;
|
|
118
|
+
i++;
|
|
119
|
+
}
|
|
120
|
+
const lit = text.slice(start + 1, i);
|
|
121
|
+
let j = i + 1;
|
|
122
|
+
while (j < n && (text[j] === " " || text[j] === "\t" || text[j] === "\r" || text[j] === "\n"))
|
|
123
|
+
j++;
|
|
124
|
+
const t = top();
|
|
125
|
+
if (text[j] === ":" && t?.type === "{") {
|
|
126
|
+
pendingKey = { line, name: lit };
|
|
127
|
+
if (!t.seen) {
|
|
128
|
+
t.seen = true;
|
|
129
|
+
t.items = 1;
|
|
130
|
+
}
|
|
131
|
+
if (listed()) {
|
|
132
|
+
const rec = { text: "", line, indent: stack.length - 1, name: lit };
|
|
133
|
+
recs.push(rec);
|
|
134
|
+
lastRec = rec;
|
|
135
|
+
}
|
|
136
|
+
else
|
|
137
|
+
lastRec = null;
|
|
138
|
+
i = j; // past the colon
|
|
139
|
+
// a scalar value: preview it
|
|
140
|
+
let k = i + 1;
|
|
141
|
+
while (k < n && (text[k] === " " || text[k] === "\t"))
|
|
142
|
+
k++;
|
|
143
|
+
if (lastRec && text[k] !== "{" && text[k] !== "[") {
|
|
144
|
+
let e = k;
|
|
145
|
+
if (text[k] === '"') {
|
|
146
|
+
e = k + 1;
|
|
147
|
+
while (e < n && text[e] !== '"') {
|
|
148
|
+
if (text[e] === "\\")
|
|
149
|
+
e++;
|
|
150
|
+
e++;
|
|
151
|
+
}
|
|
152
|
+
e++;
|
|
153
|
+
}
|
|
154
|
+
else
|
|
155
|
+
while (e < n && !",}\n\r".includes(text[e]))
|
|
156
|
+
e++;
|
|
157
|
+
lastRec.text = `${lit}: ${clip(text.slice(k, e).trim())}`;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else
|
|
161
|
+
countValue();
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (c === "{" || c === "[") {
|
|
165
|
+
const rec = pendingKey && listed() ? lastRec : null;
|
|
166
|
+
pendingKey = null;
|
|
167
|
+
countValue();
|
|
168
|
+
stack.push({ type: c, items: 0, seen: false, rec });
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (c === "}" || c === "]") {
|
|
172
|
+
const f = stack.pop();
|
|
173
|
+
if (f?.rec)
|
|
174
|
+
f.rec.text = `${f.rec.name}: ${c === "}" ? `{${f.items} key${f.items === 1 ? "" : "s"}}` : `[${f.items} item${f.items === 1 ? "" : "s"}]`}`;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
if (c === ",") {
|
|
178
|
+
const t = top();
|
|
179
|
+
if (t)
|
|
180
|
+
t.items++;
|
|
181
|
+
pendingKey = null;
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
// a bare scalar (number, true, false, null)
|
|
185
|
+
countValue();
|
|
186
|
+
while (i + 1 < n && !",}] \t\r\n".includes(text[i + 1]))
|
|
187
|
+
i++;
|
|
188
|
+
}
|
|
189
|
+
return recs.filter((r) => r.text).map((r) => row(r.line, r.indent, r.text));
|
|
190
|
+
}
|
|
191
|
+
/** Top-level keys and their direct children in a YAML file, with a preview of a plain value. */
|
|
192
|
+
function yaml(text) {
|
|
193
|
+
const out = [];
|
|
194
|
+
let block = -1; // indent of a block scalar's key: its lines are text, not keys
|
|
195
|
+
let child = -1; // indent of the keys one level below the current top-level key
|
|
196
|
+
text.split(/\r?\n/).forEach((raw, i) => {
|
|
197
|
+
if (!raw.trim() || /^\s*#/.test(raw) || /^---|^\.\.\./.test(raw))
|
|
198
|
+
return;
|
|
199
|
+
const indent = raw.length - raw.trimStart().length;
|
|
200
|
+
if (block >= 0) {
|
|
201
|
+
if (indent > block)
|
|
202
|
+
return;
|
|
203
|
+
block = -1;
|
|
204
|
+
}
|
|
205
|
+
const m = /^(\s*)(?:-\s+)?("[^"]+"|'[^']+'|[^\s:#][^:#]*?):(?:\s+(.*))?$/.exec(raw);
|
|
206
|
+
if (!m)
|
|
207
|
+
return;
|
|
208
|
+
// The second level is whatever indent the first nested key under a top-level key uses; anything deeper is left out.
|
|
209
|
+
if (indent === 0)
|
|
210
|
+
child = -1;
|
|
211
|
+
else if (child < 0)
|
|
212
|
+
child = indent;
|
|
213
|
+
const depth = indent === 0 ? 0 : indent === child ? 1 : 2;
|
|
214
|
+
if (depth > 1)
|
|
215
|
+
return;
|
|
216
|
+
const value = (m[3] ?? "").replace(/\s+#.*$/, "").trim();
|
|
217
|
+
if (/^[|>][+-]?\d*$/.test(value))
|
|
218
|
+
block = indent;
|
|
219
|
+
const shown = value && !/^[|>]/.test(value) ? `: ${clip(value)}` : ":";
|
|
220
|
+
out.push(row(i + 1, depth, `${m[2].replace(/^["']|["']$/g, "")}${shown}`));
|
|
221
|
+
});
|
|
222
|
+
return out;
|
|
223
|
+
}
|
|
224
|
+
/** Tables (`[a.b]`, `[[c]]`) and the keys before the first one, for TOML and ini files. */
|
|
225
|
+
function toml(text) {
|
|
226
|
+
const out = [];
|
|
227
|
+
let inTable = false;
|
|
228
|
+
text.split(/\r?\n/).forEach((raw, i) => {
|
|
229
|
+
const t = /^\s*(\[\[?[^\]]+\]\]?)\s*(?:#.*)?$/.exec(raw);
|
|
230
|
+
if (t) {
|
|
231
|
+
inTable = true;
|
|
232
|
+
out.push(row(i + 1, 0, t[1]));
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (inTable || /^\s*[#;]/.test(raw))
|
|
236
|
+
return;
|
|
237
|
+
const k = /^\s*([A-Za-z0-9_.\-"']+)\s*[=:]\s*(.*)$/.exec(raw);
|
|
238
|
+
if (k)
|
|
239
|
+
out.push(row(i + 1, 0, `${k[1]}: ${clip(k[2].trim())}`));
|
|
240
|
+
});
|
|
241
|
+
return out;
|
|
242
|
+
}
|
|
243
|
+
/** A table's header row and how many rows follow. */
|
|
244
|
+
function csv(text) {
|
|
245
|
+
const rows = text.split(/\r?\n/).filter((l) => l.length > 0);
|
|
246
|
+
if (rows.length === 0)
|
|
247
|
+
return [];
|
|
248
|
+
return [row(1, 0, `columns: ${clip(rows[0], 120)}`), row(1, 0, `${rows.length - 1} row${rows.length === 2 ? "" : "s"}`)];
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=docOutline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docOutline.js","sourceRoot":"","sources":["../../src/tools/docOutline.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/edit.js
CHANGED
|
@@ -78,6 +78,9 @@ export const edit = {
|
|
|
78
78
|
// Validate and normalize each edit up front, so a bad shape is reported before we
|
|
79
79
|
// touch the file.
|
|
80
80
|
const ops = [];
|
|
81
|
+
/** The 1-based position each op had in the call, and the positions of the no-ops left out. */
|
|
82
|
+
const numbers = [];
|
|
83
|
+
const skipped = [];
|
|
81
84
|
for (let i = 0; i < args.edits.length; i++) {
|
|
82
85
|
const e = args.edits[i];
|
|
83
86
|
if (!e || typeof e !== "object")
|
|
@@ -95,11 +98,23 @@ export const edit = {
|
|
|
95
98
|
if (typeof e.new_string !== "string") {
|
|
96
99
|
return failQuietly(`edit #${i + 1}: \`new_string\` is required (use an empty string to delete).`);
|
|
97
100
|
}
|
|
101
|
+
// An edit that changes nothing is skipped, not failed: failing it threw away every other edit in the
|
|
102
|
+
// batch (13 failed batches in real sessions took 24 good edits with them) and cost a round trip to resend.
|
|
98
103
|
if (e.old_string === e.new_string) {
|
|
99
|
-
|
|
104
|
+
skipped.push(i + 1);
|
|
105
|
+
continue;
|
|
100
106
|
}
|
|
107
|
+
numbers.push(i + 1);
|
|
101
108
|
ops.push({ oldString: e.old_string, newString: e.new_string, replaceAll: e.replace_all === true });
|
|
102
109
|
}
|
|
110
|
+
if (ops.length === 0) {
|
|
111
|
+
return failQuietly(skipped.length === 1
|
|
112
|
+
? `edit #${skipped[0]}: \`old_string\` and \`new_string\` are identical — nothing to change.`
|
|
113
|
+
: `every edit has an \`old_string\` identical to its \`new_string\` — nothing to change.`);
|
|
114
|
+
}
|
|
115
|
+
const skippedNote = skipped.length > 0
|
|
116
|
+
? `\nSkipped edit${skipped.length === 1 ? "" : "s"} ${skipped.map((n) => `#${n}`).join(", ")}: old_string and new_string were identical, so nothing was changed there.`
|
|
117
|
+
: "";
|
|
103
118
|
const preview = ops.map((o) => `- ${o.oldString}\n+ ${o.newString}`).join("\n\n");
|
|
104
119
|
const target = await prepareEditTarget(ctx, rawPath, "editing", preview);
|
|
105
120
|
if (!target.ok)
|
|
@@ -120,7 +135,7 @@ export const edit = {
|
|
|
120
135
|
const reason = /[.!?]$/.test(seq.reason) ? seq.reason : `${seq.reason}.`;
|
|
121
136
|
// Quiet: the model has the reason and the candidate locations and fixes its own
|
|
122
137
|
// aim. Nothing reached disk, so there is nothing for the user to act on.
|
|
123
|
-
const which =
|
|
138
|
+
const which = args.edits.length === 1 ? "the edit" : `edit #${numbers[seq.index]}`;
|
|
124
139
|
return failQuietly(`${which} could not be applied to ${rawPath}: ${reason} No changes were written.`);
|
|
125
140
|
}
|
|
126
141
|
const updated = applyEol(seq.updated, eol);
|
|
@@ -164,7 +179,7 @@ export const edit = {
|
|
|
164
179
|
: `Edited ${shown}: ${nEdits} edits, ${seq.total} replacement${seq.total === 1 ? "" : "s"} total.`;
|
|
165
180
|
return {
|
|
166
181
|
output: `${headline}\n` +
|
|
167
|
-
`Changed region — line-numbered so you can make further edits without re-reading:\n${window}`,
|
|
182
|
+
`Changed region — line-numbered so you can make further edits without re-reading:\n${window}${skippedNote}`,
|
|
168
183
|
summary: `edited ${shown} · ${scope}`,
|
|
169
184
|
// What changed in the file, numbered, with a little context; the old-then-new listing only when the two cannot be compared.
|
|
170
185
|
detail: withScope(scope, diffDetail(normalizeLf(content), seq.updated) ?? multiEditDetail(ops)),
|