@gencode/agents 0.0.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 (353) hide show
  1. package/dist/bootstrap/bootstrap-layout.d.ts +23 -0
  2. package/dist/bootstrap/bootstrap-layout.d.ts.map +1 -0
  3. package/dist/bootstrap/bootstrap-layout.js +151 -0
  4. package/dist/bootstrap/bootstrap-layout.js.map +1 -0
  5. package/dist/bootstrap/bootstrap.d.ts +36 -0
  6. package/dist/bootstrap/bootstrap.d.ts.map +1 -0
  7. package/dist/bootstrap/bootstrap.js +136 -0
  8. package/dist/bootstrap/bootstrap.js.map +1 -0
  9. package/dist/bootstrap/templates/AGENTS_MD.d.ts +2 -0
  10. package/dist/bootstrap/templates/AGENTS_MD.d.ts.map +1 -0
  11. package/dist/bootstrap/templates/AGENTS_MD.js +223 -0
  12. package/dist/bootstrap/templates/AGENTS_MD.js.map +1 -0
  13. package/dist/bootstrap/templates/BOOTSTRAP_MD.d.ts +2 -0
  14. package/dist/bootstrap/templates/BOOTSTRAP_MD.d.ts.map +1 -0
  15. package/dist/bootstrap/templates/BOOTSTRAP_MD.js +66 -0
  16. package/dist/bootstrap/templates/BOOTSTRAP_MD.js.map +1 -0
  17. package/dist/bootstrap/templates/HEARTBEAT_MD.d.ts +2 -0
  18. package/dist/bootstrap/templates/HEARTBEAT_MD.d.ts.map +1 -0
  19. package/dist/bootstrap/templates/HEARTBEAT_MD.js +16 -0
  20. package/dist/bootstrap/templates/HEARTBEAT_MD.js.map +1 -0
  21. package/dist/bootstrap/templates/IDENTITY_MD.d.ts +2 -0
  22. package/dist/bootstrap/templates/IDENTITY_MD.d.ts.map +1 -0
  23. package/dist/bootstrap/templates/IDENTITY_MD.js +31 -0
  24. package/dist/bootstrap/templates/IDENTITY_MD.js.map +1 -0
  25. package/dist/bootstrap/templates/SOUL_MD.d.ts +2 -0
  26. package/dist/bootstrap/templates/SOUL_MD.d.ts.map +1 -0
  27. package/dist/bootstrap/templates/SOUL_MD.js +47 -0
  28. package/dist/bootstrap/templates/SOUL_MD.js.map +1 -0
  29. package/dist/bootstrap/templates/TOOLS_MD.d.ts +2 -0
  30. package/dist/bootstrap/templates/TOOLS_MD.d.ts.map +1 -0
  31. package/dist/bootstrap/templates/TOOLS_MD.js +51 -0
  32. package/dist/bootstrap/templates/TOOLS_MD.js.map +1 -0
  33. package/dist/bootstrap/templates/USER_MD.d.ts +2 -0
  34. package/dist/bootstrap/templates/USER_MD.d.ts.map +1 -0
  35. package/dist/bootstrap/templates/USER_MD.js +27 -0
  36. package/dist/bootstrap/templates/USER_MD.js.map +1 -0
  37. package/dist/bootstrap/templates/index.d.ts +3 -0
  38. package/dist/bootstrap/templates/index.d.ts.map +1 -0
  39. package/dist/bootstrap/templates/index.js +26 -0
  40. package/dist/bootstrap/templates/index.js.map +1 -0
  41. package/dist/commands/compact.d.ts +28 -0
  42. package/dist/commands/compact.d.ts.map +1 -0
  43. package/dist/commands/compact.js +57 -0
  44. package/dist/commands/compact.js.map +1 -0
  45. package/dist/commands/help.d.ts +3 -0
  46. package/dist/commands/help.d.ts.map +1 -0
  47. package/dist/commands/help.js +50 -0
  48. package/dist/commands/help.js.map +1 -0
  49. package/dist/commands/index.d.ts +6 -0
  50. package/dist/commands/index.d.ts.map +1 -0
  51. package/dist/commands/index.js +32 -0
  52. package/dist/commands/index.js.map +1 -0
  53. package/dist/commands/new.d.ts +3 -0
  54. package/dist/commands/new.d.ts.map +1 -0
  55. package/dist/commands/new.js +4 -0
  56. package/dist/commands/new.js.map +1 -0
  57. package/dist/commands/registry.d.ts +11 -0
  58. package/dist/commands/registry.d.ts.map +1 -0
  59. package/dist/commands/registry.js +122 -0
  60. package/dist/commands/registry.js.map +1 -0
  61. package/dist/commands/reset.d.ts +3 -0
  62. package/dist/commands/reset.d.ts.map +1 -0
  63. package/dist/commands/reset.js +4 -0
  64. package/dist/commands/reset.js.map +1 -0
  65. package/dist/commands/skill.d.ts +7 -0
  66. package/dist/commands/skill.d.ts.map +1 -0
  67. package/dist/commands/skill.js +23 -0
  68. package/dist/commands/skill.js.map +1 -0
  69. package/dist/commands/types.d.ts +57 -0
  70. package/dist/commands/types.d.ts.map +1 -0
  71. package/dist/commands/types.js +2 -0
  72. package/dist/commands/types.js.map +1 -0
  73. package/dist/config/agents-config.d.ts +85 -0
  74. package/dist/config/agents-config.d.ts.map +1 -0
  75. package/dist/config/agents-config.js +257 -0
  76. package/dist/config/agents-config.js.map +1 -0
  77. package/dist/config/index.d.ts +9 -0
  78. package/dist/config/index.d.ts.map +1 -0
  79. package/dist/config/index.js +9 -0
  80. package/dist/config/index.js.map +1 -0
  81. package/dist/config/types.d.ts +87 -0
  82. package/dist/config/types.d.ts.map +1 -0
  83. package/dist/config/types.js +6 -0
  84. package/dist/config/types.js.map +1 -0
  85. package/dist/history/compaction.d.ts +42 -0
  86. package/dist/history/compaction.d.ts.map +1 -0
  87. package/dist/history/compaction.js +135 -0
  88. package/dist/history/compaction.js.map +1 -0
  89. package/dist/history/index.d.ts +57 -0
  90. package/dist/history/index.d.ts.map +1 -0
  91. package/dist/history/index.js +145 -0
  92. package/dist/history/index.js.map +1 -0
  93. package/dist/history/limit.d.ts +13 -0
  94. package/dist/history/limit.d.ts.map +1 -0
  95. package/dist/history/limit.js +32 -0
  96. package/dist/history/limit.js.map +1 -0
  97. package/dist/history/repair.d.ts +13 -0
  98. package/dist/history/repair.d.ts.map +1 -0
  99. package/dist/history/repair.js +25 -0
  100. package/dist/history/repair.js.map +1 -0
  101. package/dist/history/token-estimate.d.ts +22 -0
  102. package/dist/history/token-estimate.d.ts.map +1 -0
  103. package/dist/history/token-estimate.js +38 -0
  104. package/dist/history/token-estimate.js.map +1 -0
  105. package/dist/index.d.ts +41 -0
  106. package/dist/index.d.ts.map +1 -0
  107. package/dist/index.js +35 -0
  108. package/dist/index.js.map +1 -0
  109. package/dist/llm/client.d.ts +53 -0
  110. package/dist/llm/client.d.ts.map +1 -0
  111. package/dist/llm/client.js +214 -0
  112. package/dist/llm/client.js.map +1 -0
  113. package/dist/llm/openai-completions-compat.d.ts +23 -0
  114. package/dist/llm/openai-completions-compat.d.ts.map +1 -0
  115. package/dist/llm/openai-completions-compat.js +602 -0
  116. package/dist/llm/openai-completions-compat.js.map +1 -0
  117. package/dist/llm/openai-stream-error.d.ts +11 -0
  118. package/dist/llm/openai-stream-error.d.ts.map +1 -0
  119. package/dist/llm/openai-stream-error.js +77 -0
  120. package/dist/llm/openai-stream-error.js.map +1 -0
  121. package/dist/loop-detection/session-state.d.ts +5 -0
  122. package/dist/loop-detection/session-state.d.ts.map +1 -0
  123. package/dist/loop-detection/session-state.js +16 -0
  124. package/dist/loop-detection/session-state.js.map +1 -0
  125. package/dist/loop-detection/tool-loop-detection.d.ts +122 -0
  126. package/dist/loop-detection/tool-loop-detection.d.ts.map +1 -0
  127. package/dist/loop-detection/tool-loop-detection.js +516 -0
  128. package/dist/loop-detection/tool-loop-detection.js.map +1 -0
  129. package/dist/memory/builtin-provider.d.ts +5 -0
  130. package/dist/memory/builtin-provider.d.ts.map +1 -0
  131. package/dist/memory/builtin-provider.js +42 -0
  132. package/dist/memory/builtin-provider.js.map +1 -0
  133. package/dist/memory/config.d.ts +50 -0
  134. package/dist/memory/config.d.ts.map +1 -0
  135. package/dist/memory/config.js +46 -0
  136. package/dist/memory/config.js.map +1 -0
  137. package/dist/memory/embedding-registry.d.ts +37 -0
  138. package/dist/memory/embedding-registry.d.ts.map +1 -0
  139. package/dist/memory/embedding-registry.js +56 -0
  140. package/dist/memory/embedding-registry.js.map +1 -0
  141. package/dist/memory/embeddings.d.ts +11 -0
  142. package/dist/memory/embeddings.d.ts.map +1 -0
  143. package/dist/memory/embeddings.js +40 -0
  144. package/dist/memory/embeddings.js.map +1 -0
  145. package/dist/memory/fs-utils.d.ts +12 -0
  146. package/dist/memory/fs-utils.d.ts.map +1 -0
  147. package/dist/memory/fs-utils.js +24 -0
  148. package/dist/memory/fs-utils.js.map +1 -0
  149. package/dist/memory/hybrid.d.ts +43 -0
  150. package/dist/memory/hybrid.d.ts.map +1 -0
  151. package/dist/memory/hybrid.js +80 -0
  152. package/dist/memory/hybrid.js.map +1 -0
  153. package/dist/memory/internal.d.ts +28 -0
  154. package/dist/memory/internal.d.ts.map +1 -0
  155. package/dist/memory/internal.js +270 -0
  156. package/dist/memory/internal.js.map +1 -0
  157. package/dist/memory/manager-search.d.ts +61 -0
  158. package/dist/memory/manager-search.d.ts.map +1 -0
  159. package/dist/memory/manager-search.js +106 -0
  160. package/dist/memory/manager-search.js.map +1 -0
  161. package/dist/memory/manager.d.ts +126 -0
  162. package/dist/memory/manager.d.ts.map +1 -0
  163. package/dist/memory/manager.js +1006 -0
  164. package/dist/memory/manager.js.map +1 -0
  165. package/dist/memory/memory-schema.d.ts +11 -0
  166. package/dist/memory/memory-schema.d.ts.map +1 -0
  167. package/dist/memory/memory-schema.js +78 -0
  168. package/dist/memory/memory-schema.js.map +1 -0
  169. package/dist/memory/memory.d.ts +46 -0
  170. package/dist/memory/memory.d.ts.map +1 -0
  171. package/dist/memory/memory.js +127 -0
  172. package/dist/memory/memory.js.map +1 -0
  173. package/dist/memory/mmr.d.ts +22 -0
  174. package/dist/memory/mmr.d.ts.map +1 -0
  175. package/dist/memory/mmr.js +112 -0
  176. package/dist/memory/mmr.js.map +1 -0
  177. package/dist/memory/provider-registry.d.ts +29 -0
  178. package/dist/memory/provider-registry.d.ts.map +1 -0
  179. package/dist/memory/provider-registry.js +58 -0
  180. package/dist/memory/provider-registry.js.map +1 -0
  181. package/dist/memory/provider.d.ts +40 -0
  182. package/dist/memory/provider.d.ts.map +1 -0
  183. package/dist/memory/provider.js +2 -0
  184. package/dist/memory/provider.js.map +1 -0
  185. package/dist/memory/session-files.d.ts +13 -0
  186. package/dist/memory/session-files.d.ts.map +1 -0
  187. package/dist/memory/session-files.js +116 -0
  188. package/dist/memory/session-files.js.map +1 -0
  189. package/dist/memory/sqlite-vec.d.ts +10 -0
  190. package/dist/memory/sqlite-vec.d.ts.map +1 -0
  191. package/dist/memory/sqlite-vec.js +20 -0
  192. package/dist/memory/sqlite-vec.js.map +1 -0
  193. package/dist/memory/sqlite.d.ts +2 -0
  194. package/dist/memory/sqlite.d.ts.map +1 -0
  195. package/dist/memory/sqlite.js +12 -0
  196. package/dist/memory/sqlite.js.map +1 -0
  197. package/dist/memory/temporal-decay.d.ts +26 -0
  198. package/dist/memory/temporal-decay.d.ts.map +1 -0
  199. package/dist/memory/temporal-decay.js +119 -0
  200. package/dist/memory/temporal-decay.js.map +1 -0
  201. package/dist/memory/watch-bridge.d.ts +20 -0
  202. package/dist/memory/watch-bridge.d.ts.map +1 -0
  203. package/dist/memory/watch-bridge.js +128 -0
  204. package/dist/memory/watch-bridge.js.map +1 -0
  205. package/dist/plugins/boundary-file-read.d.ts +13 -0
  206. package/dist/plugins/boundary-file-read.d.ts.map +1 -0
  207. package/dist/plugins/boundary-file-read.js +31 -0
  208. package/dist/plugins/boundary-file-read.js.map +1 -0
  209. package/dist/plugins/config-state.d.ts +35 -0
  210. package/dist/plugins/config-state.d.ts.map +1 -0
  211. package/dist/plugins/config-state.js +97 -0
  212. package/dist/plugins/config-state.js.map +1 -0
  213. package/dist/plugins/discovery.d.ts +21 -0
  214. package/dist/plugins/discovery.d.ts.map +1 -0
  215. package/dist/plugins/discovery.js +425 -0
  216. package/dist/plugins/discovery.js.map +1 -0
  217. package/dist/plugins/hooks.d.ts +112 -0
  218. package/dist/plugins/hooks.d.ts.map +1 -0
  219. package/dist/plugins/hooks.js +19 -0
  220. package/dist/plugins/hooks.js.map +1 -0
  221. package/dist/plugins/index.d.ts +20 -0
  222. package/dist/plugins/index.d.ts.map +1 -0
  223. package/dist/plugins/index.js +11 -0
  224. package/dist/plugins/index.js.map +1 -0
  225. package/dist/plugins/loader.d.ts +60 -0
  226. package/dist/plugins/loader.d.ts.map +1 -0
  227. package/dist/plugins/loader.js +224 -0
  228. package/dist/plugins/loader.js.map +1 -0
  229. package/dist/plugins/manager.d.ts +20 -0
  230. package/dist/plugins/manager.d.ts.map +1 -0
  231. package/dist/plugins/manager.js +33 -0
  232. package/dist/plugins/manager.js.map +1 -0
  233. package/dist/plugins/manifest-registry.d.ts +15 -0
  234. package/dist/plugins/manifest-registry.d.ts.map +1 -0
  235. package/dist/plugins/manifest-registry.js +37 -0
  236. package/dist/plugins/manifest-registry.js.map +1 -0
  237. package/dist/plugins/manifest.d.ts +6 -0
  238. package/dist/plugins/manifest.d.ts.map +1 -0
  239. package/dist/plugins/manifest.js +80 -0
  240. package/dist/plugins/manifest.js.map +1 -0
  241. package/dist/plugins/path-safety.d.ts +6 -0
  242. package/dist/plugins/path-safety.d.ts.map +1 -0
  243. package/dist/plugins/path-safety.js +32 -0
  244. package/dist/plugins/path-safety.js.map +1 -0
  245. package/dist/plugins/runtime-context.d.ts +12 -0
  246. package/dist/plugins/runtime-context.d.ts.map +1 -0
  247. package/dist/plugins/runtime-context.js +2 -0
  248. package/dist/plugins/runtime-context.js.map +1 -0
  249. package/dist/plugins/runtime.d.ts +12 -0
  250. package/dist/plugins/runtime.d.ts.map +1 -0
  251. package/dist/plugins/runtime.js +13 -0
  252. package/dist/plugins/runtime.js.map +1 -0
  253. package/dist/plugins/schema-validator.d.ts +17 -0
  254. package/dist/plugins/schema-validator.d.ts.map +1 -0
  255. package/dist/plugins/schema-validator.js +26 -0
  256. package/dist/plugins/schema-validator.js.map +1 -0
  257. package/dist/plugins/tool-hooks.d.ts +4 -0
  258. package/dist/plugins/tool-hooks.d.ts.map +1 -0
  259. package/dist/plugins/tool-hooks.js +60 -0
  260. package/dist/plugins/tool-hooks.js.map +1 -0
  261. package/dist/plugins/tools.d.ts +20 -0
  262. package/dist/plugins/tools.d.ts.map +1 -0
  263. package/dist/plugins/tools.js +42 -0
  264. package/dist/plugins/tools.js.map +1 -0
  265. package/dist/plugins/types.d.ts +61 -0
  266. package/dist/plugins/types.d.ts.map +1 -0
  267. package/dist/plugins/types.js +2 -0
  268. package/dist/plugins/types.js.map +1 -0
  269. package/dist/plugins/utils.d.ts +4 -0
  270. package/dist/plugins/utils.d.ts.map +1 -0
  271. package/dist/plugins/utils.js +22 -0
  272. package/dist/plugins/utils.js.map +1 -0
  273. package/dist/runner/runner.d.ts +14 -0
  274. package/dist/runner/runner.d.ts.map +1 -0
  275. package/dist/runner/runner.js +893 -0
  276. package/dist/runner/runner.js.map +1 -0
  277. package/dist/session/session.d.ts +45 -0
  278. package/dist/session/session.d.ts.map +1 -0
  279. package/dist/session/session.js +167 -0
  280. package/dist/session/session.js.map +1 -0
  281. package/dist/skills/skills.d.ts +23 -0
  282. package/dist/skills/skills.d.ts.map +1 -0
  283. package/dist/skills/skills.js +109 -0
  284. package/dist/skills/skills.js.map +1 -0
  285. package/dist/subagent/registry-persist.d.ts +31 -0
  286. package/dist/subagent/registry-persist.d.ts.map +1 -0
  287. package/dist/subagent/registry-persist.js +115 -0
  288. package/dist/subagent/registry-persist.js.map +1 -0
  289. package/dist/subagent/registry.d.ts +52 -0
  290. package/dist/subagent/registry.d.ts.map +1 -0
  291. package/dist/subagent/registry.js +122 -0
  292. package/dist/subagent/registry.js.map +1 -0
  293. package/dist/subagent/types.d.ts +20 -0
  294. package/dist/subagent/types.d.ts.map +1 -0
  295. package/dist/subagent/types.js +2 -0
  296. package/dist/subagent/types.js.map +1 -0
  297. package/dist/system-prompt/builder.d.ts +50 -0
  298. package/dist/system-prompt/builder.d.ts.map +1 -0
  299. package/dist/system-prompt/builder.js +335 -0
  300. package/dist/system-prompt/builder.js.map +1 -0
  301. package/dist/tools/apply-patch.d.ts +15 -0
  302. package/dist/tools/apply-patch.d.ts.map +1 -0
  303. package/dist/tools/apply-patch.js +425 -0
  304. package/dist/tools/apply-patch.js.map +1 -0
  305. package/dist/tools/bash.d.ts +11 -0
  306. package/dist/tools/bash.d.ts.map +1 -0
  307. package/dist/tools/bash.js +13 -0
  308. package/dist/tools/bash.js.map +1 -0
  309. package/dist/tools/cron.d.ts +23 -0
  310. package/dist/tools/cron.d.ts.map +1 -0
  311. package/dist/tools/cron.js +37 -0
  312. package/dist/tools/cron.js.map +1 -0
  313. package/dist/tools/exec.d.ts +18 -0
  314. package/dist/tools/exec.d.ts.map +1 -0
  315. package/dist/tools/exec.js +125 -0
  316. package/dist/tools/exec.js.map +1 -0
  317. package/dist/tools/files.d.ts +37 -0
  318. package/dist/tools/files.d.ts.map +1 -0
  319. package/dist/tools/files.js +191 -0
  320. package/dist/tools/files.js.map +1 -0
  321. package/dist/tools/image.d.ts +14 -0
  322. package/dist/tools/image.d.ts.map +1 -0
  323. package/dist/tools/image.js +26 -0
  324. package/dist/tools/image.js.map +1 -0
  325. package/dist/tools/index.d.ts +35 -0
  326. package/dist/tools/index.d.ts.map +1 -0
  327. package/dist/tools/index.js +53 -0
  328. package/dist/tools/index.js.map +1 -0
  329. package/dist/tools/memory.d.ts +41 -0
  330. package/dist/tools/memory.d.ts.map +1 -0
  331. package/dist/tools/memory.js +114 -0
  332. package/dist/tools/memory.js.map +1 -0
  333. package/dist/tools/process-registry.d.ts +47 -0
  334. package/dist/tools/process-registry.d.ts.map +1 -0
  335. package/dist/tools/process-registry.js +252 -0
  336. package/dist/tools/process-registry.js.map +1 -0
  337. package/dist/tools/process.d.ts +17 -0
  338. package/dist/tools/process.d.ts.map +1 -0
  339. package/dist/tools/process.js +114 -0
  340. package/dist/tools/process.js.map +1 -0
  341. package/dist/tools/subagent-spawn.d.ts +44 -0
  342. package/dist/tools/subagent-spawn.d.ts.map +1 -0
  343. package/dist/tools/subagent-spawn.js +100 -0
  344. package/dist/tools/subagent-spawn.js.map +1 -0
  345. package/dist/tools/subagents.d.ts +30 -0
  346. package/dist/tools/subagents.d.ts.map +1 -0
  347. package/dist/tools/subagents.js +101 -0
  348. package/dist/tools/subagents.js.map +1 -0
  349. package/dist/types.d.ts +241 -0
  350. package/dist/types.d.ts.map +1 -0
  351. package/dist/types.js +6 -0
  352. package/dist/types.js.map +1 -0
  353. package/package.json +46 -0
@@ -0,0 +1,125 @@
1
+ import path from "node:path";
2
+ import { Type } from "@mariozechner/pi-ai";
3
+ const execSchema = Type.Object({
4
+ command: Type.String({ description: "Shell command to execute" }),
5
+ workdir: Type.Optional(Type.String({ description: "Working directory (relative to workspace root)" })),
6
+ env: Type.Optional(Type.Record(Type.String(), Type.String())),
7
+ timeout: Type.Optional(Type.Number({ description: "Timeout in seconds (default: 1800)" })),
8
+ yieldMs: Type.Optional(Type.Number({ description: "Wait this many milliseconds before returning running state" })),
9
+ background: Type.Optional(Type.Boolean({ description: "Return immediately with running session" })),
10
+ });
11
+ const DEFAULT_TIMEOUT_SECONDS = 1800;
12
+ const DEFAULT_YIELD_MS = 10_000;
13
+ const MAX_YIELD_MS = 120_000;
14
+ function clamp(value, min, max) {
15
+ return Math.max(min, Math.min(max, value));
16
+ }
17
+ function normalizeTimeoutSeconds(value) {
18
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
19
+ return DEFAULT_TIMEOUT_SECONDS;
20
+ }
21
+ return Math.floor(value);
22
+ }
23
+ function normalizeYieldMs(value) {
24
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
25
+ return DEFAULT_YIELD_MS;
26
+ }
27
+ return clamp(Math.floor(value), 0, MAX_YIELD_MS);
28
+ }
29
+ function resolveWorkdir(workspaceDir, requested) {
30
+ if (!requested?.trim()) {
31
+ return workspaceDir;
32
+ }
33
+ const resolved = path.isAbsolute(requested)
34
+ ? path.normalize(requested)
35
+ : path.normalize(path.join(workspaceDir, requested));
36
+ if (!resolved.startsWith(workspaceDir + path.sep) && resolved !== workspaceDir) {
37
+ throw new Error(`workdir escapes workspace: ${requested}`);
38
+ }
39
+ return resolved;
40
+ }
41
+ function formatRunningText(snapshot) {
42
+ const tail = snapshot.outputTail.trim();
43
+ const lead = tail.length > 0 ? `${tail}\n\n` : "";
44
+ return `${lead}Process is running in the background. sessionId=${snapshot.sessionId}\nUse process(action="poll"|"log", sessionId) to continue.`;
45
+ }
46
+ function formatCompletedText(snapshot) {
47
+ const output = snapshot.outputTail.trim();
48
+ const base = output.length > 0 ? output : "(no output)";
49
+ const exitLine = snapshot.exitCode === undefined ? "" : `\nExit code: ${snapshot.exitCode === null ? "null" : snapshot.exitCode}`;
50
+ return `${base}${exitLine}`;
51
+ }
52
+ export function createExecTool(options) {
53
+ return {
54
+ name: "exec",
55
+ label: "Exec",
56
+ description: "Execute shell commands with optional background continuation. Use process tool to poll logs and status.",
57
+ parameters: execSchema,
58
+ async execute(_toolCallId, params) {
59
+ if (!params.command?.trim()) {
60
+ return {
61
+ content: [{ type: "text", text: "Error: command is required." }],
62
+ details: { status: "failed" },
63
+ };
64
+ }
65
+ let cwd;
66
+ try {
67
+ cwd = resolveWorkdir(options.workspaceDir, params.workdir);
68
+ }
69
+ catch (err) {
70
+ const message = err instanceof Error ? err.message : String(err);
71
+ return {
72
+ content: [{ type: "text", text: `Error: ${message}` }],
73
+ details: { status: "failed" },
74
+ };
75
+ }
76
+ const timeoutSec = normalizeTimeoutSeconds(params.timeout);
77
+ const snapshot = options.registry.start({
78
+ command: params.command,
79
+ cwd,
80
+ env: params.env,
81
+ timeoutSec,
82
+ scopeKey: options.scopeKey,
83
+ });
84
+ const backgroundRequested = params.background === true;
85
+ const hasYield = typeof params.yieldMs === "number" && Number.isFinite(params.yieldMs);
86
+ let latest = snapshot;
87
+ if (!backgroundRequested && !hasYield) {
88
+ const waited = await options.registry.wait(snapshot.sessionId, options.scopeKey, undefined);
89
+ if (waited) {
90
+ latest = waited;
91
+ }
92
+ }
93
+ else if (!backgroundRequested) {
94
+ const waited = await options.registry.wait(snapshot.sessionId, options.scopeKey, normalizeYieldMs(params.yieldMs));
95
+ if (waited) {
96
+ latest = waited;
97
+ }
98
+ }
99
+ if (latest.status === "running") {
100
+ return {
101
+ content: [{ type: "text", text: formatRunningText(latest) }],
102
+ details: {
103
+ status: "running",
104
+ sessionId: latest.sessionId,
105
+ command: latest.command,
106
+ cwd: latest.cwd,
107
+ pid: latest.pid,
108
+ },
109
+ };
110
+ }
111
+ return {
112
+ content: [{ type: "text", text: formatCompletedText(latest) }],
113
+ details: {
114
+ status: latest.status,
115
+ sessionId: latest.sessionId,
116
+ command: latest.command,
117
+ cwd: latest.cwd,
118
+ exitCode: latest.exitCode,
119
+ exitSignal: latest.exitSignal,
120
+ },
121
+ };
122
+ },
123
+ };
124
+ }
125
+ //# sourceMappingURL=exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { TObject, TString, TNumber, TOptional } from "@sinclair/typebox";
2
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
3
+ declare const readFileSchema: TObject<{
4
+ path: TString;
5
+ offset: TOptional<TNumber>;
6
+ limit: TOptional<TNumber>;
7
+ }>;
8
+ type ReadFileResult = {
9
+ content: string;
10
+ lines: number;
11
+ truncated: boolean;
12
+ };
13
+ export declare function createReadFileTool(workspaceDir: string): AgentTool<typeof readFileSchema, ReadFileResult>;
14
+ declare const writeFileSchema: TObject<{
15
+ path: TString;
16
+ content: TString;
17
+ }>;
18
+ export declare function createWriteFileTool(workspaceDir: string): AgentTool<typeof writeFileSchema, {
19
+ path: string;
20
+ }>;
21
+ declare const editFileSchema: TObject<{
22
+ path: TString;
23
+ old_string: TString;
24
+ new_string: TString;
25
+ }>;
26
+ export declare function createEditFileTool(workspaceDir: string): AgentTool<typeof editFileSchema, {
27
+ path: string;
28
+ occurrences: number;
29
+ }>;
30
+ declare const listDirSchema: TObject<{
31
+ path: TOptional<TString>;
32
+ }>;
33
+ export declare function createListDirTool(workspaceDir: string): AgentTool<typeof listDirSchema, {
34
+ entries: string[];
35
+ }>;
36
+ export {};
37
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,6BAA6B,CAAC;AAwB9E,QAAA,MAAM,cAAc,EAAE,OAAO,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3B,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;CAC3B,CAIC,CAAC;AAEH,KAAK,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAE7E,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,GACnB,SAAS,CAAC,OAAO,cAAc,EAAE,cAAc,CAAC,CAqDlD;AAID,QAAA,MAAM,eAAe,EAAE,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAGhE,CAAC;AAEH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,GACnB,SAAS,CAAC,OAAO,eAAe,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAgCrD;AAID,QAAA,MAAM,cAAc,EAAE,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAIvF,CAAC;AAEH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,GACnB,SAAS,CAAC,OAAO,cAAc,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CA2CzE;AAID,QAAA,MAAM,aAAa,EAAE,OAAO,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;CAAE,CAEvD,CAAC;AAEH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,GACnB,SAAS,CAAC,OAAO,aAAa,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAkCxD"}
@@ -0,0 +1,191 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { Type } from "@mariozechner/pi-ai";
4
+ /** Maximum file size to read (5 MB) */
5
+ const MAX_READ_BYTES = 5 * 1024 * 1024;
6
+ /** Maximum lines to return from a read */
7
+ const MAX_READ_LINES = 2000;
8
+ /**
9
+ * Validates that a requested path stays within the allowed root.
10
+ * Returns the resolved absolute path, or throws if it escapes the root.
11
+ */
12
+ function resolveSecurePath(requestedPath, rootDir) {
13
+ const resolved = path.isAbsolute(requestedPath)
14
+ ? path.normalize(requestedPath)
15
+ : path.normalize(path.join(rootDir, requestedPath));
16
+ // if (!resolved.startsWith(rootDir + path.sep) && resolved !== rootDir) {
17
+ // throw new Error(`Path escapes workspace: ${requestedPath}`);
18
+ // }
19
+ return resolved;
20
+ }
21
+ // ─── Read File Tool ───────────────────────────────────────────────────────────
22
+ const readFileSchema = Type.Object({
23
+ path: Type.String({ description: "File path (relative to workspace or absolute)" }),
24
+ offset: Type.Optional(Type.Number({ description: "Line offset (1-based, default: 1)" })),
25
+ limit: Type.Optional(Type.Number({ description: "Maximum lines to read (default: 2000)" })),
26
+ });
27
+ export function createReadFileTool(workspaceDir) {
28
+ return {
29
+ name: "read_file",
30
+ label: "Read File",
31
+ description: "Read the contents of a file",
32
+ parameters: readFileSchema,
33
+ async execute(_toolCallId, params) {
34
+ let filePath;
35
+ try {
36
+ filePath = resolveSecurePath(params.path, workspaceDir);
37
+ }
38
+ catch (err) {
39
+ const msg = err instanceof Error ? err.message : String(err);
40
+ return { content: [{ type: "text", text: `Error: ${msg}` }], details: { content: "", lines: 0, truncated: false } };
41
+ }
42
+ let raw;
43
+ try {
44
+ raw = await fs.readFile(filePath);
45
+ }
46
+ catch (err) {
47
+ const code = err.code;
48
+ const msg = code === "ENOENT" ? `File not found: ${params.path}` : String(err);
49
+ return { content: [{ type: "text", text: `Error: ${msg}` }], details: { content: "", lines: 0, truncated: false } };
50
+ }
51
+ if (raw.length > MAX_READ_BYTES) {
52
+ const truncated = raw.slice(0, MAX_READ_BYTES).toString("utf-8");
53
+ return {
54
+ content: [{ type: "text", text: `${truncated}\n[...file truncated at ${MAX_READ_BYTES} bytes]` }],
55
+ details: { content: truncated, lines: 0, truncated: true },
56
+ };
57
+ }
58
+ const text = raw.toString("utf-8");
59
+ const allLines = text.split("\n");
60
+ const offset = Math.max(1, params.offset ?? 1);
61
+ const limit = Math.min(MAX_READ_LINES, params.limit ?? MAX_READ_LINES);
62
+ const selectedLines = allLines.slice(offset - 1, offset - 1 + limit);
63
+ const truncated = selectedLines.length < allLines.length - (offset - 1);
64
+ const numbered = selectedLines
65
+ .map((line, idx) => `${(offset + idx).toString().padStart(4)} ${line}`)
66
+ .join("\n");
67
+ const suffix = truncated ? `\n[...${allLines.length - (offset - 1 + selectedLines.length)} more lines]` : "";
68
+ return {
69
+ content: [{ type: "text", text: numbered + suffix }],
70
+ details: { content: selectedLines.join("\n"), lines: selectedLines.length, truncated },
71
+ };
72
+ },
73
+ };
74
+ }
75
+ // ─── Write File Tool ──────────────────────────────────────────────────────────
76
+ const writeFileSchema = Type.Object({
77
+ path: Type.String({ description: "File path (relative to workspace or absolute)" }),
78
+ content: Type.String({ description: "File content to write" }),
79
+ });
80
+ export function createWriteFileTool(workspaceDir) {
81
+ return {
82
+ name: "write_file",
83
+ label: "Write File",
84
+ description: "Create or overwrite a file with the given content",
85
+ parameters: writeFileSchema,
86
+ async execute(_toolCallId, params) {
87
+ let filePath;
88
+ try {
89
+ filePath = resolveSecurePath(params.path, workspaceDir);
90
+ }
91
+ catch (err) {
92
+ const msg = err instanceof Error ? err.message : String(err);
93
+ return { content: [{ type: "text", text: `Error: ${msg}` }], details: { path: params.path } };
94
+ }
95
+ try {
96
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
97
+ await fs.writeFile(filePath, params.content, "utf-8");
98
+ }
99
+ catch (err) {
100
+ const msg = err instanceof Error ? err.message : String(err);
101
+ return { content: [{ type: "text", text: `Error writing file: ${msg}` }], details: { path: filePath } };
102
+ }
103
+ return {
104
+ content: [{ type: "text", text: `File written: ${params.path}` }],
105
+ details: { path: filePath },
106
+ };
107
+ },
108
+ };
109
+ }
110
+ // ─── Edit File Tool ───────────────────────────────────────────────────────────
111
+ const editFileSchema = Type.Object({
112
+ path: Type.String({ description: "File path (relative to workspace or absolute)" }),
113
+ old_string: Type.String({ description: "Exact text to replace" }),
114
+ new_string: Type.String({ description: "Replacement text" }),
115
+ });
116
+ export function createEditFileTool(workspaceDir) {
117
+ return {
118
+ name: "edit_file",
119
+ label: "Edit File",
120
+ description: "Replace the first occurrence of old_string with new_string in a file",
121
+ parameters: editFileSchema,
122
+ async execute(_toolCallId, params) {
123
+ let filePath;
124
+ try {
125
+ filePath = resolveSecurePath(params.path, workspaceDir);
126
+ }
127
+ catch (err) {
128
+ const msg = err instanceof Error ? err.message : String(err);
129
+ return { content: [{ type: "text", text: `Error: ${msg}` }], details: { path: params.path, occurrences: 0 } };
130
+ }
131
+ let content;
132
+ try {
133
+ content = await fs.readFile(filePath, "utf-8");
134
+ }
135
+ catch (err) {
136
+ const code = err.code;
137
+ const msg = code === "ENOENT" ? `File not found: ${params.path}` : String(err);
138
+ return { content: [{ type: "text", text: `Error: ${msg}` }], details: { path: filePath, occurrences: 0 } };
139
+ }
140
+ if (!content.includes(params.old_string)) {
141
+ return {
142
+ content: [{ type: "text", text: `Error: old_string not found in ${params.path}` }],
143
+ details: { path: filePath, occurrences: 0 },
144
+ };
145
+ }
146
+ const newContent = content.replace(params.old_string, params.new_string);
147
+ await fs.writeFile(filePath, newContent, "utf-8");
148
+ return {
149
+ content: [{ type: "text", text: `File edited: ${params.path}` }],
150
+ details: { path: filePath, occurrences: 1 },
151
+ };
152
+ },
153
+ };
154
+ }
155
+ // ─── List Directory Tool ──────────────────────────────────────────────────────
156
+ const listDirSchema = Type.Object({
157
+ path: Type.Optional(Type.String({ description: "Directory path (default: workspace root)" })),
158
+ });
159
+ export function createListDirTool(workspaceDir) {
160
+ return {
161
+ name: "list_dir",
162
+ label: "List Directory",
163
+ description: "List the contents of a directory",
164
+ parameters: listDirSchema,
165
+ async execute(_toolCallId, params) {
166
+ const targetPath = params.path ?? ".";
167
+ let dirPath;
168
+ try {
169
+ dirPath = resolveSecurePath(targetPath, workspaceDir);
170
+ }
171
+ catch (err) {
172
+ const msg = err instanceof Error ? err.message : String(err);
173
+ return { content: [{ type: "text", text: `Error: ${msg}` }], details: { entries: [] } };
174
+ }
175
+ let entries;
176
+ try {
177
+ const dirents = await fs.readdir(dirPath, { withFileTypes: true });
178
+ entries = dirents.map((d) => `${d.name}${d.isDirectory() ? "/" : ""}`);
179
+ }
180
+ catch (err) {
181
+ const msg = err instanceof Error ? err.message : String(err);
182
+ return { content: [{ type: "text", text: `Error: ${msg}` }], details: { entries: [] } };
183
+ }
184
+ return {
185
+ content: [{ type: "text", text: entries.join("\n") || "(empty directory)" }],
186
+ details: { entries },
187
+ };
188
+ },
189
+ };
190
+ }
191
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
2
+ declare const imageSchema: import("@sinclair/typebox").TObject<{
3
+ image: import("@sinclair/typebox").TString;
4
+ prompt: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
5
+ model: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
6
+ maxBytesMb: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
7
+ }>;
8
+ type ImageResult = {
9
+ implemented: boolean;
10
+ error?: string;
11
+ };
12
+ export declare function createImageTool(): AgentTool<typeof imageSchema, ImageResult>;
13
+ export {};
14
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/tools/image.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,6BAA6B,CAAC;AAE9E,QAAA,MAAM,WAAW;;;;;EAKf,CAAC;AAEH,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,eAAe,IAAI,SAAS,CAAC,OAAO,WAAW,EAAE,WAAW,CAAC,CAqB5E"}
@@ -0,0 +1,26 @@
1
+ import { Type } from "@mariozechner/pi-ai";
2
+ const imageSchema = Type.Object({
3
+ image: Type.String({ description: "Image path or URL" }),
4
+ prompt: Type.Optional(Type.String({ description: "Prompt for image analysis" })),
5
+ model: Type.Optional(Type.String({ description: "Optional model override" })),
6
+ maxBytesMb: Type.Optional(Type.Number({ description: "Optional size cap in MB" })),
7
+ });
8
+ export function createImageTool() {
9
+ return {
10
+ name: "image",
11
+ label: "Image",
12
+ description: "Analyze an image with the configured image model. (Not implemented in AIMax yet.)",
13
+ parameters: imageSchema,
14
+ async execute(_toolCallId, _params) {
15
+ const result = {
16
+ implemented: false,
17
+ error: "image tool not implemented (awaiting third-party integration).",
18
+ };
19
+ return {
20
+ content: [{ type: "text", text: `Error: ${result.error}` }],
21
+ details: result,
22
+ };
23
+ },
24
+ };
25
+ }
26
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/tools/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,qBAAqB,CAAC;AAGxD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACxD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC,CAAC;IAChF,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAC7E,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC,CAAC;CACnF,CAAC,CAAC;AAOH,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,WAAW,EACT,mFAAmF;QACrF,UAAU,EAAE,WAAW;QACvB,KAAK,CAAC,OAAO,CACX,WAAmB,EACnB,OAAmC;YAEnC,MAAM,MAAM,GAAgB;gBAC1B,WAAW,EAAE,KAAK;gBAClB,KAAK,EAAE,gEAAgE;aACxE,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC3D,OAAO,EAAE,MAAM;aAChB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
2
+ import { type MemoryToolOptions } from "./memory.js";
3
+ import type { SubagentRegistry } from "../subagent/registry.js";
4
+ import type { AgentRunParams, AgentRunResult } from "../types.js";
5
+ import type { ToolLoopDetectionConfig } from "../loop-detection/tool-loop-detection.js";
6
+ /** Optional context for enabling subagent tools */
7
+ export type SubagentToolsContext = {
8
+ registry: SubagentRegistry;
9
+ parentSessionId: string;
10
+ /** Depth of the current agent (root = 0) */
11
+ depth: number;
12
+ channel: AgentRunParams["channel"];
13
+ llm: AgentRunParams["llm"];
14
+ loopDetection?: ToolLoopDetectionConfig;
15
+ memoryOptions?: MemoryToolOptions;
16
+ /** Callback that runs a child agent; injected to avoid circular imports */
17
+ spawnFn: (params: AgentRunParams) => Promise<AgentRunResult>;
18
+ };
19
+ /**
20
+ * Creates the full set of agent tools for a given data directory.
21
+ * File and exec/process tools are scoped to the workspace directory.
22
+ * Memory tools are scoped to the data directory's .aimax root
23
+ * (MEMORY.md + memory/*.md).
24
+ * Subagent tools (sessions_spawn, subagents) are included when ctx is provided.
25
+ */
26
+ export declare function createAgentTools(dataDir: string, ctx?: SubagentToolsContext): AgentTool[];
27
+ export { createBashTool } from "./bash.js";
28
+ export { createExecTool, createProcessTool } from "./bash.js";
29
+ export { createReadFileTool, createWriteFileTool, createEditFileTool, createListDirTool, } from "./files.js";
30
+ export { createApplyPatchTool } from "./apply-patch.js";
31
+ export { createMemorySearchTool, createMemoryGetTool, createMemoryAppendTool, } from "./memory.js";
32
+ export { createImageTool } from "./image.js";
33
+ export { createSessionsSpawnTool } from "./subagent-spawn.js";
34
+ export { createSubagentsTool } from "./subagents.js";
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAU7D,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAGxF,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACnC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3B,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,2EAA2E;IAC3E,OAAO,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CAC9D,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,oBAAoB,GAAG,SAAS,EAAE,CA0CzF;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { createExecTool, createProcessTool } from "./bash.js";
2
+ import { createProcessRegistry } from "./process-registry.js";
3
+ import { createReadFileTool, createWriteFileTool, createEditFileTool, createListDirTool, } from "./files.js";
4
+ import { createApplyPatchTool } from "./apply-patch.js";
5
+ import { createMemorySearchTool, createMemoryGetTool, createMemoryAppendTool, } from "./memory.js";
6
+ import { createSessionsSpawnTool } from "./subagent-spawn.js";
7
+ import { createSubagentsTool } from "./subagents.js";
8
+ import path from "node:path";
9
+ /**
10
+ * Creates the full set of agent tools for a given data directory.
11
+ * File and exec/process tools are scoped to the workspace directory.
12
+ * Memory tools are scoped to the data directory's .aimax root
13
+ * (MEMORY.md + memory/*.md).
14
+ * Subagent tools (sessions_spawn, subagents) are included when ctx is provided.
15
+ */
16
+ export function createAgentTools(dataDir, ctx) {
17
+ const workspaceDir = path.join(dataDir, "workspace");
18
+ const memoryOptions = ctx?.memoryOptions;
19
+ const processRegistry = createProcessRegistry();
20
+ const tools = [
21
+ createExecTool({
22
+ workspaceDir,
23
+ registry: processRegistry,
24
+ scopeKey: workspaceDir,
25
+ }),
26
+ createProcessTool({
27
+ registry: processRegistry,
28
+ scopeKey: workspaceDir,
29
+ }),
30
+ createReadFileTool(workspaceDir),
31
+ createWriteFileTool(workspaceDir),
32
+ createEditFileTool(workspaceDir),
33
+ createListDirTool(workspaceDir),
34
+ createApplyPatchTool(workspaceDir),
35
+ createMemorySearchTool(dataDir, memoryOptions),
36
+ createMemoryGetTool(dataDir, memoryOptions),
37
+ createMemoryAppendTool(dataDir, memoryOptions),
38
+ ];
39
+ if (ctx) {
40
+ tools.push(createSessionsSpawnTool(ctx.registry, ctx.parentSessionId, ctx.depth, dataDir, ctx.channel, ctx.llm, ctx.loopDetection, ctx.spawnFn), createSubagentsTool(ctx.registry, ctx.parentSessionId));
41
+ }
42
+ // Double-cast to handle TypeScript variance issues with generic AgentTool<T> types
43
+ return tools;
44
+ }
45
+ export { createBashTool } from "./bash.js";
46
+ export { createExecTool, createProcessTool } from "./bash.js";
47
+ export { createReadFileTool, createWriteFileTool, createEditFileTool, createListDirTool, } from "./files.js";
48
+ export { createApplyPatchTool } from "./apply-patch.js";
49
+ export { createMemorySearchTool, createMemoryGetTool, createMemoryAppendTool, } from "./memory.js";
50
+ export { createImageTool } from "./image.js";
51
+ export { createSessionsSpawnTool } from "./subagent-spawn.js";
52
+ export { createSubagentsTool } from "./subagents.js";
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GAEvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAIrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAgB7B;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,GAA0B;IAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,GAAG,EAAE,aAAa,CAAC;IACzC,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAChD,MAAM,KAAK,GAAgB;QACzB,cAAc,CAAC;YACb,YAAY;YACZ,QAAQ,EAAE,eAAe;YACzB,QAAQ,EAAE,YAAY;SACvB,CAAC;QACF,iBAAiB,CAAC;YAChB,QAAQ,EAAE,eAAe;YACzB,QAAQ,EAAE,YAAY;SACvB,CAAC;QACF,kBAAkB,CAAC,YAAY,CAAC;QAChC,mBAAmB,CAAC,YAAY,CAAC;QACjC,kBAAkB,CAAC,YAAY,CAAC;QAChC,iBAAiB,CAAC,YAAY,CAAC;QAC/B,oBAAoB,CAAC,YAAY,CAAC;QAClC,sBAAsB,CAAC,OAAO,EAAE,aAAa,CAAC;QAC9C,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC;QAC3C,sBAAsB,CAAC,OAAO,EAAE,aAAa,CAAC;KAC/C,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,KAAK,CAAC,IAAI,CACR,uBAAuB,CACrB,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,eAAe,EACnB,GAAG,CAAC,KAAK,EACT,OAAO,EACP,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,OAAO,CACZ,EACD,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,CACvD,CAAC;IACJ,CAAC;IAED,mFAAmF;IACnF,OAAO,KAA+B,CAAC;AACzC,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { TObject, TString, TNumber } from "@sinclair/typebox";
2
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
3
+ import type { MemoryChangedHandler } from "../memory/provider.js";
4
+ export type MemoryToolOptions = {
5
+ providerId?: string;
6
+ pluginId?: string;
7
+ sessionId?: string;
8
+ onMemoryChanged?: MemoryChangedHandler;
9
+ };
10
+ declare const memorySearchSchema: TObject<{
11
+ query: TString;
12
+ }>;
13
+ type SearchResult = {
14
+ matches: Array<{
15
+ file: string;
16
+ start_line: number;
17
+ end_line: number;
18
+ score: number;
19
+ text: string;
20
+ source: string;
21
+ citation?: string;
22
+ }>;
23
+ };
24
+ export declare function createMemorySearchTool(dataDir: string, options?: MemoryToolOptions): AgentTool<typeof memorySearchSchema, SearchResult>;
25
+ declare const memoryGetSchema: TObject<{
26
+ file: TString;
27
+ start_line: TNumber;
28
+ end_line: TNumber;
29
+ }>;
30
+ type GetResult = {
31
+ lines: string[] | null;
32
+ };
33
+ export declare function createMemoryGetTool(dataDir: string, options?: MemoryToolOptions): AgentTool<typeof memoryGetSchema, GetResult>;
34
+ declare const memoryAppendSchema: TObject<{
35
+ content: TString;
36
+ }>;
37
+ export declare function createMemoryAppendTool(dataDir: string, options?: MemoryToolOptions): AgentTool<typeof memoryAppendSchema, {
38
+ appended: boolean;
39
+ }>;
40
+ export {};
41
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,6BAA6B,CAAC;AAO9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACxC,CAAC;AAIF,QAAA,MAAM,kBAAkB,EAAE,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,CAElD,CAAC;AAEH,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB,GAC1B,SAAS,CAAC,OAAO,kBAAkB,EAAE,YAAY,CAAC,CA6CpD;AAID,QAAA,MAAM,eAAe,EAAE,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAItF,CAAC;AAEH,KAAK,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AAE5C,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB,GAC1B,SAAS,CAAC,OAAO,eAAe,EAAE,SAAS,CAAC,CAuC9C;AAID,QAAA,MAAM,kBAAkB,EAAE,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAEpD,CAAC;AAEH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB,GAC1B,SAAS,CAAC,OAAO,kBAAkB,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CA8B7D"}