@wrongstack/tools 0.1.2 → 0.1.4

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 (104) hide show
  1. package/LICENSE +17 -13
  2. package/dist/audit.d.ts +25 -0
  3. package/dist/audit.js +209 -0
  4. package/dist/audit.js.map +1 -0
  5. package/dist/bash.d.ts +16 -0
  6. package/dist/bash.js +180 -0
  7. package/dist/bash.js.map +1 -0
  8. package/dist/batch-tool-use.d.ts +26 -0
  9. package/dist/batch-tool-use.js +106 -0
  10. package/dist/batch-tool-use.js.map +1 -0
  11. package/dist/builtin.d.ts +5 -0
  12. package/dist/builtin.js +3735 -0
  13. package/dist/builtin.js.map +1 -0
  14. package/dist/diff.d.ts +20 -0
  15. package/dist/diff.js +142 -0
  16. package/dist/diff.js.map +1 -0
  17. package/dist/document.d.ts +27 -0
  18. package/dist/document.js +148 -0
  19. package/dist/document.js.map +1 -0
  20. package/dist/edit.d.ts +22 -0
  21. package/dist/edit.js +138 -0
  22. package/dist/edit.js.map +1 -0
  23. package/dist/exec.d.ts +21 -0
  24. package/dist/exec.js +159 -0
  25. package/dist/exec.js.map +1 -0
  26. package/dist/fetch.d.ts +15 -0
  27. package/dist/fetch.js +213 -0
  28. package/dist/fetch.js.map +1 -0
  29. package/dist/format.d.ts +18 -0
  30. package/dist/format.js +194 -0
  31. package/dist/format.js.map +1 -0
  32. package/dist/git.d.ts +27 -0
  33. package/dist/git.js +174 -0
  34. package/dist/git.js.map +1 -0
  35. package/dist/glob.d.ts +14 -0
  36. package/dist/glob.js +101 -0
  37. package/dist/glob.js.map +1 -0
  38. package/dist/grep.d.ts +20 -0
  39. package/dist/grep.js +264 -0
  40. package/dist/grep.js.map +1 -0
  41. package/dist/index.d.ts +34 -563
  42. package/dist/index.js +715 -440
  43. package/dist/index.js.map +1 -1
  44. package/dist/install.d.ts +19 -0
  45. package/dist/install.js +186 -0
  46. package/dist/install.js.map +1 -0
  47. package/dist/json.d.ts +20 -0
  48. package/dist/json.js +124 -0
  49. package/dist/json.js.map +1 -0
  50. package/dist/lint.d.ts +20 -0
  51. package/dist/lint.js +191 -0
  52. package/dist/lint.js.map +1 -0
  53. package/dist/logs.d.ts +27 -0
  54. package/dist/logs.js +180 -0
  55. package/dist/logs.js.map +1 -0
  56. package/dist/memory.d.ts +22 -0
  57. package/dist/memory.js +53 -0
  58. package/dist/memory.js.map +1 -0
  59. package/dist/mode.d.ts +20 -0
  60. package/dist/mode.js +81 -0
  61. package/dist/mode.js.map +1 -0
  62. package/dist/outdated.d.ts +26 -0
  63. package/dist/outdated.js +138 -0
  64. package/dist/outdated.js.map +1 -0
  65. package/dist/patch.d.ts +18 -0
  66. package/dist/patch.js +101 -0
  67. package/dist/patch.js.map +1 -0
  68. package/dist/read.d.ts +16 -0
  69. package/dist/read.js +81 -0
  70. package/dist/read.js.map +1 -0
  71. package/dist/replace.d.ts +23 -0
  72. package/dist/replace.js +196 -0
  73. package/dist/replace.js.map +1 -0
  74. package/dist/scaffold.d.ts +20 -0
  75. package/dist/scaffold.js +185 -0
  76. package/dist/scaffold.js.map +1 -0
  77. package/dist/search.d.ts +20 -0
  78. package/dist/search.js +212 -0
  79. package/dist/search.js.map +1 -0
  80. package/dist/test.d.ts +24 -0
  81. package/dist/test.js +247 -0
  82. package/dist/test.js.map +1 -0
  83. package/dist/todo.d.ts +12 -0
  84. package/dist/todo.js +53 -0
  85. package/dist/todo.js.map +1 -0
  86. package/dist/tool-help.d.ts +23 -0
  87. package/dist/tool-help.js +122 -0
  88. package/dist/tool-help.js.map +1 -0
  89. package/dist/tool-search.d.ts +22 -0
  90. package/dist/tool-search.js +70 -0
  91. package/dist/tool-search.js.map +1 -0
  92. package/dist/tool-use.d.ts +16 -0
  93. package/dist/tool-use.js +79 -0
  94. package/dist/tool-use.js.map +1 -0
  95. package/dist/tree.d.ts +21 -0
  96. package/dist/tree.js +176 -0
  97. package/dist/tree.js.map +1 -0
  98. package/dist/typecheck.d.ts +19 -0
  99. package/dist/typecheck.js +181 -0
  100. package/dist/typecheck.js.map +1 -0
  101. package/dist/write.d.ts +15 -0
  102. package/dist/write.js +77 -0
  103. package/dist/write.js.map +1 -0
  104. package/package.json +147 -4
@@ -0,0 +1,106 @@
1
+ // src/batch-tool-use.ts
2
+ var batchToolUseTool = {
3
+ name: "batch_tool_use",
4
+ description: "Execute multiple tool calls in sequence or parallel. Returns all results.",
5
+ usageHint: "Set `calls` array with tool names and inputs. `stop_on_error` halts on first failure. `parallel` runs concurrently (default: true).",
6
+ permission: "confirm",
7
+ mutating: false,
8
+ timeoutMs: 12e4,
9
+ inputSchema: {
10
+ type: "object",
11
+ properties: {
12
+ calls: {
13
+ type: "array",
14
+ items: {
15
+ type: "object",
16
+ properties: {
17
+ tool: { type: "string" },
18
+ input: { type: "object" }
19
+ },
20
+ required: ["tool"]
21
+ },
22
+ description: "Array of tool calls to execute"
23
+ },
24
+ stop_on_error: {
25
+ type: "boolean",
26
+ description: "Stop execution on first error (default: false)"
27
+ },
28
+ parallel: {
29
+ type: "boolean",
30
+ description: "Execute calls in parallel (default: true)"
31
+ }
32
+ },
33
+ required: ["calls"]
34
+ },
35
+ async execute(input, ctx, opts) {
36
+ if (!input?.calls || input.calls.length === 0) {
37
+ return {
38
+ results: [],
39
+ total: 0,
40
+ succeeded: 0,
41
+ failed: 0,
42
+ stop_on_error: false
43
+ };
44
+ }
45
+ const results = [];
46
+ let succeeded = 0;
47
+ let failed = 0;
48
+ if (input.parallel !== false) {
49
+ const promises = input.calls.map(async (call) => executeSingle(call, ctx, opts));
50
+ const allResults = await Promise.all(promises);
51
+ results.push(...allResults);
52
+ succeeded = allResults.filter((r) => r.success).length;
53
+ failed = allResults.filter((r) => !r.success).length;
54
+ } else {
55
+ for (const call of input.calls) {
56
+ const result = await executeSingle(call, ctx, opts);
57
+ results.push(result);
58
+ if (result.success) {
59
+ succeeded++;
60
+ } else {
61
+ failed++;
62
+ if (input.stop_on_error) break;
63
+ }
64
+ }
65
+ }
66
+ return {
67
+ results,
68
+ total: input.calls.length,
69
+ succeeded,
70
+ failed,
71
+ stop_on_error: input.stop_on_error ?? false
72
+ };
73
+ }
74
+ };
75
+ async function executeSingle(call, ctx, opts) {
76
+ const start = Date.now();
77
+ const tool = ctx.tools.find((t) => t.name === call.tool);
78
+ if (!tool) {
79
+ return {
80
+ tool: call.tool,
81
+ success: false,
82
+ error: `tool "${call.tool}" not found`,
83
+ executionMs: Date.now() - start
84
+ };
85
+ }
86
+ try {
87
+ const result = await tool.execute(call.input, ctx, opts);
88
+ return {
89
+ tool: call.tool,
90
+ success: true,
91
+ result,
92
+ executionMs: Date.now() - start
93
+ };
94
+ } catch (e) {
95
+ return {
96
+ tool: call.tool,
97
+ success: false,
98
+ error: e instanceof Error ? e.message : String(e),
99
+ executionMs: Date.now() - start
100
+ };
101
+ }
102
+ }
103
+
104
+ export { batchToolUseTool };
105
+ //# sourceMappingURL=batch-tool-use.js.map
106
+ //# sourceMappingURL=batch-tool-use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/batch-tool-use.ts"],"names":[],"mappings":"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","file":"batch-tool-use.js","sourcesContent":["import type { Tool } from '@wrongstack/core';\n\ninterface BatchToolUseInput {\n calls: {\n tool: string;\n input: Record<string, unknown>;\n }[];\n stop_on_error?: boolean;\n parallel?: boolean;\n}\n\ninterface BatchToolUseOutput {\n results: {\n tool: string;\n success: boolean;\n result?: unknown;\n error?: string;\n executionMs: number;\n }[];\n total: number;\n succeeded: number;\n failed: number;\n stop_on_error: boolean;\n}\n\nexport const batchToolUseTool: Tool<BatchToolUseInput, BatchToolUseOutput> = {\n name: 'batch_tool_use',\n description:\n 'Execute multiple tool calls in sequence or parallel. Returns all results.',\n usageHint:\n 'Set `calls` array with tool names and inputs. `stop_on_error` halts on first failure. `parallel` runs concurrently (default: true).',\n permission: 'confirm',\n mutating: false,\n timeoutMs: 120_000,\n inputSchema: {\n type: 'object',\n properties: {\n calls: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n tool: { type: 'string' },\n input: { type: 'object' },\n },\n required: ['tool'],\n },\n description: 'Array of tool calls to execute',\n },\n stop_on_error: {\n type: 'boolean',\n description: 'Stop execution on first error (default: false)',\n },\n parallel: {\n type: 'boolean',\n description: 'Execute calls in parallel (default: true)',\n },\n },\n required: ['calls'],\n },\n async execute(input, ctx, opts) {\n if (!input?.calls || input.calls.length === 0) {\n return {\n results: [],\n total: 0,\n succeeded: 0,\n failed: 0,\n stop_on_error: false,\n };\n }\n\n const results: BatchToolUseOutput['results'] = [];\n let succeeded = 0;\n let failed = 0;\n\n if (input.parallel !== false) {\n const promises = input.calls.map(async (call) => executeSingle(call, ctx, opts));\n const allResults = await Promise.all(promises);\n results.push(...allResults);\n succeeded = allResults.filter((r) => r.success).length;\n failed = allResults.filter((r) => !r.success).length;\n } else {\n for (const call of input.calls) {\n const result = await executeSingle(call, ctx, opts);\n results.push(result);\n if (result.success) {\n succeeded++;\n } else {\n failed++;\n if (input.stop_on_error) break;\n }\n }\n }\n\n return {\n results,\n total: input.calls.length,\n succeeded,\n failed,\n stop_on_error: input.stop_on_error ?? false,\n };\n },\n};\n\nasync function executeSingle(\n call: { tool: string; input: Record<string, unknown> },\n ctx: import('@wrongstack/core').Context,\n opts: { signal: AbortSignal },\n): Promise<BatchToolUseOutput['results'][0]> {\n const start = Date.now();\n const tool = ctx.tools.find((t: Tool) => t.name === call.tool);\n\n if (!tool) {\n return {\n tool: call.tool,\n success: false,\n error: `tool \"${call.tool}\" not found`,\n executionMs: Date.now() - start,\n };\n }\n\n try {\n const result = await tool.execute(call.input, ctx, opts);\n return {\n tool: call.tool,\n success: true,\n result,\n executionMs: Date.now() - start,\n };\n } catch (e) {\n return {\n tool: call.tool,\n success: false,\n error: e instanceof Error ? e.message : String(e),\n executionMs: Date.now() - start,\n };\n }\n}"]}
@@ -0,0 +1,5 @@
1
+ import { Tool } from '@wrongstack/core';
2
+
3
+ declare const builtinTools: Tool[];
4
+
5
+ export { builtinTools };