@zhijiewang/openharness 0.10.1 → 0.11.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 (313) hide show
  1. package/README.md +83 -13
  2. package/dist/Tool.d.ts.map +1 -1
  3. package/dist/Tool.js +7 -1
  4. package/dist/Tool.js.map +1 -1
  5. package/dist/Tool.test.js +8 -2
  6. package/dist/Tool.test.js.map +1 -1
  7. package/dist/agents/roles.d.ts +25 -0
  8. package/dist/agents/roles.d.ts.map +1 -0
  9. package/dist/agents/roles.js +116 -0
  10. package/dist/agents/roles.js.map +1 -0
  11. package/dist/agents/roles.test.d.ts +2 -0
  12. package/dist/agents/roles.test.d.ts.map +1 -0
  13. package/dist/agents/roles.test.js +38 -0
  14. package/dist/agents/roles.test.js.map +1 -0
  15. package/dist/commands/commands-new.test.d.ts +5 -0
  16. package/dist/commands/commands-new.test.d.ts.map +1 -0
  17. package/dist/commands/commands-new.test.js +132 -0
  18. package/dist/commands/commands-new.test.js.map +1 -0
  19. package/dist/commands/commands.test.js +31 -0
  20. package/dist/commands/commands.test.js.map +1 -1
  21. package/dist/commands/index.d.ts +2 -0
  22. package/dist/commands/index.d.ts.map +1 -1
  23. package/dist/commands/index.js +199 -6
  24. package/dist/commands/index.js.map +1 -1
  25. package/dist/components/REPL.js +1 -1
  26. package/dist/components/REPL.js.map +1 -1
  27. package/dist/git/git.test.js +33 -1
  28. package/dist/git/git.test.js.map +1 -1
  29. package/dist/git/index.d.ts +12 -0
  30. package/dist/git/index.d.ts.map +1 -1
  31. package/dist/git/index.js +47 -2
  32. package/dist/git/index.js.map +1 -1
  33. package/dist/harness/checkpoints.d.ts +36 -0
  34. package/dist/harness/checkpoints.d.ts.map +1 -0
  35. package/dist/harness/checkpoints.js +156 -0
  36. package/dist/harness/checkpoints.js.map +1 -0
  37. package/dist/harness/config.d.ts +3 -0
  38. package/dist/harness/config.d.ts.map +1 -1
  39. package/dist/harness/config.js +35 -2
  40. package/dist/harness/config.js.map +1 -1
  41. package/dist/harness/config.test.js +21 -1
  42. package/dist/harness/config.test.js.map +1 -1
  43. package/dist/harness/hooks-env.test.d.ts +5 -0
  44. package/dist/harness/hooks-env.test.d.ts.map +1 -0
  45. package/dist/harness/hooks-env.test.js +41 -0
  46. package/dist/harness/hooks-env.test.js.map +1 -0
  47. package/dist/harness/hooks.d.ts +7 -0
  48. package/dist/harness/hooks.d.ts.map +1 -1
  49. package/dist/harness/hooks.js +14 -0
  50. package/dist/harness/hooks.js.map +1 -1
  51. package/dist/harness/keybindings.d.ts.map +1 -1
  52. package/dist/harness/keybindings.js +4 -0
  53. package/dist/harness/keybindings.js.map +1 -1
  54. package/dist/harness/memory.d.ts +19 -0
  55. package/dist/harness/memory.d.ts.map +1 -1
  56. package/dist/harness/memory.js +85 -0
  57. package/dist/harness/memory.js.map +1 -1
  58. package/dist/harness/onboarding.d.ts +1 -1
  59. package/dist/harness/onboarding.d.ts.map +1 -1
  60. package/dist/harness/onboarding.js +59 -4
  61. package/dist/harness/onboarding.js.map +1 -1
  62. package/dist/harness/onboarding.test.d.ts +5 -0
  63. package/dist/harness/onboarding.test.d.ts.map +1 -0
  64. package/dist/harness/onboarding.test.js +93 -0
  65. package/dist/harness/onboarding.test.js.map +1 -0
  66. package/dist/harness/rules.d.ts +6 -1
  67. package/dist/harness/rules.d.ts.map +1 -1
  68. package/dist/harness/rules.js +52 -5
  69. package/dist/harness/rules.js.map +1 -1
  70. package/dist/harness/rules.test.js +30 -1
  71. package/dist/harness/rules.test.js.map +1 -1
  72. package/dist/harness/session.d.ts +8 -1
  73. package/dist/harness/session.d.ts.map +1 -1
  74. package/dist/harness/session.js +13 -5
  75. package/dist/harness/session.js.map +1 -1
  76. package/dist/harness/store.d.ts +46 -0
  77. package/dist/harness/store.d.ts.map +1 -0
  78. package/dist/harness/store.js +56 -0
  79. package/dist/harness/store.js.map +1 -0
  80. package/dist/harness/store.test.d.ts +2 -0
  81. package/dist/harness/store.test.d.ts.map +1 -0
  82. package/dist/harness/store.test.js +71 -0
  83. package/dist/harness/store.test.js.map +1 -0
  84. package/dist/harness/submit-handler.d.ts +2 -0
  85. package/dist/harness/submit-handler.d.ts.map +1 -1
  86. package/dist/harness/submit-handler.js +3 -0
  87. package/dist/harness/submit-handler.js.map +1 -1
  88. package/dist/main.js +153 -26
  89. package/dist/main.js.map +1 -1
  90. package/dist/mcp/client.d.ts +2 -0
  91. package/dist/mcp/client.d.ts.map +1 -1
  92. package/dist/mcp/client.js +10 -2
  93. package/dist/mcp/client.js.map +1 -1
  94. package/dist/mcp/loader.d.ts +2 -0
  95. package/dist/mcp/loader.d.ts.map +1 -1
  96. package/dist/mcp/loader.js +34 -18
  97. package/dist/mcp/loader.js.map +1 -1
  98. package/dist/mcp/loader.test.d.ts +7 -0
  99. package/dist/mcp/loader.test.d.ts.map +1 -0
  100. package/dist/mcp/loader.test.js +25 -0
  101. package/dist/mcp/loader.test.js.map +1 -0
  102. package/dist/providers/anthropic-convert.test.d.ts +5 -0
  103. package/dist/providers/anthropic-convert.test.d.ts.map +1 -0
  104. package/dist/providers/anthropic-convert.test.js +98 -0
  105. package/dist/providers/anthropic-convert.test.js.map +1 -0
  106. package/dist/providers/anthropic.d.ts.map +1 -1
  107. package/dist/providers/anthropic.js +23 -4
  108. package/dist/providers/anthropic.js.map +1 -1
  109. package/dist/providers/stream-parsing.test.d.ts +6 -0
  110. package/dist/providers/stream-parsing.test.d.ts.map +1 -0
  111. package/dist/providers/stream-parsing.test.js +174 -0
  112. package/dist/providers/stream-parsing.test.js.map +1 -0
  113. package/dist/query/compress.d.ts +17 -0
  114. package/dist/query/compress.d.ts.map +1 -0
  115. package/dist/query/compress.js +115 -0
  116. package/dist/query/compress.js.map +1 -0
  117. package/dist/query/errors.d.ts +10 -0
  118. package/dist/query/errors.d.ts.map +1 -0
  119. package/dist/query/errors.js +22 -0
  120. package/dist/query/errors.js.map +1 -0
  121. package/dist/query/index.d.ts +15 -0
  122. package/dist/query/index.d.ts.map +1 -0
  123. package/dist/query/index.js +199 -0
  124. package/dist/query/index.js.map +1 -0
  125. package/dist/query/tools.d.ts +17 -0
  126. package/dist/query/tools.d.ts.map +1 -0
  127. package/dist/query/tools.js +129 -0
  128. package/dist/query/tools.js.map +1 -0
  129. package/dist/query/types.d.ts +31 -0
  130. package/dist/query/types.d.ts.map +1 -0
  131. package/dist/query/types.js +5 -0
  132. package/dist/query/types.js.map +1 -0
  133. package/dist/query.d.ts +8 -38
  134. package/dist/query.d.ts.map +1 -1
  135. package/dist/query.js +7 -444
  136. package/dist/query.js.map +1 -1
  137. package/dist/query.test.js +1 -1
  138. package/dist/query.test.js.map +1 -1
  139. package/dist/renderer/cells.d.ts.map +1 -1
  140. package/dist/renderer/cells.js +15 -2
  141. package/dist/renderer/cells.js.map +1 -1
  142. package/dist/renderer/colors.d.ts +8 -0
  143. package/dist/renderer/colors.d.ts.map +1 -0
  144. package/dist/renderer/colors.js +18 -0
  145. package/dist/renderer/colors.js.map +1 -0
  146. package/dist/renderer/diff.test.d.ts +5 -0
  147. package/dist/renderer/diff.test.d.ts.map +1 -0
  148. package/dist/renderer/diff.test.js +140 -0
  149. package/dist/renderer/diff.test.js.map +1 -0
  150. package/dist/renderer/differ.d.ts.map +1 -1
  151. package/dist/renderer/differ.js +1 -10
  152. package/dist/renderer/differ.js.map +1 -1
  153. package/dist/renderer/e2e.test.js +1 -0
  154. package/dist/renderer/e2e.test.js.map +1 -1
  155. package/dist/renderer/image.test.d.ts +5 -0
  156. package/dist/renderer/image.test.d.ts.map +1 -0
  157. package/dist/renderer/image.test.js +66 -0
  158. package/dist/renderer/image.test.js.map +1 -0
  159. package/dist/renderer/index.d.ts +23 -4
  160. package/dist/renderer/index.d.ts.map +1 -1
  161. package/dist/renderer/index.js +203 -118
  162. package/dist/renderer/index.js.map +1 -1
  163. package/dist/renderer/layout.d.ts +5 -1
  164. package/dist/renderer/layout.d.ts.map +1 -1
  165. package/dist/renderer/layout.js +504 -614
  166. package/dist/renderer/layout.js.map +1 -1
  167. package/dist/renderer/markdown.d.ts.map +1 -1
  168. package/dist/renderer/markdown.js +42 -36
  169. package/dist/renderer/markdown.js.map +1 -1
  170. package/dist/renderer/perf.test.js +1 -0
  171. package/dist/renderer/perf.test.js.map +1 -1
  172. package/dist/renderer/session-browser.test.d.ts +6 -0
  173. package/dist/renderer/session-browser.test.d.ts.map +1 -0
  174. package/dist/renderer/session-browser.test.js +95 -0
  175. package/dist/renderer/session-browser.test.js.map +1 -0
  176. package/dist/renderer/ui-ux.test.d.ts +15 -0
  177. package/dist/renderer/ui-ux.test.d.ts.map +1 -0
  178. package/dist/renderer/ui-ux.test.js +470 -0
  179. package/dist/renderer/ui-ux.test.js.map +1 -0
  180. package/dist/repl.d.ts.map +1 -1
  181. package/dist/repl.js +246 -28
  182. package/dist/repl.js.map +1 -1
  183. package/dist/services/StreamingToolExecutor.d.ts.map +1 -1
  184. package/dist/services/StreamingToolExecutor.js +4 -2
  185. package/dist/services/StreamingToolExecutor.js.map +1 -1
  186. package/dist/services/agent-messaging.d.ts +68 -0
  187. package/dist/services/agent-messaging.d.ts.map +1 -0
  188. package/dist/services/agent-messaging.js +121 -0
  189. package/dist/services/agent-messaging.js.map +1 -0
  190. package/dist/services/agent-messaging.test.d.ts +2 -0
  191. package/dist/services/agent-messaging.test.d.ts.map +1 -0
  192. package/dist/services/agent-messaging.test.js +88 -0
  193. package/dist/services/agent-messaging.test.js.map +1 -0
  194. package/dist/services/cron.d.ts +40 -0
  195. package/dist/services/cron.d.ts.map +1 -0
  196. package/dist/services/cron.js +90 -0
  197. package/dist/services/cron.js.map +1 -0
  198. package/dist/services/cron.test.d.ts +2 -0
  199. package/dist/services/cron.test.d.ts.map +1 -0
  200. package/dist/services/cron.test.js +49 -0
  201. package/dist/services/cron.test.js.map +1 -0
  202. package/dist/tools/AgentTool/index.d.ts +9 -0
  203. package/dist/tools/AgentTool/index.d.ts.map +1 -1
  204. package/dist/tools/AgentTool/index.js +89 -6
  205. package/dist/tools/AgentTool/index.js.map +1 -1
  206. package/dist/tools/BashTool/index.d.ts +6 -0
  207. package/dist/tools/BashTool/index.d.ts.map +1 -1
  208. package/dist/tools/BashTool/index.js +39 -1
  209. package/dist/tools/BashTool/index.js.map +1 -1
  210. package/dist/tools/CronTool/index.d.ts +40 -0
  211. package/dist/tools/CronTool/index.d.ts.map +1 -0
  212. package/dist/tools/CronTool/index.js +59 -0
  213. package/dist/tools/CronTool/index.js.map +1 -0
  214. package/dist/tools/EnterWorktreeTool/index.d.ts +12 -0
  215. package/dist/tools/EnterWorktreeTool/index.d.ts.map +1 -0
  216. package/dist/tools/EnterWorktreeTool/index.js +27 -0
  217. package/dist/tools/EnterWorktreeTool/index.js.map +1 -0
  218. package/dist/tools/ExitWorktreeTool/index.d.ts +15 -0
  219. package/dist/tools/ExitWorktreeTool/index.d.ts.map +1 -0
  220. package/dist/tools/ExitWorktreeTool/index.js +33 -0
  221. package/dist/tools/ExitWorktreeTool/index.js.map +1 -0
  222. package/dist/tools/FileEditTool/index.js +4 -4
  223. package/dist/tools/FileEditTool/index.js.map +1 -1
  224. package/dist/tools/FileReadTool/index.d.ts +3 -0
  225. package/dist/tools/FileReadTool/index.d.ts.map +1 -1
  226. package/dist/tools/FileReadTool/index.js +102 -4
  227. package/dist/tools/FileReadTool/index.js.map +1 -1
  228. package/dist/tools/FileWriteTool/index.d.ts.map +1 -1
  229. package/dist/tools/FileWriteTool/index.js +20 -5
  230. package/dist/tools/FileWriteTool/index.js.map +1 -1
  231. package/dist/tools/GlobTool/index.d.ts.map +1 -1
  232. package/dist/tools/GlobTool/index.js +4 -61
  233. package/dist/tools/GlobTool/index.js.map +1 -1
  234. package/dist/tools/GrepTool/index.d.ts +30 -0
  235. package/dist/tools/GrepTool/index.d.ts.map +1 -1
  236. package/dist/tools/GrepTool/index.js +153 -72
  237. package/dist/tools/GrepTool/index.js.map +1 -1
  238. package/dist/tools/KillProcessTool/index.d.ts +18 -0
  239. package/dist/tools/KillProcessTool/index.d.ts.map +1 -0
  240. package/dist/tools/KillProcessTool/index.js +43 -0
  241. package/dist/tools/KillProcessTool/index.js.map +1 -0
  242. package/dist/tools/LSTool/index.d.ts +3 -0
  243. package/dist/tools/LSTool/index.d.ts.map +1 -1
  244. package/dist/tools/LSTool/index.js +44 -29
  245. package/dist/tools/LSTool/index.js.map +1 -1
  246. package/dist/tools/MemoryTool/index.d.ts +30 -0
  247. package/dist/tools/MemoryTool/index.d.ts.map +1 -0
  248. package/dist/tools/MemoryTool/index.js +56 -0
  249. package/dist/tools/MemoryTool/index.js.map +1 -0
  250. package/dist/tools/MultiEditTool/index.d.ts +32 -0
  251. package/dist/tools/MultiEditTool/index.d.ts.map +1 -0
  252. package/dist/tools/MultiEditTool/index.js +53 -0
  253. package/dist/tools/MultiEditTool/index.js.map +1 -0
  254. package/dist/tools/RemoteTriggerTool/index.d.ts +21 -0
  255. package/dist/tools/RemoteTriggerTool/index.d.ts.map +1 -0
  256. package/dist/tools/RemoteTriggerTool/index.js +43 -0
  257. package/dist/tools/RemoteTriggerTool/index.js.map +1 -0
  258. package/dist/tools/SendMessageTool/index.d.ts +18 -0
  259. package/dist/tools/SendMessageTool/index.d.ts.map +1 -0
  260. package/dist/tools/SendMessageTool/index.js +29 -0
  261. package/dist/tools/SendMessageTool/index.js.map +1 -0
  262. package/dist/tools/TaskCreateTool/index.d.ts +6 -0
  263. package/dist/tools/TaskCreateTool/index.d.ts.map +1 -1
  264. package/dist/tools/TaskCreateTool/index.js +8 -2
  265. package/dist/tools/TaskCreateTool/index.js.map +1 -1
  266. package/dist/tools/TaskGetTool/index.d.ts +12 -0
  267. package/dist/tools/TaskGetTool/index.d.ts.map +1 -0
  268. package/dist/tools/TaskGetTool/index.js +50 -0
  269. package/dist/tools/TaskGetTool/index.js.map +1 -0
  270. package/dist/tools/TaskOutputTool/index.d.ts +15 -0
  271. package/dist/tools/TaskOutputTool/index.d.ts.map +1 -0
  272. package/dist/tools/TaskOutputTool/index.js +45 -0
  273. package/dist/tools/TaskOutputTool/index.js.map +1 -0
  274. package/dist/tools/TaskStopTool/index.d.ts +15 -0
  275. package/dist/tools/TaskStopTool/index.d.ts.map +1 -0
  276. package/dist/tools/TaskStopTool/index.js +51 -0
  277. package/dist/tools/TaskStopTool/index.js.map +1 -0
  278. package/dist/tools/TaskUpdateTool/index.d.ts +21 -3
  279. package/dist/tools/TaskUpdateTool/index.d.ts.map +1 -1
  280. package/dist/tools/TaskUpdateTool/index.js +48 -3
  281. package/dist/tools/TaskUpdateTool/index.js.map +1 -1
  282. package/dist/tools/tools-basic.test.js +191 -2
  283. package/dist/tools/tools-basic.test.js.map +1 -1
  284. package/dist/tools.d.ts.map +1 -1
  285. package/dist/tools.js +38 -0
  286. package/dist/tools.js.map +1 -1
  287. package/dist/types/permissions.d.ts +2 -2
  288. package/dist/types/permissions.d.ts.map +1 -1
  289. package/dist/types/permissions.js +59 -13
  290. package/dist/types/permissions.js.map +1 -1
  291. package/dist/types/permissions.test.js +57 -0
  292. package/dist/types/permissions.test.js.map +1 -1
  293. package/dist/utils/bash-safety.d.ts +18 -0
  294. package/dist/utils/bash-safety.d.ts.map +1 -0
  295. package/dist/utils/bash-safety.js +227 -0
  296. package/dist/utils/bash-safety.js.map +1 -0
  297. package/dist/utils/bash-safety.test.d.ts +2 -0
  298. package/dist/utils/bash-safety.test.d.ts.map +1 -0
  299. package/dist/utils/bash-safety.test.js +112 -0
  300. package/dist/utils/bash-safety.test.js.map +1 -0
  301. package/dist/utils/fs.d.ts +15 -0
  302. package/dist/utils/fs.d.ts.map +1 -0
  303. package/dist/utils/fs.js +64 -0
  304. package/dist/utils/fs.js.map +1 -0
  305. package/dist/utils/fs.test.d.ts +5 -0
  306. package/dist/utils/fs.test.d.ts.map +1 -0
  307. package/dist/utils/fs.test.js +82 -0
  308. package/dist/utils/fs.test.js.map +1 -0
  309. package/dist/utils/safe-env.d.ts +10 -0
  310. package/dist/utils/safe-env.d.ts.map +1 -0
  311. package/dist/utils/safe-env.js +40 -0
  312. package/dist/utils/safe-env.js.map +1 -0
  313. package/package.json +4 -1
@@ -3,7 +3,46 @@ import * as fs from "fs/promises";
3
3
  import * as path from "path";
4
4
  const inputSchema = z.object({
5
5
  path: z.string().optional(),
6
+ depth: z.number().optional(),
6
7
  });
8
+ const MAX_ENTRIES = 500;
9
+ async function listDir(dir, prefix, maxDepth, currentDepth) {
10
+ const entries = await fs.readdir(dir, { withFileTypes: true });
11
+ entries.sort((a, b) => {
12
+ if (a.isDirectory() !== b.isDirectory())
13
+ return a.isDirectory() ? -1 : 1;
14
+ return a.name.localeCompare(b.name);
15
+ });
16
+ const lines = [];
17
+ for (const entry of entries) {
18
+ if (lines.length >= MAX_ENTRIES)
19
+ break;
20
+ if (entry.name.startsWith(".") && currentDepth > 0)
21
+ continue; // skip dotfiles in subdirs
22
+ if (entry.isDirectory()) {
23
+ lines.push(`${prefix}${entry.name}/`);
24
+ if (currentDepth + 1 < maxDepth) {
25
+ const subLines = await listDir(path.join(dir, entry.name), prefix + " ", maxDepth, currentDepth + 1);
26
+ lines.push(...subLines);
27
+ }
28
+ }
29
+ else {
30
+ try {
31
+ const stat = await fs.stat(path.join(dir, entry.name));
32
+ const size = stat.size < 1024
33
+ ? `${stat.size}B`
34
+ : stat.size < 1024 * 1024
35
+ ? `${(stat.size / 1024).toFixed(1)}K`
36
+ : `${(stat.size / 1024 / 1024).toFixed(1)}M`;
37
+ lines.push(`${prefix}${entry.name.padEnd(Math.max(1, 40 - prefix.length))} ${size}`);
38
+ }
39
+ catch {
40
+ lines.push(`${prefix}${entry.name}`);
41
+ }
42
+ }
43
+ }
44
+ return lines;
45
+ }
7
46
  export const LSTool = {
8
47
  name: "LS",
9
48
  description: "List the contents of a directory.",
@@ -21,34 +60,9 @@ export const LSTool = {
21
60
  ? input.path
22
61
  : path.resolve(context.workingDir, input.path)
23
62
  : context.workingDir;
63
+ const maxDepth = input.depth ?? 1;
24
64
  try {
25
- const entries = await fs.readdir(dir, { withFileTypes: true });
26
- entries.sort((a, b) => {
27
- // Directories first, then files, both alphabetically
28
- if (a.isDirectory() !== b.isDirectory())
29
- return a.isDirectory() ? -1 : 1;
30
- return a.name.localeCompare(b.name);
31
- });
32
- const lines = [];
33
- for (const entry of entries) {
34
- if (entry.isDirectory()) {
35
- lines.push(`${entry.name}/`);
36
- }
37
- else {
38
- try {
39
- const stat = await fs.stat(path.join(dir, entry.name));
40
- const size = stat.size < 1024
41
- ? `${stat.size}B`
42
- : stat.size < 1024 * 1024
43
- ? `${(stat.size / 1024).toFixed(1)}K`
44
- : `${(stat.size / 1024 / 1024).toFixed(1)}M`;
45
- lines.push(`${entry.name.padEnd(40)} ${size}`);
46
- }
47
- catch {
48
- lines.push(entry.name);
49
- }
50
- }
51
- }
65
+ const lines = await listDir(dir, "", maxDepth, 0);
52
66
  if (lines.length === 0)
53
67
  return { output: "(empty directory)", isError: false };
54
68
  return { output: lines.join("\n"), isError: false };
@@ -62,9 +76,10 @@ export const LSTool = {
62
76
  }
63
77
  },
64
78
  prompt() {
65
- return `List the contents of a directory. Parameters:
79
+ return `List the contents of a directory. Use this instead of running 'ls' via Bash. Parameters:
66
80
  - path (string, optional): Directory to list (default: working directory).
67
- Directories are shown with a trailing slash and listed first. Files show their size.`;
81
+ - depth (number, optional): How many levels deep to recurse (default 1 = immediate contents only). Use 2 or 3 for a tree view.
82
+ Directories are shown with a trailing slash and listed first. Files show their size. For recursive file discovery by pattern, use the Glob tool instead.`;
68
83
  },
69
84
  };
70
85
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/LSTool/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/LSTool/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import type { Tool } from "../../Tool.js";
3
+ declare const inputSchema: z.ZodObject<{
4
+ action: z.ZodEnum<["save", "list", "search"]>;
5
+ name: z.ZodOptional<z.ZodString>;
6
+ type: z.ZodOptional<z.ZodEnum<["convention", "preference", "project", "debugging"]>>;
7
+ description: z.ZodOptional<z.ZodString>;
8
+ content: z.ZodOptional<z.ZodString>;
9
+ query: z.ZodOptional<z.ZodString>;
10
+ global: z.ZodOptional<z.ZodBoolean>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ action: "search" | "list" | "save";
13
+ content?: string | undefined;
14
+ type?: "convention" | "preference" | "project" | "debugging" | undefined;
15
+ global?: boolean | undefined;
16
+ name?: string | undefined;
17
+ description?: string | undefined;
18
+ query?: string | undefined;
19
+ }, {
20
+ action: "search" | "list" | "save";
21
+ content?: string | undefined;
22
+ type?: "convention" | "preference" | "project" | "debugging" | undefined;
23
+ global?: boolean | undefined;
24
+ name?: string | undefined;
25
+ description?: string | undefined;
26
+ query?: string | undefined;
27
+ }>;
28
+ export declare const MemoryTool: Tool<typeof inputSchema>;
29
+ export {};
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/MemoryTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,eAAe,CAAC;AAGtD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;EAQf,CAAC;AAEH,eAAO,MAAM,UAAU,EAAE,IAAI,CAAC,OAAO,WAAW,CAsD/C,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { z } from "zod";
2
+ import { saveMemory, loadActiveMemories, touchMemory } from "../../harness/memory.js";
3
+ const inputSchema = z.object({
4
+ action: z.enum(["save", "list", "search"]),
5
+ name: z.string().optional().describe("Memory name (for save)"),
6
+ type: z.enum(["convention", "preference", "project", "debugging"]).optional(),
7
+ description: z.string().optional(),
8
+ content: z.string().optional().describe("Memory content (for save)"),
9
+ query: z.string().optional().describe("Search query (for search)"),
10
+ global: z.boolean().optional().describe("Save to global memory instead of project"),
11
+ });
12
+ export const MemoryTool = {
13
+ name: "Memory",
14
+ description: "Save, list, or search persistent memories that survive across sessions.",
15
+ inputSchema,
16
+ riskLevel: "low",
17
+ isReadOnly(input) { return input.action !== 'save'; },
18
+ isConcurrencySafe() { return true; },
19
+ async call(input) {
20
+ if (input.action === 'save') {
21
+ if (!input.name || !input.content) {
22
+ return { output: "name and content required for save.", isError: true };
23
+ }
24
+ const path = saveMemory(input.name, input.type ?? 'convention', input.description ?? input.name, input.content, input.global);
25
+ return { output: `Memory saved: ${path}`, isError: false };
26
+ }
27
+ if (input.action === 'list') {
28
+ const memories = loadActiveMemories();
29
+ if (memories.length === 0)
30
+ return { output: "No memories saved.", isError: false };
31
+ const lines = memories.map(m => `[${m.type}] ${m.name} (relevance: ${(m.relevance ?? 0.5).toFixed(1)}) — ${m.description}`);
32
+ return { output: lines.join('\n'), isError: false };
33
+ }
34
+ if (input.action === 'search') {
35
+ if (!input.query)
36
+ return { output: "query required for search.", isError: true };
37
+ const memories = loadActiveMemories();
38
+ const q = input.query.toLowerCase();
39
+ const matches = memories.filter(m => m.name.toLowerCase().includes(q) ||
40
+ m.content.toLowerCase().includes(q) ||
41
+ m.description.toLowerCase().includes(q));
42
+ if (matches.length === 0)
43
+ return { output: `No memories matching "${input.query}".`, isError: false };
44
+ // Touch accessed memories to boost relevance
45
+ for (const m of matches)
46
+ touchMemory(m);
47
+ const lines = matches.map(m => `[${m.type}] ${m.name}: ${m.content.slice(0, 200)}`);
48
+ return { output: lines.join('\n\n'), isError: false };
49
+ }
50
+ return { output: "Unknown action.", isError: true };
51
+ },
52
+ prompt() {
53
+ return "Memory: Save/list/search persistent memories across sessions. Actions: save, list, search.";
54
+ },
55
+ };
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/MemoryTool/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { z } from "zod";
2
+ import type { Tool } from "../../Tool.js";
3
+ declare const inputSchema: z.ZodObject<{
4
+ edits: z.ZodArray<z.ZodObject<{
5
+ file_path: z.ZodString;
6
+ old_string: z.ZodString;
7
+ new_string: z.ZodString;
8
+ }, "strip", z.ZodTypeAny, {
9
+ file_path: string;
10
+ old_string: string;
11
+ new_string: string;
12
+ }, {
13
+ file_path: string;
14
+ old_string: string;
15
+ new_string: string;
16
+ }>, "many">;
17
+ }, "strip", z.ZodTypeAny, {
18
+ edits: {
19
+ file_path: string;
20
+ old_string: string;
21
+ new_string: string;
22
+ }[];
23
+ }, {
24
+ edits: {
25
+ file_path: string;
26
+ old_string: string;
27
+ new_string: string;
28
+ }[];
29
+ }>;
30
+ export declare const MultiEditTool: Tool<typeof inputSchema>;
31
+ export {};
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/MultiEditTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,eAAe,CAAC;AAStD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;EAEf,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,IAAI,CAAC,OAAO,WAAW,CA8ClD,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+ import { readFileSync, writeFileSync, existsSync } from "node:fs";
3
+ const editSchema = z.object({
4
+ file_path: z.string(),
5
+ old_string: z.string(),
6
+ new_string: z.string(),
7
+ });
8
+ const inputSchema = z.object({
9
+ edits: z.array(editSchema).describe("Array of edits to apply atomically"),
10
+ });
11
+ export const MultiEditTool = {
12
+ name: "MultiEdit",
13
+ description: "Apply multiple file edits atomically. All edits succeed or none do. Useful for coordinated changes across files.",
14
+ inputSchema,
15
+ riskLevel: "medium",
16
+ isReadOnly() { return false; },
17
+ isConcurrencySafe() { return false; },
18
+ async call(input) {
19
+ // Phase 1: Validate all edits can be applied
20
+ const originals = new Map();
21
+ const modified = new Map();
22
+ for (const edit of input.edits) {
23
+ if (!existsSync(edit.file_path)) {
24
+ return { output: `File not found: ${edit.file_path}`, isError: true };
25
+ }
26
+ if (!originals.has(edit.file_path)) {
27
+ originals.set(edit.file_path, readFileSync(edit.file_path, 'utf-8'));
28
+ }
29
+ const current = modified.get(edit.file_path) ?? originals.get(edit.file_path);
30
+ if (!current.includes(edit.old_string)) {
31
+ return {
32
+ output: `old_string not found in ${edit.file_path}: "${edit.old_string.slice(0, 80)}"`,
33
+ isError: true,
34
+ };
35
+ }
36
+ modified.set(edit.file_path, current.replace(edit.old_string, edit.new_string));
37
+ }
38
+ // Phase 2: Apply all edits
39
+ const results = [];
40
+ for (const [path, content] of modified) {
41
+ writeFileSync(path, content);
42
+ results.push(path);
43
+ }
44
+ return {
45
+ output: `Applied ${input.edits.length} edit(s) across ${results.length} file(s): ${results.join(', ')}`,
46
+ isError: false,
47
+ };
48
+ },
49
+ prompt() {
50
+ return "MultiEdit: Apply multiple file edits atomically. All succeed or none do.";
51
+ },
52
+ };
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/MultiEditTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAElE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAC1E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,kHAAkH;IAC/H,WAAW;IACX,SAAS,EAAE,QAAQ;IACnB,UAAU,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9B,iBAAiB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAErC,KAAK,CAAC,IAAI,CAAC,KAAK;QACd,6CAA6C;QAC7C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,OAAO,EAAE,MAAM,EAAE,mBAAmB,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACxE,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAE,CAAC;YAC/E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvC,OAAO;oBACL,MAAM,EAAE,2BAA2B,IAAI,CAAC,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;oBACtF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAClF,CAAC;QAED,2BAA2B;QAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YACvC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,OAAO;YACL,MAAM,EAAE,WAAW,KAAK,CAAC,KAAK,CAAC,MAAM,mBAAmB,OAAO,CAAC,MAAM,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvG,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,0EAA0E,CAAC;IACpF,CAAC;CACF,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ import type { Tool } from "../../Tool.js";
3
+ declare const inputSchema: z.ZodObject<{
4
+ url: z.ZodString;
5
+ method: z.ZodOptional<z.ZodEnum<["GET", "POST", "PUT", "DELETE"]>>;
6
+ body: z.ZodOptional<z.ZodString>;
7
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ url: string;
10
+ method?: "POST" | "GET" | "PUT" | "DELETE" | undefined;
11
+ body?: string | undefined;
12
+ headers?: Record<string, string> | undefined;
13
+ }, {
14
+ url: string;
15
+ method?: "POST" | "GET" | "PUT" | "DELETE" | undefined;
16
+ body?: string | undefined;
17
+ headers?: Record<string, string> | undefined;
18
+ }>;
19
+ export declare const RemoteTriggerTool: Tool<typeof inputSchema>;
20
+ export {};
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/RemoteTriggerTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,eAAe,CAAC;AAEtD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;EAKf,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,IAAI,CAAC,OAAO,WAAW,CAqCtD,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { z } from "zod";
2
+ const inputSchema = z.object({
3
+ url: z.string().describe("Webhook URL to trigger"),
4
+ method: z.enum(["GET", "POST", "PUT", "DELETE"]).optional(),
5
+ body: z.string().optional().describe("JSON body for POST/PUT requests"),
6
+ headers: z.record(z.string()).optional().describe("Custom headers"),
7
+ });
8
+ export const RemoteTriggerTool = {
9
+ name: "RemoteTrigger",
10
+ description: "Trigger a remote webhook or API endpoint. Useful for CI/CD, deployments, and external integrations.",
11
+ inputSchema,
12
+ riskLevel: "high",
13
+ isReadOnly() { return false; },
14
+ isConcurrencySafe() { return true; },
15
+ async call(input) {
16
+ try {
17
+ const method = input.method ?? (input.body ? "POST" : "GET");
18
+ const headers = {
19
+ 'Content-Type': 'application/json',
20
+ ...input.headers,
21
+ };
22
+ const res = await fetch(input.url, {
23
+ method,
24
+ headers,
25
+ body: input.body,
26
+ signal: AbortSignal.timeout(30_000),
27
+ });
28
+ const text = await res.text();
29
+ const truncated = text.length > 5000 ? text.slice(0, 5000) + '\n[truncated]' : text;
30
+ return {
31
+ output: `${res.status} ${res.statusText}\n${truncated}`,
32
+ isError: res.status >= 400,
33
+ };
34
+ }
35
+ catch (err) {
36
+ return { output: `Request failed: ${err instanceof Error ? err.message : String(err)}`, isError: true };
37
+ }
38
+ },
39
+ prompt() {
40
+ return "RemoteTrigger: Send HTTP requests to webhooks, APIs, or CI/CD triggers.";
41
+ },
42
+ };
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/RemoteTriggerTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACvE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IACzD,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,qGAAqG;IAClH,WAAW;IACX,SAAS,EAAE,MAAM;IACjB,UAAU,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9B,iBAAiB,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEpC,KAAK,CAAC,IAAI,CAAC,KAAK;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM,OAAO,GAA2B;gBACtC,cAAc,EAAE,kBAAkB;gBAClC,GAAG,KAAK,CAAC,OAAO;aACjB,CAAC;YAEF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;gBACjC,MAAM;gBACN,OAAO;gBACP,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;YACpF,OAAO;gBACL,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE;gBACvD,OAAO,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG;aAC3B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,MAAM,EAAE,mBAAmB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1G,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,yEAAyE,CAAC;IACnF,CAAC;CACF,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ import type { Tool } from "../../Tool.js";
3
+ declare const inputSchema: z.ZodObject<{
4
+ to: z.ZodString;
5
+ content: z.ZodString;
6
+ type: z.ZodOptional<z.ZodEnum<["request", "response", "status", "error"]>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ content: string;
9
+ to: string;
10
+ type?: "error" | "status" | "request" | "response" | undefined;
11
+ }, {
12
+ content: string;
13
+ to: string;
14
+ type?: "error" | "status" | "request" | "response" | undefined;
15
+ }>;
16
+ export declare const SendMessageTool: Tool<typeof inputSchema>;
17
+ export {};
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/SendMessageTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,eAAe,CAAC;AAGtD,QAAA,MAAM,WAAW;;;;;;;;;;;;EAIf,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,OAAO,WAAW,CAuBpD,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+ import { getMessageBus } from "../../services/agent-messaging.js";
3
+ const inputSchema = z.object({
4
+ to: z.string().describe("Target agent ID, or '*' for broadcast"),
5
+ content: z.string().describe("Message content"),
6
+ type: z.enum(["request", "response", "status", "error"]).optional(),
7
+ });
8
+ export const SendMessageTool = {
9
+ name: "SendMessage",
10
+ description: "Send a message to another agent. Use for coordination in multi-agent workflows.",
11
+ inputSchema,
12
+ riskLevel: "low",
13
+ isReadOnly() { return true; },
14
+ isConcurrencySafe() { return true; },
15
+ async call(input) {
16
+ const bus = getMessageBus();
17
+ bus.send({
18
+ from: 'lead',
19
+ to: input.to,
20
+ type: input.type ?? 'request',
21
+ content: input.content,
22
+ });
23
+ return { output: `Message sent to ${input.to}`, isError: false };
24
+ },
25
+ prompt() {
26
+ return "SendMessage: Send messages to other agents for coordination. Use to: '*' for broadcast.";
27
+ },
28
+ };
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/SendMessageTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAChE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;CACpE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,iFAAiF;IAC9F,WAAW;IACX,SAAS,EAAE,KAAK;IAEhB,UAAU,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAC7B,iBAAiB,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEpC,KAAK,CAAC,IAAI,CAAC,KAAK;QACd,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,mBAAmB,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACnE,CAAC;IAED,MAAM;QACJ,OAAO,yFAAyF,CAAC;IACnG,CAAC;CACF,CAAC"}
@@ -3,12 +3,18 @@ import type { Tool } from "../../Tool.js";
3
3
  declare const inputSchema: z.ZodObject<{
4
4
  subject: z.ZodString;
5
5
  description: z.ZodString;
6
+ activeForm: z.ZodOptional<z.ZodString>;
7
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
6
8
  }, "strip", z.ZodTypeAny, {
7
9
  description: string;
8
10
  subject: string;
11
+ activeForm?: string | undefined;
12
+ metadata?: Record<string, unknown> | undefined;
9
13
  }, {
10
14
  description: string;
11
15
  subject: string;
16
+ activeForm?: string | undefined;
17
+ metadata?: Record<string, unknown> | undefined;
12
18
  }>;
13
19
  export declare const TaskCreateTool: Tool<typeof inputSchema>;
14
20
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/TaskCreateTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,eAAe,CAAC;AAEnE,QAAA,MAAM,WAAW;;;;;;;;;EAGf,CAAC;AASH,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,OAAO,WAAW,CAoDnD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/TaskCreateTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,eAAe,CAAC;AAEnE,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;EAKf,CAAC;AAeH,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,OAAO,WAAW,CAwDnD,CAAC"}
@@ -4,6 +4,8 @@ import * as path from "path";
4
4
  const inputSchema = z.object({
5
5
  subject: z.string(),
6
6
  description: z.string(),
7
+ activeForm: z.string().optional(),
8
+ metadata: z.record(z.unknown()).optional(),
7
9
  });
8
10
  export const TaskCreateTool = {
9
11
  name: "TaskCreate",
@@ -35,6 +37,8 @@ export const TaskCreateTool = {
35
37
  subject: input.subject,
36
38
  description: input.description,
37
39
  status: "pending",
40
+ ...(input.activeForm ? { activeForm: input.activeForm } : {}),
41
+ ...(input.metadata ? { metadata: input.metadata } : {}),
38
42
  };
39
43
  tasks.push(newTask);
40
44
  await fs.writeFile(filePath, JSON.stringify(tasks, null, 2), "utf-8");
@@ -46,8 +50,10 @@ export const TaskCreateTool = {
46
50
  },
47
51
  prompt() {
48
52
  return `Create a new task in .oh/tasks.json. Parameters:
49
- - subject (string, required): Short title for the task.
50
- - description (string, required): Detailed description of the task.
53
+ - subject (string, required): A brief, actionable title in imperative form (e.g., "Fix authentication bug").
54
+ - description (string, required): What needs to be done.
55
+ - activeForm (string, optional): Present continuous form shown in spinner when in_progress (e.g., "Fixing authentication bug").
56
+ - metadata (object, optional): Arbitrary metadata to attach to the task.
51
57
  Each task gets an auto-incremented ID and starts with status "pending".`;
52
58
  },
53
59
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/TaskCreateTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AASH,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,oDAAoD;IACjE,WAAW;IACX,SAAS,EAAE,KAAK;IAEhB,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iBAAiB;QACf,OAAO,KAAK,CAAC,CAAC,4BAA4B;IAC5C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEzC,IAAI,KAAK,GAAW,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,OAAO,GAAS;gBACpB,EAAE,EAAE,KAAK,GAAG,CAAC;gBACb,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,MAAM,EAAE,SAAS;aAClB,CAAC;YAEF,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAEtE,OAAO,EAAE,MAAM,EAAE,SAAS,OAAO,CAAC,EAAE,aAAa,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,MAAM,EAAE,wBAAwB,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO;;;wEAG6D,CAAC;IACvE,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/TaskCreateTool/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ import type { Tool } from "../../Tool.js";
3
+ declare const inputSchema: z.ZodObject<{
4
+ taskId: z.ZodNumber;
5
+ }, "strip", z.ZodTypeAny, {
6
+ taskId: number;
7
+ }, {
8
+ taskId: number;
9
+ }>;
10
+ export declare const TaskGetTool: Tool<typeof inputSchema>;
11
+ export {};
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/TaskGetTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,eAAe,CAAC;AAEnE,QAAA,MAAM,WAAW;;;;;;EAEf,CAAC;AAUH,eAAO,MAAM,WAAW,EAAE,IAAI,CAAC,OAAO,WAAW,CAiDhD,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { z } from "zod";
2
+ import * as fs from "fs/promises";
3
+ import * as path from "path";
4
+ const inputSchema = z.object({
5
+ taskId: z.number(),
6
+ });
7
+ export const TaskGetTool = {
8
+ name: "TaskGet",
9
+ description: "Get details of a single task by ID.",
10
+ inputSchema,
11
+ riskLevel: "low",
12
+ isReadOnly() {
13
+ return true;
14
+ },
15
+ isConcurrencySafe() {
16
+ return true;
17
+ },
18
+ async call(input, context) {
19
+ const filePath = path.join(context.workingDir, ".oh", "tasks.json");
20
+ try {
21
+ const content = await fs.readFile(filePath, "utf-8");
22
+ const tasks = JSON.parse(content);
23
+ const task = tasks.find((t) => t.id === input.taskId);
24
+ if (!task) {
25
+ return { output: `Error: Task #${input.taskId} not found.`, isError: true };
26
+ }
27
+ const lines = [
28
+ `Task #${task.id}`,
29
+ `Subject: ${task.subject}`,
30
+ `Status: ${task.status}`,
31
+ `Description: ${task.description}`,
32
+ ];
33
+ if (task.output) {
34
+ lines.push(`Output: ${task.output}`);
35
+ }
36
+ return { output: lines.join("\n"), isError: false };
37
+ }
38
+ catch (err) {
39
+ if (err.code === "ENOENT") {
40
+ return { output: "Error: No tasks file found.", isError: true };
41
+ }
42
+ return { output: `Error: ${err.message}`, isError: true };
43
+ }
44
+ },
45
+ prompt() {
46
+ return `Get full details of a single task by ID. Parameters:
47
+ - taskId (number, required): The ID of the task to retrieve.`;
48
+ },
49
+ };
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/TaskGetTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAUH,MAAM,CAAC,MAAM,WAAW,GAA6B;IACnD,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,qCAAqC;IAClD,WAAW;IACX,SAAS,EAAE,KAAK;IAEhB,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAEpE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,gBAAgB,KAAK,CAAC,MAAM,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC9E,CAAC;YAED,MAAM,KAAK,GAAG;gBACZ,SAAS,IAAI,CAAC,EAAE,EAAE;gBAClB,YAAY,IAAI,CAAC,OAAO,EAAE;gBAC1B,WAAW,IAAI,CAAC,MAAM,EAAE;gBACxB,gBAAgB,IAAI,CAAC,WAAW,EAAE;aACnC,CAAC;YACF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,EAAE,MAAM,EAAE,6BAA6B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClE,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO;6DACkD,CAAC;IAC5D,CAAC;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ import type { Tool } from "../../Tool.js";
3
+ declare const inputSchema: z.ZodObject<{
4
+ taskId: z.ZodNumber;
5
+ output: z.ZodString;
6
+ }, "strip", z.ZodTypeAny, {
7
+ output: string;
8
+ taskId: number;
9
+ }, {
10
+ output: string;
11
+ taskId: number;
12
+ }>;
13
+ export declare const TaskOutputTool: Tool<typeof inputSchema>;
14
+ export {};
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/TaskOutputTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,eAAe,CAAC;AAEnE,QAAA,MAAM,WAAW;;;;;;;;;EAGf,CAAC;AAUH,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,OAAO,WAAW,CA2CnD,CAAC"}