@trenchwork/coder 1.3.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 (560) hide show
  1. package/LICENSE +16 -0
  2. package/README.md +173 -0
  3. package/agents/trenchwork-code.rules.json +199 -0
  4. package/dist/bin/deepseek.d.ts +3 -0
  5. package/dist/bin/deepseek.d.ts.map +1 -0
  6. package/dist/bin/deepseek.js +23 -0
  7. package/dist/bin/deepseek.js.map +1 -0
  8. package/dist/capabilities/baseCapability.d.ts +72 -0
  9. package/dist/capabilities/baseCapability.d.ts.map +1 -0
  10. package/dist/capabilities/baseCapability.js +183 -0
  11. package/dist/capabilities/baseCapability.js.map +1 -0
  12. package/dist/capabilities/bashCapability.d.ts +13 -0
  13. package/dist/capabilities/bashCapability.d.ts.map +1 -0
  14. package/dist/capabilities/bashCapability.js +24 -0
  15. package/dist/capabilities/bashCapability.js.map +1 -0
  16. package/dist/capabilities/editCapability.d.ts +17 -0
  17. package/dist/capabilities/editCapability.d.ts.map +1 -0
  18. package/dist/capabilities/editCapability.js +27 -0
  19. package/dist/capabilities/editCapability.js.map +1 -0
  20. package/dist/capabilities/enhancedGitCapability.d.ts +7 -0
  21. package/dist/capabilities/enhancedGitCapability.d.ts.map +1 -0
  22. package/dist/capabilities/enhancedGitCapability.js +220 -0
  23. package/dist/capabilities/enhancedGitCapability.js.map +1 -0
  24. package/dist/capabilities/filesystemCapability.d.ts +13 -0
  25. package/dist/capabilities/filesystemCapability.d.ts.map +1 -0
  26. package/dist/capabilities/filesystemCapability.js +24 -0
  27. package/dist/capabilities/filesystemCapability.js.map +1 -0
  28. package/dist/capabilities/gitHistoryCapability.d.ts +6 -0
  29. package/dist/capabilities/gitHistoryCapability.d.ts.map +1 -0
  30. package/dist/capabilities/gitHistoryCapability.js +184 -0
  31. package/dist/capabilities/gitHistoryCapability.js.map +1 -0
  32. package/dist/capabilities/hitlCapability.d.ts +18 -0
  33. package/dist/capabilities/hitlCapability.d.ts.map +1 -0
  34. package/dist/capabilities/hitlCapability.js +29 -0
  35. package/dist/capabilities/hitlCapability.js.map +1 -0
  36. package/dist/capabilities/index.d.ts +11 -0
  37. package/dist/capabilities/index.d.ts.map +1 -0
  38. package/dist/capabilities/index.js +16 -0
  39. package/dist/capabilities/index.js.map +1 -0
  40. package/dist/capabilities/memoryCapability.d.ts +10 -0
  41. package/dist/capabilities/memoryCapability.d.ts.map +1 -0
  42. package/dist/capabilities/memoryCapability.js +22 -0
  43. package/dist/capabilities/memoryCapability.js.map +1 -0
  44. package/dist/capabilities/notebookCapability.d.ts +6 -0
  45. package/dist/capabilities/notebookCapability.d.ts.map +1 -0
  46. package/dist/capabilities/notebookCapability.js +17 -0
  47. package/dist/capabilities/notebookCapability.js.map +1 -0
  48. package/dist/capabilities/searchCapability.d.ts +19 -0
  49. package/dist/capabilities/searchCapability.d.ts.map +1 -0
  50. package/dist/capabilities/searchCapability.js +29 -0
  51. package/dist/capabilities/searchCapability.js.map +1 -0
  52. package/dist/capabilities/skillCapability.d.ts +6 -0
  53. package/dist/capabilities/skillCapability.d.ts.map +1 -0
  54. package/dist/capabilities/skillCapability.js +17 -0
  55. package/dist/capabilities/skillCapability.js.map +1 -0
  56. package/dist/capabilities/todoCapability.d.ts +11 -0
  57. package/dist/capabilities/todoCapability.d.ts.map +1 -0
  58. package/dist/capabilities/todoCapability.js +22 -0
  59. package/dist/capabilities/todoCapability.js.map +1 -0
  60. package/dist/capabilities/toolManifest.d.ts +3 -0
  61. package/dist/capabilities/toolManifest.d.ts.map +1 -0
  62. package/dist/capabilities/toolManifest.js +163 -0
  63. package/dist/capabilities/toolManifest.js.map +1 -0
  64. package/dist/capabilities/toolRegistry.d.ts +25 -0
  65. package/dist/capabilities/toolRegistry.d.ts.map +1 -0
  66. package/dist/capabilities/toolRegistry.js +150 -0
  67. package/dist/capabilities/toolRegistry.js.map +1 -0
  68. package/dist/capabilities/unifiedCodingCapability.d.ts +62 -0
  69. package/dist/capabilities/unifiedCodingCapability.d.ts.map +1 -0
  70. package/dist/capabilities/unifiedCodingCapability.js +790 -0
  71. package/dist/capabilities/unifiedCodingCapability.js.map +1 -0
  72. package/dist/capabilities/webCapability.d.ts +23 -0
  73. package/dist/capabilities/webCapability.d.ts.map +1 -0
  74. package/dist/capabilities/webCapability.js +33 -0
  75. package/dist/capabilities/webCapability.js.map +1 -0
  76. package/dist/config.d.ts +25 -0
  77. package/dist/config.d.ts.map +1 -0
  78. package/dist/config.js +181 -0
  79. package/dist/config.js.map +1 -0
  80. package/dist/contracts/agent-profiles.schema.json +25 -0
  81. package/dist/contracts/agent-schemas.json +158 -0
  82. package/dist/contracts/models.schema.json +9 -0
  83. package/dist/contracts/module-schema.json +367 -0
  84. package/dist/contracts/schemas/agent-profile.schema.json +157 -0
  85. package/dist/contracts/schemas/agent-rules.schema.json +238 -0
  86. package/dist/contracts/schemas/agent-schemas.schema.json +528 -0
  87. package/dist/contracts/schemas/agent.schema.json +90 -0
  88. package/dist/contracts/schemas/tool-selection.schema.json +174 -0
  89. package/dist/contracts/tools.schema.json +42 -0
  90. package/dist/contracts/unified-schema.json +40 -0
  91. package/dist/contracts/v1/agent.d.ts +225 -0
  92. package/dist/contracts/v1/agent.d.ts.map +1 -0
  93. package/dist/contracts/v1/agent.js +8 -0
  94. package/dist/contracts/v1/agent.js.map +1 -0
  95. package/dist/contracts/v1/agentProfileManifest.d.ts +60 -0
  96. package/dist/contracts/v1/agentProfileManifest.d.ts.map +1 -0
  97. package/dist/contracts/v1/agentProfileManifest.js +9 -0
  98. package/dist/contracts/v1/agentProfileManifest.js.map +1 -0
  99. package/dist/contracts/v1/agentRules.d.ts +60 -0
  100. package/dist/contracts/v1/agentRules.d.ts.map +1 -0
  101. package/dist/contracts/v1/agentRules.js +10 -0
  102. package/dist/contracts/v1/agentRules.js.map +1 -0
  103. package/dist/contracts/v1/provider.d.ts +149 -0
  104. package/dist/contracts/v1/provider.d.ts.map +1 -0
  105. package/dist/contracts/v1/provider.js +7 -0
  106. package/dist/contracts/v1/provider.js.map +1 -0
  107. package/dist/contracts/v1/tool.d.ts +136 -0
  108. package/dist/contracts/v1/tool.d.ts.map +1 -0
  109. package/dist/contracts/v1/tool.js +7 -0
  110. package/dist/contracts/v1/tool.js.map +1 -0
  111. package/dist/contracts/v1/toolAccess.d.ts +43 -0
  112. package/dist/contracts/v1/toolAccess.d.ts.map +1 -0
  113. package/dist/contracts/v1/toolAccess.js +9 -0
  114. package/dist/contracts/v1/toolAccess.js.map +1 -0
  115. package/dist/core/adversarial.d.ts +38 -0
  116. package/dist/core/adversarial.d.ts.map +1 -0
  117. package/dist/core/adversarial.js +106 -0
  118. package/dist/core/adversarial.js.map +1 -0
  119. package/dist/core/adversarialCorrection.d.ts +22 -0
  120. package/dist/core/adversarialCorrection.d.ts.map +1 -0
  121. package/dist/core/adversarialCorrection.js +25 -0
  122. package/dist/core/adversarialCorrection.js.map +1 -0
  123. package/dist/core/agent.d.ts +331 -0
  124. package/dist/core/agent.d.ts.map +1 -0
  125. package/dist/core/agent.js +1637 -0
  126. package/dist/core/agent.js.map +1 -0
  127. package/dist/core/agentProfileManifest.d.ts +3 -0
  128. package/dist/core/agentProfileManifest.d.ts.map +1 -0
  129. package/dist/core/agentProfileManifest.js +188 -0
  130. package/dist/core/agentProfileManifest.js.map +1 -0
  131. package/dist/core/agentProfiles.d.ts +22 -0
  132. package/dist/core/agentProfiles.d.ts.map +1 -0
  133. package/dist/core/agentProfiles.js +35 -0
  134. package/dist/core/agentProfiles.js.map +1 -0
  135. package/dist/core/agentRegistry.d.ts +111 -0
  136. package/dist/core/agentRegistry.d.ts.map +1 -0
  137. package/dist/core/agentRegistry.js +229 -0
  138. package/dist/core/agentRegistry.js.map +1 -0
  139. package/dist/core/agentRulebook.d.ts +11 -0
  140. package/dist/core/agentRulebook.d.ts.map +1 -0
  141. package/dist/core/agentRulebook.js +136 -0
  142. package/dist/core/agentRulebook.js.map +1 -0
  143. package/dist/core/agentSchemaLoader.d.ts +131 -0
  144. package/dist/core/agentSchemaLoader.d.ts.map +1 -0
  145. package/dist/core/agentSchemaLoader.js +235 -0
  146. package/dist/core/agentSchemaLoader.js.map +1 -0
  147. package/dist/core/aiErrorFixer.d.ts +57 -0
  148. package/dist/core/aiErrorFixer.d.ts.map +1 -0
  149. package/dist/core/aiErrorFixer.js +214 -0
  150. package/dist/core/aiErrorFixer.js.map +1 -0
  151. package/dist/core/bashCommandGuidance.d.ts +16 -0
  152. package/dist/core/bashCommandGuidance.d.ts.map +1 -0
  153. package/dist/core/bashCommandGuidance.js +40 -0
  154. package/dist/core/bashCommandGuidance.js.map +1 -0
  155. package/dist/core/compactionNote.d.ts +13 -0
  156. package/dist/core/compactionNote.d.ts.map +1 -0
  157. package/dist/core/compactionNote.js +13 -0
  158. package/dist/core/compactionNote.js.map +1 -0
  159. package/dist/core/constants.d.ts +31 -0
  160. package/dist/core/constants.d.ts.map +1 -0
  161. package/dist/core/constants.js +62 -0
  162. package/dist/core/constants.js.map +1 -0
  163. package/dist/core/contextManager.d.ts +271 -0
  164. package/dist/core/contextManager.d.ts.map +1 -0
  165. package/dist/core/contextManager.js +1076 -0
  166. package/dist/core/contextManager.js.map +1 -0
  167. package/dist/core/contextUsage.d.ts +28 -0
  168. package/dist/core/contextUsage.d.ts.map +1 -0
  169. package/dist/core/contextUsage.js +62 -0
  170. package/dist/core/contextUsage.js.map +1 -0
  171. package/dist/core/contextWindow.d.ts +42 -0
  172. package/dist/core/contextWindow.d.ts.map +1 -0
  173. package/dist/core/contextWindow.js +127 -0
  174. package/dist/core/contextWindow.js.map +1 -0
  175. package/dist/core/customCommands.d.ts +19 -0
  176. package/dist/core/customCommands.d.ts.map +1 -0
  177. package/dist/core/customCommands.js +85 -0
  178. package/dist/core/customCommands.js.map +1 -0
  179. package/dist/core/diffPanel.d.ts +30 -0
  180. package/dist/core/diffPanel.d.ts.map +1 -0
  181. package/dist/core/diffPanel.js +48 -0
  182. package/dist/core/diffPanel.js.map +1 -0
  183. package/dist/core/errorClassification.d.ts +44 -0
  184. package/dist/core/errorClassification.d.ts.map +1 -0
  185. package/dist/core/errorClassification.js +333 -0
  186. package/dist/core/errorClassification.js.map +1 -0
  187. package/dist/core/errors/apiKeyErrors.d.ts +11 -0
  188. package/dist/core/errors/apiKeyErrors.d.ts.map +1 -0
  189. package/dist/core/errors/apiKeyErrors.js +159 -0
  190. package/dist/core/errors/apiKeyErrors.js.map +1 -0
  191. package/dist/core/errors/errorTypes.d.ts +111 -0
  192. package/dist/core/errors/errorTypes.d.ts.map +1 -0
  193. package/dist/core/errors/errorTypes.js +345 -0
  194. package/dist/core/errors/errorTypes.js.map +1 -0
  195. package/dist/core/errors/index.d.ts +50 -0
  196. package/dist/core/errors/index.d.ts.map +1 -0
  197. package/dist/core/errors/index.js +156 -0
  198. package/dist/core/errors/index.js.map +1 -0
  199. package/dist/core/errors/networkErrors.d.ts +14 -0
  200. package/dist/core/errors/networkErrors.d.ts.map +1 -0
  201. package/dist/core/errors/networkErrors.js +53 -0
  202. package/dist/core/errors/networkErrors.js.map +1 -0
  203. package/dist/core/errors/safetyValidator.d.ts +109 -0
  204. package/dist/core/errors/safetyValidator.d.ts.map +1 -0
  205. package/dist/core/errors/safetyValidator.js +272 -0
  206. package/dist/core/errors/safetyValidator.js.map +1 -0
  207. package/dist/core/errors.d.ts +4 -0
  208. package/dist/core/errors.d.ts.map +1 -0
  209. package/dist/core/errors.js +33 -0
  210. package/dist/core/errors.js.map +1 -0
  211. package/dist/core/failureRegistry.d.ts +30 -0
  212. package/dist/core/failureRegistry.d.ts.map +1 -0
  213. package/dist/core/failureRegistry.js +74 -0
  214. package/dist/core/failureRegistry.js.map +1 -0
  215. package/dist/core/fileMentions.d.ts +40 -0
  216. package/dist/core/fileMentions.d.ts.map +1 -0
  217. package/dist/core/fileMentions.js +136 -0
  218. package/dist/core/fileMentions.js.map +1 -0
  219. package/dist/core/finalResponseFormatter.d.ts +10 -0
  220. package/dist/core/finalResponseFormatter.d.ts.map +1 -0
  221. package/dist/core/finalResponseFormatter.js +14 -0
  222. package/dist/core/finalResponseFormatter.js.map +1 -0
  223. package/dist/core/guardrails.d.ts +146 -0
  224. package/dist/core/guardrails.d.ts.map +1 -0
  225. package/dist/core/guardrails.js +361 -0
  226. package/dist/core/guardrails.js.map +1 -0
  227. package/dist/core/hitl.d.ts +119 -0
  228. package/dist/core/hitl.d.ts.map +1 -0
  229. package/dist/core/hitl.js +396 -0
  230. package/dist/core/hitl.js.map +1 -0
  231. package/dist/core/hooks.d.ts +95 -0
  232. package/dist/core/hooks.d.ts.map +1 -0
  233. package/dist/core/hooks.js +236 -0
  234. package/dist/core/hooks.js.map +1 -0
  235. package/dist/core/hostedAuth.d.ts +88 -0
  236. package/dist/core/hostedAuth.d.ts.map +1 -0
  237. package/dist/core/hostedAuth.js +219 -0
  238. package/dist/core/hostedAuth.js.map +1 -0
  239. package/dist/core/inputProtection.d.ts +122 -0
  240. package/dist/core/inputProtection.d.ts.map +1 -0
  241. package/dist/core/inputProtection.js +422 -0
  242. package/dist/core/inputProtection.js.map +1 -0
  243. package/dist/core/modelDiscovery.d.ts +102 -0
  244. package/dist/core/modelDiscovery.d.ts.map +1 -0
  245. package/dist/core/modelDiscovery.js +416 -0
  246. package/dist/core/modelDiscovery.js.map +1 -0
  247. package/dist/core/multilinePasteHandler.d.ts +35 -0
  248. package/dist/core/multilinePasteHandler.d.ts.map +1 -0
  249. package/dist/core/multilinePasteHandler.js +81 -0
  250. package/dist/core/multilinePasteHandler.js.map +1 -0
  251. package/dist/core/permissionMode.d.ts +40 -0
  252. package/dist/core/permissionMode.d.ts.map +1 -0
  253. package/dist/core/permissionMode.js +86 -0
  254. package/dist/core/permissionMode.js.map +1 -0
  255. package/dist/core/postWriteDiagnostics.d.ts +32 -0
  256. package/dist/core/postWriteDiagnostics.d.ts.map +1 -0
  257. package/dist/core/postWriteDiagnostics.js +127 -0
  258. package/dist/core/postWriteDiagnostics.js.map +1 -0
  259. package/dist/core/preferences.d.ts +66 -0
  260. package/dist/core/preferences.d.ts.map +1 -0
  261. package/dist/core/preferences.js +310 -0
  262. package/dist/core/preferences.js.map +1 -0
  263. package/dist/core/quota.d.ts +61 -0
  264. package/dist/core/quota.d.ts.map +1 -0
  265. package/dist/core/quota.js +104 -0
  266. package/dist/core/quota.js.map +1 -0
  267. package/dist/core/quotaErrors.d.ts +42 -0
  268. package/dist/core/quotaErrors.d.ts.map +1 -0
  269. package/dist/core/quotaErrors.js +86 -0
  270. package/dist/core/quotaErrors.js.map +1 -0
  271. package/dist/core/refusalDetection.d.ts +2 -0
  272. package/dist/core/refusalDetection.d.ts.map +1 -0
  273. package/dist/core/refusalDetection.js +51 -0
  274. package/dist/core/refusalDetection.js.map +1 -0
  275. package/dist/core/relativeTime.d.ts +8 -0
  276. package/dist/core/relativeTime.d.ts.map +1 -0
  277. package/dist/core/relativeTime.js +29 -0
  278. package/dist/core/relativeTime.js.map +1 -0
  279. package/dist/core/resultVerification.d.ts +48 -0
  280. package/dist/core/resultVerification.d.ts.map +1 -0
  281. package/dist/core/resultVerification.js +127 -0
  282. package/dist/core/resultVerification.js.map +1 -0
  283. package/dist/core/rewind.d.ts +14 -0
  284. package/dist/core/rewind.d.ts.map +1 -0
  285. package/dist/core/rewind.js +25 -0
  286. package/dist/core/rewind.js.map +1 -0
  287. package/dist/core/schemaValidator.d.ts +49 -0
  288. package/dist/core/schemaValidator.d.ts.map +1 -0
  289. package/dist/core/schemaValidator.js +234 -0
  290. package/dist/core/schemaValidator.js.map +1 -0
  291. package/dist/core/secretStore.d.ts +59 -0
  292. package/dist/core/secretStore.d.ts.map +1 -0
  293. package/dist/core/secretStore.js +278 -0
  294. package/dist/core/secretStore.js.map +1 -0
  295. package/dist/core/sessionStorage.d.ts +10 -0
  296. package/dist/core/sessionStorage.d.ts.map +1 -0
  297. package/dist/core/sessionStorage.js +46 -0
  298. package/dist/core/sessionStorage.js.map +1 -0
  299. package/dist/core/sessionStore.d.ts +35 -0
  300. package/dist/core/sessionStore.d.ts.map +1 -0
  301. package/dist/core/sessionStore.js +190 -0
  302. package/dist/core/sessionStore.js.map +1 -0
  303. package/dist/core/shutdown.d.ts +34 -0
  304. package/dist/core/shutdown.d.ts.map +1 -0
  305. package/dist/core/shutdown.js +186 -0
  306. package/dist/core/shutdown.js.map +1 -0
  307. package/dist/core/slashCommands.d.ts +38 -0
  308. package/dist/core/slashCommands.d.ts.map +1 -0
  309. package/dist/core/slashCommands.js +72 -0
  310. package/dist/core/slashCommands.js.map +1 -0
  311. package/dist/core/subAgentNote.d.ts +15 -0
  312. package/dist/core/subAgentNote.d.ts.map +1 -0
  313. package/dist/core/subAgentNote.js +16 -0
  314. package/dist/core/subAgentNote.js.map +1 -0
  315. package/dist/core/sudoPasswordManager.d.ts +52 -0
  316. package/dist/core/sudoPasswordManager.d.ts.map +1 -0
  317. package/dist/core/sudoPasswordManager.js +115 -0
  318. package/dist/core/sudoPasswordManager.js.map +1 -0
  319. package/dist/core/taskCompletionDetector.d.ts +117 -0
  320. package/dist/core/taskCompletionDetector.d.ts.map +1 -0
  321. package/dist/core/taskCompletionDetector.js +532 -0
  322. package/dist/core/taskCompletionDetector.js.map +1 -0
  323. package/dist/core/testFailureMonitor.d.ts +67 -0
  324. package/dist/core/testFailureMonitor.d.ts.map +1 -0
  325. package/dist/core/testFailureMonitor.js +262 -0
  326. package/dist/core/testFailureMonitor.js.map +1 -0
  327. package/dist/core/thinkingVerbs.d.ts +31 -0
  328. package/dist/core/thinkingVerbs.d.ts.map +1 -0
  329. package/dist/core/thinkingVerbs.js +58 -0
  330. package/dist/core/thinkingVerbs.js.map +1 -0
  331. package/dist/core/toolPreconditions.d.ts +34 -0
  332. package/dist/core/toolPreconditions.d.ts.map +1 -0
  333. package/dist/core/toolPreconditions.js +242 -0
  334. package/dist/core/toolPreconditions.js.map +1 -0
  335. package/dist/core/toolRuntime.d.ts +193 -0
  336. package/dist/core/toolRuntime.d.ts.map +1 -0
  337. package/dist/core/toolRuntime.js +526 -0
  338. package/dist/core/toolRuntime.js.map +1 -0
  339. package/dist/core/turnGovernor.d.ts +63 -0
  340. package/dist/core/turnGovernor.d.ts.map +1 -0
  341. package/dist/core/turnGovernor.js +94 -0
  342. package/dist/core/turnGovernor.js.map +1 -0
  343. package/dist/core/types/utilityTypes.d.ts +183 -0
  344. package/dist/core/types/utilityTypes.d.ts.map +1 -0
  345. package/dist/core/types/utilityTypes.js +273 -0
  346. package/dist/core/types/utilityTypes.js.map +1 -0
  347. package/dist/core/types.d.ts +334 -0
  348. package/dist/core/types.d.ts.map +1 -0
  349. package/dist/core/types.js +76 -0
  350. package/dist/core/types.js.map +1 -0
  351. package/dist/core/updateChecker.d.ts +148 -0
  352. package/dist/core/updateChecker.d.ts.map +1 -0
  353. package/dist/core/updateChecker.js +605 -0
  354. package/dist/core/updateChecker.js.map +1 -0
  355. package/dist/core/usage.d.ts +28 -0
  356. package/dist/core/usage.d.ts.map +1 -0
  357. package/dist/core/usage.js +77 -0
  358. package/dist/core/usage.js.map +1 -0
  359. package/dist/headless/interactiveShell.d.ts +47 -0
  360. package/dist/headless/interactiveShell.d.ts.map +1 -0
  361. package/dist/headless/interactiveShell.js +2495 -0
  362. package/dist/headless/interactiveShell.js.map +1 -0
  363. package/dist/leanAgent.d.ts +73 -0
  364. package/dist/leanAgent.d.ts.map +1 -0
  365. package/dist/leanAgent.js +177 -0
  366. package/dist/leanAgent.js.map +1 -0
  367. package/dist/plugins/providers/deepseek/index.d.ts +12 -0
  368. package/dist/plugins/providers/deepseek/index.d.ts.map +1 -0
  369. package/dist/plugins/providers/deepseek/index.js +123 -0
  370. package/dist/plugins/providers/deepseek/index.js.map +1 -0
  371. package/dist/plugins/providers/index.d.ts +2 -0
  372. package/dist/plugins/providers/index.d.ts.map +1 -0
  373. package/dist/plugins/providers/index.js +10 -0
  374. package/dist/plugins/providers/index.js.map +1 -0
  375. package/dist/providers/baseProvider.d.ts +140 -0
  376. package/dist/providers/baseProvider.d.ts.map +1 -0
  377. package/dist/providers/baseProvider.js +230 -0
  378. package/dist/providers/baseProvider.js.map +1 -0
  379. package/dist/providers/openaiChatCompletionsProvider.d.ts +70 -0
  380. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -0
  381. package/dist/providers/openaiChatCompletionsProvider.js +971 -0
  382. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -0
  383. package/dist/providers/providerFactory.d.ts +22 -0
  384. package/dist/providers/providerFactory.d.ts.map +1 -0
  385. package/dist/providers/providerFactory.js +25 -0
  386. package/dist/providers/providerFactory.js.map +1 -0
  387. package/dist/providers/resilientProvider.d.ts +96 -0
  388. package/dist/providers/resilientProvider.d.ts.map +1 -0
  389. package/dist/providers/resilientProvider.js +251 -0
  390. package/dist/providers/resilientProvider.js.map +1 -0
  391. package/dist/runtime/agentController.d.ts +137 -0
  392. package/dist/runtime/agentController.d.ts.map +1 -0
  393. package/dist/runtime/agentController.js +784 -0
  394. package/dist/runtime/agentController.js.map +1 -0
  395. package/dist/runtime/agentHost.d.ts +61 -0
  396. package/dist/runtime/agentHost.d.ts.map +1 -0
  397. package/dist/runtime/agentHost.js +158 -0
  398. package/dist/runtime/agentHost.js.map +1 -0
  399. package/dist/runtime/agentSession.d.ts +49 -0
  400. package/dist/runtime/agentSession.d.ts.map +1 -0
  401. package/dist/runtime/agentSession.js +218 -0
  402. package/dist/runtime/agentSession.js.map +1 -0
  403. package/dist/runtime/agentSpawningWiring.d.ts +32 -0
  404. package/dist/runtime/agentSpawningWiring.d.ts.map +1 -0
  405. package/dist/runtime/agentSpawningWiring.js +114 -0
  406. package/dist/runtime/agentSpawningWiring.js.map +1 -0
  407. package/dist/runtime/node.d.ts +7 -0
  408. package/dist/runtime/node.d.ts.map +1 -0
  409. package/dist/runtime/node.js +50 -0
  410. package/dist/runtime/node.js.map +1 -0
  411. package/dist/runtime/universal.d.ts +18 -0
  412. package/dist/runtime/universal.d.ts.map +1 -0
  413. package/dist/runtime/universal.js +21 -0
  414. package/dist/runtime/universal.js.map +1 -0
  415. package/dist/shell/liveStatus.d.ts +27 -0
  416. package/dist/shell/liveStatus.d.ts.map +1 -0
  417. package/dist/shell/liveStatus.js +53 -0
  418. package/dist/shell/liveStatus.js.map +1 -0
  419. package/dist/shell/systemPrompt.d.ts +12 -0
  420. package/dist/shell/systemPrompt.d.ts.map +1 -0
  421. package/dist/shell/systemPrompt.js +16 -0
  422. package/dist/shell/systemPrompt.js.map +1 -0
  423. package/dist/shell/toolPresentation.d.ts +54 -0
  424. package/dist/shell/toolPresentation.d.ts.map +1 -0
  425. package/dist/shell/toolPresentation.js +334 -0
  426. package/dist/shell/toolPresentation.js.map +1 -0
  427. package/dist/tools/bashTools.d.ts +11 -0
  428. package/dist/tools/bashTools.d.ts.map +1 -0
  429. package/dist/tools/bashTools.js +785 -0
  430. package/dist/tools/bashTools.js.map +1 -0
  431. package/dist/tools/diffUtils.d.ts +43 -0
  432. package/dist/tools/diffUtils.d.ts.map +1 -0
  433. package/dist/tools/diffUtils.js +607 -0
  434. package/dist/tools/diffUtils.js.map +1 -0
  435. package/dist/tools/editTools.d.ts +29 -0
  436. package/dist/tools/editTools.d.ts.map +1 -0
  437. package/dist/tools/editTools.js +792 -0
  438. package/dist/tools/editTools.js.map +1 -0
  439. package/dist/tools/fileChangeTracker.d.ts +47 -0
  440. package/dist/tools/fileChangeTracker.d.ts.map +1 -0
  441. package/dist/tools/fileChangeTracker.js +154 -0
  442. package/dist/tools/fileChangeTracker.js.map +1 -0
  443. package/dist/tools/fileReadTracker.d.ts +69 -0
  444. package/dist/tools/fileReadTracker.d.ts.map +1 -0
  445. package/dist/tools/fileReadTracker.js +213 -0
  446. package/dist/tools/fileReadTracker.js.map +1 -0
  447. package/dist/tools/fileTools.d.ts +3 -0
  448. package/dist/tools/fileTools.d.ts.map +1 -0
  449. package/dist/tools/fileTools.js +389 -0
  450. package/dist/tools/fileTools.js.map +1 -0
  451. package/dist/tools/grepTools.d.ts +3 -0
  452. package/dist/tools/grepTools.d.ts.map +1 -0
  453. package/dist/tools/grepTools.js +137 -0
  454. package/dist/tools/grepTools.js.map +1 -0
  455. package/dist/tools/hitlTools.d.ts +7 -0
  456. package/dist/tools/hitlTools.d.ts.map +1 -0
  457. package/dist/tools/hitlTools.js +185 -0
  458. package/dist/tools/hitlTools.js.map +1 -0
  459. package/dist/tools/memoryTools.d.ts +27 -0
  460. package/dist/tools/memoryTools.d.ts.map +1 -0
  461. package/dist/tools/memoryTools.js +197 -0
  462. package/dist/tools/memoryTools.js.map +1 -0
  463. package/dist/tools/notebookTools.d.ts +20 -0
  464. package/dist/tools/notebookTools.d.ts.map +1 -0
  465. package/dist/tools/notebookTools.js +140 -0
  466. package/dist/tools/notebookTools.js.map +1 -0
  467. package/dist/tools/searchTools.d.ts +12 -0
  468. package/dist/tools/searchTools.d.ts.map +1 -0
  469. package/dist/tools/searchTools.js +414 -0
  470. package/dist/tools/searchTools.js.map +1 -0
  471. package/dist/tools/skillTools.d.ts +24 -0
  472. package/dist/tools/skillTools.d.ts.map +1 -0
  473. package/dist/tools/skillTools.js +140 -0
  474. package/dist/tools/skillTools.js.map +1 -0
  475. package/dist/tools/todoTools.d.ts +23 -0
  476. package/dist/tools/todoTools.d.ts.map +1 -0
  477. package/dist/tools/todoTools.js +120 -0
  478. package/dist/tools/todoTools.js.map +1 -0
  479. package/dist/tools/webTools.d.ts +26 -0
  480. package/dist/tools/webTools.d.ts.map +1 -0
  481. package/dist/tools/webTools.js +467 -0
  482. package/dist/tools/webTools.js.map +1 -0
  483. package/dist/ui/ink/App.d.ts +53 -0
  484. package/dist/ui/ink/App.d.ts.map +1 -0
  485. package/dist/ui/ink/App.js +13 -0
  486. package/dist/ui/ink/App.js.map +1 -0
  487. package/dist/ui/ink/ChatStatic.d.ts +30 -0
  488. package/dist/ui/ink/ChatStatic.d.ts.map +1 -0
  489. package/dist/ui/ink/ChatStatic.js +83 -0
  490. package/dist/ui/ink/ChatStatic.js.map +1 -0
  491. package/dist/ui/ink/InkPromptController.d.ts +321 -0
  492. package/dist/ui/ink/InkPromptController.d.ts.map +1 -0
  493. package/dist/ui/ink/InkPromptController.js +667 -0
  494. package/dist/ui/ink/InkPromptController.js.map +1 -0
  495. package/dist/ui/ink/Menu.d.ts +21 -0
  496. package/dist/ui/ink/Menu.d.ts.map +1 -0
  497. package/dist/ui/ink/Menu.js +61 -0
  498. package/dist/ui/ink/Menu.js.map +1 -0
  499. package/dist/ui/ink/Prompt.d.ts +47 -0
  500. package/dist/ui/ink/Prompt.d.ts.map +1 -0
  501. package/dist/ui/ink/Prompt.js +571 -0
  502. package/dist/ui/ink/Prompt.js.map +1 -0
  503. package/dist/ui/ink/StatusLine.d.ts +35 -0
  504. package/dist/ui/ink/StatusLine.d.ts.map +1 -0
  505. package/dist/ui/ink/StatusLine.js +66 -0
  506. package/dist/ui/ink/StatusLine.js.map +1 -0
  507. package/dist/ui/ink/pasteBuffer.d.ts +44 -0
  508. package/dist/ui/ink/pasteBuffer.d.ts.map +1 -0
  509. package/dist/ui/ink/pasteBuffer.js +73 -0
  510. package/dist/ui/ink/pasteBuffer.js.map +1 -0
  511. package/dist/ui/theme.d.ts +351 -0
  512. package/dist/ui/theme.d.ts.map +1 -0
  513. package/dist/ui/theme.js +435 -0
  514. package/dist/ui/theme.js.map +1 -0
  515. package/dist/utils/analytics.d.ts +2 -0
  516. package/dist/utils/analytics.d.ts.map +1 -0
  517. package/dist/utils/analytics.js +51 -0
  518. package/dist/utils/analytics.js.map +1 -0
  519. package/dist/utils/asyncUtils.d.ts +95 -0
  520. package/dist/utils/asyncUtils.d.ts.map +1 -0
  521. package/dist/utils/asyncUtils.js +286 -0
  522. package/dist/utils/asyncUtils.js.map +1 -0
  523. package/dist/utils/debugLogger.d.ts +6 -0
  524. package/dist/utils/debugLogger.d.ts.map +1 -0
  525. package/dist/utils/debugLogger.js +39 -0
  526. package/dist/utils/debugLogger.js.map +1 -0
  527. package/dist/utils/errorUtils.d.ts +12 -0
  528. package/dist/utils/errorUtils.d.ts.map +1 -0
  529. package/dist/utils/errorUtils.js +83 -0
  530. package/dist/utils/errorUtils.js.map +1 -0
  531. package/dist/utils/frontmatter.d.ts +10 -0
  532. package/dist/utils/frontmatter.d.ts.map +1 -0
  533. package/dist/utils/frontmatter.js +78 -0
  534. package/dist/utils/frontmatter.js.map +1 -0
  535. package/dist/utils/packageInfo.d.ts +14 -0
  536. package/dist/utils/packageInfo.d.ts.map +1 -0
  537. package/dist/utils/packageInfo.js +45 -0
  538. package/dist/utils/packageInfo.js.map +1 -0
  539. package/dist/utils/planFormatter.d.ts +34 -0
  540. package/dist/utils/planFormatter.d.ts.map +1 -0
  541. package/dist/utils/planFormatter.js +141 -0
  542. package/dist/utils/planFormatter.js.map +1 -0
  543. package/dist/utils/securityUtils.d.ts +132 -0
  544. package/dist/utils/securityUtils.d.ts.map +1 -0
  545. package/dist/utils/securityUtils.js +324 -0
  546. package/dist/utils/securityUtils.js.map +1 -0
  547. package/dist/utils/statusReporter.d.ts +6 -0
  548. package/dist/utils/statusReporter.d.ts.map +1 -0
  549. package/dist/utils/statusReporter.js +26 -0
  550. package/dist/utils/statusReporter.js.map +1 -0
  551. package/dist/workspace.d.ts +8 -0
  552. package/dist/workspace.d.ts.map +1 -0
  553. package/dist/workspace.js +135 -0
  554. package/dist/workspace.js.map +1 -0
  555. package/dist/workspace.validator.d.ts +49 -0
  556. package/dist/workspace.validator.d.ts.map +1 -0
  557. package/dist/workspace.validator.js +215 -0
  558. package/dist/workspace.validator.js.map +1 -0
  559. package/package.json +116 -0
  560. package/scripts/postinstall.cjs +56 -0
@@ -0,0 +1,605 @@
1
+ /**
2
+ * Update Checker & Auto-Updater for agi-cli
3
+ *
4
+ * This module provides a FULLY NON-INTERACTIVE update system that does not
5
+ * rely on stdin/raw mode, avoiding conflicts with the chat box input handling.
6
+ *
7
+ * Update behavior is controlled by user preferences:
8
+ * - autoUpdate: true -> Automatically update in background
9
+ * - autoUpdate: false -> Silently skip updates
10
+ * - autoUpdate: null -> Show notification banner with instructions
11
+ */
12
+ import { exec, spawn } from 'node:child_process';
13
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
14
+ import { homedir } from 'node:os';
15
+ import { join } from 'node:path';
16
+ import { promisify } from 'node:util';
17
+ import { theme } from '../ui/theme.js';
18
+ const execAsync = promisify(exec);
19
+ let updateCheckCache = null;
20
+ let lastCheckTime = 0;
21
+ const CACHE_DURATION = 1000 * 60 * 60; // 1 hour
22
+ const AUTO_UPDATE_STATE_FILE = join(homedir(), '.trenchwork', 'update-state.json');
23
+ const AUTO_UPDATE_RETRY_INTERVAL = 1000 * 60 * 60 * 6; // 6 hours between install attempts
24
+ const INSTALL_TIMEOUT_MS = 1000 * 60 * 2; // 2 minutes
25
+ const QUIET_PERIOD = 1000 * 60 * 60 * 2; // 2 hours after an attempt
26
+ /**
27
+ * Check for updates from npm registry.
28
+ */
29
+ export async function checkForUpdates(currentVersion, force = false) {
30
+ const now = Date.now();
31
+ // `force` bypasses the 1-hour cache — used by the on-demand /update command
32
+ // so a user who just heard about a release isn't told a stale "up to date".
33
+ if (!force && updateCheckCache && now - lastCheckTime < CACHE_DURATION) {
34
+ return updateCheckCache;
35
+ }
36
+ try {
37
+ // CRITICAL: must use the SCOPED package name `@trenchwork/coder`.
38
+ // Unscoped names on npm may be owned by unrelated publishers (the
39
+ // legacy unscoped `erosolar-coder` was someone else's, last published
40
+ // v1.0.86) — querying one of those returns a stale/foreign version
41
+ // that looks "older" than ours, so the update check silently never
42
+ // fires and users sit on outdated builds until they manually reinstall.
43
+ const { stdout } = await execAsync('npm view @trenchwork/coder version', {
44
+ timeout: 5000,
45
+ encoding: 'utf8',
46
+ });
47
+ const latest = stdout.trim();
48
+ const updateAvailable = compareVersions(latest, currentVersion) > 0;
49
+ updateCheckCache = {
50
+ current: currentVersion,
51
+ latest,
52
+ updateAvailable,
53
+ };
54
+ lastCheckTime = now;
55
+ return updateCheckCache;
56
+ }
57
+ catch {
58
+ // Silently fail - don't block startup for update checks
59
+ return null;
60
+ }
61
+ }
62
+ /**
63
+ * Attempt to auto-update the CLI when a newer version is available.
64
+ * This is throttled and disabled in CI/test environments or when explicitly opted out.
65
+ */
66
+ export async function maybeAutoUpdate(currentVersion, options = {}) {
67
+ const { enabled, reason } = resolveAutoUpdateEnabled();
68
+ if (!enabled) {
69
+ return {
70
+ attempted: false,
71
+ updated: false,
72
+ skippedReason: reason ?? 'disabled',
73
+ };
74
+ }
75
+ const now = Date.now();
76
+ const state = readAutoUpdateState();
77
+ if (state.lastAttempt && now - state.lastAttempt < AUTO_UPDATE_RETRY_INTERVAL) {
78
+ return {
79
+ attempted: false,
80
+ updated: false,
81
+ skippedReason: 'recent-attempt',
82
+ latestVersion: state.lastSeenLatest,
83
+ };
84
+ }
85
+ const updateInfo = options.updateInfo ?? (await checkForUpdates(currentVersion));
86
+ if (!updateInfo) {
87
+ return null;
88
+ }
89
+ writeAutoUpdateState({
90
+ ...state,
91
+ lastCheck: now,
92
+ lastSeenLatest: updateInfo.latest,
93
+ });
94
+ if (!updateInfo.updateAvailable) {
95
+ return {
96
+ attempted: false,
97
+ updated: false,
98
+ skippedReason: 'up-to-date',
99
+ latestVersion: updateInfo.latest,
100
+ };
101
+ }
102
+ if (state.lastUpdatedVersion === updateInfo.latest) {
103
+ return {
104
+ attempted: false,
105
+ updated: false,
106
+ skippedReason: 'already-updated',
107
+ latestVersion: updateInfo.latest,
108
+ };
109
+ }
110
+ const command = resolveUpdateCommand();
111
+ options.logger?.(theme.info(`Updating trenchwork-coder to v${updateInfo.latest} (current v${updateInfo.current})...`));
112
+ try {
113
+ await execAsync(command, {
114
+ timeout: INSTALL_TIMEOUT_MS,
115
+ maxBuffer: 1024 * 1024 * 4,
116
+ env: {
117
+ ...process.env,
118
+ npm_config_loglevel: process.env['npm_config_loglevel'] ?? 'error',
119
+ },
120
+ });
121
+ writeAutoUpdateState({
122
+ ...state,
123
+ lastCheck: now,
124
+ lastSeenLatest: updateInfo.latest,
125
+ lastAttempt: now,
126
+ lastAttemptedVersion: updateInfo.latest,
127
+ lastUpdatedVersion: updateInfo.latest,
128
+ });
129
+ options.logger?.(theme.success(`Auto-update complete. Restart agi to use v${updateInfo.latest}.`));
130
+ return {
131
+ attempted: true,
132
+ updated: true,
133
+ latestVersion: updateInfo.latest,
134
+ command,
135
+ };
136
+ }
137
+ catch (error) {
138
+ const message = error instanceof Error ? error.message : String(error);
139
+ writeAutoUpdateState({
140
+ ...state,
141
+ lastCheck: now,
142
+ lastSeenLatest: updateInfo.latest,
143
+ lastAttempt: now,
144
+ lastAttemptedVersion: updateInfo.latest,
145
+ });
146
+ options.logger?.(theme.warning(`Auto-update failed: ${message}. Run "${command}" manually if you want the latest build.`));
147
+ return {
148
+ attempted: true,
149
+ updated: false,
150
+ latestVersion: updateInfo.latest,
151
+ skippedReason: 'install-failed',
152
+ error: message,
153
+ command,
154
+ };
155
+ }
156
+ }
157
+ /**
158
+ * Compare semantic versions
159
+ * Returns: 1 if v1 > v2, -1 if v1 < v2, 0 if equal
160
+ */
161
+ function compareVersions(v1, v2) {
162
+ const parts1 = v1.replace(/^v/, '').split('.').map(Number);
163
+ const parts2 = v2.replace(/^v/, '').split('.').map(Number);
164
+ for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
165
+ const p1 = parts1[i] || 0;
166
+ const p2 = parts2[i] || 0;
167
+ if (p1 > p2)
168
+ return 1;
169
+ if (p1 < p2)
170
+ return -1;
171
+ }
172
+ return 0;
173
+ }
174
+ /**
175
+ * Format update notification message
176
+ */
177
+ export function formatUpdateNotification(updateInfo, note) {
178
+ const width = 57;
179
+ const border = '─'.repeat(width - 2);
180
+ const padLine = (text, colorize = (v) => v) => {
181
+ const raw = text.length > width - 4 ? text.slice(0, width - 7) + '...' : text;
182
+ const padding = ' '.repeat(Math.max(0, width - 4 - raw.length));
183
+ return `${theme.warning('│')} ${colorize(raw)}${padding}${theme.warning('│')}`;
184
+ };
185
+ const lines = [
186
+ '',
187
+ theme.warning(`╭${border}╮`),
188
+ padLine('📦 Update Available!', theme.info),
189
+ padLine(`Current: ${updateInfo.current} → Latest: ${updateInfo.latest}`, (text) => {
190
+ return text
191
+ .replace(updateInfo.current, theme.ui.muted(updateInfo.current))
192
+ .replace(updateInfo.latest, theme.success(updateInfo.latest));
193
+ }),
194
+ ];
195
+ if (note) {
196
+ lines.push(padLine(note, theme.ui.muted));
197
+ }
198
+ lines.push(padLine('Run: npm install -g @trenchwork/coder@latest', theme.primary), theme.warning(`╰${border}╯`), '');
199
+ return lines.join('\n');
200
+ }
201
+ /**
202
+ * Format a simple update notification banner (non-interactive).
203
+ * Returns a string that can be displayed to the user.
204
+ */
205
+ export function formatUpdateBanner(updateInfo, preference) {
206
+ const lines = [];
207
+ lines.push(theme.info(`Update available: ${theme.ui.muted(updateInfo.current)} → ${theme.success(updateInfo.latest)}`));
208
+ if (preference === 'auto') {
209
+ lines.push(theme.ui.muted(' Auto-update enabled. Installing in background...'));
210
+ }
211
+ else if (preference === 'skip') {
212
+ lines.push(theme.ui.muted(' Auto-update disabled. Run /update check to update manually.'));
213
+ }
214
+ else {
215
+ lines.push(theme.ui.muted(' Run /update auto to enable auto-updates, or /update check to update now.'));
216
+ }
217
+ return lines.join('\n');
218
+ }
219
+ /**
220
+ * Get the user's update decision based on their saved preference.
221
+ * No interactive input required - purely preference-based.
222
+ */
223
+ export function getUpdateDecision(autoUpdatePref) {
224
+ if (autoUpdatePref === true)
225
+ return 'auto';
226
+ if (autoUpdatePref === false)
227
+ return 'skip';
228
+ return 'ask';
229
+ }
230
+ /**
231
+ * Check if we should show update notification (respects quiet period after recent attempts).
232
+ */
233
+ export function shouldShowUpdateNotification(state) {
234
+ const now = Date.now();
235
+ if (state.lastAttempt && now - state.lastAttempt < QUIET_PERIOD) {
236
+ return false;
237
+ }
238
+ return true;
239
+ }
240
+ function resolveAutoUpdateEnabled() {
241
+ const disabledEnv = process.env['TRENCHWORK_DISABLE_AUTO_UPDATE'];
242
+ const autoEnv = process.env['TRENCHWORK_AUTO_UPDATE'];
243
+ const explicitDisable = parseBoolean(autoEnv) === false ||
244
+ (typeof disabledEnv === 'string' && parseBoolean(disabledEnv) !== false);
245
+ if (explicitDisable) {
246
+ return { enabled: false, reason: 'disabled-by-env' };
247
+ }
248
+ if (process.env['CI'] === 'true' || process.env['CI'] === '1') {
249
+ return { enabled: false, reason: 'ci' };
250
+ }
251
+ if (process.env['NODE_ENV'] === 'test' || process.env['JEST_WORKER_ID']) {
252
+ return { enabled: false, reason: 'test' };
253
+ }
254
+ if (isRunningFromSource()) {
255
+ return { enabled: false, reason: 'dev-mode' };
256
+ }
257
+ return { enabled: true };
258
+ }
259
+ function isRunningFromSource() {
260
+ try {
261
+ const filePath = new URL(import.meta.url).pathname;
262
+ return filePath.includes('/src/');
263
+ }
264
+ catch {
265
+ return false;
266
+ }
267
+ }
268
+ function parseBoolean(value) {
269
+ if (typeof value !== 'string')
270
+ return null;
271
+ const normalized = value.trim().toLowerCase();
272
+ if (['1', 'true', 'yes', 'on', 'y'].includes(normalized))
273
+ return true;
274
+ if (['0', 'false', 'no', 'off', 'n'].includes(normalized))
275
+ return false;
276
+ return null;
277
+ }
278
+ /**
279
+ * Read the auto-update state from disk.
280
+ */
281
+ export function readAutoUpdateState() {
282
+ try {
283
+ if (!existsSync(AUTO_UPDATE_STATE_FILE)) {
284
+ return {};
285
+ }
286
+ const raw = readFileSync(AUTO_UPDATE_STATE_FILE, 'utf8');
287
+ const parsed = JSON.parse(raw);
288
+ if (!parsed || typeof parsed !== 'object') {
289
+ return {};
290
+ }
291
+ return {
292
+ lastCheck: typeof parsed.lastCheck === 'number' ? parsed.lastCheck : undefined,
293
+ lastSeenLatest: typeof parsed.lastSeenLatest === 'string' && parsed.lastSeenLatest.trim()
294
+ ? parsed.lastSeenLatest.trim()
295
+ : undefined,
296
+ lastAttempt: typeof parsed.lastAttempt === 'number' ? parsed.lastAttempt : undefined,
297
+ lastAttemptedVersion: typeof parsed.lastAttemptedVersion === 'string' && parsed.lastAttemptedVersion.trim()
298
+ ? parsed.lastAttemptedVersion.trim()
299
+ : undefined,
300
+ lastUpdatedVersion: typeof parsed.lastUpdatedVersion === 'string' && parsed.lastUpdatedVersion.trim()
301
+ ? parsed.lastUpdatedVersion.trim()
302
+ : undefined,
303
+ };
304
+ }
305
+ catch {
306
+ return {};
307
+ }
308
+ }
309
+ function writeAutoUpdateState(state) {
310
+ try {
311
+ mkdirSync(join(homedir(), '.trenchwork'), { recursive: true });
312
+ writeFileSync(AUTO_UPDATE_STATE_FILE, JSON.stringify(state, null, 2));
313
+ }
314
+ catch {
315
+ // Best-effort only
316
+ }
317
+ }
318
+ function resolveUpdateCommand() {
319
+ const override = process.env['TRENCHWORK_UPDATE_COMMAND'];
320
+ if (override && override.trim()) {
321
+ return override.trim();
322
+ }
323
+ return 'npm install -g @trenchwork/coder@latest';
324
+ }
325
+ /**
326
+ * DEPRECATED: Interactive prompts conflict with chat box input handling.
327
+ * Use getUpdateDecision() for preference-based decisions instead.
328
+ *
329
+ * This function now returns skip without any interaction.
330
+ * The interactive prompt has been removed to avoid stdin conflicts.
331
+ */
332
+ export async function promptForUpdate(_updateInfo) {
333
+ // Always skip - preferences should be used via getUpdateDecision() instead
334
+ // This function is kept for backward compatibility but should not be used
335
+ return { choice: 'skip', rememberChoice: false };
336
+ }
337
+ /**
338
+ * Perform a background update without blocking the main process.
339
+ * Spawns the update command in a detached process.
340
+ */
341
+ export async function performBackgroundUpdate(updateInfo, logger) {
342
+ const command = resolveUpdateCommand();
343
+ logger?.(theme.info(`Updating agi-cli to v${updateInfo.latest} in background...`));
344
+ try {
345
+ // Parse command into executable and args
346
+ const parts = command.split(/\s+/).filter(Boolean);
347
+ const executable = parts[0];
348
+ if (!executable) {
349
+ throw new Error('Invalid update command');
350
+ }
351
+ const args = parts.slice(1);
352
+ // Spawn detached process that continues after parent exits
353
+ const child = spawn(executable, args, {
354
+ detached: true,
355
+ stdio: 'ignore',
356
+ env: {
357
+ ...process.env,
358
+ npm_config_loglevel: process.env['npm_config_loglevel'] ?? 'error',
359
+ },
360
+ });
361
+ // Unref so parent can exit independently
362
+ if (child.unref) {
363
+ child.unref();
364
+ }
365
+ // Record that we started an update
366
+ const state = readAutoUpdateState();
367
+ writeAutoUpdateState({
368
+ ...state,
369
+ lastCheck: Date.now(),
370
+ lastSeenLatest: updateInfo.latest,
371
+ lastAttempt: Date.now(),
372
+ lastAttemptedVersion: updateInfo.latest,
373
+ // Don't set lastUpdatedVersion until we confirm success
374
+ });
375
+ logger?.(theme.ui.muted(`Update started. New version will be available on next launch.`));
376
+ return { started: true };
377
+ }
378
+ catch (error) {
379
+ const message = error instanceof Error ? error.message : String(error);
380
+ logger?.(theme.warning(`Background update failed to start: ${message}`));
381
+ return { started: false, error: message };
382
+ }
383
+ }
384
+ /**
385
+ * Perform the update with progress feedback (blocking).
386
+ */
387
+ export async function performUpdate(updateInfo, logger) {
388
+ const command = resolveUpdateCommand();
389
+ logger?.(theme.info(`Updating agi-cli to v${updateInfo.latest}...`));
390
+ try {
391
+ await execAsync(command, {
392
+ timeout: INSTALL_TIMEOUT_MS,
393
+ maxBuffer: 1024 * 1024 * 4,
394
+ env: {
395
+ ...process.env,
396
+ npm_config_loglevel: process.env['npm_config_loglevel'] ?? 'error',
397
+ },
398
+ });
399
+ const state = readAutoUpdateState();
400
+ writeAutoUpdateState({
401
+ ...state,
402
+ lastCheck: Date.now(),
403
+ lastSeenLatest: updateInfo.latest,
404
+ lastAttempt: Date.now(),
405
+ lastAttemptedVersion: updateInfo.latest,
406
+ lastUpdatedVersion: updateInfo.latest,
407
+ });
408
+ logger?.(theme.success(`Updated to v${updateInfo.latest}. Restart agi to use the new version.`));
409
+ return { success: true };
410
+ }
411
+ catch (error) {
412
+ const message = error instanceof Error ? error.message : String(error);
413
+ logger?.(theme.warning(`Update failed: ${message}`));
414
+ logger?.(theme.ui.muted(`Run "${command}" manually to update.`));
415
+ return { success: false, error: message };
416
+ }
417
+ }
418
+ // Session state file for resuming work after updates
419
+ const SESSION_STATE_FILE = join(homedir(), '.trenchwork', 'session-state.json');
420
+ /**
421
+ * Save session state before update for resumption after restart.
422
+ */
423
+ export function saveSessionState(state) {
424
+ try {
425
+ mkdirSync(join(homedir(), '.trenchwork'), { recursive: true });
426
+ const fullState = {
427
+ ...state,
428
+ timestamp: Date.now(),
429
+ };
430
+ writeFileSync(SESSION_STATE_FILE, JSON.stringify(fullState, null, 2));
431
+ }
432
+ catch {
433
+ // Best-effort only
434
+ }
435
+ }
436
+ /**
437
+ * Load session state for resumption after update.
438
+ */
439
+ export function loadSessionState() {
440
+ try {
441
+ if (!existsSync(SESSION_STATE_FILE)) {
442
+ return null;
443
+ }
444
+ const raw = readFileSync(SESSION_STATE_FILE, 'utf8');
445
+ const parsed = JSON.parse(raw);
446
+ if (!parsed || typeof parsed !== 'object') {
447
+ return null;
448
+ }
449
+ return parsed;
450
+ }
451
+ catch {
452
+ return null;
453
+ }
454
+ }
455
+ /**
456
+ * Clear session state after successful resumption.
457
+ */
458
+ export function clearSessionState() {
459
+ try {
460
+ if (existsSync(SESSION_STATE_FILE)) {
461
+ writeFileSync(SESSION_STATE_FILE, '{}');
462
+ }
463
+ }
464
+ catch {
465
+ // Best-effort only
466
+ }
467
+ }
468
+ /**
469
+ * Check if there's a pending session to resume.
470
+ */
471
+ export function hasPendingSession() {
472
+ const state = loadSessionState();
473
+ if (!state || !state.timestamp)
474
+ return false;
475
+ // Session is valid if less than 24 hours old
476
+ const maxAge = 1000 * 60 * 60 * 24;
477
+ return Date.now() - state.timestamp < maxAge;
478
+ }
479
+ /**
480
+ * Perform update and automatically restart to continue work.
481
+ * Saves session state, performs update, then spawns new process with --resume flag.
482
+ */
483
+ export async function updateAndContinue(updateInfo, sessionState, logger) {
484
+ // Save current session state
485
+ logger?.(theme.info('Saving session state before update...'));
486
+ saveSessionState(sessionState);
487
+ // Perform the update
488
+ const updateResult = await performUpdate(updateInfo, logger);
489
+ if (!updateResult.success) {
490
+ return { success: false, error: updateResult.error };
491
+ }
492
+ // Spawn new process to continue work
493
+ logger?.(theme.info('Restarting to continue with updated version...'));
494
+ try {
495
+ const cliPath = process.argv[1] || 'agi';
496
+ const args = ['--resume'];
497
+ // Add working directory
498
+ if (sessionState.workingDirectory) {
499
+ args.push('--cwd', sessionState.workingDirectory);
500
+ }
501
+ // Spawn new process
502
+ const child = spawn(process.execPath, [cliPath, ...args], {
503
+ detached: true,
504
+ stdio: 'inherit',
505
+ cwd: sessionState.workingDirectory || process.cwd(),
506
+ env: {
507
+ ...process.env,
508
+ TRENCHWORK_RESUMED: 'true',
509
+ TRENCHWORK_RESUME_VERSION: updateInfo.latest,
510
+ },
511
+ });
512
+ // Don't wait for child
513
+ if (child.unref) {
514
+ child.unref();
515
+ }
516
+ logger?.(theme.success(`Updated and restarting. New process launched.`));
517
+ // Exit current process after a short delay
518
+ setTimeout(() => {
519
+ process.exit(0);
520
+ }, 500);
521
+ return { success: true, restarting: true };
522
+ }
523
+ catch (error) {
524
+ const message = error instanceof Error ? error.message : String(error);
525
+ logger?.(theme.warning(`Failed to restart: ${message}`));
526
+ // The update itself succeeded (performUpdate returned ok above); only the
527
+ // auto-restart spawn failed. Report that honestly — success with
528
+ // restarting:false — instead of success:true alongside a populated `error`
529
+ // (a self-contradiction). The restart failure is surfaced via the warning.
530
+ return { success: true, restarting: false };
531
+ }
532
+ }
533
+ /**
534
+ * Install specific npm package version and optionally restart.
535
+ */
536
+ export async function installPackageVersion(packageName, version, options = {}) {
537
+ const { global: isGlobal = true, restart = false, sessionState, logger } = options;
538
+ const globalFlag = isGlobal ? '-g ' : '';
539
+ const command = `npm install ${globalFlag}${packageName}@${version}`;
540
+ logger?.(theme.info(`Installing ${packageName}@${version}...`));
541
+ // Save session if restart requested
542
+ if (restart && sessionState) {
543
+ saveSessionState(sessionState);
544
+ }
545
+ try {
546
+ await execAsync(command, {
547
+ timeout: INSTALL_TIMEOUT_MS,
548
+ maxBuffer: 1024 * 1024 * 4,
549
+ env: {
550
+ ...process.env,
551
+ npm_config_loglevel: process.env['npm_config_loglevel'] ?? 'error',
552
+ },
553
+ });
554
+ logger?.(theme.success(`Installed ${packageName}@${version}`));
555
+ // Restart if requested
556
+ if (restart) {
557
+ logger?.(theme.info('Restarting...'));
558
+ const cliPath = process.argv[1] || 'agi';
559
+ const args = ['--resume'];
560
+ spawn(process.execPath, [cliPath, ...args], {
561
+ detached: true,
562
+ stdio: 'inherit',
563
+ cwd: sessionState?.workingDirectory || process.cwd(),
564
+ env: {
565
+ ...process.env,
566
+ TRENCHWORK_RESUMED: 'true',
567
+ TRENCHWORK_RESUME_VERSION: version,
568
+ },
569
+ }).unref();
570
+ setTimeout(() => process.exit(0), 500);
571
+ }
572
+ return { success: true };
573
+ }
574
+ catch (error) {
575
+ const message = error instanceof Error ? error.message : String(error);
576
+ logger?.(theme.warning(`Installation failed: ${message}`));
577
+ return { success: false, error: message };
578
+ }
579
+ }
580
+ /**
581
+ * Run npm install in current directory.
582
+ */
583
+ export async function runNpmInstall(cwd, logger) {
584
+ const workingDir = cwd || process.cwd();
585
+ logger?.(theme.info(`Running npm install in ${workingDir}...`));
586
+ try {
587
+ await execAsync('npm install', {
588
+ timeout: INSTALL_TIMEOUT_MS * 2, // Allow more time for full install
589
+ maxBuffer: 1024 * 1024 * 10,
590
+ cwd: workingDir,
591
+ env: {
592
+ ...process.env,
593
+ npm_config_loglevel: process.env['npm_config_loglevel'] ?? 'warn',
594
+ },
595
+ });
596
+ logger?.(theme.success('npm install completed'));
597
+ return { success: true };
598
+ }
599
+ catch (error) {
600
+ const message = error instanceof Error ? error.message : String(error);
601
+ logger?.(theme.warning(`npm install failed: ${message}`));
602
+ return { success: false, error: message };
603
+ }
604
+ }
605
+ //# sourceMappingURL=updateChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateChecker.js","sourceRoot":"","sources":["../../src/core/updateChecker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Local usage meter — counts what THIS install consumed: DeepSeek tokens
3
+ * (input + output) and Tavily searches. Persisted across sessions in
4
+ * ~/.trenchwork/usage.json (or $TRENCHWORK_HOME), plus a per-session tally.
5
+ *
6
+ * This is the per-install half of the picture. The FREE POOL totals and
7
+ * account-wide *remaining* are operator/backend numbers (the hosted Tavily
8
+ * account's 1,000/mo + 5,000 one-time bonus, and the operator's hosted DeepSeek
9
+ * budget) — the portal aggregates every install's usage against them. The quota
10
+ * constants below are exported so the backend + portal share one definition.
11
+ */
12
+ export declare const TAVILY_MONTHLY_FREE = 1000;
13
+ export declare const TAVILY_ONE_TIME_BONUS = 5000;
14
+ export interface UsageTotals {
15
+ deepseekInputTokens: number;
16
+ deepseekOutputTokens: number;
17
+ tavilySearches: number;
18
+ }
19
+ /** Record a DeepSeek turn's token usage (input/prompt + output/completion). */
20
+ export declare function recordDeepSeekUsage(inputTokens: unknown, outputTokens: unknown): void;
21
+ /** Record one Tavily web search. */
22
+ export declare function recordTavilySearch(): void;
23
+ /** Usage so far — this session and all-time (persisted). */
24
+ export declare function getUsage(): {
25
+ session: UsageTotals;
26
+ cumulative: UsageTotals;
27
+ };
28
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/core/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB;AAwCD,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,CAUrF;AAED,oCAAoC;AACpC,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED,4DAA4D;AAC5D,wBAAgB,QAAQ,IAAI;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,WAAW,CAAA;CAAE,CAE5E"}