@wrongstack/tools 0.320.1 → 1.0.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.
Files changed (191) hide show
  1. package/dist/_danger-detect.d.ts +8 -0
  2. package/dist/_syntax-check.d.ts +1 -2
  3. package/dist/audit.d.ts +4 -5
  4. package/dist/audit.js +6 -6
  5. package/dist/auto-proceed-loop-guard.js +9 -160
  6. package/dist/bash-kill-guard.d.ts +2 -3
  7. package/dist/bash.d.ts +2 -3
  8. package/dist/bash.js +4 -4
  9. package/dist/batch-tool-use.d.ts +2 -3
  10. package/dist/batch-tool-use.js +1 -1
  11. package/dist/browser/index.d.ts +1 -1
  12. package/dist/browser/index.js +1 -1
  13. package/dist/browser/tools.d.ts +56 -45
  14. package/dist/builtin.js +50 -50
  15. package/dist/{chunk-T77XOX7E.js → chunk-24T5XIJU.js} +1 -1
  16. package/dist/{chunk-DTQ75VBC.js → chunk-2CTZW6JQ.js} +2 -2
  17. package/dist/chunk-37QKUQ2Z.js +171 -0
  18. package/dist/{chunk-KWXIKGE3.js → chunk-3D5DJWOE.js} +3 -3
  19. package/dist/{chunk-XSSFBS5I.js → chunk-4ERMPDHV.js} +11 -6
  20. package/dist/{chunk-QSNVDHOZ.js → chunk-4WPBS45A.js} +4 -5
  21. package/dist/{chunk-4CQWNZ62.js → chunk-5ITQPCLC.js} +2 -2
  22. package/dist/{chunk-B4HTSV6Z.js → chunk-5KS24LTS.js} +11 -11
  23. package/dist/{chunk-QPNYDH5B.js → chunk-62OAECEQ.js} +29 -7
  24. package/dist/{chunk-DFQDJT22.js → chunk-6GOZTS6F.js} +3 -3
  25. package/dist/{chunk-34VLZ35Z.js → chunk-7HL23T3T.js} +63 -10
  26. package/dist/{chunk-HFXSNKCV.js → chunk-7JJFC6CT.js} +1 -1
  27. package/dist/{chunk-NDIT3SBZ.js → chunk-7N5U2RAU.js} +2 -2
  28. package/dist/{chunk-QBV725YG.js → chunk-7ODZTPCU.js} +2 -2
  29. package/dist/{chunk-4BABEJC2.js → chunk-AB2CAUOP.js} +64 -53
  30. package/dist/{chunk-6AAOT4PW.js → chunk-AQ5YBURX.js} +16 -4
  31. package/dist/{chunk-ZMW6WJFT.js → chunk-ASEXQRA7.js} +3 -3
  32. package/dist/{chunk-FRN7TIAA.js → chunk-B3MGJBFI.js} +1 -1
  33. package/dist/{chunk-JLYA4X7K.js → chunk-CGXTR34H.js} +21 -6
  34. package/dist/{chunk-IU4DV2PA.js → chunk-CHEK3ASV.js} +6 -3
  35. package/dist/{chunk-GOIZNNOA.js → chunk-DJYLI7EW.js} +1 -1
  36. package/dist/{chunk-Z6IHMJMC.js → chunk-DK4J2WMH.js} +11 -11
  37. package/dist/{chunk-OYP27E3I.js → chunk-DRRY6SCM.js} +47 -20
  38. package/dist/{chunk-BK732J7I.js → chunk-FBUP524S.js} +4 -4
  39. package/dist/{chunk-NYRLWDT5.js → chunk-FVM3O4JQ.js} +1 -1
  40. package/dist/chunk-FYDBUVQD.js +244 -0
  41. package/dist/{chunk-PV6HIZQD.js → chunk-GDDXX27P.js} +50 -50
  42. package/dist/{chunk-3GIKYHLA.js → chunk-GKSG5CPH.js} +6 -6
  43. package/dist/{chunk-ESLPBT5A.js → chunk-HDYUBRMF.js} +4 -3
  44. package/dist/{chunk-ELRRTWNP.js → chunk-IXIS7RSG.js} +2 -2
  45. package/dist/{chunk-HR67OWEP.js → chunk-IYH4OHBP.js} +5 -5
  46. package/dist/{chunk-W232EFEM.js → chunk-JDOO4P6Z.js} +7 -4
  47. package/dist/{chunk-OTPTQBYE.js → chunk-KDEXUQY7.js} +19 -8
  48. package/dist/{chunk-2OXHS3KZ.js → chunk-KLJZ4WV4.js} +4 -3
  49. package/dist/{chunk-3M7LLN7W.js → chunk-LQSOU63Z.js} +12 -11
  50. package/dist/{chunk-JVRLTEO7.js → chunk-M6UV67BH.js} +2 -2
  51. package/dist/{chunk-C2DQKVLO.js → chunk-MJSJWXBF.js} +1 -1
  52. package/dist/{chunk-NSPNFOJ7.js → chunk-MK2JK35J.js} +25 -10
  53. package/dist/{chunk-JSNSMG5R.js → chunk-MSOAX3GC.js} +1 -1
  54. package/dist/{chunk-J43O3BOX.js → chunk-N3K2SFEI.js} +532 -492
  55. package/dist/{chunk-J74TMK4M.js → chunk-NJX2RXKJ.js} +50 -7
  56. package/dist/{chunk-5UFVCIUB.js → chunk-NN2SNP2R.js} +4 -4
  57. package/dist/{chunk-WAQASTXB.js → chunk-O6BY43ZB.js} +29 -8
  58. package/dist/{chunk-QGF2C7TF.js → chunk-PVCB7RUZ.js} +2 -2
  59. package/dist/{chunk-YTKSNTT4.js → chunk-QA6IASYX.js} +8 -8
  60. package/dist/{chunk-VPALDFYM.js → chunk-RV7BVTDG.js} +1 -1
  61. package/dist/chunk-S57CDR2H.js +288 -0
  62. package/dist/{chunk-W2CECGTG.js → chunk-SMARDKAC.js} +1 -1
  63. package/dist/{chunk-QWKSKFKZ.js → chunk-SOR7OCYP.js} +1 -1
  64. package/dist/{chunk-I7FBZOEP.js → chunk-T3SMFF5Q.js} +11 -5
  65. package/dist/{chunk-4BHUSMNL.js → chunk-UI3ZJIG3.js} +1 -1
  66. package/dist/{chunk-WXJY3BKV.js → chunk-VBF2YXUW.js} +2 -2
  67. package/dist/{chunk-FQNXYA6W.js → chunk-VU3QBYL4.js} +36 -5
  68. package/dist/{chunk-VD2LV5WO.js → chunk-VZGPASGD.js} +37 -12
  69. package/dist/{chunk-UZFY3CKD.js → chunk-WEEVSWQB.js} +17 -6
  70. package/dist/chunk-XXRMF2BC.js +186 -0
  71. package/dist/{chunk-LRDIRJJL.js → chunk-YEISRT4S.js} +5 -11
  72. package/dist/{chunk-Q5JPPCZC.js → chunk-YJTXRH5Y.js} +3 -2
  73. package/dist/{chunk-23EX5WDO.js → chunk-YULVUTK5.js} +3 -3
  74. package/dist/{chunk-Z5Q3TXRY.js → chunk-ZTCJCYLN.js} +3 -3
  75. package/dist/circuit-breaker.d.ts +1 -0
  76. package/dist/circuit-breaker.js +1 -1
  77. package/dist/clarify.d.ts +1 -0
  78. package/dist/codebase-index/codebase-ast-replace-tool.d.ts +2 -3
  79. package/dist/codebase-index/codebase-impact-analysis-tool.d.ts +5 -4
  80. package/dist/codebase-index/codebase-incoming-calls-tool.d.ts +4 -3
  81. package/dist/codebase-index/codebase-index-tool.d.ts +2 -3
  82. package/dist/codebase-index/codebase-invariant-check-tool.d.ts +2 -3
  83. package/dist/codebase-index/codebase-outgoing-calls-tool.d.ts +4 -3
  84. package/dist/codebase-index/codebase-repo-map-tool.d.ts +2 -3
  85. package/dist/codebase-index/codebase-search-tool.d.ts +2 -3
  86. package/dist/codebase-index/codebase-skeleton-tool.d.ts +2 -3
  87. package/dist/codebase-index/codebase-stats-tool.d.ts +9 -3
  88. package/dist/codebase-index/codebase-targeted-test-tool.d.ts +4 -3
  89. package/dist/codebase-index/index.d.ts +11 -11
  90. package/dist/codebase-index/index.js +8 -8
  91. package/dist/codebase-index/project-server-framing.d.ts +29 -0
  92. package/dist/codebase-index/project-server-lifecycle.d.ts +20 -0
  93. package/dist/codebase-index/project-server-operations.d.ts +37 -0
  94. package/dist/codebase-index/project-server-types.d.ts +30 -0
  95. package/dist/codebase-index/project-server-watcher.d.ts +25 -0
  96. package/dist/codebase-index/project-server.js +448 -391
  97. package/dist/codebase-index/worker.js +2 -2
  98. package/dist/codebase-index/writer-init.d.ts +13 -0
  99. package/dist/codebase-index/writer-maintenance.d.ts +14 -0
  100. package/dist/codebase-index/writer.d.ts +0 -15
  101. package/dist/design.d.ts +2 -2
  102. package/dist/design.js +1 -1
  103. package/dist/diff.d.ts +4 -4
  104. package/dist/diff.js +1 -1
  105. package/dist/document.d.ts +3 -4
  106. package/dist/document.js +1 -1
  107. package/dist/e2e.d.ts +1 -1
  108. package/dist/e2e.js +1 -1
  109. package/dist/edit.d.ts +3 -3
  110. package/dist/edit.js +6 -6
  111. package/dist/exec.d.ts +2 -3
  112. package/dist/exec.js +4 -4
  113. package/dist/fetch.d.ts +4 -3
  114. package/dist/fetch.js +1 -1
  115. package/dist/format.d.ts +17 -45
  116. package/dist/format.js +12 -8
  117. package/dist/git.d.ts +3 -3
  118. package/dist/git.js +1 -1
  119. package/dist/glob.d.ts +2 -3
  120. package/dist/glob.js +2 -2
  121. package/dist/grep.d.ts +7 -5
  122. package/dist/grep.js +3 -3
  123. package/dist/index.d.ts +54 -45
  124. package/dist/index.js +118 -59
  125. package/dist/install.d.ts +7 -55
  126. package/dist/install.js +6 -6
  127. package/dist/json.d.ts +3 -4
  128. package/dist/json.js +2 -2
  129. package/dist/kanban-tool-types.d.ts +1 -2
  130. package/dist/kanban.d.ts +3 -19
  131. package/dist/kanban.js +1 -1
  132. package/dist/languages/execute-tool.d.ts +2 -3
  133. package/dist/languages/index.d.ts +2 -2
  134. package/dist/languages/index.js +4 -4
  135. package/dist/languages/tool.d.ts +3 -4
  136. package/dist/{legacy-bridge-FOV5ODDI.js → legacy-bridge-YXANP5QB.js} +6 -6
  137. package/dist/lint.d.ts +5 -4
  138. package/dist/lint.js +6 -6
  139. package/dist/logs.d.ts +3 -4
  140. package/dist/logs.js +2 -2
  141. package/dist/memory.d.ts +7 -8
  142. package/dist/memory.js +1 -1
  143. package/dist/mode.d.ts +3 -4
  144. package/dist/mode.js +1 -1
  145. package/dist/next-steps-tool.d.ts +2 -3
  146. package/dist/next-steps.d.ts +4 -0
  147. package/dist/next-steps.js +9 -175
  148. package/dist/outdated.d.ts +5 -29
  149. package/dist/outdated.js +3 -3
  150. package/dist/pack.js +51 -51
  151. package/dist/patch.d.ts +2 -3
  152. package/dist/patch.js +5 -5
  153. package/dist/plan.d.ts +4 -4
  154. package/dist/plan.js +3 -3
  155. package/dist/process-registry.js +2 -2
  156. package/dist/ps-slash.js +4 -4
  157. package/dist/pwsh.d.ts +1 -0
  158. package/dist/read.d.ts +5 -5
  159. package/dist/read.js +5 -5
  160. package/dist/replace.d.ts +2 -3
  161. package/dist/replace.js +6 -6
  162. package/dist/scaffold.d.ts +7 -3
  163. package/dist/scaffold.js +3 -1
  164. package/dist/search.d.ts +17 -3
  165. package/dist/search.js +5 -1
  166. package/dist/set-working-dir.d.ts +2 -3
  167. package/dist/skill.d.ts +4 -5
  168. package/dist/skill.js +1 -1
  169. package/dist/task.d.ts +6 -6
  170. package/dist/task.js +3 -3
  171. package/dist/test.d.ts +5 -4
  172. package/dist/test.js +6 -6
  173. package/dist/todo.d.ts +8 -8
  174. package/dist/todo.js +2 -2
  175. package/dist/tool-diff.js +11 -230
  176. package/dist/tool-help.d.ts +2 -3
  177. package/dist/tool-help.js +1 -1
  178. package/dist/tool-search.d.ts +2 -3
  179. package/dist/tool-search.js +1 -1
  180. package/dist/tool-summary.js +5 -281
  181. package/dist/tool-tier.js +52 -52
  182. package/dist/tool-use.d.ts +2 -3
  183. package/dist/tool-use.js +1 -1
  184. package/dist/tree.d.ts +5 -3
  185. package/dist/tree.js +5 -1
  186. package/dist/typecheck.d.ts +3 -3
  187. package/dist/typecheck.js +6 -6
  188. package/dist/write.d.ts +2 -3
  189. package/dist/write.js +6 -6
  190. package/package.json +5 -5
  191. package/dist/spawn-background.d.ts +0 -80
package/dist/tool-diff.js CHANGED
@@ -1,233 +1,14 @@
1
- // src/tool-diff.ts
2
- var DIFF_MAX_LINES = 5e3;
3
- function asObject(input) {
4
- if (typeof input === "string") {
5
- const s = input.trim();
6
- if (s.startsWith("{") || s.startsWith("[")) {
7
- try {
8
- const parsed = JSON.parse(s);
9
- if (parsed && typeof parsed === "object") return parsed;
10
- } catch {
11
- return null;
12
- }
13
- }
14
- return null;
15
- }
16
- if (input && typeof input === "object") return input;
17
- return null;
18
- }
19
- function diffFromToolInput(toolName, input) {
20
- if (!toolName) return null;
21
- const obj = asObject(input);
22
- if (!obj) return null;
23
- const name = toolName.toLowerCase();
24
- const filePath = String(obj.file_path ?? obj.path ?? "");
25
- switch (name) {
26
- case "edit":
27
- case "str_replace":
28
- case "edit_file":
29
- case "multi_edit": {
30
- const oldText = typeof obj.old_string === "string" ? obj.old_string : "";
31
- const newText = typeof obj.new_string === "string" ? obj.new_string : "";
32
- if (!oldText && !newText) return null;
33
- return { mode: "lcs", oldText, newText, caption: `edit ${filePath}`.trim() };
34
- }
35
- case "write":
36
- case "write_file":
37
- case "create_file": {
38
- const content = typeof obj.content === "string" ? obj.content : "";
39
- if (!content) return null;
40
- return {
41
- mode: "lcs",
42
- oldText: "",
43
- newText: content,
44
- caption: `write ${filePath} (new)`.trim()
45
- };
46
- }
47
- case "patch": {
48
- const patchText = typeof obj.patch === "string" ? obj.patch : "";
49
- if (!patchText.trim()) return null;
50
- return { mode: "unified", patchText, caption: filePath ? `patch ${filePath}` : "patch" };
51
- }
52
- default:
53
- return null;
54
- }
55
- }
56
- function computeLineDiff(oldText, newText) {
57
- const a = oldText.split("\n");
58
- const b = newText.split("\n");
59
- if (a.length > DIFF_MAX_LINES || b.length > DIFF_MAX_LINES) return null;
60
- const n = a.length;
61
- const m = b.length;
62
- const dp = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));
63
- for (let i2 = n - 1; i2 >= 0; i2--) {
64
- for (let j2 = m - 1; j2 >= 0; j2--) {
65
- dp[i2][j2] = a[i2] === b[j2] ? dp[i2 + 1][j2 + 1] + 1 : Math.max(dp[i2 + 1][j2], dp[i2][j2 + 1]);
66
- }
67
- }
68
- const rows = [];
69
- let i = 0;
70
- let j = 0;
71
- while (i < n && j < m) {
72
- if (a[i] === b[j]) {
73
- rows.push({ kind: "ctx", text: a[i] });
74
- i++;
75
- j++;
76
- } else if (dp[i + 1][j] >= dp[i][j + 1]) {
77
- rows.push({ kind: "del", text: a[i] });
78
- i++;
79
- } else {
80
- rows.push({ kind: "add", text: b[j] });
81
- j++;
82
- }
83
- }
84
- while (i < n) rows.push({ kind: "del", text: a[i++] });
85
- while (j < m) rows.push({ kind: "add", text: b[j++] });
86
- return rows;
87
- }
88
- function parseUnifiedDiff(patchText) {
89
- const rows = [];
90
- const lines = patchText.split("\n");
91
- for (const raw of lines) {
92
- if (raw.startsWith("@@") || raw.startsWith("--- ") || raw.startsWith("+++ ") || raw.startsWith("diff ") || raw.startsWith("index ") || raw.startsWith("\\ ")) {
93
- rows.push({ kind: "meta", text: raw });
94
- } else if (raw.startsWith("+")) {
95
- rows.push({ kind: "add", text: raw.slice(1) });
96
- } else if (raw.startsWith("-")) {
97
- rows.push({ kind: "del", text: raw.slice(1) });
98
- } else {
99
- rows.push({ kind: "ctx", text: raw.startsWith(" ") ? raw.slice(1) : raw });
100
- }
101
- }
102
- if (rows.length > 0 && rows[rows.length - 1].kind === "ctx" && rows[rows.length - 1].text === "") {
103
- rows.pop();
104
- }
105
- return rows;
106
- }
107
- function diffRowsFromToolInput(toolName, input) {
108
- const d = diffFromToolInput(toolName, input);
109
- if (!d) return null;
110
- if (d.mode === "unified") return { caption: d.caption, rows: parseUnifiedDiff(d.patchText) };
111
- return { caption: d.caption, rows: computeLineDiff(d.oldText, d.newText) };
112
- }
113
- var DIFF_LINE_SAFETY_CAP = 4e3;
114
- function truncMid(s, max) {
115
- if (s.length <= max) return s;
116
- return `${s.slice(0, max - 1)}\u2026`;
117
- }
118
- function parseUnifiedDiffPreview(diff, maxLines, lineCap = DIFF_LINE_SAFETY_CAP) {
119
- const all = [];
120
- let oldLn = 0;
121
- let newLn = 0;
122
- for (const raw of diff.split("\n")) {
123
- const line = raw.replace(/\r$/, "");
124
- if (line.startsWith("+++") || line.startsWith("---")) continue;
125
- if (line.startsWith("diff --git") || line.startsWith("index ")) continue;
126
- if (line.startsWith("@@")) {
127
- const m = line.match(/^@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@/);
128
- if (m) {
129
- oldLn = Number.parseInt(m[1] ?? "0", 10) || 0;
130
- newLn = Number.parseInt(m[2] ?? "0", 10) || 0;
131
- }
132
- all.push({ kind: "hunk", text: truncMid(line, 60) });
133
- continue;
134
- }
135
- if (line.startsWith("+")) {
136
- all.push({ kind: "add", text: truncMid(line, lineCap), newLine: newLn });
137
- newLn++;
138
- continue;
139
- }
140
- if (line.startsWith("-")) {
141
- all.push({ kind: "del", text: truncMid(line, lineCap), oldLine: oldLn });
142
- oldLn++;
143
- continue;
144
- }
145
- if (line.startsWith("\\ No newline")) {
146
- all.push({ kind: "meta", text: line });
147
- continue;
148
- }
149
- if (line.length === 0) continue;
150
- all.push({ kind: "ctx", text: truncMid(line, lineCap), oldLine: oldLn, newLine: newLn });
151
- oldLn++;
152
- newLn++;
153
- }
154
- const added = all.filter((row) => row.kind === "add").length;
155
- const removed = all.filter((row) => row.kind === "del").length;
156
- if (all.length === 0) {
157
- return { rows: [], hidden: 0, added: 0, removed: 0, hiddenAdded: 0, hiddenRemoved: 0 };
158
- }
159
- if (all.length <= maxLines) {
160
- return { rows: all, hidden: 0, added, removed, hiddenAdded: 0, hiddenRemoved: 0 };
161
- }
162
- const rows = all.slice(0, maxLines);
163
- const hiddenRows = all.slice(maxLines);
164
- return {
165
- rows,
166
- hidden: hiddenRows.length,
167
- added,
168
- removed,
169
- hiddenAdded: hiddenRows.filter((row) => row.kind === "add").length,
170
- hiddenRemoved: hiddenRows.filter((row) => row.kind === "del").length
171
- };
172
- }
173
- var TOOL_DIFF_BROWSER_SRC = [
174
- "var DIFF_MAX_LINES = 5000;",
175
- "function __diffObj(input){",
176
- ' if(typeof input==="string"){ var s=input.trim(); if(s.charAt(0)==="{"||s.charAt(0)==="["){ try{ var p=JSON.parse(s); if(p&&typeof p==="object") return p; }catch(_e){} } return null; }',
177
- ' if(input&&typeof input==="object") return input; return null;',
178
- "}",
179
- "function diffFromToolInput(name, input){",
180
- " if(!name) return null;",
181
- " var obj=__diffObj(input); if(!obj) return null;",
182
- " var n=String(name).toLowerCase();",
183
- ' var fp=String(obj.file_path!=null?obj.file_path:(obj.path!=null?obj.path:""));',
184
- ' if(n==="edit"||n==="str_replace"||n==="edit_file"||n==="multi_edit"){',
185
- ' var oldT=typeof obj.old_string==="string"?obj.old_string:"";',
186
- ' var newT=typeof obj.new_string==="string"?obj.new_string:"";',
187
- " if(!oldT&&!newT) return null;",
188
- ' return { mode:"lcs", oldText:oldT, newText:newT, caption:("edit "+fp).replace(/\\s+$/,"") };',
189
- " }",
190
- ' if(n==="write"||n==="write_file"||n==="create_file"){',
191
- ' var c=typeof obj.content==="string"?obj.content:"";',
192
- " if(!c) return null;",
193
- ' return { mode:"lcs", oldText:"", newText:c, caption:("write "+fp+" (new)").replace(/^\\s+/,"").replace(/\\s+$/,"") };',
194
- " }",
195
- ' if(n==="patch"){',
196
- ' var pt=typeof obj.patch==="string"?obj.patch:"";',
197
- ' if(!pt.replace(/\\s/g,"")) return null;',
198
- ' return { mode:"unified", patchText:pt, caption: fp ? ("patch "+fp) : "patch" };',
199
- " }",
200
- " return null;",
201
- "}",
202
- "function computeLineDiff(oldText, newText){",
203
- ' var a=oldText.split("\\n"), b=newText.split("\\n");',
204
- " if(a.length>DIFF_MAX_LINES||b.length>DIFF_MAX_LINES) return null;",
205
- " var nn=a.length, mm=b.length, i, j;",
206
- " var dp=new Array(nn+1); for(i=0;i<=nn;i++){ dp[i]=new Array(mm+1); for(j=0;j<=mm;j++) dp[i][j]=0; }",
207
- " for(i=nn-1;i>=0;i--){ for(j=mm-1;j>=0;j--){ dp[i][j]= a[i]===b[j] ? dp[i+1][j+1]+1 : Math.max(dp[i+1][j], dp[i][j+1]); } }",
208
- " var rows=[]; i=0; j=0;",
209
- ' while(i<nn&&j<mm){ if(a[i]===b[j]){ rows.push({kind:"ctx",text:a[i]}); i++; j++; } else if(dp[i+1][j]>=dp[i][j+1]){ rows.push({kind:"del",text:a[i]}); i++; } else { rows.push({kind:"add",text:b[j]}); j++; } }',
210
- ' while(i<nn){ rows.push({kind:"del",text:a[i]}); i++; }',
211
- ' while(j<mm){ rows.push({kind:"add",text:b[j]}); j++; }',
212
- " return rows;",
213
- "}",
214
- "function parseUnifiedDiff(patchText){",
215
- ' var rows=[], lines=patchText.split("\\n"), k, raw;',
216
- " for(k=0;k<lines.length;k++){ raw=lines[k];",
217
- ' if(raw.indexOf("@@")===0||raw.indexOf("--- ")===0||raw.indexOf("+++ ")===0||raw.indexOf("diff ")===0||raw.indexOf("index ")===0||raw.indexOf("\\\\ ")===0){ rows.push({kind:"meta",text:raw}); }',
218
- ' else if(raw.charAt(0)==="+"){ rows.push({kind:"add",text:raw.slice(1)}); }',
219
- ' else if(raw.charAt(0)==="-"){ rows.push({kind:"del",text:raw.slice(1)}); }',
220
- ' else { rows.push({kind:"ctx",text: raw.charAt(0)===" " ? raw.slice(1) : raw}); }',
221
- " }",
222
- ' if(rows.length>0 && rows[rows.length-1].kind==="ctx" && rows[rows.length-1].text===""){ rows.pop(); }',
223
- " return rows;",
224
- "}",
225
- "function diffRowsFromToolInput(name, input){",
226
- " var d=diffFromToolInput(name, input); if(!d) return null;",
227
- ' if(d.mode==="unified") return { caption:d.caption, rows:parseUnifiedDiff(d.patchText) };',
228
- " return { caption:d.caption, rows:computeLineDiff(d.oldText, d.newText) };",
229
- "}"
230
- ].join("\n");
1
+ import {
2
+ DIFF_LINE_SAFETY_CAP,
3
+ DIFF_MAX_LINES,
4
+ TOOL_DIFF_BROWSER_SRC,
5
+ computeLineDiff,
6
+ diffFromToolInput,
7
+ diffRowsFromToolInput,
8
+ parseUnifiedDiff,
9
+ parseUnifiedDiffPreview,
10
+ truncMid
11
+ } from "./chunk-FYDBUVQD.js";
231
12
  export {
232
13
  DIFF_LINE_SAFETY_CAP,
233
14
  DIFF_MAX_LINES,
@@ -1,10 +1,10 @@
1
1
  import type { Tool } from '@wrongstack/core/types';
2
- interface ToolHelpInput {
2
+ export interface ToolHelpInput {
3
3
  tool?: string | undefined;
4
4
  format?: 'short' | 'full' | 'markdown' | undefined;
5
5
  include_examples?: boolean | undefined;
6
6
  }
7
- interface ToolHelpOutput {
7
+ export interface ToolHelpOutput {
8
8
  tool?: string | undefined;
9
9
  help: string;
10
10
  tools: {
@@ -18,5 +18,4 @@ interface ToolHelpOutput {
18
18
  total: number;
19
19
  }
20
20
  export declare const toolHelpTool: Tool<ToolHelpInput, ToolHelpOutput>;
21
- export {};
22
21
  //# sourceMappingURL=tool-help.d.ts.map
package/dist/tool-help.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  toolHelpTool
3
- } from "./chunk-QBV725YG.js";
3
+ } from "./chunk-7ODZTPCU.js";
4
4
  export {
5
5
  toolHelpTool
6
6
  };
@@ -1,12 +1,12 @@
1
1
  import type { Tool } from '@wrongstack/core/types';
2
- interface ToolSearchInput {
2
+ export interface ToolSearchInput {
3
3
  query?: string | undefined;
4
4
  tags?: string[] | undefined;
5
5
  permission?: 'auto' | 'confirm' | 'deny' | undefined;
6
6
  mutating?: boolean | undefined;
7
7
  limit?: number | undefined;
8
8
  }
9
- interface ToolSearchOutput {
9
+ export interface ToolSearchOutput {
10
10
  tools: {
11
11
  name: string;
12
12
  description: string;
@@ -19,5 +19,4 @@ interface ToolSearchOutput {
19
19
  _available?: number;
20
20
  }
21
21
  export declare const toolSearchTool: Tool<ToolSearchInput, ToolSearchOutput>;
22
- export {};
23
22
  //# sourceMappingURL=tool-search.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  toolSearchTool
3
- } from "./chunk-T77XOX7E.js";
3
+ } from "./chunk-24T5XIJU.js";
4
4
  export {
5
5
  toolSearchTool
6
6
  };
@@ -1,284 +1,8 @@
1
- // src/tool-summary.ts
2
- var FALLBACK_HEAD_FIELDS = [
3
- "path",
4
- "file_path",
5
- "pattern",
6
- "symbol",
7
- "command",
8
- "cmd",
9
- "url",
10
- "query",
11
- "description",
12
- "content"
13
- ];
14
- function clip(s, n) {
15
- return s.length > n ? `${s.slice(0, n - 1)}\u2026` : s;
16
- }
17
- function pickPath(obj) {
18
- const p = obj.file_path ?? obj.path ?? obj.filepath;
19
- return typeof p === "string" ? p : "";
20
- }
21
- function safeJson(v) {
22
- try {
23
- return JSON.stringify(v);
24
- } catch {
25
- return String(v);
26
- }
27
- }
28
- function coerceInput(input) {
29
- if (typeof input === "string") {
30
- const s = input.trim();
31
- if (s.startsWith("{") || s.startsWith("[")) {
32
- try {
33
- const parsed = JSON.parse(s);
34
- if (parsed && typeof parsed === "object")
35
- return { obj: parsed, raw: parsed };
36
- } catch {
37
- }
38
- }
39
- return { obj: null, raw: input };
40
- }
41
- if (input && typeof input === "object")
42
- return { obj: input, raw: input };
43
- return { obj: null, raw: input };
44
- }
45
- function summarizeToolInput(toolName, input) {
46
- if (input === null || input === void 0 || input === "") return "";
47
- const { obj, raw } = coerceInput(input);
48
- if (!obj) return clip(String(raw), 120);
49
- const name = (toolName ?? "").toLowerCase();
50
- if (/^todo(_?write)?$|^todos$/.test(name) || Array.isArray(obj.todos)) {
51
- const todos = obj.todos ?? [];
52
- if (Array.isArray(todos)) {
53
- const done = todos.filter((t) => t?.status === "completed").length;
54
- const wip = todos.filter((t) => t?.status === "in_progress").length;
55
- const parts = [`${todos.length} todo${todos.length === 1 ? "" : "s"}`];
56
- if (done > 0) parts.push(`${done} done`);
57
- if (wip > 0) parts.push(`${wip} in-progress`);
58
- return parts.join(" \xB7 ");
59
- }
60
- }
61
- if (/batch|parallel/.test(name) || Array.isArray(obj.tool_uses) || Array.isArray(obj.calls)) {
62
- const list = obj.tool_uses ?? obj.calls ?? obj.batch;
63
- if (Array.isArray(list)) {
64
- const subNames = /* @__PURE__ */ new Set();
65
- for (const item of list) {
66
- if (item && typeof item === "object" && "name" in item) {
67
- subNames.add(String(item.name));
68
- } else if (item && typeof item === "object" && "tool" in item) {
69
- subNames.add(String(item.tool));
70
- }
71
- }
72
- const preview = [...subNames].slice(0, 3).join(", ");
73
- const more = subNames.size > 3 ? ` +${subNames.size - 3}` : "";
74
- return `${list.length} sub-tool${list.length === 1 ? "" : "s"}${preview ? ` \xB7 ${preview}${more}` : ""}`;
75
- }
76
- }
77
- if (name === "patch" && typeof obj.patch === "string" && obj.patch) {
78
- const fileCount = (obj.patch.match(/^\+\+\+ /gm) ?? []).length;
79
- if (fileCount > 0) return `patch \xB7 ${fileCount} file${fileCount === 1 ? "" : "s"}`;
80
- return `patch \xB7 ${obj.patch.split("\n").length} lines`;
81
- }
82
- if (/^(edit|str_replace|edit_file|patch)$/.test(name)) {
83
- const fp = pickPath(obj);
84
- const oldS = typeof obj.old_string === "string" ? obj.old_string : "";
85
- const newS = typeof obj.new_string === "string" ? obj.new_string : "";
86
- const oldLines = oldS ? oldS.split("\n").length : 0;
87
- const newLines = newS ? newS.split("\n").length : 0;
88
- return `edit ${fp || "(file)"}${oldLines || newLines ? ` (${oldLines} \u2192 ${newLines} lines)` : ""}`;
89
- }
90
- if (/^(write|write_file|create_file|new_file)$/.test(name)) {
91
- const fp = pickPath(obj);
92
- const c = typeof obj.content === "string" ? obj.content : "";
93
- const lines = c ? c.split("\n").length : 0;
94
- return `write ${fp || "(file)"}${lines ? ` \xB7 ${lines} lines` : ""}`;
95
- }
96
- if (/^(bash|shell|sh|exec|run|run_command|run_shell|command)$/.test(name)) {
97
- const cmd = obj.command ?? obj.cmd ?? obj.script;
98
- if (typeof cmd === "string") return `$ ${clip(cmd, 110)}`;
99
- }
100
- if (/^(fetch|http|web|web_fetch|web_search|webfetch|curl|request)$/.test(name)) {
101
- const url = obj.url;
102
- if (typeof url === "string") {
103
- const method = obj.method ?? "GET";
104
- return `${method.toUpperCase()} ${clip(url, 100)}`;
105
- }
106
- }
107
- if (/^(grep|search|ripgrep|rg)$/.test(name)) {
108
- const pattern = obj.pattern;
109
- const scope = obj.path ?? obj.glob ?? obj.type;
110
- if (typeof pattern === "string") {
111
- return scope ? `grep ${clip(pattern, 60)} in ${scope}` : `grep ${clip(pattern, 100)}`;
112
- }
113
- }
114
- if (/^(glob|find)$/.test(name)) {
115
- const p = obj.pattern ?? obj.glob;
116
- if (typeof p === "string") return `glob ${clip(p, 80)}`;
117
- }
118
- if (/^tree$/.test(name)) {
119
- const p = typeof obj.path === "string" ? obj.path : "";
120
- const d = typeof obj.depth === "number" ? obj.depth : null;
121
- return `tree ${p || "."}${d !== null ? ` (depth ${d})` : ""}`;
122
- }
123
- if (/^diff$/.test(name)) {
124
- const a = typeof obj.a === "string" ? obj.a : "";
125
- const b = typeof obj.b === "string" ? obj.b : "";
126
- if (a || b) return `diff ${a && b ? `${a}..${b}` : a || b}`;
127
- const fl = [];
128
- if (Array.isArray(obj.files)) {
129
- for (const f of obj.files) if (typeof f === "string") fl.push(f);
130
- } else if (typeof obj.files === "string") {
131
- for (const part of obj.files.split(",")) {
132
- const t = part.trim();
133
- if (t) fl.push(t);
134
- }
135
- }
136
- if (fl.length === 1) return `diff ${clip(String(fl[0]), 80)}`;
137
- if (fl.length > 1) return `diff ${fl.length} files`;
138
- }
139
- if (/^replace$/.test(name)) {
140
- const pattern = typeof obj.pattern === "string" ? obj.pattern : "";
141
- if (pattern) {
142
- let scope = "";
143
- if (typeof obj.files === "string") {
144
- const parts = obj.files.split(",").map((s) => s.trim()).filter(Boolean);
145
- scope = parts.length > 1 ? `${parts.length} files` : parts[0] ?? "";
146
- } else if (Array.isArray(obj.files) && obj.files.length > 0) {
147
- scope = obj.files.length === 1 ? String(obj.files[0]) : `${obj.files.length} files`;
148
- }
149
- return `replace ${clip(pattern, 60)}${scope ? ` in ${clip(scope, 50)}` : ""}`;
150
- }
151
- }
152
- if (/^(read|read_file|cat|view)$/.test(name)) {
153
- const fp = pickPath(obj);
154
- const offset = obj.offset;
155
- const limit = obj.limit;
156
- if (fp && (typeof offset === "number" || typeof limit === "number")) {
157
- const start = offset ?? 0;
158
- const end = typeof limit === "number" ? start + limit : "";
159
- return `read ${fp} (${start}\u2026${end})`;
160
- }
161
- if (fp) return `read ${fp}`;
162
- }
163
- for (const k of FALLBACK_HEAD_FIELDS) {
164
- const v = obj[k];
165
- if (typeof v === "string" && v.length > 0) {
166
- return `${k}: ${clip(v, 100)}`;
167
- }
168
- }
169
- return clip(safeJson(raw), 120);
170
- }
171
- var SUMMARIZE_TOOL_INPUT_BROWSER_SRC = [
172
- 'function __clip(s,n){ s=String(s==null?"":s); return s.length>n ? s.slice(0,n-1)+"\\u2026" : s; }',
173
- "function toolInputSummary(name, rawInput){",
174
- ' if(rawInput==null || rawInput==="") return "";',
175
- " var obj=null, raw=rawInput;",
176
- ' if(typeof rawInput==="string"){',
177
- " var s=rawInput.trim();",
178
- ' if(s.charAt(0)==="{" || s.charAt(0)==="["){ try{ var pj=JSON.parse(s); if(pj && typeof pj==="object"){ obj=pj; raw=pj; } }catch(_e){} }',
179
- ' } else if(rawInput && typeof rawInput==="object"){ obj=rawInput; raw=rawInput; }',
180
- " if(!obj) return __clip(String(raw),120);",
181
- ' var n=String(name==null?"":name).toLowerCase();',
182
- " if(/^todo(_?write)?$|^todos$/.test(n) || Array.isArray(obj.todos)){",
183
- " var todos=obj.todos||[];",
184
- " if(Array.isArray(todos)){",
185
- " var done=0, wip=0, ti;",
186
- ' for(ti=0; ti<todos.length; ti++){ var st=todos[ti]&&todos[ti].status; if(st==="completed") done++; else if(st==="in_progress") wip++; }',
187
- ' var tp=[todos.length+" todo"+(todos.length===1?"":"s")];',
188
- ' if(done>0) tp.push(done+" done"); if(wip>0) tp.push(wip+" in-progress");',
189
- ' return tp.join(" \\u00b7 ");',
190
- " }",
191
- " }",
192
- " if(/batch|parallel/.test(n) || Array.isArray(obj.tool_uses) || Array.isArray(obj.calls)){",
193
- " var list=obj.tool_uses||obj.calls||obj.batch;",
194
- " if(Array.isArray(list)){",
195
- " var names={}, ord=[], li, it, nm;",
196
- ' for(li=0; li<list.length; li++){ it=list[li]; if(it && typeof it==="object"){ nm=("name" in it)?it.name:(("tool" in it)?it.tool:null); if(nm!=null){ nm=String(nm); if(!names[nm]){ names[nm]=1; ord.push(nm); } } } }',
197
- ' var preview=ord.slice(0,3).join(", ");',
198
- ' var more=ord.length>3 ? " +"+(ord.length-3) : "";',
199
- ' return list.length+" sub-tool"+(list.length===1?"":"s")+(preview?(" \\u00b7 "+preview+more):"");',
200
- " }",
201
- " }",
202
- " var fp;",
203
- ' if(n==="patch" && typeof obj.patch==="string" && obj.patch){',
204
- " var pfm=obj.patch.match(/^\\+\\+\\+ /gm);",
205
- " var pfc=pfm?pfm.length:0;",
206
- ' if(pfc>0) return "patch \\u00b7 "+pfc+" file"+(pfc===1?"":"s");',
207
- ' return "patch \\u00b7 "+obj.patch.split("\\n").length+" lines";',
208
- " }",
209
- " if(/^(edit|str_replace|edit_file|patch)$/.test(n)){",
210
- " fp=(obj.file_path!=null?obj.file_path:(obj.path!=null?obj.path:obj.filepath));",
211
- ' var oldS=typeof obj.old_string==="string"?obj.old_string:"";',
212
- ' var newS=typeof obj.new_string==="string"?obj.new_string:"";',
213
- ' var ol=oldS?oldS.split("\\n").length:0, nl=newS?newS.split("\\n").length:0;',
214
- ' var efp=typeof fp==="string"?fp:"";',
215
- ' return "edit "+(efp||"(file)")+((ol||nl)?(" ("+ol+" \\u2192 "+nl+" lines)"):"");',
216
- " }",
217
- " if(/^(write|write_file|create_file|new_file)$/.test(n)){",
218
- " fp=(obj.file_path!=null?obj.file_path:(obj.path!=null?obj.path:obj.filepath));",
219
- ' var wc=typeof obj.content==="string"?obj.content:"";',
220
- ' var wl=wc?wc.split("\\n").length:0;',
221
- ' var wfp=typeof fp==="string"?fp:"";',
222
- ' return "write "+(wfp||"(file)")+(wl?(" \\u00b7 "+wl+" lines"):"");',
223
- " }",
224
- " if(/^(bash|shell|sh|exec|run|run_command|run_shell|command)$/.test(n)){",
225
- " var cmd=(obj.command!=null?obj.command:(obj.cmd!=null?obj.cmd:obj.script));",
226
- ' if(typeof cmd==="string") return "$ "+__clip(cmd,110);',
227
- " }",
228
- " if(/^(fetch|http|web|web_fetch|web_search|webfetch|curl|request)$/.test(n)){",
229
- ' if(typeof obj.url==="string"){ var mth=(typeof obj.method==="string"?obj.method:"GET"); return mth.toUpperCase()+" "+__clip(obj.url,100); }',
230
- " }",
231
- " if(/^(grep|search|ripgrep|rg)$/.test(n)){",
232
- " var pat=obj.pattern, scope=(obj.path!=null?obj.path:(obj.glob!=null?obj.glob:obj.type));",
233
- ' if(typeof pat==="string"){ return scope ? ("grep "+__clip(pat,60)+" in "+scope) : ("grep "+__clip(pat,100)); }',
234
- " }",
235
- " if(/^(glob|find)$/.test(n)){",
236
- " var gp=(obj.pattern!=null?obj.pattern:obj.glob);",
237
- ' if(typeof gp==="string") return "glob "+__clip(gp,80);',
238
- " }",
239
- " if(/^tree$/.test(n)){",
240
- ' var trp=typeof obj.path==="string"?obj.path:"";',
241
- ' var trd=typeof obj.depth==="number"?obj.depth:null;',
242
- ' return "tree "+(trp||".")+(trd!==null?(" (depth "+trd+")"):"");',
243
- " }",
244
- " if(/^diff$/.test(n)){",
245
- ' var da=typeof obj.a==="string"?obj.a:"", db=typeof obj.b==="string"?obj.b:"";',
246
- ' if(da||db) return "diff "+((da&&db)?(da+".."+db):(da||db));',
247
- " var dfl=[], dfi, dpi;",
248
- ' if(Array.isArray(obj.files)){ for(dfi=0; dfi<obj.files.length; dfi++){ if(typeof obj.files[dfi]==="string") dfl.push(obj.files[dfi]); } }',
249
- ' else if(typeof obj.files==="string"){ var dparts=obj.files.split(","); for(dpi=0; dpi<dparts.length; dpi++){ var dt=dparts[dpi].trim(); if(dt) dfl.push(dt); } }',
250
- ' if(dfl.length===1) return "diff "+__clip(String(dfl[0]),80);',
251
- ' if(dfl.length>1) return "diff "+dfl.length+" files";',
252
- " }",
253
- " if(/^replace$/.test(n)){",
254
- ' var rpat=typeof obj.pattern==="string"?obj.pattern:"";',
255
- " if(rpat){",
256
- ' var rscope="";',
257
- ' if(typeof obj.files==="string"){',
258
- " var rparts=[], rsi;",
259
- ' var rraw=obj.files.split(",");',
260
- " for(rsi=0; rsi<rraw.length; rsi++){ var rt=rraw[rsi].trim(); if(rt) rparts.push(rt); }",
261
- ' rscope=rparts.length>1?(rparts.length+" files"):(rparts.length===1?rparts[0]:"");',
262
- " } else if(Array.isArray(obj.files) && obj.files.length>0){",
263
- ' rscope=obj.files.length===1?String(obj.files[0]):(obj.files.length+" files");',
264
- " }",
265
- ' return "replace "+__clip(rpat,60)+(rscope?(" in "+__clip(rscope,50)):"");',
266
- " }",
267
- " }",
268
- " if(/^(read|read_file|cat|view)$/.test(n)){",
269
- " fp=(obj.file_path!=null?obj.file_path:(obj.path!=null?obj.path:obj.filepath));",
270
- ' if(typeof fp==="string" && fp){',
271
- " var off=obj.offset, lim=obj.limit;",
272
- ' if(typeof off==="number" || typeof lim==="number"){ var start=(typeof off==="number"?off:0); var end=(typeof lim==="number"?(start+lim):""); return "read "+fp+" ("+start+"\\u2026"+end+")"; }',
273
- ' return "read "+fp;',
274
- " }",
275
- " }",
276
- ' var HEAD=["path","file_path","pattern","symbol","command","cmd","url","query","description","content"], hi;',
277
- ' for(hi=0; hi<HEAD.length; hi++){ var hv=obj[HEAD[hi]]; if(typeof hv==="string" && hv.length>0){ return HEAD[hi]+": "+__clip(hv,100); } }',
278
- " var jsonStr; try{ jsonStr=JSON.stringify(raw); }catch(_e2){ jsonStr=String(raw); }",
279
- " return __clip(jsonStr,120);",
280
- "}"
281
- ].join("\n");
1
+ import {
2
+ FALLBACK_HEAD_FIELDS,
3
+ SUMMARIZE_TOOL_INPUT_BROWSER_SRC,
4
+ summarizeToolInput
5
+ } from "./chunk-S57CDR2H.js";
282
6
  export {
283
7
  FALLBACK_HEAD_FIELDS,
284
8
  SUMMARIZE_TOOL_INPUT_BROWSER_SRC,