mstro-app 0.4.3 → 0.4.4

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 (306) hide show
  1. package/dist/server/cli/headless/claude-invoker-process.d.ts +11 -0
  2. package/dist/server/cli/headless/claude-invoker-process.d.ts.map +1 -0
  3. package/dist/server/cli/headless/claude-invoker-process.js +140 -0
  4. package/dist/server/cli/headless/claude-invoker-process.js.map +1 -0
  5. package/dist/server/cli/headless/claude-invoker-stall.d.ts +40 -0
  6. package/dist/server/cli/headless/claude-invoker-stall.d.ts.map +1 -0
  7. package/dist/server/cli/headless/claude-invoker-stall.js +98 -0
  8. package/dist/server/cli/headless/claude-invoker-stall.js.map +1 -0
  9. package/dist/server/cli/headless/claude-invoker-stream.d.ts +44 -0
  10. package/dist/server/cli/headless/claude-invoker-stream.d.ts.map +1 -0
  11. package/dist/server/cli/headless/claude-invoker-stream.js +276 -0
  12. package/dist/server/cli/headless/claude-invoker-stream.js.map +1 -0
  13. package/dist/server/cli/headless/claude-invoker-tools.d.ts +21 -0
  14. package/dist/server/cli/headless/claude-invoker-tools.d.ts.map +1 -0
  15. package/dist/server/cli/headless/claude-invoker-tools.js +137 -0
  16. package/dist/server/cli/headless/claude-invoker-tools.js.map +1 -0
  17. package/dist/server/cli/headless/claude-invoker.d.ts +6 -4
  18. package/dist/server/cli/headless/claude-invoker.d.ts.map +1 -1
  19. package/dist/server/cli/headless/claude-invoker.js +10 -807
  20. package/dist/server/cli/headless/claude-invoker.js.map +1 -1
  21. package/dist/server/cli/headless/haiku-assessments.d.ts +62 -0
  22. package/dist/server/cli/headless/haiku-assessments.d.ts.map +1 -0
  23. package/dist/server/cli/headless/haiku-assessments.js +281 -0
  24. package/dist/server/cli/headless/haiku-assessments.js.map +1 -0
  25. package/dist/server/cli/headless/headless-logger.d.ts +3 -2
  26. package/dist/server/cli/headless/headless-logger.d.ts.map +1 -1
  27. package/dist/server/cli/headless/headless-logger.js +28 -5
  28. package/dist/server/cli/headless/headless-logger.js.map +1 -1
  29. package/dist/server/cli/headless/native-timeout-detector.d.ts +44 -0
  30. package/dist/server/cli/headless/native-timeout-detector.d.ts.map +1 -0
  31. package/dist/server/cli/headless/native-timeout-detector.js +99 -0
  32. package/dist/server/cli/headless/native-timeout-detector.js.map +1 -0
  33. package/dist/server/cli/headless/stall-assessor.d.ts +2 -110
  34. package/dist/server/cli/headless/stall-assessor.d.ts.map +1 -1
  35. package/dist/server/cli/headless/stall-assessor.js +65 -457
  36. package/dist/server/cli/headless/stall-assessor.js.map +1 -1
  37. package/dist/server/cli/improvisation-attachments.d.ts +21 -0
  38. package/dist/server/cli/improvisation-attachments.d.ts.map +1 -0
  39. package/dist/server/cli/improvisation-attachments.js +116 -0
  40. package/dist/server/cli/improvisation-attachments.js.map +1 -0
  41. package/dist/server/cli/improvisation-retry.d.ts +52 -0
  42. package/dist/server/cli/improvisation-retry.d.ts.map +1 -0
  43. package/dist/server/cli/improvisation-retry.js +434 -0
  44. package/dist/server/cli/improvisation-retry.js.map +1 -0
  45. package/dist/server/cli/improvisation-session-manager.d.ts +10 -266
  46. package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -1
  47. package/dist/server/cli/improvisation-session-manager.js +117 -1079
  48. package/dist/server/cli/improvisation-session-manager.js.map +1 -1
  49. package/dist/server/cli/improvisation-types.d.ts +86 -0
  50. package/dist/server/cli/improvisation-types.d.ts.map +1 -0
  51. package/dist/server/cli/improvisation-types.js +10 -0
  52. package/dist/server/cli/improvisation-types.js.map +1 -0
  53. package/dist/server/cli/prompt-builders.d.ts +68 -0
  54. package/dist/server/cli/prompt-builders.d.ts.map +1 -0
  55. package/dist/server/cli/prompt-builders.js +312 -0
  56. package/dist/server/cli/prompt-builders.js.map +1 -0
  57. package/dist/server/index.js +33 -212
  58. package/dist/server/index.js.map +1 -1
  59. package/dist/server/mcp/bouncer-haiku.d.ts +10 -0
  60. package/dist/server/mcp/bouncer-haiku.d.ts.map +1 -0
  61. package/dist/server/mcp/bouncer-haiku.js +152 -0
  62. package/dist/server/mcp/bouncer-haiku.js.map +1 -0
  63. package/dist/server/mcp/bouncer-integration.d.ts +3 -4
  64. package/dist/server/mcp/bouncer-integration.d.ts.map +1 -1
  65. package/dist/server/mcp/bouncer-integration.js +50 -196
  66. package/dist/server/mcp/bouncer-integration.js.map +1 -1
  67. package/dist/server/mcp/security-analysis.d.ts +38 -0
  68. package/dist/server/mcp/security-analysis.d.ts.map +1 -0
  69. package/dist/server/mcp/security-analysis.js +183 -0
  70. package/dist/server/mcp/security-analysis.js.map +1 -0
  71. package/dist/server/mcp/security-audit.d.ts +1 -1
  72. package/dist/server/mcp/security-audit.d.ts.map +1 -1
  73. package/dist/server/mcp/security-patterns.d.ts +1 -25
  74. package/dist/server/mcp/security-patterns.d.ts.map +1 -1
  75. package/dist/server/mcp/security-patterns.js +55 -260
  76. package/dist/server/mcp/security-patterns.js.map +1 -1
  77. package/dist/server/server-setup.d.ts +22 -0
  78. package/dist/server/server-setup.d.ts.map +1 -0
  79. package/dist/server/server-setup.js +101 -0
  80. package/dist/server/server-setup.js.map +1 -0
  81. package/dist/server/services/file-explorer-ops.d.ts +24 -0
  82. package/dist/server/services/file-explorer-ops.d.ts.map +1 -0
  83. package/dist/server/services/file-explorer-ops.js +211 -0
  84. package/dist/server/services/file-explorer-ops.js.map +1 -0
  85. package/dist/server/services/files.d.ts +2 -85
  86. package/dist/server/services/files.d.ts.map +1 -1
  87. package/dist/server/services/files.js +7 -427
  88. package/dist/server/services/files.js.map +1 -1
  89. package/dist/server/services/plan/composer.d.ts.map +1 -1
  90. package/dist/server/services/plan/composer.js +2 -1
  91. package/dist/server/services/plan/composer.js.map +1 -1
  92. package/dist/server/services/plan/executor.d.ts.map +1 -1
  93. package/dist/server/services/plan/executor.js +3 -1
  94. package/dist/server/services/plan/executor.js.map +1 -1
  95. package/dist/server/services/plan/parser-core.d.ts +20 -0
  96. package/dist/server/services/plan/parser-core.d.ts.map +1 -0
  97. package/dist/server/services/plan/parser-core.js +350 -0
  98. package/dist/server/services/plan/parser-core.js.map +1 -0
  99. package/dist/server/services/plan/parser-migration.d.ts +5 -0
  100. package/dist/server/services/plan/parser-migration.d.ts.map +1 -0
  101. package/dist/server/services/plan/parser-migration.js +124 -0
  102. package/dist/server/services/plan/parser-migration.js.map +1 -0
  103. package/dist/server/services/plan/parser.d.ts +0 -8
  104. package/dist/server/services/plan/parser.d.ts.map +1 -1
  105. package/dist/server/services/plan/parser.js +50 -569
  106. package/dist/server/services/plan/parser.js.map +1 -1
  107. package/dist/server/services/plan/review-gate.d.ts +2 -0
  108. package/dist/server/services/plan/review-gate.d.ts.map +1 -1
  109. package/dist/server/services/plan/review-gate.js +2 -2
  110. package/dist/server/services/plan/review-gate.js.map +1 -1
  111. package/dist/server/services/plan/types.d.ts +2 -0
  112. package/dist/server/services/plan/types.d.ts.map +1 -1
  113. package/dist/server/services/platform-credentials.d.ts +24 -0
  114. package/dist/server/services/platform-credentials.d.ts.map +1 -0
  115. package/dist/server/services/platform-credentials.js +68 -0
  116. package/dist/server/services/platform-credentials.js.map +1 -0
  117. package/dist/server/services/platform.d.ts +1 -31
  118. package/dist/server/services/platform.d.ts.map +1 -1
  119. package/dist/server/services/platform.js +10 -119
  120. package/dist/server/services/platform.js.map +1 -1
  121. package/dist/server/services/terminal/pty-manager.d.ts +7 -97
  122. package/dist/server/services/terminal/pty-manager.d.ts.map +1 -1
  123. package/dist/server/services/terminal/pty-manager.js +53 -266
  124. package/dist/server/services/terminal/pty-manager.js.map +1 -1
  125. package/dist/server/services/terminal/pty-utils.d.ts +57 -0
  126. package/dist/server/services/terminal/pty-utils.d.ts.map +1 -0
  127. package/dist/server/services/terminal/pty-utils.js +141 -0
  128. package/dist/server/services/terminal/pty-utils.js.map +1 -0
  129. package/dist/server/services/websocket/file-definition-handlers.d.ts +4 -0
  130. package/dist/server/services/websocket/file-definition-handlers.d.ts.map +1 -0
  131. package/dist/server/services/websocket/file-definition-handlers.js +153 -0
  132. package/dist/server/services/websocket/file-definition-handlers.js.map +1 -0
  133. package/dist/server/services/websocket/file-explorer-handlers.d.ts.map +1 -1
  134. package/dist/server/services/websocket/file-explorer-handlers.js +52 -391
  135. package/dist/server/services/websocket/file-explorer-handlers.js.map +1 -1
  136. package/dist/server/services/websocket/file-search-handlers.d.ts +5 -0
  137. package/dist/server/services/websocket/file-search-handlers.d.ts.map +1 -0
  138. package/dist/server/services/websocket/file-search-handlers.js +238 -0
  139. package/dist/server/services/websocket/file-search-handlers.js.map +1 -0
  140. package/dist/server/services/websocket/file-utils.js +3 -3
  141. package/dist/server/services/websocket/file-utils.js.map +1 -1
  142. package/dist/server/services/websocket/git-branch-handlers.d.ts +7 -0
  143. package/dist/server/services/websocket/git-branch-handlers.d.ts.map +1 -0
  144. package/dist/server/services/websocket/git-branch-handlers.js +110 -0
  145. package/dist/server/services/websocket/git-branch-handlers.js.map +1 -0
  146. package/dist/server/services/websocket/git-diff-handlers.d.ts +6 -0
  147. package/dist/server/services/websocket/git-diff-handlers.d.ts.map +1 -0
  148. package/dist/server/services/websocket/git-diff-handlers.js +123 -0
  149. package/dist/server/services/websocket/git-diff-handlers.js.map +1 -0
  150. package/dist/server/services/websocket/git-handlers.d.ts +2 -31
  151. package/dist/server/services/websocket/git-handlers.d.ts.map +1 -1
  152. package/dist/server/services/websocket/git-handlers.js +35 -541
  153. package/dist/server/services/websocket/git-handlers.js.map +1 -1
  154. package/dist/server/services/websocket/git-log-handlers.d.ts +6 -0
  155. package/dist/server/services/websocket/git-log-handlers.d.ts.map +1 -0
  156. package/dist/server/services/websocket/git-log-handlers.js +128 -0
  157. package/dist/server/services/websocket/git-log-handlers.js.map +1 -0
  158. package/dist/server/services/websocket/git-pr-handlers.d.ts.map +1 -1
  159. package/dist/server/services/websocket/git-pr-handlers.js +13 -53
  160. package/dist/server/services/websocket/git-pr-handlers.js.map +1 -1
  161. package/dist/server/services/websocket/git-tag-handlers.d.ts +6 -0
  162. package/dist/server/services/websocket/git-tag-handlers.d.ts.map +1 -0
  163. package/dist/server/services/websocket/git-tag-handlers.js +76 -0
  164. package/dist/server/services/websocket/git-tag-handlers.js.map +1 -0
  165. package/dist/server/services/websocket/git-utils.d.ts +43 -0
  166. package/dist/server/services/websocket/git-utils.d.ts.map +1 -0
  167. package/dist/server/services/websocket/git-utils.js +201 -0
  168. package/dist/server/services/websocket/git-utils.js.map +1 -0
  169. package/dist/server/services/websocket/handler.d.ts +2 -0
  170. package/dist/server/services/websocket/handler.d.ts.map +1 -1
  171. package/dist/server/services/websocket/handler.js +37 -126
  172. package/dist/server/services/websocket/handler.js.map +1 -1
  173. package/dist/server/services/websocket/plan-board-handlers.d.ts +11 -0
  174. package/dist/server/services/websocket/plan-board-handlers.d.ts.map +1 -0
  175. package/dist/server/services/websocket/plan-board-handlers.js +218 -0
  176. package/dist/server/services/websocket/plan-board-handlers.js.map +1 -0
  177. package/dist/server/services/websocket/plan-execution-handlers.d.ts +9 -0
  178. package/dist/server/services/websocket/plan-execution-handlers.d.ts.map +1 -0
  179. package/dist/server/services/websocket/plan-execution-handlers.js +142 -0
  180. package/dist/server/services/websocket/plan-execution-handlers.js.map +1 -0
  181. package/dist/server/services/websocket/plan-handlers.d.ts +7 -2
  182. package/dist/server/services/websocket/plan-handlers.d.ts.map +1 -1
  183. package/dist/server/services/websocket/plan-handlers.js +6 -925
  184. package/dist/server/services/websocket/plan-handlers.js.map +1 -1
  185. package/dist/server/services/websocket/plan-helpers.d.ts +19 -0
  186. package/dist/server/services/websocket/plan-helpers.d.ts.map +1 -0
  187. package/dist/server/services/websocket/plan-helpers.js +199 -0
  188. package/dist/server/services/websocket/plan-helpers.js.map +1 -0
  189. package/dist/server/services/websocket/plan-issue-handlers.d.ts +12 -0
  190. package/dist/server/services/websocket/plan-issue-handlers.d.ts.map +1 -0
  191. package/dist/server/services/websocket/plan-issue-handlers.js +162 -0
  192. package/dist/server/services/websocket/plan-issue-handlers.js.map +1 -0
  193. package/dist/server/services/websocket/plan-sprint-handlers.d.ts +7 -0
  194. package/dist/server/services/websocket/plan-sprint-handlers.d.ts.map +1 -0
  195. package/dist/server/services/websocket/plan-sprint-handlers.js +206 -0
  196. package/dist/server/services/websocket/plan-sprint-handlers.js.map +1 -0
  197. package/dist/server/services/websocket/quality-complexity.d.ts +14 -0
  198. package/dist/server/services/websocket/quality-complexity.d.ts.map +1 -0
  199. package/dist/server/services/websocket/quality-complexity.js +262 -0
  200. package/dist/server/services/websocket/quality-complexity.js.map +1 -0
  201. package/dist/server/services/websocket/quality-fix-agent.d.ts +16 -0
  202. package/dist/server/services/websocket/quality-fix-agent.d.ts.map +1 -0
  203. package/dist/server/services/websocket/quality-fix-agent.js +140 -0
  204. package/dist/server/services/websocket/quality-fix-agent.js.map +1 -0
  205. package/dist/server/services/websocket/quality-handlers.d.ts.map +1 -1
  206. package/dist/server/services/websocket/quality-handlers.js +34 -346
  207. package/dist/server/services/websocket/quality-handlers.js.map +1 -1
  208. package/dist/server/services/websocket/quality-linting.d.ts +9 -0
  209. package/dist/server/services/websocket/quality-linting.d.ts.map +1 -0
  210. package/dist/server/services/websocket/quality-linting.js +178 -0
  211. package/dist/server/services/websocket/quality-linting.js.map +1 -0
  212. package/dist/server/services/websocket/quality-review-agent.d.ts +19 -0
  213. package/dist/server/services/websocket/quality-review-agent.d.ts.map +1 -0
  214. package/dist/server/services/websocket/quality-review-agent.js +206 -0
  215. package/dist/server/services/websocket/quality-review-agent.js.map +1 -0
  216. package/dist/server/services/websocket/quality-service.d.ts +3 -51
  217. package/dist/server/services/websocket/quality-service.d.ts.map +1 -1
  218. package/dist/server/services/websocket/quality-service.js +9 -651
  219. package/dist/server/services/websocket/quality-service.js.map +1 -1
  220. package/dist/server/services/websocket/quality-tools.d.ts +23 -0
  221. package/dist/server/services/websocket/quality-tools.d.ts.map +1 -0
  222. package/dist/server/services/websocket/quality-tools.js +208 -0
  223. package/dist/server/services/websocket/quality-tools.js.map +1 -0
  224. package/dist/server/services/websocket/quality-types.d.ts +59 -0
  225. package/dist/server/services/websocket/quality-types.d.ts.map +1 -0
  226. package/dist/server/services/websocket/quality-types.js +101 -0
  227. package/dist/server/services/websocket/quality-types.js.map +1 -0
  228. package/dist/server/services/websocket/session-handlers.d.ts +3 -4
  229. package/dist/server/services/websocket/session-handlers.d.ts.map +1 -1
  230. package/dist/server/services/websocket/session-handlers.js +3 -378
  231. package/dist/server/services/websocket/session-handlers.js.map +1 -1
  232. package/dist/server/services/websocket/session-history.d.ts +4 -0
  233. package/dist/server/services/websocket/session-history.d.ts.map +1 -0
  234. package/dist/server/services/websocket/session-history.js +208 -0
  235. package/dist/server/services/websocket/session-history.js.map +1 -0
  236. package/dist/server/services/websocket/session-initialization.d.ts +5 -0
  237. package/dist/server/services/websocket/session-initialization.d.ts.map +1 -0
  238. package/dist/server/services/websocket/session-initialization.js +163 -0
  239. package/dist/server/services/websocket/session-initialization.js.map +1 -0
  240. package/dist/server/services/websocket/types.d.ts +12 -2
  241. package/dist/server/services/websocket/types.d.ts.map +1 -1
  242. package/package.json +1 -1
  243. package/server/cli/headless/claude-invoker-process.ts +204 -0
  244. package/server/cli/headless/claude-invoker-stall.ts +164 -0
  245. package/server/cli/headless/claude-invoker-stream.ts +353 -0
  246. package/server/cli/headless/claude-invoker-tools.ts +187 -0
  247. package/server/cli/headless/claude-invoker.ts +15 -1096
  248. package/server/cli/headless/haiku-assessments.ts +365 -0
  249. package/server/cli/headless/headless-logger.ts +26 -5
  250. package/server/cli/headless/native-timeout-detector.ts +117 -0
  251. package/server/cli/headless/stall-assessor.ts +65 -618
  252. package/server/cli/improvisation-attachments.ts +148 -0
  253. package/server/cli/improvisation-retry.ts +602 -0
  254. package/server/cli/improvisation-session-manager.ts +140 -1349
  255. package/server/cli/improvisation-types.ts +98 -0
  256. package/server/cli/prompt-builders.ts +370 -0
  257. package/server/index.ts +35 -246
  258. package/server/mcp/bouncer-haiku.ts +182 -0
  259. package/server/mcp/bouncer-integration.ts +87 -248
  260. package/server/mcp/security-analysis.ts +217 -0
  261. package/server/mcp/security-audit.ts +1 -1
  262. package/server/mcp/security-patterns.ts +60 -283
  263. package/server/server-setup.ts +114 -0
  264. package/server/services/file-explorer-ops.ts +293 -0
  265. package/server/services/files.ts +20 -532
  266. package/server/services/plan/composer.ts +2 -1
  267. package/server/services/plan/executor.ts +3 -1
  268. package/server/services/plan/parser-core.ts +406 -0
  269. package/server/services/plan/parser-migration.ts +128 -0
  270. package/server/services/plan/parser.ts +52 -620
  271. package/server/services/plan/review-gate.ts +4 -2
  272. package/server/services/plan/types.ts +2 -0
  273. package/server/services/platform-credentials.ts +83 -0
  274. package/server/services/platform.ts +15 -141
  275. package/server/services/terminal/pty-manager.ts +66 -313
  276. package/server/services/terminal/pty-utils.ts +176 -0
  277. package/server/services/websocket/file-definition-handlers.ts +165 -0
  278. package/server/services/websocket/file-explorer-handlers.ts +37 -452
  279. package/server/services/websocket/file-search-handlers.ts +291 -0
  280. package/server/services/websocket/file-utils.ts +3 -3
  281. package/server/services/websocket/git-branch-handlers.ts +130 -0
  282. package/server/services/websocket/git-diff-handlers.ts +140 -0
  283. package/server/services/websocket/git-handlers.ts +40 -625
  284. package/server/services/websocket/git-log-handlers.ts +149 -0
  285. package/server/services/websocket/git-pr-handlers.ts +17 -62
  286. package/server/services/websocket/git-tag-handlers.ts +91 -0
  287. package/server/services/websocket/git-utils.ts +230 -0
  288. package/server/services/websocket/handler.ts +39 -126
  289. package/server/services/websocket/plan-board-handlers.ts +277 -0
  290. package/server/services/websocket/plan-execution-handlers.ts +184 -0
  291. package/server/services/websocket/plan-handlers.ts +8 -1114
  292. package/server/services/websocket/plan-helpers.ts +215 -0
  293. package/server/services/websocket/plan-issue-handlers.ts +204 -0
  294. package/server/services/websocket/plan-sprint-handlers.ts +252 -0
  295. package/server/services/websocket/quality-complexity.ts +294 -0
  296. package/server/services/websocket/quality-fix-agent.ts +181 -0
  297. package/server/services/websocket/quality-handlers.ts +36 -404
  298. package/server/services/websocket/quality-linting.ts +187 -0
  299. package/server/services/websocket/quality-review-agent.ts +246 -0
  300. package/server/services/websocket/quality-service.ts +11 -762
  301. package/server/services/websocket/quality-tools.ts +209 -0
  302. package/server/services/websocket/quality-types.ts +169 -0
  303. package/server/services/websocket/session-handlers.ts +5 -437
  304. package/server/services/websocket/session-history.ts +222 -0
  305. package/server/services/websocket/session-initialization.ts +209 -0
  306. package/server/services/websocket/types.ts +17 -0
@@ -0,0 +1,434 @@
1
+ // Copyright (c) 2025-present Mstro, Inc. All rights reserved.
2
+ // Licensed under the MIT License. See LICENSE file for details.
3
+ /**
4
+ * Retry and recovery logic for improvisation sessions.
5
+ * Handles context loss, tool timeouts, signal crashes, and premature completion.
6
+ */
7
+ import { AnalyticsEvents, trackEvent } from '../services/analytics.js';
8
+ import { hlog } from './headless/headless-logger.js';
9
+ import { HeadlessRunner } from './headless/index.js';
10
+ import { assessBestResult, assessContextLoss, assessPrematureCompletion } from './headless/stall-assessor.js';
11
+ import { scoreRunResult } from './improvisation-types.js';
12
+ import { buildContextRecoveryPrompt, buildFreshRecoveryPrompt, buildHistoricalContext, buildInterMovementRecoveryPrompt, buildResumeRetryPrompt, buildRetryPrompt, buildSignalCrashRecoveryPrompt, extractHistoricalToolResults, } from './prompt-builders.js';
13
+ // ========== Resume Strategy ==========
14
+ /** Determine whether to use --resume and which session ID */
15
+ export function determineResumeStrategy(state, session) {
16
+ if (state.freshRecoveryMode) {
17
+ state.freshRecoveryMode = false;
18
+ return { useResume: false, resumeSessionId: undefined };
19
+ }
20
+ if (state.contextRecoverySessionId) {
21
+ const id = state.contextRecoverySessionId;
22
+ state.contextRecoverySessionId = undefined;
23
+ return { useResume: true, resumeSessionId: id };
24
+ }
25
+ if (state.retryNumber === 0) {
26
+ return { useResume: !session.isFirstPrompt, resumeSessionId: session.claudeSessionId };
27
+ }
28
+ if (state.lastWatchdogCheckpoint?.inProgressTools.length === 0 && state.lastWatchdogCheckpoint.claudeSessionId) {
29
+ return { useResume: true, resumeSessionId: state.lastWatchdogCheckpoint.claudeSessionId };
30
+ }
31
+ return { useResume: false, resumeSessionId: undefined };
32
+ }
33
+ // ========== Runner Creation ==========
34
+ /** Create HeadlessRunner for one retry iteration */
35
+ export function createExecutionRunner(state, session, callbacks, sequenceNumber, useResume, resumeSessionId, imageAttachments, sandboxed, workingDirOverride) {
36
+ return new HeadlessRunner({
37
+ workingDir: workingDirOverride || session.options.workingDir,
38
+ tokenBudgetThreshold: session.options.tokenBudgetThreshold,
39
+ maxSessions: session.options.maxSessions,
40
+ verbose: session.options.verbose,
41
+ noColor: session.options.noColor,
42
+ model: session.options.model,
43
+ improvisationMode: true,
44
+ movementNumber: sequenceNumber,
45
+ continueSession: useResume,
46
+ claudeSessionId: resumeSessionId,
47
+ outputCallback: (text) => {
48
+ if (callbacks.isCancelled())
49
+ return;
50
+ callbacks.addEventLog({ type: 'output', data: { text, timestamp: Date.now() }, timestamp: Date.now() });
51
+ callbacks.queueOutput(text);
52
+ callbacks.flushOutputQueue();
53
+ },
54
+ thinkingCallback: (text) => {
55
+ if (callbacks.isCancelled())
56
+ return;
57
+ callbacks.addEventLog({ type: 'thinking', data: { text }, timestamp: Date.now() });
58
+ callbacks.emit('onThinking', text);
59
+ callbacks.flushOutputQueue();
60
+ },
61
+ toolUseCallback: (event) => {
62
+ if (callbacks.isCancelled())
63
+ return;
64
+ callbacks.addEventLog({ type: 'toolUse', data: { ...event, timestamp: Date.now() }, timestamp: Date.now() });
65
+ callbacks.emit('onToolUse', event);
66
+ callbacks.flushOutputQueue();
67
+ },
68
+ tokenUsageCallback: (usage) => {
69
+ if (callbacks.isCancelled())
70
+ return;
71
+ callbacks.emit('onTokenUsage', usage);
72
+ },
73
+ directPrompt: state.currentPrompt,
74
+ imageAttachments,
75
+ promptContext: (state.retryNumber === 0 && session.isResumedSession && session.isFirstPrompt)
76
+ ? { accumulatedKnowledge: buildHistoricalContext(session.history.movements), filesModified: [] }
77
+ : undefined,
78
+ onToolTimeout: (checkpoint) => {
79
+ state.checkpointRef.value = checkpoint;
80
+ },
81
+ sandboxed,
82
+ });
83
+ }
84
+ // ========== Context Loss Detection ==========
85
+ /** Detect resume context loss (Path 1): session expired on --resume */
86
+ export function detectResumeContextLoss(result, state, useResume, maxRetries, nativeTimeouts, verbose) {
87
+ if (!useResume || state.checkpointRef.value || state.retryNumber >= maxRetries || nativeTimeouts > 0) {
88
+ return;
89
+ }
90
+ if (!result.assistantResponse || result.assistantResponse.trim().length === 0) {
91
+ state.contextLost = true;
92
+ if (verbose)
93
+ hlog('[CONTEXT-RECOVERY] Resume context loss: null/empty response');
94
+ }
95
+ else if (result.resumeBufferedOutput !== undefined) {
96
+ state.contextLost = true;
97
+ if (verbose)
98
+ hlog('[CONTEXT-RECOVERY] Resume context loss: buffer never flushed (no thinking/tools)');
99
+ }
100
+ else if ((!result.toolUseHistory || result.toolUseHistory.length === 0) &&
101
+ !result.thinkingOutput &&
102
+ result.assistantResponse.length < 500) {
103
+ state.contextLost = true;
104
+ if (verbose)
105
+ hlog('[CONTEXT-RECOVERY] Resume context loss: no tools, no thinking, short response');
106
+ }
107
+ }
108
+ /** Detect native timeout context loss (Path 2): tool timeouts caused confusion */
109
+ export async function detectNativeTimeoutContextLoss(result, state, maxRetries, nativeTimeouts, verbose) {
110
+ if (state.contextLost)
111
+ return;
112
+ const succeededIds = new Set();
113
+ const allIds = new Set();
114
+ for (const t of result.toolUseHistory ?? []) {
115
+ allIds.add(t.toolId);
116
+ if (t.result !== undefined)
117
+ succeededIds.add(t.toolId);
118
+ }
119
+ const toolsWithoutResult = [...allIds].filter(id => !succeededIds.has(id)).length;
120
+ const effectiveTimeouts = Math.max(nativeTimeouts, toolsWithoutResult);
121
+ if (effectiveTimeouts === 0 || !result.assistantResponse || state.checkpointRef.value || state.retryNumber >= maxRetries) {
122
+ return;
123
+ }
124
+ const writeToolNames = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
125
+ const contextLossCtx = {
126
+ assistantResponse: result.assistantResponse,
127
+ effectiveTimeouts,
128
+ nativeTimeoutCount: nativeTimeouts,
129
+ successfulToolCalls: result.toolUseHistory?.filter(t => t.result !== undefined && !t.isError).length ?? 0,
130
+ thinkingOutputLength: result.thinkingOutput?.length ?? 0,
131
+ hasSuccessfulWrite: result.toolUseHistory?.some(t => writeToolNames.has(t.toolName) && t.result !== undefined && !t.isError) ?? false,
132
+ };
133
+ const claudeCmd = process.env.CLAUDE_COMMAND || 'claude';
134
+ const verdict = await assessContextLoss(contextLossCtx, claudeCmd, verbose);
135
+ state.contextLost = verdict.contextLost;
136
+ if (verbose) {
137
+ hlog(`[CONTEXT-RECOVERY] Haiku verdict: ${state.contextLost ? 'LOST' : 'OK'} — ${verdict.reason}`);
138
+ }
139
+ }
140
+ // ========== Tool Result Accumulation ==========
141
+ const MAX_ACCUMULATED_RESULTS = 50;
142
+ /** Accumulate completed tool results from a run into the retry state */
143
+ export function accumulateToolResults(result, state) {
144
+ if (!result.toolUseHistory)
145
+ return;
146
+ for (const t of result.toolUseHistory) {
147
+ if (t.result !== undefined) {
148
+ state.accumulatedToolResults.push({
149
+ toolName: t.toolName,
150
+ toolId: t.toolId,
151
+ toolInput: t.toolInput,
152
+ result: t.result,
153
+ isError: t.isError,
154
+ duration: t.duration,
155
+ });
156
+ }
157
+ }
158
+ if (state.accumulatedToolResults.length > MAX_ACCUMULATED_RESULTS) {
159
+ state.accumulatedToolResults = state.accumulatedToolResults.slice(-MAX_ACCUMULATED_RESULTS);
160
+ }
161
+ }
162
+ // ========== Recovery Strategies ==========
163
+ /** Handle inter-movement context loss recovery (resume session expired) */
164
+ export function applyInterMovementRecovery(state, promptWithAttachments, history, callbacks) {
165
+ const historicalResults = extractHistoricalToolResults(history);
166
+ const allResults = [...historicalResults, ...state.accumulatedToolResults];
167
+ callbacks.emit('onAutoRetry', {
168
+ retryNumber: state.retryNumber,
169
+ maxRetries: 3,
170
+ toolName: 'InterMovementRecovery',
171
+ completedCount: allResults.length,
172
+ });
173
+ callbacks.queueOutput(`\n[[MSTRO_CONTEXT_RECOVERY]] Session context expired — continuing with ${allResults.length} preserved results from prior work (retry ${state.retryNumber}/3).\n`);
174
+ callbacks.flushOutputQueue();
175
+ state.freshRecoveryMode = true;
176
+ state.currentPrompt = buildInterMovementRecoveryPrompt(promptWithAttachments, allResults, history);
177
+ }
178
+ /** Handle native-timeout context loss recovery (tool timeouts caused confusion) */
179
+ export function applyNativeTimeoutRecovery(result, state, promptWithAttachments, session, callbacks) {
180
+ const completedCount = state.accumulatedToolResults.length;
181
+ callbacks.emit('onAutoRetry', {
182
+ retryNumber: state.retryNumber,
183
+ maxRetries: 3,
184
+ toolName: 'ContextRecovery',
185
+ completedCount,
186
+ });
187
+ if (result.claudeSessionId && state.retryNumber === 1) {
188
+ callbacks.queueOutput(`\n[[MSTRO_CONTEXT_RECOVERY]] Context loss detected — resuming session with ${completedCount} preserved results (retry ${state.retryNumber}/3).\n`);
189
+ callbacks.flushOutputQueue();
190
+ state.contextRecoverySessionId = result.claudeSessionId;
191
+ session.claudeSessionId = result.claudeSessionId;
192
+ state.currentPrompt = buildContextRecoveryPrompt(promptWithAttachments);
193
+ }
194
+ else {
195
+ callbacks.queueOutput(`\n[[MSTRO_CONTEXT_RECOVERY]] Continuing with fresh context — ${completedCount} preserved results injected (retry ${state.retryNumber}/3).\n`);
196
+ callbacks.flushOutputQueue();
197
+ state.freshRecoveryMode = true;
198
+ state.currentPrompt = buildFreshRecoveryPrompt(promptWithAttachments, state.accumulatedToolResults, state.timedOutTools);
199
+ }
200
+ }
201
+ /** Check if context loss recovery should trigger. Returns true if loop should continue. */
202
+ export function shouldRetryContextLoss(result, state, session, useResume, nativeTimeouts, maxRetries, promptWithAttachments, callbacks) {
203
+ if (state.checkpointRef.value || state.retryNumber >= maxRetries || !state.contextLost) {
204
+ return false;
205
+ }
206
+ accumulateToolResults(result, state);
207
+ state.retryNumber++;
208
+ const path = (useResume && nativeTimeouts === 0) ? 'InterMovementRecovery' : 'NativeTimeoutRecovery';
209
+ state.retryLog.push({
210
+ retryNumber: state.retryNumber,
211
+ path,
212
+ reason: `Context lost (${nativeTimeouts} timeouts, ${state.accumulatedToolResults.length} tools preserved)`,
213
+ timestamp: Date.now(),
214
+ });
215
+ if (useResume && nativeTimeouts === 0) {
216
+ applyInterMovementRecovery(state, promptWithAttachments, session.history.movements, callbacks);
217
+ }
218
+ else {
219
+ applyNativeTimeoutRecovery(result, state, promptWithAttachments, session, callbacks);
220
+ }
221
+ return true;
222
+ }
223
+ /** Handle tool timeout checkpoint. Returns true if loop should continue. */
224
+ export function applyToolTimeoutRetry(state, maxRetries, promptWithAttachments, callbacks, model) {
225
+ if (!state.checkpointRef.value || state.retryNumber >= maxRetries) {
226
+ return false;
227
+ }
228
+ const cp = state.checkpointRef.value;
229
+ state.retryNumber++;
230
+ state.timedOutTools.push({
231
+ toolName: cp.hungTool.toolName,
232
+ input: cp.hungTool.input ?? {},
233
+ timeoutMs: cp.hungTool.timeoutMs,
234
+ });
235
+ const canResumeSession = cp.inProgressTools.length === 0 && !!cp.claudeSessionId;
236
+ state.retryLog.push({
237
+ retryNumber: state.retryNumber,
238
+ path: 'ToolTimeout',
239
+ reason: `${cp.hungTool.toolName} timed out after ${cp.hungTool.timeoutMs}ms, ${cp.completedTools.length} tools completed, ${canResumeSession ? 'resuming' : 'fresh start'}`,
240
+ timestamp: Date.now(),
241
+ });
242
+ callbacks.emit('onAutoRetry', {
243
+ retryNumber: state.retryNumber,
244
+ maxRetries,
245
+ toolName: cp.hungTool.toolName,
246
+ url: cp.hungTool.url,
247
+ completedCount: cp.completedTools.length,
248
+ });
249
+ trackEvent(AnalyticsEvents.IMPROVISE_AUTO_RETRY, {
250
+ retry_number: state.retryNumber,
251
+ hung_tool: cp.hungTool.toolName,
252
+ hung_url: cp.hungTool.url?.slice(0, 200),
253
+ completed_tools: cp.completedTools.length,
254
+ elapsed_ms: cp.elapsedMs,
255
+ resume_attempted: canResumeSession,
256
+ model: model || 'default',
257
+ });
258
+ state.currentPrompt = canResumeSession
259
+ ? buildResumeRetryPrompt(cp, state.timedOutTools)
260
+ : buildRetryPrompt(cp, promptWithAttachments, state.timedOutTools);
261
+ callbacks.queueOutput(`\n[[MSTRO_AUTO_RETRY]] Auto-retry ${state.retryNumber}/${maxRetries}: ${canResumeSession ? 'Resuming session' : 'Continuing'} with ${cp.completedTools.length} successful results, skipping failed ${cp.hungTool.toolName}.\n`);
262
+ callbacks.flushOutputQueue();
263
+ return true;
264
+ }
265
+ /** Detect and retry after a signal crash. Returns true if loop should continue. */
266
+ export function shouldRetrySignalCrash(result, state, session, maxRetries, promptWithAttachments, callbacks) {
267
+ const isSignalCrash = !!result.signalName;
268
+ const exitCodeSignal = !result.completed && !result.signalName && result.error?.match(/exited with code (1[2-9]\d|[2-9]\d{2})/);
269
+ if ((!isSignalCrash && !exitCodeSignal) || state.retryNumber >= maxRetries) {
270
+ return false;
271
+ }
272
+ if (state.checkpointRef.value) {
273
+ return false;
274
+ }
275
+ accumulateToolResults(result, state);
276
+ state.retryNumber++;
277
+ const completedCount = state.accumulatedToolResults.length;
278
+ const signalInfo = result.signalName || 'unknown signal';
279
+ const useResume = !!result.claudeSessionId && state.retryNumber === 1;
280
+ state.retryLog.push({
281
+ retryNumber: state.retryNumber,
282
+ path: 'SignalCrash',
283
+ reason: `Process killed (${signalInfo}), ${completedCount} tools preserved, ${useResume ? 'resuming' : 'fresh start'}`,
284
+ timestamp: Date.now(),
285
+ });
286
+ callbacks.emit('onAutoRetry', {
287
+ retryNumber: state.retryNumber,
288
+ maxRetries,
289
+ toolName: `SignalCrash(${signalInfo})`,
290
+ completedCount,
291
+ });
292
+ trackEvent(AnalyticsEvents.IMPROVISE_AUTO_RETRY, {
293
+ retry_number: state.retryNumber,
294
+ hung_tool: `signal_crash:${signalInfo}`,
295
+ completed_tools: completedCount,
296
+ resume_attempted: useResume,
297
+ });
298
+ if (useResume) {
299
+ callbacks.queueOutput(`\n[[MSTRO_SIGNAL_RECOVERY]] Process killed (${signalInfo}) — resuming session with ${completedCount} preserved results (retry ${state.retryNumber}/${maxRetries}).\n`);
300
+ callbacks.flushOutputQueue();
301
+ state.contextRecoverySessionId = result.claudeSessionId;
302
+ session.claudeSessionId = result.claudeSessionId;
303
+ state.currentPrompt = buildSignalCrashRecoveryPrompt(promptWithAttachments, true);
304
+ }
305
+ else {
306
+ callbacks.queueOutput(`\n[[MSTRO_SIGNAL_RECOVERY]] Process killed (${signalInfo}) — restarting with ${completedCount} preserved results (retry ${state.retryNumber}/${maxRetries}).\n`);
307
+ callbacks.flushOutputQueue();
308
+ state.freshRecoveryMode = true;
309
+ const allResults = [...extractHistoricalToolResults(session.history.movements), ...state.accumulatedToolResults];
310
+ state.currentPrompt = buildSignalCrashRecoveryPrompt(promptWithAttachments, false, allResults);
311
+ }
312
+ return true;
313
+ }
314
+ // ========== Premature Completion ==========
315
+ /** Guard checks for premature completion */
316
+ function isPrematureCompletionCandidate(result, state, maxRetries) {
317
+ if (!result.completed || result.signalName || state.retryNumber >= maxRetries)
318
+ return false;
319
+ if (state.checkpointRef.value || state.contextLost)
320
+ return false;
321
+ if (!result.claudeSessionId || !result.stopReason)
322
+ return false;
323
+ return result.stopReason === 'max_tokens' || result.stopReason === 'end_turn';
324
+ }
325
+ /** Use Haiku to assess whether an end_turn response is genuinely complete */
326
+ async function assessEndTurnCompletion(result, verbose) {
327
+ if (!result.assistantResponse)
328
+ return false;
329
+ const claudeCmd = process.env.CLAUDE_COMMAND || 'claude';
330
+ const verdict = await assessPrematureCompletion({
331
+ responseTail: result.assistantResponse.slice(-800),
332
+ successfulToolCalls: result.toolUseHistory?.filter(t => t.result !== undefined && !t.isError).length ?? 0,
333
+ hasThinking: !!result.thinkingOutput,
334
+ responseLength: result.assistantResponse.length,
335
+ }, claudeCmd, verbose);
336
+ if (verbose) {
337
+ hlog(`[PREMATURE-COMPLETION] Haiku verdict: ${verdict.isIncomplete ? 'INCOMPLETE' : 'COMPLETE'} — ${verdict.reason}`);
338
+ }
339
+ return verdict.isIncomplete;
340
+ }
341
+ /** Apply premature completion retry */
342
+ function applyPrematureCompletionRetry(result, state, session, maxRetries, stopReason, isMaxTokens, callbacks) {
343
+ state.retryNumber++;
344
+ const reason = isMaxTokens ? 'Output limit reached' : 'Task appears unfinished (AI assessment)';
345
+ state.retryLog.push({
346
+ retryNumber: state.retryNumber,
347
+ path: 'PrematureCompletion',
348
+ reason,
349
+ timestamp: Date.now(),
350
+ });
351
+ callbacks.emit('onAutoRetry', {
352
+ retryNumber: state.retryNumber,
353
+ maxRetries,
354
+ toolName: `PrematureCompletion(${stopReason})`,
355
+ completedCount: result.toolUseHistory?.length ?? 0,
356
+ });
357
+ trackEvent(AnalyticsEvents.IMPROVISE_AUTO_RETRY, {
358
+ retry_number: state.retryNumber,
359
+ hung_tool: `premature_completion:${stopReason}`,
360
+ completed_tools: result.toolUseHistory?.length ?? 0,
361
+ resume_attempted: true,
362
+ });
363
+ callbacks.queueOutput(`\n${reason} — resuming session (retry ${state.retryNumber}/${maxRetries}).\n`);
364
+ callbacks.flushOutputQueue();
365
+ state.contextRecoverySessionId = result.claudeSessionId;
366
+ session.claudeSessionId = result.claudeSessionId;
367
+ state.currentPrompt = 'continue';
368
+ }
369
+ /** Detect and retry premature completion. Returns true if loop should continue. */
370
+ export async function shouldRetryPrematureCompletion(result, state, session, maxRetries, callbacks) {
371
+ if (!isPrematureCompletionCandidate(result, state, maxRetries)) {
372
+ return false;
373
+ }
374
+ const stopReason = result.stopReason;
375
+ const isMaxTokens = stopReason === 'max_tokens';
376
+ const isIncomplete = isMaxTokens || await assessEndTurnCompletion(result, session.options.verbose);
377
+ if (!isIncomplete)
378
+ return false;
379
+ applyPrematureCompletionRetry(result, state, session, maxRetries, stopReason, isMaxTokens, callbacks);
380
+ return true;
381
+ }
382
+ // ========== Best Result Selection ==========
383
+ /** Select the best result across retries using Haiku assessment */
384
+ export async function selectBestResult(state, result, userPrompt, verbose) {
385
+ if (!state.bestResult || state.bestResult === result || state.retryNumber === 0) {
386
+ return result;
387
+ }
388
+ const claudeCmd = process.env.CLAUDE_COMMAND || 'claude';
389
+ const bestToolCount = state.bestResult.toolUseHistory?.filter(t => t.result !== undefined && !t.isError).length ?? 0;
390
+ const currentToolCount = result.toolUseHistory?.filter(t => t.result !== undefined && !t.isError).length ?? 0;
391
+ try {
392
+ const verdict = await assessBestResult({
393
+ originalPrompt: userPrompt,
394
+ resultA: {
395
+ successfulToolCalls: bestToolCount,
396
+ responseLength: state.bestResult.assistantResponse?.length ?? 0,
397
+ hasThinking: !!state.bestResult.thinkingOutput,
398
+ responseTail: (state.bestResult.assistantResponse ?? '').slice(-500),
399
+ },
400
+ resultB: {
401
+ successfulToolCalls: currentToolCount,
402
+ responseLength: result.assistantResponse?.length ?? 0,
403
+ hasThinking: !!result.thinkingOutput,
404
+ responseTail: (result.assistantResponse ?? '').slice(-500),
405
+ },
406
+ }, claudeCmd, verbose);
407
+ if (verdict.winner === 'A') {
408
+ if (verbose)
409
+ hlog(`[BEST-RESULT] Haiku picked earlier attempt: ${verdict.reason}`);
410
+ return mergeResultSessionId(state.bestResult, result.claudeSessionId);
411
+ }
412
+ if (verbose)
413
+ hlog(`[BEST-RESULT] Haiku picked final attempt: ${verdict.reason}`);
414
+ return result;
415
+ }
416
+ catch {
417
+ return fallbackBestResult(state.bestResult, result, verbose);
418
+ }
419
+ }
420
+ function mergeResultSessionId(result, sessionId) {
421
+ if (sessionId)
422
+ return { ...result, claudeSessionId: sessionId };
423
+ return result;
424
+ }
425
+ function fallbackBestResult(bestResult, result, verbose) {
426
+ if (scoreRunResult(bestResult) > scoreRunResult(result)) {
427
+ if (verbose) {
428
+ hlog(`[BEST-RESULT] Haiku unavailable, numeric fallback: earlier attempt (score ${scoreRunResult(bestResult)} vs ${scoreRunResult(result)})`);
429
+ }
430
+ return mergeResultSessionId(bestResult, result.claudeSessionId);
431
+ }
432
+ return result;
433
+ }
434
+ //# sourceMappingURL=improvisation-retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improvisation-retry.js","sourceRoot":"","sources":["../../../server/cli/improvisation-retry.ts"],"names":[],"mappings":"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"}