@wrongstack/tools 0.313.0 → 0.316.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.
Files changed (182) hide show
  1. package/dist/_edit-match.d.ts +3 -2
  2. package/dist/_output-spool.d.ts +4 -3
  3. package/dist/_shell-pick.d.ts +2 -1
  4. package/dist/_spawn-stream.d.ts +2 -1
  5. package/dist/_syntax-check.d.ts +2 -1
  6. package/dist/audit.js +10 -4055
  7. package/dist/bash-kill-guard.d.ts +3 -6
  8. package/dist/bash.js +9 -2308
  9. package/dist/batch-tool-use.js +2 -187
  10. package/dist/browser/index.js +25 -1339
  11. package/dist/browser/network-guard-proxy.d.ts +2 -1
  12. package/dist/builtin.js +69 -33949
  13. package/dist/chunk-22B7GE5T.js +260 -0
  14. package/dist/chunk-2VSZC6QM.js +113 -0
  15. package/dist/chunk-3PVYQFRQ.js +472 -0
  16. package/dist/chunk-42BHI7TN.js +337 -0
  17. package/dist/chunk-4BHUSMNL.js +104 -0
  18. package/dist/chunk-4I4LWFOO.js +431 -0
  19. package/dist/chunk-4UESMQDP.js +122 -0
  20. package/dist/chunk-553IQUMO.js +478 -0
  21. package/dist/chunk-5H4GSJAI.js +223 -0
  22. package/dist/chunk-6RNIFLG4.js +305 -0
  23. package/dist/chunk-7EY5DCRO.js +434 -0
  24. package/dist/chunk-A6BRWIXN.js +317 -0
  25. package/dist/chunk-AHHDWNXC.js +200 -0
  26. package/dist/chunk-BSLVR56S.js +199 -0
  27. package/dist/chunk-BTSFTGIL.js +7 -0
  28. package/dist/chunk-D33S4RQG.js +222 -0
  29. package/dist/chunk-DA4KNE2H.js +4412 -0
  30. package/dist/chunk-DR7JOQTC.js +520 -0
  31. package/dist/chunk-EEOFQDT6.js +898 -0
  32. package/dist/chunk-EJWSCQ6D.js +137 -0
  33. package/dist/chunk-EMRGN4KM.js +170 -0
  34. package/dist/chunk-FQZOHLG3.js +89 -0
  35. package/dist/chunk-GOIZNNOA.js +221 -0
  36. package/dist/chunk-HFXSNKCV.js +196 -0
  37. package/dist/chunk-HYX2TZ7O.js +1272 -0
  38. package/dist/chunk-I64BS3VC.js +15 -0
  39. package/dist/chunk-IVWV2UM6.js +955 -0
  40. package/dist/chunk-IXMNTNW5.js +238 -0
  41. package/dist/chunk-IYK7XGDZ.js +892 -0
  42. package/dist/chunk-J5SKD6LN.js +235 -0
  43. package/dist/chunk-JNNVRHMV.js +2111 -0
  44. package/dist/chunk-JOHXDF3D.js +295 -0
  45. package/dist/chunk-JRJJX3L5.js +424 -0
  46. package/dist/chunk-K3WNSHUF.js +1371 -0
  47. package/dist/chunk-L25CVUVR.js +2830 -0
  48. package/dist/chunk-LIJQMYYX.js +59 -0
  49. package/dist/chunk-LWKUTMD5.js +197 -0
  50. package/dist/chunk-MQX2KXVW.js +54 -0
  51. package/dist/chunk-MZZN7VCD.js +359 -0
  52. package/dist/chunk-NBDZMMG2.js +169 -0
  53. package/dist/chunk-NKJW5GFO.js +366 -0
  54. package/dist/chunk-NKNOBUBU.js +522 -0
  55. package/dist/chunk-O4MBV4AX.js +134 -0
  56. package/dist/chunk-OUBDL3WH.js +3515 -0
  57. package/dist/chunk-PQKK5JH7.js +101 -0
  58. package/dist/chunk-PY2IOS7C.js +1000 -0
  59. package/dist/chunk-Q5JPPCZC.js +12 -0
  60. package/dist/chunk-QBV725YG.js +128 -0
  61. package/dist/chunk-QZQSPUBF.js +315 -0
  62. package/dist/chunk-RGISBZBD.js +231 -0
  63. package/dist/chunk-RJZQWEMS.js +84 -0
  64. package/dist/chunk-RXISBFR5.js +315 -0
  65. package/dist/chunk-S5CCLZL3.js +99 -0
  66. package/dist/chunk-SDLVH5RZ.js +178 -0
  67. package/dist/chunk-T2F4S7U4.js +1723 -0
  68. package/dist/chunk-TEBQ4VPZ.js +163 -0
  69. package/dist/chunk-U4D5S3VQ.js +21 -0
  70. package/dist/chunk-U4VAATKP.js +193 -0
  71. package/dist/chunk-UCYQTZ7F.js +113 -0
  72. package/dist/chunk-UKU2ZX4C.js +203 -0
  73. package/dist/chunk-UNSKG6DC.js +159 -0
  74. package/dist/chunk-V43EQ6VR.js +68 -0
  75. package/dist/chunk-VB3MJGCV.js +610 -0
  76. package/dist/chunk-VFKPWSOX.js +154 -0
  77. package/dist/chunk-VJNHFZ7J.js +190 -0
  78. package/dist/chunk-VXECAJJ7.js +1091 -0
  79. package/dist/chunk-WHIIIREL.js +223 -0
  80. package/dist/chunk-Z6DAKQ3U.js +1 -0
  81. package/dist/chunk-ZJQ4IGXK.js +474 -0
  82. package/dist/chunk-ZLTFLC25.js +385 -0
  83. package/dist/circuit-breaker.js +3 -191
  84. package/dist/codebase-index/ast-invariant-engine.d.ts +5 -4
  85. package/dist/codebase-index/binary-frame.d.ts +0 -2
  86. package/dist/codebase-index/bm25.d.ts +1 -1
  87. package/dist/codebase-index/circuit-breaker.d.ts +2 -1
  88. package/dist/codebase-index/codebase-ast-replace-tool.d.ts +3 -2
  89. package/dist/codebase-index/codebase-impact-analysis-tool.d.ts +4 -3
  90. package/dist/codebase-index/codebase-invariant-check-tool.d.ts +3 -2
  91. package/dist/codebase-index/codebase-repo-map-tool.d.ts +3 -2
  92. package/dist/codebase-index/codebase-skeleton-tool.d.ts +3 -2
  93. package/dist/codebase-index/codebase-targeted-test-tool.d.ts +3 -2
  94. package/dist/codebase-index/content-hash.d.ts +0 -2
  95. package/dist/codebase-index/import-extractor.d.ts +0 -13
  96. package/dist/codebase-index/index-service.d.ts +1 -1
  97. package/dist/codebase-index/index.js +84 -13688
  98. package/dist/codebase-index/languages.d.ts +2 -1
  99. package/dist/codebase-index/module-roots.d.ts +3 -2
  100. package/dist/codebase-index/parser-batch.d.ts +0 -5
  101. package/dist/codebase-index/parser-dispatch.d.ts +2 -1
  102. package/dist/codebase-index/parser-output.d.ts +4 -3
  103. package/dist/codebase-index/parser-worker-pool.d.ts +0 -2
  104. package/dist/codebase-index/parser-worker-script.d.ts +1 -16
  105. package/dist/codebase-index/parser-worker-script.js +8 -3995
  106. package/dist/codebase-index/project-server-client-state.d.ts +2 -2
  107. package/dist/codebase-index/project-server-endpoint.d.ts +0 -15
  108. package/dist/codebase-index/project-server.js +60 -8548
  109. package/dist/codebase-index/tree-sitter/visitor.d.ts +2 -1
  110. package/dist/codebase-index/tree-sitter-parser.d.ts +0 -2
  111. package/dist/codebase-index/ts-parser.d.ts +1 -1
  112. package/dist/codebase-index/vector-search.d.ts +2 -1
  113. package/dist/codebase-index/wal-maintenance.d.ts +3 -2
  114. package/dist/codebase-index/worker.js +20 -8416
  115. package/dist/codebase-index/writer-admin.d.ts +0 -1
  116. package/dist/codebase-index/writer-search.d.ts +0 -9
  117. package/dist/design.js +2 -299
  118. package/dist/diff.js +4 -256
  119. package/dist/document.js +4 -222
  120. package/dist/e2e.js +5 -476
  121. package/dist/edit.js +14 -10200
  122. package/dist/exec.js +16 -3131
  123. package/dist/fetch.js +8 -398
  124. package/dist/format.js +10 -3750
  125. package/dist/generic-parser-VUXDIAOZ.js +13 -0
  126. package/dist/git.js +4 -380
  127. package/dist/glob.js +6 -280
  128. package/dist/go-parser-JXYKJHRC.js +469 -0
  129. package/dist/grep.js +7 -604
  130. package/dist/index.js +318 -35387
  131. package/dist/install.js +10 -4091
  132. package/dist/json-parser-IBHZ4BZC.js +213 -0
  133. package/dist/json.js +4 -665
  134. package/dist/kanban-contract-actions.d.ts +1 -1
  135. package/dist/kanban-detail-actions.d.ts +2 -1
  136. package/dist/kanban-presence.d.ts +2 -1
  137. package/dist/kanban-serializer.d.ts +0 -8
  138. package/dist/kanban-split-task-handler.d.ts +2 -2
  139. package/dist/kanban-tool-types.d.ts +2 -1
  140. package/dist/kanban.js +3 -2096
  141. package/dist/languages/diagnostics.d.ts +2 -1
  142. package/dist/languages/index.js +23 -4664
  143. package/dist/languages/legacy-bridge.d.ts +3 -2
  144. package/dist/languages/types.d.ts +2 -1
  145. package/dist/legacy-bridge-7M6QLUQN.js +18 -0
  146. package/dist/lint.js +10 -3706
  147. package/dist/logs.js +4 -287
  148. package/dist/memory.js +6 -215
  149. package/dist/mode.js +3 -99
  150. package/dist/outdated.js +4 -5170
  151. package/dist/pack.js +65 -33897
  152. package/dist/parser-dispatch-QH4XPGG6.js +14 -0
  153. package/dist/patch.js +13 -9935
  154. package/dist/plan.js +5 -3286
  155. package/dist/process-registry.js +8 -651
  156. package/dist/ps-slash.js +12 -1439
  157. package/dist/pwsh.d.ts +0 -1
  158. package/dist/py-parser-IS4HKYMF.js +16 -0
  159. package/dist/read.js +13 -9816
  160. package/dist/replace.js +15 -10014
  161. package/dist/rs-parser-XHUUO2KZ.js +81 -0
  162. package/dist/scaffold.js +4 -253
  163. package/dist/search.js +5 -585
  164. package/dist/session-kanban-sync.d.ts +0 -6
  165. package/dist/session-kanban.js +30 -972
  166. package/dist/skill.js +2 -215
  167. package/dist/spawn-background.d.ts +1 -1
  168. package/dist/task.js +5 -3410
  169. package/dist/test.js +10 -3773
  170. package/dist/todo.js +4 -2891
  171. package/dist/tool-help.js +3 -123
  172. package/dist/tool-search.js +3 -79
  173. package/dist/tool-tier.js +68 -33984
  174. package/dist/tool-use.js +2 -93
  175. package/dist/tree-sitter-parser-AIERW3YI.js +15 -0
  176. package/dist/tree.js +4 -288
  177. package/dist/ts-parser-RCTYKSVI.js +232 -0
  178. package/dist/typecheck.js +10 -3753
  179. package/dist/win32.js +6 -60
  180. package/dist/write.js +14 -9882
  181. package/dist/yaml-parser-4SAXV3PL.js +157 -0
  182. package/package.json +5 -5
@@ -0,0 +1,235 @@
1
+ import {
2
+ safeResolveReal
3
+ } from "./chunk-D33S4RQG.js";
4
+
5
+ // src/tree.ts
6
+ import * as fs from "node:fs/promises";
7
+ import * as path from "node:path";
8
+ import { DEFAULT_WALK_IGNORE_DIRS, compileGlob, expectDefined } from "@wrongstack/core/utils";
9
+ var DEFAULT_IGNORE = /* @__PURE__ */ new Set([
10
+ ...DEFAULT_WALK_IGNORE_DIRS,
11
+ ".wrongstack",
12
+ ".ssh",
13
+ ".gnupg",
14
+ ".aws"
15
+ ]);
16
+ var DEFAULT_MAX_ENTRIES = 5e3;
17
+ var MAX_TREE_OUTPUT_BYTES = 256 * 1024;
18
+ var treeTool = {
19
+ name: "tree",
20
+ category: "Filesystem",
21
+ description: "Display a project or subpath directory tree. Use it for structural layout; use index-backed `codebase-search` first for code understanding when it is live.",
22
+ usageHint: "DIRECTORY-LAYOUT EXPLORATION:\n\n- When `codebase-search` is live, use it first for symbols and concepts; use `tree` when the directory hierarchy itself matters.\n- Tune `depth` (default 3) and use `glob`/`exclude` to focus the view.\n- Prefer this over raw `bash find` or `glob` + manual reading when you need a quick structural overview.\nOutput is truncated for very large trees.",
23
+ permission: "auto",
24
+ mutating: false,
25
+ capabilities: ["fs.read"],
26
+ icon: "tree",
27
+ maxOutputBytes: 262144,
28
+ timeoutMs: 15e3,
29
+ inputSchema: {
30
+ type: "object",
31
+ properties: {
32
+ path: {
33
+ type: "string",
34
+ description: "Root directory to display the tree from (defaults to project root)."
35
+ },
36
+ depth: {
37
+ type: "integer",
38
+ description: "Maximum directory depth to traverse (default 3, use 0 for unlimited).",
39
+ minimum: 0,
40
+ maximum: 20
41
+ },
42
+ glob: {
43
+ type: "string",
44
+ description: "Only include files matching this glob pattern."
45
+ },
46
+ exclude: {
47
+ type: "array",
48
+ items: { type: "string" },
49
+ description: "List of directory names to completely ignore."
50
+ },
51
+ show_files: {
52
+ type: "boolean",
53
+ description: "Whether to show individual files (default true)."
54
+ },
55
+ show_dirs: {
56
+ type: "boolean",
57
+ description: "Whether to show directories (default true)."
58
+ },
59
+ show_hidden: {
60
+ type: "boolean",
61
+ description: "Show hidden files starting with . (default: false)"
62
+ },
63
+ max_entries: {
64
+ type: "integer",
65
+ description: `Maximum entries retained in the rendered tree (default ${DEFAULT_MAX_ENTRIES}).`,
66
+ minimum: 1,
67
+ maximum: 5e4
68
+ }
69
+ }
70
+ },
71
+ async execute(input, ctx, opts) {
72
+ let final;
73
+ const executeStream = treeTool.executeStream;
74
+ if (!executeStream) throw new Error("treeTool: stream execution unavailable");
75
+ for await (const ev of executeStream(input, ctx, opts)) {
76
+ if (ev.type === "final") final = ev.output;
77
+ }
78
+ if (!final) throw new Error("tree: stream ended without final event");
79
+ return final;
80
+ },
81
+ async *executeStream(input, ctx, opts) {
82
+ const basePath = input.path ? await safeResolveReal(input.path, ctx) : ctx.cwd;
83
+ const maxDepth = input.depth ?? 3;
84
+ const showFiles = input.show_files ?? true;
85
+ const showDirs = input.show_dirs ?? true;
86
+ const showHidden = input.show_hidden ?? false;
87
+ const exclude = /* @__PURE__ */ new Set([...DEFAULT_IGNORE, ...input.exclude ?? []]);
88
+ const globRe = input.glob ? compileGlob(input.glob) : void 0;
89
+ const maxEntries = input.max_entries ?? DEFAULT_MAX_ENTRIES;
90
+ const signal = opts?.signal ?? ctx.signal ?? new AbortController().signal;
91
+ const lines = [basePath];
92
+ const totals = { totalFiles: { value: 0 }, totalDirs: { value: 0 } };
93
+ const retention = {
94
+ entries: 0,
95
+ outputBytes: Buffer.byteLength(basePath, "utf8"),
96
+ maxEntries,
97
+ maxOutputBytes: MAX_TREE_OUTPUT_BYTES,
98
+ truncated: false
99
+ };
100
+ const queue = [];
101
+ const FLUSH_EVERY = 200;
102
+ let lastEmittedTotal = 0;
103
+ const tickProgress = () => {
104
+ const seen = totals.totalFiles.value + totals.totalDirs.value;
105
+ if (seen - lastEmittedTotal >= FLUSH_EVERY) {
106
+ queue.push({
107
+ type: "metric",
108
+ text: `${seen} entries`,
109
+ data: { files: totals.totalFiles.value, dirs: totals.totalDirs.value }
110
+ });
111
+ lastEmittedTotal = seen;
112
+ }
113
+ };
114
+ const walkPromise = walkDir(basePath, 0, {
115
+ maxDepth,
116
+ exclude,
117
+ showFiles,
118
+ showDirs,
119
+ showHidden,
120
+ globRe,
121
+ basePath,
122
+ lines,
123
+ prefix: "",
124
+ isLast: true,
125
+ totalFiles: totals.totalFiles,
126
+ totalDirs: totals.totalDirs,
127
+ onProgress: tickProgress,
128
+ retention,
129
+ signal
130
+ });
131
+ let walkDone = false;
132
+ void walkPromise.then(
133
+ () => {
134
+ walkDone = true;
135
+ },
136
+ () => {
137
+ walkDone = true;
138
+ }
139
+ );
140
+ while (!walkDone || queue.length > 0) {
141
+ if (queue.length > 0) {
142
+ yield expectDefined(queue.shift());
143
+ } else {
144
+ let pollTimer;
145
+ const poll = new Promise((r) => {
146
+ pollTimer = setTimeout(r, 50);
147
+ });
148
+ try {
149
+ await Promise.race([walkPromise, poll]).catch(() => void 0);
150
+ } finally {
151
+ if (pollTimer) clearTimeout(pollTimer);
152
+ }
153
+ }
154
+ }
155
+ await walkPromise;
156
+ yield {
157
+ type: "final",
158
+ output: {
159
+ tree: lines.join("\n"),
160
+ total_files: totals.totalFiles.value,
161
+ total_dirs: totals.totalDirs.value,
162
+ truncated: retention.truncated,
163
+ path: basePath
164
+ }
165
+ };
166
+ }
167
+ };
168
+ function matchesTreeGlob(globRe, fileName, absPath, basePath) {
169
+ if (globRe.test(fileName)) return true;
170
+ const rel = path.relative(basePath, absPath);
171
+ const posixRel = !rel || rel.startsWith("..") || path.isAbsolute(rel) ? absPath.split(path.sep).join("/") : rel.split(path.sep).join("/");
172
+ return globRe.test(posixRel);
173
+ }
174
+ async function walkDir(dir, depth, opts) {
175
+ opts.signal.throwIfAborted();
176
+ if (opts.retention.truncated) return;
177
+ const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
178
+ const filtered = entries.filter((e) => {
179
+ if (!opts.showHidden && e.name.startsWith(".")) return false;
180
+ if (opts.exclude.has(e.name)) return false;
181
+ if (e.isFile() && opts.globRe) {
182
+ const abs = path.join(dir, e.name);
183
+ if (!matchesTreeGlob(opts.globRe, e.name, abs, opts.basePath)) return false;
184
+ }
185
+ return true;
186
+ });
187
+ let dirCount = 0;
188
+ let fileCount = 0;
189
+ for (const e of filtered) {
190
+ if (e.isDirectory()) dirCount++;
191
+ else if (e.isFile()) fileCount++;
192
+ }
193
+ opts.totalDirs.value += dirCount;
194
+ opts.totalFiles.value += fileCount;
195
+ opts.onProgress?.();
196
+ const items = filtered.sort((a, b) => {
197
+ if (a.isDirectory() && !b.isDirectory()) return -1;
198
+ if (!a.isDirectory() && b.isDirectory()) return 1;
199
+ return a.name.localeCompare(b.name);
200
+ });
201
+ for (let i = 0; i < items.length; i++) {
202
+ opts.signal.throwIfAborted();
203
+ if (opts.retention.truncated) return;
204
+ const entry = items[i];
205
+ if (!entry) continue;
206
+ const isLast = i === items.length - 1;
207
+ const connector = opts.isLast ? " " : "\u2502 ";
208
+ const branch = isLast ? "\u2514\u2500\u2500 " : "\u251C\u2500\u2500 ";
209
+ const displayName = entry.name + (entry.isDirectory() ? "/" : "");
210
+ if (!opts.showDirs && entry.isDirectory()) continue;
211
+ if (!opts.showFiles && entry.isFile()) continue;
212
+ const line = opts.prefix + branch + displayName;
213
+ const lineBytes = Buffer.byteLength(line, "utf8") + 1;
214
+ if (opts.retention.entries >= opts.retention.maxEntries || opts.retention.outputBytes + lineBytes > opts.retention.maxOutputBytes) {
215
+ opts.retention.truncated = true;
216
+ return;
217
+ }
218
+ opts.lines.push(line);
219
+ opts.retention.entries++;
220
+ opts.retention.outputBytes += lineBytes;
221
+ if (entry.isDirectory() && (opts.maxDepth === 0 || depth < opts.maxDepth)) {
222
+ const childPrefix = opts.prefix + connector;
223
+ await walkDir(path.join(dir, entry.name), depth + 1, {
224
+ ...opts,
225
+ prefix: childPrefix,
226
+ isLast
227
+ });
228
+ }
229
+ }
230
+ }
231
+
232
+ export {
233
+ treeTool
234
+ };
235
+ //# sourceMappingURL=chunk-J5SKD6LN.js.map