deepseek-coder-agent-cli 1.0.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 (501) hide show
  1. package/README.md +58 -0
  2. package/dist/bin/cliMode.d.ts +8 -0
  3. package/dist/bin/cliMode.d.ts.map +1 -0
  4. package/dist/bin/cliMode.js +20 -0
  5. package/dist/bin/cliMode.js.map +1 -0
  6. package/dist/bin/deepseek.d.ts +6 -0
  7. package/dist/bin/deepseek.d.ts.map +1 -0
  8. package/dist/bin/deepseek.js +136 -0
  9. package/dist/bin/deepseek.js.map +1 -0
  10. package/dist/config.d.ts +25 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +155 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/contracts/agent-profiles.schema.json +43 -0
  15. package/dist/contracts/agent-schemas.json +460 -0
  16. package/dist/contracts/models.schema.json +9 -0
  17. package/dist/contracts/module-schema.json +419 -0
  18. package/dist/contracts/schemas/agent-profile.schema.json +157 -0
  19. package/dist/contracts/schemas/agent-rules.schema.json +238 -0
  20. package/dist/contracts/schemas/agent-schemas.schema.json +528 -0
  21. package/dist/contracts/schemas/agent.schema.json +90 -0
  22. package/dist/contracts/schemas/tool-selection.schema.json +174 -0
  23. package/dist/contracts/tools.schema.json +82 -0
  24. package/dist/contracts/unified-schema.json +750 -0
  25. package/dist/contracts/v1/agent.d.ts +179 -0
  26. package/dist/contracts/v1/agent.d.ts.map +1 -0
  27. package/dist/contracts/v1/agent.js +8 -0
  28. package/dist/contracts/v1/agent.js.map +1 -0
  29. package/dist/contracts/v1/agentProfileManifest.d.ts +60 -0
  30. package/dist/contracts/v1/agentProfileManifest.d.ts.map +1 -0
  31. package/dist/contracts/v1/agentProfileManifest.js +9 -0
  32. package/dist/contracts/v1/agentProfileManifest.js.map +1 -0
  33. package/dist/contracts/v1/agentRules.d.ts +60 -0
  34. package/dist/contracts/v1/agentRules.d.ts.map +1 -0
  35. package/dist/contracts/v1/agentRules.js +10 -0
  36. package/dist/contracts/v1/agentRules.js.map +1 -0
  37. package/dist/contracts/v1/provider.d.ts +149 -0
  38. package/dist/contracts/v1/provider.d.ts.map +1 -0
  39. package/dist/contracts/v1/provider.js +7 -0
  40. package/dist/contracts/v1/provider.js.map +1 -0
  41. package/dist/contracts/v1/tool.d.ts +136 -0
  42. package/dist/contracts/v1/tool.d.ts.map +1 -0
  43. package/dist/contracts/v1/tool.js +7 -0
  44. package/dist/contracts/v1/tool.js.map +1 -0
  45. package/dist/contracts/v1/toolAccess.d.ts +43 -0
  46. package/dist/contracts/v1/toolAccess.d.ts.map +1 -0
  47. package/dist/contracts/v1/toolAccess.js +9 -0
  48. package/dist/contracts/v1/toolAccess.js.map +1 -0
  49. package/dist/core/agent.d.ts +287 -0
  50. package/dist/core/agent.d.ts.map +1 -0
  51. package/dist/core/agent.js +1563 -0
  52. package/dist/core/agent.js.map +1 -0
  53. package/dist/core/agentProfileManifest.d.ts +3 -0
  54. package/dist/core/agentProfileManifest.d.ts.map +1 -0
  55. package/dist/core/agentProfileManifest.js +188 -0
  56. package/dist/core/agentProfileManifest.js.map +1 -0
  57. package/dist/core/agentProfiles.d.ts +22 -0
  58. package/dist/core/agentProfiles.d.ts.map +1 -0
  59. package/dist/core/agentProfiles.js +35 -0
  60. package/dist/core/agentProfiles.js.map +1 -0
  61. package/dist/core/agentRulebook.d.ts +11 -0
  62. package/dist/core/agentRulebook.d.ts.map +1 -0
  63. package/dist/core/agentRulebook.js +136 -0
  64. package/dist/core/agentRulebook.js.map +1 -0
  65. package/dist/core/agentSchemaLoader.d.ts +131 -0
  66. package/dist/core/agentSchemaLoader.d.ts.map +1 -0
  67. package/dist/core/agentSchemaLoader.js +235 -0
  68. package/dist/core/agentSchemaLoader.js.map +1 -0
  69. package/dist/core/agiCore.d.ts +290 -0
  70. package/dist/core/agiCore.d.ts.map +1 -0
  71. package/dist/core/agiCore.js +1348 -0
  72. package/dist/core/agiCore.js.map +1 -0
  73. package/dist/core/aiErrorFixer.d.ts +57 -0
  74. package/dist/core/aiErrorFixer.d.ts.map +1 -0
  75. package/dist/core/aiErrorFixer.js +214 -0
  76. package/dist/core/aiErrorFixer.js.map +1 -0
  77. package/dist/core/antiTermination.d.ts +226 -0
  78. package/dist/core/antiTermination.d.ts.map +1 -0
  79. package/dist/core/antiTermination.js +713 -0
  80. package/dist/core/antiTermination.js.map +1 -0
  81. package/dist/core/bashCommandGuidance.d.ts +16 -0
  82. package/dist/core/bashCommandGuidance.d.ts.map +1 -0
  83. package/dist/core/bashCommandGuidance.js +40 -0
  84. package/dist/core/bashCommandGuidance.js.map +1 -0
  85. package/dist/core/constants.d.ts +31 -0
  86. package/dist/core/constants.d.ts.map +1 -0
  87. package/dist/core/constants.js +62 -0
  88. package/dist/core/constants.js.map +1 -0
  89. package/dist/core/contextManager.d.ts +271 -0
  90. package/dist/core/contextManager.d.ts.map +1 -0
  91. package/dist/core/contextManager.js +1073 -0
  92. package/dist/core/contextManager.js.map +1 -0
  93. package/dist/core/contextWindow.d.ts +42 -0
  94. package/dist/core/contextWindow.d.ts.map +1 -0
  95. package/dist/core/contextWindow.js +123 -0
  96. package/dist/core/contextWindow.js.map +1 -0
  97. package/dist/core/customCommands.d.ts +19 -0
  98. package/dist/core/customCommands.d.ts.map +1 -0
  99. package/dist/core/customCommands.js +85 -0
  100. package/dist/core/customCommands.js.map +1 -0
  101. package/dist/core/deepBugAnalyzer.d.ts +25 -0
  102. package/dist/core/deepBugAnalyzer.d.ts.map +1 -0
  103. package/dist/core/deepBugAnalyzer.js +44 -0
  104. package/dist/core/deepBugAnalyzer.js.map +1 -0
  105. package/dist/core/dualTournament.d.ts +110 -0
  106. package/dist/core/dualTournament.d.ts.map +1 -0
  107. package/dist/core/dualTournament.js +270 -0
  108. package/dist/core/dualTournament.js.map +1 -0
  109. package/dist/core/dynamicGuardrails.d.ts +207 -0
  110. package/dist/core/dynamicGuardrails.d.ts.map +1 -0
  111. package/dist/core/dynamicGuardrails.js +516 -0
  112. package/dist/core/dynamicGuardrails.js.map +1 -0
  113. package/dist/core/embeddingProviders.d.ts +80 -0
  114. package/dist/core/embeddingProviders.d.ts.map +1 -0
  115. package/dist/core/embeddingProviders.js +241 -0
  116. package/dist/core/embeddingProviders.js.map +1 -0
  117. package/dist/core/episodicMemory.d.ts +259 -0
  118. package/dist/core/episodicMemory.d.ts.map +1 -0
  119. package/dist/core/episodicMemory.js +833 -0
  120. package/dist/core/episodicMemory.js.map +1 -0
  121. package/dist/core/errors/apiKeyErrors.d.ts +11 -0
  122. package/dist/core/errors/apiKeyErrors.d.ts.map +1 -0
  123. package/dist/core/errors/apiKeyErrors.js +159 -0
  124. package/dist/core/errors/apiKeyErrors.js.map +1 -0
  125. package/dist/core/errors/errorTypes.d.ts +111 -0
  126. package/dist/core/errors/errorTypes.d.ts.map +1 -0
  127. package/dist/core/errors/errorTypes.js +345 -0
  128. package/dist/core/errors/errorTypes.js.map +1 -0
  129. package/dist/core/errors/index.d.ts +50 -0
  130. package/dist/core/errors/index.d.ts.map +1 -0
  131. package/dist/core/errors/index.js +156 -0
  132. package/dist/core/errors/index.js.map +1 -0
  133. package/dist/core/errors/networkErrors.d.ts +14 -0
  134. package/dist/core/errors/networkErrors.d.ts.map +1 -0
  135. package/dist/core/errors/networkErrors.js +53 -0
  136. package/dist/core/errors/networkErrors.js.map +1 -0
  137. package/dist/core/errors/safetyValidator.d.ts +115 -0
  138. package/dist/core/errors/safetyValidator.d.ts.map +1 -0
  139. package/dist/core/errors/safetyValidator.js +302 -0
  140. package/dist/core/errors/safetyValidator.js.map +1 -0
  141. package/dist/core/errors.d.ts +4 -0
  142. package/dist/core/errors.d.ts.map +1 -0
  143. package/dist/core/errors.js +33 -0
  144. package/dist/core/errors.js.map +1 -0
  145. package/dist/core/finalResponseFormatter.d.ts +10 -0
  146. package/dist/core/finalResponseFormatter.d.ts.map +1 -0
  147. package/dist/core/finalResponseFormatter.js +14 -0
  148. package/dist/core/finalResponseFormatter.js.map +1 -0
  149. package/dist/core/flowProtection.d.ts +154 -0
  150. package/dist/core/flowProtection.d.ts.map +1 -0
  151. package/dist/core/flowProtection.js +436 -0
  152. package/dist/core/flowProtection.js.map +1 -0
  153. package/dist/core/gitWorktreeManager.d.ts +126 -0
  154. package/dist/core/gitWorktreeManager.d.ts.map +1 -0
  155. package/dist/core/gitWorktreeManager.js +403 -0
  156. package/dist/core/gitWorktreeManager.js.map +1 -0
  157. package/dist/core/guardrails.d.ts +150 -0
  158. package/dist/core/guardrails.d.ts.map +1 -0
  159. package/dist/core/guardrails.js +360 -0
  160. package/dist/core/guardrails.js.map +1 -0
  161. package/dist/core/hallucinationGuard.d.ts +57 -0
  162. package/dist/core/hallucinationGuard.d.ts.map +1 -0
  163. package/dist/core/hallucinationGuard.js +237 -0
  164. package/dist/core/hallucinationGuard.js.map +1 -0
  165. package/dist/core/hitlEnforcement.d.ts +143 -0
  166. package/dist/core/hitlEnforcement.d.ts.map +1 -0
  167. package/dist/core/hitlEnforcement.js +583 -0
  168. package/dist/core/hitlEnforcement.js.map +1 -0
  169. package/dist/core/hooks.d.ts +113 -0
  170. package/dist/core/hooks.d.ts.map +1 -0
  171. package/dist/core/hooks.js +364 -0
  172. package/dist/core/hooks.js.map +1 -0
  173. package/dist/core/hotReload.d.ts +154 -0
  174. package/dist/core/hotReload.d.ts.map +1 -0
  175. package/dist/core/hotReload.js +451 -0
  176. package/dist/core/hotReload.js.map +1 -0
  177. package/dist/core/hypothesisEngine.d.ts +27 -0
  178. package/dist/core/hypothesisEngine.d.ts.map +1 -0
  179. package/dist/core/hypothesisEngine.js +58 -0
  180. package/dist/core/hypothesisEngine.js.map +1 -0
  181. package/dist/core/index.d.ts +26 -0
  182. package/dist/core/index.d.ts.map +1 -0
  183. package/dist/core/index.js +54 -0
  184. package/dist/core/index.js.map +1 -0
  185. package/dist/core/inputProtection.d.ts +122 -0
  186. package/dist/core/inputProtection.d.ts.map +1 -0
  187. package/dist/core/inputProtection.js +421 -0
  188. package/dist/core/inputProtection.js.map +1 -0
  189. package/dist/core/liveGCPVerification.d.ts +41 -0
  190. package/dist/core/liveGCPVerification.d.ts.map +1 -0
  191. package/dist/core/liveGCPVerification.js +745 -0
  192. package/dist/core/liveGCPVerification.js.map +1 -0
  193. package/dist/core/modelDiscovery.d.ts +105 -0
  194. package/dist/core/modelDiscovery.d.ts.map +1 -0
  195. package/dist/core/modelDiscovery.js +740 -0
  196. package/dist/core/modelDiscovery.js.map +1 -0
  197. package/dist/core/multilinePasteHandler.d.ts +35 -0
  198. package/dist/core/multilinePasteHandler.d.ts.map +1 -0
  199. package/dist/core/multilinePasteHandler.js +80 -0
  200. package/dist/core/multilinePasteHandler.js.map +1 -0
  201. package/dist/core/parallel.d.ts +85 -0
  202. package/dist/core/parallel.d.ts.map +1 -0
  203. package/dist/core/parallel.js +150 -0
  204. package/dist/core/parallel.js.map +1 -0
  205. package/dist/core/parallelCoordinator.d.ts +21 -0
  206. package/dist/core/parallelCoordinator.d.ts.map +1 -0
  207. package/dist/core/parallelCoordinator.js +42 -0
  208. package/dist/core/parallelCoordinator.js.map +1 -0
  209. package/dist/core/parallelExecutor.d.ts +215 -0
  210. package/dist/core/parallelExecutor.d.ts.map +1 -0
  211. package/dist/core/parallelExecutor.js +584 -0
  212. package/dist/core/parallelExecutor.js.map +1 -0
  213. package/dist/core/platformSecurityIntegration.d.ts +133 -0
  214. package/dist/core/platformSecurityIntegration.d.ts.map +1 -0
  215. package/dist/core/platformSecurityIntegration.js +419 -0
  216. package/dist/core/platformSecurityIntegration.js.map +1 -0
  217. package/dist/core/preferences.d.ts +71 -0
  218. package/dist/core/preferences.d.ts.map +1 -0
  219. package/dist/core/preferences.js +341 -0
  220. package/dist/core/preferences.js.map +1 -0
  221. package/dist/core/productTestHarness.d.ts +46 -0
  222. package/dist/core/productTestHarness.d.ts.map +1 -0
  223. package/dist/core/productTestHarness.js +128 -0
  224. package/dist/core/productTestHarness.js.map +1 -0
  225. package/dist/core/providerKeys.d.ts +20 -0
  226. package/dist/core/providerKeys.d.ts.map +1 -0
  227. package/dist/core/providerKeys.js +40 -0
  228. package/dist/core/providerKeys.js.map +1 -0
  229. package/dist/core/realityScore.d.ts +159 -0
  230. package/dist/core/realityScore.d.ts.map +1 -0
  231. package/dist/core/realityScore.js +734 -0
  232. package/dist/core/realityScore.js.map +1 -0
  233. package/dist/core/repoUpgradeOrchestrator.d.ts +223 -0
  234. package/dist/core/repoUpgradeOrchestrator.d.ts.map +1 -0
  235. package/dist/core/repoUpgradeOrchestrator.js +1003 -0
  236. package/dist/core/repoUpgradeOrchestrator.js.map +1 -0
  237. package/dist/core/resultVerification.d.ts +47 -0
  238. package/dist/core/resultVerification.d.ts.map +1 -0
  239. package/dist/core/resultVerification.js +126 -0
  240. package/dist/core/resultVerification.js.map +1 -0
  241. package/dist/core/revenueEnvValidator.d.ts +30 -0
  242. package/dist/core/revenueEnvValidator.d.ts.map +1 -0
  243. package/dist/core/revenueEnvValidator.js +241 -0
  244. package/dist/core/revenueEnvValidator.js.map +1 -0
  245. package/dist/core/schemaValidator.d.ts +49 -0
  246. package/dist/core/schemaValidator.d.ts.map +1 -0
  247. package/dist/core/schemaValidator.js +234 -0
  248. package/dist/core/schemaValidator.js.map +1 -0
  249. package/dist/core/secretStore.d.ts +48 -0
  250. package/dist/core/secretStore.d.ts.map +1 -0
  251. package/dist/core/secretStore.js +295 -0
  252. package/dist/core/secretStore.js.map +1 -0
  253. package/dist/core/securityTournament.d.ts +83 -0
  254. package/dist/core/securityTournament.d.ts.map +1 -0
  255. package/dist/core/securityTournament.js +357 -0
  256. package/dist/core/securityTournament.js.map +1 -0
  257. package/dist/core/selfUpgrade.d.ts +253 -0
  258. package/dist/core/selfUpgrade.d.ts.map +1 -0
  259. package/dist/core/selfUpgrade.js +669 -0
  260. package/dist/core/selfUpgrade.js.map +1 -0
  261. package/dist/core/sessionStorage.d.ts +10 -0
  262. package/dist/core/sessionStorage.d.ts.map +1 -0
  263. package/dist/core/sessionStorage.js +46 -0
  264. package/dist/core/sessionStorage.js.map +1 -0
  265. package/dist/core/sessionStore.d.ts +35 -0
  266. package/dist/core/sessionStore.d.ts.map +1 -0
  267. package/dist/core/sessionStore.js +191 -0
  268. package/dist/core/sessionStore.js.map +1 -0
  269. package/dist/core/taskCompletionDetector.d.ts +112 -0
  270. package/dist/core/taskCompletionDetector.d.ts.map +1 -0
  271. package/dist/core/taskCompletionDetector.js +469 -0
  272. package/dist/core/taskCompletionDetector.js.map +1 -0
  273. package/dist/core/toolPreconditions.d.ts +34 -0
  274. package/dist/core/toolPreconditions.d.ts.map +1 -0
  275. package/dist/core/toolPreconditions.js +242 -0
  276. package/dist/core/toolPreconditions.js.map +1 -0
  277. package/dist/core/toolRuntime.d.ts +185 -0
  278. package/dist/core/toolRuntime.d.ts.map +1 -0
  279. package/dist/core/toolRuntime.js +412 -0
  280. package/dist/core/toolRuntime.js.map +1 -0
  281. package/dist/core/tournamentStrategy.d.ts +12 -0
  282. package/dist/core/tournamentStrategy.d.ts.map +1 -0
  283. package/dist/core/tournamentStrategy.js +41 -0
  284. package/dist/core/tournamentStrategy.js.map +1 -0
  285. package/dist/core/types/utilityTypes.d.ts +192 -0
  286. package/dist/core/types/utilityTypes.d.ts.map +1 -0
  287. package/dist/core/types/utilityTypes.js +272 -0
  288. package/dist/core/types/utilityTypes.js.map +1 -0
  289. package/dist/core/types.d.ts +334 -0
  290. package/dist/core/types.d.ts.map +1 -0
  291. package/dist/core/types.js +76 -0
  292. package/dist/core/types.js.map +1 -0
  293. package/dist/core/unifiedOrchestrator.d.ts +47 -0
  294. package/dist/core/unifiedOrchestrator.d.ts.map +1 -0
  295. package/dist/core/unifiedOrchestrator.js +103 -0
  296. package/dist/core/unifiedOrchestrator.js.map +1 -0
  297. package/dist/core/universalSecurityAudit.d.ts +104 -0
  298. package/dist/core/universalSecurityAudit.d.ts.map +1 -0
  299. package/dist/core/universalSecurityAudit.js +2190 -0
  300. package/dist/core/universalSecurityAudit.js.map +1 -0
  301. package/dist/core/updateChecker.d.ts +148 -0
  302. package/dist/core/updateChecker.d.ts.map +1 -0
  303. package/dist/core/updateChecker.js +593 -0
  304. package/dist/core/updateChecker.js.map +1 -0
  305. package/dist/core/variantExecution.d.ts +23 -0
  306. package/dist/core/variantExecution.d.ts.map +1 -0
  307. package/dist/core/variantExecution.js +58 -0
  308. package/dist/core/variantExecution.js.map +1 -0
  309. package/dist/core/verificationFirst.d.ts +110 -0
  310. package/dist/core/verificationFirst.d.ts.map +1 -0
  311. package/dist/core/verificationFirst.js +312 -0
  312. package/dist/core/verificationFirst.js.map +1 -0
  313. package/dist/core/winnerStrategy.d.ts +15 -0
  314. package/dist/core/winnerStrategy.d.ts.map +1 -0
  315. package/dist/core/winnerStrategy.js +18 -0
  316. package/dist/core/winnerStrategy.js.map +1 -0
  317. package/dist/core/zeroDayDiscovery.d.ts +96 -0
  318. package/dist/core/zeroDayDiscovery.d.ts.map +1 -0
  319. package/dist/core/zeroDayDiscovery.js +358 -0
  320. package/dist/core/zeroDayDiscovery.js.map +1 -0
  321. package/dist/headless/interactiveShell.d.ts +22 -0
  322. package/dist/headless/interactiveShell.d.ts.map +1 -0
  323. package/dist/headless/interactiveShell.js +3832 -0
  324. package/dist/headless/interactiveShell.js.map +1 -0
  325. package/dist/headless/quickMode.d.ts +26 -0
  326. package/dist/headless/quickMode.d.ts.map +1 -0
  327. package/dist/headless/quickMode.js +226 -0
  328. package/dist/headless/quickMode.js.map +1 -0
  329. package/dist/providers/baseProvider.d.ts +148 -0
  330. package/dist/providers/baseProvider.d.ts.map +1 -0
  331. package/dist/providers/baseProvider.js +284 -0
  332. package/dist/providers/baseProvider.js.map +1 -0
  333. package/dist/providers/deepseekReasonerProvider.d.ts +57 -0
  334. package/dist/providers/deepseekReasonerProvider.d.ts.map +1 -0
  335. package/dist/providers/deepseekReasonerProvider.js +87 -0
  336. package/dist/providers/deepseekReasonerProvider.js.map +1 -0
  337. package/dist/providers/openaiChatCompletionsProvider.d.ts +64 -0
  338. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -0
  339. package/dist/providers/openaiChatCompletionsProvider.js +1000 -0
  340. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -0
  341. package/dist/providers/providerFactory.d.ts +24 -0
  342. package/dist/providers/providerFactory.d.ts.map +1 -0
  343. package/dist/providers/providerFactory.js +27 -0
  344. package/dist/providers/providerFactory.js.map +1 -0
  345. package/dist/providers/resilientProvider.d.ts +103 -0
  346. package/dist/providers/resilientProvider.d.ts.map +1 -0
  347. package/dist/providers/resilientProvider.js +462 -0
  348. package/dist/providers/resilientProvider.js.map +1 -0
  349. package/dist/runtime/agentController.d.ts +114 -0
  350. package/dist/runtime/agentController.d.ts.map +1 -0
  351. package/dist/runtime/agentController.js +693 -0
  352. package/dist/runtime/agentController.js.map +1 -0
  353. package/dist/runtime/agentHost.d.ts +61 -0
  354. package/dist/runtime/agentHost.d.ts.map +1 -0
  355. package/dist/runtime/agentHost.js +157 -0
  356. package/dist/runtime/agentHost.js.map +1 -0
  357. package/dist/runtime/agentSession.d.ts +45 -0
  358. package/dist/runtime/agentSession.d.ts.map +1 -0
  359. package/dist/runtime/agentSession.js +214 -0
  360. package/dist/runtime/agentSession.js.map +1 -0
  361. package/dist/runtime/agentWorkerPool.d.ts +167 -0
  362. package/dist/runtime/agentWorkerPool.d.ts.map +1 -0
  363. package/dist/runtime/agentWorkerPool.js +435 -0
  364. package/dist/runtime/agentWorkerPool.js.map +1 -0
  365. package/dist/runtime/node.d.ts +7 -0
  366. package/dist/runtime/node.d.ts.map +1 -0
  367. package/dist/runtime/node.js +18 -0
  368. package/dist/runtime/node.js.map +1 -0
  369. package/dist/runtime/universal.d.ts +18 -0
  370. package/dist/runtime/universal.d.ts.map +1 -0
  371. package/dist/runtime/universal.js +21 -0
  372. package/dist/runtime/universal.js.map +1 -0
  373. package/dist/ui/PromptController.d.ts +174 -0
  374. package/dist/ui/PromptController.d.ts.map +1 -0
  375. package/dist/ui/PromptController.js +351 -0
  376. package/dist/ui/PromptController.js.map +1 -0
  377. package/dist/ui/UnifiedUIRenderer.d.ts +779 -0
  378. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -0
  379. package/dist/ui/UnifiedUIRenderer.js +5458 -0
  380. package/dist/ui/UnifiedUIRenderer.js.map +1 -0
  381. package/dist/ui/animatedStatus.d.ts +140 -0
  382. package/dist/ui/animatedStatus.d.ts.map +1 -0
  383. package/dist/ui/animatedStatus.js +480 -0
  384. package/dist/ui/animatedStatus.js.map +1 -0
  385. package/dist/ui/animation/AnimationScheduler.d.ts +197 -0
  386. package/dist/ui/animation/AnimationScheduler.d.ts.map +1 -0
  387. package/dist/ui/animation/AnimationScheduler.js +440 -0
  388. package/dist/ui/animation/AnimationScheduler.js.map +1 -0
  389. package/dist/ui/codeHighlighter.d.ts +6 -0
  390. package/dist/ui/codeHighlighter.d.ts.map +1 -0
  391. package/dist/ui/codeHighlighter.js +855 -0
  392. package/dist/ui/codeHighlighter.js.map +1 -0
  393. package/dist/ui/designSystem.d.ts +26 -0
  394. package/dist/ui/designSystem.d.ts.map +1 -0
  395. package/dist/ui/designSystem.js +114 -0
  396. package/dist/ui/designSystem.js.map +1 -0
  397. package/dist/ui/errorFormatter.d.ts +64 -0
  398. package/dist/ui/errorFormatter.d.ts.map +1 -0
  399. package/dist/ui/errorFormatter.js +316 -0
  400. package/dist/ui/errorFormatter.js.map +1 -0
  401. package/dist/ui/globalWriteLock.d.ts +63 -0
  402. package/dist/ui/globalWriteLock.d.ts.map +1 -0
  403. package/dist/ui/globalWriteLock.js +173 -0
  404. package/dist/ui/globalWriteLock.js.map +1 -0
  405. package/dist/ui/index.d.ts +32 -0
  406. package/dist/ui/index.d.ts.map +1 -0
  407. package/dist/ui/index.js +54 -0
  408. package/dist/ui/index.js.map +1 -0
  409. package/dist/ui/interrupts/InterruptManager.d.ts +157 -0
  410. package/dist/ui/interrupts/InterruptManager.d.ts.map +1 -0
  411. package/dist/ui/interrupts/InterruptManager.js +501 -0
  412. package/dist/ui/interrupts/InterruptManager.js.map +1 -0
  413. package/dist/ui/layout.d.ts +27 -0
  414. package/dist/ui/layout.d.ts.map +1 -0
  415. package/dist/ui/layout.js +184 -0
  416. package/dist/ui/layout.js.map +1 -0
  417. package/dist/ui/maxOffensiveUkraineUI.d.ts +94 -0
  418. package/dist/ui/maxOffensiveUkraineUI.d.ts.map +1 -0
  419. package/dist/ui/maxOffensiveUkraineUI.js +316 -0
  420. package/dist/ui/maxOffensiveUkraineUI.js.map +1 -0
  421. package/dist/ui/outputMode.d.ts +44 -0
  422. package/dist/ui/outputMode.d.ts.map +1 -0
  423. package/dist/ui/outputMode.js +123 -0
  424. package/dist/ui/outputMode.js.map +1 -0
  425. package/dist/ui/overlay/OverlayManager.d.ts +105 -0
  426. package/dist/ui/overlay/OverlayManager.d.ts.map +1 -0
  427. package/dist/ui/overlay/OverlayManager.js +291 -0
  428. package/dist/ui/overlay/OverlayManager.js.map +1 -0
  429. package/dist/ui/premiumComponents.d.ts +54 -0
  430. package/dist/ui/premiumComponents.d.ts.map +1 -0
  431. package/dist/ui/premiumComponents.js +241 -0
  432. package/dist/ui/premiumComponents.js.map +1 -0
  433. package/dist/ui/richText.d.ts +13 -0
  434. package/dist/ui/richText.d.ts.map +1 -0
  435. package/dist/ui/richText.js +444 -0
  436. package/dist/ui/richText.js.map +1 -0
  437. package/dist/ui/telemetry/ResponseTracker.d.ts +22 -0
  438. package/dist/ui/telemetry/ResponseTracker.d.ts.map +1 -0
  439. package/dist/ui/telemetry/ResponseTracker.js +60 -0
  440. package/dist/ui/telemetry/ResponseTracker.js.map +1 -0
  441. package/dist/ui/telemetry/UITelemetry.d.ts +181 -0
  442. package/dist/ui/telemetry/UITelemetry.d.ts.map +1 -0
  443. package/dist/ui/telemetry/UITelemetry.js +446 -0
  444. package/dist/ui/telemetry/UITelemetry.js.map +1 -0
  445. package/dist/ui/textHighlighter.d.ts +83 -0
  446. package/dist/ui/textHighlighter.d.ts.map +1 -0
  447. package/dist/ui/textHighlighter.js +267 -0
  448. package/dist/ui/textHighlighter.js.map +1 -0
  449. package/dist/ui/theme.d.ts +364 -0
  450. package/dist/ui/theme.d.ts.map +1 -0
  451. package/dist/ui/theme.js +471 -0
  452. package/dist/ui/theme.js.map +1 -0
  453. package/dist/ui/toolDisplay.d.ts +221 -0
  454. package/dist/ui/toolDisplay.d.ts.map +1 -0
  455. package/dist/ui/toolDisplay.js +1654 -0
  456. package/dist/ui/toolDisplay.js.map +1 -0
  457. package/dist/ui/uiConstants.d.ts +288 -0
  458. package/dist/ui/uiConstants.d.ts.map +1 -0
  459. package/dist/ui/uiConstants.js +472 -0
  460. package/dist/ui/uiConstants.js.map +1 -0
  461. package/dist/utils/askUserPrompt.d.ts +21 -0
  462. package/dist/utils/askUserPrompt.d.ts.map +1 -0
  463. package/dist/utils/askUserPrompt.js +87 -0
  464. package/dist/utils/askUserPrompt.js.map +1 -0
  465. package/dist/utils/asyncUtils.d.ts +95 -0
  466. package/dist/utils/asyncUtils.d.ts.map +1 -0
  467. package/dist/utils/asyncUtils.js +286 -0
  468. package/dist/utils/asyncUtils.js.map +1 -0
  469. package/dist/utils/debugLogger.d.ts +6 -0
  470. package/dist/utils/debugLogger.d.ts.map +1 -0
  471. package/dist/utils/debugLogger.js +39 -0
  472. package/dist/utils/debugLogger.js.map +1 -0
  473. package/dist/utils/errorUtils.d.ts +12 -0
  474. package/dist/utils/errorUtils.d.ts.map +1 -0
  475. package/dist/utils/errorUtils.js +83 -0
  476. package/dist/utils/errorUtils.js.map +1 -0
  477. package/dist/utils/frontmatter.d.ts +10 -0
  478. package/dist/utils/frontmatter.d.ts.map +1 -0
  479. package/dist/utils/frontmatter.js +78 -0
  480. package/dist/utils/frontmatter.js.map +1 -0
  481. package/dist/utils/packageInfo.d.ts +14 -0
  482. package/dist/utils/packageInfo.d.ts.map +1 -0
  483. package/dist/utils/packageInfo.js +45 -0
  484. package/dist/utils/packageInfo.js.map +1 -0
  485. package/dist/utils/planFormatter.d.ts +34 -0
  486. package/dist/utils/planFormatter.d.ts.map +1 -0
  487. package/dist/utils/planFormatter.js +141 -0
  488. package/dist/utils/planFormatter.js.map +1 -0
  489. package/dist/utils/securityUtils.d.ts +132 -0
  490. package/dist/utils/securityUtils.d.ts.map +1 -0
  491. package/dist/utils/securityUtils.js +324 -0
  492. package/dist/utils/securityUtils.js.map +1 -0
  493. package/dist/workspace.d.ts +8 -0
  494. package/dist/workspace.d.ts.map +1 -0
  495. package/dist/workspace.js +134 -0
  496. package/dist/workspace.js.map +1 -0
  497. package/dist/workspace.validator.d.ts +49 -0
  498. package/dist/workspace.validator.d.ts.map +1 -0
  499. package/dist/workspace.validator.js +215 -0
  500. package/dist/workspace.validator.js.map +1 -0
  501. package/package.json +60 -0
@@ -0,0 +1,669 @@
1
+ /**
2
+ * Self-Upgrade System for AGI Core
3
+ *
4
+ * Provides the ability to:
5
+ * 1. npm install a fresh version of the CLI
6
+ * 2. Launch a new CLI instance
7
+ * 3. Continue work seamlessly after upgrade
8
+ * 4. Integrate with edits, builds, tests, and RL scoring
9
+ *
10
+ * This module enables true self-improvement through version updates
11
+ * while maintaining session continuity.
12
+ */
13
+ import { exec as execCallback, spawn } from 'node:child_process';
14
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync } from 'node:fs';
15
+ import { homedir } from 'node:os';
16
+ import { join, dirname } from 'node:path';
17
+ import { promisify } from 'node:util';
18
+ import { EventEmitter } from 'node:events';
19
+ const execAsync = promisify(execCallback);
20
+ // ============================================================================
21
+ // CONSTANTS
22
+ // ============================================================================
23
+ const DEFAULT_PACKAGE_NAME = 'deepseek-coder-cli';
24
+ const DEFAULT_TIMEOUT = 5 * 60 * 1000; // 5 minutes
25
+ const SESSION_STATE_FILE = join(homedir(), '.agi', 'upgrade-session.json');
26
+ const UPGRADE_LOG_FILE = join(homedir(), '.agi', 'upgrade-log.json');
27
+ const RL_CHECKPOINT_FILE = join(homedir(), '.agi', 'rl-checkpoint.json');
28
+ // ============================================================================
29
+ // SELF-UPGRADE CLASS
30
+ // ============================================================================
31
+ export class SelfUpgrade extends EventEmitter {
32
+ config;
33
+ upgradeInProgress = false;
34
+ childProcess = null;
35
+ constructor(config = {}) {
36
+ super();
37
+ this.config = {
38
+ packageName: config.packageName ?? DEFAULT_PACKAGE_NAME,
39
+ global: config.global ?? true,
40
+ workingDir: config.workingDir ?? process.cwd(),
41
+ logger: config.logger ?? console.log,
42
+ timeout: config.timeout ?? DEFAULT_TIMEOUT,
43
+ autoRestart: config.autoRestart ?? true,
44
+ sessionState: config.sessionState,
45
+ };
46
+ }
47
+ // ==========================================================================
48
+ // VERSION CHECKING
49
+ // ==========================================================================
50
+ /**
51
+ * Check for available updates
52
+ */
53
+ async checkForUpdates() {
54
+ const current = await this.getCurrentVersion();
55
+ const latest = await this.getLatestVersion();
56
+ return {
57
+ current,
58
+ latest,
59
+ updateAvailable: this.compareVersions(latest, current) > 0,
60
+ releaseNotesUrl: `https://github.com/anthropics/claude-code/releases/tag/v${latest}`,
61
+ };
62
+ }
63
+ /**
64
+ * Get currently installed version
65
+ */
66
+ async getCurrentVersion() {
67
+ // Method 1: Try to read from global node_modules package.json
68
+ try {
69
+ const { stdout: prefix } = await execAsync('npm config get prefix', { timeout: 5000 });
70
+ const globalPrefix = prefix.trim();
71
+ const pkgJsonPath = join(globalPrefix, 'lib', 'node_modules', this.config.packageName, 'package.json');
72
+ if (existsSync(pkgJsonPath)) {
73
+ const pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf8'));
74
+ if (pkgJson.version) {
75
+ return pkgJson.version;
76
+ }
77
+ }
78
+ }
79
+ catch {
80
+ // Fall through to next method
81
+ }
82
+ // Method 2: Try npm list with proper parsing
83
+ try {
84
+ const { stdout } = await execAsync(`npm list -g ${this.config.packageName} --depth=0 --json`, {
85
+ timeout: 10000,
86
+ });
87
+ const result = JSON.parse(stdout);
88
+ // Check multiple possible locations in the JSON structure
89
+ const version = result.dependencies?.[this.config.packageName]?.version ||
90
+ result.devDependencies?.[this.config.packageName]?.version ||
91
+ result.version;
92
+ if (version && version !== '0.0.0') {
93
+ return version;
94
+ }
95
+ }
96
+ catch {
97
+ // Fall through to next method
98
+ }
99
+ // Method 3: Try parsing npm list text output
100
+ try {
101
+ const { stdout } = await execAsync(`npm list -g ${this.config.packageName} --depth=0`, {
102
+ timeout: 10000,
103
+ });
104
+ // Output format: "└── agi-core-cli@1.1.44" or similar
105
+ const match = stdout.match(new RegExp(`${this.config.packageName}@([\\d.]+)`));
106
+ if (match?.[1]) {
107
+ return match[1];
108
+ }
109
+ }
110
+ catch {
111
+ // Fall through
112
+ }
113
+ return '0.0.0';
114
+ }
115
+ /**
116
+ * Get latest available version from npm registry
117
+ */
118
+ async getLatestVersion() {
119
+ try {
120
+ const { stdout } = await execAsync(`npm view ${this.config.packageName} version`, {
121
+ timeout: 10000,
122
+ });
123
+ return stdout.trim();
124
+ }
125
+ catch {
126
+ return '0.0.0';
127
+ }
128
+ }
129
+ /**
130
+ * Compare two semver versions
131
+ * Returns: 1 if v1 > v2, -1 if v1 < v2, 0 if equal
132
+ */
133
+ compareVersions(v1, v2) {
134
+ const parts1 = v1.replace(/^v/, '').split('.').map(Number);
135
+ const parts2 = v2.replace(/^v/, '').split('.').map(Number);
136
+ for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
137
+ const p1 = parts1[i] || 0;
138
+ const p2 = parts2[i] || 0;
139
+ if (p1 > p2)
140
+ return 1;
141
+ if (p1 < p2)
142
+ return -1;
143
+ }
144
+ return 0;
145
+ }
146
+ // ==========================================================================
147
+ // UPGRADE EXECUTION
148
+ // ==========================================================================
149
+ /**
150
+ * Perform npm install of fresh version
151
+ */
152
+ async npmInstallFresh(version) {
153
+ if (this.upgradeInProgress) {
154
+ return {
155
+ success: false,
156
+ fromVersion: await this.getCurrentVersion(),
157
+ error: 'Upgrade already in progress',
158
+ restarted: false,
159
+ durationMs: 0,
160
+ };
161
+ }
162
+ this.upgradeInProgress = true;
163
+ const startTime = Date.now();
164
+ const fromVersion = await this.getCurrentVersion();
165
+ this.emitEvent('upgrade:start', { fromVersion, targetVersion: version || 'latest' });
166
+ try {
167
+ // Save session state before upgrade
168
+ if (this.config.sessionState) {
169
+ this.saveSessionState({
170
+ ...this.config.sessionState,
171
+ fromVersion,
172
+ toVersion: version,
173
+ timestamp: Date.now(),
174
+ });
175
+ }
176
+ // Build install command
177
+ const globalFlag = this.config.global ? '-g ' : '';
178
+ const versionSpec = version ? `@${version}` : '@latest';
179
+ const command = `npm install ${globalFlag}${this.config.packageName}${versionSpec}`;
180
+ this.config.logger(`Installing ${this.config.packageName}${versionSpec}...`);
181
+ this.emitEvent('upgrade:download', { command });
182
+ // Execute npm install
183
+ await execAsync(command, {
184
+ timeout: this.config.timeout,
185
+ maxBuffer: 10 * 1024 * 1024,
186
+ env: {
187
+ ...process.env,
188
+ npm_config_loglevel: 'warn',
189
+ },
190
+ });
191
+ this.emitEvent('upgrade:install', { success: true });
192
+ const toVersion = await this.getLatestVersion();
193
+ const durationMs = Date.now() - startTime;
194
+ // Log upgrade
195
+ this.logUpgrade({
196
+ success: true,
197
+ fromVersion,
198
+ toVersion,
199
+ durationMs,
200
+ timestamp: Date.now(),
201
+ });
202
+ this.config.logger(`Upgrade complete: ${fromVersion} -> ${toVersion}`);
203
+ this.emitEvent('upgrade:complete', { fromVersion, toVersion, durationMs });
204
+ // Auto-restart if configured
205
+ if (this.config.autoRestart) {
206
+ await this.launchNewInstance();
207
+ return {
208
+ success: true,
209
+ fromVersion,
210
+ toVersion,
211
+ restarted: true,
212
+ durationMs,
213
+ };
214
+ }
215
+ return {
216
+ success: true,
217
+ fromVersion,
218
+ toVersion,
219
+ restarted: false,
220
+ durationMs,
221
+ };
222
+ }
223
+ catch (error) {
224
+ const errorMessage = error instanceof Error ? error.message : String(error);
225
+ this.config.logger(`Upgrade failed: ${errorMessage}`);
226
+ this.emitEvent('upgrade:error', { error: errorMessage });
227
+ return {
228
+ success: false,
229
+ fromVersion,
230
+ error: errorMessage,
231
+ restarted: false,
232
+ durationMs: Date.now() - startTime,
233
+ };
234
+ }
235
+ finally {
236
+ this.upgradeInProgress = false;
237
+ }
238
+ }
239
+ /**
240
+ * Launch a new CLI instance and optionally continue work
241
+ */
242
+ async launchNewInstance(resumeSession = true) {
243
+ try {
244
+ const cliPath = process.argv[1] || 'agi';
245
+ const args = [];
246
+ // Add resume flag if we have session state
247
+ if (resumeSession && this.hasPendingSession()) {
248
+ args.push('--resume');
249
+ }
250
+ // Add working directory
251
+ if (this.config.workingDir) {
252
+ args.push('--cwd', this.config.workingDir);
253
+ }
254
+ this.config.logger('Launching new CLI instance...');
255
+ this.emitEvent('upgrade:restart', { cliPath, args });
256
+ // Spawn new process
257
+ this.childProcess = spawn(process.execPath, [cliPath, ...args], {
258
+ detached: true,
259
+ stdio: 'inherit',
260
+ cwd: this.config.workingDir,
261
+ env: {
262
+ ...process.env,
263
+ AGI_UPGRADED: 'true',
264
+ AGI_UPGRADE_FROM: await this.getCurrentVersion(),
265
+ AGI_RESUME_SESSION: resumeSession ? 'true' : 'false',
266
+ },
267
+ });
268
+ // Unref to allow parent to exit
269
+ if (this.childProcess.unref) {
270
+ this.childProcess.unref();
271
+ }
272
+ // Exit current process after short delay
273
+ setTimeout(() => {
274
+ process.exit(0);
275
+ }, 500);
276
+ return true;
277
+ }
278
+ catch (error) {
279
+ const errorMessage = error instanceof Error ? error.message : String(error);
280
+ this.config.logger(`Failed to launch new instance: ${errorMessage}`);
281
+ return false;
282
+ }
283
+ }
284
+ // ==========================================================================
285
+ // SESSION MANAGEMENT
286
+ // ==========================================================================
287
+ /**
288
+ * Save session state for resumption after upgrade
289
+ */
290
+ saveSessionState(state) {
291
+ try {
292
+ const dir = dirname(SESSION_STATE_FILE);
293
+ if (!existsSync(dir)) {
294
+ mkdirSync(dir, { recursive: true });
295
+ }
296
+ writeFileSync(SESSION_STATE_FILE, JSON.stringify(state, null, 2));
297
+ }
298
+ catch {
299
+ // Best-effort
300
+ }
301
+ }
302
+ /**
303
+ * Load session state after upgrade
304
+ */
305
+ loadSessionState() {
306
+ try {
307
+ if (!existsSync(SESSION_STATE_FILE)) {
308
+ return null;
309
+ }
310
+ const raw = readFileSync(SESSION_STATE_FILE, 'utf8');
311
+ return JSON.parse(raw);
312
+ }
313
+ catch {
314
+ return null;
315
+ }
316
+ }
317
+ /**
318
+ * Clear session state after successful resumption
319
+ */
320
+ clearSessionState() {
321
+ try {
322
+ if (existsSync(SESSION_STATE_FILE)) {
323
+ rmSync(SESSION_STATE_FILE);
324
+ }
325
+ }
326
+ catch {
327
+ // Best-effort
328
+ }
329
+ }
330
+ /**
331
+ * Check if there's a pending session to resume
332
+ */
333
+ hasPendingSession() {
334
+ const state = this.loadSessionState();
335
+ if (!state || !state.timestamp)
336
+ return false;
337
+ // Session valid if less than 24 hours old
338
+ const maxAge = 24 * 60 * 60 * 1000;
339
+ return Date.now() - state.timestamp < maxAge;
340
+ }
341
+ // ==========================================================================
342
+ // RL INTEGRATION
343
+ // ==========================================================================
344
+ /**
345
+ * Save RL checkpoint before upgrade (for RL scoring continuity)
346
+ */
347
+ saveRLCheckpoint(context) {
348
+ try {
349
+ const dir = dirname(RL_CHECKPOINT_FILE);
350
+ if (!existsSync(dir)) {
351
+ mkdirSync(dir, { recursive: true });
352
+ }
353
+ writeFileSync(RL_CHECKPOINT_FILE, JSON.stringify({
354
+ ...context,
355
+ checkpointTime: Date.now(),
356
+ }, null, 2));
357
+ this.emitEvent('upgrade:rl-checkpoint', { context });
358
+ }
359
+ catch {
360
+ // Best-effort
361
+ }
362
+ }
363
+ /**
364
+ * Load RL checkpoint after upgrade
365
+ */
366
+ loadRLCheckpoint() {
367
+ try {
368
+ if (!existsSync(RL_CHECKPOINT_FILE)) {
369
+ return null;
370
+ }
371
+ const raw = readFileSync(RL_CHECKPOINT_FILE, 'utf8');
372
+ const data = JSON.parse(raw);
373
+ // Checkpoint valid if less than 1 hour old
374
+ if (Date.now() - data.checkpointTime > 60 * 60 * 1000) {
375
+ return null;
376
+ }
377
+ return data;
378
+ }
379
+ catch {
380
+ return null;
381
+ }
382
+ }
383
+ /**
384
+ * Clear RL checkpoint after successful resumption
385
+ */
386
+ clearRLCheckpoint() {
387
+ try {
388
+ if (existsSync(RL_CHECKPOINT_FILE)) {
389
+ rmSync(RL_CHECKPOINT_FILE);
390
+ }
391
+ }
392
+ catch {
393
+ // Best-effort
394
+ }
395
+ }
396
+ /**
397
+ * Calculate RL score impact from upgrade
398
+ * Positive impact if upgrade improves capability
399
+ */
400
+ calculateRLScoreImpact(preUpgrade, postUpgradeSuccess) {
401
+ if (!postUpgradeSuccess) {
402
+ return -0.1; // Penalty for failed upgrade attempt
403
+ }
404
+ // Base positive impact for successful upgrade
405
+ let impact = 0.05;
406
+ // Bonus for upgrading during active RL iteration
407
+ if (preUpgrade.iteration > 0) {
408
+ impact += 0.02;
409
+ }
410
+ // Bonus if files were modified (upgrade during active work)
411
+ if (preUpgrade.filesModified.length > 0) {
412
+ impact += 0.01 * Math.min(preUpgrade.filesModified.length, 5);
413
+ }
414
+ return impact;
415
+ }
416
+ // ==========================================================================
417
+ // BUILD/TEST INTEGRATION
418
+ // ==========================================================================
419
+ /**
420
+ * Upgrade with build verification
421
+ */
422
+ async upgradeWithBuildCheck(version, buildCommand = 'npm run build') {
423
+ const result = await this.npmInstallFresh(version);
424
+ if (!result.success) {
425
+ return { ...result, buildSuccess: false };
426
+ }
427
+ // Run build to verify upgrade didn't break anything
428
+ try {
429
+ await execAsync(buildCommand, {
430
+ cwd: this.config.workingDir,
431
+ timeout: this.config.timeout,
432
+ });
433
+ return { ...result, buildSuccess: true };
434
+ }
435
+ catch (error) {
436
+ const errorMessage = error instanceof Error ? error.message : String(error);
437
+ this.config.logger(`Post-upgrade build failed: ${errorMessage}`);
438
+ return { ...result, buildSuccess: false };
439
+ }
440
+ }
441
+ /**
442
+ * Upgrade with test verification
443
+ */
444
+ async upgradeWithTestCheck(version, testCommand = 'npm test') {
445
+ const result = await this.npmInstallFresh(version);
446
+ if (!result.success) {
447
+ return { ...result, testState: { passed: 0, failed: 0 } };
448
+ }
449
+ // Run tests to verify upgrade
450
+ try {
451
+ const { stdout, stderr } = await execAsync(testCommand, {
452
+ cwd: this.config.workingDir,
453
+ timeout: this.config.timeout,
454
+ });
455
+ const output = stdout + stderr;
456
+ const passed = this.parseTestCount(output, 'pass');
457
+ const failed = this.parseTestCount(output, 'fail');
458
+ return {
459
+ ...result,
460
+ testState: { passed, failed, output, command: testCommand },
461
+ };
462
+ }
463
+ catch (error) {
464
+ const output = error instanceof Error ? error.stdout + error.stderr : '';
465
+ const passed = this.parseTestCount(output, 'pass');
466
+ const failed = this.parseTestCount(output, 'fail');
467
+ return {
468
+ ...result,
469
+ testState: { passed, failed, output, command: testCommand },
470
+ };
471
+ }
472
+ }
473
+ /**
474
+ * Full upgrade with build and test verification
475
+ */
476
+ async upgradeWithFullVerification(version, buildCommand = 'npm run build', testCommand = 'npm test') {
477
+ const result = await this.npmInstallFresh(version);
478
+ if (!result.success) {
479
+ return { ...result, buildSuccess: false, testState: { passed: 0, failed: 0 } };
480
+ }
481
+ // Run build
482
+ let buildSuccess = false;
483
+ try {
484
+ await execAsync(buildCommand, {
485
+ cwd: this.config.workingDir,
486
+ timeout: this.config.timeout,
487
+ });
488
+ buildSuccess = true;
489
+ }
490
+ catch {
491
+ this.config.logger('Post-upgrade build failed');
492
+ }
493
+ // Run tests
494
+ let testState = { passed: 0, failed: 0 };
495
+ try {
496
+ const { stdout, stderr } = await execAsync(testCommand, {
497
+ cwd: this.config.workingDir,
498
+ timeout: this.config.timeout,
499
+ });
500
+ const output = stdout + stderr;
501
+ testState = {
502
+ passed: this.parseTestCount(output, 'pass'),
503
+ failed: this.parseTestCount(output, 'fail'),
504
+ output,
505
+ command: testCommand,
506
+ };
507
+ }
508
+ catch (error) {
509
+ const output = error instanceof Error ? error.stdout + error.stderr : '';
510
+ testState = {
511
+ passed: this.parseTestCount(output, 'pass'),
512
+ failed: this.parseTestCount(output, 'fail'),
513
+ output,
514
+ command: testCommand,
515
+ };
516
+ }
517
+ return { ...result, buildSuccess, testState };
518
+ }
519
+ parseTestCount(output, type) {
520
+ const match = output.match(new RegExp(`(\\d+)\\s*${type}`, 'i'));
521
+ return match ? parseInt(match[1], 10) : 0;
522
+ }
523
+ // ==========================================================================
524
+ // EDIT INTEGRATION
525
+ // ==========================================================================
526
+ /**
527
+ * Save active edits before upgrade for continuity
528
+ */
529
+ saveActiveEdits(files) {
530
+ const state = this.loadSessionState() || {
531
+ workingDir: this.config.workingDir,
532
+ fromVersion: '0.0.0',
533
+ timestamp: Date.now(),
534
+ };
535
+ this.saveSessionState({
536
+ ...state,
537
+ activeEdits: files,
538
+ });
539
+ }
540
+ /**
541
+ * Get active edits to resume after upgrade
542
+ */
543
+ getActiveEdits() {
544
+ const state = this.loadSessionState();
545
+ return state?.activeEdits || [];
546
+ }
547
+ // ==========================================================================
548
+ // LOGGING
549
+ // ==========================================================================
550
+ logUpgrade(entry) {
551
+ try {
552
+ const dir = dirname(UPGRADE_LOG_FILE);
553
+ if (!existsSync(dir)) {
554
+ mkdirSync(dir, { recursive: true });
555
+ }
556
+ let logs = [];
557
+ if (existsSync(UPGRADE_LOG_FILE)) {
558
+ try {
559
+ logs = JSON.parse(readFileSync(UPGRADE_LOG_FILE, 'utf8'));
560
+ }
561
+ catch {
562
+ logs = [];
563
+ }
564
+ }
565
+ logs.push(entry);
566
+ // Keep last 100 entries
567
+ if (logs.length > 100) {
568
+ logs = logs.slice(-100);
569
+ }
570
+ writeFileSync(UPGRADE_LOG_FILE, JSON.stringify(logs, null, 2));
571
+ }
572
+ catch {
573
+ // Best-effort
574
+ }
575
+ }
576
+ emitEvent(type, data) {
577
+ const event = {
578
+ type,
579
+ timestamp: Date.now(),
580
+ data,
581
+ };
582
+ this.emit(type, event);
583
+ this.emit('upgrade', event);
584
+ }
585
+ // ==========================================================================
586
+ // STATIC UTILITIES
587
+ // ==========================================================================
588
+ /**
589
+ * Check if this process was started after an upgrade
590
+ */
591
+ static wasUpgraded() {
592
+ return process.env['AGI_UPGRADED'] === 'true';
593
+ }
594
+ /**
595
+ * Get the version we upgraded from
596
+ */
597
+ static getUpgradeFromVersion() {
598
+ return process.env['AGI_UPGRADE_FROM'] || null;
599
+ }
600
+ /**
601
+ * Check if we should resume a session
602
+ */
603
+ static shouldResumeSession() {
604
+ return process.env['AGI_RESUME_SESSION'] === 'true';
605
+ }
606
+ }
607
+ // ============================================================================
608
+ // SINGLETON EXPORT
609
+ // ============================================================================
610
+ let selfUpgradeInstance = null;
611
+ export function getSelfUpgrade(config) {
612
+ if (!selfUpgradeInstance || config) {
613
+ selfUpgradeInstance = new SelfUpgrade(config);
614
+ }
615
+ return selfUpgradeInstance;
616
+ }
617
+ export function resetSelfUpgrade() {
618
+ selfUpgradeInstance = null;
619
+ }
620
+ // ============================================================================
621
+ // CONVENIENCE FUNCTIONS
622
+ // ============================================================================
623
+ /**
624
+ * Quick upgrade to latest version with session continuity
625
+ */
626
+ export async function upgradeToLatest(options = {}) {
627
+ const upgrade = getSelfUpgrade({
628
+ autoRestart: options.autoRestart ?? true,
629
+ workingDir: options.workingDir,
630
+ logger: options.logger,
631
+ });
632
+ return upgrade.npmInstallFresh();
633
+ }
634
+ /**
635
+ * Upgrade with full verification (build + tests)
636
+ */
637
+ export async function upgradeAndVerify(options = {}) {
638
+ const upgrade = getSelfUpgrade({
639
+ workingDir: options.workingDir,
640
+ logger: options.logger,
641
+ autoRestart: false, // Don't auto-restart, let caller decide after verification
642
+ });
643
+ return upgrade.upgradeWithFullVerification(options.version, options.buildCommand, options.testCommand);
644
+ }
645
+ /**
646
+ * Save current work state for upgrade resumption
647
+ */
648
+ export function saveUpgradeState(state) {
649
+ const upgrade = getSelfUpgrade();
650
+ upgrade.getCurrentVersion().then((fromVersion) => {
651
+ upgrade.saveSessionState({
652
+ ...state,
653
+ fromVersion,
654
+ timestamp: Date.now(),
655
+ });
656
+ });
657
+ }
658
+ /**
659
+ * Resume work after upgrade
660
+ */
661
+ export function resumeAfterUpgrade() {
662
+ const upgrade = getSelfUpgrade();
663
+ const state = upgrade.loadSessionState();
664
+ if (state) {
665
+ upgrade.clearSessionState();
666
+ }
667
+ return state;
668
+ }
669
+ //# sourceMappingURL=selfUpgrade.js.map