@cleanslate/sdk 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 (581) hide show
  1. package/LICENSE +22 -0
  2. package/NOTICE +48 -0
  3. package/README.md +103 -0
  4. package/VENDOR.md +60 -0
  5. package/dist/agent/cleanSlateAgentExecutionPhase.d.ts +55 -0
  6. package/dist/agent/cleanSlateAgentExecutionPhase.d.ts.map +1 -0
  7. package/dist/agent/cleanSlateAgentExecutionPhase.js +474 -0
  8. package/dist/agent/cleanSlateAgentExecutionPhase.js.map +1 -0
  9. package/dist/agent/cleanSlateAgentExecutionSupport.d.ts +22 -0
  10. package/dist/agent/cleanSlateAgentExecutionSupport.d.ts.map +1 -0
  11. package/dist/agent/cleanSlateAgentExecutionSupport.js +205 -0
  12. package/dist/agent/cleanSlateAgentExecutionSupport.js.map +1 -0
  13. package/dist/agent/cleanSlateAgentParsing.d.ts +21 -0
  14. package/dist/agent/cleanSlateAgentParsing.d.ts.map +1 -0
  15. package/dist/agent/cleanSlateAgentParsing.js +106 -0
  16. package/dist/agent/cleanSlateAgentParsing.js.map +1 -0
  17. package/dist/agent/cleanSlateAgentSession.d.ts +44 -0
  18. package/dist/agent/cleanSlateAgentSession.d.ts.map +1 -0
  19. package/dist/agent/cleanSlateAgentSession.js +205 -0
  20. package/dist/agent/cleanSlateAgentSession.js.map +1 -0
  21. package/dist/agent/cleanSlateAgentTypes.d.ts +91 -0
  22. package/dist/agent/cleanSlateAgentTypes.d.ts.map +1 -0
  23. package/dist/agent/cleanSlateAgentTypes.js +27 -0
  24. package/dist/agent/cleanSlateAgentTypes.js.map +1 -0
  25. package/dist/agent/cleanSlateCommandPolicy.d.ts +12 -0
  26. package/dist/agent/cleanSlateCommandPolicy.d.ts.map +1 -0
  27. package/dist/agent/cleanSlateCommandPolicy.js +30 -0
  28. package/dist/agent/cleanSlateCommandPolicy.js.map +1 -0
  29. package/dist/agent/cleanSlateContextBudgetManager.d.ts +82 -0
  30. package/dist/agent/cleanSlateContextBudgetManager.d.ts.map +1 -0
  31. package/dist/agent/cleanSlateContextBudgetManager.js +419 -0
  32. package/dist/agent/cleanSlateContextBudgetManager.js.map +1 -0
  33. package/dist/agent/cleanSlateDomainProfile.d.ts +71 -0
  34. package/dist/agent/cleanSlateDomainProfile.d.ts.map +1 -0
  35. package/dist/agent/cleanSlateDomainProfile.js +124 -0
  36. package/dist/agent/cleanSlateDomainProfile.js.map +1 -0
  37. package/dist/agent/cleanSlateExecutionBudget.d.ts +19 -0
  38. package/dist/agent/cleanSlateExecutionBudget.d.ts.map +1 -0
  39. package/dist/agent/cleanSlateExecutionBudget.js +28 -0
  40. package/dist/agent/cleanSlateExecutionBudget.js.map +1 -0
  41. package/dist/agent/cleanSlateExecutionEditPolicy.d.ts +15 -0
  42. package/dist/agent/cleanSlateExecutionEditPolicy.d.ts.map +1 -0
  43. package/dist/agent/cleanSlateExecutionEditPolicy.js +148 -0
  44. package/dist/agent/cleanSlateExecutionEditPolicy.js.map +1 -0
  45. package/dist/agent/cleanSlateExecutionEvidenceLedger.d.ts +23 -0
  46. package/dist/agent/cleanSlateExecutionEvidenceLedger.d.ts.map +1 -0
  47. package/dist/agent/cleanSlateExecutionEvidenceLedger.js +121 -0
  48. package/dist/agent/cleanSlateExecutionEvidenceLedger.js.map +1 -0
  49. package/dist/agent/cleanSlateExecutionLoopPrompts.d.ts +5 -0
  50. package/dist/agent/cleanSlateExecutionLoopPrompts.d.ts.map +1 -0
  51. package/dist/agent/cleanSlateExecutionLoopPrompts.js +41 -0
  52. package/dist/agent/cleanSlateExecutionLoopPrompts.js.map +1 -0
  53. package/dist/agent/cleanSlateExecutionQuery.d.ts +162 -0
  54. package/dist/agent/cleanSlateExecutionQuery.d.ts.map +1 -0
  55. package/dist/agent/cleanSlateExecutionQuery.js +1448 -0
  56. package/dist/agent/cleanSlateExecutionQuery.js.map +1 -0
  57. package/dist/agent/cleanSlateFilesModifiedService.d.ts +96 -0
  58. package/dist/agent/cleanSlateFilesModifiedService.d.ts.map +1 -0
  59. package/dist/agent/cleanSlateFilesModifiedService.js +581 -0
  60. package/dist/agent/cleanSlateFilesModifiedService.js.map +1 -0
  61. package/dist/agent/cleanSlateNativeToolTranscript.d.ts +22 -0
  62. package/dist/agent/cleanSlateNativeToolTranscript.d.ts.map +1 -0
  63. package/dist/agent/cleanSlateNativeToolTranscript.js +77 -0
  64. package/dist/agent/cleanSlateNativeToolTranscript.js.map +1 -0
  65. package/dist/agent/cleanSlatePrompts.d.ts +30 -0
  66. package/dist/agent/cleanSlatePrompts.d.ts.map +1 -0
  67. package/dist/agent/cleanSlatePrompts.js +65 -0
  68. package/dist/agent/cleanSlatePrompts.js.map +1 -0
  69. package/dist/agent/cleanSlateQueryRunner.d.ts +56 -0
  70. package/dist/agent/cleanSlateQueryRunner.d.ts.map +1 -0
  71. package/dist/agent/cleanSlateQueryRunner.js +69 -0
  72. package/dist/agent/cleanSlateQueryRunner.js.map +1 -0
  73. package/dist/agent/cleanSlateRuntimePromptBuilder.d.ts +30 -0
  74. package/dist/agent/cleanSlateRuntimePromptBuilder.d.ts.map +1 -0
  75. package/dist/agent/cleanSlateRuntimePromptBuilder.js +99 -0
  76. package/dist/agent/cleanSlateRuntimePromptBuilder.js.map +1 -0
  77. package/dist/agent/cleanSlateStreamingToolExecutor.d.ts +55 -0
  78. package/dist/agent/cleanSlateStreamingToolExecutor.d.ts.map +1 -0
  79. package/dist/agent/cleanSlateStreamingToolExecutor.js +214 -0
  80. package/dist/agent/cleanSlateStreamingToolExecutor.js.map +1 -0
  81. package/dist/agent/cleanSlateToolCallLedger.d.ts +32 -0
  82. package/dist/agent/cleanSlateToolCallLedger.d.ts.map +1 -0
  83. package/dist/agent/cleanSlateToolCallLedger.js +164 -0
  84. package/dist/agent/cleanSlateToolCallLedger.js.map +1 -0
  85. package/dist/agent/cleanSlateToolResultPromptSerializer.d.ts +9 -0
  86. package/dist/agent/cleanSlateToolResultPromptSerializer.d.ts.map +1 -0
  87. package/dist/agent/cleanSlateToolResultPromptSerializer.js +184 -0
  88. package/dist/agent/cleanSlateToolResultPromptSerializer.js.map +1 -0
  89. package/dist/composer/commands/slashCommands.d.ts +8 -0
  90. package/dist/composer/commands/slashCommands.d.ts.map +1 -0
  91. package/dist/composer/commands/slashCommands.js +46 -0
  92. package/dist/composer/commands/slashCommands.js.map +1 -0
  93. package/dist/composer/instructions/baseInstructions.d.ts +3 -0
  94. package/dist/composer/instructions/baseInstructions.d.ts.map +1 -0
  95. package/dist/composer/instructions/baseInstructions.js +35 -0
  96. package/dist/composer/instructions/baseInstructions.js.map +1 -0
  97. package/dist/composer/instructions/runtimeInstructions.d.ts +11 -0
  98. package/dist/composer/instructions/runtimeInstructions.d.ts.map +1 -0
  99. package/dist/composer/instructions/runtimeInstructions.js +31 -0
  100. package/dist/composer/instructions/runtimeInstructions.js.map +1 -0
  101. package/dist/composer/kernel/coreKernel.d.ts +3 -0
  102. package/dist/composer/kernel/coreKernel.d.ts.map +1 -0
  103. package/dist/composer/kernel/coreKernel.js +11 -0
  104. package/dist/composer/kernel/coreKernel.js.map +1 -0
  105. package/dist/composer/kernel/editingRules.d.ts +3 -0
  106. package/dist/composer/kernel/editingRules.d.ts.map +1 -0
  107. package/dist/composer/kernel/editingRules.js +24 -0
  108. package/dist/composer/kernel/editingRules.js.map +1 -0
  109. package/dist/composer/kernel/toolProtocols.d.ts +2 -0
  110. package/dist/composer/kernel/toolProtocols.d.ts.map +1 -0
  111. package/dist/composer/kernel/toolProtocols.js +32 -0
  112. package/dist/composer/kernel/toolProtocols.js.map +1 -0
  113. package/dist/composer/modes/execution.mode.d.ts +2 -0
  114. package/dist/composer/modes/execution.mode.d.ts.map +1 -0
  115. package/dist/composer/modes/execution.mode.js +21 -0
  116. package/dist/composer/modes/execution.mode.js.map +1 -0
  117. package/dist/composer/modes/planning.mode.d.ts +2 -0
  118. package/dist/composer/modes/planning.mode.d.ts.map +1 -0
  119. package/dist/composer/modes/planning.mode.js +23 -0
  120. package/dist/composer/modes/planning.mode.js.map +1 -0
  121. package/dist/composer/promptComposer.d.ts +22 -0
  122. package/dist/composer/promptComposer.d.ts.map +1 -0
  123. package/dist/composer/promptComposer.js +62 -0
  124. package/dist/composer/promptComposer.js.map +1 -0
  125. package/dist/composer/registry/agentSchema.d.ts +16 -0
  126. package/dist/composer/registry/agentSchema.d.ts.map +1 -0
  127. package/dist/composer/registry/agentSchema.js +6 -0
  128. package/dist/composer/registry/agentSchema.js.map +1 -0
  129. package/dist/core/arrays.d.ts +311 -0
  130. package/dist/core/arrays.d.ts.map +1 -0
  131. package/dist/core/arrays.js +811 -0
  132. package/dist/core/arrays.js.map +1 -0
  133. package/dist/core/arraysFind.d.ts +72 -0
  134. package/dist/core/arraysFind.d.ts.map +1 -0
  135. package/dist/core/arraysFind.js +200 -0
  136. package/dist/core/arraysFind.js.map +1 -0
  137. package/dist/core/assert.d.ts +36 -0
  138. package/dist/core/assert.d.ts.map +1 -0
  139. package/dist/core/assert.js +84 -0
  140. package/dist/core/assert.js.map +1 -0
  141. package/dist/core/async.d.ts +11 -0
  142. package/dist/core/async.d.ts.map +1 -0
  143. package/dist/core/async.js +6 -0
  144. package/dist/core/async.js.map +1 -0
  145. package/dist/core/buffer.d.ts +23 -0
  146. package/dist/core/buffer.d.ts.map +1 -0
  147. package/dist/core/buffer.js +40 -0
  148. package/dist/core/buffer.js.map +1 -0
  149. package/dist/core/cancellation.d.ts +52 -0
  150. package/dist/core/cancellation.d.ts.map +1 -0
  151. package/dist/core/cancellation.js +169 -0
  152. package/dist/core/cancellation.js.map +1 -0
  153. package/dist/core/charCode.d.ts +428 -0
  154. package/dist/core/charCode.d.ts.map +1 -0
  155. package/dist/core/charCode.js +439 -0
  156. package/dist/core/charCode.js.map +1 -0
  157. package/dist/core/collections.d.ts +49 -0
  158. package/dist/core/collections.d.ts.map +1 -0
  159. package/dist/core/collections.js +132 -0
  160. package/dist/core/collections.js.map +1 -0
  161. package/dist/core/diff/diff.d.ts +151 -0
  162. package/dist/core/diff/diff.d.ts.map +1 -0
  163. package/dist/core/diff/diff.js +1076 -0
  164. package/dist/core/diff/diff.js.map +1 -0
  165. package/dist/core/diff/diffChange.d.ts +39 -0
  166. package/dist/core/diff/diffChange.d.ts.map +1 -0
  167. package/dist/core/diff/diffChange.js +37 -0
  168. package/dist/core/diff/diffChange.js.map +1 -0
  169. package/dist/core/errors.d.ts +114 -0
  170. package/dist/core/errors.d.ts.map +1 -0
  171. package/dist/core/errors.js +258 -0
  172. package/dist/core/errors.js.map +1 -0
  173. package/dist/core/event.d.ts +595 -0
  174. package/dist/core/event.d.ts.map +1 -0
  175. package/dist/core/event.js +1479 -0
  176. package/dist/core/event.js.map +1 -0
  177. package/dist/core/functional.d.ts +5 -0
  178. package/dist/core/functional.d.ts.map +1 -0
  179. package/dist/core/functional.js +35 -0
  180. package/dist/core/functional.js.map +1 -0
  181. package/dist/core/hash.d.ts +15 -0
  182. package/dist/core/hash.d.ts.map +1 -0
  183. package/dist/core/hash.js +27 -0
  184. package/dist/core/hash.js.map +1 -0
  185. package/dist/core/iterator.d.ts +33 -0
  186. package/dist/core/iterator.d.ts.map +1 -0
  187. package/dist/core/iterator.js +188 -0
  188. package/dist/core/iterator.js.map +1 -0
  189. package/dist/core/lifecycle.d.ts +313 -0
  190. package/dist/core/lifecycle.d.ts.map +1 -0
  191. package/dist/core/lifecycle.js +789 -0
  192. package/dist/core/lifecycle.js.map +1 -0
  193. package/dist/core/linkedList.d.ts +17 -0
  194. package/dist/core/linkedList.d.ts.map +1 -0
  195. package/dist/core/linkedList.js +138 -0
  196. package/dist/core/linkedList.js.map +1 -0
  197. package/dist/core/map.d.ts +175 -0
  198. package/dist/core/map.d.ts.map +1 -0
  199. package/dist/core/map.js +796 -0
  200. package/dist/core/map.js.map +1 -0
  201. package/dist/core/marshallingIds.d.ts +29 -0
  202. package/dist/core/marshallingIds.d.ts.map +1 -0
  203. package/dist/core/marshallingIds.js +38 -0
  204. package/dist/core/marshallingIds.js.map +1 -0
  205. package/dist/core/observable.d.ts +28 -0
  206. package/dist/core/observable.d.ts.map +1 -0
  207. package/dist/core/observable.js +6 -0
  208. package/dist/core/observable.js.map +1 -0
  209. package/dist/core/platform.d.ts +4 -0
  210. package/dist/core/platform.d.ts.map +1 -0
  211. package/dist/core/platform.js +17 -0
  212. package/dist/core/platform.js.map +1 -0
  213. package/dist/core/position.d.ts +91 -0
  214. package/dist/core/position.d.ts.map +1 -0
  215. package/dist/core/position.js +145 -0
  216. package/dist/core/position.js.map +1 -0
  217. package/dist/core/range.d.ts +198 -0
  218. package/dist/core/range.d.ts.map +1 -0
  219. package/dist/core/range.js +426 -0
  220. package/dist/core/range.js.map +1 -0
  221. package/dist/core/resources.d.ts +10 -0
  222. package/dist/core/resources.d.ts.map +1 -0
  223. package/dist/core/resources.js +126 -0
  224. package/dist/core/resources.js.map +1 -0
  225. package/dist/core/sequence.d.ts +20 -0
  226. package/dist/core/sequence.d.ts.map +1 -0
  227. package/dist/core/sequence.js +21 -0
  228. package/dist/core/sequence.js.map +1 -0
  229. package/dist/core/stopwatch.d.ts +11 -0
  230. package/dist/core/stopwatch.d.ts.map +1 -0
  231. package/dist/core/stopwatch.js +33 -0
  232. package/dist/core/stopwatch.js.map +1 -0
  233. package/dist/core/symbols.d.ts +5 -0
  234. package/dist/core/symbols.d.ts.map +1 -0
  235. package/dist/core/symbols.js +13 -0
  236. package/dist/core/symbols.js.map +1 -0
  237. package/dist/core/types.d.ts +229 -0
  238. package/dist/core/types.d.ts.map +1 -0
  239. package/dist/core/types.js +278 -0
  240. package/dist/core/types.js.map +1 -0
  241. package/dist/core/uint.d.ts +32 -0
  242. package/dist/core/uint.d.ts.map +1 -0
  243. package/dist/core/uint.js +57 -0
  244. package/dist/core/uint.js.map +1 -0
  245. package/dist/core/uri.d.ts +172 -0
  246. package/dist/core/uri.d.ts.map +1 -0
  247. package/dist/core/uri.js +623 -0
  248. package/dist/core/uri.js.map +1 -0
  249. package/dist/host/browserAutomation.d.ts +276 -0
  250. package/dist/host/browserAutomation.d.ts.map +1 -0
  251. package/dist/host/browserAutomation.js +6 -0
  252. package/dist/host/browserAutomation.js.map +1 -0
  253. package/dist/host/diagnostics.d.ts +68 -0
  254. package/dist/host/diagnostics.d.ts.map +1 -0
  255. package/dist/host/diagnostics.js +41 -0
  256. package/dist/host/diagnostics.js.map +1 -0
  257. package/dist/host/files.d.ts +70 -0
  258. package/dist/host/files.d.ts.map +1 -0
  259. package/dist/host/files.js +54 -0
  260. package/dist/host/files.js.map +1 -0
  261. package/dist/host/services.d.ts +106 -0
  262. package/dist/host/services.d.ts.map +1 -0
  263. package/dist/host/services.js +6 -0
  264. package/dist/host/services.js.map +1 -0
  265. package/dist/host/symbols.d.ts +45 -0
  266. package/dist/host/symbols.d.ts.map +1 -0
  267. package/dist/host/symbols.js +43 -0
  268. package/dist/host/symbols.js.map +1 -0
  269. package/dist/host/textModel.d.ts +83 -0
  270. package/dist/host/textModel.d.ts.map +1 -0
  271. package/dist/host/textModel.js +6 -0
  272. package/dist/host/textModel.js.map +1 -0
  273. package/dist/host/workspace.d.ts +123 -0
  274. package/dist/host/workspace.d.ts.map +1 -0
  275. package/dist/host/workspace.js +32 -0
  276. package/dist/host/workspace.js.map +1 -0
  277. package/dist/index.d.ts +40 -0
  278. package/dist/index.d.ts.map +1 -0
  279. package/dist/index.js +26 -0
  280. package/dist/index.js.map +1 -0
  281. package/dist/node/cleanSlateAnthropicMessageAdapter.d.ts +12 -0
  282. package/dist/node/cleanSlateAnthropicMessageAdapter.d.ts.map +1 -0
  283. package/dist/node/cleanSlateAnthropicMessageAdapter.js +130 -0
  284. package/dist/node/cleanSlateAnthropicMessageAdapter.js.map +1 -0
  285. package/dist/node/cleanSlateHeadlessRunner.d.ts +63 -0
  286. package/dist/node/cleanSlateHeadlessRunner.d.ts.map +1 -0
  287. package/dist/node/cleanSlateHeadlessRunner.js +84 -0
  288. package/dist/node/cleanSlateHeadlessRunner.js.map +1 -0
  289. package/dist/node/cleanSlateNodeAgentRuntime.d.ts +94 -0
  290. package/dist/node/cleanSlateNodeAgentRuntime.d.ts.map +1 -0
  291. package/dist/node/cleanSlateNodeAgentRuntime.js +339 -0
  292. package/dist/node/cleanSlateNodeAgentRuntime.js.map +1 -0
  293. package/dist/node/cleanSlateNodeBrowserAutomation.d.ts +279 -0
  294. package/dist/node/cleanSlateNodeBrowserAutomation.d.ts.map +1 -0
  295. package/dist/node/cleanSlateNodeBrowserAutomation.js +470 -0
  296. package/dist/node/cleanSlateNodeBrowserAutomation.js.map +1 -0
  297. package/dist/node/cleanSlateNodeCommandService.d.ts +40 -0
  298. package/dist/node/cleanSlateNodeCommandService.d.ts.map +1 -0
  299. package/dist/node/cleanSlateNodeCommandService.js +435 -0
  300. package/dist/node/cleanSlateNodeCommandService.js.map +1 -0
  301. package/dist/node/cleanSlateNodeFileServices.d.ts +68 -0
  302. package/dist/node/cleanSlateNodeFileServices.d.ts.map +1 -0
  303. package/dist/node/cleanSlateNodeFileServices.js +138 -0
  304. package/dist/node/cleanSlateNodeFileServices.js.map +1 -0
  305. package/dist/node/cleanSlateNodeIndexService.d.ts +17 -0
  306. package/dist/node/cleanSlateNodeIndexService.d.ts.map +1 -0
  307. package/dist/node/cleanSlateNodeIndexService.js +128 -0
  308. package/dist/node/cleanSlateNodeIndexService.js.map +1 -0
  309. package/dist/node/cleanSlateNodeLanguageCommands.d.ts +11 -0
  310. package/dist/node/cleanSlateNodeLanguageCommands.d.ts.map +1 -0
  311. package/dist/node/cleanSlateNodeLanguageCommands.js +146 -0
  312. package/dist/node/cleanSlateNodeLanguageCommands.js.map +1 -0
  313. package/dist/node/cleanSlateNodeMainService.d.ts +87 -0
  314. package/dist/node/cleanSlateNodeMainService.d.ts.map +1 -0
  315. package/dist/node/cleanSlateNodeMainService.js +1304 -0
  316. package/dist/node/cleanSlateNodeMainService.js.map +1 -0
  317. package/dist/node/cleanSlateNodeMcpClient.d.ts +20 -0
  318. package/dist/node/cleanSlateNodeMcpClient.d.ts.map +1 -0
  319. package/dist/node/cleanSlateNodeMcpClient.js +184 -0
  320. package/dist/node/cleanSlateNodeMcpClient.js.map +1 -0
  321. package/dist/node/cleanSlateNodeSearchService.d.ts +14 -0
  322. package/dist/node/cleanSlateNodeSearchService.d.ts.map +1 -0
  323. package/dist/node/cleanSlateNodeSearchService.js +180 -0
  324. package/dist/node/cleanSlateNodeSearchService.js.map +1 -0
  325. package/dist/node/cleanSlateNodeTextModel.d.ts +56 -0
  326. package/dist/node/cleanSlateNodeTextModel.d.ts.map +1 -0
  327. package/dist/node/cleanSlateNodeTextModel.js +127 -0
  328. package/dist/node/cleanSlateNodeTextModel.js.map +1 -0
  329. package/dist/node/cleanSlateNodeToolContext.d.ts +50 -0
  330. package/dist/node/cleanSlateNodeToolContext.d.ts.map +1 -0
  331. package/dist/node/cleanSlateNodeToolContext.js +134 -0
  332. package/dist/node/cleanSlateNodeToolContext.js.map +1 -0
  333. package/dist/node/cleanSlateNodeWebRetrieval.d.ts +20 -0
  334. package/dist/node/cleanSlateNodeWebRetrieval.d.ts.map +1 -0
  335. package/dist/node/cleanSlateNodeWebRetrieval.js +379 -0
  336. package/dist/node/cleanSlateNodeWebRetrieval.js.map +1 -0
  337. package/dist/node/cleanSlateOpenAIMessageAdapter.d.ts +8 -0
  338. package/dist/node/cleanSlateOpenAIMessageAdapter.d.ts.map +1 -0
  339. package/dist/node/cleanSlateOpenAIMessageAdapter.js +111 -0
  340. package/dist/node/cleanSlateOpenAIMessageAdapter.js.map +1 -0
  341. package/dist/node/cleanSlateProviderSchemaNormalizer.d.ts +18 -0
  342. package/dist/node/cleanSlateProviderSchemaNormalizer.d.ts.map +1 -0
  343. package/dist/node/cleanSlateProviderSchemaNormalizer.js +175 -0
  344. package/dist/node/cleanSlateProviderSchemaNormalizer.js.map +1 -0
  345. package/dist/node/index.d.ts +25 -0
  346. package/dist/node/index.d.ts.map +1 -0
  347. package/dist/node/index.js +28 -0
  348. package/dist/node/index.js.map +1 -0
  349. package/dist/protocol/cleanSlateAI.d.ts +964 -0
  350. package/dist/protocol/cleanSlateAI.d.ts.map +1 -0
  351. package/dist/protocol/cleanSlateAI.js +35 -0
  352. package/dist/protocol/cleanSlateAI.js.map +1 -0
  353. package/dist/protocol/cleanSlateModelCapabilities.d.ts +86 -0
  354. package/dist/protocol/cleanSlateModelCapabilities.d.ts.map +1 -0
  355. package/dist/protocol/cleanSlateModelCapabilities.js +1104 -0
  356. package/dist/protocol/cleanSlateModelCapabilities.js.map +1 -0
  357. package/dist/protocol/cleanSlateProviderMessageTransforms.d.ts +11 -0
  358. package/dist/protocol/cleanSlateProviderMessageTransforms.d.ts.map +1 -0
  359. package/dist/protocol/cleanSlateProviderMessageTransforms.js +178 -0
  360. package/dist/protocol/cleanSlateProviderMessageTransforms.js.map +1 -0
  361. package/dist/protocol/cleanSlateService.d.ts +68 -0
  362. package/dist/protocol/cleanSlateService.d.ts.map +1 -0
  363. package/dist/protocol/cleanSlateService.js +1149 -0
  364. package/dist/protocol/cleanSlateService.js.map +1 -0
  365. package/dist/services/cleanSlateCancellation.d.ts +7 -0
  366. package/dist/services/cleanSlateCancellation.d.ts.map +1 -0
  367. package/dist/services/cleanSlateCancellation.js +56 -0
  368. package/dist/services/cleanSlateCancellation.js.map +1 -0
  369. package/dist/services/cleanSlateCommandExecutionService.d.ts +25 -0
  370. package/dist/services/cleanSlateCommandExecutionService.d.ts.map +1 -0
  371. package/dist/services/cleanSlateCommandExecutionService.js +31 -0
  372. package/dist/services/cleanSlateCommandExecutionService.js.map +1 -0
  373. package/dist/services/cleanSlateDiffService.d.ts +62 -0
  374. package/dist/services/cleanSlateDiffService.d.ts.map +1 -0
  375. package/dist/services/cleanSlateDiffService.js +428 -0
  376. package/dist/services/cleanSlateDiffService.js.map +1 -0
  377. package/dist/services/cleanSlateEditMatchValidator.d.ts +63 -0
  378. package/dist/services/cleanSlateEditMatchValidator.d.ts.map +1 -0
  379. package/dist/services/cleanSlateEditMatchValidator.js +341 -0
  380. package/dist/services/cleanSlateEditMatchValidator.js.map +1 -0
  381. package/dist/services/cleanSlateEditService.d.ts +155 -0
  382. package/dist/services/cleanSlateEditService.d.ts.map +1 -0
  383. package/dist/services/cleanSlateEditService.js +848 -0
  384. package/dist/services/cleanSlateEditService.js.map +1 -0
  385. package/dist/services/cleanSlateFileHistory.d.ts +56 -0
  386. package/dist/services/cleanSlateFileHistory.d.ts.map +1 -0
  387. package/dist/services/cleanSlateFileHistory.js +157 -0
  388. package/dist/services/cleanSlateFileHistory.js.map +1 -0
  389. package/dist/services/cleanSlateTaskEvidenceCodec.d.ts +15 -0
  390. package/dist/services/cleanSlateTaskEvidenceCodec.d.ts.map +1 -0
  391. package/dist/services/cleanSlateTaskEvidenceCodec.js +151 -0
  392. package/dist/services/cleanSlateTaskEvidenceCodec.js.map +1 -0
  393. package/dist/services/cleanSlateTaskSessionService.d.ts +258 -0
  394. package/dist/services/cleanSlateTaskSessionService.d.ts.map +1 -0
  395. package/dist/services/cleanSlateTaskSessionService.js +1079 -0
  396. package/dist/services/cleanSlateTaskSessionService.js.map +1 -0
  397. package/dist/services/cleanSlateTaskState.d.ts +32 -0
  398. package/dist/services/cleanSlateTaskState.d.ts.map +1 -0
  399. package/dist/services/cleanSlateTaskState.js +40 -0
  400. package/dist/services/cleanSlateTaskState.js.map +1 -0
  401. package/dist/services/cleanSlateThreadService.d.ts +64 -0
  402. package/dist/services/cleanSlateThreadService.d.ts.map +1 -0
  403. package/dist/services/cleanSlateThreadService.js +188 -0
  404. package/dist/services/cleanSlateThreadService.js.map +1 -0
  405. package/dist/services/cleanSlateTools.d.ts +29 -0
  406. package/dist/services/cleanSlateTools.d.ts.map +1 -0
  407. package/dist/services/cleanSlateTools.js +38 -0
  408. package/dist/services/cleanSlateTools.js.map +1 -0
  409. package/dist/services/cleanSlateVerificationTargetTracker.d.ts +23 -0
  410. package/dist/services/cleanSlateVerificationTargetTracker.d.ts.map +1 -0
  411. package/dist/services/cleanSlateVerificationTargetTracker.js +214 -0
  412. package/dist/services/cleanSlateVerificationTargetTracker.js.map +1 -0
  413. package/dist/skills/cleanSlateSkillCatalog.d.ts +29 -0
  414. package/dist/skills/cleanSlateSkillCatalog.d.ts.map +1 -0
  415. package/dist/skills/cleanSlateSkillCatalog.js +225 -0
  416. package/dist/skills/cleanSlateSkillCatalog.js.map +1 -0
  417. package/dist/tools/ApplyEditTool.d.ts +73 -0
  418. package/dist/tools/ApplyEditTool.d.ts.map +1 -0
  419. package/dist/tools/ApplyEditTool.js +741 -0
  420. package/dist/tools/ApplyEditTool.js.map +1 -0
  421. package/dist/tools/AskQuestionTool.d.ts +3 -0
  422. package/dist/tools/AskQuestionTool.d.ts.map +1 -0
  423. package/dist/tools/AskQuestionTool.js +113 -0
  424. package/dist/tools/AskQuestionTool.js.map +1 -0
  425. package/dist/tools/BrowserAutomationTools.d.ts +28 -0
  426. package/dist/tools/BrowserAutomationTools.d.ts.map +1 -0
  427. package/dist/tools/BrowserAutomationTools.js +639 -0
  428. package/dist/tools/BrowserAutomationTools.js.map +1 -0
  429. package/dist/tools/CreateMultipleFilesTool.d.ts +6 -0
  430. package/dist/tools/CreateMultipleFilesTool.d.ts.map +1 -0
  431. package/dist/tools/CreateMultipleFilesTool.js +115 -0
  432. package/dist/tools/CreateMultipleFilesTool.js.map +1 -0
  433. package/dist/tools/ExecuteCommandTool.d.ts +12 -0
  434. package/dist/tools/ExecuteCommandTool.d.ts.map +1 -0
  435. package/dist/tools/ExecuteCommandTool.js +378 -0
  436. package/dist/tools/ExecuteCommandTool.js.map +1 -0
  437. package/dist/tools/FileHistoryRewindTool.d.ts +3 -0
  438. package/dist/tools/FileHistoryRewindTool.d.ts.map +1 -0
  439. package/dist/tools/FileHistoryRewindTool.js +45 -0
  440. package/dist/tools/FileHistoryRewindTool.js.map +1 -0
  441. package/dist/tools/FindByNameTool.d.ts +6 -0
  442. package/dist/tools/FindByNameTool.d.ts.map +1 -0
  443. package/dist/tools/FindByNameTool.js +80 -0
  444. package/dist/tools/FindByNameTool.js.map +1 -0
  445. package/dist/tools/FindReferencesTool.d.ts +3 -0
  446. package/dist/tools/FindReferencesTool.d.ts.map +1 -0
  447. package/dist/tools/FindReferencesTool.js +128 -0
  448. package/dist/tools/FindReferencesTool.js.map +1 -0
  449. package/dist/tools/GetDefinitionsTool.d.ts +3 -0
  450. package/dist/tools/GetDefinitionsTool.d.ts.map +1 -0
  451. package/dist/tools/GetDefinitionsTool.js +136 -0
  452. package/dist/tools/GetDefinitionsTool.js.map +1 -0
  453. package/dist/tools/GetOpenFilesTool.d.ts +6 -0
  454. package/dist/tools/GetOpenFilesTool.d.ts.map +1 -0
  455. package/dist/tools/GetOpenFilesTool.js +21 -0
  456. package/dist/tools/GetOpenFilesTool.js.map +1 -0
  457. package/dist/tools/GrepSearchTool.d.ts +7 -0
  458. package/dist/tools/GrepSearchTool.d.ts.map +1 -0
  459. package/dist/tools/GrepSearchTool.js +95 -0
  460. package/dist/tools/GrepSearchTool.js.map +1 -0
  461. package/dist/tools/ListDirTool.d.ts +6 -0
  462. package/dist/tools/ListDirTool.d.ts.map +1 -0
  463. package/dist/tools/ListDirTool.js +39 -0
  464. package/dist/tools/ListDirTool.js.map +1 -0
  465. package/dist/tools/MCPTools.d.ts +6 -0
  466. package/dist/tools/MCPTools.d.ts.map +1 -0
  467. package/dist/tools/MCPTools.js +103 -0
  468. package/dist/tools/MCPTools.js.map +1 -0
  469. package/dist/tools/MultiFileReplaceTool.d.ts +6 -0
  470. package/dist/tools/MultiFileReplaceTool.d.ts.map +1 -0
  471. package/dist/tools/MultiFileReplaceTool.js +345 -0
  472. package/dist/tools/MultiFileReplaceTool.js.map +1 -0
  473. package/dist/tools/ReadFileRangeTool.d.ts +6 -0
  474. package/dist/tools/ReadFileRangeTool.d.ts.map +1 -0
  475. package/dist/tools/ReadFileRangeTool.js +150 -0
  476. package/dist/tools/ReadFileRangeTool.js.map +1 -0
  477. package/dist/tools/ReadFileTool.d.ts +6 -0
  478. package/dist/tools/ReadFileTool.d.ts.map +1 -0
  479. package/dist/tools/ReadFileTool.js +183 -0
  480. package/dist/tools/ReadFileTool.js.map +1 -0
  481. package/dist/tools/ReadLintsTool.d.ts +6 -0
  482. package/dist/tools/ReadLintsTool.d.ts.map +1 -0
  483. package/dist/tools/ReadLintsTool.js +83 -0
  484. package/dist/tools/ReadLintsTool.js.map +1 -0
  485. package/dist/tools/ReadReferenceTool.d.ts +6 -0
  486. package/dist/tools/ReadReferenceTool.d.ts.map +1 -0
  487. package/dist/tools/ReadReferenceTool.js +24 -0
  488. package/dist/tools/ReadReferenceTool.js.map +1 -0
  489. package/dist/tools/ReadSymbolsTool.d.ts +3 -0
  490. package/dist/tools/ReadSymbolsTool.d.ts.map +1 -0
  491. package/dist/tools/ReadSymbolsTool.js +100 -0
  492. package/dist/tools/ReadSymbolsTool.js.map +1 -0
  493. package/dist/tools/SearchCodebaseTool.d.ts +6 -0
  494. package/dist/tools/SearchCodebaseTool.d.ts.map +1 -0
  495. package/dist/tools/SearchCodebaseTool.js +30 -0
  496. package/dist/tools/SearchCodebaseTool.js.map +1 -0
  497. package/dist/tools/SearchWorkspaceTool.d.ts +7 -0
  498. package/dist/tools/SearchWorkspaceTool.d.ts.map +1 -0
  499. package/dist/tools/SearchWorkspaceTool.js +21 -0
  500. package/dist/tools/SearchWorkspaceTool.js.map +1 -0
  501. package/dist/tools/SemanticSearchTool.d.ts +12 -0
  502. package/dist/tools/SemanticSearchTool.d.ts.map +1 -0
  503. package/dist/tools/SemanticSearchTool.js +46 -0
  504. package/dist/tools/SemanticSearchTool.js.map +1 -0
  505. package/dist/tools/SkillTools.d.ts +3 -0
  506. package/dist/tools/SkillTools.d.ts.map +1 -0
  507. package/dist/tools/SkillTools.js +108 -0
  508. package/dist/tools/SkillTools.js.map +1 -0
  509. package/dist/tools/SpawnWorkerTool.d.ts +6 -0
  510. package/dist/tools/SpawnWorkerTool.d.ts.map +1 -0
  511. package/dist/tools/SpawnWorkerTool.js +28 -0
  512. package/dist/tools/SpawnWorkerTool.js.map +1 -0
  513. package/dist/tools/SubmitArtifactTool.d.ts +3 -0
  514. package/dist/tools/SubmitArtifactTool.d.ts.map +1 -0
  515. package/dist/tools/SubmitArtifactTool.js +121 -0
  516. package/dist/tools/SubmitArtifactTool.js.map +1 -0
  517. package/dist/tools/UndoEditTool.d.ts +3 -0
  518. package/dist/tools/UndoEditTool.d.ts.map +1 -0
  519. package/dist/tools/UndoEditTool.js +66 -0
  520. package/dist/tools/UndoEditTool.js.map +1 -0
  521. package/dist/tools/UpdateTodoTool.d.ts +6 -0
  522. package/dist/tools/UpdateTodoTool.d.ts.map +1 -0
  523. package/dist/tools/UpdateTodoTool.js +116 -0
  524. package/dist/tools/UpdateTodoTool.js.map +1 -0
  525. package/dist/tools/WebRetrievalTools.d.ts +4 -0
  526. package/dist/tools/WebRetrievalTools.d.ts.map +1 -0
  527. package/dist/tools/WebRetrievalTools.js +169 -0
  528. package/dist/tools/WebRetrievalTools.js.map +1 -0
  529. package/dist/tools/WriteFileTool.d.ts +6 -0
  530. package/dist/tools/WriteFileTool.d.ts.map +1 -0
  531. package/dist/tools/WriteFileTool.js +145 -0
  532. package/dist/tools/WriteFileTool.js.map +1 -0
  533. package/dist/tools/cleanSlateFileReadPolicy.d.ts +33 -0
  534. package/dist/tools/cleanSlateFileReadPolicy.d.ts.map +1 -0
  535. package/dist/tools/cleanSlateFileReadPolicy.js +84 -0
  536. package/dist/tools/cleanSlateFileReadPolicy.js.map +1 -0
  537. package/dist/tools/cleanSlateHostTypes.d.ts +100 -0
  538. package/dist/tools/cleanSlateHostTypes.d.ts.map +1 -0
  539. package/dist/tools/cleanSlateHostTypes.js +6 -0
  540. package/dist/tools/cleanSlateHostTypes.js.map +1 -0
  541. package/dist/tools/cleanSlatePlanArtifactPolicy.d.ts +47 -0
  542. package/dist/tools/cleanSlatePlanArtifactPolicy.d.ts.map +1 -0
  543. package/dist/tools/cleanSlatePlanArtifactPolicy.js +126 -0
  544. package/dist/tools/cleanSlatePlanArtifactPolicy.js.map +1 -0
  545. package/dist/tools/cleanSlateStaleDiagnosticPolicy.d.ts +3 -0
  546. package/dist/tools/cleanSlateStaleDiagnosticPolicy.d.ts.map +1 -0
  547. package/dist/tools/cleanSlateStaleDiagnosticPolicy.js +13 -0
  548. package/dist/tools/cleanSlateStaleDiagnosticPolicy.js.map +1 -0
  549. package/dist/tools/languageFeatureActivation.d.ts +13 -0
  550. package/dist/tools/languageFeatureActivation.d.ts.map +1 -0
  551. package/dist/tools/languageFeatureActivation.js +95 -0
  552. package/dist/tools/languageFeatureActivation.js.map +1 -0
  553. package/dist/tools/registry.d.ts +5 -0
  554. package/dist/tools/registry.d.ts.map +1 -0
  555. package/dist/tools/registry.js +104 -0
  556. package/dist/tools/registry.js.map +1 -0
  557. package/dist/tools/structuredEditCanonicalizer.d.ts +11 -0
  558. package/dist/tools/structuredEditCanonicalizer.d.ts.map +1 -0
  559. package/dist/tools/structuredEditCanonicalizer.js +44 -0
  560. package/dist/tools/structuredEditCanonicalizer.js.map +1 -0
  561. package/dist/tools/symbolContext.d.ts +36 -0
  562. package/dist/tools/symbolContext.d.ts.map +1 -0
  563. package/dist/tools/symbolContext.js +146 -0
  564. package/dist/tools/symbolContext.js.map +1 -0
  565. package/dist/tools/symbolEditResolver.d.ts +11 -0
  566. package/dist/tools/symbolEditResolver.d.ts.map +1 -0
  567. package/dist/tools/symbolEditResolver.js +259 -0
  568. package/dist/tools/symbolEditResolver.js.map +1 -0
  569. package/dist/tools/symbolIndex.d.ts +18 -0
  570. package/dist/tools/symbolIndex.d.ts.map +1 -0
  571. package/dist/tools/symbolIndex.js +235 -0
  572. package/dist/tools/symbolIndex.js.map +1 -0
  573. package/dist/tools/types.d.ts +108 -0
  574. package/dist/tools/types.d.ts.map +1 -0
  575. package/dist/tools/types.js +6 -0
  576. package/dist/tools/types.js.map +1 -0
  577. package/dist/tools/utils.d.ts +56 -0
  578. package/dist/tools/utils.d.ts.map +1 -0
  579. package/dist/tools/utils.js +205 -0
  580. package/dist/tools/utils.js.map +1 -0
  581. package/package.json +71 -0
@@ -0,0 +1,1079 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) CleanSlate. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { AgentPhase } from '../agent/cleanSlatePrompts.js';
6
+ import { CleanSlateTaskKind, CleanSlateTaskLifecycleStatus, CleanSlateTurnIntent, CleanSlateWorkspaceShape } from './cleanSlateTaskState.js';
7
+ import { CleanSlateVerificationTargetTracker } from './cleanSlateVerificationTargetTracker.js';
8
+ import { CleanSlateTaskEvidenceCodec } from './cleanSlateTaskEvidenceCodec.js';
9
+ export class CleanSlateTaskSessionService {
10
+ constructor() {
11
+ this.verificationTargetTracker = new CleanSlateVerificationTargetTracker();
12
+ this.evidenceCodec = new CleanSlateTaskEvidenceCodec();
13
+ this.startedAt = 0;
14
+ this.currentPhase = AgentPhase.PLANNING;
15
+ this.currentStatus = CleanSlateTaskLifecycleStatus.IDLE;
16
+ this.awaitingApproval = false;
17
+ this.currentTaskKind = CleanSlateTaskKind.UNKNOWN;
18
+ this.currentWorkspaceShape = CleanSlateWorkspaceShape.UNKNOWN;
19
+ this.lastCheckpointAt = 0;
20
+ this.toDo = [];
21
+ this.discoveredPaths = [];
22
+ this.semanticHighlights = [];
23
+ this.executionFilesChanged = [];
24
+ this.resumeCount = 0;
25
+ this.checkpoints = [];
26
+ this.runLedger = [];
27
+ this.evidenceLedger = [];
28
+ this.verificationTargets = [];
29
+ }
30
+ static { this.MAX_CHECKPOINTS = 25; }
31
+ static { this.MAX_RUN_LEDGER_ENTRIES = 30; }
32
+ static { this.MAX_DISCOVERED_PATHS = 300; }
33
+ static { this.MAX_SEEDED_DISCOVERED_PATHS = 120; }
34
+ static { this.MAX_SEMANTIC_HIGHLIGHTS = 120; }
35
+ static { this.MAX_SEEDED_SEMANTIC_HIGHLIGHTS = 60; }
36
+ static { this.MAX_EVIDENCE_LEDGER_ENTRIES = 200; }
37
+ reset() {
38
+ this.taskId = undefined;
39
+ this.runId = undefined;
40
+ this.startedAt = 0;
41
+ this.currentPhase = AgentPhase.PLANNING;
42
+ this.currentStatus = CleanSlateTaskLifecycleStatus.IDLE;
43
+ this.awaitingApproval = false;
44
+ this.currentTaskKind = CleanSlateTaskKind.UNKNOWN;
45
+ this.currentWorkspaceShape = CleanSlateWorkspaceShape.UNKNOWN;
46
+ this.lastCheckpointAt = 0;
47
+ this.objective = undefined;
48
+ this.toDo = [];
49
+ this.discoveredPaths = [];
50
+ this.semanticHighlights = [];
51
+ this.executionFilesChanged = [];
52
+ this.currentWorkItem = undefined;
53
+ this.lastSummary = undefined;
54
+ this.lastError = undefined;
55
+ this.lastToolName = undefined;
56
+ this.resumeCount = 0;
57
+ this.checkpoints = [];
58
+ this.lastUserTurn = undefined;
59
+ this.lastAssistantTurn = undefined;
60
+ this.lastIntent = undefined;
61
+ this.runLedger = [];
62
+ this.evidenceLedger = [];
63
+ this.pendingRecovery = undefined;
64
+ this.verificationTargets = [];
65
+ }
66
+ startNewTask(taskKind, workspaceShape, initialUserTurn) {
67
+ this.archiveCurrentRunIfNeeded(this.getArchiveStatusForTaskSwitch());
68
+ const seededDiscoveredPaths = workspaceShape === CleanSlateWorkspaceShape.EXISTING
69
+ ? this.collectRecentDiscoveredPathsForNewTask()
70
+ : [];
71
+ const seededSemanticHighlights = workspaceShape === CleanSlateWorkspaceShape.EXISTING
72
+ ? this.collectRecentSemanticHighlightsForNewTask()
73
+ : [];
74
+ this.taskId = this.generateTaskId();
75
+ this.runId = this.generateRunId();
76
+ this.startedAt = Date.now();
77
+ this.currentPhase = AgentPhase.PLANNING;
78
+ this.awaitingApproval = false;
79
+ this.currentTaskKind = taskKind;
80
+ this.currentWorkspaceShape = workspaceShape;
81
+ this.currentStatus = taskKind === CleanSlateTaskKind.CHAT
82
+ ? CleanSlateTaskLifecycleStatus.CHAT
83
+ : CleanSlateTaskLifecycleStatus.PLANNING;
84
+ this.objective = initialUserTurn?.trim() || this.objective;
85
+ this.lastUserTurn = initialUserTurn?.trim() || this.lastUserTurn;
86
+ this.lastAssistantTurn = undefined;
87
+ this.toDo = [];
88
+ this.discoveredPaths = seededDiscoveredPaths;
89
+ this.semanticHighlights = seededSemanticHighlights;
90
+ this.executionFilesChanged = [];
91
+ this.currentWorkItem = undefined;
92
+ this.lastSummary = undefined;
93
+ this.lastError = undefined;
94
+ this.lastToolName = undefined;
95
+ this.resumeCount = 0;
96
+ this.checkpoints = [];
97
+ this.lastIntent = undefined;
98
+ this.evidenceLedger = [];
99
+ this.pendingRecovery = undefined;
100
+ this.verificationTargets = [];
101
+ this.checkpoint('lifecycle', this.objective ? `Started new task: ${this.objective}` : 'Started new task');
102
+ }
103
+ getTaskId() {
104
+ return this.taskId;
105
+ }
106
+ getRunId() {
107
+ return this.runId;
108
+ }
109
+ getPhase() {
110
+ return this.currentPhase;
111
+ }
112
+ setPhase(phase) {
113
+ const previousPhase = this.currentPhase;
114
+ this.currentPhase = phase;
115
+ if (this.awaitingApproval) {
116
+ this.currentStatus = CleanSlateTaskLifecycleStatus.AWAITING_APPROVAL;
117
+ }
118
+ else if (!this.isTerminalStatus(this.currentStatus) && this.currentStatus !== CleanSlateTaskLifecycleStatus.INTERRUPTED) {
119
+ this.currentStatus = this.phaseToStatus(phase);
120
+ }
121
+ if (previousPhase !== phase) {
122
+ this.checkpoint('phase', `Transitioned from ${previousPhase} to ${phase}`);
123
+ }
124
+ else {
125
+ this.checkpoint();
126
+ }
127
+ }
128
+ getStatus() {
129
+ return this.currentStatus;
130
+ }
131
+ markAwaitingApproval() {
132
+ this.currentPhase = AgentPhase.PLANNING;
133
+ this.awaitingApproval = true;
134
+ this.currentStatus = CleanSlateTaskLifecycleStatus.AWAITING_APPROVAL;
135
+ this.checkpoint('lifecycle', 'Plan drafted and awaiting approval');
136
+ }
137
+ approvePlan() {
138
+ this.awaitingApproval = false;
139
+ this.currentPhase = AgentPhase.EXECUTION;
140
+ this.currentStatus = CleanSlateTaskLifecycleStatus.EXECUTING;
141
+ this.checkpoint('lifecycle', 'Plan approved');
142
+ }
143
+ resumeCurrentTask() {
144
+ if (this.awaitingApproval) {
145
+ this.currentStatus = CleanSlateTaskLifecycleStatus.AWAITING_APPROVAL;
146
+ }
147
+ else if (this.currentStatus === CleanSlateTaskLifecycleStatus.INTERRUPTED || this.currentStatus === CleanSlateTaskLifecycleStatus.IDLE) {
148
+ this.currentStatus = this.phaseToStatus(this.currentPhase);
149
+ }
150
+ this.resumeCount += 1;
151
+ this.checkpoint('resume', `Resumed task in ${this.currentPhase}`);
152
+ }
153
+ markInterrupted() {
154
+ if (this.awaitingApproval || this.isTerminalStatus(this.currentStatus) || this.currentTaskKind === CleanSlateTaskKind.CHAT) {
155
+ return;
156
+ }
157
+ this.currentStatus = CleanSlateTaskLifecycleStatus.INTERRUPTED;
158
+ this.checkpoint('lifecycle', `Task interrupted during ${this.currentPhase}`);
159
+ }
160
+ markCompleted() {
161
+ this.awaitingApproval = false;
162
+ this.currentStatus = CleanSlateTaskLifecycleStatus.COMPLETED;
163
+ this.checkpoint('lifecycle', 'Task completed');
164
+ }
165
+ markFailed() {
166
+ this.awaitingApproval = false;
167
+ this.currentStatus = CleanSlateTaskLifecycleStatus.FAILED;
168
+ this.checkpoint('error', this.lastError || 'Task failed');
169
+ }
170
+ markCancelled() {
171
+ this.awaitingApproval = false;
172
+ this.currentStatus = CleanSlateTaskLifecycleStatus.CANCELLED;
173
+ this.checkpoint('lifecycle', 'Task cancelled');
174
+ }
175
+ isAwaitingApproval() {
176
+ return this.awaitingApproval;
177
+ }
178
+ setAwaitingApproval(awaiting) {
179
+ this.awaitingApproval = awaiting;
180
+ if (awaiting) {
181
+ this.currentPhase = AgentPhase.PLANNING;
182
+ this.currentStatus = CleanSlateTaskLifecycleStatus.AWAITING_APPROVAL;
183
+ }
184
+ else if (!this.isTerminalStatus(this.currentStatus) && this.currentStatus !== CleanSlateTaskLifecycleStatus.INTERRUPTED) {
185
+ this.currentStatus = this.phaseToStatus(this.currentPhase);
186
+ }
187
+ this.checkpoint('lifecycle', awaiting ? 'Awaiting approval' : `Approval cleared in ${this.currentPhase}`);
188
+ }
189
+ getTaskKind() {
190
+ return this.currentTaskKind;
191
+ }
192
+ setTaskKind(taskKind) {
193
+ this.currentTaskKind = taskKind;
194
+ if (taskKind === CleanSlateTaskKind.CHAT) {
195
+ this.currentStatus = CleanSlateTaskLifecycleStatus.CHAT;
196
+ }
197
+ this.checkpoint();
198
+ }
199
+ getWorkspaceShape() {
200
+ return this.currentWorkspaceShape;
201
+ }
202
+ setWorkspaceShape(workspaceShape) {
203
+ this.currentWorkspaceShape = workspaceShape;
204
+ this.checkpoint();
205
+ }
206
+ recordUserTurn(text) {
207
+ if (text.trim().length > 0) {
208
+ if (!this.objective || this.isTerminalStatus(this.currentStatus)) {
209
+ this.objective = text;
210
+ }
211
+ this.lastUserTurn = text;
212
+ this.checkpoint();
213
+ }
214
+ }
215
+ recordAssistantTurn(text) {
216
+ if (text.trim().length > 0) {
217
+ this.lastAssistantTurn = text;
218
+ this.checkpoint();
219
+ }
220
+ }
221
+ recordAssistantSummary(summary) {
222
+ if (typeof summary === 'string' && summary.trim().length > 0) {
223
+ const normalized = summary.trim();
224
+ if (this.lastSummary === normalized) {
225
+ return;
226
+ }
227
+ this.lastSummary = normalized;
228
+ this.checkpoint('progress', normalized);
229
+ }
230
+ }
231
+ recordProgressSummary(summary) {
232
+ this.recordAssistantSummary(summary);
233
+ }
234
+ getLastUserTurn() {
235
+ return this.lastUserTurn;
236
+ }
237
+ getLastAssistantTurn() {
238
+ return this.lastAssistantTurn;
239
+ }
240
+ recordIntent(intent) {
241
+ this.lastIntent = intent;
242
+ this.checkpoint();
243
+ }
244
+ updateObjective(objective) {
245
+ if (typeof objective === 'string' && objective.trim().length > 0) {
246
+ this.objective = objective.trim();
247
+ this.checkpoint();
248
+ }
249
+ }
250
+ getObjective() {
251
+ return this.objective;
252
+ }
253
+ updateToDo(toDo) {
254
+ const normalized = Array.isArray(toDo)
255
+ ? toDo
256
+ .map(item => typeof item === 'string' ? item.trim() : '')
257
+ .filter(item => item.length > 0)
258
+ : [];
259
+ if (this.areStringArraysEqual(this.toDo, normalized)) {
260
+ return;
261
+ }
262
+ this.toDo = normalized;
263
+ this.currentWorkItem = this.deriveCurrentWorkItem(normalized);
264
+ this.checkpoint('progress', this.currentWorkItem ? `Updated to do: ${this.currentWorkItem}` : 'Updated to do list');
265
+ }
266
+ recordDiscoveredPaths(paths) {
267
+ if (!Array.isArray(paths) || paths.length === 0) {
268
+ return;
269
+ }
270
+ let changed = false;
271
+ for (const candidate of paths) {
272
+ if (typeof candidate !== 'string') {
273
+ continue;
274
+ }
275
+ const trimmed = candidate.trim();
276
+ if (!trimmed) {
277
+ continue;
278
+ }
279
+ const normalized = trimmed.replace(/\\/g, '/');
280
+ const key = normalized.toLowerCase();
281
+ const existingIndex = this.discoveredPaths.findIndex(path => path.replace(/\\/g, '/').toLowerCase() === key);
282
+ if (existingIndex !== -1) {
283
+ if (existingIndex !== this.discoveredPaths.length - 1) {
284
+ this.discoveredPaths.splice(existingIndex, 1);
285
+ this.discoveredPaths.push(normalized);
286
+ changed = true;
287
+ }
288
+ continue;
289
+ }
290
+ this.discoveredPaths.push(normalized);
291
+ changed = true;
292
+ }
293
+ if (!changed) {
294
+ return;
295
+ }
296
+ if (this.discoveredPaths.length > CleanSlateTaskSessionService.MAX_DISCOVERED_PATHS) {
297
+ this.discoveredPaths.splice(0, this.discoveredPaths.length - CleanSlateTaskSessionService.MAX_DISCOVERED_PATHS);
298
+ }
299
+ }
300
+ getDiscoveredPaths() {
301
+ return [...this.discoveredPaths];
302
+ }
303
+ recordSemanticHighlights(highlights) {
304
+ if (!Array.isArray(highlights) || highlights.length === 0) {
305
+ return;
306
+ }
307
+ let changed = false;
308
+ for (const candidate of highlights) {
309
+ if (typeof candidate !== 'string') {
310
+ continue;
311
+ }
312
+ const normalized = candidate.trim();
313
+ if (!normalized) {
314
+ continue;
315
+ }
316
+ const key = normalized.toLowerCase();
317
+ const existingIndex = this.semanticHighlights.findIndex(item => item.toLowerCase() === key);
318
+ if (existingIndex !== -1) {
319
+ if (existingIndex !== this.semanticHighlights.length - 1) {
320
+ this.semanticHighlights.splice(existingIndex, 1);
321
+ this.semanticHighlights.push(normalized);
322
+ changed = true;
323
+ }
324
+ continue;
325
+ }
326
+ this.semanticHighlights.push(normalized);
327
+ changed = true;
328
+ }
329
+ if (!changed) {
330
+ return;
331
+ }
332
+ if (this.semanticHighlights.length > CleanSlateTaskSessionService.MAX_SEMANTIC_HIGHLIGHTS) {
333
+ this.semanticHighlights.splice(0, this.semanticHighlights.length - CleanSlateTaskSessionService.MAX_SEMANTIC_HIGHLIGHTS);
334
+ }
335
+ }
336
+ getSemanticHighlights() {
337
+ return [...this.semanticHighlights];
338
+ }
339
+ recordExecutionFilesChanged(filesChanged) {
340
+ if (!Array.isArray(filesChanged)) {
341
+ return;
342
+ }
343
+ const normalized = [];
344
+ const seen = new Set();
345
+ for (const change of filesChanged) {
346
+ if (!change || typeof change.path !== 'string') {
347
+ continue;
348
+ }
349
+ const path = change.path.trim().replace(/\\/g, '/');
350
+ if (!path) {
351
+ continue;
352
+ }
353
+ const key = path.toLowerCase();
354
+ const existingIndex = normalized.findIndex(item => item.path.toLowerCase() === key);
355
+ const normalizedChange = {
356
+ path,
357
+ added: typeof change.added === 'number' ? change.added : undefined,
358
+ deleted: typeof change.deleted === 'number' ? change.deleted : undefined
359
+ };
360
+ if (seen.has(key) && existingIndex !== -1) {
361
+ normalized.splice(existingIndex, 1);
362
+ }
363
+ else {
364
+ seen.add(key);
365
+ }
366
+ normalized.push(normalizedChange);
367
+ }
368
+ if (normalized.length === 0) {
369
+ return;
370
+ }
371
+ this.executionFilesChanged = normalized;
372
+ }
373
+ getExecutionFilesChanged() {
374
+ return [...this.executionFilesChanged];
375
+ }
376
+ setPendingRecovery(prompt, metadata) {
377
+ const normalizedPrompt = typeof prompt === 'string' ? prompt.trim() : '';
378
+ if (!normalizedPrompt) {
379
+ this.clearPendingRecovery();
380
+ return;
381
+ }
382
+ const nextState = {
383
+ prompt: normalizedPrompt,
384
+ updatedAt: Date.now(),
385
+ toolName: typeof metadata?.toolName === 'string' && metadata.toolName.trim().length > 0 ? metadata.toolName.trim() : undefined,
386
+ code: typeof metadata?.code === 'string' && metadata.code.trim().length > 0 ? metadata.code.trim() : undefined
387
+ };
388
+ if (this.pendingRecovery
389
+ && this.pendingRecovery.prompt === nextState.prompt
390
+ && this.pendingRecovery.toolName === nextState.toolName
391
+ && this.pendingRecovery.code === nextState.code) {
392
+ return;
393
+ }
394
+ this.pendingRecovery = nextState;
395
+ this.checkpoint('error', `Recovery required${nextState.toolName ? ` after ${nextState.toolName}` : ''}`);
396
+ }
397
+ clearPendingRecovery() {
398
+ if (!this.pendingRecovery) {
399
+ return;
400
+ }
401
+ this.pendingRecovery = undefined;
402
+ this.checkpoint('progress', 'Recovery requirement cleared');
403
+ }
404
+ hasPendingRecovery() {
405
+ return !!this.pendingRecovery;
406
+ }
407
+ getPendingRecovery() {
408
+ return this.pendingRecovery ? { ...this.pendingRecovery } : undefined;
409
+ }
410
+ getVerificationTargets() {
411
+ return this.verificationTargets.map(target => ({
412
+ ...target,
413
+ sourcePaths: [...target.sourcePaths],
414
+ routeHints: [...target.routeHints]
415
+ }));
416
+ }
417
+ getPendingVerificationTargets() {
418
+ return this.getVerificationTargets().filter(target => target.status !== 'verified');
419
+ }
420
+ hasPendingVerification() {
421
+ return this.verificationTargets.some(target => target.status !== 'verified');
422
+ }
423
+ registerVerificationTargetsForPaths(paths, objective) {
424
+ const update = this.verificationTargetTracker.register(this.verificationTargets, paths, objective);
425
+ this.verificationTargets = update.targets;
426
+ if (update.changed) {
427
+ this.checkpoint('progress', 'Browser verification required for updated UI surfaces');
428
+ }
429
+ }
430
+ getToDo() {
431
+ return [...this.toDo];
432
+ }
433
+ getCurrentWorkItem() {
434
+ return this.currentWorkItem;
435
+ }
436
+ recordToolStart(toolName, summary) {
437
+ if (!toolName) {
438
+ return;
439
+ }
440
+ this.lastToolName = toolName;
441
+ this.checkpoint('tool', summary || `Started tool ${toolName}`, toolName);
442
+ }
443
+ recordToolResult(toolName, success, summary) {
444
+ if (!toolName) {
445
+ return;
446
+ }
447
+ this.lastToolName = toolName;
448
+ if (!success && summary) {
449
+ this.lastError = summary;
450
+ }
451
+ this.checkpoint('tool', summary || `${toolName} ${success ? 'succeeded' : 'failed'}`, toolName);
452
+ }
453
+ recordError(error) {
454
+ if (typeof error === 'string' && error.trim().length > 0) {
455
+ this.lastError = error.trim();
456
+ this.checkpoint('error', this.lastError);
457
+ }
458
+ }
459
+ getLastError() {
460
+ return this.lastError;
461
+ }
462
+ getLastSummary() {
463
+ return this.lastSummary;
464
+ }
465
+ getCheckpoints() {
466
+ return [...this.checkpoints];
467
+ }
468
+ getRunSummary() {
469
+ return {
470
+ taskId: this.taskId,
471
+ runId: this.runId,
472
+ startedAt: this.startedAt,
473
+ phase: this.currentPhase,
474
+ status: this.currentStatus,
475
+ objective: this.objective,
476
+ currentWorkItem: this.currentWorkItem,
477
+ toDo: [...this.toDo],
478
+ discoveredPaths: [...this.discoveredPaths],
479
+ semanticHighlights: [...this.semanticHighlights],
480
+ lastSummary: this.lastSummary,
481
+ lastError: this.lastError,
482
+ lastToolName: this.lastToolName,
483
+ awaitingApproval: this.awaitingApproval,
484
+ resumeCount: this.resumeCount,
485
+ lastCheckpointAt: this.lastCheckpointAt,
486
+ hasPendingRecovery: this.hasPendingRecovery(),
487
+ hasPendingVerification: this.hasPendingVerification(),
488
+ pendingVerificationTargetCount: this.getPendingVerificationTargets().length,
489
+ pendingRecovery: this.getPendingRecovery(),
490
+ verificationTargets: this.getVerificationTargets()
491
+ };
492
+ }
493
+ getRunLedger() {
494
+ return [...this.runLedger];
495
+ }
496
+ getEvidenceLedger() {
497
+ return this.evidenceLedger.map(entry => this.cloneEvidenceEntry(entry));
498
+ }
499
+ recordEvidence(entry) {
500
+ const timestamp = typeof entry.timestamp === 'number' && Number.isFinite(entry.timestamp)
501
+ ? entry.timestamp
502
+ : Date.now();
503
+ const normalizedFilesChanged = this.evidenceCodec.normalizeFileChanges(entry.filesChanged);
504
+ const normalizedPaths = this.evidenceCodec.normalizeEvidencePaths(entry.paths);
505
+ const normalizedEntry = {
506
+ id: typeof entry.id === 'string' && entry.id.trim().length > 0
507
+ ? entry.id.trim()
508
+ : `evidence-${timestamp}-${Math.random().toString(16).slice(2, 8)}`,
509
+ timestamp,
510
+ kind: entry.kind,
511
+ phase: this.normalizeEvidencePhase(entry.phase),
512
+ status: this.isValidStatus(entry.status) ? entry.status : this.currentStatus,
513
+ taskId: typeof entry.taskId === 'string' ? entry.taskId : this.taskId,
514
+ runId: typeof entry.runId === 'string' ? entry.runId : this.runId,
515
+ toolName: this.evidenceCodec.trimOptional(entry.toolName),
516
+ toolCallId: this.evidenceCodec.trimOptional(entry.toolCallId),
517
+ success: typeof entry.success === 'boolean' ? entry.success : undefined,
518
+ summary: this.evidenceCodec.trimOptional(entry.summary),
519
+ error: this.evidenceCodec.trimOptional(entry.error),
520
+ code: this.evidenceCodec.trimOptional(entry.code),
521
+ input: this.evidenceCodec.sanitizeEvidenceValue(entry.input),
522
+ result: this.evidenceCodec.sanitizeEvidenceValue(entry.result),
523
+ paths: normalizedPaths.length > 0 ? normalizedPaths : undefined,
524
+ filesChanged: normalizedFilesChanged.length > 0 ? normalizedFilesChanged : undefined,
525
+ command: this.evidenceCodec.trimOptional(entry.command),
526
+ cwd: this.evidenceCodec.trimOptional(entry.cwd),
527
+ processId: this.evidenceCodec.trimOptional(entry.processId),
528
+ pid: typeof entry.pid === 'number' && Number.isFinite(entry.pid) ? entry.pid : undefined,
529
+ exitCode: typeof entry.exitCode === 'number' && Number.isFinite(entry.exitCode) ? entry.exitCode : undefined,
530
+ durationMs: typeof entry.durationMs === 'number' && Number.isFinite(entry.durationMs) ? entry.durationMs : undefined,
531
+ url: this.evidenceCodec.trimOptional(entry.url),
532
+ screenshotCount: typeof entry.screenshotCount === 'number' && Number.isFinite(entry.screenshotCount) ? entry.screenshotCount : undefined,
533
+ browserPageCount: typeof entry.browserPageCount === 'number' && Number.isFinite(entry.browserPageCount) ? entry.browserPageCount : undefined,
534
+ turnId: this.evidenceCodec.trimOptional(entry.turnId),
535
+ turnIndex: typeof entry.turnIndex === 'number' && Number.isFinite(entry.turnIndex) ? entry.turnIndex : undefined
536
+ };
537
+ this.evidenceLedger.push(normalizedEntry);
538
+ if (this.evidenceLedger.length > CleanSlateTaskSessionService.MAX_EVIDENCE_LEDGER_ENTRIES) {
539
+ this.evidenceLedger.splice(0, this.evidenceLedger.length - CleanSlateTaskSessionService.MAX_EVIDENCE_LEDGER_ENTRIES);
540
+ }
541
+ if (normalizedFilesChanged.length > 0) {
542
+ this.recordExecutionFilesChanged(this.evidenceCodec.mergeFileChanges(this.executionFilesChanged, normalizedFilesChanged));
543
+ }
544
+ if (normalizedEntry.kind === 'browser' && normalizedEntry.success !== false) {
545
+ const verificationUpdate = this.verificationTargetTracker.recordBrowserEvidence(this.verificationTargets, normalizedEntry);
546
+ this.verificationTargets = verificationUpdate.targets;
547
+ if (verificationUpdate.changed) {
548
+ this.checkpoint('progress', 'Browser verification refreshed for updated UI surfaces');
549
+ }
550
+ }
551
+ }
552
+ checkpoint(kind = 'progress', summary, toolName) {
553
+ this.lastCheckpointAt = Date.now();
554
+ if (summary) {
555
+ this.pushCheckpoint({
556
+ id: `checkpoint-${this.lastCheckpointAt}-${Math.random().toString(16).slice(2, 6)}`,
557
+ timestamp: this.lastCheckpointAt,
558
+ kind,
559
+ phase: this.currentPhase,
560
+ status: this.currentStatus,
561
+ summary,
562
+ toolName,
563
+ currentWorkItem: this.currentWorkItem
564
+ });
565
+ }
566
+ }
567
+ getStateSnapshot() {
568
+ return {
569
+ taskId: this.taskId,
570
+ runId: this.runId,
571
+ startedAt: this.startedAt,
572
+ phase: this.currentPhase,
573
+ status: this.currentStatus,
574
+ awaitingApproval: this.awaitingApproval,
575
+ taskKind: this.currentTaskKind,
576
+ workspaceShape: this.currentWorkspaceShape,
577
+ lastCheckpointAt: this.lastCheckpointAt,
578
+ objective: this.objective,
579
+ toDo: [...this.toDo],
580
+ discoveredPaths: [...this.discoveredPaths],
581
+ semanticHighlights: [...this.semanticHighlights],
582
+ executionFilesChanged: [...this.executionFilesChanged],
583
+ currentWorkItem: this.currentWorkItem,
584
+ lastSummary: this.lastSummary,
585
+ lastError: this.lastError,
586
+ lastToolName: this.lastToolName,
587
+ resumeCount: this.resumeCount,
588
+ checkpoints: [...this.checkpoints],
589
+ lastUserTurn: this.lastUserTurn,
590
+ lastAssistantTurn: this.lastAssistantTurn,
591
+ lastIntent: this.lastIntent,
592
+ runLedger: [...this.runLedger],
593
+ evidenceLedger: this.getEvidenceLedger(),
594
+ pendingRecovery: this.getPendingRecovery(),
595
+ verificationTargets: this.getVerificationTargets()
596
+ };
597
+ }
598
+ restoreStateSnapshot(snapshot, options) {
599
+ this.taskId = typeof snapshot?.taskId === 'string' && snapshot.taskId.trim().length > 0
600
+ ? snapshot.taskId
601
+ : this.generateTaskId();
602
+ this.runId = typeof snapshot?.runId === 'string' && snapshot.runId.trim().length > 0
603
+ ? snapshot.runId
604
+ : this.generateRunId();
605
+ this.startedAt = typeof snapshot?.startedAt === 'number' && Number.isFinite(snapshot.startedAt)
606
+ ? snapshot.startedAt
607
+ : Date.now();
608
+ const normalizedPhase = this.normalizeLegacyPhase(snapshot?.phase);
609
+ this.currentPhase = this.isValidPhase(normalizedPhase) ? normalizedPhase : AgentPhase.PLANNING;
610
+ this.awaitingApproval = typeof snapshot?.awaitingApproval === 'boolean' ? snapshot.awaitingApproval : false;
611
+ this.currentTaskKind = this.isValidTaskKind(snapshot?.taskKind) ? snapshot.taskKind : CleanSlateTaskKind.UNKNOWN;
612
+ this.currentWorkspaceShape = this.isValidWorkspaceShape(snapshot?.workspaceShape) ? snapshot.workspaceShape : CleanSlateWorkspaceShape.UNKNOWN;
613
+ const normalizedStatus = this.normalizeLegacyStatus(snapshot?.status);
614
+ this.currentStatus = this.isValidStatus(normalizedStatus)
615
+ ? normalizedStatus
616
+ : (this.awaitingApproval ? CleanSlateTaskLifecycleStatus.AWAITING_APPROVAL : this.phaseToStatus(this.currentPhase));
617
+ this.lastCheckpointAt = typeof snapshot?.lastCheckpointAt === 'number' ? snapshot.lastCheckpointAt : Date.now();
618
+ this.objective = typeof snapshot?.objective === 'string' ? snapshot.objective : undefined;
619
+ this.toDo = Array.isArray(snapshot?.toDo)
620
+ ? snapshot.toDo.filter((item) => typeof item === 'string' && item.trim().length > 0)
621
+ : [];
622
+ this.discoveredPaths = Array.isArray(snapshot?.discoveredPaths)
623
+ ? snapshot.discoveredPaths
624
+ .filter((path) => typeof path === 'string' && path.trim().length > 0)
625
+ .map(path => path.trim().replace(/\\/g, '/'))
626
+ .slice(-CleanSlateTaskSessionService.MAX_DISCOVERED_PATHS)
627
+ : [];
628
+ this.semanticHighlights = Array.isArray(snapshot?.semanticHighlights)
629
+ ? snapshot.semanticHighlights
630
+ .filter((item) => typeof item === 'string' && item.trim().length > 0)
631
+ .map(item => item.trim())
632
+ .slice(-CleanSlateTaskSessionService.MAX_SEMANTIC_HIGHLIGHTS)
633
+ : [];
634
+ this.executionFilesChanged = Array.isArray(snapshot?.executionFilesChanged)
635
+ ? snapshot.executionFilesChanged.flatMap((change) => {
636
+ if (!change || typeof change.path !== 'string') {
637
+ return [];
638
+ }
639
+ const path = change.path.trim().replace(/\\/g, '/');
640
+ if (!path) {
641
+ return [];
642
+ }
643
+ return [{
644
+ path,
645
+ added: typeof change.added === 'number' ? change.added : undefined,
646
+ deleted: typeof change.deleted === 'number' ? change.deleted : undefined
647
+ }];
648
+ })
649
+ : [];
650
+ this.currentWorkItem = typeof snapshot?.currentWorkItem === 'string'
651
+ ? snapshot.currentWorkItem
652
+ : this.deriveCurrentWorkItem(this.toDo);
653
+ this.lastSummary = typeof snapshot?.lastSummary === 'string' ? snapshot.lastSummary : undefined;
654
+ this.lastError = typeof snapshot?.lastError === 'string' ? snapshot.lastError : undefined;
655
+ this.lastToolName = typeof snapshot?.lastToolName === 'string' ? snapshot.lastToolName : undefined;
656
+ this.resumeCount = typeof snapshot?.resumeCount === 'number' ? snapshot.resumeCount : 0;
657
+ this.checkpoints = Array.isArray(snapshot?.checkpoints)
658
+ ? snapshot.checkpoints.flatMap((checkpoint) => {
659
+ if (!checkpoint
660
+ || typeof checkpoint.id !== 'string'
661
+ || typeof checkpoint.timestamp !== 'number'
662
+ || typeof checkpoint.summary !== 'string') {
663
+ return [];
664
+ }
665
+ const phase = this.normalizeLegacyPhase(checkpoint.phase);
666
+ const status = this.normalizeLegacyStatus(checkpoint.status);
667
+ if (!this.isValidPhase(phase) || !this.isValidStatus(status)) {
668
+ return [];
669
+ }
670
+ return [{
671
+ ...checkpoint,
672
+ phase,
673
+ status
674
+ }];
675
+ })
676
+ : [];
677
+ this.lastUserTurn = typeof snapshot?.lastUserTurn === 'string' ? snapshot.lastUserTurn : undefined;
678
+ this.lastAssistantTurn = typeof snapshot?.lastAssistantTurn === 'string' ? snapshot.lastAssistantTurn : undefined;
679
+ this.lastIntent = this.isValidIntent(snapshot?.lastIntent) ? snapshot.lastIntent : undefined;
680
+ this.pendingRecovery = this.normalizePendingRecovery(snapshot?.pendingRecovery);
681
+ this.verificationTargets = this.verificationTargetTracker.normalize(snapshot?.verificationTargets);
682
+ this.runLedger = Array.isArray(snapshot?.runLedger)
683
+ ? snapshot.runLedger.flatMap((entry) => {
684
+ const normalizedEntry = this.normalizeLegacyRunLedgerEntry(entry);
685
+ return normalizedEntry ? [normalizedEntry] : [];
686
+ })
687
+ : [];
688
+ this.evidenceLedger = Array.isArray(snapshot?.evidenceLedger)
689
+ ? snapshot.evidenceLedger.flatMap((entry) => {
690
+ const normalizedEntry = this.normalizeEvidenceEntry(entry);
691
+ return normalizedEntry ? [normalizedEntry] : [];
692
+ }).slice(-CleanSlateTaskSessionService.MAX_EVIDENCE_LEDGER_ENTRIES)
693
+ : [];
694
+ const evidenceFilesChanged = this.evidenceLedger.flatMap(entry => entry.filesChanged ?? []);
695
+ if (evidenceFilesChanged.length > 0) {
696
+ this.executionFilesChanged = this.evidenceCodec.mergeFileChanges(this.executionFilesChanged, evidenceFilesChanged);
697
+ }
698
+ if (options?.markActiveTaskInterrupted && this.shouldMarkInterruptedAfterRestore()) {
699
+ this.currentStatus = CleanSlateTaskLifecycleStatus.INTERRUPTED;
700
+ this.lastCheckpointAt = Date.now();
701
+ this.pushCheckpoint({
702
+ id: `checkpoint-${this.lastCheckpointAt}-${Math.random().toString(16).slice(2, 6)}`,
703
+ timestamp: this.lastCheckpointAt,
704
+ kind: 'resume',
705
+ phase: this.currentPhase,
706
+ status: this.currentStatus,
707
+ summary: `Restored interrupted task in ${this.currentPhase}`,
708
+ currentWorkItem: this.currentWorkItem
709
+ });
710
+ }
711
+ }
712
+ normalizeEvidenceEntry(entry) {
713
+ if (!entry || typeof entry !== 'object') {
714
+ return undefined;
715
+ }
716
+ const candidate = entry;
717
+ if (!this.isValidEvidenceKind(candidate.kind)) {
718
+ return undefined;
719
+ }
720
+ const timestamp = typeof candidate.timestamp === 'number' && Number.isFinite(candidate.timestamp)
721
+ ? candidate.timestamp
722
+ : Date.now();
723
+ const filesChanged = this.evidenceCodec.normalizeFileChanges(candidate.filesChanged);
724
+ const paths = this.evidenceCodec.normalizeEvidencePaths(candidate.paths);
725
+ return {
726
+ id: typeof candidate.id === 'string' && candidate.id.trim().length > 0
727
+ ? candidate.id.trim()
728
+ : `evidence-${timestamp}-${Math.random().toString(16).slice(2, 8)}`,
729
+ timestamp,
730
+ kind: candidate.kind,
731
+ phase: this.normalizeEvidencePhase(candidate.phase),
732
+ status: this.isValidStatus(candidate.status) ? candidate.status : this.currentStatus,
733
+ taskId: this.evidenceCodec.trimOptional(candidate.taskId),
734
+ runId: this.evidenceCodec.trimOptional(candidate.runId),
735
+ toolName: this.evidenceCodec.trimOptional(candidate.toolName),
736
+ toolCallId: this.evidenceCodec.trimOptional(candidate.toolCallId),
737
+ success: typeof candidate.success === 'boolean' ? candidate.success : undefined,
738
+ summary: this.evidenceCodec.trimOptional(candidate.summary),
739
+ error: this.evidenceCodec.trimOptional(candidate.error),
740
+ code: this.evidenceCodec.trimOptional(candidate.code),
741
+ input: this.evidenceCodec.sanitizeEvidenceValue(candidate.input),
742
+ result: this.evidenceCodec.sanitizeEvidenceValue(candidate.result),
743
+ paths: paths.length > 0 ? paths : undefined,
744
+ filesChanged: filesChanged.length > 0 ? filesChanged : undefined,
745
+ command: this.evidenceCodec.trimOptional(candidate.command),
746
+ cwd: this.evidenceCodec.trimOptional(candidate.cwd),
747
+ processId: this.evidenceCodec.trimOptional(candidate.processId),
748
+ pid: typeof candidate.pid === 'number' && Number.isFinite(candidate.pid) ? candidate.pid : undefined,
749
+ exitCode: typeof candidate.exitCode === 'number' && Number.isFinite(candidate.exitCode) ? candidate.exitCode : undefined,
750
+ durationMs: typeof candidate.durationMs === 'number' && Number.isFinite(candidate.durationMs) ? candidate.durationMs : undefined,
751
+ url: this.evidenceCodec.trimOptional(candidate.url),
752
+ screenshotCount: typeof candidate.screenshotCount === 'number' && Number.isFinite(candidate.screenshotCount) ? candidate.screenshotCount : undefined,
753
+ browserPageCount: typeof candidate.browserPageCount === 'number' && Number.isFinite(candidate.browserPageCount) ? candidate.browserPageCount : undefined,
754
+ turnId: this.evidenceCodec.trimOptional(candidate.turnId),
755
+ turnIndex: typeof candidate.turnIndex === 'number' && Number.isFinite(candidate.turnIndex) ? candidate.turnIndex : undefined
756
+ };
757
+ }
758
+ normalizePendingRecovery(value) {
759
+ if (!value || typeof value !== 'object') {
760
+ return undefined;
761
+ }
762
+ const candidate = value;
763
+ const prompt = typeof candidate.prompt === 'string' ? candidate.prompt.trim() : '';
764
+ if (!prompt) {
765
+ return undefined;
766
+ }
767
+ return {
768
+ prompt,
769
+ updatedAt: typeof candidate.updatedAt === 'number' && Number.isFinite(candidate.updatedAt) ? candidate.updatedAt : Date.now(),
770
+ toolName: this.evidenceCodec.trimOptional(candidate.toolName),
771
+ code: this.evidenceCodec.trimOptional(candidate.code)
772
+ };
773
+ }
774
+ shouldMarkInterruptedAfterRestore() {
775
+ if (this.awaitingApproval || this.currentTaskKind === CleanSlateTaskKind.CHAT) {
776
+ return false;
777
+ }
778
+ return this.currentStatus === CleanSlateTaskLifecycleStatus.PLANNING
779
+ || this.currentStatus === CleanSlateTaskLifecycleStatus.EXECUTING
780
+ || this.currentStatus === CleanSlateTaskLifecycleStatus.VERIFYING;
781
+ }
782
+ phaseToStatus(phase) {
783
+ switch (phase) {
784
+ case AgentPhase.EXECUTION:
785
+ return CleanSlateTaskLifecycleStatus.EXECUTING;
786
+ case AgentPhase.VERIFICATION:
787
+ return CleanSlateTaskLifecycleStatus.VERIFYING;
788
+ case AgentPhase.PLANNING:
789
+ default:
790
+ return CleanSlateTaskLifecycleStatus.PLANNING;
791
+ }
792
+ }
793
+ generateTaskId() {
794
+ return `task-${Date.now()}-${Math.random().toString(16).slice(2, 8)}`;
795
+ }
796
+ generateRunId() {
797
+ return `run-${Date.now()}-${Math.random().toString(16).slice(2, 8)}`;
798
+ }
799
+ isTerminalStatus(status) {
800
+ return status === CleanSlateTaskLifecycleStatus.COMPLETED
801
+ || status === CleanSlateTaskLifecycleStatus.FAILED
802
+ || status === CleanSlateTaskLifecycleStatus.CANCELLED;
803
+ }
804
+ deriveCurrentWorkItem(toDo) {
805
+ const active = toDo.find(item => /^\s*\[(?:\s|\/)\]/.test(item))
806
+ ?? toDo.find(item => /^\s*\[x\]/i.test(item))
807
+ ?? toDo.at(-1);
808
+ if (!active) {
809
+ return undefined;
810
+ }
811
+ const clean = active.replace(/^\s*[-*]?\s*\[[xX/\s]\]\s*/, '').trim();
812
+ return clean || undefined;
813
+ }
814
+ pushCheckpoint(checkpoint) {
815
+ this.checkpoints.push(checkpoint);
816
+ if (this.checkpoints.length > CleanSlateTaskSessionService.MAX_CHECKPOINTS) {
817
+ this.checkpoints.splice(0, this.checkpoints.length - CleanSlateTaskSessionService.MAX_CHECKPOINTS);
818
+ }
819
+ }
820
+ cloneEvidenceEntry(entry) {
821
+ return {
822
+ ...entry,
823
+ input: this.evidenceCodec.sanitizeEvidenceValue(entry.input),
824
+ result: this.evidenceCodec.sanitizeEvidenceValue(entry.result),
825
+ paths: entry.paths ? [...entry.paths] : undefined,
826
+ filesChanged: entry.filesChanged ? entry.filesChanged.map(change => ({ ...change })) : undefined
827
+ };
828
+ }
829
+ archiveCurrentRunIfNeeded(statusOverride) {
830
+ const entry = this.createRunLedgerEntry(statusOverride);
831
+ if (!entry) {
832
+ return;
833
+ }
834
+ const existingIndex = this.runLedger.findIndex(run => run.runId === entry.runId);
835
+ if (existingIndex !== -1) {
836
+ this.runLedger.splice(existingIndex, 1);
837
+ }
838
+ this.runLedger.unshift(entry);
839
+ if (this.runLedger.length > CleanSlateTaskSessionService.MAX_RUN_LEDGER_ENTRIES) {
840
+ this.runLedger.length = CleanSlateTaskSessionService.MAX_RUN_LEDGER_ENTRIES;
841
+ }
842
+ }
843
+ collectRecentDiscoveredPathsForNewTask() {
844
+ const merged = [];
845
+ const seen = new Set();
846
+ const addPath = (candidate) => {
847
+ if (typeof candidate !== 'string') {
848
+ return;
849
+ }
850
+ const normalized = candidate.trim().replace(/\\/g, '/');
851
+ if (!normalized) {
852
+ return;
853
+ }
854
+ const key = normalized.toLowerCase();
855
+ if (seen.has(key)) {
856
+ const existingIndex = merged.findIndex(path => path.toLowerCase() === key);
857
+ if (existingIndex !== -1) {
858
+ merged.splice(existingIndex, 1);
859
+ }
860
+ }
861
+ else {
862
+ seen.add(key);
863
+ }
864
+ merged.push(normalized);
865
+ };
866
+ const addPathList = (paths) => {
867
+ if (!Array.isArray(paths)) {
868
+ return;
869
+ }
870
+ for (const path of paths) {
871
+ addPath(path);
872
+ }
873
+ };
874
+ for (let i = this.runLedger.length - 1; i >= 0; i--) {
875
+ addPathList(this.runLedger[i].discoveredPaths);
876
+ }
877
+ addPathList(this.discoveredPaths);
878
+ if (merged.length > CleanSlateTaskSessionService.MAX_SEEDED_DISCOVERED_PATHS) {
879
+ merged.splice(0, merged.length - CleanSlateTaskSessionService.MAX_SEEDED_DISCOVERED_PATHS);
880
+ }
881
+ return merged;
882
+ }
883
+ collectRecentSemanticHighlightsForNewTask() {
884
+ const merged = [];
885
+ const seen = new Set();
886
+ const addHighlight = (candidate) => {
887
+ if (typeof candidate !== 'string') {
888
+ return;
889
+ }
890
+ const normalized = candidate.trim();
891
+ if (!normalized) {
892
+ return;
893
+ }
894
+ const key = normalized.toLowerCase();
895
+ if (seen.has(key)) {
896
+ const existingIndex = merged.findIndex(item => item.toLowerCase() === key);
897
+ if (existingIndex !== -1) {
898
+ merged.splice(existingIndex, 1);
899
+ }
900
+ }
901
+ else {
902
+ seen.add(key);
903
+ }
904
+ merged.push(normalized);
905
+ };
906
+ const addHighlightList = (values) => {
907
+ if (!Array.isArray(values)) {
908
+ return;
909
+ }
910
+ for (const value of values) {
911
+ addHighlight(value);
912
+ }
913
+ };
914
+ for (let i = this.runLedger.length - 1; i >= 0; i--) {
915
+ addHighlightList(this.runLedger[i].semanticHighlights);
916
+ }
917
+ addHighlightList(this.semanticHighlights);
918
+ if (merged.length > CleanSlateTaskSessionService.MAX_SEEDED_SEMANTIC_HIGHLIGHTS) {
919
+ merged.splice(0, merged.length - CleanSlateTaskSessionService.MAX_SEEDED_SEMANTIC_HIGHLIGHTS);
920
+ }
921
+ return merged;
922
+ }
923
+ createRunLedgerEntry(statusOverride) {
924
+ if (!this.taskId || !this.runId) {
925
+ return undefined;
926
+ }
927
+ if (this.currentTaskKind === CleanSlateTaskKind.CHAT || this.currentStatus === CleanSlateTaskLifecycleStatus.IDLE) {
928
+ return undefined;
929
+ }
930
+ const status = statusOverride ?? this.currentStatus;
931
+ return {
932
+ taskId: this.taskId,
933
+ runId: this.runId,
934
+ startedAt: this.startedAt || this.lastCheckpointAt || Date.now(),
935
+ phase: this.currentPhase,
936
+ status,
937
+ objective: this.objective,
938
+ currentWorkItem: this.currentWorkItem,
939
+ toDo: [...this.toDo],
940
+ discoveredPaths: [...this.discoveredPaths],
941
+ semanticHighlights: [...this.semanticHighlights],
942
+ lastSummary: this.lastSummary,
943
+ lastError: this.lastError,
944
+ lastToolName: this.lastToolName,
945
+ awaitingApproval: this.awaitingApproval,
946
+ resumeCount: this.resumeCount,
947
+ lastCheckpointAt: this.lastCheckpointAt,
948
+ hasPendingRecovery: this.hasPendingRecovery(),
949
+ hasPendingVerification: this.hasPendingVerification(),
950
+ pendingVerificationTargetCount: this.getPendingVerificationTargets().length,
951
+ taskKind: this.currentTaskKind,
952
+ workspaceShape: this.currentWorkspaceShape,
953
+ archivedAt: Date.now()
954
+ };
955
+ }
956
+ getArchiveStatusForTaskSwitch() {
957
+ if (!this.taskId || this.currentStatus === CleanSlateTaskLifecycleStatus.IDLE || this.currentTaskKind === CleanSlateTaskKind.CHAT) {
958
+ return undefined;
959
+ }
960
+ if (this.isTerminalStatus(this.currentStatus) || this.currentStatus === CleanSlateTaskLifecycleStatus.INTERRUPTED) {
961
+ return this.currentStatus;
962
+ }
963
+ if (this.awaitingApproval) {
964
+ return CleanSlateTaskLifecycleStatus.AWAITING_APPROVAL;
965
+ }
966
+ return CleanSlateTaskLifecycleStatus.INTERRUPTED;
967
+ }
968
+ areStringArraysEqual(left, right) {
969
+ if (left.length !== right.length) {
970
+ return false;
971
+ }
972
+ for (let i = 0; i < left.length; i++) {
973
+ if (left[i] !== right[i]) {
974
+ return false;
975
+ }
976
+ }
977
+ return true;
978
+ }
979
+ isValidPhase(value) {
980
+ return value === AgentPhase.PLANNING
981
+ || value === AgentPhase.EXECUTION
982
+ || value === AgentPhase.VERIFICATION;
983
+ }
984
+ normalizeEvidencePhase(value) {
985
+ if (value === 'CHAT') {
986
+ return 'CHAT';
987
+ }
988
+ const phase = this.normalizeLegacyPhase(value);
989
+ return this.isValidPhase(phase) ? phase : this.currentPhase;
990
+ }
991
+ isValidEvidenceKind(value) {
992
+ return value === 'assistant_turn_start'
993
+ || value === 'assistant_turn_complete'
994
+ || value === 'tool_start'
995
+ || value === 'tool_result'
996
+ || value === 'read'
997
+ || value === 'mutation'
998
+ || value === 'command'
999
+ || value === 'browser'
1000
+ || value === 'artifact'
1001
+ || value === 'diagnostic'
1002
+ || value === 'completion'
1003
+ || value === 'error';
1004
+ }
1005
+ isValidTaskKind(value) {
1006
+ return value === CleanSlateTaskKind.UNKNOWN
1007
+ || value === CleanSlateTaskKind.CHAT
1008
+ || value === CleanSlateTaskKind.MODIFY_EXISTING
1009
+ || value === CleanSlateTaskKind.BOOTSTRAP_PROJECT;
1010
+ }
1011
+ isValidWorkspaceShape(value) {
1012
+ return value === CleanSlateWorkspaceShape.UNKNOWN
1013
+ || value === CleanSlateWorkspaceShape.EMPTY
1014
+ || value === CleanSlateWorkspaceShape.EXISTING;
1015
+ }
1016
+ isValidStatus(value) {
1017
+ return value === CleanSlateTaskLifecycleStatus.IDLE
1018
+ || value === CleanSlateTaskLifecycleStatus.CHAT
1019
+ || value === CleanSlateTaskLifecycleStatus.PLANNING
1020
+ || value === CleanSlateTaskLifecycleStatus.AWAITING_APPROVAL
1021
+ || value === CleanSlateTaskLifecycleStatus.EXECUTING
1022
+ || value === CleanSlateTaskLifecycleStatus.VERIFYING
1023
+ || value === CleanSlateTaskLifecycleStatus.INTERRUPTED
1024
+ || value === CleanSlateTaskLifecycleStatus.COMPLETED
1025
+ || value === CleanSlateTaskLifecycleStatus.FAILED
1026
+ || value === CleanSlateTaskLifecycleStatus.CANCELLED;
1027
+ }
1028
+ isValidIntent(value) {
1029
+ return value === CleanSlateTurnIntent.APPROVE_PLAN
1030
+ || value === CleanSlateTurnIntent.CONTINUE_CURRENT
1031
+ || value === CleanSlateTurnIntent.START_NEW_TASK
1032
+ || value === CleanSlateTurnIntent.CANCEL_CURRENT
1033
+ || value === CleanSlateTurnIntent.RERUN_LAST_TASK
1034
+ || value === CleanSlateTurnIntent.REVISE_PLAN;
1035
+ }
1036
+ isValidRunLedgerEntry(value) {
1037
+ if (!value || typeof value !== 'object') {
1038
+ return false;
1039
+ }
1040
+ const entry = value;
1041
+ return typeof entry.runId === 'string'
1042
+ && typeof entry.startedAt === 'number'
1043
+ && typeof entry.archivedAt === 'number'
1044
+ && this.isValidPhase(entry.phase)
1045
+ && this.isValidStatus(entry.status)
1046
+ && this.isValidTaskKind(entry.taskKind)
1047
+ && this.isValidWorkspaceShape(entry.workspaceShape);
1048
+ }
1049
+ normalizeLegacyPhase(value) {
1050
+ if (value === 'PREPARING') {
1051
+ return AgentPhase.EXECUTION;
1052
+ }
1053
+ return this.isValidPhase(value) ? value : undefined;
1054
+ }
1055
+ normalizeLegacyStatus(value) {
1056
+ if (value === 'PREPARING') {
1057
+ return CleanSlateTaskLifecycleStatus.EXECUTING;
1058
+ }
1059
+ return this.isValidStatus(value) ? value : undefined;
1060
+ }
1061
+ normalizeLegacyRunLedgerEntry(value) {
1062
+ if (!value || typeof value !== 'object') {
1063
+ return undefined;
1064
+ }
1065
+ const entry = value;
1066
+ const phase = this.normalizeLegacyPhase(entry.phase);
1067
+ const status = this.normalizeLegacyStatus(entry.status);
1068
+ if (!phase || !status) {
1069
+ return undefined;
1070
+ }
1071
+ const normalizedEntry = {
1072
+ ...entry,
1073
+ phase,
1074
+ status
1075
+ };
1076
+ return this.isValidRunLedgerEntry(normalizedEntry) ? normalizedEntry : undefined;
1077
+ }
1078
+ }
1079
+ //# sourceMappingURL=cleanSlateTaskSessionService.js.map