@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,425 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { Type } from "@mariozechner/pi-ai";
4
+ const BEGIN_PATCH_MARKER = "*** Begin Patch";
5
+ const END_PATCH_MARKER = "*** End Patch";
6
+ const ADD_FILE_MARKER = "*** Add File: ";
7
+ const DELETE_FILE_MARKER = "*** Delete File: ";
8
+ const UPDATE_FILE_MARKER = "*** Update File: ";
9
+ const MOVE_TO_MARKER = "*** Move to: ";
10
+ const EOF_MARKER = "*** End of File";
11
+ const CHANGE_CONTEXT_MARKER = "@@ ";
12
+ const EMPTY_CHANGE_CONTEXT_MARKER = "@@";
13
+ const applyPatchSchema = Type.Object({
14
+ input: Type.String({
15
+ description: "Patch content using the *** Begin Patch/End Patch format.",
16
+ }),
17
+ });
18
+ function resolveWorkspacePath(requestedPath, workspaceDir) {
19
+ const resolved = path.isAbsolute(requestedPath)
20
+ ? path.normalize(requestedPath)
21
+ : path.normalize(path.join(workspaceDir, requestedPath));
22
+ if (!resolved.startsWith(workspaceDir + path.sep) && resolved !== workspaceDir) {
23
+ throw new Error(`Path escapes workspace: ${requestedPath}`);
24
+ }
25
+ return resolved;
26
+ }
27
+ function toDisplayPath(resolved, workspaceDir) {
28
+ const relative = path.relative(workspaceDir, resolved);
29
+ if (!relative || relative === "") {
30
+ return path.basename(resolved);
31
+ }
32
+ if (relative.startsWith("..") || path.isAbsolute(relative)) {
33
+ return resolved;
34
+ }
35
+ return relative;
36
+ }
37
+ async function ensureDir(filePath) {
38
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
39
+ }
40
+ function formatSummary(summary) {
41
+ const lines = ["Success. Updated the following files:"];
42
+ for (const file of summary.added)
43
+ lines.push(`A ${file}`);
44
+ for (const file of summary.modified)
45
+ lines.push(`M ${file}`);
46
+ for (const file of summary.deleted)
47
+ lines.push(`D ${file}`);
48
+ return lines.join("\n");
49
+ }
50
+ export function createApplyPatchTool(workspaceDir) {
51
+ return {
52
+ name: "apply_patch",
53
+ label: "apply_patch",
54
+ description: "Apply a patch to one or more files using the apply_patch format. " +
55
+ "The input should include *** Begin Patch and *** End Patch markers.",
56
+ parameters: applyPatchSchema,
57
+ async execute(_toolCallId, params) {
58
+ try {
59
+ const input = params.input?.trim();
60
+ if (!input) {
61
+ return {
62
+ content: [{ type: "text", text: "Error: Provide a patch input." }],
63
+ details: { summary: { added: [], modified: [], deleted: [] } },
64
+ };
65
+ }
66
+ const parsed = parsePatchText(input);
67
+ if (parsed.hunks.length === 0) {
68
+ return {
69
+ content: [{ type: "text", text: "Error: No files were modified." }],
70
+ details: { summary: { added: [], modified: [], deleted: [] } },
71
+ };
72
+ }
73
+ const summary = { added: [], modified: [], deleted: [] };
74
+ const seen = {
75
+ added: new Set(),
76
+ modified: new Set(),
77
+ deleted: new Set(),
78
+ };
79
+ for (const hunk of parsed.hunks) {
80
+ if (hunk.kind === "add") {
81
+ const target = resolveWorkspacePath(hunk.path, workspaceDir);
82
+ await ensureDir(target);
83
+ await fs.writeFile(target, hunk.contents, "utf-8");
84
+ recordSummary(summary, seen, "added", toDisplayPath(target, workspaceDir));
85
+ continue;
86
+ }
87
+ if (hunk.kind === "delete") {
88
+ const target = resolveWorkspacePath(hunk.path, workspaceDir);
89
+ await fs.rm(target, { force: true, recursive: false });
90
+ recordSummary(summary, seen, "deleted", toDisplayPath(target, workspaceDir));
91
+ continue;
92
+ }
93
+ const target = resolveWorkspacePath(hunk.path, workspaceDir);
94
+ const applied = await applyUpdateHunk(target, hunk.chunks);
95
+ if (hunk.movePath) {
96
+ const moveTarget = resolveWorkspacePath(hunk.movePath, workspaceDir);
97
+ await ensureDir(moveTarget);
98
+ await fs.writeFile(moveTarget, applied, "utf-8");
99
+ await fs.rm(target, { force: true, recursive: false });
100
+ recordSummary(summary, seen, "modified", toDisplayPath(moveTarget, workspaceDir));
101
+ }
102
+ else {
103
+ await fs.writeFile(target, applied, "utf-8");
104
+ recordSummary(summary, seen, "modified", toDisplayPath(target, workspaceDir));
105
+ }
106
+ }
107
+ return {
108
+ content: [{ type: "text", text: formatSummary(summary) }],
109
+ details: { summary },
110
+ };
111
+ }
112
+ catch (err) {
113
+ const message = err instanceof Error ? err.message : String(err);
114
+ return {
115
+ content: [{ type: "text", text: `Error: ${message}` }],
116
+ details: { summary: { added: [], modified: [], deleted: [] } },
117
+ };
118
+ }
119
+ },
120
+ };
121
+ }
122
+ function recordSummary(summary, seen, bucket, value) {
123
+ if (seen[bucket].has(value))
124
+ return;
125
+ seen[bucket].add(value);
126
+ summary[bucket].push(value);
127
+ }
128
+ function parsePatchText(input) {
129
+ const trimmed = input.trim();
130
+ if (!trimmed) {
131
+ throw new Error("Invalid patch: input is empty.");
132
+ }
133
+ const lines = trimmed.split(/\r?\n/);
134
+ checkPatchBoundaries(lines);
135
+ const hunks = [];
136
+ let remaining = lines.slice(1, lines.length - 1);
137
+ let lineNumber = 2;
138
+ while (remaining.length > 0) {
139
+ const { hunk, consumed } = parseOneHunk(remaining, lineNumber);
140
+ hunks.push(hunk);
141
+ lineNumber += consumed;
142
+ remaining = remaining.slice(consumed);
143
+ }
144
+ return { hunks };
145
+ }
146
+ function checkPatchBoundaries(lines) {
147
+ const firstLine = lines[0]?.trim();
148
+ const lastLine = lines[lines.length - 1]?.trim();
149
+ if (firstLine !== BEGIN_PATCH_MARKER) {
150
+ throw new Error("The first line of the patch must be '*** Begin Patch'");
151
+ }
152
+ if (lastLine !== END_PATCH_MARKER) {
153
+ throw new Error("The last line of the patch must be '*** End Patch'");
154
+ }
155
+ }
156
+ function parseOneHunk(lines, lineNumber) {
157
+ if (lines.length === 0) {
158
+ throw new Error(`Invalid patch hunk at line ${lineNumber}: empty hunk`);
159
+ }
160
+ const firstLine = lines[0].trim();
161
+ if (firstLine.startsWith(ADD_FILE_MARKER)) {
162
+ const targetPath = firstLine.slice(ADD_FILE_MARKER.length);
163
+ let contents = "";
164
+ let consumed = 1;
165
+ for (const addLine of lines.slice(1)) {
166
+ if (addLine.startsWith("+")) {
167
+ contents += `${addLine.slice(1)}\n`;
168
+ consumed += 1;
169
+ }
170
+ else {
171
+ break;
172
+ }
173
+ }
174
+ return { hunk: { kind: "add", path: targetPath, contents }, consumed };
175
+ }
176
+ if (firstLine.startsWith(DELETE_FILE_MARKER)) {
177
+ const targetPath = firstLine.slice(DELETE_FILE_MARKER.length);
178
+ return { hunk: { kind: "delete", path: targetPath }, consumed: 1 };
179
+ }
180
+ if (firstLine.startsWith(UPDATE_FILE_MARKER)) {
181
+ const targetPath = firstLine.slice(UPDATE_FILE_MARKER.length);
182
+ let remaining = lines.slice(1);
183
+ let consumed = 1;
184
+ let movePath;
185
+ const moveCandidate = remaining[0]?.trim();
186
+ if (moveCandidate?.startsWith(MOVE_TO_MARKER)) {
187
+ movePath = moveCandidate.slice(MOVE_TO_MARKER.length);
188
+ remaining = remaining.slice(1);
189
+ consumed += 1;
190
+ }
191
+ const chunks = [];
192
+ while (remaining.length > 0) {
193
+ if (remaining[0].trim() === "") {
194
+ remaining = remaining.slice(1);
195
+ consumed += 1;
196
+ continue;
197
+ }
198
+ if (remaining[0].startsWith("***")) {
199
+ break;
200
+ }
201
+ const { chunk, consumed: chunkLines } = parseUpdateFileChunk(remaining, lineNumber + consumed, chunks.length === 0);
202
+ chunks.push(chunk);
203
+ remaining = remaining.slice(chunkLines);
204
+ consumed += chunkLines;
205
+ }
206
+ if (chunks.length === 0) {
207
+ throw new Error(`Invalid patch hunk at line ${lineNumber}: Update file hunk for path '${targetPath}' is empty`);
208
+ }
209
+ return {
210
+ hunk: { kind: "update", path: targetPath, movePath, chunks },
211
+ consumed,
212
+ };
213
+ }
214
+ throw new Error(`Invalid patch hunk at line ${lineNumber}: '${lines[0]}' is not a valid hunk header.`);
215
+ }
216
+ function parseUpdateFileChunk(lines, lineNumber, allowMissingContext) {
217
+ if (lines.length === 0) {
218
+ throw new Error(`Invalid patch hunk at line ${lineNumber}: Update hunk does not contain any lines`);
219
+ }
220
+ let changeContext;
221
+ let startIndex = 0;
222
+ if (lines[0] === EMPTY_CHANGE_CONTEXT_MARKER) {
223
+ startIndex = 1;
224
+ }
225
+ else if (lines[0].startsWith(CHANGE_CONTEXT_MARKER)) {
226
+ changeContext = lines[0].slice(CHANGE_CONTEXT_MARKER.length);
227
+ startIndex = 1;
228
+ }
229
+ else if (!allowMissingContext) {
230
+ throw new Error(`Invalid patch hunk at line ${lineNumber}: Expected update hunk to start with a @@ context marker.`);
231
+ }
232
+ if (startIndex >= lines.length) {
233
+ throw new Error(`Invalid patch hunk at line ${lineNumber + 1}: Update hunk does not contain any lines`);
234
+ }
235
+ const chunk = {
236
+ changeContext,
237
+ oldLines: [],
238
+ newLines: [],
239
+ isEndOfFile: false,
240
+ };
241
+ let parsedLines = 0;
242
+ for (const line of lines.slice(startIndex)) {
243
+ if (line === EOF_MARKER) {
244
+ if (parsedLines === 0) {
245
+ throw new Error(`Invalid patch hunk at line ${lineNumber + 1}: Update hunk does not contain any lines`);
246
+ }
247
+ chunk.isEndOfFile = true;
248
+ parsedLines += 1;
249
+ break;
250
+ }
251
+ const marker = line[0];
252
+ if (!marker) {
253
+ chunk.oldLines.push("");
254
+ chunk.newLines.push("");
255
+ parsedLines += 1;
256
+ continue;
257
+ }
258
+ if (marker === " ") {
259
+ const content = line.slice(1);
260
+ chunk.oldLines.push(content);
261
+ chunk.newLines.push(content);
262
+ parsedLines += 1;
263
+ continue;
264
+ }
265
+ if (marker === "+") {
266
+ chunk.newLines.push(line.slice(1));
267
+ parsedLines += 1;
268
+ continue;
269
+ }
270
+ if (marker === "-") {
271
+ chunk.oldLines.push(line.slice(1));
272
+ parsedLines += 1;
273
+ continue;
274
+ }
275
+ if (parsedLines === 0) {
276
+ throw new Error(`Invalid patch hunk at line ${lineNumber + 1}: Unexpected line found in update hunk.`);
277
+ }
278
+ break;
279
+ }
280
+ return { chunk, consumed: parsedLines + startIndex };
281
+ }
282
+ async function applyUpdateHunk(filePath, chunks) {
283
+ const originalContents = await fs.readFile(filePath, "utf-8").catch((err) => {
284
+ throw new Error(`Failed to read file to update ${filePath}: ${err}`);
285
+ });
286
+ const originalLines = originalContents.split("\n");
287
+ if (originalLines.length > 0 && originalLines[originalLines.length - 1] === "") {
288
+ originalLines.pop();
289
+ }
290
+ const replacements = computeReplacements(originalLines, filePath, chunks);
291
+ let newLines = applyReplacements(originalLines, replacements);
292
+ if (newLines.length === 0 || newLines[newLines.length - 1] !== "") {
293
+ newLines = [...newLines, ""];
294
+ }
295
+ return newLines.join("\n");
296
+ }
297
+ function computeReplacements(originalLines, filePath, chunks) {
298
+ const replacements = [];
299
+ let lineIndex = 0;
300
+ for (const chunk of chunks) {
301
+ if (chunk.changeContext) {
302
+ const ctxIndex = seekSequence(originalLines, [chunk.changeContext], lineIndex, false);
303
+ if (ctxIndex === null) {
304
+ throw new Error(`Failed to find context '${chunk.changeContext}' in ${filePath}`);
305
+ }
306
+ lineIndex = ctxIndex + 1;
307
+ }
308
+ if (chunk.oldLines.length === 0) {
309
+ const insertionIndex = originalLines.length > 0 && originalLines[originalLines.length - 1] === ""
310
+ ? originalLines.length - 1
311
+ : originalLines.length;
312
+ replacements.push([insertionIndex, 0, chunk.newLines]);
313
+ continue;
314
+ }
315
+ let pattern = chunk.oldLines;
316
+ let newSlice = chunk.newLines;
317
+ let found = seekSequence(originalLines, pattern, lineIndex, chunk.isEndOfFile);
318
+ if (found === null && pattern[pattern.length - 1] === "") {
319
+ pattern = pattern.slice(0, -1);
320
+ if (newSlice.length > 0 && newSlice[newSlice.length - 1] === "") {
321
+ newSlice = newSlice.slice(0, -1);
322
+ }
323
+ found = seekSequence(originalLines, pattern, lineIndex, chunk.isEndOfFile);
324
+ }
325
+ if (found === null) {
326
+ throw new Error(`Failed to find expected lines in ${filePath}:\n${chunk.oldLines.join("\n")}`);
327
+ }
328
+ replacements.push([found, pattern.length, newSlice]);
329
+ lineIndex = found + pattern.length;
330
+ }
331
+ replacements.sort((a, b) => a[0] - b[0]);
332
+ return replacements;
333
+ }
334
+ function applyReplacements(lines, replacements) {
335
+ const result = [...lines];
336
+ for (const [startIndex, oldLen, newLines] of [...replacements].toReversed()) {
337
+ for (let i = 0; i < oldLen; i += 1) {
338
+ if (startIndex < result.length) {
339
+ result.splice(startIndex, 1);
340
+ }
341
+ }
342
+ for (let i = 0; i < newLines.length; i += 1) {
343
+ result.splice(startIndex + i, 0, newLines[i]);
344
+ }
345
+ }
346
+ return result;
347
+ }
348
+ function seekSequence(lines, pattern, start, eof) {
349
+ if (pattern.length === 0)
350
+ return start;
351
+ if (pattern.length > lines.length)
352
+ return null;
353
+ const maxStart = lines.length - pattern.length;
354
+ const searchStart = eof && lines.length >= pattern.length ? maxStart : start;
355
+ if (searchStart > maxStart)
356
+ return null;
357
+ for (let i = searchStart; i <= maxStart; i += 1) {
358
+ if (linesMatch(lines, pattern, i, (value) => value))
359
+ return i;
360
+ }
361
+ for (let i = searchStart; i <= maxStart; i += 1) {
362
+ if (linesMatch(lines, pattern, i, (value) => value.trimEnd()))
363
+ return i;
364
+ }
365
+ for (let i = searchStart; i <= maxStart; i += 1) {
366
+ if (linesMatch(lines, pattern, i, (value) => value.trim()))
367
+ return i;
368
+ }
369
+ for (let i = searchStart; i <= maxStart; i += 1) {
370
+ if (linesMatch(lines, pattern, i, (value) => normalizePunctuation(value.trim())))
371
+ return i;
372
+ }
373
+ return null;
374
+ }
375
+ function linesMatch(lines, pattern, start, normalize) {
376
+ for (let idx = 0; idx < pattern.length; idx += 1) {
377
+ if (normalize(lines[start + idx]) !== normalize(pattern[idx])) {
378
+ return false;
379
+ }
380
+ }
381
+ return true;
382
+ }
383
+ function normalizePunctuation(value) {
384
+ return Array.from(value)
385
+ .map((char) => {
386
+ switch (char) {
387
+ case "\u2010":
388
+ case "\u2011":
389
+ case "\u2012":
390
+ case "\u2013":
391
+ case "\u2014":
392
+ case "\u2015":
393
+ case "\u2212":
394
+ return "-";
395
+ case "\u2018":
396
+ case "\u2019":
397
+ case "\u201A":
398
+ case "\u201B":
399
+ return "'";
400
+ case "\u201C":
401
+ case "\u201D":
402
+ case "\u201E":
403
+ case "\u201F":
404
+ return '"';
405
+ case "\u00A0":
406
+ case "\u2002":
407
+ case "\u2003":
408
+ case "\u2004":
409
+ case "\u2005":
410
+ case "\u2006":
411
+ case "\u2007":
412
+ case "\u2008":
413
+ case "\u2009":
414
+ case "\u200A":
415
+ case "\u202F":
416
+ case "\u205F":
417
+ case "\u3000":
418
+ return " ";
419
+ default:
420
+ return char;
421
+ }
422
+ })
423
+ .join("");
424
+ }
425
+ //# sourceMappingURL=apply-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-patch.js","sourceRoot":"","sources":["../../src/tools/apply-patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAe,MAAM,qBAAqB,CAAC;AAGxD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAC7C,MAAM,gBAAgB,GAAG,eAAe,CAAC;AACzC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAC/C,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAC/C,MAAM,cAAc,GAAG,eAAe,CAAC;AACvC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAuCzC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,2DAA2D;KACzE,CAAC;CACH,CAAC,CAAC;AAEH,SAAS,oBAAoB,CAAC,aAAqB,EAAE,YAAoB;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAE3D,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,2BAA2B,aAAa,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,YAAoB;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3D,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAgB;IACvC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,aAAa,CAAC,OAA0B;IAC/C,MAAM,KAAK,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,YAAoB;IAEpB,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,mEAAmE;YACnE,qEAAqE;QACvE,UAAU,EAAE,gBAAgB;QAC5B,KAAK,CAAC,OAAO,CACX,WAAmB,EACnB,MAAuC;YAEvC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC;wBAClE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;qBAC/D,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;gBACrC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC;wBACnE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;qBAC/D,CAAC;gBACJ,CAAC;gBAED,MAAM,OAAO,GAAsB,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;gBAC5E,MAAM,IAAI,GAAG;oBACX,KAAK,EAAE,IAAI,GAAG,EAAU;oBACxB,QAAQ,EAAE,IAAI,GAAG,EAAU;oBAC3B,OAAO,EAAE,IAAI,GAAG,EAAU;iBAC3B,CAAC;gBAEF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBACxB,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;wBAC7D,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;wBACxB,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;wBACnD,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;wBAC3E,SAAS;oBACX,CAAC;oBAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC3B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;wBAC7D,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;wBACvD,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;wBAC7E,SAAS;oBACX,CAAC;oBAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAC7D,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3D,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAClB,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;wBACrE,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;wBAC5B,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;wBACjD,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;wBACvD,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;oBACpF,CAAC;yBAAM,CAAC;wBACN,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;wBAC7C,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;oBAChF,CAAC;gBACH,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzD,OAAO,EAAE,EAAE,OAAO,EAAE;iBACrB,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;oBACtD,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;iBAC/D,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,OAA0B,EAC1B,IAIC,EACD,MAA+B,EAC/B,KAAa;IAEb,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO;IACpC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAE5B,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,UAAU,IAAI,QAAQ,CAAC;QACvB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAe;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAe,EAAE,UAAkB;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,cAAc,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,QAAQ,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpC,QAAQ,IAAI,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC;IACzE,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,QAA4B,CAAC;QAEjC,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC3C,IAAI,aAAa,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC9C,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACtD,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/B,QAAQ,IAAI,CAAC,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC/B,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC/B,QAAQ,IAAI,CAAC,CAAC;gBACd,SAAS;YACX,CAAC;YACD,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,MAAM;YACR,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAC1D,SAAS,EACT,UAAU,GAAG,QAAQ,EACrB,MAAM,CAAC,MAAM,KAAK,CAAC,CACpB,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACxC,QAAQ,IAAI,UAAU,CAAC;QACzB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,gCAAgC,UAAU,YAAY,CAC/F,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;YAC5D,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,MAAM,KAAK,CAAC,CAAC,CAAC,+BAA+B,CACtF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAe,EACf,UAAkB,EAClB,mBAA4B;IAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,0CAA0C,CACnF,CAAC;IACJ,CAAC;IAED,IAAI,aAAiC,CAAC;IACtC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,2BAA2B,EAAE,CAAC;QAC7C,UAAU,GAAG,CAAC,CAAC;IACjB,CAAC;SAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACtD,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7D,UAAU,GAAG,CAAC,CAAC;IACjB,CAAC;SAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,2DAA2D,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,GAAG,CAAC,0CAA0C,CACvF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAoB;QAC7B,aAAa;QACb,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,KAAK;KACnB,CAAC;IAEF,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,GAAG,CAAC,0CAA0C,CACvF,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;YACzB,WAAW,IAAI,CAAC,CAAC;YACjB,MAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,WAAW,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,WAAW,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,WAAW,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,WAAW,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,GAAG,CAAC,yCAAyC,CACtF,CAAC;QACJ,CAAC;QACD,MAAM;IACR,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,UAAU,EAAE,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,QAAgB,EAChB,MAAyB;IAEzB,MAAM,gBAAgB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1E,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC/E,aAAa,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,YAAY,GAAG,mBAAmB,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1E,IAAI,QAAQ,GAAG,iBAAiB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAClE,QAAQ,GAAG,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,mBAAmB,CAC1B,aAAuB,EACvB,QAAgB,EAChB,MAAyB;IAEzB,MAAM,YAAY,GAAsC,EAAE,CAAC;IAC3D,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACtF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,aAAa,QAAQ,QAAQ,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,cAAc,GAClB,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;gBACxE,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;gBAC1B,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvD,SAAS;QACX,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC7B,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC9B,IAAI,KAAK,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAE/E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACzD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBAChE,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;YACD,KAAK,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,oCAAoC,QAAQ,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9E,CAAC;QACJ,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrD,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAe,EACf,YAA+C;IAE/C,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC;QAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CACnB,KAAe,EACf,OAAiB,EACjB,KAAa,EACb,GAAY;IAEZ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/C,MAAM,WAAW,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7E,IAAI,WAAW,GAAG,QAAQ;QAAE,OAAO,IAAI,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9E,OAAO,CAAC,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CACjB,KAAe,EACf,OAAiB,EACjB,KAAa,EACb,SAAoC;IAEpC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC;YACb,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC;YACb,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC;YACb,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,OAAO,GAAG,CAAC;YACb;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
2
+ import { createExecTool } from "./exec.js";
3
+ import { createProcessTool } from "./process.js";
4
+ import { createProcessRegistry } from "./process-registry.js";
5
+ /**
6
+ * Backward-compatible alias kept for existing imports.
7
+ * New code should use createExecTool + createProcessTool directly.
8
+ */
9
+ export declare function createBashTool(workspaceDir: string): AgentTool;
10
+ export { createExecTool, createProcessTool, createProcessRegistry };
11
+ //# sourceMappingURL=bash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAG9D;AAED,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { createExecTool } from "./exec.js";
2
+ import { createProcessTool } from "./process.js";
3
+ import { createProcessRegistry } from "./process-registry.js";
4
+ /**
5
+ * Backward-compatible alias kept for existing imports.
6
+ * New code should use createExecTool + createProcessTool directly.
7
+ */
8
+ export function createBashTool(workspaceDir) {
9
+ const registry = createProcessRegistry();
10
+ return createExecTool({ workspaceDir, registry, scopeKey: workspaceDir });
11
+ }
12
+ export { createExecTool, createProcessTool, createProcessRegistry };
13
+ //# sourceMappingURL=bash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,YAAoB;IACjD,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;IACzC,OAAO,cAAc,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
2
+ declare const cronSchema: import("@sinclair/typebox").TObject<{
3
+ action: import("@sinclair/typebox").TString;
4
+ gatewayUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
5
+ gatewayToken: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
6
+ timeoutMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
7
+ includeDisabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
8
+ job: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
9
+ jobId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
10
+ id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
11
+ patch: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
12
+ text: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
13
+ mode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
14
+ runMode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
15
+ contextMessages: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
16
+ }>;
17
+ type CronResult = {
18
+ implemented: boolean;
19
+ error?: string;
20
+ };
21
+ export declare function createCronTool(): AgentTool<typeof cronSchema, CronResult>;
22
+ export {};
23
+ //# sourceMappingURL=cron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/tools/cron.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,6BAA6B,CAAC;AAE9E,QAAA,MAAM,UAAU;;;;;;;;;;;;;;EAmBf,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,cAAc,IAAI,SAAS,CAAC,OAAO,UAAU,EAAE,UAAU,CAAC,CAqBzE"}
@@ -0,0 +1,37 @@
1
+ import { Type } from "@mariozechner/pi-ai";
2
+ const cronSchema = Type.Object({
3
+ action: Type.String({
4
+ description: "Cron action: status, list, add, update, remove, run, runs, wake",
5
+ }),
6
+ gatewayUrl: Type.Optional(Type.String()),
7
+ gatewayToken: Type.Optional(Type.String()),
8
+ timeoutMs: Type.Optional(Type.Number()),
9
+ includeDisabled: Type.Optional(Type.Boolean()),
10
+ job: Type.Optional(Type.Object({}, { additionalProperties: true })),
11
+ jobId: Type.Optional(Type.String()),
12
+ id: Type.Optional(Type.String()),
13
+ patch: Type.Optional(Type.Object({}, { additionalProperties: true })),
14
+ text: Type.Optional(Type.String()),
15
+ mode: Type.Optional(Type.String()),
16
+ runMode: Type.Optional(Type.String()),
17
+ contextMessages: Type.Optional(Type.Number()),
18
+ }, { additionalProperties: true });
19
+ export function createCronTool() {
20
+ return {
21
+ name: "cron",
22
+ label: "Cron",
23
+ description: "Manage scheduled jobs. (Not implemented in PingClaw yet; reserved for third-party integration.)",
24
+ parameters: cronSchema,
25
+ async execute(_toolCallId, _params) {
26
+ const result = {
27
+ implemented: false,
28
+ error: "cron tool not implemented (awaiting third-party integration).",
29
+ };
30
+ return {
31
+ content: [{ type: "text", text: `Error: ${result.error}` }],
32
+ details: result,
33
+ };
34
+ },
35
+ };
36
+ }
37
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/tools/cron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,qBAAqB,CAAC;AAGxD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAC5B;IACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,iEAAiE;KAC/E,CAAC;IACF,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACxC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1C,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACvC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9C,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACnC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAChC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CAC9C,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B,CAAC;AAOF,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,WAAW,EACT,iGAAiG;QACnG,UAAU,EAAE,UAAU;QACtB,KAAK,CAAC,OAAO,CACX,WAAmB,EACnB,OAAkC;YAElC,MAAM,MAAM,GAAe;gBACzB,WAAW,EAAE,KAAK;gBAClB,KAAK,EAAE,+DAA+D;aACvE,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,18 @@
1
+ import type { AgentTool } from "@mariozechner/pi-agent-core";
2
+ import type { ProcessRegistry } from "./process-registry.js";
3
+ declare const execSchema: import("@sinclair/typebox").TObject<{
4
+ command: import("@sinclair/typebox").TString;
5
+ workdir: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
6
+ env: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TString>>;
7
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
8
+ yieldMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
9
+ background: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
10
+ }>;
11
+ export type ExecToolOptions = {
12
+ workspaceDir: string;
13
+ registry: ProcessRegistry;
14
+ scopeKey?: string;
15
+ };
16
+ export declare function createExecTool(options: ExecToolOptions): AgentTool<typeof execSchema, Record<string, unknown>>;
17
+ export {};
18
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAA0B,MAAM,uBAAuB,CAAC;AAErF,QAAA,MAAM,UAAU;;;;;;;EAOd,CAAC;AAmDH,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,CAAC,OAAO,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoF9G"}