takt 0.1.0

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 (480) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +307 -0
  3. package/bin/takt +27 -0
  4. package/dist/agents/index.d.ts +5 -0
  5. package/dist/agents/index.d.ts.map +1 -0
  6. package/dist/agents/index.js +5 -0
  7. package/dist/agents/index.js.map +1 -0
  8. package/dist/agents/runner.d.ts +26 -0
  9. package/dist/agents/runner.d.ts.map +1 -0
  10. package/dist/agents/runner.js +144 -0
  11. package/dist/agents/runner.js.map +1 -0
  12. package/dist/claude/client.d.ts +43 -0
  13. package/dist/claude/client.d.ts.map +1 -0
  14. package/dist/claude/client.js +143 -0
  15. package/dist/claude/client.js.map +1 -0
  16. package/dist/claude/executor.d.ts +29 -0
  17. package/dist/claude/executor.d.ts.map +1 -0
  18. package/dist/claude/executor.js +169 -0
  19. package/dist/claude/executor.js.map +1 -0
  20. package/dist/claude/index.d.ts +14 -0
  21. package/dist/claude/index.d.ts.map +1 -0
  22. package/dist/claude/index.js +18 -0
  23. package/dist/claude/index.js.map +1 -0
  24. package/dist/claude/options-builder.d.ts +40 -0
  25. package/dist/claude/options-builder.d.ts.map +1 -0
  26. package/dist/claude/options-builder.js +90 -0
  27. package/dist/claude/options-builder.js.map +1 -0
  28. package/dist/claude/process.d.ts +57 -0
  29. package/dist/claude/process.d.ts.map +1 -0
  30. package/dist/claude/process.js +57 -0
  31. package/dist/claude/process.js.map +1 -0
  32. package/dist/claude/query-manager.d.ts +35 -0
  33. package/dist/claude/query-manager.d.ts.map +1 -0
  34. package/dist/claude/query-manager.js +74 -0
  35. package/dist/claude/query-manager.js.map +1 -0
  36. package/dist/claude/stream-converter.d.ts +19 -0
  37. package/dist/claude/stream-converter.d.ts.map +1 -0
  38. package/dist/claude/stream-converter.js +166 -0
  39. package/dist/claude/stream-converter.js.map +1 -0
  40. package/dist/claude/types.d.ts +99 -0
  41. package/dist/claude/types.d.ts.map +1 -0
  42. package/dist/claude/types.js +8 -0
  43. package/dist/claude/types.js.map +1 -0
  44. package/dist/cli/agentExecution.d.ts +16 -0
  45. package/dist/cli/agentExecution.d.ts.map +1 -0
  46. package/dist/cli/agentExecution.js +40 -0
  47. package/dist/cli/agentExecution.js.map +1 -0
  48. package/dist/cli/help.d.ts +8 -0
  49. package/dist/cli/help.d.ts.map +1 -0
  50. package/dist/cli/help.js +46 -0
  51. package/dist/cli/help.js.map +1 -0
  52. package/dist/cli/index.d.ts +8 -0
  53. package/dist/cli/index.d.ts.map +1 -0
  54. package/dist/cli/index.js +8 -0
  55. package/dist/cli/index.js.map +1 -0
  56. package/dist/cli/taskBatch.d.ts +8 -0
  57. package/dist/cli/taskBatch.d.ts.map +1 -0
  58. package/dist/cli/taskBatch.js +69 -0
  59. package/dist/cli/taskBatch.js.map +1 -0
  60. package/dist/cli/workflowExecution.d.ts +18 -0
  61. package/dist/cli/workflowExecution.d.ts.map +1 -0
  62. package/dist/cli/workflowExecution.js +112 -0
  63. package/dist/cli/workflowExecution.js.map +1 -0
  64. package/dist/cli.d.ts +14 -0
  65. package/dist/cli.d.ts.map +1 -0
  66. package/dist/cli.js +122 -0
  67. package/dist/cli.js.map +1 -0
  68. package/dist/commands/agentExecution.d.ts +8 -0
  69. package/dist/commands/agentExecution.d.ts.map +1 -0
  70. package/dist/commands/agentExecution.js +44 -0
  71. package/dist/commands/agentExecution.js.map +1 -0
  72. package/dist/commands/help.d.ts +8 -0
  73. package/dist/commands/help.d.ts.map +1 -0
  74. package/dist/commands/help.js +39 -0
  75. package/dist/commands/help.js.map +1 -0
  76. package/dist/commands/index.d.ts +9 -0
  77. package/dist/commands/index.d.ts.map +1 -0
  78. package/dist/commands/index.js +9 -0
  79. package/dist/commands/index.js.map +1 -0
  80. package/dist/commands/session.d.ts +10 -0
  81. package/dist/commands/session.d.ts.map +1 -0
  82. package/dist/commands/session.js +18 -0
  83. package/dist/commands/session.js.map +1 -0
  84. package/dist/commands/taskExecution.d.ts +20 -0
  85. package/dist/commands/taskExecution.d.ts.map +1 -0
  86. package/dist/commands/taskExecution.js +103 -0
  87. package/dist/commands/taskExecution.js.map +1 -0
  88. package/dist/commands/workflow.d.ts +9 -0
  89. package/dist/commands/workflow.d.ts.map +1 -0
  90. package/dist/commands/workflow.js +51 -0
  91. package/dist/commands/workflow.js.map +1 -0
  92. package/dist/commands/workflowExecution.d.ts +21 -0
  93. package/dist/commands/workflowExecution.d.ts.map +1 -0
  94. package/dist/commands/workflowExecution.js +95 -0
  95. package/dist/commands/workflowExecution.js.map +1 -0
  96. package/dist/config/agentLoader.d.ts +25 -0
  97. package/dist/config/agentLoader.d.ts.map +1 -0
  98. package/dist/config/agentLoader.js +96 -0
  99. package/dist/config/agentLoader.js.map +1 -0
  100. package/dist/config/globalConfig.d.ts +23 -0
  101. package/dist/config/globalConfig.d.ts.map +1 -0
  102. package/dist/config/globalConfig.js +117 -0
  103. package/dist/config/globalConfig.js.map +1 -0
  104. package/dist/config/index.d.ts +7 -0
  105. package/dist/config/index.d.ts.map +1 -0
  106. package/dist/config/index.js +7 -0
  107. package/dist/config/index.js.map +1 -0
  108. package/dist/config/initialization.d.ts +23 -0
  109. package/dist/config/initialization.d.ts.map +1 -0
  110. package/dist/config/initialization.js +55 -0
  111. package/dist/config/initialization.js.map +1 -0
  112. package/dist/config/loader.d.ts +9 -0
  113. package/dist/config/loader.d.ts.map +1 -0
  114. package/dist/config/loader.js +12 -0
  115. package/dist/config/loader.js.map +1 -0
  116. package/dist/config/paths.d.ts +33 -0
  117. package/dist/config/paths.d.ts.map +1 -0
  118. package/dist/config/paths.js +66 -0
  119. package/dist/config/paths.js.map +1 -0
  120. package/dist/config/projectConfig.d.ts +41 -0
  121. package/dist/config/projectConfig.d.ts.map +1 -0
  122. package/dist/config/projectConfig.js +85 -0
  123. package/dist/config/projectConfig.js.map +1 -0
  124. package/dist/config/sessionStore.d.ts +44 -0
  125. package/dist/config/sessionStore.d.ts.map +1 -0
  126. package/dist/config/sessionStore.js +194 -0
  127. package/dist/config/sessionStore.js.map +1 -0
  128. package/dist/config/workflowLoader.d.ts +23 -0
  129. package/dist/config/workflowLoader.d.ts.map +1 -0
  130. package/dist/config/workflowLoader.js +142 -0
  131. package/dist/config/workflowLoader.js.map +1 -0
  132. package/dist/constants.d.ts +9 -0
  133. package/dist/constants.d.ts.map +1 -0
  134. package/dist/constants.js +8 -0
  135. package/dist/constants.js.map +1 -0
  136. package/dist/index.d.ts +13 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +20 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/interactive/commands/agent.d.ts +7 -0
  141. package/dist/interactive/commands/agent.d.ts.map +1 -0
  142. package/dist/interactive/commands/agent.js +65 -0
  143. package/dist/interactive/commands/agent.js.map +1 -0
  144. package/dist/interactive/commands/basic.d.ts +7 -0
  145. package/dist/interactive/commands/basic.d.ts.map +1 -0
  146. package/dist/interactive/commands/basic.js +81 -0
  147. package/dist/interactive/commands/basic.js.map +1 -0
  148. package/dist/interactive/commands/index.d.ts +12 -0
  149. package/dist/interactive/commands/index.d.ts.map +1 -0
  150. package/dist/interactive/commands/index.js +14 -0
  151. package/dist/interactive/commands/index.js.map +1 -0
  152. package/dist/interactive/commands/registry.d.ts +41 -0
  153. package/dist/interactive/commands/registry.d.ts.map +1 -0
  154. package/dist/interactive/commands/registry.js +37 -0
  155. package/dist/interactive/commands/registry.js.map +1 -0
  156. package/dist/interactive/commands/session.d.ts +7 -0
  157. package/dist/interactive/commands/session.d.ts.map +1 -0
  158. package/dist/interactive/commands/session.js +75 -0
  159. package/dist/interactive/commands/session.js.map +1 -0
  160. package/dist/interactive/commands/task.d.ts +7 -0
  161. package/dist/interactive/commands/task.d.ts.map +1 -0
  162. package/dist/interactive/commands/task.js +156 -0
  163. package/dist/interactive/commands/task.js.map +1 -0
  164. package/dist/interactive/commands/workflow.d.ts +7 -0
  165. package/dist/interactive/commands/workflow.d.ts.map +1 -0
  166. package/dist/interactive/commands/workflow.js +56 -0
  167. package/dist/interactive/commands/workflow.js.map +1 -0
  168. package/dist/interactive/escape-tracker.d.ts +37 -0
  169. package/dist/interactive/escape-tracker.d.ts.map +1 -0
  170. package/dist/interactive/escape-tracker.js +52 -0
  171. package/dist/interactive/escape-tracker.js.map +1 -0
  172. package/dist/interactive/handlers.d.ts +24 -0
  173. package/dist/interactive/handlers.d.ts.map +1 -0
  174. package/dist/interactive/handlers.js +191 -0
  175. package/dist/interactive/handlers.js.map +1 -0
  176. package/dist/interactive/history-manager.d.ts +45 -0
  177. package/dist/interactive/history-manager.d.ts.map +1 -0
  178. package/dist/interactive/history-manager.js +91 -0
  179. package/dist/interactive/history-manager.js.map +1 -0
  180. package/dist/interactive/index.d.ts +8 -0
  181. package/dist/interactive/index.d.ts.map +1 -0
  182. package/dist/interactive/index.js +8 -0
  183. package/dist/interactive/index.js.map +1 -0
  184. package/dist/interactive/ink/components/App.d.ts +16 -0
  185. package/dist/interactive/ink/components/App.d.ts.map +1 -0
  186. package/dist/interactive/ink/components/App.js +123 -0
  187. package/dist/interactive/ink/components/App.js.map +1 -0
  188. package/dist/interactive/ink/components/AskUserQuestion.d.ts +16 -0
  189. package/dist/interactive/ink/components/AskUserQuestion.d.ts.map +1 -0
  190. package/dist/interactive/ink/components/AskUserQuestion.js +139 -0
  191. package/dist/interactive/ink/components/AskUserQuestion.js.map +1 -0
  192. package/dist/interactive/ink/components/Header.d.ts +20 -0
  193. package/dist/interactive/ink/components/Header.d.ts.map +1 -0
  194. package/dist/interactive/ink/components/Header.js +7 -0
  195. package/dist/interactive/ink/components/Header.js.map +1 -0
  196. package/dist/interactive/ink/components/HelpView.d.ts +13 -0
  197. package/dist/interactive/ink/components/HelpView.d.ts.map +1 -0
  198. package/dist/interactive/ink/components/HelpView.js +45 -0
  199. package/dist/interactive/ink/components/HelpView.js.map +1 -0
  200. package/dist/interactive/ink/components/IterationLimit.d.ts +19 -0
  201. package/dist/interactive/ink/components/IterationLimit.d.ts.map +1 -0
  202. package/dist/interactive/ink/components/IterationLimit.js +59 -0
  203. package/dist/interactive/ink/components/IterationLimit.js.map +1 -0
  204. package/dist/interactive/ink/components/ModalRouter.d.ts +11 -0
  205. package/dist/interactive/ink/components/ModalRouter.d.ts.map +1 -0
  206. package/dist/interactive/ink/components/ModalRouter.js +71 -0
  207. package/dist/interactive/ink/components/ModalRouter.js.map +1 -0
  208. package/dist/interactive/ink/components/PermissionPrompt.d.ts +17 -0
  209. package/dist/interactive/ink/components/PermissionPrompt.d.ts.map +1 -0
  210. package/dist/interactive/ink/components/PermissionPrompt.js +102 -0
  211. package/dist/interactive/ink/components/PermissionPrompt.js.map +1 -0
  212. package/dist/interactive/ink/components/PromptInput.d.ts +26 -0
  213. package/dist/interactive/ink/components/PromptInput.d.ts.map +1 -0
  214. package/dist/interactive/ink/components/PromptInput.js +70 -0
  215. package/dist/interactive/ink/components/PromptInput.js.map +1 -0
  216. package/dist/interactive/ink/components/Spinner.d.ts +14 -0
  217. package/dist/interactive/ink/components/Spinner.d.ts.map +1 -0
  218. package/dist/interactive/ink/components/Spinner.js +8 -0
  219. package/dist/interactive/ink/components/Spinner.js.map +1 -0
  220. package/dist/interactive/ink/components/StreamingOutput.d.ts +25 -0
  221. package/dist/interactive/ink/components/StreamingOutput.d.ts.map +1 -0
  222. package/dist/interactive/ink/components/StreamingOutput.js +8 -0
  223. package/dist/interactive/ink/components/StreamingOutput.js.map +1 -0
  224. package/dist/interactive/ink/components/UserInputPrompt.d.ts +18 -0
  225. package/dist/interactive/ink/components/UserInputPrompt.d.ts.map +1 -0
  226. package/dist/interactive/ink/components/UserInputPrompt.js +30 -0
  227. package/dist/interactive/ink/components/UserInputPrompt.js.map +1 -0
  228. package/dist/interactive/ink/components/WorkflowSelector.d.ts +18 -0
  229. package/dist/interactive/ink/components/WorkflowSelector.d.ts.map +1 -0
  230. package/dist/interactive/ink/components/WorkflowSelector.js +65 -0
  231. package/dist/interactive/ink/components/WorkflowSelector.js.map +1 -0
  232. package/dist/interactive/ink/constants.d.ts +8 -0
  233. package/dist/interactive/ink/constants.d.ts.map +1 -0
  234. package/dist/interactive/ink/constants.js +8 -0
  235. package/dist/interactive/ink/constants.js.map +1 -0
  236. package/dist/interactive/ink/context/AppContext.d.ts +26 -0
  237. package/dist/interactive/ink/context/AppContext.d.ts.map +1 -0
  238. package/dist/interactive/ink/context/AppContext.js +30 -0
  239. package/dist/interactive/ink/context/AppContext.js.map +1 -0
  240. package/dist/interactive/ink/context/appReducer.d.ts +13 -0
  241. package/dist/interactive/ink/context/appReducer.d.ts.map +1 -0
  242. package/dist/interactive/ink/context/appReducer.js +183 -0
  243. package/dist/interactive/ink/context/appReducer.js.map +1 -0
  244. package/dist/interactive/ink/context/types.d.ts +144 -0
  245. package/dist/interactive/ink/context/types.d.ts.map +1 -0
  246. package/dist/interactive/ink/context/types.js +5 -0
  247. package/dist/interactive/ink/context/types.js.map +1 -0
  248. package/dist/interactive/ink/hooks/keyDetection.d.ts +116 -0
  249. package/dist/interactive/ink/hooks/keyDetection.d.ts.map +1 -0
  250. package/dist/interactive/ink/hooks/keyDetection.js +183 -0
  251. package/dist/interactive/ink/hooks/keyDetection.js.map +1 -0
  252. package/dist/interactive/ink/hooks/multilineInputLogic.d.ts +50 -0
  253. package/dist/interactive/ink/hooks/multilineInputLogic.d.ts.map +1 -0
  254. package/dist/interactive/ink/hooks/multilineInputLogic.js +150 -0
  255. package/dist/interactive/ink/hooks/multilineInputLogic.js.map +1 -0
  256. package/dist/interactive/ink/hooks/useCommands.d.ts +20 -0
  257. package/dist/interactive/ink/hooks/useCommands.d.ts.map +1 -0
  258. package/dist/interactive/ink/hooks/useCommands.js +129 -0
  259. package/dist/interactive/ink/hooks/useCommands.js.map +1 -0
  260. package/dist/interactive/ink/hooks/useHistory.d.ts +28 -0
  261. package/dist/interactive/ink/hooks/useHistory.d.ts.map +1 -0
  262. package/dist/interactive/ink/hooks/useHistory.js +59 -0
  263. package/dist/interactive/ink/hooks/useHistory.js.map +1 -0
  264. package/dist/interactive/ink/hooks/useMultilineInput.d.ts +49 -0
  265. package/dist/interactive/ink/hooks/useMultilineInput.d.ts.map +1 -0
  266. package/dist/interactive/ink/hooks/useMultilineInput.js +106 -0
  267. package/dist/interactive/ink/hooks/useMultilineInput.js.map +1 -0
  268. package/dist/interactive/ink/hooks/usePermissionHandlers.d.ts +16 -0
  269. package/dist/interactive/ink/hooks/usePermissionHandlers.d.ts.map +1 -0
  270. package/dist/interactive/ink/hooks/usePermissionHandlers.js +172 -0
  271. package/dist/interactive/ink/hooks/usePermissionHandlers.js.map +1 -0
  272. package/dist/interactive/ink/hooks/useRawKeypress.d.ts +41 -0
  273. package/dist/interactive/ink/hooks/useRawKeypress.d.ts.map +1 -0
  274. package/dist/interactive/ink/hooks/useRawKeypress.js +79 -0
  275. package/dist/interactive/ink/hooks/useRawKeypress.js.map +1 -0
  276. package/dist/interactive/ink/hooks/useTaskQueue.d.ts +32 -0
  277. package/dist/interactive/ink/hooks/useTaskQueue.d.ts.map +1 -0
  278. package/dist/interactive/ink/hooks/useTaskQueue.js +68 -0
  279. package/dist/interactive/ink/hooks/useTaskQueue.js.map +1 -0
  280. package/dist/interactive/ink/hooks/useWorkflow.d.ts +45 -0
  281. package/dist/interactive/ink/hooks/useWorkflow.d.ts.map +1 -0
  282. package/dist/interactive/ink/hooks/useWorkflow.js +93 -0
  283. package/dist/interactive/ink/hooks/useWorkflow.js.map +1 -0
  284. package/dist/interactive/ink/hooks/useWorkflowExecution.d.ts +14 -0
  285. package/dist/interactive/ink/hooks/useWorkflowExecution.d.ts.map +1 -0
  286. package/dist/interactive/ink/hooks/useWorkflowExecution.js +144 -0
  287. package/dist/interactive/ink/hooks/useWorkflowExecution.js.map +1 -0
  288. package/dist/interactive/ink/index.d.ts +30 -0
  289. package/dist/interactive/ink/index.d.ts.map +1 -0
  290. package/dist/interactive/ink/index.js +33 -0
  291. package/dist/interactive/ink/index.js.map +1 -0
  292. package/dist/interactive/ink/utils/workflow.d.ts +11 -0
  293. package/dist/interactive/ink/utils/workflow.d.ts.map +1 -0
  294. package/dist/interactive/ink/utils/workflow.js +19 -0
  295. package/dist/interactive/ink/utils/workflow.js.map +1 -0
  296. package/dist/interactive/input-buffer.d.ts +67 -0
  297. package/dist/interactive/input-buffer.d.ts.map +1 -0
  298. package/dist/interactive/input-buffer.js +162 -0
  299. package/dist/interactive/input-buffer.js.map +1 -0
  300. package/dist/interactive/input-handlers.d.ts +50 -0
  301. package/dist/interactive/input-handlers.d.ts.map +1 -0
  302. package/dist/interactive/input-handlers.js +170 -0
  303. package/dist/interactive/input-handlers.js.map +1 -0
  304. package/dist/interactive/input.d.ts +43 -0
  305. package/dist/interactive/input.d.ts.map +1 -0
  306. package/dist/interactive/input.js +74 -0
  307. package/dist/interactive/input.js.map +1 -0
  308. package/dist/interactive/keyDetection.d.ts +85 -0
  309. package/dist/interactive/keyDetection.d.ts.map +1 -0
  310. package/dist/interactive/keyDetection.js +167 -0
  311. package/dist/interactive/keyDetection.js.map +1 -0
  312. package/dist/interactive/multilineInputLogic.d.ts +30 -0
  313. package/dist/interactive/multilineInputLogic.d.ts.map +1 -0
  314. package/dist/interactive/multilineInputLogic.js +143 -0
  315. package/dist/interactive/multilineInputLogic.js.map +1 -0
  316. package/dist/interactive/passthrough.d.ts +30 -0
  317. package/dist/interactive/passthrough.d.ts.map +1 -0
  318. package/dist/interactive/passthrough.js +94 -0
  319. package/dist/interactive/passthrough.js.map +1 -0
  320. package/dist/interactive/permission.d.ts +33 -0
  321. package/dist/interactive/permission.d.ts.map +1 -0
  322. package/dist/interactive/permission.js +231 -0
  323. package/dist/interactive/permission.js.map +1 -0
  324. package/dist/interactive/prompt.d.ts +33 -0
  325. package/dist/interactive/prompt.d.ts.map +1 -0
  326. package/dist/interactive/prompt.js +132 -0
  327. package/dist/interactive/prompt.js.map +1 -0
  328. package/dist/interactive/repl.d.ts +13 -0
  329. package/dist/interactive/repl.d.ts.map +1 -0
  330. package/dist/interactive/repl.js +202 -0
  331. package/dist/interactive/repl.js.map +1 -0
  332. package/dist/interactive/types.d.ts +35 -0
  333. package/dist/interactive/types.d.ts.map +1 -0
  334. package/dist/interactive/types.js +5 -0
  335. package/dist/interactive/types.js.map +1 -0
  336. package/dist/interactive/ui.d.ts +16 -0
  337. package/dist/interactive/ui.d.ts.map +1 -0
  338. package/dist/interactive/ui.js +122 -0
  339. package/dist/interactive/ui.js.map +1 -0
  340. package/dist/interactive/user-input.d.ts +26 -0
  341. package/dist/interactive/user-input.d.ts.map +1 -0
  342. package/dist/interactive/user-input.js +115 -0
  343. package/dist/interactive/user-input.js.map +1 -0
  344. package/dist/interactive/workflow-executor.d.ts +20 -0
  345. package/dist/interactive/workflow-executor.d.ts.map +1 -0
  346. package/dist/interactive/workflow-executor.js +200 -0
  347. package/dist/interactive/workflow-executor.js.map +1 -0
  348. package/dist/models/agent.d.ts +37 -0
  349. package/dist/models/agent.d.ts.map +1 -0
  350. package/dist/models/agent.js +11 -0
  351. package/dist/models/agent.js.map +1 -0
  352. package/dist/models/config.d.ts +19 -0
  353. package/dist/models/config.d.ts.map +1 -0
  354. package/dist/models/config.js +25 -0
  355. package/dist/models/config.js.map +1 -0
  356. package/dist/models/index.d.ts +7 -0
  357. package/dist/models/index.d.ts.map +1 -0
  358. package/dist/models/index.js +11 -0
  359. package/dist/models/index.js.map +1 -0
  360. package/dist/models/schemas.d.ts +161 -0
  361. package/dist/models/schemas.d.ts.map +1 -0
  362. package/dist/models/schemas.js +137 -0
  363. package/dist/models/schemas.js.map +1 -0
  364. package/dist/models/session.d.ts +50 -0
  365. package/dist/models/session.d.ts.map +1 -0
  366. package/dist/models/session.js +45 -0
  367. package/dist/models/session.js.map +1 -0
  368. package/dist/models/types.d.ts +117 -0
  369. package/dist/models/types.d.ts.map +1 -0
  370. package/dist/models/types.js +5 -0
  371. package/dist/models/types.js.map +1 -0
  372. package/dist/models/workflow.d.ts +58 -0
  373. package/dist/models/workflow.d.ts.map +1 -0
  374. package/dist/models/workflow.js +19 -0
  375. package/dist/models/workflow.js.map +1 -0
  376. package/dist/resources/index.d.ts +38 -0
  377. package/dist/resources/index.d.ts.map +1 -0
  378. package/dist/resources/index.js +108 -0
  379. package/dist/resources/index.js.map +1 -0
  380. package/dist/task/display.d.ts +11 -0
  381. package/dist/task/display.d.ts.map +1 -0
  382. package/dist/task/display.js +41 -0
  383. package/dist/task/display.js.map +1 -0
  384. package/dist/task/index.d.ts +6 -0
  385. package/dist/task/index.d.ts.map +1 -0
  386. package/dist/task/index.js +6 -0
  387. package/dist/task/index.js.map +1 -0
  388. package/dist/task/runner.d.ts +68 -0
  389. package/dist/task/runner.d.ts.map +1 -0
  390. package/dist/task/runner.js +172 -0
  391. package/dist/task/runner.js.map +1 -0
  392. package/dist/utils/debug.d.ts +32 -0
  393. package/dist/utils/debug.d.ts.map +1 -0
  394. package/dist/utils/debug.js +135 -0
  395. package/dist/utils/debug.js.map +1 -0
  396. package/dist/utils/error.d.ts +8 -0
  397. package/dist/utils/error.d.ts.map +1 -0
  398. package/dist/utils/error.js +10 -0
  399. package/dist/utils/error.js.map +1 -0
  400. package/dist/utils/index.d.ts +7 -0
  401. package/dist/utils/index.d.ts.map +1 -0
  402. package/dist/utils/index.js +7 -0
  403. package/dist/utils/index.js.map +1 -0
  404. package/dist/utils/notification.d.ts +63 -0
  405. package/dist/utils/notification.d.ts.map +1 -0
  406. package/dist/utils/notification.js +170 -0
  407. package/dist/utils/notification.js.map +1 -0
  408. package/dist/utils/session.d.ts +38 -0
  409. package/dist/utils/session.d.ts.map +1 -0
  410. package/dist/utils/session.js +97 -0
  411. package/dist/utils/session.js.map +1 -0
  412. package/dist/utils/ui.d.ts +91 -0
  413. package/dist/utils/ui.d.ts.map +1 -0
  414. package/dist/utils/ui.js +330 -0
  415. package/dist/utils/ui.js.map +1 -0
  416. package/dist/workflow/blocked-handler.d.ts +27 -0
  417. package/dist/workflow/blocked-handler.d.ts.map +1 -0
  418. package/dist/workflow/blocked-handler.js +40 -0
  419. package/dist/workflow/blocked-handler.js.map +1 -0
  420. package/dist/workflow/constants.d.ts +20 -0
  421. package/dist/workflow/constants.d.ts.map +1 -0
  422. package/dist/workflow/constants.js +20 -0
  423. package/dist/workflow/constants.js.map +1 -0
  424. package/dist/workflow/engine.d.ts +42 -0
  425. package/dist/workflow/engine.d.ts.map +1 -0
  426. package/dist/workflow/engine.js +207 -0
  427. package/dist/workflow/engine.js.map +1 -0
  428. package/dist/workflow/index.d.ts +15 -0
  429. package/dist/workflow/index.d.ts.map +1 -0
  430. package/dist/workflow/index.js +21 -0
  431. package/dist/workflow/index.js.map +1 -0
  432. package/dist/workflow/instruction-builder.d.ts +37 -0
  433. package/dist/workflow/instruction-builder.d.ts.map +1 -0
  434. package/dist/workflow/instruction-builder.js +49 -0
  435. package/dist/workflow/instruction-builder.js.map +1 -0
  436. package/dist/workflow/loop-detector.d.ts +31 -0
  437. package/dist/workflow/loop-detector.d.ts.map +1 -0
  438. package/dist/workflow/loop-detector.js +61 -0
  439. package/dist/workflow/loop-detector.js.map +1 -0
  440. package/dist/workflow/state-manager.d.ts +25 -0
  441. package/dist/workflow/state-manager.d.ts.map +1 -0
  442. package/dist/workflow/state-manager.js +59 -0
  443. package/dist/workflow/state-manager.js.map +1 -0
  444. package/dist/workflow/transitions.d.ts +25 -0
  445. package/dist/workflow/transitions.d.ts.map +1 -0
  446. package/dist/workflow/transitions.js +106 -0
  447. package/dist/workflow/transitions.js.map +1 -0
  448. package/dist/workflow/types.d.ts +74 -0
  449. package/dist/workflow/types.d.ts.map +1 -0
  450. package/dist/workflow/types.js +8 -0
  451. package/dist/workflow/types.js.map +1 -0
  452. package/package.json +67 -0
  453. package/resources/global/en/agents/default/architect.md +292 -0
  454. package/resources/global/en/agents/default/coder.md +169 -0
  455. package/resources/global/en/agents/default/security.md +206 -0
  456. package/resources/global/en/agents/default/supervisor.md +153 -0
  457. package/resources/global/en/agents/magi/balthasar.md +75 -0
  458. package/resources/global/en/agents/magi/casper.md +100 -0
  459. package/resources/global/en/agents/magi/melchior.md +74 -0
  460. package/resources/global/en/agents/research/digger.md +134 -0
  461. package/resources/global/en/agents/research/planner.md +125 -0
  462. package/resources/global/en/agents/research/supervisor.md +86 -0
  463. package/resources/global/en/config.yaml +19 -0
  464. package/resources/global/en/workflows/default.yaml +177 -0
  465. package/resources/global/en/workflows/magi.yaml +96 -0
  466. package/resources/global/en/workflows/research.yaml +112 -0
  467. package/resources/global/ja/agents/default/architect.md +292 -0
  468. package/resources/global/ja/agents/default/coder.md +170 -0
  469. package/resources/global/ja/agents/default/security.md +206 -0
  470. package/resources/global/ja/agents/default/supervisor.md +153 -0
  471. package/resources/global/ja/agents/magi/balthasar.md +75 -0
  472. package/resources/global/ja/agents/magi/casper.md +100 -0
  473. package/resources/global/ja/agents/magi/melchior.md +74 -0
  474. package/resources/global/ja/agents/research/digger.md +134 -0
  475. package/resources/global/ja/agents/research/planner.md +125 -0
  476. package/resources/global/ja/agents/research/supervisor.md +86 -0
  477. package/resources/global/ja/config.yaml +19 -0
  478. package/resources/global/ja/workflows/default.yaml +177 -0
  479. package/resources/global/ja/workflows/magi.yaml +96 -0
  480. package/resources/global/ja/workflows/research.yaml +112 -0
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Interactive permission handler for takt
3
+ *
4
+ * Prompts user for permission when Claude requests access to tools
5
+ * that are not pre-approved.
6
+ */
7
+ import chalk from 'chalk';
8
+ import { playInfoSound } from '../utils/notification.js';
9
+ /** Create initial permission state */
10
+ export function createPermissionState() {
11
+ return {
12
+ iterationAllowedPatterns: new Set(),
13
+ iterationSacrificeMode: false,
14
+ };
15
+ }
16
+ /** Reset permission state for new iteration */
17
+ export function resetPermissionStateForIteration(state) {
18
+ state.iterationAllowedPatterns.clear();
19
+ state.iterationSacrificeMode = false;
20
+ }
21
+ /** Format tool input for display */
22
+ function formatToolInput(toolName, input) {
23
+ if (toolName === 'Bash') {
24
+ const command = input.command;
25
+ const description = input.description;
26
+ if (command) {
27
+ const lines = [` コマンド: ${chalk.bold(command)}`];
28
+ if (description) {
29
+ lines.push(` 説明: ${description}`);
30
+ }
31
+ return lines.join('\n');
32
+ }
33
+ }
34
+ if (toolName === 'Edit' || toolName === 'Write' || toolName === 'Read') {
35
+ const filePath = input.file_path;
36
+ if (filePath) {
37
+ return ` ファイル: ${chalk.bold(filePath)}`;
38
+ }
39
+ }
40
+ if (toolName === 'WebSearch') {
41
+ const query = input.query;
42
+ if (query) {
43
+ return ` 検索: ${chalk.bold(query)}`;
44
+ }
45
+ }
46
+ if (toolName === 'WebFetch') {
47
+ const url = input.url;
48
+ if (url) {
49
+ return ` URL: ${chalk.bold(url)}`;
50
+ }
51
+ }
52
+ // Generic display for other tools
53
+ const entries = Object.entries(input).slice(0, 3);
54
+ return entries.map(([k, v]) => ` ${k}: ${JSON.stringify(v).slice(0, 50)}`).join('\n');
55
+ }
56
+ /** Build permission rule for the tool */
57
+ function buildPermissionRule(toolName, input) {
58
+ if (toolName === 'Bash') {
59
+ const command = input.command || '';
60
+ const firstWord = command.split(/\s+/)[0] || command;
61
+ return `Bash(${firstWord}:*)`;
62
+ }
63
+ return toolName;
64
+ }
65
+ /** Build exact command pattern for iteration-scoped permission */
66
+ function buildExactCommandPattern(toolName, input) {
67
+ if (toolName === 'Bash') {
68
+ const command = input.command || '';
69
+ return `Bash:${command}`;
70
+ }
71
+ return `${toolName}:${JSON.stringify(input)}`;
72
+ }
73
+ /** Check if a pattern matches the current request */
74
+ function matchesPattern(pattern, toolName, input) {
75
+ // Check exact command pattern
76
+ const exactPattern = buildExactCommandPattern(toolName, input);
77
+ if (pattern === exactPattern) {
78
+ return true;
79
+ }
80
+ // Check tool pattern (e.g., "Bash(gh:*)")
81
+ if (toolName === 'Bash' && pattern.startsWith('Bash(')) {
82
+ const command = input.command || '';
83
+ const firstWord = command.split(/\s+/)[0] || '';
84
+ const patternPrefix = pattern.match(/^Bash\(([^:]+):\*\)$/)?.[1];
85
+ if (patternPrefix && firstWord === patternPrefix) {
86
+ return true;
87
+ }
88
+ }
89
+ return false;
90
+ }
91
+ /**
92
+ * Create an interactive permission handler with enhanced options
93
+ *
94
+ * @param rl - Readline interface for user input
95
+ * @param permissionState - Shared permission state for iteration-scoped permissions
96
+ * @returns Permission handler function
97
+ */
98
+ export function createInteractivePermissionHandler(rl, permissionState) {
99
+ // Use provided state or create a new one
100
+ const state = permissionState || createPermissionState();
101
+ return async (request) => {
102
+ const { toolName, input, suggestions, decisionReason } = request;
103
+ // Check if sacrifice mode is active for this iteration
104
+ if (state.iterationSacrificeMode) {
105
+ return { behavior: 'allow' };
106
+ }
107
+ // Check if this command matches any iteration-allowed pattern
108
+ for (const pattern of state.iterationAllowedPatterns) {
109
+ if (matchesPattern(pattern, toolName, input)) {
110
+ return { behavior: 'allow' };
111
+ }
112
+ }
113
+ // Play notification sound
114
+ playInfoSound();
115
+ // Display permission request
116
+ console.log();
117
+ console.log(chalk.yellow('━'.repeat(60)));
118
+ console.log(chalk.yellow.bold('⚠️ 権限リクエスト'));
119
+ console.log(` ツール: ${chalk.cyan(toolName)}`);
120
+ console.log(formatToolInput(toolName, input));
121
+ if (decisionReason) {
122
+ console.log(chalk.gray(` 理由: ${decisionReason}`));
123
+ }
124
+ console.log(chalk.yellow('━'.repeat(60)));
125
+ // Show options
126
+ console.log(chalk.gray(' [y] 許可'));
127
+ console.log(chalk.gray(' [n] 拒否'));
128
+ console.log(chalk.gray(' [a] 今後も許可(セッション中)'));
129
+ console.log(chalk.gray(' [i] このイテレーションでこのコマンドを許可'));
130
+ console.log(chalk.gray(' [p] このイテレーションでこのコマンドパターンを許可'));
131
+ console.log(chalk.gray(' [s] このイテレーションでPC全権限譲渡(sacrificeモード)'));
132
+ // Prompt user
133
+ const response = await new Promise((resolve) => {
134
+ rl.question(chalk.yellow('選択してください [y/n/a/i/p/s]: '), (answer) => {
135
+ resolve(answer.trim().toLowerCase());
136
+ });
137
+ });
138
+ if (response === 'y' || response === 'yes') {
139
+ // Allow this time only
140
+ console.log(chalk.green('✓ 許可しました'));
141
+ return { behavior: 'allow' };
142
+ }
143
+ if (response === 'a' || response === 'always') {
144
+ // Allow and remember for session
145
+ const rule = buildPermissionRule(toolName, input);
146
+ console.log(chalk.green(`✓ 許可しました (${rule} をセッション中記憶)`));
147
+ // Use suggestions if available, otherwise build our own
148
+ const updatedPermissions = suggestions || [
149
+ {
150
+ type: 'addRules',
151
+ rules: [{ toolName, ruleContent: rule }],
152
+ behavior: 'allow',
153
+ destination: 'session',
154
+ },
155
+ ];
156
+ return {
157
+ behavior: 'allow',
158
+ updatedPermissions,
159
+ };
160
+ }
161
+ if (response === 'i') {
162
+ // Allow this exact command for this iteration
163
+ const exactPattern = buildExactCommandPattern(toolName, input);
164
+ state.iterationAllowedPatterns.add(exactPattern);
165
+ console.log(chalk.green('✓ このイテレーションでこのコマンドを許可しました'));
166
+ return { behavior: 'allow' };
167
+ }
168
+ if (response === 'p') {
169
+ // Allow this command pattern for this iteration
170
+ const pattern = buildPermissionRule(toolName, input);
171
+ state.iterationAllowedPatterns.add(pattern);
172
+ console.log(chalk.green(`✓ このイテレーションで ${pattern} パターンを許可しました`));
173
+ return { behavior: 'allow' };
174
+ }
175
+ if (response === 's' || response === 'sacrifice') {
176
+ // Sacrifice mode for this iteration
177
+ state.iterationSacrificeMode = true;
178
+ console.log(chalk.red.bold('💀 このイテレーションでPC全権限を譲渡しました'));
179
+ return { behavior: 'allow' };
180
+ }
181
+ // Deny
182
+ console.log(chalk.red('✗ 拒否しました'));
183
+ return {
184
+ behavior: 'deny',
185
+ message: 'User denied permission',
186
+ };
187
+ };
188
+ }
189
+ /**
190
+ * Create a non-interactive permission handler that auto-allows safe tools
191
+ * and denies others without prompting.
192
+ */
193
+ export function createAutoPermissionHandler() {
194
+ // Tools that are always safe to allow
195
+ const safeTools = new Set([
196
+ 'Read',
197
+ 'Glob',
198
+ 'Grep',
199
+ 'WebSearch',
200
+ 'WebFetch',
201
+ ]);
202
+ // Safe Bash command prefixes
203
+ const safeBashPrefixes = [
204
+ 'ls', 'cat', 'head', 'tail', 'find', 'grep', 'which',
205
+ 'pwd', 'echo', 'date', 'whoami', 'uname',
206
+ 'git status', 'git log', 'git diff', 'git branch', 'git show',
207
+ 'npm ', 'npx ', 'node ', 'python ', 'pip ',
208
+ ];
209
+ return async (request) => {
210
+ const { toolName, input } = request;
211
+ // Safe tools are always allowed
212
+ if (safeTools.has(toolName)) {
213
+ return { behavior: 'allow' };
214
+ }
215
+ // Check Bash commands
216
+ if (toolName === 'Bash') {
217
+ const command = (input.command || '').trim();
218
+ for (const prefix of safeBashPrefixes) {
219
+ if (command.startsWith(prefix)) {
220
+ return { behavior: 'allow' };
221
+ }
222
+ }
223
+ }
224
+ // Deny other tools
225
+ return {
226
+ behavior: 'deny',
227
+ message: `Tool ${toolName} requires explicit permission`,
228
+ };
229
+ };
230
+ }
231
+ //# sourceMappingURL=permission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/interactive/permission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Interactive prompts for CLI
3
+ *
4
+ * Provides simple input prompts for user interaction.
5
+ */
6
+ /**
7
+ * Prompt user to select from a list of options
8
+ * @returns Selected option or null if cancelled
9
+ */
10
+ export declare function selectOption<T extends string>(message: string, options: {
11
+ label: string;
12
+ value: T;
13
+ }[]): Promise<T | null>;
14
+ /**
15
+ * Prompt user for simple text input
16
+ * @returns User input or null if cancelled
17
+ */
18
+ export declare function promptInput(message: string): Promise<string | null>;
19
+ /**
20
+ * Prompt user to select from a list of options with a default value
21
+ * User can press Enter to select default, or enter a number to select specific option
22
+ * @returns Selected option value
23
+ */
24
+ export declare function selectOptionWithDefault<T extends string>(message: string, options: {
25
+ label: string;
26
+ value: T;
27
+ }[], defaultValue: T): Promise<T>;
28
+ /**
29
+ * Prompt user for yes/no confirmation
30
+ * @returns true for yes, false for no
31
+ */
32
+ export declare function confirm(message: string, defaultYes?: boolean): Promise<boolean>;
33
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/interactive/prompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,EACjD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,EAAE,GACrC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAuCnB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBzE;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAC5D,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,EAAE,EACtC,YAAY,EAAE,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAgDZ;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBlF"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Interactive prompts for CLI
3
+ *
4
+ * Provides simple input prompts for user interaction.
5
+ */
6
+ import * as readline from 'node:readline';
7
+ import chalk from 'chalk';
8
+ /**
9
+ * Prompt user to select from a list of options
10
+ * @returns Selected option or null if cancelled
11
+ */
12
+ export async function selectOption(message, options) {
13
+ const rl = readline.createInterface({
14
+ input: process.stdin,
15
+ output: process.stdout,
16
+ });
17
+ console.log();
18
+ console.log(chalk.cyan(message));
19
+ console.log();
20
+ options.forEach((opt, idx) => {
21
+ console.log(chalk.yellow(` ${idx + 1}. `) + opt.label);
22
+ });
23
+ console.log(chalk.gray(` 0. Cancel`));
24
+ console.log();
25
+ return new Promise((resolve) => {
26
+ rl.question(chalk.green('Select [0-' + options.length + ']: '), (answer) => {
27
+ rl.close();
28
+ const num = parseInt(answer.trim(), 10);
29
+ if (isNaN(num) || num === 0) {
30
+ resolve(null);
31
+ return;
32
+ }
33
+ if (num >= 1 && num <= options.length) {
34
+ const selected = options[num - 1];
35
+ if (selected) {
36
+ resolve(selected.value);
37
+ return;
38
+ }
39
+ }
40
+ console.log(chalk.red('Invalid selection'));
41
+ resolve(null);
42
+ });
43
+ });
44
+ }
45
+ /**
46
+ * Prompt user for simple text input
47
+ * @returns User input or null if cancelled
48
+ */
49
+ export async function promptInput(message) {
50
+ const rl = readline.createInterface({
51
+ input: process.stdin,
52
+ output: process.stdout,
53
+ });
54
+ return new Promise((resolve) => {
55
+ rl.question(chalk.green(message + ': '), (answer) => {
56
+ rl.close();
57
+ const trimmed = answer.trim();
58
+ if (!trimmed) {
59
+ resolve(null);
60
+ return;
61
+ }
62
+ resolve(trimmed);
63
+ });
64
+ });
65
+ }
66
+ /**
67
+ * Prompt user to select from a list of options with a default value
68
+ * User can press Enter to select default, or enter a number to select specific option
69
+ * @returns Selected option value
70
+ */
71
+ export async function selectOptionWithDefault(message, options, defaultValue) {
72
+ const rl = readline.createInterface({
73
+ input: process.stdin,
74
+ output: process.stdout,
75
+ });
76
+ console.log();
77
+ console.log(chalk.cyan(message));
78
+ console.log();
79
+ const defaultIndex = options.findIndex((opt) => opt.value === defaultValue);
80
+ options.forEach((opt, idx) => {
81
+ const isDefault = opt.value === defaultValue;
82
+ const marker = isDefault ? chalk.green(' (default)') : '';
83
+ console.log(chalk.yellow(` ${idx + 1}. `) + opt.label + marker);
84
+ });
85
+ console.log();
86
+ const hint = defaultIndex >= 0 ? ` [Enter=${defaultIndex + 1}]` : '';
87
+ return new Promise((resolve) => {
88
+ rl.question(chalk.green(`Select [1-${options.length}]${hint}: `), (answer) => {
89
+ rl.close();
90
+ const trimmed = answer.trim();
91
+ // Empty input = use default
92
+ if (!trimmed) {
93
+ resolve(defaultValue);
94
+ return;
95
+ }
96
+ const num = parseInt(trimmed, 10);
97
+ if (num >= 1 && num <= options.length) {
98
+ const selected = options[num - 1];
99
+ if (selected) {
100
+ resolve(selected.value);
101
+ return;
102
+ }
103
+ }
104
+ // Invalid input, use default
105
+ console.log(chalk.gray(`Invalid selection, using default: ${defaultValue}`));
106
+ resolve(defaultValue);
107
+ });
108
+ });
109
+ }
110
+ /**
111
+ * Prompt user for yes/no confirmation
112
+ * @returns true for yes, false for no
113
+ */
114
+ export async function confirm(message, defaultYes = true) {
115
+ const rl = readline.createInterface({
116
+ input: process.stdin,
117
+ output: process.stdout,
118
+ });
119
+ const hint = defaultYes ? '[Y/n]' : '[y/N]';
120
+ return new Promise((resolve) => {
121
+ rl.question(chalk.green(`${message} ${hint}: `), (answer) => {
122
+ rl.close();
123
+ const trimmed = answer.trim().toLowerCase();
124
+ if (!trimmed) {
125
+ resolve(defaultYes);
126
+ return;
127
+ }
128
+ resolve(trimmed === 'y' || trimmed === 'yes');
129
+ });
130
+ });
131
+ }
132
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/interactive/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Interactive REPL mode for takt
3
+ *
4
+ * Provides an interactive shell similar to ORCA's interactive mode.
5
+ * Features:
6
+ * - Workflow switching with /switch (/sw)
7
+ * - Multi-agent workflow execution
8
+ * - Conversation history
9
+ * - Session persistence
10
+ */
11
+ /** Start interactive mode */
12
+ export declare function startInteractiveMode(cwd: string, initialTask?: string): Promise<void>;
13
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/interactive/repl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA+IH,6BAA6B;AAC7B,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAgGf"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Interactive REPL mode for takt
3
+ *
4
+ * Provides an interactive shell similar to ORCA's interactive mode.
5
+ * Features:
6
+ * - Workflow switching with /switch (/sw)
7
+ * - Multi-agent workflow execution
8
+ * - Conversation history
9
+ * - Session persistence
10
+ */
11
+ import chalk from 'chalk';
12
+ import { loadGlobalConfig } from '../config/index.js';
13
+ import { getCurrentWorkflow, getProjectConfigDir, ensureDir, } from '../config/paths.js';
14
+ import { interruptCurrentProcess } from '../claude/process.js';
15
+ import { info } from '../utils/ui.js';
16
+ import { generateSessionId } from '../utils/session.js';
17
+ import { createReadlineInterface, multiLineQuestion, InputHistoryManager, } from './input.js';
18
+ import { TaskRunner } from '../task/index.js';
19
+ import { commandRegistry } from './commands/index.js';
20
+ import { printWelcome } from './ui.js';
21
+ import { executeMultiAgentWorkflow } from './workflow-executor.js';
22
+ /**
23
+ * Parse user input for iteration control.
24
+ *
25
+ * Returns the requested iteration count and the actual message.
26
+ * Examples:
27
+ * "3" -> { iterations: 3, message: null } (continue with 3 more iterations)
28
+ * "fix the bug" -> { iterations: 1, message: "fix the bug" }
29
+ * "5 do something" -> { iterations: 5, message: "do something" }
30
+ */
31
+ function parseIterationInput(input) {
32
+ const trimmed = input.trim();
33
+ // Check if input is just a number (continue iterations)
34
+ if (/^\d+$/.test(trimmed)) {
35
+ const count = parseInt(trimmed, 10);
36
+ if (count > 0 && count <= 100) {
37
+ return { iterations: count, message: null };
38
+ }
39
+ }
40
+ // Check if input starts with a number followed by space
41
+ const match = trimmed.match(/^(\d+)\s+(.+)$/);
42
+ if (match && match[1] && match[2]) {
43
+ const count = parseInt(match[1], 10);
44
+ if (count > 0 && count <= 100) {
45
+ return { iterations: count, message: match[2] };
46
+ }
47
+ }
48
+ // Default: single iteration with the full message
49
+ return { iterations: 1, message: trimmed };
50
+ }
51
+ /** Execute workflow with user message */
52
+ async function executeWorkflow(message, state, rl) {
53
+ // Parse iteration control from input
54
+ const { iterations, message: actualMessage } = parseIterationInput(message);
55
+ // Determine the task to use
56
+ let task;
57
+ if (actualMessage === null) {
58
+ // Number only - continue with previous task
59
+ if (!state.currentTask) {
60
+ info('継続するタスクがありません。タスクを入力してください。');
61
+ return true;
62
+ }
63
+ task = state.currentTask;
64
+ info(`前回のタスクを ${iterations} イテレーションで継続します`);
65
+ }
66
+ else {
67
+ task = actualMessage;
68
+ state.currentTask = task;
69
+ }
70
+ // Add user message to conversation history
71
+ state.conversationHistory.push({
72
+ role: 'user',
73
+ content: message,
74
+ timestamp: new Date().toISOString(),
75
+ });
76
+ // Add to input history (for up-arrow recall)
77
+ state.historyManager.add(message);
78
+ // Add to shared user inputs (for all agents)
79
+ state.sharedUserInputs.push(task);
80
+ // Run workflow with specified iterations
81
+ const response = await executeMultiAgentWorkflow(task, state, rl, iterations);
82
+ // Add assistant response to history
83
+ state.conversationHistory.push({
84
+ role: 'assistant',
85
+ content: response,
86
+ timestamp: new Date().toISOString(),
87
+ });
88
+ return true;
89
+ }
90
+ /** Process user input */
91
+ async function processInput(input, state, rl) {
92
+ const trimmed = input.trim();
93
+ if (!trimmed) {
94
+ return true; // Continue
95
+ }
96
+ // Handle commands
97
+ if (trimmed.startsWith('/')) {
98
+ const parts = trimmed.slice(1).split(/\s+/);
99
+ const commandName = parts[0]?.toLowerCase();
100
+ const args = parts.slice(1);
101
+ if (!commandName) {
102
+ return true;
103
+ }
104
+ const command = commandRegistry.get(commandName);
105
+ if (command) {
106
+ const result = await command.execute(args, state, rl);
107
+ return result.continue;
108
+ }
109
+ info(`Unknown command: ${commandName}`);
110
+ info('Type /help for available commands');
111
+ return true;
112
+ }
113
+ // Execute workflow with input
114
+ return await executeWorkflow(trimmed, state, rl);
115
+ }
116
+ /** Start interactive mode */
117
+ export async function startInteractiveMode(cwd, initialTask) {
118
+ // Load global config for validation
119
+ loadGlobalConfig();
120
+ const lastWorkflow = getCurrentWorkflow(cwd);
121
+ // Create history manager (handles persistence automatically)
122
+ const historyManager = new InputHistoryManager(cwd);
123
+ // Create task runner
124
+ const taskRunner = new TaskRunner(cwd);
125
+ const state = {
126
+ cwd,
127
+ workflowName: lastWorkflow,
128
+ sessionId: generateSessionId(),
129
+ conversationHistory: [],
130
+ historyManager,
131
+ taskRunner,
132
+ sharedUserInputs: [],
133
+ sacrificeMyPcMode: false,
134
+ };
135
+ // Ensure project config directory exists
136
+ ensureDir(getProjectConfigDir(cwd));
137
+ printWelcome(state);
138
+ const rl = createReadlineInterface();
139
+ // Handle initial task if provided
140
+ if (initialTask) {
141
+ const shouldContinue = await processInput(initialTask, state, rl);
142
+ if (!shouldContinue) {
143
+ rl.close();
144
+ return;
145
+ }
146
+ }
147
+ // Track Ctrl+C timing for double-press exit
148
+ let lastSigintTime = 0;
149
+ // Ctrl+C handler for double-press exit
150
+ const handleCtrlC = () => {
151
+ console.log();
152
+ const now = Date.now();
153
+ // Try to interrupt running Claude process first
154
+ if (interruptCurrentProcess()) {
155
+ info('Interrupted. Press Ctrl+C again to exit.');
156
+ lastSigintTime = now;
157
+ }
158
+ else if (now - lastSigintTime < 2000) {
159
+ // Double press within 2 seconds - exit
160
+ info('Goodbye!');
161
+ rl.close();
162
+ process.exit(0);
163
+ }
164
+ else {
165
+ info('Press Ctrl+C again to exit');
166
+ lastSigintTime = now;
167
+ }
168
+ };
169
+ // Main REPL loop with multi-line support
170
+ const prompt = async () => {
171
+ // Show workflow indicator above prompt
172
+ const modeIndicator = state.sacrificeMyPcMode ? chalk.red(' 💀') : '';
173
+ console.log(chalk.gray(`[${state.workflowName}]`) + modeIndicator);
174
+ try {
175
+ const promptStr = state.sacrificeMyPcMode
176
+ ? chalk.red('takt💀> ')
177
+ : chalk.cyan('takt> ');
178
+ const input = await multiLineQuestion(rl, {
179
+ promptStr,
180
+ onCtrlC: handleCtrlC,
181
+ historyManager: state.historyManager,
182
+ });
183
+ if (input === '') {
184
+ // Empty input, just re-prompt
185
+ prompt();
186
+ return;
187
+ }
188
+ const shouldContinue = await processInput(input, state, rl);
189
+ if (shouldContinue) {
190
+ prompt();
191
+ }
192
+ else {
193
+ rl.close();
194
+ }
195
+ }
196
+ catch {
197
+ rl.close();
198
+ }
199
+ };
200
+ prompt();
201
+ }
202
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/interactive/repl.ts"],"names":[],"mappings":"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"}