@wrongstack/tools 0.313.0 → 0.313.1
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/audit.js +10 -4055
- package/dist/bash.js +9 -2308
- package/dist/batch-tool-use.js +2 -187
- package/dist/browser/index.js +25 -1339
- package/dist/builtin.js +69 -33949
- package/dist/chunk-2CTB3UK5.js +197 -0
- package/dist/chunk-2ME7ZWDD.js +1272 -0
- package/dist/chunk-2TFQDEPU.js +113 -0
- package/dist/chunk-2ZCJNKFE.js +315 -0
- package/dist/chunk-3PVYQFRQ.js +472 -0
- package/dist/chunk-3QMQBO5Z.js +89 -0
- package/dist/chunk-42AKKX7O.js +385 -0
- package/dist/chunk-42SKEETB.js +113 -0
- package/dist/chunk-4BHUSMNL.js +104 -0
- package/dist/chunk-4I4LWFOO.js +431 -0
- package/dist/chunk-553IQUMO.js +478 -0
- package/dist/chunk-55KF77OK.js +1944 -0
- package/dist/chunk-6HLZK37X.js +359 -0
- package/dist/chunk-6RNIFLG4.js +305 -0
- package/dist/chunk-A6BRWIXN.js +317 -0
- package/dist/chunk-AHHDWNXC.js +200 -0
- package/dist/chunk-B2CIOKWP.js +899 -0
- package/dist/chunk-BTSFTGIL.js +7 -0
- package/dist/chunk-D33S4RQG.js +222 -0
- package/dist/chunk-DIJKHSUO.js +134 -0
- package/dist/chunk-DPL47QGS.js +3515 -0
- package/dist/chunk-EMRGN4KM.js +170 -0
- package/dist/chunk-FGOABE4Z.js +955 -0
- package/dist/chunk-FW65TP4G.js +520 -0
- package/dist/chunk-GOIZNNOA.js +221 -0
- package/dist/chunk-H5MJUAA6.js +295 -0
- package/dist/chunk-H5OHH6F4.js +223 -0
- package/dist/chunk-HC5RM4WY.js +199 -0
- package/dist/chunk-HEQFMLZ7.js +190 -0
- package/dist/chunk-HFXSNKCV.js +196 -0
- package/dist/chunk-HXSBQ2SE.js +1723 -0
- package/dist/chunk-ILESNGNM.js +163 -0
- package/dist/chunk-INF5CGAO.js +137 -0
- package/dist/chunk-IWDFZ6XR.js +337 -0
- package/dist/chunk-IXMNTNW5.js +238 -0
- package/dist/chunk-J4SRJKBW.js +428 -0
- package/dist/chunk-J5SKD6LN.js +235 -0
- package/dist/chunk-JRJJX3L5.js +424 -0
- package/dist/chunk-KXNDHMUB.js +366 -0
- package/dist/chunk-LIJQMYYX.js +59 -0
- package/dist/chunk-MAN26PZ5.js +260 -0
- package/dist/chunk-MKRQMLZA.js +474 -0
- package/dist/chunk-NBDZMMG2.js +169 -0
- package/dist/chunk-NHA6BEIH.js +101 -0
- package/dist/chunk-OA6YJIWL.js +4412 -0
- package/dist/chunk-OZC255IC.js +2830 -0
- package/dist/chunk-PUR6WU2B.js +154 -0
- package/dist/chunk-Q5JPPCZC.js +12 -0
- package/dist/chunk-QBV725YG.js +128 -0
- package/dist/chunk-QHVW4AAM.js +892 -0
- package/dist/chunk-QNJ7AQ4B.js +1000 -0
- package/dist/chunk-RGISBZBD.js +231 -0
- package/dist/chunk-RJZQWEMS.js +84 -0
- package/dist/chunk-RP2ZA47V.js +15 -0
- package/dist/chunk-RXISBFR5.js +315 -0
- package/dist/chunk-S5CCLZL3.js +99 -0
- package/dist/chunk-TVTCSBJF.js +122 -0
- package/dist/chunk-U4D5S3VQ.js +21 -0
- package/dist/chunk-U4VAATKP.js +193 -0
- package/dist/chunk-UKU2ZX4C.js +203 -0
- package/dist/chunk-UNSKG6DC.js +159 -0
- package/dist/chunk-URFKEIHM.js +1091 -0
- package/dist/chunk-UTV7YAW7.js +178 -0
- package/dist/chunk-V43EQ6VR.js +68 -0
- package/dist/chunk-VB3MJGCV.js +610 -0
- package/dist/chunk-WHIIIREL.js +223 -0
- package/dist/chunk-XMIFYKUT.js +1371 -0
- package/dist/chunk-YF2RSV34.js +54 -0
- package/dist/chunk-Z6DAKQ3U.js +1 -0
- package/dist/chunk-ZIGAZFWE.js +522 -0
- package/dist/circuit-breaker.js +3 -191
- package/dist/codebase-index/index.js +84 -13688
- package/dist/codebase-index/parser-worker-script.js +8 -3995
- package/dist/codebase-index/project-server.js +60 -8548
- package/dist/codebase-index/worker.js +20 -8416
- package/dist/design.js +2 -299
- package/dist/diff.js +4 -256
- package/dist/document.js +4 -222
- package/dist/e2e.js +5 -476
- package/dist/edit.js +14 -10200
- package/dist/exec.js +16 -3131
- package/dist/fetch.js +8 -398
- package/dist/format.js +10 -3750
- package/dist/generic-parser-VUXDIAOZ.js +13 -0
- package/dist/git.js +4 -380
- package/dist/glob.js +6 -280
- package/dist/go-parser-6CA77WZ4.js +469 -0
- package/dist/grep.js +7 -604
- package/dist/index.js +318 -35387
- package/dist/install.js +10 -4091
- package/dist/json-parser-7YMDJSBJ.js +213 -0
- package/dist/json.js +4 -665
- package/dist/kanban.js +3 -2096
- package/dist/languages/index.js +23 -4664
- package/dist/legacy-bridge-7UKZT46G.js +18 -0
- package/dist/lint.js +10 -3706
- package/dist/logs.js +4 -287
- package/dist/memory.js +6 -215
- package/dist/mode.js +3 -99
- package/dist/outdated.js +4 -5170
- package/dist/pack.js +65 -33897
- package/dist/parser-dispatch-VPOFDO2U.js +14 -0
- package/dist/patch.js +13 -9935
- package/dist/plan.js +5 -3286
- package/dist/process-registry.js +8 -651
- package/dist/ps-slash.js +12 -1439
- package/dist/py-parser-GPM5VYRG.js +16 -0
- package/dist/read.js +13 -9816
- package/dist/replace.js +15 -10014
- package/dist/rs-parser-WVQ4KYCX.js +81 -0
- package/dist/scaffold.js +4 -253
- package/dist/search.js +5 -585
- package/dist/session-kanban.js +30 -972
- package/dist/skill.js +2 -215
- package/dist/task.js +5 -3410
- package/dist/test.js +10 -3773
- package/dist/todo.js +4 -2891
- package/dist/tool-help.js +3 -123
- package/dist/tool-search.js +3 -79
- package/dist/tool-tier.js +68 -33984
- package/dist/tool-use.js +2 -93
- package/dist/tree-sitter-parser-YCILHGZD.js +17 -0
- package/dist/tree.js +4 -288
- package/dist/ts-parser-YH4ZMWMH.js +232 -0
- package/dist/typecheck.js +10 -3753
- package/dist/win32.js +6 -60
- package/dist/write.js +14 -9882
- package/dist/yaml-parser-GFAOKV53.js +157 -0
- package/package.json +5 -5
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import {
|
|
2
|
+
tryLegacyCodeOperation
|
|
3
|
+
} from "./chunk-NHA6BEIH.js";
|
|
4
|
+
import {
|
|
5
|
+
spawnStream
|
|
6
|
+
} from "./chunk-MAN26PZ5.js";
|
|
7
|
+
import {
|
|
8
|
+
normalizeCommandOutput,
|
|
9
|
+
safeResolveReal
|
|
10
|
+
} from "./chunk-D33S4RQG.js";
|
|
11
|
+
|
|
12
|
+
// src/format.ts
|
|
13
|
+
var formatTool = {
|
|
14
|
+
name: "format",
|
|
15
|
+
category: "Code Quality",
|
|
16
|
+
description: "Format source files according to project style (Biome). Can also run in check-only mode.",
|
|
17
|
+
usageHint: "RUN REGULARLY:\n\n- Use on changed files before committing.\n- `check: true` verifies formatting without making changes (useful in CI-like flows).\nThis project has very consistent formatting expectations. Always ensure your changes are formatted.",
|
|
18
|
+
permission: "confirm",
|
|
19
|
+
// WS-046: gives permission decisions something to key on.
|
|
20
|
+
// The files being rewritten are the subject; the fixer is how, not what.
|
|
21
|
+
subjectKey: "files",
|
|
22
|
+
mutating: true,
|
|
23
|
+
capabilities: ["fs.write", "shell.restricted"],
|
|
24
|
+
icon: "code",
|
|
25
|
+
timeoutMs: 6e4,
|
|
26
|
+
inputSchema: {
|
|
27
|
+
type: "object",
|
|
28
|
+
properties: {
|
|
29
|
+
files: {
|
|
30
|
+
type: "string",
|
|
31
|
+
description: "Files/patterns: single path, comma-separated list, or glob"
|
|
32
|
+
},
|
|
33
|
+
fixer: {
|
|
34
|
+
type: "string",
|
|
35
|
+
enum: ["biome", "prettier", "auto"],
|
|
36
|
+
description: "Formatter to use (default: auto-detect)"
|
|
37
|
+
},
|
|
38
|
+
check: {
|
|
39
|
+
type: "boolean",
|
|
40
|
+
description: "Verify only, do not modify files (default: false)"
|
|
41
|
+
},
|
|
42
|
+
cwd: { type: "string", description: "Working directory (default: cwd)" }
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
async execute(input, ctx, opts) {
|
|
46
|
+
let final;
|
|
47
|
+
const executeStream = formatTool.executeStream;
|
|
48
|
+
if (!executeStream) throw new Error("formatTool: stream execution unavailable");
|
|
49
|
+
for await (const ev of executeStream(input, ctx, opts)) {
|
|
50
|
+
if (ev.type === "final") final = ev.output;
|
|
51
|
+
}
|
|
52
|
+
if (!final) throw new Error("format: stream ended without final event");
|
|
53
|
+
return final;
|
|
54
|
+
},
|
|
55
|
+
async *executeStream(input, ctx, opts) {
|
|
56
|
+
const cwd = input.cwd ? await safeResolveReal(input.cwd, ctx) : ctx.cwd;
|
|
57
|
+
const fixer = input.fixer ?? "auto";
|
|
58
|
+
if (fixer === "auto" && !input.files) {
|
|
59
|
+
const op = input.check ? "format-check" : "format-write";
|
|
60
|
+
const bridge = await tryLegacyCodeOperation(op, {
|
|
61
|
+
cwd,
|
|
62
|
+
projectRoot: ctx.projectRoot,
|
|
63
|
+
signal: opts.signal
|
|
64
|
+
});
|
|
65
|
+
if (bridge?.run) {
|
|
66
|
+
const run = bridge.run;
|
|
67
|
+
yield {
|
|
68
|
+
type: "final",
|
|
69
|
+
output: {
|
|
70
|
+
fixer: bridge.language,
|
|
71
|
+
// Language-bridge runs don't report per-file counts.
|
|
72
|
+
files_checked: void 0,
|
|
73
|
+
files_changed: void 0,
|
|
74
|
+
output: normalizeCommandOutput(run.output || run.error || ""),
|
|
75
|
+
truncated: run.truncated
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const detected = fixer === "auto" ? await detectFixer(cwd) : fixer;
|
|
82
|
+
if (!detected) {
|
|
83
|
+
yield {
|
|
84
|
+
type: "final",
|
|
85
|
+
output: {
|
|
86
|
+
fixer: "none",
|
|
87
|
+
files_checked: 0,
|
|
88
|
+
files_changed: 0,
|
|
89
|
+
output: "No formatter found (biome.json, .prettierrc)",
|
|
90
|
+
truncated: false
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
yield {
|
|
96
|
+
type: "log",
|
|
97
|
+
text: `Running ${detected}\u2026`,
|
|
98
|
+
data: { fixer: detected, check: !!input.check }
|
|
99
|
+
};
|
|
100
|
+
const fileList = input.files ? (Array.isArray(input.files) ? input.files : input.files.split(",")).map((f) => f.trim()) : [];
|
|
101
|
+
let args;
|
|
102
|
+
if (detected === "prettier") {
|
|
103
|
+
args = [input.check ? "--check" : "--write"];
|
|
104
|
+
args.push(...fileList.length > 0 ? fileList : ["."]);
|
|
105
|
+
} else {
|
|
106
|
+
args = ["format", input.check ? "--check" : "--write"];
|
|
107
|
+
if (fileList.length > 0) args.push("--", ...fileList);
|
|
108
|
+
}
|
|
109
|
+
const result = yield* spawnStream({
|
|
110
|
+
cmd: detected,
|
|
111
|
+
args,
|
|
112
|
+
cwd,
|
|
113
|
+
signal: opts.signal,
|
|
114
|
+
maxBytes: 1e5
|
|
115
|
+
});
|
|
116
|
+
const combinedOut = `${result.stdout}
|
|
117
|
+
${result.stderr}`;
|
|
118
|
+
const counts = parseFormatterCounts(detected, combinedOut);
|
|
119
|
+
yield {
|
|
120
|
+
type: "final",
|
|
121
|
+
output: {
|
|
122
|
+
fixer: detected,
|
|
123
|
+
files_checked: counts.checked,
|
|
124
|
+
files_changed: counts.changed,
|
|
125
|
+
output: normalizeCommandOutput(result.stdout || result.stderr || result.error || ""),
|
|
126
|
+
truncated: result.truncated
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
function parseFormatterCounts(fixer, output) {
|
|
132
|
+
if (fixer !== "biome") return { checked: void 0, changed: void 0 };
|
|
133
|
+
const checkedMatch = /\b(?:Checked|Formatted)\s+(\d+)\s+files?\b/i.exec(output);
|
|
134
|
+
const changedMatch = /\bFixed\s+(\d+)\s+files?\b/i.exec(output);
|
|
135
|
+
return {
|
|
136
|
+
checked: checkedMatch?.[1] !== void 0 ? Number(checkedMatch[1]) : void 0,
|
|
137
|
+
changed: changedMatch?.[1] !== void 0 ? Number(changedMatch[1]) : void 0
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
async function detectFixer(cwd) {
|
|
141
|
+
const fs = await import("node:fs/promises");
|
|
142
|
+
const exists = async (file) => {
|
|
143
|
+
try {
|
|
144
|
+
await fs.stat(`${cwd}/${file}`);
|
|
145
|
+
return true;
|
|
146
|
+
} catch {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
if (await exists("biome.json") || await exists("biome.jsonc")) return "biome";
|
|
151
|
+
const PRETTIER_CONFIGS = [
|
|
152
|
+
".prettierrc",
|
|
153
|
+
".prettierrc.json",
|
|
154
|
+
".prettierrc.yml",
|
|
155
|
+
".prettierrc.yaml",
|
|
156
|
+
".prettierrc.js",
|
|
157
|
+
".prettierrc.cjs",
|
|
158
|
+
".prettierrc.mjs",
|
|
159
|
+
"prettier.config.js",
|
|
160
|
+
"prettier.config.cjs",
|
|
161
|
+
"prettier.config.mjs"
|
|
162
|
+
];
|
|
163
|
+
for (const cfg of PRETTIER_CONFIGS) {
|
|
164
|
+
if (await exists(cfg)) return "prettier";
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
const raw = await fs.readFile(`${cwd}/package.json`, "utf8");
|
|
168
|
+
const pkg = JSON.parse(raw);
|
|
169
|
+
if (pkg["prettier"] !== void 0) return "prettier";
|
|
170
|
+
} catch {
|
|
171
|
+
}
|
|
172
|
+
return "biome";
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export {
|
|
176
|
+
formatTool
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=chunk-UTV7YAW7.js.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// src/_win32-resolve.ts
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
function resolveWin32Command(cmd) {
|
|
5
|
+
if (process.platform !== "win32") return cmd;
|
|
6
|
+
if (cmd.includes("/") || cmd.includes("\\") || path.extname(cmd.replace(/\//g, "\\"))) {
|
|
7
|
+
return cmd;
|
|
8
|
+
}
|
|
9
|
+
const pathext = (process.env["PATHEXT"] ?? ".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC").toLowerCase().split(";");
|
|
10
|
+
const pathDirs = (process.env["PATH"] ?? "").split(path.delimiter);
|
|
11
|
+
for (const dir of pathDirs) {
|
|
12
|
+
const base = path.join(dir, cmd);
|
|
13
|
+
for (const ext of pathext) {
|
|
14
|
+
const full = `${base}${ext}`;
|
|
15
|
+
try {
|
|
16
|
+
fs.accessSync(full, fs.constants.X_OK);
|
|
17
|
+
return full;
|
|
18
|
+
} catch {
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return cmd;
|
|
23
|
+
}
|
|
24
|
+
function resolvePowerShell(cmd) {
|
|
25
|
+
if (process.platform !== "win32") return cmd;
|
|
26
|
+
const lower = cmd.toLowerCase();
|
|
27
|
+
if (lower !== "pwsh" && lower !== "powershell" && lower !== "pwsh.exe" && lower !== "powershell.exe") {
|
|
28
|
+
return resolveWin32Command(cmd);
|
|
29
|
+
}
|
|
30
|
+
const primary = lower.startsWith("pwsh") ? "pwsh" : "powershell";
|
|
31
|
+
const fallback = lower.startsWith("pwsh") ? "powershell" : "pwsh";
|
|
32
|
+
const resolved = resolveWin32Command(primary);
|
|
33
|
+
if (resolved === primary) {
|
|
34
|
+
const fb = resolveWin32Command(fallback);
|
|
35
|
+
return fb === fallback ? cmd : fb;
|
|
36
|
+
}
|
|
37
|
+
return resolved;
|
|
38
|
+
}
|
|
39
|
+
var WIN32_SHELL_META = /[&|<>"%\r\n\0]/;
|
|
40
|
+
function assertSafeWin32ShellArgs(args) {
|
|
41
|
+
for (const arg of args) {
|
|
42
|
+
if (typeof arg === "string" && WIN32_SHELL_META.test(arg)) {
|
|
43
|
+
throw new Error(
|
|
44
|
+
'win32 cmd shim spawn: argument contains a shell metacharacter (one of & | < > " %, or a newline) that could enable command injection through the .cmd/.bat wrapper - refusing to run. Offending argument: ' + JSON.stringify(arg)
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function buildWin32CmdShimInvocation(command, args = []) {
|
|
50
|
+
assertSafeWin32ShellArgs([command, ...args]);
|
|
51
|
+
const line = ["call", quoteWin32CmdArg(command), ...args.map(quoteWin32CmdArg)].join(" ");
|
|
52
|
+
return {
|
|
53
|
+
command: process.env["COMSPEC"] ?? "cmd.exe",
|
|
54
|
+
args: ["/d", "/c", line],
|
|
55
|
+
windowsVerbatimArguments: true
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function quoteWin32CmdArg(arg) {
|
|
59
|
+
return `"${arg}"`;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export {
|
|
63
|
+
resolveWin32Command,
|
|
64
|
+
resolvePowerShell,
|
|
65
|
+
assertSafeWin32ShellArgs,
|
|
66
|
+
buildWin32CmdShimInvocation
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=chunk-V43EQ6VR.js.map
|