@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,526 @@
1
+ /* eslint-disable @typescript-eslint/no-namespace */
2
+ import { AsyncLocalStorage } from 'node:async_hooks';
3
+ import { isAbsolute, resolve as resolvePath } from 'node:path';
4
+ import { ToolArgumentValidationError, coerceToolArguments, validateToolArguments, } from './schemaValidator.js';
5
+ import { validateToolPreconditions, validateAIFlowPatterns, EDIT_WITHOUT_READ } from './toolPreconditions.js';
6
+ import { safeTruncate } from './resultVerification.js';
7
+ import { logDebug } from '../utils/debugLogger.js';
8
+ import { loadHooksConfig, runPreToolUseHooks, runPostToolUseHooks } from './hooks.js';
9
+ import { isAdversarialEnabled, isHighImpactTool, critiqueToolCall, getDefaultCriticProvider } from './adversarial.js';
10
+ import { planModeBlock, shouldSkipPreflight, isEditTool } from './permissionMode.js';
11
+ import { diagnoseWrittenFile, formatDiagnosticBlock } from './postWriteDiagnostics.js';
12
+ /** Resolve the path a write/edit tool just touched, for post-write diagnostics. */
13
+ function pickWrittenPath(args, cwd) {
14
+ const raw = args['file_path'] ?? args['path'] ?? args['filename'];
15
+ if (typeof raw !== 'string' || !raw.trim())
16
+ return null;
17
+ return isAbsolute(raw) ? raw : resolvePath(cwd, raw);
18
+ }
19
+ const toolExecutionContext = new AsyncLocalStorage();
20
+ /**
21
+ * Report incremental progress for the currently executing tool.
22
+ * Tools can call this to surface live status updates (e.g., indexing files).
23
+ */
24
+ export function reportToolProgress(progress) {
25
+ const context = toolExecutionContext.getStore();
26
+ if (!context?.observer?.onToolProgress) {
27
+ return;
28
+ }
29
+ const current = Number.isFinite(progress.current) ? Math.max(0, progress.current) : 0;
30
+ const total = progress.total !== undefined ? Math.max(current, progress.total) : current;
31
+ try {
32
+ context.observer.onToolProgress(context.call, {
33
+ current,
34
+ total,
35
+ message: progress.message,
36
+ });
37
+ }
38
+ catch {
39
+ // Swallow observer errors so they don't break tool execution
40
+ }
41
+ }
42
+ // Idempotent tools that can be safely cached
43
+ const CACHEABLE_TOOLS = new Set([
44
+ 'Read',
45
+ 'read_file',
46
+ 'Glob',
47
+ 'glob_search',
48
+ 'Grep',
49
+ 'grep_search',
50
+ 'find_definition',
51
+ 'analyze_code_quality',
52
+ 'extract_exports',
53
+ ]);
54
+ function buildOptimizationHint(warning) {
55
+ const code = warning.code;
56
+ const suggestion = warning.suggestion || warning.message;
57
+ switch (code) {
58
+ case 'SEARCH_BROAD_PATTERN':
59
+ case 'SEARCH_CONTEXT_OVERFLOW_RISK':
60
+ return (`\n\n<optimization-hint>\n` +
61
+ `⚡ SEARCH: ${suggestion}\n` +
62
+ `</optimization-hint>`);
63
+ case EDIT_WITHOUT_READ:
64
+ case 'EDIT_PLACEHOLDER':
65
+ return (`\n\n<optimization-hint>\n` +
66
+ `⚡ EDIT: Read the file first to copy exact whitespace. ${suggestion}\n` +
67
+ `</optimization-hint>`);
68
+ case 'NPM_INCOMPLETE_WORKFLOW':
69
+ return (`\n\n<optimization-hint>\n` +
70
+ `⚡ PUBLISH: ${suggestion}\n` +
71
+ `</optimization-hint>`);
72
+ default:
73
+ return null;
74
+ }
75
+ }
76
+ /**
77
+ * Type-safe utility functions for tool runtime operations
78
+ */
79
+ export var ToolRuntimeUtils;
80
+ (function (ToolRuntimeUtils) {
81
+ /**
82
+ * Creates a type-safe tool definition with inferred parameter types
83
+ */
84
+ function createToolDefinition(definition) {
85
+ return definition;
86
+ }
87
+ ToolRuntimeUtils.createToolDefinition = createToolDefinition;
88
+ /**
89
+ * Creates a type-safe tool suite with inferred tool types
90
+ */
91
+ function createToolSuite(suite) {
92
+ return suite;
93
+ }
94
+ ToolRuntimeUtils.createToolSuite = createToolSuite;
95
+ /**
96
+ * Type guard to check if a tool definition matches expected parameter schema
97
+ */
98
+ function isToolDefinition(__tool, expectedSchema) {
99
+ if (!expectedSchema)
100
+ return true;
101
+ // In a real implementation, this would validate against the schema
102
+ return true;
103
+ }
104
+ ToolRuntimeUtils.isToolDefinition = isToolDefinition;
105
+ })(ToolRuntimeUtils || (ToolRuntimeUtils = {}));
106
+ export class ToolRuntime {
107
+ registry = new Map();
108
+ registrationOrder = [];
109
+ observer;
110
+ contextManager;
111
+ cache = new Map();
112
+ enableCache;
113
+ cacheTTLMs;
114
+ toolHistory = [];
115
+ maxHistorySize = 50; // Keep last 50 tool calls for AI flow pattern detection
116
+ diffSnapshots = [];
117
+ maxDiffSnapshots = 5; // Keep only the most recent git diff outputs
118
+ maxDiffSnapshotLength = 4000;
119
+ hooks;
120
+ runtimeWorkingDir;
121
+ constructor(baseTools = [], options = {}) {
122
+ this.runtimeWorkingDir = options.workingDir ?? process.cwd();
123
+ this.observer = options.observer ?? null;
124
+ this.contextManager = options.contextManager ?? null;
125
+ this.enableCache = options.enableCache ?? true;
126
+ this.cacheTTLMs = options.cacheTTLMs ?? 5 * 60 * 1000; // 5 minutes default
127
+ // Load hook config eagerly. Hot-reloading on every tool call would
128
+ // give the user faster feedback but at the cost of file I/O on
129
+ // every step — we accept "edit settings → restart CLI" as the
130
+ // tradeoff (matches Claude Code).
131
+ try {
132
+ this.hooks = loadHooksConfig(options.workingDir ?? process.cwd());
133
+ }
134
+ catch (err) {
135
+ logDebug('[hooks] config load failed: ' + err.message);
136
+ this.hooks = {};
137
+ }
138
+ if (baseTools.length) {
139
+ this.registerSuite({
140
+ id: 'runtime.core',
141
+ description: 'Core runtime metadata tools',
142
+ tools: baseTools,
143
+ });
144
+ }
145
+ }
146
+ registerSuite(suite) {
147
+ if (!suite?.id?.trim()) {
148
+ throw new Error('Tool suite id cannot be blank.');
149
+ }
150
+ this.unregisterSuite(suite.id);
151
+ for (const definition of suite.tools ?? []) {
152
+ this.addTool(definition, suite.id);
153
+ }
154
+ }
155
+ unregisterSuite(id) {
156
+ if (!id?.trim()) {
157
+ return;
158
+ }
159
+ for (const [name, record] of this.registry.entries()) {
160
+ if (record.suiteId === id) {
161
+ this.registry.delete(name);
162
+ this.removeFromOrder(name);
163
+ }
164
+ }
165
+ }
166
+ listProviderTools() {
167
+ return this.registrationOrder
168
+ .map((name) => this.registry.get(name))
169
+ .filter((record) => Boolean(record))
170
+ .map(({ definition }) => ({
171
+ name: definition.name,
172
+ description: definition.description,
173
+ ...(definition.parameters && { parameters: definition.parameters }),
174
+ }));
175
+ }
176
+ async execute(call, _context) {
177
+ const record = this.registry.get(call.name);
178
+ const rawArgs = normalizeToolArguments(call.arguments);
179
+ const args = coerceToolArguments(record?.definition.parameters, rawArgs);
180
+ const augmentedCall = { ...call, args };
181
+ if (!record) {
182
+ const message = `Tool "${call.name}" is not available.`;
183
+ this.observer?.onToolError?.(augmentedCall, message);
184
+ // Performance monitoring removed - no legacy components
185
+ return message;
186
+ }
187
+ // Check if tool is cacheable
188
+ const isCacheable = record.definition.cacheable ?? CACHEABLE_TOOLS.has(call.name);
189
+ const cacheTtl = typeof record.definition.cacheTtlMs === 'number' && Number.isFinite(record.definition.cacheTtlMs)
190
+ ? Math.max(0, Math.floor(record.definition.cacheTtlMs))
191
+ : this.cacheTTLMs;
192
+ const canUseCache = this.enableCache && isCacheable && cacheTtl > 0;
193
+ // Try to get from cache
194
+ if (canUseCache) {
195
+ const cacheKey = this.getCacheKey({ ...call, arguments: args });
196
+ const cached = this.cache.get(cacheKey);
197
+ if (cached && Date.now() - cached.timestamp < cacheTtl) {
198
+ this.observer?.onCacheHit?.(augmentedCall);
199
+ this.observer?.onToolResult?.(augmentedCall, cached.result);
200
+ // Record cache hit as successful execution with 0ms time
201
+ // Performance monitoring removed - no legacy components
202
+ this.recordToolHistory({
203
+ toolName: call.name,
204
+ args,
205
+ timestamp: Date.now(),
206
+ success: true,
207
+ hasOutput: hasNonEmptyOutput(cached.result),
208
+ });
209
+ return cached.result;
210
+ }
211
+ }
212
+ this.observer?.onToolStart?.(augmentedCall);
213
+ // Performance monitoring removed - no legacy components
214
+ try {
215
+ validateToolArguments(record.definition.name, record.definition.parameters, args);
216
+ // Pre-flight AI flow validation - catch common tool usage failures
217
+ const preflightWarnings = validateToolPreconditions(call.name, args);
218
+ for (const warning of preflightWarnings) {
219
+ this.observer?.onToolWarning?.(augmentedCall, warning);
220
+ }
221
+ // Advanced AI flow pattern validation using tool history
222
+ const aiFlowWarnings = validateAIFlowPatterns(call.name, args, this.toolHistory);
223
+ for (const warning of aiFlowWarnings) {
224
+ this.observer?.onToolWarning?.(augmentedCall, warning);
225
+ }
226
+ // Collect optimization hints to inject into result
227
+ const optimizationHints = [];
228
+ const seenOptimizationCodes = new Set();
229
+ for (const warning of [...preflightWarnings, ...aiFlowWarnings]) {
230
+ if (warning.code && seenOptimizationCodes.has(warning.code)) {
231
+ continue;
232
+ }
233
+ const hint = buildOptimizationHint(warning);
234
+ if (hint) {
235
+ if (warning.code) {
236
+ seenOptimizationCodes.add(warning.code);
237
+ }
238
+ optimizationHints.push(hint);
239
+ }
240
+ }
241
+ // PreToolUse hooks: run user-configured shell commands that
242
+ // can block this tool call. Best-effort — if the hook errors,
243
+ // times out, or returns malformed output, we pass through.
244
+ try {
245
+ const blocked = await runPreToolUseHooks(this.hooks, call.name, args);
246
+ if (blocked) {
247
+ const reason = blocked.reason || 'Blocked by hook';
248
+ const message = `Error: ${call.name} blocked by user hook: ${reason}`;
249
+ this.observer?.onToolError?.(augmentedCall, message);
250
+ this.recordToolHistory({
251
+ toolName: call.name,
252
+ args,
253
+ timestamp: Date.now(),
254
+ success: false,
255
+ hasOutput: false,
256
+ });
257
+ return message;
258
+ }
259
+ }
260
+ catch (err) {
261
+ // A buggy hook should never crash the agent. Log + continue.
262
+ logDebug('[hooks] PreToolUse error: ' + err.message);
263
+ }
264
+ // Permission mode (Shift+Tab): plan mode is read-only. Any tool that
265
+ // mutates the filesystem, runs a shell command, or commits is blocked
266
+ // here — the one chokepoint every tool flows through, so no alternate
267
+ // call path can bypass it. The block is returned as a normal tool
268
+ // result so the model sees it and can switch to presenting a plan.
269
+ const planBlock = planModeBlock(call.name);
270
+ if (planBlock) {
271
+ this.observer?.onToolError?.(augmentedCall, planBlock);
272
+ this.recordToolHistory({
273
+ toolName: call.name,
274
+ args,
275
+ timestamp: Date.now(),
276
+ success: false,
277
+ hasOutput: false,
278
+ });
279
+ return planBlock;
280
+ }
281
+ // Adversarial pre-flight: critique high-impact (Write/Edit/Bash)
282
+ // calls before they run. Surfaced as a warning, not a hard block —
283
+ // this CLI is intentionally guardrail-free, so the verdict informs
284
+ // rather than halts. Gated by the adversarial flag; read-only tools
285
+ // skip the critic; acceptEdits mode trusts file edits and skips it
286
+ // too; fail-open on any error.
287
+ if (isAdversarialEnabled() && isHighImpactTool(call.name) && !shouldSkipPreflight(call.name)) {
288
+ try {
289
+ const verdict = await critiqueToolCall(await getDefaultCriticProvider(), call.name, args);
290
+ if (verdict.decision === 'block') {
291
+ this.observer?.onToolWarning?.(augmentedCall, `Adversarial pre-flight (${verdict.riskLevel} risk): ${verdict.reason}`);
292
+ }
293
+ }
294
+ catch (err) {
295
+ logDebug('[adversarial] pre-flight error: ' + err.message);
296
+ }
297
+ }
298
+ const result = await toolExecutionContext.run({ call: augmentedCall, observer: this.observer ?? undefined }, async () => record.definition.handler(args));
299
+ let output = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
300
+ // Auto post-write diagnostics: after a successful file edit/write, run a
301
+ // fast file-scoped syntax check on the changed file and feed any failure
302
+ // back to the agent (the way Claude Code surfaces diagnostics on edit) —
303
+ // WITHOUT running the full suite. Skipped under test (keeps the suite
304
+ // fast/deterministic; diagnoseWrittenFile is unit-tested directly).
305
+ if (process.env['NODE_ENV'] !== 'test' && isEditTool(call.name) && !/^error/i.test(output.trim())) {
306
+ try {
307
+ const fp = pickWrittenPath(args, this.runtimeWorkingDir);
308
+ if (fp) {
309
+ const diag = await diagnoseWrittenFile(fp);
310
+ const block = formatDiagnosticBlock(diag);
311
+ if (block)
312
+ output = `${output}${block}`;
313
+ }
314
+ }
315
+ catch (err) {
316
+ logDebug('[diagnostics] post-write error: ' + err.message);
317
+ }
318
+ }
319
+ // PostToolUse hooks: append text from each matching hook so
320
+ // the model sees the augmentation. Useful for "lint after every
321
+ // edit" / "echo every Bash command to a log" patterns.
322
+ try {
323
+ const post = await runPostToolUseHooks(this.hooks, call.name, args, output);
324
+ if (post?.appendToResult) {
325
+ output = `${output}\n\n[hook] ${post.appendToResult}`;
326
+ }
327
+ }
328
+ catch (err) {
329
+ logDebug('[hooks] PostToolUse error: ' + err.message);
330
+ }
331
+ let snapshotCandidate = output;
332
+ // Truncate output if context manager is available
333
+ if (this.contextManager) {
334
+ const truncated = this.contextManager.truncateToolOutput(output, call.name);
335
+ if (truncated.wasTruncated) {
336
+ output = truncated.content;
337
+ // Log truncation for debugging
338
+ if (process.env['DEBUG_CONTEXT']) {
339
+ logDebug(`[Context Manager] Truncated ${call.name} output: ${truncated.originalLength} -> ${truncated.truncatedLength} chars`);
340
+ }
341
+ }
342
+ snapshotCandidate = output;
343
+ }
344
+ this.recordDiffSnapshot(args, snapshotCandidate);
345
+ // Cache the result if cacheable
346
+ if (canUseCache) {
347
+ const cacheKey = this.getCacheKey({ ...call, arguments: args });
348
+ this.cache.set(cacheKey, {
349
+ result: output,
350
+ timestamp: Date.now(),
351
+ });
352
+ }
353
+ // Append optimization hints to guide future LLM behavior
354
+ if (optimizationHints.length > 0) {
355
+ output = output + optimizationHints.join('');
356
+ }
357
+ this.observer?.onToolResult?.(augmentedCall, output);
358
+ this.recordToolHistory({
359
+ toolName: call.name,
360
+ args,
361
+ timestamp: Date.now(),
362
+ success: true,
363
+ hasOutput: hasNonEmptyOutput(output),
364
+ });
365
+ // Record successful execution
366
+ // Performance monitoring removed - no legacy components
367
+ return output;
368
+ }
369
+ catch (error) {
370
+ let formatted;
371
+ if (error instanceof ToolArgumentValidationError) {
372
+ formatted = error.message;
373
+ }
374
+ else {
375
+ const message = error instanceof Error ? error.message : String(error);
376
+ formatted = `Failed to run "${call.name}": ${message}`;
377
+ }
378
+ this.observer?.onToolError?.(augmentedCall, formatted);
379
+ this.recordToolHistory({
380
+ toolName: call.name,
381
+ args,
382
+ timestamp: Date.now(),
383
+ success: false,
384
+ hasOutput: hasNonEmptyOutput(formatted),
385
+ error: formatted,
386
+ });
387
+ // Record failed execution - no legacy performance monitoring
388
+ return formatted;
389
+ }
390
+ }
391
+ getCacheKey(call) {
392
+ return `${call.name}:${JSON.stringify(call.arguments)}`;
393
+ }
394
+ clearCache() {
395
+ this.cache.clear();
396
+ }
397
+ getCacheStats() {
398
+ let totalSize = 0;
399
+ for (const entry of this.cache.values()) {
400
+ totalSize += entry.result.length;
401
+ }
402
+ return {
403
+ size: totalSize,
404
+ entries: this.cache.size,
405
+ };
406
+ }
407
+ clearToolHistory() {
408
+ this.toolHistory.length = 0;
409
+ }
410
+ getToolHistory() {
411
+ return this.toolHistory;
412
+ }
413
+ recordToolHistory(entry) {
414
+ this.toolHistory.push(entry);
415
+ if (this.toolHistory.length > this.maxHistorySize) {
416
+ this.toolHistory.shift();
417
+ }
418
+ }
419
+ clearDiffSnapshots() {
420
+ this.diffSnapshots.length = 0;
421
+ }
422
+ getDiffSnapshots() {
423
+ return this.diffSnapshots;
424
+ }
425
+ addTool(definition, suiteId) {
426
+ if (!definition?.name?.trim()) {
427
+ throw new Error(`Tool names cannot be blank (suite "${suiteId}").`);
428
+ }
429
+ if (this.registry.has(definition.name)) {
430
+ const owner = this.registry.get(definition.name)?.suiteId ?? 'unknown';
431
+ throw new Error(`Tool "${definition.name}" already registered by suite "${owner}".`);
432
+ }
433
+ this.registry.set(definition.name, {
434
+ suiteId,
435
+ definition,
436
+ });
437
+ this.registrationOrder.push(definition.name);
438
+ }
439
+ removeFromOrder(name) {
440
+ const index = this.registrationOrder.indexOf(name);
441
+ if (index >= 0) {
442
+ this.registrationOrder.splice(index, 1);
443
+ }
444
+ }
445
+ recordDiffSnapshot(args, output) {
446
+ const command = this.findGitDiffCommand(args);
447
+ if (!command || !output) {
448
+ return;
449
+ }
450
+ this.diffSnapshots.push({
451
+ command,
452
+ output: safeTruncate(output, this.maxDiffSnapshotLength, 'git-diff'),
453
+ timestamp: Date.now(),
454
+ });
455
+ if (this.diffSnapshots.length > this.maxDiffSnapshots) {
456
+ this.diffSnapshots.shift();
457
+ }
458
+ }
459
+ findGitDiffCommand(args) {
460
+ for (const command of this.extractCommands(args)) {
461
+ if (this.isGitDiffCommand(command)) {
462
+ return command;
463
+ }
464
+ }
465
+ return null;
466
+ }
467
+ extractCommands(args) {
468
+ const commands = [];
469
+ const command = args['command'];
470
+ if (typeof command === 'string' && command.trim()) {
471
+ commands.push(command.trim());
472
+ }
473
+ const commandList = args['commands'];
474
+ if (Array.isArray(commandList)) {
475
+ for (const value of commandList) {
476
+ if (typeof value === 'string' && value.trim()) {
477
+ commands.push(value.trim());
478
+ }
479
+ }
480
+ }
481
+ return commands;
482
+ }
483
+ isGitDiffCommand(command) {
484
+ return /\bgit\s+(?:--no-pager\s+)?(?:diff|show)\b/i.test(command);
485
+ }
486
+ }
487
+ export function createDefaultToolRuntime(context, toolSuites = [], options = {}) {
488
+ // Start with no default introspection tools - they waste tokens
489
+ // Model knows its capabilities from tool definitions
490
+ const runtime = new ToolRuntime([], options);
491
+ for (const suite of toolSuites) {
492
+ runtime.registerSuite(suite);
493
+ }
494
+ return runtime;
495
+ }
496
+ // Removed unused introspection tools (context_snapshot, capabilities_overview, profile_details)
497
+ // Model already knows capabilities from tool definitions; these just wasted tokens
498
+ function hasNonEmptyOutput(output) {
499
+ return typeof output === 'string' && output.trim().length > 0;
500
+ }
501
+ function normalizeToolArguments(value) {
502
+ if (value instanceof Map) {
503
+ return Object.fromEntries(value.entries());
504
+ }
505
+ if (isRecord(value)) {
506
+ return value;
507
+ }
508
+ if (typeof value === 'string') {
509
+ const trimmed = value.trim();
510
+ if (!trimmed) {
511
+ return {};
512
+ }
513
+ try {
514
+ const parsed = JSON.parse(trimmed);
515
+ return isRecord(parsed) ? parsed : {};
516
+ }
517
+ catch {
518
+ return {};
519
+ }
520
+ }
521
+ return {};
522
+ }
523
+ function isRecord(value) {
524
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
525
+ }
526
+ //# sourceMappingURL=toolRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRuntime.js","sourceRoot":"","sources":["../../src/core/toolRuntime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Turn governor — a bounded, stall-aware spine for the auto-continue loop.
3
+ *
4
+ * The auto-continue loop (interactiveShell processPrompt → processPrompt
5
+ * recursion) was UNBOUNDED: an agent that couldn't satisfy the completion
6
+ * heuristic ran forever, re-trying dead ends with no escalation. This caps the
7
+ * turns per user request and detects a stall (the same observable work
8
+ * repeating with no new progress), so the loop yields to the user WITH state
9
+ * instead of thrashing for hours. It also derives the next continuation from
10
+ * the agent's live TODO plan (which the loop previously ignored).
11
+ *
12
+ * Pure + dependency-free so it's unit-testable; the shell instantiates one per
13
+ * user request, resets on a fresh prompt, calls recordTurn() each auto-continue,
14
+ * and breaks on check().stop.
15
+ */
16
+ export interface TurnMetrics {
17
+ /** tools invoked during the turn */
18
+ toolsUsed: string[];
19
+ /** files written/edited during the turn */
20
+ filesModified: string[];
21
+ /** failing test/build signal in the turn output, or null */
22
+ failingSignal: string | null;
23
+ }
24
+ export interface GovernorVerdict {
25
+ stop: boolean;
26
+ reason: 'limit' | 'stall' | null;
27
+ turn: number;
28
+ }
29
+ /** Stable signature of a turn's observable work — the same signature repeating means no progress. */
30
+ export declare function fingerprintTurn(m: TurnMetrics): string;
31
+ export declare class TurnGovernor {
32
+ private turn;
33
+ private fps;
34
+ private readonly max;
35
+ private readonly stallWindow;
36
+ constructor(opts?: {
37
+ maxAutoTurns?: number;
38
+ stallWindow?: number;
39
+ });
40
+ /** A new user request starts a fresh turn budget. */
41
+ reset(): void;
42
+ /** Record one completed auto-continue turn. */
43
+ recordTurn(m: TurnMetrics): void;
44
+ /** Whether the auto-continue loop should stop now, and why. */
45
+ check(): GovernorVerdict;
46
+ get turnCount(): number;
47
+ get maxTurns(): number;
48
+ }
49
+ export interface TodoLike {
50
+ content?: string;
51
+ status?: string;
52
+ activeForm?: string;
53
+ }
54
+ /** Todos still to do (pending or in-progress). */
55
+ export declare function pendingTodos(todos: ReadonlyArray<TodoLike> | null | undefined): TodoLike[];
56
+ /**
57
+ * The next auto-continue prompt derived from the plan — the in-progress item
58
+ * (or first pending). Prefixed IMPORTANT: so the loop treats it as an
59
+ * auto-continue (not a fresh user request) and the no-docs guard holds.
60
+ * Returns null when the plan has no pending work.
61
+ */
62
+ export declare function nextTodoPrompt(todos: ReadonlyArray<TodoLike> | null | undefined): string | null;
63
+ //# sourceMappingURL=turnGovernor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turnGovernor.d.ts","sourceRoot":"","sources":["../../src/core/turnGovernor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qGAAqG;AACrG,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAItD;AASD,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,IAAI,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAKtE,qDAAqD;IACrD,KAAK,IAAI,IAAI;IAKb,+CAA+C;IAC/C,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAMhC,+DAA+D;IAC/D,KAAK,IAAI,eAAe;IAiBxB,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF;AAKD,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,EAAE,CAE1F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO/F"}