centaurus-cli 3.0.1 → 3.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 (552) hide show
  1. package/dist/ai/types.js +0 -1
  2. package/dist/ai/types.js.map +1 -1
  3. package/dist/cli-adapter.js +5047 -5158
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/commands/CommandParser.js +372 -315
  6. package/dist/commands/CommandParser.js.map +1 -1
  7. package/dist/config/build-config.js +11 -42
  8. package/dist/config/build-config.js.map +1 -1
  9. package/dist/config/defaultConfig.js +94 -82
  10. package/dist/config/defaultConfig.js.map +1 -1
  11. package/dist/config/manager.js +144 -160
  12. package/dist/config/manager.js.map +1 -1
  13. package/dist/config/mcp-config-manager.js +411 -364
  14. package/dist/config/mcp-config-manager.js.map +1 -1
  15. package/dist/config/models.js +118 -185
  16. package/dist/config/models.js.map +1 -1
  17. package/dist/config/slash-commands.js +186 -184
  18. package/dist/config/slash-commands.js.map +1 -1
  19. package/dist/config/types.js +33 -26
  20. package/dist/config/types.js.map +1 -1
  21. package/dist/context/command-detector.js +63 -67
  22. package/dist/context/command-detector.js.map +1 -1
  23. package/dist/context/context-manager.js +533 -518
  24. package/dist/context/context-manager.js.map +1 -1
  25. package/dist/context/handlers/docker-handler.js +518 -576
  26. package/dist/context/handlers/docker-handler.js.map +1 -1
  27. package/dist/context/handlers/ssh-handler.js +1050 -1109
  28. package/dist/context/handlers/ssh-handler.js.map +1 -1
  29. package/dist/context/handlers/wsl-handler.js +558 -630
  30. package/dist/context/handlers/wsl-handler.js.map +1 -1
  31. package/dist/context/index.js +42 -6
  32. package/dist/context/index.js.map +1 -1
  33. package/dist/context/subshell-handler.js +0 -4
  34. package/dist/context/subshell-handler.js.map +1 -1
  35. package/dist/context/types.js +20 -31
  36. package/dist/context/types.js.map +1 -1
  37. package/dist/hooks/useConnectivity.js +13 -10
  38. package/dist/hooks/useConnectivity.js.map +1 -1
  39. package/dist/hooks/useTerminalDimensions.js +67 -79
  40. package/dist/hooks/useTerminalDimensions.js.map +1 -1
  41. package/dist/index.js +228 -251
  42. package/dist/index.js.map +1 -1
  43. package/dist/mcp/mcp-command-handler.js +297 -260
  44. package/dist/mcp/mcp-command-handler.js.map +1 -1
  45. package/dist/mcp/mcp-server-manager.js +139 -155
  46. package/dist/mcp/mcp-server-manager.js.map +1 -1
  47. package/dist/mcp/mcp-tool-wrapper.js +74 -94
  48. package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
  49. package/dist/services/ai-autocomplete-agent.js +169 -181
  50. package/dist/services/ai-autocomplete-agent.js.map +1 -1
  51. package/dist/services/ai-context-injector.js +180 -93
  52. package/dist/services/ai-context-injector.js.map +1 -1
  53. package/dist/services/ai-service-client.js +513 -456
  54. package/dist/services/ai-service-client.js.map +1 -1
  55. package/dist/services/api-client.js +443 -441
  56. package/dist/services/api-client.js.map +1 -1
  57. package/dist/services/auth-handler.js +162 -198
  58. package/dist/services/auth-handler.js.map +1 -1
  59. package/dist/services/background-task-manager.js +258 -282
  60. package/dist/services/background-task-manager.js.map +1 -1
  61. package/dist/services/checkpoint-manager.js +1526 -1512
  62. package/dist/services/checkpoint-manager.js.map +1 -1
  63. package/dist/services/clipboard-service.js +151 -200
  64. package/dist/services/clipboard-service.js.map +1 -1
  65. package/dist/services/connectivity-manager.js +63 -65
  66. package/dist/services/connectivity-manager.js.map +1 -1
  67. package/dist/services/conversation-manager.js +118 -121
  68. package/dist/services/conversation-manager.js.map +1 -1
  69. package/dist/services/environment-context-injector.js +160 -187
  70. package/dist/services/environment-context-injector.js.map +1 -1
  71. package/dist/services/fast-context-agent.js +203 -243
  72. package/dist/services/fast-context-agent.js.map +1 -1
  73. package/dist/services/input-detection-agent.js +190 -202
  74. package/dist/services/input-detection-agent.js.map +1 -1
  75. package/dist/services/input-requirement-detector.js +155 -189
  76. package/dist/services/input-requirement-detector.js.map +1 -1
  77. package/dist/services/local-chat-storage.js +342 -365
  78. package/dist/services/local-chat-storage.js.map +1 -1
  79. package/dist/services/monitored-shell-manager.js +225 -233
  80. package/dist/services/monitored-shell-manager.js.map +1 -1
  81. package/dist/services/ollama-service.js +293 -310
  82. package/dist/services/ollama-service.js.map +1 -1
  83. package/dist/services/rules-storage.js +142 -0
  84. package/dist/services/rules-storage.js.map +1 -0
  85. package/dist/services/session-quota-manager.js +219 -235
  86. package/dist/services/session-quota-manager.js.map +1 -1
  87. package/dist/services/shell-input-agent.js +299 -334
  88. package/dist/services/shell-input-agent.js.map +1 -1
  89. package/dist/services/sub-agent-manager.js +459 -501
  90. package/dist/services/sub-agent-manager.js.map +1 -1
  91. package/dist/services/warpify-detector.js +133 -183
  92. package/dist/services/warpify-detector.js.map +1 -1
  93. package/dist/services/workflow-storage.js +202 -217
  94. package/dist/services/workflow-storage.js.map +1 -1
  95. package/dist/test-ssh-handler.js +148 -193
  96. package/dist/test-ssh-handler.js.map +1 -1
  97. package/dist/tools/add-mcp.js +161 -0
  98. package/dist/tools/add-mcp.js.map +1 -0
  99. package/dist/tools/background-command.js +240 -273
  100. package/dist/tools/background-command.js.map +1 -1
  101. package/dist/tools/command.js +447 -440
  102. package/dist/tools/command.js.map +1 -1
  103. package/dist/tools/create-image.js +172 -202
  104. package/dist/tools/create-image.js.map +1 -1
  105. package/dist/tools/enter-remote-session.js +169 -215
  106. package/dist/tools/enter-remote-session.js.map +1 -1
  107. package/dist/tools/fast-context.js +60 -67
  108. package/dist/tools/fast-context.js.map +1 -1
  109. package/dist/tools/file-ops.js +601 -572
  110. package/dist/tools/file-ops.js.map +1 -1
  111. package/dist/tools/find-files.js +262 -303
  112. package/dist/tools/find-files.js.map +1 -1
  113. package/dist/tools/get-diff.js +423 -406
  114. package/dist/tools/get-diff.js.map +1 -1
  115. package/dist/tools/grep-search.js +966 -948
  116. package/dist/tools/grep-search.js.map +1 -1
  117. package/dist/tools/inspect-symbol.js +308 -323
  118. package/dist/tools/inspect-symbol.js.map +1 -1
  119. package/dist/tools/plan-mode.js +459 -503
  120. package/dist/tools/plan-mode.js.map +1 -1
  121. package/dist/tools/read-binary-file.js +160 -190
  122. package/dist/tools/read-binary-file.js.map +1 -1
  123. package/dist/tools/registry.js +100 -84
  124. package/dist/tools/registry.js.map +1 -1
  125. package/dist/tools/reproduce_issue.js +170 -151
  126. package/dist/tools/reproduce_issue.js.map +1 -1
  127. package/dist/tools/sub-agent.js +223 -228
  128. package/dist/tools/sub-agent.js.map +1 -1
  129. package/dist/tools/task-complete.js +28 -27
  130. package/dist/tools/task-complete.js.map +1 -1
  131. package/dist/tools/types.js +0 -1
  132. package/dist/tools/types.js.map +1 -1
  133. package/dist/tools/validation.js +96 -118
  134. package/dist/tools/validation.js.map +1 -1
  135. package/dist/tools/web-search.js +194 -194
  136. package/dist/tools/web-search.js.map +1 -1
  137. package/dist/tools/workflow-tool.js +77 -82
  138. package/dist/tools/workflow-tool.js.map +1 -1
  139. package/dist/types/index.js +0 -1
  140. package/dist/types/index.js.map +1 -1
  141. package/dist/types/rule.js +1 -0
  142. package/dist/types/rule.js.map +1 -0
  143. package/dist/types/workflow.js +0 -7
  144. package/dist/types/workflow.js.map +1 -1
  145. package/dist/ui/components/AgentTimer.js +24 -25
  146. package/dist/ui/components/AgentTimer.js.map +1 -1
  147. package/dist/ui/components/App.js +3266 -3263
  148. package/dist/ui/components/App.js.map +1 -1
  149. package/dist/ui/components/AuthScreen.js +22 -34
  150. package/dist/ui/components/AuthScreen.js.map +1 -1
  151. package/dist/ui/components/AuthWelcomeScreen.js +30 -24
  152. package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
  153. package/dist/ui/components/Breadcrumbs.js +53 -82
  154. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  155. package/dist/ui/components/CircularSelectInput.js +59 -67
  156. package/dist/ui/components/CircularSelectInput.js.map +1 -1
  157. package/dist/ui/components/ClipboardFileAutocomplete.js +78 -39
  158. package/dist/ui/components/ClipboardFileAutocomplete.js.map +1 -1
  159. package/dist/ui/components/CodeBlock.js +24 -42
  160. package/dist/ui/components/CodeBlock.js.map +1 -1
  161. package/dist/ui/components/ConfigViewer.js +18 -25
  162. package/dist/ui/components/ConfigViewer.js.map +1 -1
  163. package/dist/ui/components/ConfirmPrompt.js +49 -71
  164. package/dist/ui/components/ConfirmPrompt.js.map +1 -1
  165. package/dist/ui/components/ConnectionStatusMessage.js +32 -83
  166. package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
  167. package/dist/ui/components/ContextWindowIndicator.js +34 -49
  168. package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
  169. package/dist/ui/components/DetailedPlanReviewScreen.js +104 -106
  170. package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
  171. package/dist/ui/components/DiffViewer.js +68 -121
  172. package/dist/ui/components/DiffViewer.js.map +1 -1
  173. package/dist/ui/components/ErrorBoundary.js +40 -48
  174. package/dist/ui/components/ErrorBoundary.js.map +1 -1
  175. package/dist/ui/components/FileCreationPreview.js +29 -60
  176. package/dist/ui/components/FileCreationPreview.js.map +1 -1
  177. package/dist/ui/components/FileOperation.js +34 -29
  178. package/dist/ui/components/FileOperation.js.map +1 -1
  179. package/dist/ui/components/FileTagAutocomplete.js +55 -25
  180. package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
  181. package/dist/ui/components/FontRecommendation.js.map +1 -1
  182. package/dist/ui/components/GitDiffBreadcrumb.js +29 -0
  183. package/dist/ui/components/GitDiffBreadcrumb.js.map +1 -0
  184. package/dist/ui/components/InputBox.js +1620 -2150
  185. package/dist/ui/components/InputBox.js.map +1 -1
  186. package/dist/ui/components/InteractiveShell.js +234 -352
  187. package/dist/ui/components/InteractiveShell.js.map +1 -1
  188. package/dist/ui/components/KeyboardHelp.js +34 -35
  189. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  190. package/dist/ui/components/LoadingIndicator.js +22 -25
  191. package/dist/ui/components/LoadingIndicator.js.map +1 -1
  192. package/dist/ui/components/MCPAddScreen.js +40 -51
  193. package/dist/ui/components/MCPAddScreen.js.map +1 -1
  194. package/dist/ui/components/MCPListScreen.js +40 -48
  195. package/dist/ui/components/MCPListScreen.js.map +1 -1
  196. package/dist/ui/components/MCPServerListScreen.js +49 -56
  197. package/dist/ui/components/MCPServerListScreen.js.map +1 -1
  198. package/dist/ui/components/MarkdownRenderer.js +69 -96
  199. package/dist/ui/components/MarkdownRenderer.js.map +1 -1
  200. package/dist/ui/components/MessageBox.js +66 -48
  201. package/dist/ui/components/MessageBox.js.map +1 -1
  202. package/dist/ui/components/MessageDisplay.js +150 -142
  203. package/dist/ui/components/MessageDisplay.js.map +1 -1
  204. package/dist/ui/components/MonitorModeAIPanel.js +46 -65
  205. package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
  206. package/dist/ui/components/MultiLineInput.js +243 -277
  207. package/dist/ui/components/MultiLineInput.js.map +1 -1
  208. package/dist/ui/components/PasswordPrompt.js +37 -18
  209. package/dist/ui/components/PasswordPrompt.js.map +1 -1
  210. package/dist/ui/components/PlanAcceptedMessage.js +27 -38
  211. package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
  212. package/dist/ui/components/PlanReviewScreen.js +46 -50
  213. package/dist/ui/components/PlanReviewScreen.js.map +1 -1
  214. package/dist/ui/components/RulesEditorScreen.js +81 -0
  215. package/dist/ui/components/RulesEditorScreen.js.map +1 -0
  216. package/dist/ui/components/SelectPrompt.js +19 -8
  217. package/dist/ui/components/SelectPrompt.js.map +1 -1
  218. package/dist/ui/components/ShimmerText.js +44 -0
  219. package/dist/ui/components/ShimmerText.js.map +1 -0
  220. package/dist/ui/components/SlashCommandAutocomplete.js +49 -22
  221. package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
  222. package/dist/ui/components/StatusBar.js +56 -87
  223. package/dist/ui/components/StatusBar.js.map +1 -1
  224. package/dist/ui/components/StreamingMessageDisplay.js +116 -99
  225. package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
  226. package/dist/ui/components/TaskCompletedMessage.js +28 -23
  227. package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
  228. package/dist/ui/components/TaskProgressIndicator.js +44 -70
  229. package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
  230. package/dist/ui/components/ThinkingDisplay.js +44 -41
  231. package/dist/ui/components/ThinkingDisplay.js.map +1 -1
  232. package/dist/ui/components/ToolExecutionMessage.js +772 -1326
  233. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  234. package/dist/ui/components/ToolExecutionStatus.js +53 -84
  235. package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
  236. package/dist/ui/components/ToolResult.js +22 -15
  237. package/dist/ui/components/ToolResult.js.map +1 -1
  238. package/dist/ui/components/VersionUpdatePrompt.js +88 -120
  239. package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
  240. package/dist/ui/components/WelcomeBanner.js +176 -26
  241. package/dist/ui/components/WelcomeBanner.js.map +1 -1
  242. package/dist/ui/components/WorkflowCreatorScreen.js +94 -161
  243. package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
  244. package/dist/utils/ansi-encoder.js +30 -61
  245. package/dist/utils/ansi-encoder.js.map +1 -1
  246. package/dist/utils/chat-formatter.js +327 -305
  247. package/dist/utils/chat-formatter.js.map +1 -1
  248. package/dist/utils/command-history.js +152 -174
  249. package/dist/utils/command-history.js.map +1 -1
  250. package/dist/utils/context-sanitizer.js +49 -112
  251. package/dist/utils/context-sanitizer.js.map +1 -1
  252. package/dist/utils/conversation-logger.js +292 -324
  253. package/dist/utils/conversation-logger.js.map +1 -1
  254. package/dist/utils/custom-commands-manager.js +126 -131
  255. package/dist/utils/custom-commands-manager.js.map +1 -1
  256. package/dist/utils/editor-utils.js +732 -837
  257. package/dist/utils/editor-utils.js.map +1 -1
  258. package/dist/utils/file.js +174 -213
  259. package/dist/utils/file.js.map +1 -1
  260. package/dist/utils/git-stats.js +169 -0
  261. package/dist/utils/git-stats.js.map +1 -0
  262. package/dist/utils/input-classifier.js +960 -482
  263. package/dist/utils/input-classifier.js.map +1 -1
  264. package/dist/utils/logger.js +48 -73
  265. package/dist/utils/logger.js.map +1 -1
  266. package/dist/utils/markdown-parser.js +277 -310
  267. package/dist/utils/markdown-parser.js.map +1 -1
  268. package/dist/utils/rule-reference-resolver.js +54 -0
  269. package/dist/utils/rule-reference-resolver.js.map +1 -0
  270. package/dist/utils/shell.js +144 -156
  271. package/dist/utils/shell.js.map +1 -1
  272. package/dist/utils/state.js +23 -22
  273. package/dist/utils/state.js.map +1 -1
  274. package/dist/utils/syntax-checker.js +279 -327
  275. package/dist/utils/syntax-checker.js.map +1 -1
  276. package/dist/utils/terminal-output.js +199 -302
  277. package/dist/utils/terminal-output.js.map +1 -1
  278. package/dist/utils/text-clipboard.js +47 -70
  279. package/dist/utils/text-clipboard.js.map +1 -1
  280. package/dist/utils/unicode-sanitizer.js +134 -197
  281. package/dist/utils/unicode-sanitizer.js.map +1 -1
  282. package/dist/utils/version-checker.js +46 -56
  283. package/dist/utils/version-checker.js.map +1 -1
  284. package/package.json +6 -4
  285. package/dist/ai/types.d.ts +0 -20
  286. package/dist/ai/types.d.ts.map +0 -1
  287. package/dist/cli-adapter.d.ts +0 -514
  288. package/dist/cli-adapter.d.ts.map +0 -1
  289. package/dist/commands/CommandParser.d.ts +0 -27
  290. package/dist/commands/CommandParser.d.ts.map +0 -1
  291. package/dist/config/build-config.d.ts +0 -42
  292. package/dist/config/build-config.d.ts.map +0 -1
  293. package/dist/config/defaultConfig.d.ts +0 -79
  294. package/dist/config/defaultConfig.d.ts.map +0 -1
  295. package/dist/config/manager.d.ts +0 -62
  296. package/dist/config/manager.d.ts.map +0 -1
  297. package/dist/config/mcp-config-manager.d.ts +0 -79
  298. package/dist/config/mcp-config-manager.d.ts.map +0 -1
  299. package/dist/config/models.d.ts +0 -83
  300. package/dist/config/models.d.ts.map +0 -1
  301. package/dist/config/slash-commands.d.ts +0 -23
  302. package/dist/config/slash-commands.d.ts.map +0 -1
  303. package/dist/config/types.d.ts +0 -35
  304. package/dist/config/types.d.ts.map +0 -1
  305. package/dist/context/command-detector.d.ts +0 -50
  306. package/dist/context/command-detector.d.ts.map +0 -1
  307. package/dist/context/context-manager.d.ts +0 -157
  308. package/dist/context/context-manager.d.ts.map +0 -1
  309. package/dist/context/handlers/docker-handler.d.ts +0 -130
  310. package/dist/context/handlers/docker-handler.d.ts.map +0 -1
  311. package/dist/context/handlers/ssh-handler.d.ts +0 -201
  312. package/dist/context/handlers/ssh-handler.d.ts.map +0 -1
  313. package/dist/context/handlers/wsl-handler.d.ts +0 -146
  314. package/dist/context/handlers/wsl-handler.d.ts.map +0 -1
  315. package/dist/context/index.d.ts +0 -8
  316. package/dist/context/index.d.ts.map +0 -1
  317. package/dist/context/subshell-handler.d.ts +0 -165
  318. package/dist/context/subshell-handler.d.ts.map +0 -1
  319. package/dist/context/types.d.ts +0 -70
  320. package/dist/context/types.d.ts.map +0 -1
  321. package/dist/hooks/useConnectivity.d.ts +0 -2
  322. package/dist/hooks/useConnectivity.d.ts.map +0 -1
  323. package/dist/hooks/useTerminalDimensions.d.ts +0 -41
  324. package/dist/hooks/useTerminalDimensions.d.ts.map +0 -1
  325. package/dist/index.d.ts +0 -9
  326. package/dist/index.d.ts.map +0 -1
  327. package/dist/mcp/mcp-command-handler.d.ts +0 -47
  328. package/dist/mcp/mcp-command-handler.d.ts.map +0 -1
  329. package/dist/mcp/mcp-server-manager.d.ts +0 -30
  330. package/dist/mcp/mcp-server-manager.d.ts.map +0 -1
  331. package/dist/mcp/mcp-tool-wrapper.d.ts +0 -12
  332. package/dist/mcp/mcp-tool-wrapper.d.ts.map +0 -1
  333. package/dist/services/ai-autocomplete-agent.d.ts +0 -39
  334. package/dist/services/ai-autocomplete-agent.d.ts.map +0 -1
  335. package/dist/services/ai-context-injector.d.ts +0 -41
  336. package/dist/services/ai-context-injector.d.ts.map +0 -1
  337. package/dist/services/ai-service-client.d.ts +0 -128
  338. package/dist/services/ai-service-client.d.ts.map +0 -1
  339. package/dist/services/api-client.d.ts +0 -353
  340. package/dist/services/api-client.d.ts.map +0 -1
  341. package/dist/services/auth-handler.d.ts +0 -30
  342. package/dist/services/auth-handler.d.ts.map +0 -1
  343. package/dist/services/background-task-manager.d.ts +0 -114
  344. package/dist/services/background-task-manager.d.ts.map +0 -1
  345. package/dist/services/checkpoint-manager.d.ts +0 -204
  346. package/dist/services/checkpoint-manager.d.ts.map +0 -1
  347. package/dist/services/clipboard-service.d.ts +0 -37
  348. package/dist/services/clipboard-service.d.ts.map +0 -1
  349. package/dist/services/connectivity-manager.d.ts +0 -18
  350. package/dist/services/connectivity-manager.d.ts.map +0 -1
  351. package/dist/services/conversation-manager.d.ts +0 -73
  352. package/dist/services/conversation-manager.d.ts.map +0 -1
  353. package/dist/services/environment-context-injector.d.ts +0 -69
  354. package/dist/services/environment-context-injector.d.ts.map +0 -1
  355. package/dist/services/fast-context-agent.d.ts +0 -12
  356. package/dist/services/fast-context-agent.d.ts.map +0 -1
  357. package/dist/services/input-detection-agent.d.ts +0 -40
  358. package/dist/services/input-detection-agent.d.ts.map +0 -1
  359. package/dist/services/input-requirement-detector.d.ts +0 -28
  360. package/dist/services/input-requirement-detector.d.ts.map +0 -1
  361. package/dist/services/local-chat-storage.d.ts +0 -182
  362. package/dist/services/local-chat-storage.d.ts.map +0 -1
  363. package/dist/services/monitored-shell-manager.d.ts +0 -120
  364. package/dist/services/monitored-shell-manager.d.ts.map +0 -1
  365. package/dist/services/ollama-service.d.ts +0 -197
  366. package/dist/services/ollama-service.d.ts.map +0 -1
  367. package/dist/services/session-quota-manager.d.ts +0 -101
  368. package/dist/services/session-quota-manager.d.ts.map +0 -1
  369. package/dist/services/shell-input-agent.d.ts +0 -89
  370. package/dist/services/shell-input-agent.d.ts.map +0 -1
  371. package/dist/services/sub-agent-manager.d.ts +0 -140
  372. package/dist/services/sub-agent-manager.d.ts.map +0 -1
  373. package/dist/services/warpify-detector.d.ts +0 -43
  374. package/dist/services/warpify-detector.d.ts.map +0 -1
  375. package/dist/services/workflow-storage.d.ts +0 -72
  376. package/dist/services/workflow-storage.d.ts.map +0 -1
  377. package/dist/test-ssh-handler.d.ts +0 -8
  378. package/dist/test-ssh-handler.d.ts.map +0 -1
  379. package/dist/tools/background-command.d.ts +0 -11
  380. package/dist/tools/background-command.d.ts.map +0 -1
  381. package/dist/tools/command.d.ts +0 -3
  382. package/dist/tools/command.d.ts.map +0 -1
  383. package/dist/tools/create-image.d.ts +0 -10
  384. package/dist/tools/create-image.d.ts.map +0 -1
  385. package/dist/tools/enter-remote-session.d.ts +0 -48
  386. package/dist/tools/enter-remote-session.d.ts.map +0 -1
  387. package/dist/tools/fast-context.d.ts +0 -3
  388. package/dist/tools/fast-context.d.ts.map +0 -1
  389. package/dist/tools/file-ops.d.ts +0 -7
  390. package/dist/tools/file-ops.d.ts.map +0 -1
  391. package/dist/tools/find-files.d.ts +0 -49
  392. package/dist/tools/find-files.d.ts.map +0 -1
  393. package/dist/tools/get-diff.d.ts +0 -14
  394. package/dist/tools/get-diff.d.ts.map +0 -1
  395. package/dist/tools/grep-search.d.ts +0 -155
  396. package/dist/tools/grep-search.d.ts.map +0 -1
  397. package/dist/tools/inspect-symbol.d.ts +0 -32
  398. package/dist/tools/inspect-symbol.d.ts.map +0 -1
  399. package/dist/tools/plan-mode.d.ts +0 -140
  400. package/dist/tools/plan-mode.d.ts.map +0 -1
  401. package/dist/tools/read-binary-file.d.ts +0 -10
  402. package/dist/tools/read-binary-file.d.ts.map +0 -1
  403. package/dist/tools/registry.d.ts +0 -31
  404. package/dist/tools/registry.d.ts.map +0 -1
  405. package/dist/tools/reproduce_issue.d.ts +0 -2
  406. package/dist/tools/reproduce_issue.d.ts.map +0 -1
  407. package/dist/tools/sub-agent.d.ts +0 -9
  408. package/dist/tools/sub-agent.d.ts.map +0 -1
  409. package/dist/tools/task-complete.d.ts +0 -3
  410. package/dist/tools/task-complete.d.ts.map +0 -1
  411. package/dist/tools/types.d.ts +0 -40
  412. package/dist/tools/types.d.ts.map +0 -1
  413. package/dist/tools/validation.d.ts +0 -47
  414. package/dist/tools/validation.d.ts.map +0 -1
  415. package/dist/tools/web-search.d.ts +0 -24
  416. package/dist/tools/web-search.d.ts.map +0 -1
  417. package/dist/tools/workflow-tool.d.ts +0 -11
  418. package/dist/tools/workflow-tool.d.ts.map +0 -1
  419. package/dist/types/index.d.ts +0 -123
  420. package/dist/types/index.d.ts.map +0 -1
  421. package/dist/types/workflow.d.ts +0 -110
  422. package/dist/types/workflow.d.ts.map +0 -1
  423. package/dist/ui/components/AgentTimer.d.ts +0 -7
  424. package/dist/ui/components/AgentTimer.d.ts.map +0 -1
  425. package/dist/ui/components/App.d.ts +0 -197
  426. package/dist/ui/components/App.d.ts.map +0 -1
  427. package/dist/ui/components/AuthScreen.d.ts +0 -8
  428. package/dist/ui/components/AuthScreen.d.ts.map +0 -1
  429. package/dist/ui/components/AuthWelcomeScreen.d.ts +0 -8
  430. package/dist/ui/components/AuthWelcomeScreen.d.ts.map +0 -1
  431. package/dist/ui/components/Breadcrumbs.d.ts +0 -13
  432. package/dist/ui/components/Breadcrumbs.d.ts.map +0 -1
  433. package/dist/ui/components/CircularSelectInput.d.ts +0 -24
  434. package/dist/ui/components/CircularSelectInput.d.ts.map +0 -1
  435. package/dist/ui/components/ClipboardFileAutocomplete.d.ts +0 -10
  436. package/dist/ui/components/ClipboardFileAutocomplete.d.ts.map +0 -1
  437. package/dist/ui/components/CodeBlock.d.ts +0 -9
  438. package/dist/ui/components/CodeBlock.d.ts.map +0 -1
  439. package/dist/ui/components/ConfigViewer.d.ts +0 -11
  440. package/dist/ui/components/ConfigViewer.d.ts.map +0 -1
  441. package/dist/ui/components/ConfirmPrompt.d.ts +0 -13
  442. package/dist/ui/components/ConfirmPrompt.d.ts.map +0 -1
  443. package/dist/ui/components/ConnectionStatusMessage.d.ts +0 -17
  444. package/dist/ui/components/ConnectionStatusMessage.d.ts.map +0 -1
  445. package/dist/ui/components/ContextWindowIndicator.d.ts +0 -8
  446. package/dist/ui/components/ContextWindowIndicator.d.ts.map +0 -1
  447. package/dist/ui/components/DetailedPlanReviewScreen.d.ts +0 -17
  448. package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +0 -1
  449. package/dist/ui/components/DiffViewer.d.ts +0 -9
  450. package/dist/ui/components/DiffViewer.d.ts.map +0 -1
  451. package/dist/ui/components/ErrorBoundary.d.ts +0 -17
  452. package/dist/ui/components/ErrorBoundary.d.ts.map +0 -1
  453. package/dist/ui/components/FileCreationPreview.d.ts +0 -8
  454. package/dist/ui/components/FileCreationPreview.d.ts.map +0 -1
  455. package/dist/ui/components/FileOperation.d.ts +0 -10
  456. package/dist/ui/components/FileOperation.d.ts.map +0 -1
  457. package/dist/ui/components/FileTagAutocomplete.d.ts +0 -11
  458. package/dist/ui/components/FileTagAutocomplete.d.ts.map +0 -1
  459. package/dist/ui/components/FontRecommendation.d.ts +0 -1
  460. package/dist/ui/components/FontRecommendation.d.ts.map +0 -1
  461. package/dist/ui/components/InputBox.d.ts +0 -42
  462. package/dist/ui/components/InputBox.d.ts.map +0 -1
  463. package/dist/ui/components/InteractiveShell.d.ts +0 -30
  464. package/dist/ui/components/InteractiveShell.d.ts.map +0 -1
  465. package/dist/ui/components/KeyboardHelp.d.ts +0 -7
  466. package/dist/ui/components/KeyboardHelp.d.ts.map +0 -1
  467. package/dist/ui/components/LoadingIndicator.d.ts +0 -3
  468. package/dist/ui/components/LoadingIndicator.d.ts.map +0 -1
  469. package/dist/ui/components/MCPAddScreen.d.ts +0 -13
  470. package/dist/ui/components/MCPAddScreen.d.ts.map +0 -1
  471. package/dist/ui/components/MCPListScreen.d.ts +0 -17
  472. package/dist/ui/components/MCPListScreen.d.ts.map +0 -1
  473. package/dist/ui/components/MCPServerListScreen.d.ts +0 -16
  474. package/dist/ui/components/MCPServerListScreen.d.ts.map +0 -1
  475. package/dist/ui/components/MarkdownRenderer.d.ts +0 -8
  476. package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
  477. package/dist/ui/components/MessageBox.d.ts +0 -10
  478. package/dist/ui/components/MessageBox.d.ts.map +0 -1
  479. package/dist/ui/components/MessageDisplay.d.ts +0 -14
  480. package/dist/ui/components/MessageDisplay.d.ts.map +0 -1
  481. package/dist/ui/components/MonitorModeAIPanel.d.ts +0 -23
  482. package/dist/ui/components/MonitorModeAIPanel.d.ts.map +0 -1
  483. package/dist/ui/components/MultiLineInput.d.ts +0 -13
  484. package/dist/ui/components/MultiLineInput.d.ts.map +0 -1
  485. package/dist/ui/components/PasswordPrompt.d.ts +0 -9
  486. package/dist/ui/components/PasswordPrompt.d.ts.map +0 -1
  487. package/dist/ui/components/PlanAcceptedMessage.d.ts +0 -20
  488. package/dist/ui/components/PlanAcceptedMessage.d.ts.map +0 -1
  489. package/dist/ui/components/PlanReviewScreen.d.ts +0 -14
  490. package/dist/ui/components/PlanReviewScreen.d.ts.map +0 -1
  491. package/dist/ui/components/SelectPrompt.d.ts +0 -12
  492. package/dist/ui/components/SelectPrompt.d.ts.map +0 -1
  493. package/dist/ui/components/SlashCommandAutocomplete.d.ts +0 -13
  494. package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +0 -1
  495. package/dist/ui/components/StatusBar.d.ts +0 -14
  496. package/dist/ui/components/StatusBar.d.ts.map +0 -1
  497. package/dist/ui/components/StreamingMessageDisplay.d.ts +0 -15
  498. package/dist/ui/components/StreamingMessageDisplay.d.ts.map +0 -1
  499. package/dist/ui/components/TaskCompletedMessage.d.ts +0 -14
  500. package/dist/ui/components/TaskCompletedMessage.d.ts.map +0 -1
  501. package/dist/ui/components/TaskProgressIndicator.d.ts +0 -18
  502. package/dist/ui/components/TaskProgressIndicator.d.ts.map +0 -1
  503. package/dist/ui/components/ThinkingDisplay.d.ts +0 -15
  504. package/dist/ui/components/ThinkingDisplay.d.ts.map +0 -1
  505. package/dist/ui/components/ToolExecutionMessage.d.ts +0 -8
  506. package/dist/ui/components/ToolExecutionMessage.d.ts.map +0 -1
  507. package/dist/ui/components/ToolExecutionStatus.d.ts +0 -10
  508. package/dist/ui/components/ToolExecutionStatus.d.ts.map +0 -1
  509. package/dist/ui/components/ToolResult.d.ts +0 -10
  510. package/dist/ui/components/ToolResult.d.ts.map +0 -1
  511. package/dist/ui/components/VersionUpdatePrompt.d.ts +0 -9
  512. package/dist/ui/components/VersionUpdatePrompt.d.ts.map +0 -1
  513. package/dist/ui/components/WelcomeBanner.d.ts +0 -3
  514. package/dist/ui/components/WelcomeBanner.d.ts.map +0 -1
  515. package/dist/ui/components/WorkflowCreatorScreen.d.ts +0 -25
  516. package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +0 -1
  517. package/dist/utils/ansi-encoder.d.ts +0 -7
  518. package/dist/utils/ansi-encoder.d.ts.map +0 -1
  519. package/dist/utils/chat-formatter.d.ts +0 -12
  520. package/dist/utils/chat-formatter.d.ts.map +0 -1
  521. package/dist/utils/command-history.d.ts +0 -24
  522. package/dist/utils/command-history.d.ts.map +0 -1
  523. package/dist/utils/context-sanitizer.d.ts +0 -50
  524. package/dist/utils/context-sanitizer.d.ts.map +0 -1
  525. package/dist/utils/conversation-logger.d.ts +0 -142
  526. package/dist/utils/conversation-logger.d.ts.map +0 -1
  527. package/dist/utils/custom-commands-manager.d.ts +0 -59
  528. package/dist/utils/custom-commands-manager.d.ts.map +0 -1
  529. package/dist/utils/editor-utils.d.ts +0 -101
  530. package/dist/utils/editor-utils.d.ts.map +0 -1
  531. package/dist/utils/file.d.ts +0 -61
  532. package/dist/utils/file.d.ts.map +0 -1
  533. package/dist/utils/input-classifier.d.ts +0 -25
  534. package/dist/utils/input-classifier.d.ts.map +0 -1
  535. package/dist/utils/logger.d.ts +0 -17
  536. package/dist/utils/logger.d.ts.map +0 -1
  537. package/dist/utils/markdown-parser.d.ts +0 -60
  538. package/dist/utils/markdown-parser.d.ts.map +0 -1
  539. package/dist/utils/shell.d.ts +0 -47
  540. package/dist/utils/shell.d.ts.map +0 -1
  541. package/dist/utils/state.d.ts +0 -13
  542. package/dist/utils/state.d.ts.map +0 -1
  543. package/dist/utils/syntax-checker.d.ts +0 -24
  544. package/dist/utils/syntax-checker.d.ts.map +0 -1
  545. package/dist/utils/terminal-output.d.ts +0 -25
  546. package/dist/utils/terminal-output.d.ts.map +0 -1
  547. package/dist/utils/text-clipboard.d.ts +0 -12
  548. package/dist/utils/text-clipboard.d.ts.map +0 -1
  549. package/dist/utils/unicode-sanitizer.d.ts +0 -44
  550. package/dist/utils/unicode-sanitizer.d.ts.map +0 -1
  551. package/dist/utils/version-checker.d.ts +0 -14
  552. package/dist/utils/version-checker.d.ts.map +0 -1
@@ -1,534 +1,490 @@
1
- /**
2
- * Plan Mode - Structured Task Planning and Execution
3
- * Enables AI to create structured plans with hierarchical tasks and track completion
4
- *
5
- * Enhanced Features:
6
- * - Hierarchical tasks with subtasks (e.g., Task 1 -> 1.1, 1.2, 1.3)
7
- * - Design summary for context understanding
8
- * - Phased execution (one task at a time)
9
- * - Subtask-level completion tracking
10
- */
11
- // ============================================================================
12
- // STATE
13
- // ============================================================================
14
- // In-memory plan state
15
1
  let currentPlan = null;
16
- // ============================================================================
17
- // TOOLS
18
- // ============================================================================
19
- /**
20
- * Create Plan Tool
21
- * AI uses this to generate a structured plan with hierarchical tasks
22
- */
23
- export const createPlanTool = {
24
- schema: {
25
- name: 'create_plan',
26
- description: `Use this tool when in planning mode to create a detailed implementation plan.
27
- This will present the plan to the user for review and approval before execution begins.
28
-
29
- The plan should include:
30
- 1. A clear title describing what will be accomplished
31
- 2. A detailed design summary explaining your understanding of the codebase and approach
32
- 3. A brief summary of the overall approach
33
- 4. A numbered list of main tasks, each optionally containing subtasks
34
-
35
- IMPORTANT: Only use this tool when in planning mode. Each task should be:
36
- - Specific and actionable
37
- - Can have subtasks for more granular steps
38
- - Ordered in a logical sequence
39
-
40
- Example structure:
41
- - Task 1: Set up core infrastructure
42
- - 1.1: Create directory structure
43
- - 1.2: Define TypeScript interfaces
44
- - Task 2: Implement main feature
45
- - 2.1: Create component files
2
+ const createPlanTool = {
3
+ schema: {
4
+ name: "create_plan",
5
+ description: `Use this tool when in planning mode to create a detailed implementation plan.
6
+ This will present the plan to the user for review and approval before execution begins.
7
+
8
+ The plan should include:
9
+ 1. A clear title describing what will be accomplished
10
+ 2. A detailed design summary explaining your understanding of the codebase and approach
11
+ 3. A brief summary of the overall approach
12
+ 4. A numbered list of main tasks, each optionally containing subtasks
13
+
14
+ IMPORTANT: Only use this tool when in planning mode. Each task should be:
15
+ - Specific and actionable
16
+ - Can have subtasks for more granular steps
17
+ - Ordered in a logical sequence
18
+
19
+ Example structure:
20
+ - Task 1: Set up core infrastructure
21
+ - 1.1: Create directory structure
22
+ - 1.2: Define TypeScript interfaces
23
+ - Task 2: Implement main feature
24
+ - 2.1: Create component files
46
25
  - 2.2: Add unit tests`,
47
- parameters: {
48
- type: 'object',
26
+ parameters: {
27
+ type: "object",
28
+ properties: {
29
+ title: {
30
+ type: "string",
31
+ description: "A clear, concise title for the plan"
32
+ },
33
+ designSummary: {
34
+ type: "string",
35
+ description: "Detailed understanding of the codebase and how the changes will be implemented. Include architecture decisions, file structure understanding, and implementation approach."
36
+ },
37
+ summary: {
38
+ type: "string",
39
+ description: "Brief 1-2 sentence summary of the overall approach"
40
+ },
41
+ tasks: {
42
+ type: "array",
43
+ items: {
44
+ type: "object",
49
45
  properties: {
50
- title: {
51
- type: 'string',
52
- description: 'A clear, concise title for the plan'
53
- },
54
- designSummary: {
55
- type: 'string',
56
- description: 'Detailed understanding of the codebase and how the changes will be implemented. Include architecture decisions, file structure understanding, and implementation approach.'
57
- },
58
- summary: {
59
- type: 'string',
60
- description: 'Brief 1-2 sentence summary of the overall approach'
61
- },
62
- tasks: {
63
- type: 'array',
64
- items: {
65
- type: 'object',
66
- properties: {
67
- description: {
68
- type: 'string',
69
- description: 'Clear description of what this main task accomplishes'
70
- },
71
- subtasks: {
72
- type: 'array',
73
- items: {
74
- type: 'object',
75
- properties: {
76
- description: {
77
- type: 'string',
78
- description: 'Specific subtask description'
79
- },
80
- requirements: {
81
- type: 'string',
82
- description: 'Optional traceability requirements'
83
- }
84
- },
85
- required: ['description']
86
- },
87
- description: 'Optional list of subtasks within this main task'
88
- },
89
- complexity: {
90
- type: 'string',
91
- enum: ['low', 'medium', 'high'],
92
- description: 'Estimated complexity of the task'
93
- },
94
- requirements: {
95
- type: 'string',
96
- description: 'Optional traceability requirements'
97
- }
98
- },
99
- required: ['description']
46
+ description: {
47
+ type: "string",
48
+ description: "Clear description of what this main task accomplishes"
49
+ },
50
+ subtasks: {
51
+ type: "array",
52
+ items: {
53
+ type: "object",
54
+ properties: {
55
+ description: {
56
+ type: "string",
57
+ description: "Specific subtask description"
100
58
  },
101
- description: 'List of main tasks to execute, in order'
102
- }
59
+ requirements: {
60
+ type: "string",
61
+ description: "Optional traceability requirements"
62
+ }
63
+ },
64
+ required: ["description"]
65
+ },
66
+ description: "Optional list of subtasks within this main task"
67
+ },
68
+ complexity: {
69
+ type: "string",
70
+ enum: ["low", "medium", "high"],
71
+ description: "Estimated complexity of the task"
72
+ },
73
+ requirements: {
74
+ type: "string",
75
+ description: "Optional traceability requirements"
76
+ }
103
77
  },
104
- required: ['title', 'summary', 'tasks']
78
+ required: ["description"]
79
+ },
80
+ description: "List of main tasks to execute, in order"
105
81
  }
106
- },
107
- async execute(args, context) {
108
- const title = args.title;
109
- const designSummary = args.designSummary || '';
110
- const summary = args.summary;
111
- const tasks = args.tasks;
112
- if (!title || title.trim().length === 0) {
113
- throw new Error('Plan title cannot be empty');
114
- }
115
- if (!tasks || tasks.length === 0) {
116
- throw new Error('Plan must have at least one task');
117
- }
118
- // Create the plan object with hierarchical structure
119
- const plan = {
120
- title: title.trim(),
121
- designSummary: designSummary?.trim() || '',
122
- summary: summary?.trim() || '',
123
- steps: tasks.map((task, taskIndex) => ({
124
- id: `task_${taskIndex + 1}`,
125
- description: task.description.trim(),
126
- subtasks: (task.subtasks || []).map((subtask, subtaskIndex) => ({
127
- id: `${taskIndex + 1}.${subtaskIndex + 1}`,
128
- description: subtask.description.trim(),
129
- status: 'pending',
130
- requirements: subtask.requirements?.trim()
131
- })),
132
- status: 'pending',
133
- estimatedComplexity: task.complexity,
134
- requirements: task.requirements?.trim()
135
- })),
136
- createdAt: new Date(),
137
- approved: false,
138
- isActive: false,
139
- currentTaskIndex: 0,
140
- currentSubtaskIndex: -1
141
- };
142
- currentPlan = plan;
143
- // Return confirmation - the UI will handle displaying the plan
144
- return `PLAN_CREATED:${JSON.stringify(plan)}`;
82
+ },
83
+ required: ["title", "summary", "tasks"]
84
+ }
85
+ },
86
+ async execute(args, context) {
87
+ const title = args.title;
88
+ const designSummary = args.designSummary || "";
89
+ const summary = args.summary;
90
+ const tasks = args.tasks;
91
+ if (!title || title.trim().length === 0) {
92
+ throw new Error("Plan title cannot be empty");
145
93
  }
94
+ if (!tasks || tasks.length === 0) {
95
+ throw new Error("Plan must have at least one task");
96
+ }
97
+ const plan = {
98
+ title: title.trim(),
99
+ designSummary: designSummary?.trim() || "",
100
+ summary: summary?.trim() || "",
101
+ steps: tasks.map((task, taskIndex) => ({
102
+ id: `task_${taskIndex + 1}`,
103
+ description: task.description.trim(),
104
+ subtasks: (task.subtasks || []).map((subtask, subtaskIndex) => ({
105
+ id: `${taskIndex + 1}.${subtaskIndex + 1}`,
106
+ description: subtask.description.trim(),
107
+ status: "pending",
108
+ requirements: subtask.requirements?.trim()
109
+ })),
110
+ status: "pending",
111
+ estimatedComplexity: task.complexity,
112
+ requirements: task.requirements?.trim()
113
+ })),
114
+ createdAt: /* @__PURE__ */ new Date(),
115
+ approved: false,
116
+ isActive: false,
117
+ currentTaskIndex: 0,
118
+ currentSubtaskIndex: -1
119
+ };
120
+ currentPlan = plan;
121
+ return `PLAN_CREATED:${JSON.stringify(plan)}`;
122
+ }
146
123
  };
147
- /**
148
- * Mark Task Complete Tool
149
- * AI uses this to mark individual tasks or subtasks as completed during execution
150
- */
151
- export const markTaskCompleteTool = {
152
- schema: {
153
- name: 'mark_task_complete',
154
- description: `Use this tool to mark a task or subtask as completed in the current plan.
155
- Call this after successfully completing each task/subtask in the plan.
156
-
157
- This will:
158
- 1. Update the task/subtask status to 'completed'
159
- 2. Show a completion message in the UI
160
- 3. Automatically advance to the next task/subtask
161
-
162
- You can mark:
163
- - A main task: task_number=2
164
- - A subtask: task_number="2.1" (marks subtask 1 of task 2)
165
-
166
- IMPORTANT:
167
- - Must have an active approved plan
168
- - Mark subtasks complete as you finish them
124
+ const markTaskCompleteTool = {
125
+ schema: {
126
+ name: "mark_task_complete",
127
+ description: `Use this tool to mark a task or subtask as completed in the current plan.
128
+ Call this after successfully completing each task/subtask in the plan.
129
+
130
+ This will:
131
+ 1. Update the task/subtask status to 'completed'
132
+ 2. Show a completion message in the UI
133
+ 3. Automatically advance to the next task/subtask
134
+
135
+ You can mark:
136
+ - A main task: task_number=2
137
+ - A subtask: task_number="2.1" (marks subtask 1 of task 2)
138
+
139
+ IMPORTANT:
140
+ - Must have an active approved plan
141
+ - Mark subtasks complete as you finish them
169
142
  - After marking the LAST task/subtask complete, output your summary then call task_complete to end the session`,
170
- parameters: {
171
- type: 'object',
172
- properties: {
173
- task_number: {
174
- type: 'string',
175
- description: 'The task number to mark complete. Use integer for main task (e.g., "2") or dot notation for subtask (e.g., "2.1")'
176
- },
177
- completion_note: {
178
- type: 'string',
179
- description: 'Optional note about what was accomplished'
180
- }
181
- },
182
- required: ['task_number']
183
- }
184
- },
185
- async execute(args, context) {
186
- if (!currentPlan) {
187
- throw new Error('No active plan. Create a plan first using create_plan.');
143
+ parameters: {
144
+ type: "object",
145
+ properties: {
146
+ task_number: {
147
+ type: "string",
148
+ description: 'The task number to mark complete. Use integer for main task (e.g., "2") or dot notation for subtask (e.g., "2.1")'
149
+ },
150
+ completion_note: {
151
+ type: "string",
152
+ description: "Optional note about what was accomplished"
188
153
  }
189
- if (!currentPlan.approved || !currentPlan.isActive) {
190
- throw new Error('Plan must be approved and active before marking tasks complete.');
191
- }
192
- const taskNumberStr = String(args.task_number);
193
- const completionNote = args.completion_note;
194
- // Parse task number - can be "2" or "2.1"
195
- const parts = taskNumberStr.split('.');
196
- const mainTaskNum = parseInt(parts[0], 10);
197
- const subtaskNum = parts.length > 1 ? parseInt(parts[1], 10) : null;
198
- if (isNaN(mainTaskNum) || mainTaskNum < 1 || mainTaskNum > currentPlan.steps.length) {
199
- throw new Error(`Invalid task number. Must be between 1 and ${currentPlan.steps.length}.`);
200
- }
201
- const taskIndex = mainTaskNum - 1;
202
- const task = currentPlan.steps[taskIndex];
203
- // Handle subtask completion
204
- if (subtaskNum !== null) {
205
- if (!task.subtasks || subtaskNum < 1 || subtaskNum > task.subtasks.length) {
206
- throw new Error(`Invalid subtask number. Task ${mainTaskNum} has ${task.subtasks?.length || 0} subtasks.`);
207
- }
208
- const subtaskIndex = subtaskNum - 1;
209
- const subtask = task.subtasks[subtaskIndex];
210
- if (subtask.status === 'completed') {
211
- return `Subtask ${taskNumberStr} is already marked as completed.`;
212
- }
213
- // Mark subtask complete
214
- subtask.status = 'completed';
215
- subtask.completedAt = new Date();
216
- // Check if all subtasks are complete, then mark main task as complete
217
- const allSubtasksComplete = task.subtasks.every(st => st.status === 'completed' || st.status === 'skipped');
218
- if (allSubtasksComplete) {
219
- task.status = 'completed';
220
- task.completedAt = new Date();
221
- }
222
- else {
223
- task.status = 'in_progress';
224
- }
225
- // Update current subtask index
226
- const nextPendingSubtaskIndex = task.subtasks.findIndex((st, idx) => idx > subtaskIndex && st.status === 'pending');
227
- currentPlan.currentSubtaskIndex = nextPendingSubtaskIndex;
228
- // Calculate progress
229
- const { completedCount, totalCount, allComplete } = calculateProgress();
230
- const result = {
231
- type: 'subtask',
232
- taskNumber: taskNumberStr,
233
- taskDescription: subtask.description,
234
- completionNote: completionNote || null,
235
- completedCount,
236
- totalCount,
237
- allComplete,
238
- nextSubtask: nextPendingSubtaskIndex !== -1 ? task.subtasks[nextPendingSubtaskIndex].description : null,
239
- mainTaskComplete: allSubtasksComplete
240
- };
241
- return `TASK_COMPLETED:${JSON.stringify(result)}`;
242
- }
243
- // Handle main task completion (mark all subtasks as complete too)
244
- if (task.status === 'completed') {
245
- return `Task ${mainTaskNum} is already marked as completed.`;
246
- }
247
- // Mark the main task and all its subtasks as complete
248
- task.status = 'completed';
249
- task.completedAt = new Date();
250
- task.subtasks.forEach(st => {
251
- if (st.status !== 'completed' && st.status !== 'skipped') {
252
- st.status = 'completed';
253
- st.completedAt = new Date();
254
- }
255
- });
256
- // Update current task index to next pending task
257
- const nextPendingIndex = currentPlan.steps.findIndex((step, idx) => idx > taskIndex && step.status === 'pending');
258
- if (nextPendingIndex !== -1) {
259
- currentPlan.currentTaskIndex = nextPendingIndex;
260
- currentPlan.currentSubtaskIndex = -1;
261
- }
262
- // Calculate progress
263
- const { completedCount, totalCount, allComplete } = calculateProgress();
264
- const result = {
265
- type: 'task',
266
- taskNumber: mainTaskNum,
267
- taskDescription: task.description,
268
- completionNote: completionNote || null,
269
- completedCount,
270
- totalCount,
271
- allComplete,
272
- nextTask: allComplete ? null : currentPlan.steps[currentPlan.currentTaskIndex]?.description
273
- };
274
- return `TASK_COMPLETED:${JSON.stringify(result)}`;
154
+ },
155
+ required: ["task_number"]
275
156
  }
276
- };
277
- // ============================================================================
278
- // HELPER FUNCTIONS
279
- // ============================================================================
280
- /**
281
- * Calculate overall progress including subtasks
282
- */
283
- function calculateProgress() {
157
+ },
158
+ async execute(args, context) {
284
159
  if (!currentPlan) {
285
- return { completedCount: 0, totalCount: 0, allComplete: false };
160
+ throw new Error("No active plan. Create a plan first using create_plan.");
286
161
  }
287
- let completedCount = 0;
288
- let totalCount = 0;
289
- currentPlan.steps.forEach(step => {
290
- if (step.subtasks.length > 0) {
291
- // Count subtasks
292
- totalCount += step.subtasks.length;
293
- completedCount += step.subtasks.filter(st => st.status === 'completed').length;
294
- }
295
- else {
296
- // Count the main task if no subtasks
297
- totalCount += 1;
298
- if (step.status === 'completed')
299
- completedCount += 1;
300
- }
162
+ if (!currentPlan.approved || !currentPlan.isActive) {
163
+ throw new Error("Plan must be approved and active before marking tasks complete.");
164
+ }
165
+ const taskNumberStr = String(args.task_number);
166
+ const completionNote = args.completion_note;
167
+ const parts = taskNumberStr.split(".");
168
+ const mainTaskNum = parseInt(parts[0], 10);
169
+ const subtaskNum = parts.length > 1 ? parseInt(parts[1], 10) : null;
170
+ if (isNaN(mainTaskNum) || mainTaskNum < 1 || mainTaskNum > currentPlan.steps.length) {
171
+ throw new Error(`Invalid task number. Must be between 1 and ${currentPlan.steps.length}.`);
172
+ }
173
+ const taskIndex = mainTaskNum - 1;
174
+ const task = currentPlan.steps[taskIndex];
175
+ if (subtaskNum !== null) {
176
+ if (!task.subtasks || subtaskNum < 1 || subtaskNum > task.subtasks.length) {
177
+ throw new Error(`Invalid subtask number. Task ${mainTaskNum} has ${task.subtasks?.length || 0} subtasks.`);
178
+ }
179
+ const subtaskIndex = subtaskNum - 1;
180
+ const subtask = task.subtasks[subtaskIndex];
181
+ if (subtask.status === "completed") {
182
+ return `Subtask ${taskNumberStr} is already marked as completed.`;
183
+ }
184
+ subtask.status = "completed";
185
+ subtask.completedAt = /* @__PURE__ */ new Date();
186
+ const allSubtasksComplete = task.subtasks.every((st) => st.status === "completed" || st.status === "skipped");
187
+ if (allSubtasksComplete) {
188
+ task.status = "completed";
189
+ task.completedAt = /* @__PURE__ */ new Date();
190
+ } else {
191
+ task.status = "in_progress";
192
+ }
193
+ const nextPendingSubtaskIndex = task.subtasks.findIndex(
194
+ (st, idx) => idx > subtaskIndex && st.status === "pending"
195
+ );
196
+ currentPlan.currentSubtaskIndex = nextPendingSubtaskIndex;
197
+ const { completedCount: completedCount2, totalCount: totalCount2, allComplete: allComplete2 } = calculateProgress();
198
+ const result2 = {
199
+ type: "subtask",
200
+ taskNumber: taskNumberStr,
201
+ taskDescription: subtask.description,
202
+ completionNote: completionNote || null,
203
+ completedCount: completedCount2,
204
+ totalCount: totalCount2,
205
+ allComplete: allComplete2,
206
+ nextSubtask: nextPendingSubtaskIndex !== -1 ? task.subtasks[nextPendingSubtaskIndex].description : null,
207
+ mainTaskComplete: allSubtasksComplete
208
+ };
209
+ return `TASK_COMPLETED:${JSON.stringify(result2)}`;
210
+ }
211
+ if (task.status === "completed") {
212
+ return `Task ${mainTaskNum} is already marked as completed.`;
213
+ }
214
+ task.status = "completed";
215
+ task.completedAt = /* @__PURE__ */ new Date();
216
+ task.subtasks.forEach((st) => {
217
+ if (st.status !== "completed" && st.status !== "skipped") {
218
+ st.status = "completed";
219
+ st.completedAt = /* @__PURE__ */ new Date();
220
+ }
301
221
  });
302
- return {
303
- completedCount,
304
- totalCount,
305
- allComplete: completedCount === totalCount && totalCount > 0
222
+ const nextPendingIndex = currentPlan.steps.findIndex(
223
+ (step, idx) => idx > taskIndex && step.status === "pending"
224
+ );
225
+ if (nextPendingIndex !== -1) {
226
+ currentPlan.currentTaskIndex = nextPendingIndex;
227
+ currentPlan.currentSubtaskIndex = -1;
228
+ }
229
+ const { completedCount, totalCount, allComplete } = calculateProgress();
230
+ const result = {
231
+ type: "task",
232
+ taskNumber: mainTaskNum,
233
+ taskDescription: task.description,
234
+ completionNote: completionNote || null,
235
+ completedCount,
236
+ totalCount,
237
+ allComplete,
238
+ nextTask: allComplete ? null : currentPlan.steps[currentPlan.currentTaskIndex]?.description
306
239
  };
240
+ return `TASK_COMPLETED:${JSON.stringify(result)}`;
241
+ }
242
+ };
243
+ function calculateProgress() {
244
+ if (!currentPlan) {
245
+ return { completedCount: 0, totalCount: 0, allComplete: false };
246
+ }
247
+ let completedCount = 0;
248
+ let totalCount = 0;
249
+ currentPlan.steps.forEach((step) => {
250
+ if (step.subtasks.length > 0) {
251
+ totalCount += step.subtasks.length;
252
+ completedCount += step.subtasks.filter((st) => st.status === "completed").length;
253
+ } else {
254
+ totalCount += 1;
255
+ if (step.status === "completed") completedCount += 1;
256
+ }
257
+ });
258
+ return {
259
+ completedCount,
260
+ totalCount,
261
+ allComplete: completedCount === totalCount && totalCount > 0
262
+ };
307
263
  }
308
- /**
309
- * Set the current plan (used by CLI adapter)
310
- */
311
- export function setPlan(plan) {
312
- currentPlan = plan;
264
+ function setPlan(plan) {
265
+ currentPlan = plan;
313
266
  }
314
- /**
315
- * Get the current plan
316
- */
317
- export function getCurrentPlan() {
318
- return currentPlan;
267
+ function getCurrentPlan() {
268
+ return currentPlan;
319
269
  }
320
- /**
321
- * Clear the current plan
322
- */
323
- export function clearPlan() {
324
- currentPlan = null;
270
+ function clearPlan() {
271
+ currentPlan = null;
325
272
  }
326
- /**
327
- * Approve the current plan and make it active
328
- */
329
- export function approvePlan() {
330
- if (currentPlan) {
331
- currentPlan.approved = true;
332
- currentPlan.isActive = true;
333
- currentPlan.currentTaskIndex = 0;
334
- currentPlan.currentSubtaskIndex = currentPlan.steps[0]?.subtasks?.length > 0 ? 0 : -1;
335
- }
336
- return currentPlan;
273
+ function approvePlan() {
274
+ if (currentPlan) {
275
+ currentPlan.approved = true;
276
+ currentPlan.isActive = true;
277
+ currentPlan.currentTaskIndex = 0;
278
+ currentPlan.currentSubtaskIndex = currentPlan.steps[0]?.subtasks?.length > 0 ? 0 : -1;
279
+ }
280
+ return currentPlan;
337
281
  }
338
- /**
339
- * Mark a task as complete by task number (for compatibility)
340
- */
341
- export function markTaskComplete(taskNumber) {
342
- if (!currentPlan || taskNumber < 1 || taskNumber > currentPlan.steps.length) {
343
- return null;
344
- }
345
- const task = currentPlan.steps[taskNumber - 1];
346
- task.status = 'completed';
347
- task.completedAt = new Date();
348
- // Also mark all subtasks as complete
349
- task.subtasks.forEach(st => {
350
- st.status = 'completed';
351
- st.completedAt = new Date();
352
- });
353
- return task;
354
- }
355
- /**
356
- * Get the current phase (task) with all its subtasks
357
- */
358
- export function getCurrentPhase() {
359
- if (!currentPlan || !currentPlan.isActive)
360
- return null;
361
- const taskIndex = currentPlan.currentTaskIndex;
362
- if (taskIndex < 0 || taskIndex >= currentPlan.steps.length)
363
- return null;
364
- const task = currentPlan.steps[taskIndex];
365
- if (task.status === 'completed') {
366
- // Find next pending task
367
- const nextIndex = currentPlan.steps.findIndex((step, idx) => idx > taskIndex && step.status === 'pending');
368
- if (nextIndex === -1)
369
- return null;
370
- return { taskNumber: nextIndex + 1, task: currentPlan.steps[nextIndex] };
371
- }
372
- return { taskNumber: taskIndex + 1, task };
282
+ function markTaskComplete(taskNumber) {
283
+ if (!currentPlan || taskNumber < 1 || taskNumber > currentPlan.steps.length) {
284
+ return null;
285
+ }
286
+ const task = currentPlan.steps[taskNumber - 1];
287
+ task.status = "completed";
288
+ task.completedAt = /* @__PURE__ */ new Date();
289
+ task.subtasks.forEach((st) => {
290
+ st.status = "completed";
291
+ st.completedAt = /* @__PURE__ */ new Date();
292
+ });
293
+ return task;
373
294
  }
374
- /**
375
- * Advance to the next phase after current task is complete
376
- * Returns the new phase or null if all phases are done
377
- */
378
- export function advanceToNextPhase() {
379
- if (!currentPlan || !currentPlan.isActive)
380
- return null;
381
- const currentTask = currentPlan.steps[currentPlan.currentTaskIndex];
382
- // Mark current task as complete if not already
383
- if (currentTask && currentTask.status !== 'completed') {
384
- currentTask.status = 'completed';
385
- currentTask.completedAt = new Date();
386
- }
387
- // Find next pending task
388
- const nextIndex = currentPlan.steps.findIndex((step, idx) => idx > currentPlan.currentTaskIndex && step.status === 'pending');
389
- if (nextIndex === -1) {
390
- return null; // All phases complete
391
- }
392
- currentPlan.currentTaskIndex = nextIndex;
393
- currentPlan.currentSubtaskIndex = currentPlan.steps[nextIndex].subtasks.length > 0 ? 0 : -1;
295
+ function getCurrentPhase() {
296
+ if (!currentPlan || !currentPlan.isActive) return null;
297
+ const taskIndex = currentPlan.currentTaskIndex;
298
+ if (taskIndex < 0 || taskIndex >= currentPlan.steps.length) return null;
299
+ const task = currentPlan.steps[taskIndex];
300
+ if (task.status === "completed") {
301
+ const nextIndex = currentPlan.steps.findIndex(
302
+ (step, idx) => idx > taskIndex && step.status === "pending"
303
+ );
304
+ if (nextIndex === -1) return null;
394
305
  return { taskNumber: nextIndex + 1, task: currentPlan.steps[nextIndex] };
306
+ }
307
+ return { taskNumber: taskIndex + 1, task };
395
308
  }
396
- /**
397
- * Get the next incomplete task
398
- */
399
- export function getNextIncompleteTask() {
400
- if (!currentPlan)
401
- return null;
402
- const index = currentPlan.steps.findIndex(step => step.status === 'pending' || step.status === 'in_progress');
403
- if (index === -1)
404
- return null;
405
- return {
406
- taskNumber: index + 1,
407
- task: currentPlan.steps[index]
408
- };
309
+ function advanceToNextPhase() {
310
+ if (!currentPlan || !currentPlan.isActive) return null;
311
+ const currentTask = currentPlan.steps[currentPlan.currentTaskIndex];
312
+ if (currentTask && currentTask.status !== "completed") {
313
+ currentTask.status = "completed";
314
+ currentTask.completedAt = /* @__PURE__ */ new Date();
315
+ }
316
+ const nextIndex = currentPlan.steps.findIndex(
317
+ (step, idx) => idx > currentPlan.currentTaskIndex && step.status === "pending"
318
+ );
319
+ if (nextIndex === -1) {
320
+ return null;
321
+ }
322
+ currentPlan.currentTaskIndex = nextIndex;
323
+ currentPlan.currentSubtaskIndex = currentPlan.steps[nextIndex].subtasks.length > 0 ? 0 : -1;
324
+ return { taskNumber: nextIndex + 1, task: currentPlan.steps[nextIndex] };
409
325
  }
410
- /**
411
- * Check if all tasks are complete
412
- */
413
- export function areAllTasksComplete() {
414
- if (!currentPlan)
415
- return false;
416
- return currentPlan.steps.every(step => step.status === 'completed' || step.status === 'skipped');
326
+ function getNextIncompleteTask() {
327
+ if (!currentPlan) return null;
328
+ const index = currentPlan.steps.findIndex((step) => step.status === "pending" || step.status === "in_progress");
329
+ if (index === -1) return null;
330
+ return {
331
+ taskNumber: index + 1,
332
+ task: currentPlan.steps[index]
333
+ };
417
334
  }
418
- /**
419
- * Get plan progress summary (including subtasks)
420
- */
421
- export function getPlanProgress() {
422
- if (!currentPlan)
423
- return null;
424
- const { completedCount, totalCount } = calculateProgress();
425
- const percentage = totalCount > 0 ? Math.round((completedCount / totalCount) * 100) : 0;
426
- const completedTasks = currentPlan.steps.filter(s => s.status === 'completed').length;
427
- return {
428
- completed: completedCount,
429
- total: totalCount,
430
- percentage,
431
- currentTask: currentPlan.currentTaskIndex + 1,
432
- totalTasks: currentPlan.steps.length
433
- };
335
+ function areAllTasksComplete() {
336
+ if (!currentPlan) return false;
337
+ return currentPlan.steps.every((step) => step.status === "completed" || step.status === "skipped");
434
338
  }
435
- /**
436
- * Generate plan context for AI system prompt injection (shows all tasks)
437
- */
438
- export function getPlanContextForPrompt() {
439
- if (!currentPlan || !currentPlan.isActive)
440
- return '';
441
- const progress = getPlanProgress();
442
- if (!progress)
443
- return '';
444
- let context = `\n\n## ACTIVE PLAN: ${currentPlan.title}\n`;
445
- if (currentPlan.designSummary) {
446
- context += `\n### Design Summary:\n${currentPlan.designSummary}\n`;
447
- }
448
- context += `\nProgress: ${progress.completed}/${progress.total} items completed (${progress.percentage}%)\n`;
449
- context += `Current Task: ${progress.currentTask}/${progress.totalTasks}\n\n`;
450
- context += `### Tasks:\n`;
451
- currentPlan.steps.forEach((step, index) => {
452
- const statusIcon = step.status === 'completed' ? '✅' :
453
- step.status === 'in_progress' ? '🔄' :
454
- step.status === 'skipped' ? '⏭️' : '⏳';
455
- const isCurrent = index === currentPlan.currentTaskIndex && step.status !== 'completed';
456
- const marker = isCurrent ? ' 👈 CURRENT' : '';
457
- context += `${index + 1}. ${statusIcon} ${step.description}${marker}\n`;
458
- // Add subtasks
459
- step.subtasks.forEach((subtask, subIndex) => {
460
- const subStatusIcon = subtask.status === 'completed' ? '✅' :
461
- subtask.status === 'in_progress' ? '🔄' : '⬜';
462
- context += ` ${index + 1}.${subIndex + 1}. ${subStatusIcon} ${subtask.description}\n`;
463
- });
339
+ function getPlanProgress() {
340
+ if (!currentPlan) return null;
341
+ const { completedCount, totalCount } = calculateProgress();
342
+ const percentage = totalCount > 0 ? Math.round(completedCount / totalCount * 100) : 0;
343
+ const completedTasks = currentPlan.steps.filter((s) => s.status === "completed").length;
344
+ return {
345
+ completed: completedCount,
346
+ total: totalCount,
347
+ percentage,
348
+ currentTask: currentPlan.currentTaskIndex + 1,
349
+ totalTasks: currentPlan.steps.length
350
+ };
351
+ }
352
+ function getPlanContextForPrompt() {
353
+ if (!currentPlan || !currentPlan.isActive) return "";
354
+ const progress = getPlanProgress();
355
+ if (!progress) return "";
356
+ let context = `
357
+
358
+ ## ACTIVE PLAN: ${currentPlan.title}
359
+ `;
360
+ if (currentPlan.designSummary) {
361
+ context += `
362
+ ### Design Summary:
363
+ ${currentPlan.designSummary}
364
+ `;
365
+ }
366
+ context += `
367
+ Progress: ${progress.completed}/${progress.total} items completed (${progress.percentage}%)
368
+ `;
369
+ context += `Current Task: ${progress.currentTask}/${progress.totalTasks}
370
+
371
+ `;
372
+ context += `### Tasks:
373
+ `;
374
+ currentPlan.steps.forEach((step, index) => {
375
+ const statusIcon = step.status === "completed" ? "\u2705" : step.status === "in_progress" ? "\u{1F504}" : step.status === "skipped" ? "\u23ED\uFE0F" : "\u23F3";
376
+ const isCurrent = index === currentPlan.currentTaskIndex && step.status !== "completed";
377
+ const marker = isCurrent ? " \u{1F448} CURRENT" : "";
378
+ context += `${index + 1}. ${statusIcon} ${step.description}${marker}
379
+ `;
380
+ step.subtasks.forEach((subtask, subIndex) => {
381
+ const subStatusIcon = subtask.status === "completed" ? "\u2705" : subtask.status === "in_progress" ? "\u{1F504}" : "\u2B1C";
382
+ context += ` ${index + 1}.${subIndex + 1}. ${subStatusIcon} ${subtask.description}
383
+ `;
464
384
  });
465
- const nextTask = getNextIncompleteTask();
466
- if (nextTask) {
467
- context += `\n**NEXT ACTION**: Complete task ${nextTask.taskNumber}: ${nextTask.task.description}\n`;
468
- context += `After completing this task, call mark_task_complete with task_number=${nextTask.taskNumber}\n`;
469
- }
470
- else {
471
- context += `\n**ALL TASKS COMPLETE**: Output your summary of what was accomplished, then call task_complete().\n`;
472
- }
473
- return context;
385
+ });
386
+ const nextTask = getNextIncompleteTask();
387
+ if (nextTask) {
388
+ context += `
389
+ **NEXT ACTION**: Complete task ${nextTask.taskNumber}: ${nextTask.task.description}
390
+ `;
391
+ context += `After completing this task, call mark_task_complete with task_number=${nextTask.taskNumber}
392
+ `;
393
+ } else {
394
+ context += `
395
+ **ALL TASKS COMPLETE**: Output your summary of what was accomplished, then call task_complete().
396
+ `;
397
+ }
398
+ return context;
474
399
  }
475
- /**
476
- * Generate context for only the current phase (single task with its subtasks)
477
- * Used for phased execution where AI only sees one task at a time
478
- */
479
- export function getPhaseContextForPrompt() {
480
- if (!currentPlan || !currentPlan.isActive)
481
- return '';
482
- const currentPhase = getCurrentPhase();
483
- if (!currentPhase) {
484
- return `\n**ALL TASKS COMPLETE**: Output your summary of what was accomplished, then call task_complete().\n`;
485
- }
486
- const progress = getPlanProgress();
487
- const { taskNumber, task } = currentPhase;
488
- let context = `\n\n## CURRENT TASK: ${currentPlan.title}\n`;
489
- if (currentPlan.designSummary) {
490
- context += `\n### Design Context:\n${currentPlan.designSummary}\n`;
491
- }
492
- context += `\n### Overall Progress: Task ${taskNumber}/${currentPlan.steps.length}\n`;
493
- context += `${progress ? `(${progress.completed}/${progress.total} items completed - ${progress.percentage}%)` : ''}\n\n`;
494
- context += `### YOUR CURRENT TASK:\n`;
495
- context += `**Task ${taskNumber}: ${task.description}**\n\n`;
496
- if (task.subtasks.length > 0) {
497
- context += `Subtasks to complete:\n`;
498
- task.subtasks.forEach((subtask, index) => {
499
- const subStatusIcon = subtask.status === 'completed' ? '✅' :
500
- subtask.status === 'in_progress' ? '🔄' : '⬜';
501
- const isCurrentSubtask = index === currentPlan.currentSubtaskIndex;
502
- const marker = isCurrentSubtask && subtask.status === 'pending' ? ' 👈 CURRENT' : '';
503
- context += ` ${taskNumber}.${index + 1}. ${subStatusIcon} ${subtask.description}${marker}\n`;
504
- });
505
- context += `\n**Instructions**: Complete each subtask in order.\n`;
506
- context += `After completing a subtask, call: mark_task_complete(task_number="${taskNumber}.X")\n`;
507
- context += `When all subtasks are done, the main task will be automatically marked complete.\n`;
508
- }
509
- else {
510
- context += `\n**Instructions**: Complete this task.\n`;
511
- context += `When done, call: mark_task_complete(task_number="${taskNumber}")\n`;
512
- }
513
- return context;
400
+ function getPhaseContextForPrompt() {
401
+ if (!currentPlan || !currentPlan.isActive) return "";
402
+ const currentPhase = getCurrentPhase();
403
+ if (!currentPhase) {
404
+ return `
405
+ **ALL TASKS COMPLETE**: Output your summary of what was accomplished, then call task_complete().
406
+ `;
407
+ }
408
+ const progress = getPlanProgress();
409
+ const { taskNumber, task } = currentPhase;
410
+ let context = `
411
+
412
+ ## CURRENT TASK: ${currentPlan.title}
413
+ `;
414
+ if (currentPlan.designSummary) {
415
+ context += `
416
+ ### Design Context:
417
+ ${currentPlan.designSummary}
418
+ `;
419
+ }
420
+ context += `
421
+ ### Overall Progress: Task ${taskNumber}/${currentPlan.steps.length}
422
+ `;
423
+ context += `${progress ? `(${progress.completed}/${progress.total} items completed - ${progress.percentage}%)` : ""}
424
+
425
+ `;
426
+ context += `### YOUR CURRENT TASK:
427
+ `;
428
+ context += `**Task ${taskNumber}: ${task.description}**
429
+
430
+ `;
431
+ if (task.subtasks.length > 0) {
432
+ context += `Subtasks to complete:
433
+ `;
434
+ task.subtasks.forEach((subtask, index) => {
435
+ const subStatusIcon = subtask.status === "completed" ? "\u2705" : subtask.status === "in_progress" ? "\u{1F504}" : "\u2B1C";
436
+ const isCurrentSubtask = index === currentPlan.currentSubtaskIndex;
437
+ const marker = isCurrentSubtask && subtask.status === "pending" ? " \u{1F448} CURRENT" : "";
438
+ context += ` ${taskNumber}.${index + 1}. ${subStatusIcon} ${subtask.description}${marker}
439
+ `;
440
+ });
441
+ context += `
442
+ **Instructions**: Complete each subtask in order.
443
+ `;
444
+ context += `After completing a subtask, call: mark_task_complete(task_number="${taskNumber}.X")
445
+ `;
446
+ context += `When all subtasks are done, the main task will be automatically marked complete.
447
+ `;
448
+ } else {
449
+ context += `
450
+ **Instructions**: Complete this task.
451
+ `;
452
+ context += `When done, call: mark_task_complete(task_number="${taskNumber}")
453
+ `;
454
+ }
455
+ return context;
514
456
  }
515
- // ============================================================================
516
- // EXPORTS
517
- // ============================================================================
518
- export default {
519
- createPlanTool,
520
- markTaskCompleteTool,
521
- setPlan,
522
- getCurrentPlan,
523
- clearPlan,
524
- approvePlan,
525
- markTaskComplete,
526
- getCurrentPhase,
527
- advanceToNextPhase,
528
- getNextIncompleteTask,
529
- areAllTasksComplete,
530
- getPlanProgress,
531
- getPlanContextForPrompt,
532
- getPhaseContextForPrompt
457
+ var plan_mode_default = {
458
+ createPlanTool,
459
+ markTaskCompleteTool,
460
+ setPlan,
461
+ getCurrentPlan,
462
+ clearPlan,
463
+ approvePlan,
464
+ markTaskComplete,
465
+ getCurrentPhase,
466
+ advanceToNextPhase,
467
+ getNextIncompleteTask,
468
+ areAllTasksComplete,
469
+ getPlanProgress,
470
+ getPlanContextForPrompt,
471
+ getPhaseContextForPrompt
472
+ };
473
+ export {
474
+ advanceToNextPhase,
475
+ approvePlan,
476
+ areAllTasksComplete,
477
+ clearPlan,
478
+ createPlanTool,
479
+ plan_mode_default as default,
480
+ getCurrentPhase,
481
+ getCurrentPlan,
482
+ getNextIncompleteTask,
483
+ getPhaseContextForPrompt,
484
+ getPlanContextForPrompt,
485
+ getPlanProgress,
486
+ markTaskComplete,
487
+ markTaskCompleteTool,
488
+ setPlan
533
489
  };
534
490
  //# sourceMappingURL=plan-mode.js.map