@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,86 @@
1
+ /**
2
+ * Permission mode — Claude Code's Shift+Tab interaction model, adapted to
3
+ * Trenchwork Coder. Session-only state (never persisted; resets to `default`
4
+ * on each launch, exactly like Claude Code) cycled default → acceptEdits →
5
+ * plan → default.
6
+ *
7
+ * Three modes, each load-bearing:
8
+ * - default : the repo's guardrail-free auto-run (unchanged). The
9
+ * adversarial pre-flight still critiques high-impact calls.
10
+ * - acceptEdits : trusts file edits — they skip the adversarial pre-flight
11
+ * critique so iteration on code is faster/quieter.
12
+ * - plan : read-only. Any tool that mutates the filesystem, runs a
13
+ * shell command, or commits is blocked at the runtime
14
+ * chokepoint. The agent must investigate read-only and
15
+ * present a plan; the user approves before changes run.
16
+ *
17
+ * State lives module-level (mirrors isAdversarialEnabled / ultracode) so the
18
+ * single tool chokepoint (ToolRuntime.execute) and the Ink UI read the same
19
+ * source of truth without threading it through every constructor.
20
+ */
21
+ const MODES = ['default', 'acceptEdits', 'plan'];
22
+ let current = 'default';
23
+ export function getPermissionMode() {
24
+ return current;
25
+ }
26
+ export function setPermissionMode(mode) {
27
+ if (MODES.includes(mode))
28
+ current = mode;
29
+ }
30
+ /** Advance to the next mode in the cycle and return it (the Shift+Tab action). */
31
+ export function cyclePermissionMode() {
32
+ current = MODES[(MODES.indexOf(current) + 1) % MODES.length];
33
+ return current;
34
+ }
35
+ // Tools that change state outside the conversation: filesystem writes, shell
36
+ // commands, notebook edits, and git mutations. Names are matched
37
+ // case-insensitively against every alias the tool registry exposes.
38
+ const MUTATING_TOOLS = new Set([
39
+ 'write', 'write_file', 'edit', 'edit_file', 'multiedit', 'multi_edit',
40
+ 'delete_file', 'delete', 'notebookedit', 'notebook_edit',
41
+ 'git_commit', 'git_push',
42
+ 'bash', 'execute_bash', 'execute_command', 'run_command', 'shell',
43
+ ]);
44
+ const EDIT_TOOLS = new Set([
45
+ 'write', 'write_file', 'edit', 'edit_file', 'multiedit', 'multi_edit',
46
+ 'delete_file', 'notebookedit', 'notebook_edit',
47
+ ]);
48
+ export function isMutatingTool(name) {
49
+ return MUTATING_TOOLS.has((name || '').toLowerCase());
50
+ }
51
+ export function isEditTool(name) {
52
+ return EDIT_TOOLS.has((name || '').toLowerCase());
53
+ }
54
+ /**
55
+ * The error string a tool returns when plan mode forbids it, or null when the
56
+ * call is allowed. Returned (not thrown) so it flows back to the model as a
57
+ * normal tool result it can react to.
58
+ */
59
+ export function planModeBlock(toolName) {
60
+ if (current !== 'plan')
61
+ return null;
62
+ if (!isMutatingTool(toolName))
63
+ return null;
64
+ return `Error: ${toolName} is disabled in plan mode (read-only). Investigate without changing anything, then present a concrete plan; the user approves it before any edits or commands run. Press Shift+Tab to leave plan mode.`;
65
+ }
66
+ /** acceptEdits trusts file edits — skip the adversarial pre-flight critique for them. */
67
+ export function shouldSkipPreflight(toolName) {
68
+ return current === 'acceptEdits' && isEditTool(toolName);
69
+ }
70
+ /** The dim hint line under the input box for the active mode. */
71
+ export function permissionHint(mode = current) {
72
+ switch (mode) {
73
+ case 'acceptEdits': return '⏵⏵ accept edits on · shift+tab to cycle';
74
+ case 'plan': return '⏸ plan mode on · shift+tab to cycle';
75
+ default: return '? for shortcuts';
76
+ }
77
+ }
78
+ /** Short chip for the status line, or null in default mode (keep chrome quiet). */
79
+ export function permissionStatusChip(mode = current) {
80
+ switch (mode) {
81
+ case 'acceptEdits': return 'accept-edits';
82
+ case 'plan': return 'plan';
83
+ default: return null;
84
+ }
85
+ }
86
+ //# sourceMappingURL=permissionMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissionMode.js","sourceRoot":"","sources":["../../src/core/permissionMode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,MAAM,KAAK,GAA8B,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AAE5E,IAAI,OAAO,GAAmB,SAAS,CAAC;AAExC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAoB;IACpD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,IAAI,CAAC;AAC3C,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB;IACjC,OAAO,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAE,CAAC;IAC9D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,6EAA6E;AAC7E,iEAAiE;AACjE,oEAAoE;AACpE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY;IACrE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe;IACxD,YAAY,EAAE,UAAU;IACxB,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO;CAClE,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY;IACrE,aAAa,EAAE,cAAc,EAAE,eAAe;CAC/C,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,UAAU,QAAQ,wMAAwM,CAAC;AACpO,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,OAAO,OAAO,KAAK,aAAa,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,OAAuB,OAAO;IAC3D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa,CAAC,CAAC,OAAO,yCAAyC,CAAC;QACrE,KAAK,MAAM,CAAC,CAAC,OAAO,qCAAqC,CAAC;QAC1D,OAAO,CAAC,CAAC,OAAO,iBAAiB,CAAC;IACpC,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAAC,OAAuB,OAAO;IACjE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa,CAAC,CAAC,OAAO,cAAc,CAAC;QAC1C,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;QAC3B,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Post-write diagnostics — Claude Code surfaces diagnostics on a file the
3
+ * moment it's edited (via its language server) and feeds them back so the
4
+ * agent self-corrects, WITHOUT running the whole test suite per edit. Trenchwork
5
+ * has no persistent LSP, so this runs a fast, file-scoped *syntax* check after
6
+ * each write/edit and returns the errors. Deeper type-checking + the full test
7
+ * suite stay at the ultracode verify-step (see src/config.ts).
8
+ *
9
+ * Fast + reliable per language, no project load:
10
+ * - .ts/.tsx → TypeScript syntactic diagnostics (transpileModule)
11
+ * - .js/.jsx/.mjs/.cjs → `node --check`
12
+ * - .py → `python3 -m py_compile`
13
+ * - .json → JSON.parse
14
+ * - anything else → skipped (clean)
15
+ *
16
+ * A missing checker (e.g. no python3) is treated as "skip", never an error —
17
+ * the diagnostic must never block real work, only inform it.
18
+ */
19
+ export interface WriteDiagnostic {
20
+ /** false only when the changed file has a real, surfaced syntax error. */
21
+ ok: boolean;
22
+ /** The error text to feed back to the agent (capped), or null when clean/skipped. */
23
+ summary: string | null;
24
+ }
25
+ /**
26
+ * Diagnose a single just-written file. Returns ok=false with a capped error
27
+ * summary only on a genuine syntax error in a supported language.
28
+ */
29
+ export declare function diagnoseWrittenFile(filePath: string): Promise<WriteDiagnostic>;
30
+ /** The block appended to a write/edit tool result when diagnostics fail. */
31
+ export declare function formatDiagnosticBlock(d: WriteDiagnostic): string;
32
+ //# sourceMappingURL=postWriteDiagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postWriteDiagnostics.d.ts","sourceRoot":"","sources":["../../src/core/postWriteDiagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,EAAE,EAAE,OAAO,CAAC;IACZ,qFAAqF;IACrF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AA0BD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA0EpF;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAGhE"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Post-write diagnostics — Claude Code surfaces diagnostics on a file the
3
+ * moment it's edited (via its language server) and feeds them back so the
4
+ * agent self-corrects, WITHOUT running the whole test suite per edit. Trenchwork
5
+ * has no persistent LSP, so this runs a fast, file-scoped *syntax* check after
6
+ * each write/edit and returns the errors. Deeper type-checking + the full test
7
+ * suite stay at the ultracode verify-step (see src/config.ts).
8
+ *
9
+ * Fast + reliable per language, no project load:
10
+ * - .ts/.tsx → TypeScript syntactic diagnostics (transpileModule)
11
+ * - .js/.jsx/.mjs/.cjs → `node --check`
12
+ * - .py → `python3 -m py_compile`
13
+ * - .json → JSON.parse
14
+ * - anything else → skipped (clean)
15
+ *
16
+ * A missing checker (e.g. no python3) is treated as "skip", never an error —
17
+ * the diagnostic must never block real work, only inform it.
18
+ */
19
+ import { extname } from 'node:path';
20
+ import { readFileSync, statSync } from 'node:fs';
21
+ import { execFile } from 'node:child_process';
22
+ const CLEAN = { ok: true, summary: null };
23
+ const MAX_BYTES = 2 * 1024 * 1024; // skip very large files — not worth the latency
24
+ const TIMEOUT_MS = 6000;
25
+ const JS_EXT = new Set(['.js', '.jsx', '.mjs', '.cjs']);
26
+ function runChecker(cmd, args) {
27
+ return new Promise((resolve) => {
28
+ execFile(cmd, args, { timeout: TIMEOUT_MS, maxBuffer: 1024 * 1024 }, (err, stdout, stderr) => {
29
+ const out = `${stdout || ''}${stderr || ''}`.trim();
30
+ if (err && err.code === 'ENOENT') {
31
+ resolve({ failed: false, out: '', missing: true }); // checker not installed → skip
32
+ return;
33
+ }
34
+ resolve({ failed: Boolean(err), out, missing: false });
35
+ });
36
+ });
37
+ }
38
+ function cap(text, max = 600) {
39
+ const t = text.trim();
40
+ return t.length > max ? `${t.slice(0, max - 1)}…` : t;
41
+ }
42
+ /**
43
+ * Diagnose a single just-written file. Returns ok=false with a capped error
44
+ * summary only on a genuine syntax error in a supported language.
45
+ */
46
+ export async function diagnoseWrittenFile(filePath) {
47
+ if (!filePath)
48
+ return CLEAN;
49
+ const ext = extname(filePath).toLowerCase();
50
+ try {
51
+ const st = statSync(filePath);
52
+ if (!st.isFile() || st.size > MAX_BYTES)
53
+ return CLEAN;
54
+ }
55
+ catch {
56
+ return CLEAN; // file gone / unreadable — nothing to diagnose
57
+ }
58
+ // JSON — parse in-process.
59
+ if (ext === '.json') {
60
+ try {
61
+ JSON.parse(readFileSync(filePath, 'utf8'));
62
+ return CLEAN;
63
+ }
64
+ catch (e) {
65
+ return { ok: false, summary: cap(`JSON parse error: ${e.message}`) };
66
+ }
67
+ }
68
+ // TypeScript — syntactic diagnostics via the compiler API (no type-check,
69
+ // no project load, so no false positives from unresolved imports).
70
+ if (ext === '.ts' || ext === '.tsx') {
71
+ try {
72
+ const tsMod = await import('typescript');
73
+ const ts = tsMod.default ?? tsMod;
74
+ const source = readFileSync(filePath, 'utf8');
75
+ // Only set jsx for .tsx — passing jsx:undefined makes transpileModule
76
+ // emit a spurious "--jsx option" diagnostic (a global option error, not
77
+ // a source error).
78
+ const compilerOptions = ext === '.tsx'
79
+ ? { noEmit: true, jsx: ts.JsxEmit.Preserve }
80
+ : { noEmit: true };
81
+ const result = ts.transpileModule(source, {
82
+ reportDiagnostics: true,
83
+ fileName: filePath,
84
+ compilerOptions,
85
+ });
86
+ // Count only errors tied to the source file (d.file set) — that excludes
87
+ // global/option diagnostics, leaving real syntax errors in the file.
88
+ const syntactic = (result.diagnostics ?? []).filter((d) => d.category === ts.DiagnosticCategory.Error && d.file);
89
+ if (syntactic.length === 0)
90
+ return CLEAN;
91
+ const msgs = syntactic.slice(0, 5).map((d) => {
92
+ const text = ts.flattenDiagnosticMessageText(d.messageText, '\n');
93
+ if (typeof d.start === 'number' && d.file) {
94
+ const { line, character } = d.file.getLineAndCharacterOfPosition(d.start);
95
+ return `${line + 1}:${character + 1} ${text}`;
96
+ }
97
+ return text;
98
+ });
99
+ return { ok: false, summary: cap(msgs.join('; ')) };
100
+ }
101
+ catch {
102
+ return CLEAN; // typescript unavailable / threw — never block on the diagnostic itself
103
+ }
104
+ }
105
+ // JavaScript family — `node --check` syntax validation.
106
+ if (JS_EXT.has(ext)) {
107
+ const { failed, out, missing } = await runChecker(process.execPath, ['--check', filePath]);
108
+ if (missing || !failed)
109
+ return CLEAN;
110
+ return { ok: false, summary: cap(out || 'syntax error') };
111
+ }
112
+ // Python — `python3 -m py_compile`.
113
+ if (ext === '.py') {
114
+ const { failed, out, missing } = await runChecker('python3', ['-m', 'py_compile', filePath]);
115
+ if (missing || !failed)
116
+ return CLEAN;
117
+ return { ok: false, summary: cap(out || 'syntax error') };
118
+ }
119
+ return CLEAN;
120
+ }
121
+ /** The block appended to a write/edit tool result when diagnostics fail. */
122
+ export function formatDiagnosticBlock(d) {
123
+ if (d.ok || !d.summary)
124
+ return '';
125
+ return `\n ⎿ ⚠ diagnostics: ${d.summary}`;
126
+ }
127
+ //# sourceMappingURL=postWriteDiagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postWriteDiagnostics.js","sourceRoot":"","sources":["../../src/core/postWriteDiagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import type { ProviderId, ReasoningEffortLevel } from './types.js';
2
+ import type { ProfileName } from '../config.js';
3
+ export interface PersistedModelPreference {
4
+ provider: ProviderId;
5
+ model: string;
6
+ temperature?: number;
7
+ maxTokens?: number;
8
+ reasoningEffort?: ReasoningEffortLevel;
9
+ }
10
+ /**
11
+ * Feature flags for optional experimental features
12
+ */
13
+ export interface FeatureFlags {
14
+ verification?: boolean;
15
+ autoCompact?: boolean;
16
+ mcpEnabled?: boolean;
17
+ metrics?: boolean;
18
+ codingTools?: boolean;
19
+ securityTools?: boolean;
20
+ adversarial?: boolean;
21
+ allPlugins?: boolean;
22
+ }
23
+ export interface ToolSettings {
24
+ enabledTools: string[];
25
+ }
26
+ export interface SessionPreferences {
27
+ autosave: boolean;
28
+ autoResume: boolean;
29
+ autoContinue: boolean;
30
+ autoUpdate: boolean | null;
31
+ lastSessionId: string | null;
32
+ }
33
+ export declare function loadActiveProfilePreference(): ProfileName | null;
34
+ export declare function saveActiveProfilePreference(profile: ProfileName): void;
35
+ export declare function clearActiveProfilePreference(): void;
36
+ export declare function loadModelPreference(profile: ProfileName): PersistedModelPreference | null;
37
+ export declare function saveModelPreference(profile: ProfileName, preference: PersistedModelPreference): void;
38
+ export declare function loadToolSettings(): ToolSettings | null;
39
+ export declare function saveToolSettings(settings: ToolSettings): void;
40
+ export declare function clearToolSettings(): void;
41
+ export declare function loadSessionPreferences(): SessionPreferences;
42
+ export declare function saveSessionPreferences(preferences: Partial<SessionPreferences>): void;
43
+ /**
44
+ * Default feature flags.
45
+ */
46
+ export declare const DEFAULT_FEATURE_FLAGS: FeatureFlags;
47
+ /**
48
+ * Load feature flags from settings
49
+ */
50
+ export declare function loadFeatureFlags(): FeatureFlags;
51
+ /**
52
+ * Save feature flags to settings
53
+ */
54
+ export declare function saveFeatureFlags(flags: FeatureFlags): void;
55
+ /**
56
+ * Toggle a single feature flag
57
+ */
58
+ export declare function toggleFeatureFlag(key: keyof FeatureFlags, value?: boolean): FeatureFlags;
59
+ /**
60
+ * Feature flag descriptions for help/display
61
+ */
62
+ export declare const FEATURE_FLAG_INFO: Record<keyof FeatureFlags, {
63
+ label: string;
64
+ description: string;
65
+ }>;
66
+ //# sourceMappingURL=preferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../src/core/preferences.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACxC;AAuBD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,2BAA2B,IAAI,WAAW,GAAG,IAAI,CAMhE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAUtE;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CASnD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,wBAAwB,GAAG,IAAI,CAazF;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,wBAAwB,GACnC,IAAI,CAMN;AAED,wBAAgB,gBAAgB,IAAI,YAAY,GAAG,IAAI,CAOtD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAQ7D;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAWxC;AAED,wBAAgB,sBAAsB,IAAI,kBAAkB,CAc3D;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAwBrF;AAmHD;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YASnC,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAQ/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAM1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,YAAY,CAMxF;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,YAAY,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAiChG,CAAC"}
@@ -0,0 +1,310 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ const CONFIG_DIR = join(homedir(), '.trenchwork');
5
+ const SETTINGS_PATH = join(CONFIG_DIR, 'settings.json');
6
+ const CURRENT_VERSION = 2;
7
+ export function loadActiveProfilePreference() {
8
+ const payload = readSettingsFile();
9
+ if (!payload?.activeProfile) {
10
+ return null;
11
+ }
12
+ return normalizeProfileNameValue(payload.activeProfile);
13
+ }
14
+ export function saveActiveProfilePreference(profile) {
15
+ const normalized = normalizeProfileNameValue(profile);
16
+ if (!normalized) {
17
+ return;
18
+ }
19
+ const payload = readSettingsFile() ?? { version: CURRENT_VERSION, profiles: {} };
20
+ payload.version = CURRENT_VERSION;
21
+ payload.profiles = payload.profiles ?? {};
22
+ payload.activeProfile = normalized;
23
+ writeSettingsFile(payload);
24
+ }
25
+ export function clearActiveProfilePreference() {
26
+ const payload = readSettingsFile();
27
+ if (!payload?.activeProfile) {
28
+ return;
29
+ }
30
+ payload.version = CURRENT_VERSION;
31
+ payload.profiles = payload.profiles ?? {};
32
+ delete payload.activeProfile;
33
+ writeSettingsFile(payload);
34
+ }
35
+ export function loadModelPreference(profile) {
36
+ const payload = readSettingsFile();
37
+ if (!payload) {
38
+ return null;
39
+ }
40
+ const entry = payload.profiles?.[profile];
41
+ if (!entry || typeof entry !== 'object') {
42
+ return null;
43
+ }
44
+ if (typeof entry.provider !== 'string' || typeof entry.model !== 'string') {
45
+ return null;
46
+ }
47
+ return { ...entry };
48
+ }
49
+ export function saveModelPreference(profile, preference) {
50
+ const payload = readSettingsFile() ?? { version: CURRENT_VERSION, profiles: {} };
51
+ payload.version = CURRENT_VERSION;
52
+ payload.profiles = payload.profiles ?? {};
53
+ payload.profiles[profile] = { ...preference };
54
+ writeSettingsFile(payload);
55
+ }
56
+ export function loadToolSettings() {
57
+ const payload = readSettingsFile();
58
+ if (!payload?.tools) {
59
+ return null;
60
+ }
61
+ const enabledTools = normalizeToolIds(payload.tools.enabledTools);
62
+ return { enabledTools };
63
+ }
64
+ export function saveToolSettings(settings) {
65
+ const payload = readSettingsFile() ?? { version: CURRENT_VERSION, profiles: {} };
66
+ payload.version = CURRENT_VERSION;
67
+ payload.profiles = payload.profiles ?? {};
68
+ payload.tools = {
69
+ enabledTools: normalizeToolIds(settings.enabledTools),
70
+ };
71
+ writeSettingsFile(payload);
72
+ }
73
+ export function clearToolSettings() {
74
+ const payload = readSettingsFile();
75
+ if (!payload) {
76
+ return;
77
+ }
78
+ payload.version = CURRENT_VERSION;
79
+ payload.profiles = payload.profiles ?? {};
80
+ if (payload.tools) {
81
+ delete payload.tools;
82
+ }
83
+ writeSettingsFile(payload);
84
+ }
85
+ export function loadSessionPreferences() {
86
+ const payload = readSettingsFile();
87
+ const section = payload?.session;
88
+ return {
89
+ // autoContinue defaults to false - manual control avoids unintended follow-ups
90
+ autosave: typeof section?.autosave === 'boolean' ? section.autosave : false,
91
+ autoResume: typeof section?.autoResume === 'boolean' ? section.autoResume : false,
92
+ autoContinue: typeof section?.autoContinue === 'boolean' ? section.autoContinue : false,
93
+ autoUpdate: typeof section?.autoUpdate === 'boolean' ? section.autoUpdate : null,
94
+ lastSessionId: typeof section?.lastSessionId === 'string' && section.lastSessionId.trim()
95
+ ? section.lastSessionId.trim()
96
+ : null,
97
+ };
98
+ }
99
+ export function saveSessionPreferences(preferences) {
100
+ const payload = readSettingsFile() ?? { version: CURRENT_VERSION, profiles: {} };
101
+ payload.version = CURRENT_VERSION;
102
+ payload.profiles = payload.profiles ?? {};
103
+ const section = payload.session ?? {};
104
+ if (typeof preferences.autosave === 'boolean') {
105
+ section.autosave = preferences.autosave;
106
+ }
107
+ if (typeof preferences.autoResume === 'boolean') {
108
+ section.autoResume = preferences.autoResume;
109
+ }
110
+ if (typeof preferences.autoContinue === 'boolean') {
111
+ section.autoContinue = preferences.autoContinue;
112
+ }
113
+ if ('autoUpdate' in preferences) {
114
+ section.autoUpdate = preferences.autoUpdate ?? undefined;
115
+ }
116
+ if ('lastSessionId' in preferences) {
117
+ section.lastSessionId = preferences.lastSessionId ?? undefined;
118
+ }
119
+ payload.session = section;
120
+ writeSettingsFile(payload);
121
+ }
122
+ function readSettingsFile() {
123
+ try {
124
+ if (!existsSync(SETTINGS_PATH)) {
125
+ return null;
126
+ }
127
+ const raw = readFileSync(SETTINGS_PATH, 'utf8');
128
+ const parsed = JSON.parse(raw);
129
+ if (!parsed || typeof parsed !== 'object') {
130
+ return null;
131
+ }
132
+ const profiles = typeof parsed.profiles === 'object' && parsed.profiles !== null ? parsed.profiles : {};
133
+ const payload = {
134
+ version: typeof parsed.version === 'number' ? parsed.version : CURRENT_VERSION,
135
+ profiles,
136
+ };
137
+ const tools = parseToolSettings(parsed.tools);
138
+ if (tools) {
139
+ payload.tools = tools;
140
+ }
141
+ const session = parseSessionPreferences(parsed.session);
142
+ if (session) {
143
+ payload.session = session;
144
+ }
145
+ const rawProfile = typeof parsed.activeProfile === 'string' && parsed.activeProfile.trim()
146
+ ? parsed.activeProfile.trim()
147
+ : undefined;
148
+ if (rawProfile) {
149
+ payload.activeProfile = rawProfile;
150
+ }
151
+ return payload;
152
+ }
153
+ catch {
154
+ return null;
155
+ }
156
+ }
157
+ function writeSettingsFile(payload) {
158
+ try {
159
+ mkdirSync(CONFIG_DIR, { recursive: true });
160
+ writeFileSync(SETTINGS_PATH, JSON.stringify(payload, null, 2));
161
+ }
162
+ catch {
163
+ // Persisting settings should not block runtime; ignore write failures.
164
+ }
165
+ }
166
+ function parseToolSettings(value) {
167
+ if (!value || typeof value !== 'object') {
168
+ return undefined;
169
+ }
170
+ const record = value;
171
+ if (!Array.isArray(record.enabledTools)) {
172
+ return { enabledTools: [] };
173
+ }
174
+ return { enabledTools: normalizeToolIds(record.enabledTools) };
175
+ }
176
+ function parseSessionPreferences(value) {
177
+ if (!value || typeof value !== 'object') {
178
+ return undefined;
179
+ }
180
+ const record = value;
181
+ const section = {};
182
+ if (typeof record.autosave === 'boolean') {
183
+ section.autosave = record.autosave;
184
+ }
185
+ if (typeof record.autoResume === 'boolean') {
186
+ section.autoResume = record.autoResume;
187
+ }
188
+ if (typeof record.autoContinue === 'boolean') {
189
+ section.autoContinue = record.autoContinue;
190
+ }
191
+ if (typeof record.autoUpdate === 'boolean') {
192
+ section.autoUpdate = record.autoUpdate;
193
+ }
194
+ if (typeof record.lastSessionId === 'string' && record.lastSessionId.trim()) {
195
+ section.lastSessionId = record.lastSessionId.trim();
196
+ }
197
+ return section;
198
+ }
199
+ function normalizeToolIds(ids) {
200
+ if (!Array.isArray(ids)) {
201
+ return [];
202
+ }
203
+ const seen = new Set();
204
+ const result = [];
205
+ for (const entry of ids) {
206
+ if (typeof entry !== 'string') {
207
+ continue;
208
+ }
209
+ const id = entry.trim();
210
+ if (!id || seen.has(id)) {
211
+ continue;
212
+ }
213
+ seen.add(id);
214
+ result.push(id);
215
+ }
216
+ return result;
217
+ }
218
+ function normalizeProfileNameValue(value) {
219
+ if (typeof value !== 'string') {
220
+ return null;
221
+ }
222
+ const trimmed = value.trim();
223
+ if (!trimmed) {
224
+ return null;
225
+ }
226
+ return trimmed;
227
+ }
228
+ /**
229
+ * Default feature flags.
230
+ */
231
+ export const DEFAULT_FEATURE_FLAGS = {
232
+ verification: false,
233
+ autoCompact: true, // Enable by default to prevent context overflow
234
+ mcpEnabled: false,
235
+ metrics: false,
236
+ codingTools: true, // Enable coding tools by default
237
+ securityTools: false,
238
+ adversarial: true, // Verify answers + critique risky tool calls by default
239
+ allPlugins: false,
240
+ };
241
+ /**
242
+ * Load feature flags from settings
243
+ */
244
+ export function loadFeatureFlags() {
245
+ const payload = readSettingsFile();
246
+ const stored = payload?.features?.flags;
247
+ // Merge with defaults - stored values override defaults
248
+ return {
249
+ ...DEFAULT_FEATURE_FLAGS,
250
+ ...(stored ?? {}),
251
+ };
252
+ }
253
+ /**
254
+ * Save feature flags to settings
255
+ */
256
+ export function saveFeatureFlags(flags) {
257
+ const payload = readSettingsFile() ?? { version: CURRENT_VERSION, profiles: {} };
258
+ payload.version = CURRENT_VERSION;
259
+ payload.profiles = payload.profiles ?? {};
260
+ payload.features = { flags: { ...flags } };
261
+ writeSettingsFile(payload);
262
+ }
263
+ /**
264
+ * Toggle a single feature flag
265
+ */
266
+ export function toggleFeatureFlag(key, value) {
267
+ const current = loadFeatureFlags();
268
+ const newValue = value !== undefined ? value : !current[key];
269
+ const updated = { ...current, [key]: newValue };
270
+ saveFeatureFlags(updated);
271
+ return updated;
272
+ }
273
+ /**
274
+ * Feature flag descriptions for help/display
275
+ */
276
+ export const FEATURE_FLAG_INFO = {
277
+ verification: {
278
+ label: 'Verification',
279
+ description: 'Automatic response verification and validation',
280
+ },
281
+ autoCompact: {
282
+ label: 'Auto Compact',
283
+ description: 'Automatically compact context when approaching limit',
284
+ },
285
+ mcpEnabled: {
286
+ label: 'MCP',
287
+ description: 'Model Context Protocol server support',
288
+ },
289
+ metrics: {
290
+ label: 'Metrics',
291
+ description: 'Performance tracking and analytics',
292
+ },
293
+ codingTools: {
294
+ label: 'Coding Tools',
295
+ description: 'Enhanced code analysis and refactoring',
296
+ },
297
+ securityTools: {
298
+ label: 'Security Tools',
299
+ description: 'Security research and analysis tools',
300
+ },
301
+ adversarial: {
302
+ label: 'Adversarial',
303
+ description: 'Adversarially verify final answers and critique risky tool calls',
304
+ },
305
+ allPlugins: {
306
+ label: 'All Plugins',
307
+ description: 'Enable all optional feature plugins',
308
+ },
309
+ };
310
+ //# sourceMappingURL=preferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences.js","sourceRoot":"","sources":["../../src/core/preferences.ts"],"names":[],"mappings":"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"}