@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
package/docs/skills.md ADDED
@@ -0,0 +1,246 @@
1
+ # Skill Arms
2
+
3
+ Skills are Tako's extensibility mechanism — pluggable capabilities loaded from the filesystem at runtime.
4
+
5
+ ## What is a Skill?
6
+
7
+ A skill is a directory containing a `SKILL.md` file. The file has YAML frontmatter for metadata and a Markdown body with instructions that get injected into the agent's system prompt.
8
+
9
+ ```
10
+ my-skill/
11
+ ├── SKILL.md # Required: metadata + instructions
12
+ ├── tools/ # Optional: tool implementations (.js/.mjs)
13
+ ├── scripts/ # Optional: helper scripts
14
+ ├── references/ # Optional: reference docs loaded on-demand
15
+ └── assets/ # Optional: templates, icons, etc.
16
+ ```
17
+
18
+ ## SKILL.md Format
19
+
20
+ ```markdown
21
+ ---
22
+ name: my-skill
23
+ description: What the skill does and when to use it
24
+ version: 1.0.0
25
+ author: Your Name
26
+ triggers: keyword1, keyword2
27
+ user-invocable: true
28
+ disable-model-invocation: false
29
+ requires: {"bins": ["node"], "env": ["API_KEY"], "os": ["linux", "darwin"]}
30
+ ---
31
+
32
+ # My Skill
33
+
34
+ Instructions for the agent on when and how to use this skill.
35
+ ```
36
+
37
+ ### Frontmatter Fields
38
+
39
+ | Field | Required | Description |
40
+ |-------|----------|-------------|
41
+ | `name` | Yes | Unique skill identifier |
42
+ | `description` | Yes | What the skill does — also used for trigger matching |
43
+ | `version` | No | Semantic version (default: `0.1.0`) |
44
+ | `author` | No | Author name |
45
+ | `triggers` | No | When to activate (see below) |
46
+ | `tools` | No | Tool names this skill provides |
47
+ | `hooks` | No | Hook events this skill listens to |
48
+ | `user-invocable` | No | Whether exposed as slash command (default: `true`) |
49
+ | `disable-model-invocation` | No | Exclude from automatic prompt injection (default: `false`) |
50
+ | `requires` | No | JSON object with platform requirements |
51
+
52
+ ### Trigger Types
53
+
54
+ Triggers determine when a skill's instructions are injected into the system prompt.
55
+
56
+ **Keyword triggers** (comma-separated):
57
+ ```yaml
58
+ triggers: deploy, ship it, release
59
+ ```
60
+ Matches if any keyword appears in the user's message (case-insensitive).
61
+
62
+ **Pattern trigger** (regex):
63
+ ```yaml
64
+ triggers: [{"type":"pattern","value":"\\b(deploy|ship)\\b"}]
65
+ ```
66
+
67
+ **Always active:**
68
+ ```yaml
69
+ triggers: always
70
+ ```
71
+
72
+ **Manual only** (slash command only, never auto-injected):
73
+ ```yaml
74
+ triggers: manual
75
+ ```
76
+
77
+ **No triggers defined**: skill is always active (same as `always`).
78
+
79
+ ### Requirements
80
+
81
+ Skills can declare platform requirements that are checked at load time:
82
+
83
+ ```yaml
84
+ requires: {"bins": ["docker"], "env": ["DOCKER_HOST"], "os": ["linux"]}
85
+ ```
86
+
87
+ - `bins`: Required binaries on PATH
88
+ - `anyBins`: At least one must exist
89
+ - `env`: Required environment variables
90
+ - `os`: Required OS platforms (`linux`, `darwin`, `win32`)
91
+
92
+ Skills that don't meet requirements are silently skipped.
93
+
94
+ ## Providing Tools
95
+
96
+ Skills can provide additional tools by placing JavaScript modules in a `tools/` directory:
97
+
98
+ ```javascript
99
+ // my-skill/tools/my-tool.js
100
+ export default {
101
+ name: 'my_tool',
102
+ description: 'Does something useful',
103
+ parameters: {
104
+ type: 'object',
105
+ properties: {
106
+ input: { type: 'string', description: 'The input' }
107
+ },
108
+ required: ['input']
109
+ },
110
+ async execute(params, ctx) {
111
+ return { output: `Result: ${params.input}`, success: true };
112
+ }
113
+ };
114
+ ```
115
+
116
+ Tool modules can export:
117
+ - A single tool as `default`
118
+ - An array of tools as `default`
119
+ - A named `tools` array
120
+
121
+ Skill tools are registered with the tool registry when the skill loads. They are ungrouped, meaning they're always active regardless of the tool profile.
122
+
123
+ ## CLI Commands
124
+
125
+ ```bash
126
+ # List all discovered skills
127
+ tako skills list
128
+
129
+ # Show details about a specific skill
130
+ tako skills info find-skills
131
+
132
+ # Install a skill from the ecosystem
133
+ tako skills install vercel-labs/agent-skills@find-skills
134
+ ```
135
+
136
+ ## Hot Reload
137
+
138
+ Tako watches skill directories for changes. When a `SKILL.md` or tool file is modified:
139
+
140
+ 1. All skills are re-discovered and re-loaded
141
+ 2. Tool registrations are updated
142
+ 3. Hook bindings are refreshed
143
+ 4. No restart required
144
+
145
+ The reload is debounced (250ms) to handle rapid file changes.
146
+
147
+ ## Built-in Skills
148
+
149
+ Tako ships with four built-in skills:
150
+
151
+ ### find-skills
152
+ Discovers and installs skills from the ecosystem. Triggers when users ask about finding capabilities or extending the agent.
153
+
154
+ ### skill-creator
155
+ Creates new skills from scratch with an iterative draft → test → review → improve workflow. Includes evaluation tooling for measuring skill performance.
156
+
157
+ ### security-audit
158
+ Security scanning and analysis capabilities.
159
+
160
+ ### skill-security-audit
161
+ Security audit for skill arms (from ClawHub). Validates skill safety before installation.
162
+
163
+ ## Creating a Skill
164
+
165
+ 1. Create a directory in `./skills/`:
166
+ ```bash
167
+ mkdir -p skills/my-skill
168
+ ```
169
+
170
+ 2. Write a `SKILL.md` with frontmatter and instructions:
171
+ ```markdown
172
+ ---
173
+ name: my-skill
174
+ description: Helps with X when the user asks about Y
175
+ version: 0.1.0
176
+ triggers: x, y, z
177
+ ---
178
+
179
+ # My Skill
180
+
181
+ When the user asks about X, follow these steps...
182
+ ```
183
+
184
+ 3. The skill loads automatically (hot reload) or on next `tako start`.
185
+
186
+ 4. Verify: `tako skills list`
187
+
188
+ ## Providing Extensions
189
+
190
+ Skills can provide entire subsystem implementations by including extension subdirectories. The loader auto-detects these during skill loading.
191
+
192
+ ### Supported Extension Types
193
+
194
+ - **channel/** — Messaging adapter (implements `Channel`)
195
+ - **provider/** — LLM inference backend (implements `Provider`)
196
+ - **memory/** — Persistence + recall backend (implements `MemoryStore`)
197
+ - **network/** — Tunnel/exposure adapter (implements `NetworkAdapter`)
198
+ - **sandbox/** — Code execution sandbox (implements `SandboxProvider`)
199
+ - **auth/** — Authentication provider (implements `AuthProvider`)
200
+
201
+ ### Extension Module Convention
202
+
203
+ Each extension subdirectory must contain an entry point (`index.ts`, `index.js`, `<type>.ts`, or `<type>.js`) that exports a factory function:
204
+
205
+ ```typescript
206
+ // skills/my-provider/provider/index.ts
207
+ import type { Provider } from 'tako/providers/provider.js';
208
+
209
+ export function createProvider(config: Record<string, unknown>): Provider {
210
+ return {
211
+ id: 'my-provider',
212
+ async *chat(req) { /* ... */ yield { done: true }; },
213
+ models() { return []; },
214
+ supports(cap) { return false; },
215
+ };
216
+ }
217
+ ```
218
+
219
+ The loader tries these patterns in order:
220
+ 1. Named factory: `createChannel`, `createProvider`, `createMemory`, etc.
221
+ 2. Generic factory: `create(config)`
222
+ 3. Default export as constructor: `new mod.default(config)`
223
+
224
+ ### Extension Configuration
225
+
226
+ Configure extensions in `tako.json` under `skillExtensions`:
227
+
228
+ ```json
229
+ {
230
+ "skillExtensions": {
231
+ "ollama": {
232
+ "provider": { "baseUrl": "http://localhost:11434" }
233
+ },
234
+ "qdrant-memory": {
235
+ "memory": { "url": "http://localhost:6333", "collection": "tako" }
236
+ }
237
+ }
238
+ }
239
+ ```
240
+
241
+ ### CLI
242
+
243
+ ```bash
244
+ tako extensions list # List all detected skill extensions
245
+ tako extensions status # Show runtime status (when running)
246
+ ```
package/package.json ADDED
@@ -0,0 +1,89 @@
1
+ {
2
+ "name": "@shuyhere/takotako",
3
+ "version": "0.0.1",
4
+ "description": "Agent-as-CPU OS: minimal core + pluggable skill arms",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "tako": "./dist/index.js"
10
+ },
11
+ "scripts": {
12
+ "build": "bun run tsc",
13
+ "dev": "bun run tsc --watch",
14
+ "start": "bun run src/index.ts",
15
+ "start:node": "node dist/index.js",
16
+ "doctor": "bun run src/index.ts doctor",
17
+ "typecheck": "tsc --noEmit",
18
+ "test": "bun test",
19
+ "test:node": "node --test --import tsx tests/*.test.ts",
20
+ "lint": "tsc --noEmit",
21
+ "check": "bun run build && bun run typecheck && bun test",
22
+ "prepack": "npm run build"
23
+ },
24
+ "keywords": [
25
+ "agent",
26
+ "llm",
27
+ "ai",
28
+ "os",
29
+ "pluggable",
30
+ "skills",
31
+ "anthropic",
32
+ "discord",
33
+ "telegram",
34
+ "cli",
35
+ "tools",
36
+ "memory",
37
+ "streaming",
38
+ "websocket"
39
+ ],
40
+ "author": "shuyhere",
41
+ "license": "MIT",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://github.com/shuyhere/tako"
45
+ },
46
+ "homepage": "https://github.com/shuyhere/tako#readme",
47
+ "bugs": {
48
+ "url": "https://github.com/shuyhere/tako/issues"
49
+ },
50
+ "files": [
51
+ "dist",
52
+ "skills",
53
+ "docs",
54
+ "tako.example.json",
55
+ "README.md",
56
+ "CONTRIBUTING.md",
57
+ "LICENSE"
58
+ ],
59
+ "engines": {
60
+ "node": ">=20.0.0",
61
+ "bun": ">=1.0.0"
62
+ },
63
+ "dependencies": {
64
+ "@anthropic-ai/sdk": "^0.30.0",
65
+ "@clack/prompts": "^1.1.0",
66
+ "@mariozechner/pi-coding-agent": "^0.56.1",
67
+ "discord.js": "^14.25.1",
68
+ "grammy": "^1.41.1",
69
+ "ink": "^6.8.0",
70
+ "ink-big-text": "^2.0.0",
71
+ "ink-gradient": "^4.0.0",
72
+ "ink-spinner": "^5.0.0",
73
+ "ink-text-input": "^6.0.0",
74
+ "open": "^11.0.0",
75
+ "openai": "^4.70.0",
76
+ "react": "^19.2.4",
77
+ "ws": "^8.18.0"
78
+ },
79
+ "optionalDependencies": {
80
+ "playwright-core": "^1.58.2"
81
+ },
82
+ "devDependencies": {
83
+ "@types/node": "^22.0.0",
84
+ "@types/react": "^19.2.14",
85
+ "@types/ws": "^8.5.0",
86
+ "tsx": "^4.21.0",
87
+ "typescript": "^5.6.0"
88
+ }
89
+ }
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: acp
3
+ description: ACP harness router (acpx-backed) for Codex/Claude/Pi/OpenCode/Gemini/Kimi sessions
4
+ version: 0.1.0
5
+ author: Tako
6
+ user-invocable: true
7
+ command-dispatch: tool
8
+ command-tool: acp_router
9
+ command-arg-mode: raw
10
+ triggers:
11
+ - type: keyword
12
+ value: acp
13
+ - type: keyword
14
+ value: codex
15
+ - type: keyword
16
+ value: claude code
17
+ - type: keyword
18
+ value: gemini cli
19
+ ---
20
+
21
+ # ACP Router (acpx)
22
+
23
+ Use `/acp` to route work into ACP harness agents.
24
+
25
+ ## Usage
26
+
27
+ - `/acp <agent> <prompt>` — send prompt to a persistent ACP session (auto-created)
28
+ - `/acp exec <agent> <prompt>` — one-shot (no persistent session)
29
+ - `/acp list` — list known ACP session bindings in Tako
30
+ - `/acp reset <agent>` — close and forget the bound session for this chat session
31
+ - `/acp help` — show help
32
+
33
+ ## Agents
34
+
35
+ Supported aliases: `pi`, `claude`, `codex`, `opencode`, `gemini`, `kimi`.
36
+
37
+ ## Notes
38
+
39
+ - Prefers plugin-local `extensions/acpx/node_modules/.bin/acpx` when available.
40
+ - Falls back to `acpx` from PATH.
41
+ - Persistent session names are deterministic per Tako chat session + agent.
@@ -0,0 +1,239 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
4
+ import { homedir } from 'node:os';
5
+ import { join } from 'node:path';
6
+
7
+ const STORE_DIR = join(homedir(), '.tako', 'acp');
8
+ const STORE_FILE = join(STORE_DIR, 'router-sessions.json');
9
+
10
+ const AGENT_ALIASES = new Set(['pi', 'claude', 'codex', 'opencode', 'gemini', 'kimi']);
11
+
12
+ function detectAcpx() {
13
+ const envCmd = process.env.ACPX_CMD;
14
+ if (envCmd) return envCmd;
15
+
16
+ const local = join(process.cwd(), 'extensions', 'acpx', 'node_modules', '.bin', 'acpx');
17
+ if (existsSync(local)) return local;
18
+
19
+ return 'acpx';
20
+ }
21
+
22
+ async function loadStore() {
23
+ try {
24
+ const raw = await readFile(STORE_FILE, 'utf-8');
25
+ const parsed = JSON.parse(raw);
26
+ return parsed && typeof parsed === 'object' ? parsed : {};
27
+ } catch {
28
+ return {};
29
+ }
30
+ }
31
+
32
+ async function saveStore(store) {
33
+ await mkdir(STORE_DIR, { recursive: true });
34
+ await writeFile(STORE_FILE, JSON.stringify(store, null, 2), 'utf-8');
35
+ }
36
+
37
+ function shlex(input) {
38
+ const tokens = [];
39
+ let current = '';
40
+ let quote = null;
41
+ let esc = false;
42
+
43
+ for (const ch of input) {
44
+ if (esc) {
45
+ current += ch;
46
+ esc = false;
47
+ continue;
48
+ }
49
+ if (ch === '\\') {
50
+ esc = true;
51
+ continue;
52
+ }
53
+ if (quote) {
54
+ if (ch === quote) quote = null;
55
+ else current += ch;
56
+ continue;
57
+ }
58
+ if (ch === '"' || ch === "'") {
59
+ quote = ch;
60
+ continue;
61
+ }
62
+ if (/\s/.test(ch)) {
63
+ if (current) {
64
+ tokens.push(current);
65
+ current = '';
66
+ }
67
+ continue;
68
+ }
69
+ current += ch;
70
+ }
71
+ if (current) tokens.push(current);
72
+ return tokens;
73
+ }
74
+
75
+ function run(cmd, args, cwd, timeoutMs = 20 * 60 * 1000) {
76
+ return new Promise((resolve) => {
77
+ const child = spawn(cmd, args, {
78
+ cwd,
79
+ env: process.env,
80
+ stdio: ['ignore', 'pipe', 'pipe'],
81
+ });
82
+
83
+ let out = '';
84
+ let err = '';
85
+
86
+ child.stdout?.on('data', (d) => { out += String(d); });
87
+ child.stderr?.on('data', (d) => { err += String(d); });
88
+
89
+ const timer = setTimeout(() => {
90
+ child.kill('SIGKILL');
91
+ resolve({ ok: false, code: -1, stdout: out, stderr: `${err}\nTimed out after ${timeoutMs}ms` });
92
+ }, timeoutMs);
93
+
94
+ child.on('error', (e) => {
95
+ clearTimeout(timer);
96
+ resolve({ ok: false, code: -1, stdout: out, stderr: `${err}\n${e.message}` });
97
+ });
98
+
99
+ child.on('close', (code) => {
100
+ clearTimeout(timer);
101
+ resolve({ ok: code === 0, code: code ?? -1, stdout: out, stderr: err });
102
+ });
103
+ });
104
+ }
105
+
106
+ function sessionKey(ctx, agent) {
107
+ return `${ctx.sessionId}:${agent}`;
108
+ }
109
+
110
+ function defaultSessionName(ctx, agent) {
111
+ const sid = String(ctx.sessionId || 'session').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 24);
112
+ return `tako-${agent}-${sid}`;
113
+ }
114
+
115
+ function helpText() {
116
+ return [
117
+ 'ACP Router',
118
+ '',
119
+ 'Usage:',
120
+ ' /acp <agent> <prompt> Send prompt to persistent ACP session',
121
+ ' /acp exec <agent> <prompt> One-shot ACP execution',
122
+ ' /acp list List ACP bindings for this Tako instance',
123
+ ' /acp reset <agent> Close + forget bound ACP session',
124
+ ' /acp help Show this help',
125
+ '',
126
+ 'Agents: pi, claude, codex, opencode, gemini, kimi',
127
+ ].join('\n');
128
+ }
129
+
130
+ const acpRouterTool = {
131
+ name: 'acp_router',
132
+ description: 'Route ACP harness commands to acpx (persistent or one-shot).',
133
+ parameters: {
134
+ type: 'object',
135
+ properties: {
136
+ input: { type: 'string', description: 'Raw /acp command args' },
137
+ },
138
+ required: ['input'],
139
+ },
140
+ async execute(params, ctx) {
141
+ const input = String(params?.input || '').trim();
142
+ if (!input || input === 'help') {
143
+ return { success: true, output: helpText() };
144
+ }
145
+
146
+ const acpx = detectAcpx();
147
+ const cwd = ctx.workDir || process.cwd();
148
+ const store = await loadStore();
149
+ const tokens = shlex(input);
150
+
151
+ const versionCheck = await run(acpx, ['--version'], cwd, 15000);
152
+ if (!versionCheck.ok) {
153
+ return {
154
+ success: false,
155
+ error: [
156
+ `acpx is not available (${acpx}).`,
157
+ 'Install it with: npm i -g acpx',
158
+ 'Or set ACPX_CMD to a valid binary path.',
159
+ ].join(' '),
160
+ };
161
+ }
162
+
163
+ const first = (tokens[0] || '').toLowerCase();
164
+
165
+ if (first === 'list') {
166
+ const entries = Object.entries(store);
167
+ if (entries.length === 0) return { success: true, output: 'No ACP session bindings yet.' };
168
+ const lines = entries.map(([k, v]) => `${k} -> ${v.agent}:${v.sessionName}`);
169
+ return { success: true, output: `ACP bindings:\n${lines.join('\n')}` };
170
+ }
171
+
172
+ if (first === 'reset') {
173
+ const agent = (tokens[1] || '').toLowerCase();
174
+ if (!AGENT_ALIASES.has(agent)) {
175
+ return { success: false, error: `Invalid agent "${agent}". Use: pi|claude|codex|opencode|gemini|kimi` };
176
+ }
177
+ const key = sessionKey(ctx, agent);
178
+ const bound = store[key];
179
+ if (!bound?.sessionName) {
180
+ return { success: true, output: `No bound session for ${agent} in this chat session.` };
181
+ }
182
+ const closeRes = await run(acpx, [agent, 'sessions', 'close', bound.sessionName], cwd, 120000);
183
+ delete store[key];
184
+ await saveStore(store);
185
+ if (closeRes.ok) return { success: true, output: `Closed ACP session ${bound.sessionName} (${agent}).` };
186
+ return { success: true, output: `Unbound ${bound.sessionName} (${agent}).\n(close returned non-zero: ${closeRes.stderr || closeRes.stdout || 'unknown'})` };
187
+ }
188
+
189
+ if (first === 'exec') {
190
+ const agent = (tokens[1] || '').toLowerCase();
191
+ const prompt = tokens.slice(2).join(' ').trim();
192
+ if (!AGENT_ALIASES.has(agent)) {
193
+ return { success: false, error: `Invalid agent "${agent}". Use: pi|claude|codex|opencode|gemini|kimi` };
194
+ }
195
+ if (!prompt) return { success: false, error: 'Missing prompt. Usage: /acp exec <agent> <prompt>' };
196
+
197
+ const res = await run(acpx, [agent, 'exec', '--cwd', cwd, '--format', 'quiet', prompt], cwd);
198
+ if (!res.ok) {
199
+ return { success: false, error: `acpx exec failed: ${res.stderr || res.stdout || 'unknown error'}` };
200
+ }
201
+ return { success: true, output: res.stdout || '(no output)' };
202
+ }
203
+
204
+ // Default mode: /acp <agent> <prompt>
205
+ const agent = first;
206
+ const prompt = tokens.slice(1).join(' ').trim();
207
+
208
+ if (!AGENT_ALIASES.has(agent)) {
209
+ return { success: false, error: `Invalid subcommand/agent "${agent}". Try /acp help` };
210
+ }
211
+ if (!prompt) {
212
+ return { success: false, error: 'Missing prompt. Usage: /acp <agent> <prompt>' };
213
+ }
214
+
215
+ const key = sessionKey(ctx, agent);
216
+ const existing = store[key];
217
+ const sessionName = existing?.sessionName || defaultSessionName(ctx, agent);
218
+
219
+ // Ensure session exists (best-effort create)
220
+ await run(acpx, [agent, 'sessions', 'new', '--name', sessionName], cwd, 120000);
221
+
222
+ const sendRes = await run(acpx, [agent, '-s', sessionName, '--cwd', cwd, '--format', 'quiet', prompt], cwd);
223
+ if (!sendRes.ok) {
224
+ return { success: false, error: `acpx session send failed: ${sendRes.stderr || sendRes.stdout || 'unknown error'}` };
225
+ }
226
+
227
+ store[key] = { agent, sessionName, updatedAt: Date.now() };
228
+ await saveStore(store);
229
+
230
+ return {
231
+ success: true,
232
+ output: sendRes.stdout || '(no output)',
233
+ data: { agent, sessionName },
234
+ };
235
+ },
236
+ };
237
+
238
+ export const tools = [acpRouterTool];
239
+ export default tools;