@shuyhere/takotako 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 (653) hide show
  1. package/CONTRIBUTING.md +84 -0
  2. package/LICENSE +21 -0
  3. package/README.md +171 -0
  4. package/dist/agents/communication.d.ts +48 -0
  5. package/dist/agents/communication.d.ts.map +1 -0
  6. package/dist/agents/communication.js +123 -0
  7. package/dist/agents/communication.js.map +1 -0
  8. package/dist/agents/config.d.ts +52 -0
  9. package/dist/agents/config.d.ts.map +1 -0
  10. package/dist/agents/config.js +65 -0
  11. package/dist/agents/config.js.map +1 -0
  12. package/dist/agents/model-catalog.d.ts +49 -0
  13. package/dist/agents/model-catalog.d.ts.map +1 -0
  14. package/dist/agents/model-catalog.js +79 -0
  15. package/dist/agents/model-catalog.js.map +1 -0
  16. package/dist/agents/registry.d.ts +71 -0
  17. package/dist/agents/registry.d.ts.map +1 -0
  18. package/dist/agents/registry.js +297 -0
  19. package/dist/agents/registry.js.map +1 -0
  20. package/dist/agents/roles.d.ts +79 -0
  21. package/dist/agents/roles.d.ts.map +1 -0
  22. package/dist/agents/roles.js +174 -0
  23. package/dist/agents/roles.js.map +1 -0
  24. package/dist/agents/subagent.d.ts +124 -0
  25. package/dist/agents/subagent.d.ts.map +1 -0
  26. package/dist/agents/subagent.js +352 -0
  27. package/dist/agents/subagent.js.map +1 -0
  28. package/dist/agents/templates.d.ts +18 -0
  29. package/dist/agents/templates.d.ts.map +1 -0
  30. package/dist/agents/templates.js +341 -0
  31. package/dist/agents/templates.js.map +1 -0
  32. package/dist/agents/thread-binding.d.ts +77 -0
  33. package/dist/agents/thread-binding.d.ts.map +1 -0
  34. package/dist/agents/thread-binding.js +167 -0
  35. package/dist/agents/thread-binding.js.map +1 -0
  36. package/dist/auth/agent-profiles.d.ts +46 -0
  37. package/dist/auth/agent-profiles.d.ts.map +1 -0
  38. package/dist/auth/agent-profiles.js +97 -0
  39. package/dist/auth/agent-profiles.js.map +1 -0
  40. package/dist/auth/allow-from.d.ts +27 -0
  41. package/dist/auth/allow-from.d.ts.map +1 -0
  42. package/dist/auth/allow-from.js +118 -0
  43. package/dist/auth/allow-from.js.map +1 -0
  44. package/dist/auth/oauth.d.ts +66 -0
  45. package/dist/auth/oauth.d.ts.map +1 -0
  46. package/dist/auth/oauth.js +253 -0
  47. package/dist/auth/oauth.js.map +1 -0
  48. package/dist/auth/storage.d.ts +69 -0
  49. package/dist/auth/storage.d.ts.map +1 -0
  50. package/dist/auth/storage.js +157 -0
  51. package/dist/auth/storage.js.map +1 -0
  52. package/dist/cache/file-cache.d.ts +68 -0
  53. package/dist/cache/file-cache.d.ts.map +1 -0
  54. package/dist/cache/file-cache.js +176 -0
  55. package/dist/cache/file-cache.js.map +1 -0
  56. package/dist/cache/manager.d.ts +69 -0
  57. package/dist/cache/manager.d.ts.map +1 -0
  58. package/dist/cache/manager.js +117 -0
  59. package/dist/cache/manager.js.map +1 -0
  60. package/dist/cache/symbol-index.d.ts +75 -0
  61. package/dist/cache/symbol-index.d.ts.map +1 -0
  62. package/dist/cache/symbol-index.js +267 -0
  63. package/dist/cache/symbol-index.js.map +1 -0
  64. package/dist/cache/tool-cache.d.ts +75 -0
  65. package/dist/cache/tool-cache.d.ts.map +1 -0
  66. package/dist/cache/tool-cache.js +173 -0
  67. package/dist/cache/tool-cache.js.map +1 -0
  68. package/dist/channels/channel.d.ts +156 -0
  69. package/dist/channels/channel.d.ts.map +1 -0
  70. package/dist/channels/channel.js +25 -0
  71. package/dist/channels/channel.js.map +1 -0
  72. package/dist/channels/cli.d.ts +35 -0
  73. package/dist/channels/cli.d.ts.map +1 -0
  74. package/dist/channels/cli.js +94 -0
  75. package/dist/channels/cli.js.map +1 -0
  76. package/dist/channels/delivery-queue.d.ts +31 -0
  77. package/dist/channels/delivery-queue.d.ts.map +1 -0
  78. package/dist/channels/delivery-queue.js +127 -0
  79. package/dist/channels/delivery-queue.js.map +1 -0
  80. package/dist/channels/discord.d.ts +124 -0
  81. package/dist/channels/discord.d.ts.map +1 -0
  82. package/dist/channels/discord.js +664 -0
  83. package/dist/channels/discord.js.map +1 -0
  84. package/dist/channels/retry.d.ts +31 -0
  85. package/dist/channels/retry.d.ts.map +1 -0
  86. package/dist/channels/retry.js +94 -0
  87. package/dist/channels/retry.js.map +1 -0
  88. package/dist/channels/telegram.d.ts +69 -0
  89. package/dist/channels/telegram.d.ts.map +1 -0
  90. package/dist/channels/telegram.js +499 -0
  91. package/dist/channels/telegram.js.map +1 -0
  92. package/dist/channels/tui.d.ts +42 -0
  93. package/dist/channels/tui.d.ts.map +1 -0
  94. package/dist/channels/tui.js +126 -0
  95. package/dist/channels/tui.js.map +1 -0
  96. package/dist/cli/acp.d.ts +10 -0
  97. package/dist/cli/acp.d.ts.map +1 -0
  98. package/dist/cli/acp.js +69 -0
  99. package/dist/cli/acp.js.map +1 -0
  100. package/dist/cli/audit.d.ts +11 -0
  101. package/dist/cli/audit.d.ts.map +1 -0
  102. package/dist/cli/audit.js +55 -0
  103. package/dist/cli/audit.js.map +1 -0
  104. package/dist/cli/cache.d.ts +10 -0
  105. package/dist/cli/cache.d.ts.map +1 -0
  106. package/dist/cli/cache.js +77 -0
  107. package/dist/cli/cache.js.map +1 -0
  108. package/dist/cli/config.d.ts +5 -0
  109. package/dist/cli/config.d.ts.map +1 -0
  110. package/dist/cli/config.js +168 -0
  111. package/dist/cli/config.js.map +1 -0
  112. package/dist/cli/cron.d.ts +5 -0
  113. package/dist/cli/cron.d.ts.map +1 -0
  114. package/dist/cli/cron.js +192 -0
  115. package/dist/cli/cron.js.map +1 -0
  116. package/dist/cli/extensions.d.ts +5 -0
  117. package/dist/cli/extensions.d.ts.map +1 -0
  118. package/dist/cli/extensions.js +53 -0
  119. package/dist/cli/extensions.js.map +1 -0
  120. package/dist/cli/logs.d.ts +5 -0
  121. package/dist/cli/logs.d.ts.map +1 -0
  122. package/dist/cli/logs.js +49 -0
  123. package/dist/cli/logs.js.map +1 -0
  124. package/dist/cli/memory.d.ts +5 -0
  125. package/dist/cli/memory.d.ts.map +1 -0
  126. package/dist/cli/memory.js +78 -0
  127. package/dist/cli/memory.js.map +1 -0
  128. package/dist/cli/message.d.ts +5 -0
  129. package/dist/cli/message.d.ts.map +1 -0
  130. package/dist/cli/message.js +69 -0
  131. package/dist/cli/message.js.map +1 -0
  132. package/dist/cli/service.d.ts +14 -0
  133. package/dist/cli/service.d.ts.map +1 -0
  134. package/dist/cli/service.js +181 -0
  135. package/dist/cli/service.js.map +1 -0
  136. package/dist/cli/symphony.d.ts +5 -0
  137. package/dist/cli/symphony.d.ts.map +1 -0
  138. package/dist/cli/symphony.js +114 -0
  139. package/dist/cli/symphony.js.map +1 -0
  140. package/dist/cli/update.d.ts +5 -0
  141. package/dist/cli/update.d.ts.map +1 -0
  142. package/dist/cli/update.js +48 -0
  143. package/dist/cli/update.js.map +1 -0
  144. package/dist/commands/channel-setup.d.ts +31 -0
  145. package/dist/commands/channel-setup.d.ts.map +1 -0
  146. package/dist/commands/channel-setup.js +138 -0
  147. package/dist/commands/channel-setup.js.map +1 -0
  148. package/dist/commands/dispatch.d.ts +48 -0
  149. package/dist/commands/dispatch.d.ts.map +1 -0
  150. package/dist/commands/dispatch.js +68 -0
  151. package/dist/commands/dispatch.js.map +1 -0
  152. package/dist/commands/model-picker.d.ts +16 -0
  153. package/dist/commands/model-picker.d.ts.map +1 -0
  154. package/dist/commands/model-picker.js +120 -0
  155. package/dist/commands/model-picker.js.map +1 -0
  156. package/dist/commands/parser.d.ts +32 -0
  157. package/dist/commands/parser.d.ts.map +1 -0
  158. package/dist/commands/parser.js +39 -0
  159. package/dist/commands/parser.js.map +1 -0
  160. package/dist/commands/registry.d.ts +76 -0
  161. package/dist/commands/registry.d.ts.map +1 -0
  162. package/dist/commands/registry.js +351 -0
  163. package/dist/commands/registry.js.map +1 -0
  164. package/dist/commands/skill-commands.d.ts +35 -0
  165. package/dist/commands/skill-commands.d.ts.map +1 -0
  166. package/dist/commands/skill-commands.js +61 -0
  167. package/dist/commands/skill-commands.js.map +1 -0
  168. package/dist/config/resolve.d.ts +25 -0
  169. package/dist/config/resolve.d.ts.map +1 -0
  170. package/dist/config/resolve.js +289 -0
  171. package/dist/config/resolve.js.map +1 -0
  172. package/dist/config/schema.d.ts +520 -0
  173. package/dist/config/schema.d.ts.map +1 -0
  174. package/dist/config/schema.js +123 -0
  175. package/dist/config/schema.js.map +1 -0
  176. package/dist/core/agent-loop.d.ts +137 -0
  177. package/dist/core/agent-loop.d.ts.map +1 -0
  178. package/dist/core/agent-loop.js +700 -0
  179. package/dist/core/agent-loop.js.map +1 -0
  180. package/dist/core/audit.d.ts +87 -0
  181. package/dist/core/audit.d.ts.map +1 -0
  182. package/dist/core/audit.js +224 -0
  183. package/dist/core/audit.js.map +1 -0
  184. package/dist/core/bootstrap.d.ts +23 -0
  185. package/dist/core/bootstrap.d.ts.map +1 -0
  186. package/dist/core/bootstrap.js +162 -0
  187. package/dist/core/bootstrap.js.map +1 -0
  188. package/dist/core/context.d.ts +44 -0
  189. package/dist/core/context.d.ts.map +1 -0
  190. package/dist/core/context.js +65 -0
  191. package/dist/core/context.js.map +1 -0
  192. package/dist/core/cron.d.ts +111 -0
  193. package/dist/core/cron.d.ts.map +1 -0
  194. package/dist/core/cron.js +284 -0
  195. package/dist/core/cron.js.map +1 -0
  196. package/dist/core/exec-approvals.d.ts +50 -0
  197. package/dist/core/exec-approvals.d.ts.map +1 -0
  198. package/dist/core/exec-approvals.js +187 -0
  199. package/dist/core/exec-approvals.js.map +1 -0
  200. package/dist/core/heartbeat.d.ts +71 -0
  201. package/dist/core/heartbeat.d.ts.map +1 -0
  202. package/dist/core/heartbeat.js +214 -0
  203. package/dist/core/heartbeat.js.map +1 -0
  204. package/dist/core/message-queue.d.ts +60 -0
  205. package/dist/core/message-queue.d.ts.map +1 -0
  206. package/dist/core/message-queue.js +182 -0
  207. package/dist/core/message-queue.js.map +1 -0
  208. package/dist/core/network-policy.d.ts +39 -0
  209. package/dist/core/network-policy.d.ts.map +1 -0
  210. package/dist/core/network-policy.js +121 -0
  211. package/dist/core/network-policy.js.map +1 -0
  212. package/dist/core/progress.d.ts +48 -0
  213. package/dist/core/progress.d.ts.map +1 -0
  214. package/dist/core/progress.js +81 -0
  215. package/dist/core/progress.js.map +1 -0
  216. package/dist/core/prompt.d.ts +105 -0
  217. package/dist/core/prompt.d.ts.map +1 -0
  218. package/dist/core/prompt.js +411 -0
  219. package/dist/core/prompt.js.map +1 -0
  220. package/dist/core/pruning.d.ts +40 -0
  221. package/dist/core/pruning.d.ts.map +1 -0
  222. package/dist/core/pruning.js +165 -0
  223. package/dist/core/pruning.js.map +1 -0
  224. package/dist/core/rate-limiter.d.ts +64 -0
  225. package/dist/core/rate-limiter.d.ts.map +1 -0
  226. package/dist/core/rate-limiter.js +142 -0
  227. package/dist/core/rate-limiter.js.map +1 -0
  228. package/dist/core/reactions.d.ts +31 -0
  229. package/dist/core/reactions.d.ts.map +1 -0
  230. package/dist/core/reactions.js +67 -0
  231. package/dist/core/reactions.js.map +1 -0
  232. package/dist/core/retry-queue.d.ts +56 -0
  233. package/dist/core/retry-queue.d.ts.map +1 -0
  234. package/dist/core/retry-queue.js +106 -0
  235. package/dist/core/retry-queue.js.map +1 -0
  236. package/dist/core/sanitizer.d.ts +38 -0
  237. package/dist/core/sanitizer.d.ts.map +1 -0
  238. package/dist/core/sanitizer.js +181 -0
  239. package/dist/core/sanitizer.js.map +1 -0
  240. package/dist/core/secret-scanner.d.ts +39 -0
  241. package/dist/core/secret-scanner.d.ts.map +1 -0
  242. package/dist/core/secret-scanner.js +96 -0
  243. package/dist/core/secret-scanner.js.map +1 -0
  244. package/dist/core/secrets.d.ts +38 -0
  245. package/dist/core/secrets.d.ts.map +1 -0
  246. package/dist/core/secrets.js +137 -0
  247. package/dist/core/secrets.js.map +1 -0
  248. package/dist/core/security.d.ts +58 -0
  249. package/dist/core/security.d.ts.map +1 -0
  250. package/dist/core/security.js +120 -0
  251. package/dist/core/security.js.map +1 -0
  252. package/dist/core/self-awareness.d.ts +19 -0
  253. package/dist/core/self-awareness.d.ts.map +1 -0
  254. package/dist/core/self-awareness.js +124 -0
  255. package/dist/core/self-awareness.js.map +1 -0
  256. package/dist/core/session-init.d.ts +34 -0
  257. package/dist/core/session-init.d.ts.map +1 -0
  258. package/dist/core/session-init.js +68 -0
  259. package/dist/core/session-init.js.map +1 -0
  260. package/dist/core/streaming.d.ts +82 -0
  261. package/dist/core/streaming.d.ts.map +1 -0
  262. package/dist/core/streaming.js +264 -0
  263. package/dist/core/streaming.js.map +1 -0
  264. package/dist/core/symphony/orchestrator.d.ts +61 -0
  265. package/dist/core/symphony/orchestrator.d.ts.map +1 -0
  266. package/dist/core/symphony/orchestrator.js +476 -0
  267. package/dist/core/symphony/orchestrator.js.map +1 -0
  268. package/dist/core/symphony/status.d.ts +11 -0
  269. package/dist/core/symphony/status.d.ts.map +1 -0
  270. package/dist/core/symphony/status.js +133 -0
  271. package/dist/core/symphony/status.js.map +1 -0
  272. package/dist/core/symphony/types.d.ts +84 -0
  273. package/dist/core/symphony/types.d.ts.map +1 -0
  274. package/dist/core/symphony/types.js +5 -0
  275. package/dist/core/symphony/types.js.map +1 -0
  276. package/dist/core/symphony/workflow.d.ts +18 -0
  277. package/dist/core/symphony/workflow.d.ts.map +1 -0
  278. package/dist/core/symphony/workflow.js +149 -0
  279. package/dist/core/symphony/workflow.js.map +1 -0
  280. package/dist/core/symphony/workspace.d.ts +24 -0
  281. package/dist/core/symphony/workspace.d.ts.map +1 -0
  282. package/dist/core/symphony/workspace.js +94 -0
  283. package/dist/core/symphony/workspace.js.map +1 -0
  284. package/dist/core/thinking.d.ts +27 -0
  285. package/dist/core/thinking.d.ts.map +1 -0
  286. package/dist/core/thinking.js +83 -0
  287. package/dist/core/thinking.js.map +1 -0
  288. package/dist/core/thread-bindings.d.ts +47 -0
  289. package/dist/core/thread-bindings.d.ts.map +1 -0
  290. package/dist/core/thread-bindings.js +94 -0
  291. package/dist/core/thread-bindings.js.map +1 -0
  292. package/dist/core/timezone.d.ts +28 -0
  293. package/dist/core/timezone.d.ts.map +1 -0
  294. package/dist/core/timezone.js +72 -0
  295. package/dist/core/timezone.js.map +1 -0
  296. package/dist/core/tool-loop-detector.d.ts +41 -0
  297. package/dist/core/tool-loop-detector.d.ts.map +1 -0
  298. package/dist/core/tool-loop-detector.js +83 -0
  299. package/dist/core/tool-loop-detector.js.map +1 -0
  300. package/dist/core/tool-validator.d.ts +44 -0
  301. package/dist/core/tool-validator.d.ts.map +1 -0
  302. package/dist/core/tool-validator.js +175 -0
  303. package/dist/core/tool-validator.js.map +1 -0
  304. package/dist/core/typing.d.ts +25 -0
  305. package/dist/core/typing.d.ts.map +1 -0
  306. package/dist/core/typing.js +48 -0
  307. package/dist/core/typing.js.map +1 -0
  308. package/dist/core/usage-tracker.d.ts +66 -0
  309. package/dist/core/usage-tracker.d.ts.map +1 -0
  310. package/dist/core/usage-tracker.js +163 -0
  311. package/dist/core/usage-tracker.js.map +1 -0
  312. package/dist/daemon/commands.d.ts +16 -0
  313. package/dist/daemon/commands.d.ts.map +1 -0
  314. package/dist/daemon/commands.js +445 -0
  315. package/dist/daemon/commands.js.map +1 -0
  316. package/dist/daemon/pid.d.ts +30 -0
  317. package/dist/daemon/pid.d.ts.map +1 -0
  318. package/dist/daemon/pid.js +62 -0
  319. package/dist/daemon/pid.js.map +1 -0
  320. package/dist/doctor/checks/browser.d.ts +9 -0
  321. package/dist/doctor/checks/browser.d.ts.map +1 -0
  322. package/dist/doctor/checks/browser.js +54 -0
  323. package/dist/doctor/checks/browser.js.map +1 -0
  324. package/dist/doctor/checks/channels.d.ts +9 -0
  325. package/dist/doctor/checks/channels.d.ts.map +1 -0
  326. package/dist/doctor/checks/channels.js +90 -0
  327. package/dist/doctor/checks/channels.js.map +1 -0
  328. package/dist/doctor/checks/config.d.ts +10 -0
  329. package/dist/doctor/checks/config.d.ts.map +1 -0
  330. package/dist/doctor/checks/config.js +89 -0
  331. package/dist/doctor/checks/config.js.map +1 -0
  332. package/dist/doctor/checks/memory.d.ts +10 -0
  333. package/dist/doctor/checks/memory.d.ts.map +1 -0
  334. package/dist/doctor/checks/memory.js +82 -0
  335. package/dist/doctor/checks/memory.js.map +1 -0
  336. package/dist/doctor/checks/permissions.d.ts +9 -0
  337. package/dist/doctor/checks/permissions.d.ts.map +1 -0
  338. package/dist/doctor/checks/permissions.js +53 -0
  339. package/dist/doctor/checks/permissions.js.map +1 -0
  340. package/dist/doctor/checks/providers.d.ts +10 -0
  341. package/dist/doctor/checks/providers.d.ts.map +1 -0
  342. package/dist/doctor/checks/providers.js +93 -0
  343. package/dist/doctor/checks/providers.js.map +1 -0
  344. package/dist/doctor/checks/sessions.d.ts +10 -0
  345. package/dist/doctor/checks/sessions.d.ts.map +1 -0
  346. package/dist/doctor/checks/sessions.js +86 -0
  347. package/dist/doctor/checks/sessions.js.map +1 -0
  348. package/dist/doctor/doctor.d.ts +35 -0
  349. package/dist/doctor/doctor.d.ts.map +1 -0
  350. package/dist/doctor/doctor.js +51 -0
  351. package/dist/doctor/doctor.js.map +1 -0
  352. package/dist/doctor/repairs.d.ts +14 -0
  353. package/dist/doctor/repairs.d.ts.map +1 -0
  354. package/dist/doctor/repairs.js +34 -0
  355. package/dist/doctor/repairs.js.map +1 -0
  356. package/dist/gateway/compaction.d.ts +63 -0
  357. package/dist/gateway/compaction.d.ts.map +1 -0
  358. package/dist/gateway/compaction.js +235 -0
  359. package/dist/gateway/compaction.js.map +1 -0
  360. package/dist/gateway/gateway.d.ts +94 -0
  361. package/dist/gateway/gateway.d.ts.map +1 -0
  362. package/dist/gateway/gateway.js +466 -0
  363. package/dist/gateway/gateway.js.map +1 -0
  364. package/dist/gateway/lock.d.ts +24 -0
  365. package/dist/gateway/lock.d.ts.map +1 -0
  366. package/dist/gateway/lock.js +88 -0
  367. package/dist/gateway/lock.js.map +1 -0
  368. package/dist/gateway/protocol.d.ts +117 -0
  369. package/dist/gateway/protocol.d.ts.map +1 -0
  370. package/dist/gateway/protocol.js +5 -0
  371. package/dist/gateway/protocol.js.map +1 -0
  372. package/dist/gateway/session.d.ts +123 -0
  373. package/dist/gateway/session.d.ts.map +1 -0
  374. package/dist/gateway/session.js +573 -0
  375. package/dist/gateway/session.js.map +1 -0
  376. package/dist/hooks/hooks.d.ts +18 -0
  377. package/dist/hooks/hooks.d.ts.map +1 -0
  378. package/dist/hooks/hooks.js +45 -0
  379. package/dist/hooks/hooks.js.map +1 -0
  380. package/dist/hooks/types.d.ts +112 -0
  381. package/dist/hooks/types.d.ts.map +1 -0
  382. package/dist/hooks/types.js +23 -0
  383. package/dist/hooks/types.js.map +1 -0
  384. package/dist/index.d.ts +27 -0
  385. package/dist/index.d.ts.map +1 -0
  386. package/dist/index.js +2900 -0
  387. package/dist/index.js.map +1 -0
  388. package/dist/media/storage.d.ts +25 -0
  389. package/dist/media/storage.d.ts.map +1 -0
  390. package/dist/media/storage.js +97 -0
  391. package/dist/media/storage.js.map +1 -0
  392. package/dist/memory/embeddings.d.ts +46 -0
  393. package/dist/memory/embeddings.d.ts.map +1 -0
  394. package/dist/memory/embeddings.js +118 -0
  395. package/dist/memory/embeddings.js.map +1 -0
  396. package/dist/memory/hybrid.d.ts +35 -0
  397. package/dist/memory/hybrid.d.ts.map +1 -0
  398. package/dist/memory/hybrid.js +156 -0
  399. package/dist/memory/hybrid.js.map +1 -0
  400. package/dist/memory/markdown.d.ts +48 -0
  401. package/dist/memory/markdown.d.ts.map +1 -0
  402. package/dist/memory/markdown.js +228 -0
  403. package/dist/memory/markdown.js.map +1 -0
  404. package/dist/memory/store.d.ts +88 -0
  405. package/dist/memory/store.d.ts.map +1 -0
  406. package/dist/memory/store.js +21 -0
  407. package/dist/memory/store.js.map +1 -0
  408. package/dist/memory/vector.d.ts +24 -0
  409. package/dist/memory/vector.d.ts.map +1 -0
  410. package/dist/memory/vector.js +63 -0
  411. package/dist/memory/vector.js.map +1 -0
  412. package/dist/mods/mod.d.ts +100 -0
  413. package/dist/mods/mod.d.ts.map +1 -0
  414. package/dist/mods/mod.js +242 -0
  415. package/dist/mods/mod.js.map +1 -0
  416. package/dist/onboard/channels.d.ts +12 -0
  417. package/dist/onboard/channels.d.ts.map +1 -0
  418. package/dist/onboard/channels.js +283 -0
  419. package/dist/onboard/channels.js.map +1 -0
  420. package/dist/onboard/models.d.ts +13 -0
  421. package/dist/onboard/models.d.ts.map +1 -0
  422. package/dist/onboard/models.js +491 -0
  423. package/dist/onboard/models.js.map +1 -0
  424. package/dist/onboard/onboard.d.ts +12 -0
  425. package/dist/onboard/onboard.d.ts.map +1 -0
  426. package/dist/onboard/onboard.js +1137 -0
  427. package/dist/onboard/onboard.js.map +1 -0
  428. package/dist/providers/anthropic.d.ts +83 -0
  429. package/dist/providers/anthropic.d.ts.map +1 -0
  430. package/dist/providers/anthropic.js +583 -0
  431. package/dist/providers/anthropic.js.map +1 -0
  432. package/dist/providers/failover.d.ts +46 -0
  433. package/dist/providers/failover.d.ts.map +1 -0
  434. package/dist/providers/failover.js +149 -0
  435. package/dist/providers/failover.js.map +1 -0
  436. package/dist/providers/litellm.d.ts +38 -0
  437. package/dist/providers/litellm.d.ts.map +1 -0
  438. package/dist/providers/litellm.js +349 -0
  439. package/dist/providers/litellm.js.map +1 -0
  440. package/dist/providers/openai.d.ts +28 -0
  441. package/dist/providers/openai.d.ts.map +1 -0
  442. package/dist/providers/openai.js +321 -0
  443. package/dist/providers/openai.js.map +1 -0
  444. package/dist/providers/prompt-cache.d.ts +50 -0
  445. package/dist/providers/prompt-cache.d.ts.map +1 -0
  446. package/dist/providers/prompt-cache.js +96 -0
  447. package/dist/providers/prompt-cache.js.map +1 -0
  448. package/dist/providers/provider.d.ts +173 -0
  449. package/dist/providers/provider.d.ts.map +1 -0
  450. package/dist/providers/provider.js +22 -0
  451. package/dist/providers/provider.js.map +1 -0
  452. package/dist/sandbox/config.d.ts +42 -0
  453. package/dist/sandbox/config.d.ts.map +1 -0
  454. package/dist/sandbox/config.js +20 -0
  455. package/dist/sandbox/config.js.map +1 -0
  456. package/dist/sandbox/container.d.ts +71 -0
  457. package/dist/sandbox/container.d.ts.map +1 -0
  458. package/dist/sandbox/container.js +193 -0
  459. package/dist/sandbox/container.js.map +1 -0
  460. package/dist/sandbox/sandbox.d.ts +82 -0
  461. package/dist/sandbox/sandbox.d.ts.map +1 -0
  462. package/dist/sandbox/sandbox.js +176 -0
  463. package/dist/sandbox/sandbox.js.map +1 -0
  464. package/dist/skills/channel-loader.d.ts +18 -0
  465. package/dist/skills/channel-loader.d.ts.map +1 -0
  466. package/dist/skills/channel-loader.js +35 -0
  467. package/dist/skills/channel-loader.js.map +1 -0
  468. package/dist/skills/extension-loader.d.ts +15 -0
  469. package/dist/skills/extension-loader.d.ts.map +1 -0
  470. package/dist/skills/extension-loader.js +63 -0
  471. package/dist/skills/extension-loader.js.map +1 -0
  472. package/dist/skills/extension-registry.d.ts +32 -0
  473. package/dist/skills/extension-registry.d.ts.map +1 -0
  474. package/dist/skills/extension-registry.js +57 -0
  475. package/dist/skills/extension-registry.js.map +1 -0
  476. package/dist/skills/extensions.d.ts +91 -0
  477. package/dist/skills/extensions.d.ts.map +1 -0
  478. package/dist/skills/extensions.js +14 -0
  479. package/dist/skills/extensions.js.map +1 -0
  480. package/dist/skills/loader.d.ts +64 -0
  481. package/dist/skills/loader.d.ts.map +1 -0
  482. package/dist/skills/loader.js +382 -0
  483. package/dist/skills/loader.js.map +1 -0
  484. package/dist/skills/marketplace.d.ts +56 -0
  485. package/dist/skills/marketplace.d.ts.map +1 -0
  486. package/dist/skills/marketplace.js +183 -0
  487. package/dist/skills/marketplace.js.map +1 -0
  488. package/dist/skills/types.d.ts +94 -0
  489. package/dist/skills/types.d.ts.map +1 -0
  490. package/dist/skills/types.js +9 -0
  491. package/dist/skills/types.js.map +1 -0
  492. package/dist/tools/acp-sessions.d.ts +89 -0
  493. package/dist/tools/acp-sessions.d.ts.map +1 -0
  494. package/dist/tools/acp-sessions.js +391 -0
  495. package/dist/tools/acp-sessions.js.map +1 -0
  496. package/dist/tools/acp.d.ts +18 -0
  497. package/dist/tools/acp.d.ts.map +1 -0
  498. package/dist/tools/acp.js +102 -0
  499. package/dist/tools/acp.js.map +1 -0
  500. package/dist/tools/agent-tools.d.ts +24 -0
  501. package/dist/tools/agent-tools.d.ts.map +1 -0
  502. package/dist/tools/agent-tools.js +611 -0
  503. package/dist/tools/agent-tools.js.map +1 -0
  504. package/dist/tools/browser.d.ts +26 -0
  505. package/dist/tools/browser.d.ts.map +1 -0
  506. package/dist/tools/browser.js +242 -0
  507. package/dist/tools/browser.js.map +1 -0
  508. package/dist/tools/comms.d.ts +8 -0
  509. package/dist/tools/comms.d.ts.map +1 -0
  510. package/dist/tools/comms.js +39 -0
  511. package/dist/tools/comms.js.map +1 -0
  512. package/dist/tools/cron-tools.d.ts +9 -0
  513. package/dist/tools/cron-tools.d.ts.map +1 -0
  514. package/dist/tools/cron-tools.js +117 -0
  515. package/dist/tools/cron-tools.js.map +1 -0
  516. package/dist/tools/exec-safety.d.ts +71 -0
  517. package/dist/tools/exec-safety.d.ts.map +1 -0
  518. package/dist/tools/exec-safety.js +141 -0
  519. package/dist/tools/exec-safety.js.map +1 -0
  520. package/dist/tools/exec.d.ts +24 -0
  521. package/dist/tools/exec.d.ts.map +1 -0
  522. package/dist/tools/exec.js +191 -0
  523. package/dist/tools/exec.js.map +1 -0
  524. package/dist/tools/fs.d.ts +15 -0
  525. package/dist/tools/fs.d.ts.map +1 -0
  526. package/dist/tools/fs.js +249 -0
  527. package/dist/tools/fs.js.map +1 -0
  528. package/dist/tools/git.d.ts +9 -0
  529. package/dist/tools/git.d.ts.map +1 -0
  530. package/dist/tools/git.js +56 -0
  531. package/dist/tools/git.js.map +1 -0
  532. package/dist/tools/image.d.ts +15 -0
  533. package/dist/tools/image.d.ts.map +1 -0
  534. package/dist/tools/image.js +106 -0
  535. package/dist/tools/image.js.map +1 -0
  536. package/dist/tools/introspect.d.ts +22 -0
  537. package/dist/tools/introspect.d.ts.map +1 -0
  538. package/dist/tools/introspect.js +223 -0
  539. package/dist/tools/introspect.js.map +1 -0
  540. package/dist/tools/memory.d.ts +11 -0
  541. package/dist/tools/memory.d.ts.map +1 -0
  542. package/dist/tools/memory.js +101 -0
  543. package/dist/tools/memory.js.map +1 -0
  544. package/dist/tools/message.d.ts +24 -0
  545. package/dist/tools/message.d.ts.map +1 -0
  546. package/dist/tools/message.js +205 -0
  547. package/dist/tools/message.js.map +1 -0
  548. package/dist/tools/model.d.ts +14 -0
  549. package/dist/tools/model.d.ts.map +1 -0
  550. package/dist/tools/model.js +62 -0
  551. package/dist/tools/model.js.map +1 -0
  552. package/dist/tools/policy.d.ts +101 -0
  553. package/dist/tools/policy.d.ts.map +1 -0
  554. package/dist/tools/policy.js +168 -0
  555. package/dist/tools/policy.js.map +1 -0
  556. package/dist/tools/registry.d.ts +52 -0
  557. package/dist/tools/registry.d.ts.map +1 -0
  558. package/dist/tools/registry.js +154 -0
  559. package/dist/tools/registry.js.map +1 -0
  560. package/dist/tools/search.d.ts +10 -0
  561. package/dist/tools/search.d.ts.map +1 -0
  562. package/dist/tools/search.js +78 -0
  563. package/dist/tools/search.js.map +1 -0
  564. package/dist/tools/session.d.ts +13 -0
  565. package/dist/tools/session.d.ts.map +1 -0
  566. package/dist/tools/session.js +142 -0
  567. package/dist/tools/session.js.map +1 -0
  568. package/dist/tools/spawn.d.ts +10 -0
  569. package/dist/tools/spawn.d.ts.map +1 -0
  570. package/dist/tools/spawn.js +72 -0
  571. package/dist/tools/spawn.js.map +1 -0
  572. package/dist/tools/symphony.d.ts +12 -0
  573. package/dist/tools/symphony.d.ts.map +1 -0
  574. package/dist/tools/symphony.js +142 -0
  575. package/dist/tools/symphony.js.map +1 -0
  576. package/dist/tools/system-tools.d.ts +11 -0
  577. package/dist/tools/system-tools.d.ts.map +1 -0
  578. package/dist/tools/system-tools.js +39 -0
  579. package/dist/tools/system-tools.js.map +1 -0
  580. package/dist/tools/tool.d.ts +119 -0
  581. package/dist/tools/tool.d.ts.map +1 -0
  582. package/dist/tools/tool.js +29 -0
  583. package/dist/tools/tool.js.map +1 -0
  584. package/dist/tools/web.d.ts +10 -0
  585. package/dist/tools/web.d.ts.map +1 -0
  586. package/dist/tools/web.js +105 -0
  587. package/dist/tools/web.js.map +1 -0
  588. package/dist/tui/App.d.ts +43 -0
  589. package/dist/tui/App.d.ts.map +1 -0
  590. package/dist/tui/App.js +265 -0
  591. package/dist/tui/App.js.map +1 -0
  592. package/dist/tui/bridge.d.ts +40 -0
  593. package/dist/tui/bridge.d.ts.map +1 -0
  594. package/dist/tui/bridge.js +29 -0
  595. package/dist/tui/bridge.js.map +1 -0
  596. package/dist/tui/components/Header.d.ts +14 -0
  597. package/dist/tui/components/Header.d.ts.map +1 -0
  598. package/dist/tui/components/Header.js +7 -0
  599. package/dist/tui/components/Header.js.map +1 -0
  600. package/dist/tui/components/InputBar.d.ts +10 -0
  601. package/dist/tui/components/InputBar.d.ts.map +1 -0
  602. package/dist/tui/components/InputBar.js +121 -0
  603. package/dist/tui/components/InputBar.js.map +1 -0
  604. package/dist/tui/components/MessageList.d.ts +18 -0
  605. package/dist/tui/components/MessageList.d.ts.map +1 -0
  606. package/dist/tui/components/MessageList.js +34 -0
  607. package/dist/tui/components/MessageList.js.map +1 -0
  608. package/dist/tui/components/Spinner.d.ts +9 -0
  609. package/dist/tui/components/Spinner.d.ts.map +1 -0
  610. package/dist/tui/components/Spinner.js +18 -0
  611. package/dist/tui/components/Spinner.js.map +1 -0
  612. package/dist/tui/components/StatusBar.d.ts +16 -0
  613. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  614. package/dist/tui/components/StatusBar.js +15 -0
  615. package/dist/tui/components/StatusBar.js.map +1 -0
  616. package/dist/tui/components/ToolCallBox.d.ts +12 -0
  617. package/dist/tui/components/ToolCallBox.d.ts.map +1 -0
  618. package/dist/tui/components/ToolCallBox.js +12 -0
  619. package/dist/tui/components/ToolCallBox.js.map +1 -0
  620. package/dist/tui/theme.d.ts +58 -0
  621. package/dist/tui/theme.d.ts.map +1 -0
  622. package/dist/tui/theme.js +80 -0
  623. package/dist/tui/theme.js.map +1 -0
  624. package/dist/utils/logger.d.ts +16 -0
  625. package/dist/utils/logger.d.ts.map +1 -0
  626. package/dist/utils/logger.js +70 -0
  627. package/dist/utils/logger.js.map +1 -0
  628. package/docs/DEVELOPMENT.md +74 -0
  629. package/docs/INSTALL.md +161 -0
  630. package/docs/USAGE.md +94 -0
  631. package/docs/architecture.md +128 -0
  632. package/docs/channels.md +140 -0
  633. package/docs/configuration.md +209 -0
  634. package/docs/io-system.md +430 -0
  635. package/docs/providers.md +99 -0
  636. package/docs/skill-channels.md +113 -0
  637. package/docs/skills.md +246 -0
  638. package/package.json +89 -0
  639. package/skills/acp-router/SKILL.md +41 -0
  640. package/skills/acp-router/tools/acp-router.mjs +239 -0
  641. package/skills/find-skills/SKILL.md +133 -0
  642. package/skills/security-audit/SKILL.md +181 -0
  643. package/skills/security-audit/audit.sh +67 -0
  644. package/skills/skill-creator/SKILL.md +479 -0
  645. package/skills/skill-security-audit/.clawhub/origin.json +7 -0
  646. package/skills/skill-security-audit/SKILL.md +196 -0
  647. package/skills/skill-security-audit/_meta.json +6 -0
  648. package/skills/skill-security-audit/references/prompt-injection-patterns.md +276 -0
  649. package/skills/skill-security-audit/references/vulnerability-patterns.md +348 -0
  650. package/skills/symphony/README.md +53 -0
  651. package/skills/symphony/SKILL.md +75 -0
  652. package/skills/symphony/tools/symphony-orchestrator.ts +8 -0
  653. package/tako.example.json +33 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Exec safety — command validation, dangerous command detection,
3
+ * working directory restrictions, timeout enforcement, and output limits.
4
+ *
5
+ * This module sits between the agent's exec tool call and actual shell
6
+ * execution. It validates commands against safety rules before they run.
7
+ */
8
+ import { resolve, relative } from 'node:path';
9
+ // ─── Dangerous command patterns ──────────────────────────────────────
10
+ /** Patterns that match commands known to be destructive or dangerous. */
11
+ const DANGEROUS_PATTERNS = [
12
+ // Filesystem destruction
13
+ { pattern: /\brm\s+(-[a-zA-Z]*f[a-zA-Z]*\s+)?(-[a-zA-Z]*r[a-zA-Z]*\s+)?\/\s*$/, description: 'rm on root filesystem', severity: 'block' },
14
+ { pattern: /\brm\s+.*-[a-zA-Z]*r[a-zA-Z]*f|rm\s+.*-[a-zA-Z]*f[a-zA-Z]*r/, description: 'Recursive force delete', severity: 'warn' },
15
+ { pattern: /\bmkfs\b/, description: 'Filesystem format command', severity: 'block' },
16
+ { pattern: /\bdd\s+.*of=\/dev\//, description: 'Direct disk write via dd', severity: 'block' },
17
+ { pattern: />\s*\/dev\/[sh]d[a-z]/, description: 'Direct write to disk device', severity: 'block' },
18
+ // System modification
19
+ { pattern: /\bchmod\s+.*-R\s+.*\//, description: 'Recursive permission change on root-level path', severity: 'warn' },
20
+ { pattern: /\bchown\s+.*-R\s+.*\//, description: 'Recursive ownership change on root-level path', severity: 'warn' },
21
+ // Docker destruction
22
+ { pattern: /\bdocker\s+rm\s+.*-f/, description: 'Force remove Docker container', severity: 'warn' },
23
+ { pattern: /\bdocker\s+system\s+prune/, description: 'Docker system prune', severity: 'warn' },
24
+ { pattern: /\bdocker\s+volume\s+rm/, description: 'Docker volume removal', severity: 'warn' },
25
+ // Git destruction
26
+ { pattern: /\bgit\s+push\s+.*--force\b/, description: 'Git force push', severity: 'warn' },
27
+ { pattern: /\bgit\s+reset\s+--hard\b/, description: 'Git hard reset', severity: 'warn' },
28
+ { pattern: /\bgit\s+clean\s+.*-f/, description: 'Git clean (force)', severity: 'warn' },
29
+ // Data exfiltration
30
+ { pattern: /\bcurl\s+.*-d\s+.*@/, description: 'curl posting file contents', severity: 'warn' },
31
+ { pattern: /\bwget\s+.*--post-file/, description: 'wget posting file contents', severity: 'warn' },
32
+ // Process/system
33
+ { pattern: /\bkill\s+-9\s+1\b/, description: 'Kill init process', severity: 'block' },
34
+ { pattern: /\bshutdown\b/, description: 'System shutdown command', severity: 'block' },
35
+ { pattern: /\breboot\b/, description: 'System reboot command', severity: 'block' },
36
+ { pattern: /:(){ :\|:& };:/, description: 'Fork bomb', severity: 'block' },
37
+ // Credential/secret access
38
+ { pattern: /\bcat\s+.*\.env\b/, description: 'Reading .env file (may contain secrets)', severity: 'warn' },
39
+ { pattern: /\bcat\s+.*credentials/, description: 'Reading credentials file', severity: 'warn' },
40
+ { pattern: /\bcat\s+.*\/etc\/shadow/, description: 'Reading shadow password file', severity: 'block' },
41
+ { pattern: /\bcat\s+.*id_rsa/, description: 'Reading SSH private key', severity: 'warn' },
42
+ ];
43
+ const DEFAULT_OPTIONS = {
44
+ workspaceRoot: process.cwd(),
45
+ workDir: process.cwd(),
46
+ maxTimeout: 120_000,
47
+ defaultTimeout: 30_000,
48
+ maxOutputSize: 1024 * 1024,
49
+ allowOutsideWorkspace: false,
50
+ };
51
+ // ─── ExecSafety class ────────────────────────────────────────────────
52
+ /**
53
+ * ExecSafety — validates and constrains shell command execution.
54
+ *
55
+ * Checks:
56
+ * 1. Dangerous command detection (block or warn)
57
+ * 2. Working directory restrictions
58
+ * 3. Timeout enforcement (clamped to max)
59
+ * 4. Output size limits
60
+ */
61
+ export class ExecSafety {
62
+ options;
63
+ constructor(options) {
64
+ this.options = { ...DEFAULT_OPTIONS, ...options };
65
+ }
66
+ /**
67
+ * Validate a command before execution.
68
+ *
69
+ * @param command - Shell command string
70
+ * @param requestedTimeout - Timeout requested by the caller
71
+ * @returns Validation result with allowed status, warnings, and effective params
72
+ */
73
+ validate(command, requestedTimeout) {
74
+ const warnings = [];
75
+ let blocked = false;
76
+ let blockReason;
77
+ // 1. Check against dangerous patterns
78
+ for (const { pattern, description, severity } of DANGEROUS_PATTERNS) {
79
+ if (pattern.test(command)) {
80
+ if (severity === 'block') {
81
+ blocked = true;
82
+ blockReason = `Blocked: ${description}`;
83
+ break;
84
+ }
85
+ else {
86
+ warnings.push(`Warning: ${description}`);
87
+ }
88
+ }
89
+ }
90
+ // 2. Check working directory constraints
91
+ if (!this.options.allowOutsideWorkspace && this.options.workDir) {
92
+ const cdMatch = command.match(/\bcd\s+([^\s;&|]+)/);
93
+ if (cdMatch) {
94
+ const targetDir = resolve(this.options.workDir, cdMatch[1]);
95
+ const rel = relative(this.options.workspaceRoot, targetDir);
96
+ if (rel.startsWith('..')) {
97
+ warnings.push(`Warning: "cd ${cdMatch[1]}" navigates outside workspace root`);
98
+ }
99
+ }
100
+ }
101
+ // 3. Enforce timeout ceiling
102
+ const effectiveTimeout = Math.min(requestedTimeout ?? this.options.defaultTimeout, this.options.maxTimeout);
103
+ // 4. Output size limit
104
+ const maxOutputSize = this.options.maxOutputSize;
105
+ return {
106
+ allowed: !blocked,
107
+ warnings,
108
+ blockReason,
109
+ command,
110
+ timeout: effectiveTimeout,
111
+ maxOutputSize,
112
+ };
113
+ }
114
+ /**
115
+ * Check if a specific command is dangerous (quick check, no full validation).
116
+ */
117
+ isDangerous(command) {
118
+ return DANGEROUS_PATTERNS.some(({ pattern, severity }) => severity === 'block' && pattern.test(command));
119
+ }
120
+ /**
121
+ * Get all warnings for a command without blocking.
122
+ */
123
+ getWarnings(command) {
124
+ const warnings = [];
125
+ for (const { pattern, description } of DANGEROUS_PATTERNS) {
126
+ if (pattern.test(command)) {
127
+ warnings.push(description);
128
+ }
129
+ }
130
+ return warnings;
131
+ }
132
+ /** Update the workspace root. */
133
+ setWorkspaceRoot(root) {
134
+ this.options.workspaceRoot = root;
135
+ }
136
+ /** Update the working directory. */
137
+ setWorkDir(dir) {
138
+ this.options.workDir = dir;
139
+ }
140
+ }
141
+ //# sourceMappingURL=exec-safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec-safety.js","sourceRoot":"","sources":["../../src/tools/exec-safety.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Execution tools — exec, process.
3
+ * Kernel tools (always available).
4
+ *
5
+ * Now integrates ExecSafety for command validation, dangerous command
6
+ * detection, timeout enforcement, and output size limits.
7
+ */
8
+ import type { Tool } from './tool.js';
9
+ import { type ExecSafetyOptions } from './exec-safety.js';
10
+ import { ExecApprovalManager, type ApprovalConfig } from '../core/exec-approvals.js';
11
+ import type { CacheManager } from '../cache/manager.js';
12
+ /** Wire the cache manager into exec tools. */
13
+ export declare function setExecCacheManager(manager: CacheManager): void;
14
+ /** Configure the shared ExecSafety instance. */
15
+ export declare function configureExecSafety(options: ExecSafetyOptions): void;
16
+ /** Configure the shared ExecApprovalManager instance. */
17
+ export declare function configureExecApprovals(config: Partial<ApprovalConfig>): void;
18
+ /** Get the shared approval manager (if configured). */
19
+ export declare function getApprovalManager(): ExecApprovalManager | null;
20
+ export declare const execTool: Tool;
21
+ export declare const processTool: Tool;
22
+ /** All execution tools. */
23
+ export declare const execTools: Tool[];
24
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAUxD,8CAA8C;AAC9C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAE/D;AAED,gDAAgD;AAChD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAEpE;AAED,yDAAyD;AACzD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAE5E;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,IAAI,mBAAmB,GAAG,IAAI,CAE/D;AAiBD,eAAO,MAAM,QAAQ,EAAE,IA0FtB,CAAC;AAaF,eAAO,MAAM,WAAW,EAAE,IAiEzB,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,SAAS,EAAE,IAAI,EAA4B,CAAC"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Execution tools — exec, process.
3
+ * Kernel tools (always available).
4
+ *
5
+ * Now integrates ExecSafety for command validation, dangerous command
6
+ * detection, timeout enforcement, and output size limits.
7
+ */
8
+ import { exec as execCb, spawn } from 'node:child_process';
9
+ import { promisify } from 'node:util';
10
+ import { ExecSafety } from './exec-safety.js';
11
+ import { ExecApprovalManager } from '../core/exec-approvals.js';
12
+ const execAsync = promisify(execCb);
13
+ // ─── Shared exec safety instance ─────────────────────────────────────
14
+ let execSafety = null;
15
+ let approvalManager = null;
16
+ let cacheManager = null;
17
+ /** Wire the cache manager into exec tools. */
18
+ export function setExecCacheManager(manager) {
19
+ cacheManager = manager;
20
+ }
21
+ /** Configure the shared ExecSafety instance. */
22
+ export function configureExecSafety(options) {
23
+ execSafety = new ExecSafety(options);
24
+ }
25
+ /** Configure the shared ExecApprovalManager instance. */
26
+ export function configureExecApprovals(config) {
27
+ approvalManager = new ExecApprovalManager(config);
28
+ }
29
+ /** Get the shared approval manager (if configured). */
30
+ export function getApprovalManager() {
31
+ return approvalManager;
32
+ }
33
+ /** Get or create the ExecSafety instance. */
34
+ function getExecSafety() {
35
+ if (!execSafety) {
36
+ execSafety = new ExecSafety();
37
+ }
38
+ return execSafety;
39
+ }
40
+ export const execTool = {
41
+ name: 'exec',
42
+ description: 'Execute a shell command and return its output. Commands are validated for safety before execution.',
43
+ group: 'runtime',
44
+ parameters: {
45
+ type: 'object',
46
+ properties: {
47
+ command: { type: 'string', description: 'Shell command to execute' },
48
+ timeout: { type: 'number', description: 'Timeout in milliseconds (default: 30000)' },
49
+ },
50
+ required: ['command'],
51
+ },
52
+ async execute(params, ctx) {
53
+ const { command, timeout } = params;
54
+ const safety = getExecSafety();
55
+ // Update safety with current context
56
+ if (ctx.workspaceRoot)
57
+ safety.setWorkspaceRoot(ctx.workspaceRoot);
58
+ if (ctx.workDir)
59
+ safety.setWorkDir(ctx.workDir);
60
+ // Check exec approvals before safety validation
61
+ if (approvalManager) {
62
+ const approvalReq = approvalManager.checkCommand(command, ctx.sessionId);
63
+ if (approvalReq) {
64
+ if (approvalReq.status === 'denied' || approvalReq.riskLevel === 'blocked') {
65
+ return {
66
+ output: `Command blocked: ${approvalReq.reason}`,
67
+ success: false,
68
+ error: approvalReq.reason,
69
+ };
70
+ }
71
+ if (approvalReq.status === 'pending') {
72
+ return {
73
+ output: approvalManager.formatRequest(approvalReq),
74
+ success: false,
75
+ error: 'Awaiting user approval',
76
+ data: { approvalRequest: approvalReq },
77
+ };
78
+ }
79
+ }
80
+ }
81
+ // Validate the command
82
+ const validation = safety.validate(command, timeout);
83
+ if (!validation.allowed) {
84
+ return {
85
+ output: `Command blocked: ${validation.blockReason}`,
86
+ success: false,
87
+ error: validation.blockReason,
88
+ };
89
+ }
90
+ // Include warnings in the output prefix
91
+ let warningPrefix = '';
92
+ if (validation.warnings.length > 0) {
93
+ warningPrefix = validation.warnings.join('\n') + '\n---\n';
94
+ }
95
+ // Check tool cache for deterministic commands
96
+ if (cacheManager) {
97
+ const cached = cacheManager.tool.get(command, ctx.workDir);
98
+ if (cached !== null) {
99
+ return { output: warningPrefix + cached.output, success: cached.success };
100
+ }
101
+ }
102
+ try {
103
+ const { stdout, stderr } = await execAsync(validation.command, {
104
+ cwd: ctx.workDir,
105
+ timeout: validation.timeout,
106
+ maxBuffer: validation.maxOutputSize,
107
+ });
108
+ const output = [stdout, stderr].filter(Boolean).join('\n');
109
+ // Truncate output if it exceeds max size
110
+ const truncated = output.length > validation.maxOutputSize
111
+ ? output.slice(0, validation.maxOutputSize) + '\n[... output truncated]'
112
+ : output;
113
+ // Cache the result for future calls
114
+ cacheManager?.tool.set(command, ctx.workDir, truncated, true);
115
+ return { output: warningPrefix + truncated, success: true };
116
+ }
117
+ catch (err) {
118
+ const e = err;
119
+ const output = [e.stdout, e.stderr].filter(Boolean).join('\n');
120
+ return { output: warningPrefix + output, success: false, error: e.message };
121
+ }
122
+ },
123
+ };
124
+ // ─── process ────────────────────────────────────────────────────────
125
+ /** Active background processes tracked by the process tool. */
126
+ const activeProcesses = new Map();
127
+ export const processTool = {
128
+ name: 'process',
129
+ description: 'Manage background processes (start, stop, list). Start commands are validated for safety.',
130
+ group: 'runtime',
131
+ parameters: {
132
+ type: 'object',
133
+ properties: {
134
+ action: { type: 'string', enum: ['start', 'stop', 'list'], description: 'Action to perform' },
135
+ command: { type: 'string', description: 'Command to start (for "start" action)' },
136
+ id: { type: 'string', description: 'Process ID (for "stop" action)' },
137
+ },
138
+ required: ['action'],
139
+ },
140
+ async execute(params, ctx) {
141
+ const { action, command, id } = params;
142
+ switch (action) {
143
+ case 'start': {
144
+ if (!command)
145
+ return { output: '', success: false, error: 'command required for start' };
146
+ // Validate the command before starting
147
+ const safety = getExecSafety();
148
+ const validation = safety.validate(command);
149
+ if (!validation.allowed) {
150
+ return {
151
+ output: `Command blocked: ${validation.blockReason}`,
152
+ success: false,
153
+ error: validation.blockReason,
154
+ };
155
+ }
156
+ const procId = crypto.randomUUID().slice(0, 8);
157
+ const child = spawn('sh', ['-c', command], {
158
+ cwd: ctx.workDir,
159
+ stdio: 'pipe',
160
+ detached: true,
161
+ });
162
+ activeProcesses.set(procId, child);
163
+ child.on('exit', () => activeProcesses.delete(procId));
164
+ let warningNote = '';
165
+ if (validation.warnings.length > 0) {
166
+ warningNote = ` (warnings: ${validation.warnings.join('; ')})`;
167
+ }
168
+ return { output: `Started process ${procId}: ${command}${warningNote}`, success: true };
169
+ }
170
+ case 'stop': {
171
+ if (!id)
172
+ return { output: '', success: false, error: 'id required for stop' };
173
+ const proc = activeProcesses.get(id);
174
+ if (!proc)
175
+ return { output: '', success: false, error: `Process ${id} not found` };
176
+ proc.kill();
177
+ activeProcesses.delete(id);
178
+ return { output: `Stopped process ${id}`, success: true };
179
+ }
180
+ case 'list': {
181
+ const list = Array.from(activeProcesses.entries()).map(([pid, child]) => `${pid}: pid=${child.pid}`);
182
+ return { output: list.join('\n') || '(no active processes)', success: true };
183
+ }
184
+ default:
185
+ return { output: '', success: false, error: `Unknown action: ${action}` };
186
+ }
187
+ },
188
+ };
189
+ /** All execution tools. */
190
+ export const execTools = [execTool, processTool];
191
+ //# 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,15 @@
1
+ /**
2
+ * Filesystem tools — read, write, edit, apply_patch.
3
+ * Kernel tools (always available).
4
+ */
5
+ import type { Tool } from './tool.js';
6
+ import type { CacheManager } from '../cache/manager.js';
7
+ /** Wire the cache manager into filesystem tools. */
8
+ export declare function setFsCacheManager(manager: CacheManager): void;
9
+ export declare const readTool: Tool;
10
+ export declare const writeTool: Tool;
11
+ export declare const editTool: Tool;
12
+ export declare const applyPatchTool: Tool;
13
+ /** All filesystem tools. */
14
+ export declare const fsTools: Tool[];
15
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/tools/fs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,WAAW,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,oDAAoD;AACpD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAE7D;AAUD,eAAO,MAAM,QAAQ,EAAE,IAwCtB,CAAC;AASF,eAAO,MAAM,SAAS,EAAE,IAyBvB,CAAC;AAUF,eAAO,MAAM,QAAQ,EAAE,IA+BtB,CAAC;AASF,eAAO,MAAM,cAAc,EAAE,IAsC5B,CAAC;AAwHF,4BAA4B;AAC5B,eAAO,MAAM,OAAO,EAAE,IAAI,EAAoD,CAAC"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Filesystem tools — read, write, edit, apply_patch.
3
+ * Kernel tools (always available).
4
+ */
5
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
6
+ import { resolve, dirname } from 'node:path';
7
+ // ─── Cache integration ──────────────────────────────────────────────
8
+ let cacheManager = null;
9
+ /** Wire the cache manager into filesystem tools. */
10
+ export function setFsCacheManager(manager) {
11
+ cacheManager = manager;
12
+ }
13
+ export const readTool = {
14
+ name: 'read',
15
+ description: 'Read a file from disk. Optionally specify start/end line numbers.',
16
+ group: 'fs',
17
+ parameters: {
18
+ type: 'object',
19
+ properties: {
20
+ path: { type: 'string', description: 'File path (absolute or relative to workDir)' },
21
+ start: { type: 'number', description: 'Start line (1-based, optional)' },
22
+ end: { type: 'number', description: 'End line (1-based, inclusive, optional)' },
23
+ },
24
+ required: ['path'],
25
+ },
26
+ async execute(params, ctx) {
27
+ const { path, start, end } = params;
28
+ const fullPath = resolve(ctx.workDir, path);
29
+ try {
30
+ // Check file cache first
31
+ let content;
32
+ const cached = cacheManager ? await cacheManager.file.get(fullPath) : null;
33
+ if (cached !== null) {
34
+ content = cached;
35
+ }
36
+ else {
37
+ content = await readFile(fullPath, 'utf-8');
38
+ // Store in cache for future reads
39
+ if (cacheManager)
40
+ await cacheManager.file.set(fullPath, content);
41
+ }
42
+ if (start !== undefined || end !== undefined) {
43
+ const lines = content.split('\n');
44
+ const s = (start ?? 1) - 1;
45
+ const e = end ?? lines.length;
46
+ const slice = lines.slice(s, e);
47
+ return { output: slice.map((l, i) => `${s + i + 1}\t${l}`).join('\n'), success: true };
48
+ }
49
+ return { output: content, success: true };
50
+ }
51
+ catch (err) {
52
+ return { output: '', success: false, error: `Failed to read ${path}: ${err}` };
53
+ }
54
+ },
55
+ };
56
+ export const writeTool = {
57
+ name: 'write',
58
+ description: 'Write content to a file, creating it if necessary.',
59
+ group: 'fs',
60
+ parameters: {
61
+ type: 'object',
62
+ properties: {
63
+ path: { type: 'string', description: 'File path' },
64
+ content: { type: 'string', description: 'File content to write' },
65
+ },
66
+ required: ['path', 'content'],
67
+ },
68
+ async execute(params, ctx) {
69
+ const { path, content } = params;
70
+ const fullPath = resolve(ctx.workDir, path);
71
+ try {
72
+ await writeFile(fullPath, content, 'utf-8');
73
+ // Invalidate cache on write
74
+ cacheManager?.onFileWrite(fullPath);
75
+ return { output: `Wrote ${content.length} bytes to ${path}`, success: true };
76
+ }
77
+ catch (err) {
78
+ return { output: '', success: false, error: `Failed to write ${path}: ${err}` };
79
+ }
80
+ },
81
+ };
82
+ export const editTool = {
83
+ name: 'edit',
84
+ description: 'Replace an exact string in a file with a new string.',
85
+ group: 'fs',
86
+ parameters: {
87
+ type: 'object',
88
+ properties: {
89
+ path: { type: 'string', description: 'File path' },
90
+ old_string: { type: 'string', description: 'Exact text to find and replace' },
91
+ new_string: { type: 'string', description: 'Replacement text' },
92
+ },
93
+ required: ['path', 'old_string', 'new_string'],
94
+ },
95
+ async execute(params, ctx) {
96
+ const { path, old_string, new_string } = params;
97
+ const fullPath = resolve(ctx.workDir, path);
98
+ try {
99
+ const content = await readFile(fullPath, 'utf-8');
100
+ if (!content.includes(old_string)) {
101
+ return { output: '', success: false, error: 'old_string not found in file' };
102
+ }
103
+ const updated = content.replace(old_string, new_string);
104
+ await writeFile(fullPath, updated, 'utf-8');
105
+ // Invalidate cache on edit
106
+ cacheManager?.onFileWrite(fullPath);
107
+ return { output: `Edited ${path}`, success: true };
108
+ }
109
+ catch (err) {
110
+ return { output: '', success: false, error: `Failed to edit ${path}: ${err}` };
111
+ }
112
+ },
113
+ };
114
+ export const applyPatchTool = {
115
+ name: 'apply_patch',
116
+ description: 'Apply a unified diff patch to a file.',
117
+ group: 'fs',
118
+ parameters: {
119
+ type: 'object',
120
+ properties: {
121
+ path: { type: 'string', description: 'File path' },
122
+ patch: { type: 'string', description: 'Unified diff patch content' },
123
+ },
124
+ required: ['path', 'patch'],
125
+ },
126
+ async execute(params, ctx) {
127
+ const { path, patch } = params;
128
+ const fullPath = resolve(ctx.workDir, path);
129
+ try {
130
+ // Read existing file (may not exist for new files)
131
+ let content;
132
+ try {
133
+ content = await readFile(fullPath, 'utf-8');
134
+ }
135
+ catch {
136
+ content = '';
137
+ }
138
+ const lines = content.split('\n');
139
+ const result = applyUnifiedDiff(lines, patch);
140
+ if (!result.success) {
141
+ return { output: '', success: false, error: result.error };
142
+ }
143
+ await mkdir(dirname(fullPath), { recursive: true });
144
+ await writeFile(fullPath, result.lines.join('\n'), 'utf-8');
145
+ return { output: `Patched ${path} (${result.hunksApplied} hunks applied)`, success: true };
146
+ }
147
+ catch (err) {
148
+ return { output: '', success: false, error: `Failed to apply patch to ${path}: ${err}` };
149
+ }
150
+ },
151
+ };
152
+ function parseHunkHeader(line) {
153
+ const match = line.match(/^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/);
154
+ if (!match)
155
+ return null;
156
+ return {
157
+ oldStart: parseInt(match[1], 10),
158
+ oldCount: match[2] !== undefined ? parseInt(match[2], 10) : 1,
159
+ newStart: parseInt(match[3], 10),
160
+ newCount: match[4] !== undefined ? parseInt(match[4], 10) : 1,
161
+ };
162
+ }
163
+ function applyUnifiedDiff(originalLines, patch) {
164
+ const patchLines = patch.split('\n');
165
+ const result = [...originalLines];
166
+ let hunksApplied = 0;
167
+ let offset = 0; // Track line number shifts from previous hunks
168
+ let i = 0;
169
+ while (i < patchLines.length) {
170
+ // Skip file headers (--- and +++)
171
+ if (patchLines[i].startsWith('---') || patchLines[i].startsWith('+++')) {
172
+ i++;
173
+ continue;
174
+ }
175
+ // Find hunk header
176
+ const header = parseHunkHeader(patchLines[i]);
177
+ if (!header) {
178
+ i++;
179
+ continue;
180
+ }
181
+ i++;
182
+ // Collect hunk lines
183
+ const removals = [];
184
+ const additions = [];
185
+ let contextCount = 0;
186
+ let linePos = header.oldStart - 1 + offset;
187
+ const hunkLines = [];
188
+ while (i < patchLines.length && !patchLines[i].startsWith('@@')) {
189
+ const line = patchLines[i];
190
+ if (line.startsWith('+')) {
191
+ hunkLines.push({ type: '+', text: line.slice(1) });
192
+ }
193
+ else if (line.startsWith('-')) {
194
+ hunkLines.push({ type: '-', text: line.slice(1) });
195
+ }
196
+ else if (line.startsWith(' ') || line === '') {
197
+ hunkLines.push({ type: ' ', text: line.slice(1) });
198
+ }
199
+ else {
200
+ // Not a diff line — stop this hunk
201
+ break;
202
+ }
203
+ i++;
204
+ }
205
+ // Apply hunk: walk through and do removals/additions
206
+ let pos = header.oldStart - 1 + offset;
207
+ const newLines = [];
208
+ let oldIdx = 0;
209
+ // Copy lines before this hunk
210
+ for (let j = 0; j < pos && j < result.length; j++) {
211
+ newLines.push(result[j]);
212
+ }
213
+ // Apply hunk changes
214
+ let srcPos = pos;
215
+ for (const hl of hunkLines) {
216
+ if (hl.type === ' ') {
217
+ // Context line — copy from source
218
+ if (srcPos < result.length) {
219
+ newLines.push(result[srcPos]);
220
+ }
221
+ srcPos++;
222
+ }
223
+ else if (hl.type === '-') {
224
+ // Remove line — skip in source
225
+ srcPos++;
226
+ }
227
+ else if (hl.type === '+') {
228
+ // Add line
229
+ newLines.push(hl.text);
230
+ }
231
+ }
232
+ // Copy remaining lines after hunk
233
+ for (let j = srcPos; j < result.length; j++) {
234
+ newLines.push(result[j]);
235
+ }
236
+ // Replace result
237
+ result.length = 0;
238
+ result.push(...newLines);
239
+ offset += (header.newCount - header.oldCount);
240
+ hunksApplied++;
241
+ }
242
+ if (hunksApplied === 0) {
243
+ return { success: false, lines: originalLines, hunksApplied: 0, error: 'No hunks found in patch' };
244
+ }
245
+ return { success: true, lines: result, hunksApplied };
246
+ }
247
+ /** All filesystem tools. */
248
+ export const fsTools = [readTool, writeTool, editTool, applyPatchTool];
249
+ //# sourceMappingURL=fs.js.map