@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,571 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Prompt — Ink-rendered input box.
4
+ *
5
+ * Phase 2 of the Ink migration. Real text input via React reducer + Ink's
6
+ * useInput. The reducer is the single source of truth for buffer + cursor;
7
+ * keystrokes dispatch actions; Ink's reconciler renders. Frame coalescing,
8
+ * visual-column handling, and resize bookkeeping are owned by Ink.
9
+ *
10
+ * Render contract: this component is the only writer for the prompt row.
11
+ * No `process.stdout.write` side-effects — submission and cancellation
12
+ * surface through the `onSubmit` / `onCancel` props so the host can pipe
13
+ * to the existing event bus.
14
+ *
15
+ * Paste sanitization mirrors UnifiedUIRenderer.sanitizePasteContent: ANSI
16
+ * escapes, raw C0 control bytes, and bracketed-paste markers are stripped
17
+ * at intake (issues #3 + #8). The sanitizer runs on every batch of text
18
+ * Ink hands us, so a malicious paste can't survive into the buffer.
19
+ */
20
+ import { useReducer, useEffect, useRef } from 'react';
21
+ import { Box, Text, useInput } from 'ink';
22
+ import { activeMentionPartial, rankFileMatches, applyMentionCompletion } from '../../core/fileMentions.js';
23
+ import { activeSlashPartial, rankCommandMatches, applySlashCompletion } from '../../core/slashCommands.js';
24
+ import { PasteRegistry, pasteLineCount } from './pasteBuffer.js';
25
+ function sanitize(text) {
26
+ if (!text)
27
+ return '';
28
+ // Full ANSI sequences (with the \x1b prefix intact).
29
+ let s = text.replace(/\x1b\[[0-9;?]*[A-Za-z~]|\x1b\][^\x07]*\x07|\x1b[PX^_][^\x1b]*\x1b\\|\x1b./g, '');
30
+ // Ink's parseKeypress sometimes splits a chunk such that the \x1b is
31
+ // consumed but the body lands in the next input string (e.g. "[2J" or
32
+ // "[201~"). Strip those leaked CSI bodies too. The pattern matches the
33
+ // standard CSI body shape; legitimate user text rarely matches.
34
+ s = s.replace(/\[[0-9;?]*[A-Za-z~]/g, '');
35
+ s = s.replace(/\r\n/g, '\n');
36
+ // Strip C0 controls EXCEPT the ones the walk-loop in useInput acts on:
37
+ // \x01 (Ctrl+A) → home, \x03 (Ctrl+C) → cancel, \x05 (Ctrl+E) → end,
38
+ // \x09 (tab, accepted as text), \x0a (\n) → submit, \x0d (\r) → submit.
39
+ // Everything else is hostile (NUL, BEL, BS, VT, FF, etc.).
40
+ s = s.replace(/[\x00\x02\x04\x06\x07\x08\x0b\x0c\x0e-\x1f\x7f]/g, '');
41
+ return s;
42
+ }
43
+ function reducer(state, action) {
44
+ switch (action.type) {
45
+ case 'insert': {
46
+ const clean = sanitize(action.text);
47
+ if (!clean)
48
+ return state;
49
+ const before = state.text.slice(0, state.cursor);
50
+ const after = state.text.slice(state.cursor);
51
+ return { text: before + clean + after, cursor: state.cursor + clean.length };
52
+ }
53
+ // Internally-generated, already-safe text (the paste placeholder token).
54
+ // The token starts with `[P`, which the leaked-CSI-body stripper in
55
+ // sanitize() would mangle, so it must skip that pass.
56
+ case 'insertRaw': {
57
+ if (!action.text)
58
+ return state;
59
+ const before = state.text.slice(0, state.cursor);
60
+ const after = state.text.slice(state.cursor);
61
+ return { text: before + action.text + after, cursor: state.cursor + action.text.length };
62
+ }
63
+ case 'backspace': {
64
+ if (state.cursor === 0)
65
+ return state;
66
+ const before = state.text.slice(0, state.cursor - 1);
67
+ const after = state.text.slice(state.cursor);
68
+ return { text: before + after, cursor: state.cursor - 1 };
69
+ }
70
+ case 'delete': {
71
+ if (state.cursor >= state.text.length)
72
+ return state;
73
+ const before = state.text.slice(0, state.cursor);
74
+ const after = state.text.slice(state.cursor + 1);
75
+ return { text: before + after, cursor: state.cursor };
76
+ }
77
+ case 'left':
78
+ return { ...state, cursor: Math.max(0, state.cursor - 1) };
79
+ case 'right':
80
+ return { ...state, cursor: Math.min(state.text.length, state.cursor + 1) };
81
+ case 'home':
82
+ return { ...state, cursor: 0 };
83
+ case 'end':
84
+ return { ...state, cursor: state.text.length };
85
+ case 'killToStart':
86
+ // Ctrl+U — delete everything left of the cursor.
87
+ return { text: state.text.slice(state.cursor), cursor: 0 };
88
+ case 'killToEnd':
89
+ // Ctrl+K — delete from the cursor to end of line.
90
+ return { text: state.text.slice(0, state.cursor), cursor: state.cursor };
91
+ case 'killWordBack': {
92
+ // Ctrl+W — delete the whitespace + word immediately left of the cursor.
93
+ if (state.cursor === 0)
94
+ return state;
95
+ let i = state.cursor;
96
+ while (i > 0 && /\s/.test(state.text[i - 1]))
97
+ i--;
98
+ while (i > 0 && !/\s/.test(state.text[i - 1]))
99
+ i--;
100
+ return { text: state.text.slice(0, i) + state.text.slice(state.cursor), cursor: i };
101
+ }
102
+ case 'set':
103
+ return { text: action.text, cursor: action.cursor ?? action.text.length };
104
+ default:
105
+ return state;
106
+ }
107
+ }
108
+ export const Prompt = ({ initial = '', prefix = '> ', secret = false, onSubmit, onCancel, onCyclePermissionMode, history, onExpandToolResult, onEscape, onShowShortcuts, panelOpen, onDismissPanel, completionFiles }) => {
109
+ // Source of truth lives in a ref, not React state. useReducer's state
110
+ // commit is deferred to the next render; Ink can fire useInput multiple
111
+ // times in the same JS turn (parseKeypress splits a chunk into N
112
+ // events), and every closure would read the same stale state. Apply
113
+ // the reducer synchronously to the ref, then force a re-render so the
114
+ // UI catches up. The bumper is the only useState-style hook needed.
115
+ const stateRef = useRef({ text: initial, cursor: initial.length });
116
+ const [, bumpRender] = useReducer((n) => n + 1, 0);
117
+ // Shell history navigation. index === -1 means "current draft" (not in
118
+ // history); 0 is the newest entry, increasing toward older. `draft` holds
119
+ // the in-progress buffer saved when nav starts, restored on Down past newest.
120
+ const histRef = useRef({ index: -1, draft: '' });
121
+ // Ctrl+R reverse-i-search. While active, typed chars build `query`; the
122
+ // buffer mirrors the `idx`-th history entry containing it (0 = newest match,
123
+ // Ctrl+R steps older). `saved` is the pre-search buffer, restored on cancel.
124
+ const searchRef = useRef({ active: false, query: '', idx: 0, saved: '' });
125
+ // @-mention completion menu. idx = highlighted match; partialFor tracks the
126
+ // partial the idx belongs to (reset on change); dismissedFor is the partial
127
+ // the user pressed Esc on (re-opens when the partial changes).
128
+ const compRef = useRef({ idx: 0, partialFor: null, dismissedFor: null });
129
+ // `/`-command completion menu — same shape/UX as the @-mention menu above.
130
+ const slashRef = useRef({ idx: 0, partialFor: null, dismissedFor: null });
131
+ // Large-paste registry: a multi-line paste collapses to a placeholder token
132
+ // in the buffer; `submit` re-expands it so the model gets the full text.
133
+ const pasteRef = useRef(new PasteRegistry());
134
+ // Expand any collapsed pastes before handing the buffer to the host, then
135
+ // reset the registry for the next composition.
136
+ const submit = (raw) => {
137
+ onSubmit(pasteRef.current.expand(raw));
138
+ pasteRef.current.clear();
139
+ };
140
+ // @-mention completion state from the LIVE buffer. Called in useInput (so it
141
+ // never reads a stale render-time capture) and in the render (to draw the
142
+ // menu). Idempotent: re-resets idx only when the partial actually changes.
143
+ const completion = () => {
144
+ const partial = activeMentionPartial(stateRef.current.text, stateRef.current.cursor);
145
+ const matches = partial !== null ? rankFileMatches(partial, completionFiles ?? [], 6) : [];
146
+ const c = compRef.current;
147
+ if (partial !== c.partialFor) {
148
+ c.partialFor = partial;
149
+ c.idx = 0;
150
+ if (c.dismissedFor !== partial)
151
+ c.dismissedFor = null;
152
+ }
153
+ return { partial, matches, open: matches.length > 0 && c.dismissedFor !== partial };
154
+ };
155
+ // `/`-command completion state from the LIVE buffer (mirrors completion()).
156
+ const slashCompletion = () => {
157
+ const partial = activeSlashPartial(stateRef.current.text, stateRef.current.cursor);
158
+ const matches = partial !== null ? rankCommandMatches(partial, 8) : [];
159
+ const c = slashRef.current;
160
+ if (partial !== c.partialFor) {
161
+ c.partialFor = partial;
162
+ c.idx = 0;
163
+ if (c.dismissedFor !== partial)
164
+ c.dismissedFor = null;
165
+ }
166
+ return { partial, matches, open: matches.length > 0 && c.dismissedFor !== partial };
167
+ };
168
+ // Sync the ref to externally-driven `initial` changes. The ref is
169
+ // only initialised once on mount, so when the host clears the buffer
170
+ // after a submit (sets `initial=''` via prop) the ref still holds
171
+ // the old text and the prompt keeps showing it. Watching `initial`
172
+ // here resets the ref whenever it transitions to a new value the
173
+ // user didn't type — the typical case is buffer clearing after
174
+ // submit. We don't reset when `initial` matches what's already in
175
+ // the ref so user keystrokes between renders aren't clobbered.
176
+ useEffect(() => {
177
+ if (initial !== stateRef.current.text) {
178
+ stateRef.current = { text: initial, cursor: initial.length };
179
+ // The buffer was replaced from outside (typically cleared after submit);
180
+ // any collapsed-paste tokens left in the old buffer are now stale.
181
+ pasteRef.current.clear();
182
+ bumpRender();
183
+ }
184
+ }, [initial]);
185
+ const apply = (action) => {
186
+ stateRef.current = reducer(stateRef.current, action);
187
+ bumpRender();
188
+ };
189
+ useInput((input, key) => {
190
+ if (process.env['TRENCHWORK_INK_DEBUG'] === '1') {
191
+ process.stderr.write(`KEY: input=${JSON.stringify(input)} ret=${key.return} bs=${key.backspace} ctrl=${key.ctrl} tab=${key.tab} shift=${key.shift}\n`);
192
+ }
193
+ // A dismissable panel (/help, /cost, …) is up: any key dismisses it and is
194
+ // consumed (honors the "press any key to dismiss" hint). Claude Code parity.
195
+ if (panelOpen) {
196
+ onDismissPanel?.();
197
+ return;
198
+ }
199
+ const hist = history ?? [];
200
+ // Reverse-i-search (Ctrl+R) owns input while active. Newest→oldest matches
201
+ // of `query`; the buffer mirrors the current match.
202
+ const reverseMatches = (q) => {
203
+ if (!q)
204
+ return [];
205
+ const out = [];
206
+ for (let i = hist.length - 1; i >= 0; i--)
207
+ if (hist[i].includes(q))
208
+ out.push(hist[i]);
209
+ return out;
210
+ };
211
+ const s = searchRef.current;
212
+ if (s.active) {
213
+ const showMatch = () => {
214
+ const ms = reverseMatches(s.query);
215
+ if (ms.length) {
216
+ s.idx = Math.min(s.idx, ms.length - 1);
217
+ apply({ type: 'set', text: ms[s.idx] });
218
+ }
219
+ else {
220
+ s.idx = 0;
221
+ apply({ type: 'set', text: '' });
222
+ }
223
+ };
224
+ if (key.return) {
225
+ s.active = false;
226
+ const text = stateRef.current.text;
227
+ apply({ type: 'set', text: '', cursor: 0 });
228
+ submit(text);
229
+ return;
230
+ }
231
+ if (key.escape || (key.ctrl && (input === 'g' || input === 'G')) || (key.ctrl && (input === 'c' || input === 'C'))) {
232
+ s.active = false;
233
+ apply({ type: 'set', text: s.saved }); // cancel — restore the pre-search buffer
234
+ return;
235
+ }
236
+ if (key.ctrl && (input === 'r' || input === 'R')) {
237
+ s.idx += 1;
238
+ showMatch();
239
+ return;
240
+ }
241
+ if (key.backspace || key.delete) {
242
+ s.query = s.query.slice(0, -1);
243
+ s.idx = 0;
244
+ showMatch();
245
+ return;
246
+ }
247
+ // A printable character refines the query. Control/navigation keys
248
+ // accept the current match and leave search so the user can edit it.
249
+ const clean = input ? sanitize(input) : '';
250
+ if (clean && !key.ctrl && !key.tab && !key.upArrow && !key.downArrow && !key.leftArrow && !key.rightArrow) {
251
+ s.query += clean;
252
+ s.idx = 0;
253
+ showMatch();
254
+ return;
255
+ }
256
+ s.active = false;
257
+ bumpRender();
258
+ return;
259
+ }
260
+ // Shift+Tab (CSI \x1b[Z → key.tab && key.shift) cycles the permission
261
+ // mode. Caught before any text path so the escape never lands as text.
262
+ if (key.tab && key.shift) {
263
+ onCyclePermissionMode?.();
264
+ return;
265
+ }
266
+ if (key.ctrl && (input === 'r' || input === 'R')) {
267
+ searchRef.current = { active: true, query: '', idx: 0, saved: stateRef.current.text };
268
+ bumpRender();
269
+ return;
270
+ }
271
+ // `/`-command palette. Open when the buffer is a `/<partial>` first token
272
+ // with matches and wasn't Esc-dismissed. UX matches Claude Code: ↑/↓ move,
273
+ // Esc dismisses, Tab fills (`/command ` — for commands that take an arg),
274
+ // and Enter RUNS the highlighted command (completing the partial first, so
275
+ // `/cont`+Enter or an arrow-selected entry runs the right command — not the
276
+ // raw partial). Anchored at the buffer start so it never overlaps an
277
+ // @-mention (which needs a space before the @).
278
+ {
279
+ const sc = slashCompletion();
280
+ if (sc.open) {
281
+ const pick = sc.matches[Math.min(slashRef.current.idx, sc.matches.length - 1)];
282
+ if (key.return) {
283
+ const r = applySlashCompletion(stateRef.current.text, stateRef.current.cursor, pick.command);
284
+ slashRef.current.partialFor = null;
285
+ slashRef.current.dismissedFor = null;
286
+ apply({ type: 'set', text: '', cursor: 0 });
287
+ onSubmit(r.text.trimEnd());
288
+ return;
289
+ }
290
+ if (key.tab && !key.shift) {
291
+ const r = applySlashCompletion(stateRef.current.text, stateRef.current.cursor, pick.command);
292
+ slashRef.current.partialFor = null;
293
+ slashRef.current.dismissedFor = null;
294
+ apply({ type: 'set', text: r.text, cursor: r.cursor });
295
+ return;
296
+ }
297
+ if (key.upArrow) {
298
+ slashRef.current.idx = Math.max(0, slashRef.current.idx - 1);
299
+ bumpRender();
300
+ return;
301
+ }
302
+ if (key.downArrow) {
303
+ slashRef.current.idx = Math.min(sc.matches.length - 1, slashRef.current.idx + 1);
304
+ bumpRender();
305
+ return;
306
+ }
307
+ if (key.escape) {
308
+ slashRef.current.dismissedFor = sc.partial;
309
+ bumpRender();
310
+ return;
311
+ }
312
+ }
313
+ }
314
+ // @-mention completion menu. Open when an @<partial> at the cursor has
315
+ // matches and wasn't Esc-dismissed. Owns Tab/Enter (accept), Up/Down
316
+ // (move highlight), Esc (dismiss). Typing/backspace fall through to refine.
317
+ {
318
+ const comp = completion();
319
+ if (comp.open) {
320
+ const pick = comp.matches[Math.min(compRef.current.idx, comp.matches.length - 1)];
321
+ if ((key.tab && !key.shift) || key.return) {
322
+ const r = applyMentionCompletion(stateRef.current.text, stateRef.current.cursor, pick);
323
+ compRef.current.partialFor = null;
324
+ compRef.current.dismissedFor = null;
325
+ apply({ type: 'set', text: r.text, cursor: r.cursor });
326
+ return;
327
+ }
328
+ if (key.upArrow) {
329
+ compRef.current.idx = Math.max(0, compRef.current.idx - 1);
330
+ bumpRender();
331
+ return;
332
+ }
333
+ if (key.downArrow) {
334
+ compRef.current.idx = Math.min(comp.matches.length - 1, compRef.current.idx + 1);
335
+ bumpRender();
336
+ return;
337
+ }
338
+ if (key.escape) {
339
+ compRef.current.dismissedFor = comp.partial;
340
+ bumpRender();
341
+ return;
342
+ }
343
+ }
344
+ }
345
+ // Up/Down — shell history navigation (per session). Older on Up, newer on
346
+ // Down; Down past the newest restores the saved draft. (`hist` is declared
347
+ // at the top of this handler for the reverse-search block above.)
348
+ if (key.upArrow) {
349
+ if (hist.length === 0)
350
+ return;
351
+ const h = histRef.current;
352
+ if (h.index === -1)
353
+ h.draft = stateRef.current.text;
354
+ h.index = Math.min(h.index + 1, hist.length - 1);
355
+ apply({ type: 'set', text: hist[hist.length - 1 - h.index] ?? '' });
356
+ return;
357
+ }
358
+ if (key.downArrow) {
359
+ const h = histRef.current;
360
+ if (h.index <= 0) {
361
+ if (h.index === 0) {
362
+ h.index = -1;
363
+ apply({ type: 'set', text: h.draft });
364
+ }
365
+ return;
366
+ }
367
+ h.index -= 1;
368
+ apply({ type: 'set', text: hist[hist.length - 1 - h.index] ?? '' });
369
+ return;
370
+ }
371
+ // Any other key is an edit/action — exit history navigation so the next
372
+ // Up starts from the current buffer again.
373
+ histRef.current.index = -1;
374
+ if (key.return) {
375
+ const text = stateRef.current.text;
376
+ // Multi-line input (Claude Code parity): Option/Alt+Enter inserts a
377
+ // newline at the cursor, and a line ending in a backslash continues onto
378
+ // the next line (the trailing `\` becomes the newline). Either keeps
379
+ // editing instead of submitting.
380
+ if (key.meta) {
381
+ apply({ type: 'insert', text: '\n' });
382
+ return;
383
+ }
384
+ if (text.endsWith('\\')) {
385
+ apply({ type: 'set', text: text.slice(0, -1) + '\n', cursor: text.length });
386
+ return;
387
+ }
388
+ // Clear our own buffer on submit. The text lives in stateRef (typed
389
+ // keystrokes), not in the `initial` prop — for typed input the host's
390
+ // buffer stays '' the whole time, so the `initial` useEffect never
391
+ // re-fires and can't clear us. Without this self-clear, every submitted
392
+ // message stays in the box and the next one appends ("helloworld").
393
+ apply({ type: 'set', text: '', cursor: 0 });
394
+ onSubmit(text);
395
+ return;
396
+ }
397
+ if (key.ctrl && (input === 'c' || input === 'C')) {
398
+ if (stateRef.current.text.length === 0) {
399
+ onCancel();
400
+ }
401
+ else {
402
+ apply({ type: 'set', text: '', cursor: 0 });
403
+ }
404
+ return;
405
+ }
406
+ if (key.leftArrow)
407
+ return apply({ type: 'left' });
408
+ if (key.rightArrow)
409
+ return apply({ type: 'right' });
410
+ if (key.backspace)
411
+ return apply({ type: 'backspace' });
412
+ if (key.delete)
413
+ return apply({ type: 'delete' }); // forward-delete (Del) removes the char AT the cursor
414
+ if (key.ctrl && (input === 'a' || input === 'A'))
415
+ return apply({ type: 'home' });
416
+ if (key.ctrl && (input === 'e' || input === 'E'))
417
+ return apply({ type: 'end' });
418
+ if (key.ctrl && (input === 'u' || input === 'U'))
419
+ return apply({ type: 'killToStart' });
420
+ if (key.ctrl && (input === 'k' || input === 'K'))
421
+ return apply({ type: 'killToEnd' });
422
+ if (key.ctrl && (input === 'w' || input === 'W'))
423
+ return apply({ type: 'killWordBack' });
424
+ if (key.ctrl && (input === 'o' || input === 'O')) {
425
+ onExpandToolResult?.();
426
+ return;
427
+ }
428
+ // Esc with no menu/search open → interrupt a running turn (makes the
429
+ // spinner's "esc to interrupt" promise real). No-op when idle (the host
430
+ // guards on isProcessing). Menu/search Esc is handled in their blocks above.
431
+ if (key.escape) {
432
+ onEscape?.();
433
+ return;
434
+ }
435
+ // `?` on an EMPTY buffer shows the shortcuts panel — makes the dim
436
+ // "? for shortcuts" hint real (Claude Code parity). With any text typed,
437
+ // `?` is a literal character, so normal prompts containing `?` are fine.
438
+ if (input === '?' && stateRef.current.text.length === 0 && !key.ctrl && !key.meta) {
439
+ onShowShortcuts?.();
440
+ return;
441
+ }
442
+ // Ink hands us paste / pre-buffered chunks as a single `input` string.
443
+ // parseKeypress only flags key.return / key.ctrl when the chunk is a
444
+ // pure single key. When a control byte is embedded mid-chunk (e.g.
445
+ // 'world\x01' or '[2J' after Ink ate the \x1b prefix) the flags stay
446
+ // false and the raw bytes sit inside `input`. Sanitise the WHOLE
447
+ // chunk first so multi-byte ANSI sequences like '[2J' are stripped
448
+ // as one, then walk for embedded \r / Ctrl+letter and insert the
449
+ // rest. Splitting into per-char dispatches without sanitising the
450
+ // chunk first would let CSI bodies through.
451
+ if (input) {
452
+ const cleaned = sanitize(input);
453
+ // A large multi-line paste arrives as one chunk: collapse it to a compact
454
+ // `[Pasted text #N +M lines]` placeholder so it doesn't flood the box, and
455
+ // hold the full text in the registry for re-expansion at submit (Claude
456
+ // Code parity). Reverse-search owns input while active, so skip there.
457
+ const pasteLines = pasteLineCount(cleaned);
458
+ if (pasteLines !== null && !searchRef.current.active) {
459
+ const token = pasteRef.current.register(cleaned, pasteLines);
460
+ apply({ type: 'insertRaw', text: token });
461
+ return;
462
+ }
463
+ // Iterate by code point ([...x]) so surrogate-pair emoji stay intact.
464
+ const chars = [...cleaned];
465
+ for (let i = 0; i < chars.length; i++) {
466
+ const ch = chars[i];
467
+ const code = ch.charCodeAt(0);
468
+ if (ch === '\r' || ch === '\n') {
469
+ // A TERMINATING newline (nothing but newlines after it) is the user
470
+ // pressing Enter → submit. An INTERNAL newline means a multi-line
471
+ // PASTE arrived as one chunk → insert it so the whole paste lands in
472
+ // the buffer instead of submitting line 1 and dropping the rest.
473
+ const rest = chars.slice(i + 1).join('');
474
+ if (!rest || /^[\r\n]*$/.test(rest)) {
475
+ const text = stateRef.current.text;
476
+ apply({ type: 'set', text: '', cursor: 0 });
477
+ submit(text);
478
+ return;
479
+ }
480
+ apply({ type: 'insert', text: '\n' });
481
+ continue;
482
+ }
483
+ if (code === 0x03) {
484
+ if (stateRef.current.text.length === 0) {
485
+ onCancel();
486
+ return;
487
+ }
488
+ apply({ type: 'set', text: '', cursor: 0 });
489
+ pasteRef.current.clear();
490
+ continue;
491
+ }
492
+ if (code === 0x01) {
493
+ apply({ type: 'home' });
494
+ continue;
495
+ }
496
+ if (code === 0x05) {
497
+ apply({ type: 'end' });
498
+ continue;
499
+ }
500
+ // sanitize() above already stripped C0 bytes other than the
501
+ // shortlist we just handled, so this insert is always safe.
502
+ apply({ type: 'insert', text: ch });
503
+ }
504
+ }
505
+ });
506
+ // Snapshot the ref into a local for the JSX below. Outside the input
507
+ // handler the latest committed render value is the right thing to draw.
508
+ const state = stateRef.current;
509
+ // Render the buffer with a visible cursor block. In secret mode we
510
+ // collapse the buffer to • characters but keep the cursor markers so
511
+ // the user can still see where they are editing.
512
+ // Children must be non-empty strings — empty <Text> siblings collide
513
+ // on React's auto-generated keys and the parent fails to mount, which
514
+ // also prevents useInput's effect from running. Render a single space
515
+ // when a slice would be empty.
516
+ const display = secret ? '•'.repeat(state.text.length) : state.text;
517
+ // Leading '!' runs the line in bash (Claude Code parity); tint the prompt
518
+ // mark so the mode is visible before Enter.
519
+ const bashMode = state.text.startsWith('!');
520
+ // Multi-line aware: split on '\n' and locate the cursor's line/column so the
521
+ // inverse cursor block lands on the right row. Continuation lines drop the
522
+ // '> ' mark (indented two cols), matching Claude Code.
523
+ const dispLines = display.split('\n');
524
+ let curLine = 0;
525
+ let curCol = state.cursor;
526
+ for (let i = 0; i < dispLines.length; i++) {
527
+ if (curCol <= dispLines[i].length) {
528
+ curLine = i;
529
+ break;
530
+ }
531
+ curCol -= dispLines[i].length + 1; // +1 for the consumed '\n'
532
+ curLine = i + 1;
533
+ }
534
+ // Surface state via a hidden marker line for subprocess testing.
535
+ // TRENCHWORK_INK_DEBUG=1 enables a `STATE: <buffer>|<cursor>` annotation
536
+ // that the test harness greps for. Off by default.
537
+ useEffect(() => {
538
+ if (process.env['TRENCHWORK_INK_DEBUG'] === '1') {
539
+ process.stderr.write(`STATE: ${state.text}|${state.cursor}\n`);
540
+ }
541
+ }, [state.text, state.cursor]);
542
+ const search = searchRef.current;
543
+ const comp = completion();
544
+ const slash = slashCompletion();
545
+ const inputRow = (_jsx(Box, { flexDirection: "column", children: dispLines.map((ln, i) => {
546
+ const mark = i === 0 ? prefix : ' ';
547
+ const markEl = i === 0 && bashMode
548
+ ? _jsx(Text, { color: "#ff6a1f", children: mark }, "m")
549
+ : _jsx(Text, { dimColor: true, children: mark }, "m");
550
+ if (i === curLine) {
551
+ return (_jsxs(Box, { children: [markEl, _jsx(Text, { children: ln.slice(0, curCol) || ' ' }, "b"), _jsx(Text, { inverse: true, children: ln.slice(curCol, curCol + 1) || ' ' }, "c"), _jsx(Text, { children: ln.slice(curCol + 1) || ' ' }, "a")] }, `il-${i}`));
552
+ }
553
+ return (_jsxs(Box, { children: [markEl, _jsx(Text, { children: ln || ' ' }, "t")] }, `il-${i}`));
554
+ }) }, "input"));
555
+ if (search.active) {
556
+ // bash-style reverse-i-search status line above the input.
557
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { children: _jsx(Text, { dimColor: true, children: `(reverse-i-search)\`${search.query}\`:` }) }, "rsearch"), inputRow] }));
558
+ }
559
+ if (slash.open) {
560
+ // `/`-command palette under the input — ▸ marks the highlighted command,
561
+ // with its description dimmed (↑/↓ move, Tab/Enter accept, Esc dismiss).
562
+ return (_jsxs(Box, { flexDirection: "column", children: [inputRow, _jsx(Box, { flexDirection: "column", paddingLeft: 2, children: slash.matches.map((c, i) => (_jsxs(Box, { children: [_jsx(Text, { color: i === slashRef.current.idx ? '#ff6a1f' : undefined, children: (i === slashRef.current.idx ? '▸ ' : ' ') + c.command }), _jsx(Text, { dimColor: true, children: ' ' + c.description })] }, `sm-${i}`))) }, "smenu")] }));
563
+ }
564
+ if (comp.open) {
565
+ // @-mention completion menu under the input — ▸ marks the highlighted file
566
+ // (↑/↓ to move, Tab/Enter to accept, Esc to dismiss).
567
+ return (_jsxs(Box, { flexDirection: "column", children: [inputRow, _jsx(Box, { flexDirection: "column", paddingLeft: 2, children: comp.matches.map((f, i) => (_jsx(Box, { children: _jsx(Text, { color: i === compRef.current.idx ? '#ff6a1f' : undefined, children: (i === compRef.current.idx ? '▸ ' : ' ') + '@' + f }) }, `cm-${i}`))) }, "cmenu")] }));
568
+ }
569
+ return inputRow;
570
+ };
571
+ //# sourceMappingURL=Prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Prompt.js","sourceRoot":"","sources":["../../../src/ui/ink/Prompt.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * StatusLine — Ink-rendered working line. The CLI's renderer is Ink-only;
3
+ * this component owns the spinner / activity message / mode chips row.
4
+ *
5
+ * Claude Code shape (see src/ui/CLAUDE_CODE_UX.md): a sparkle that animates
6
+ * through `· ✢ ✳ ✶ ✻ ✽`, the current activity, then dim meta
7
+ * `(Ns · ↑ X tokens · esc to interrupt)`. A second dim line carries the mode
8
+ * chips. The component self-ticks (its own interval) so the sparkle spins and
9
+ * the elapsed counter advances between host rerenders — Ink reconciles it to a
10
+ * stable fiber, so the interval survives the controller's prop updates.
11
+ *
12
+ * Render contract: this component is the *only* writer for its rows. No
13
+ * console.log / process.stdout.write side-effects.
14
+ */
15
+ import React from 'react';
16
+ export interface StatusLineProps {
17
+ /** Active line shown next to the spinner. Empty/undefined hides the row. */
18
+ message?: string | null;
19
+ /** Optional secondary line (mode chips). */
20
+ modeMessage?: string | null;
21
+ /** Animate the sparkle + show elapsed/token meta. */
22
+ spinning?: boolean;
23
+ /** ms timestamp the current activity began, for the elapsed counter. */
24
+ startTime?: number | null;
25
+ /** Cumulative output tokens, for the `↑ X tokens` meta. */
26
+ tokensUsed?: number | null;
27
+ /**
28
+ * When the spinner is showing a generic "thinking" state (no specific tool
29
+ * activity), replace `message` with a whimsical gerund that rotates over time
30
+ * — Claude Code parity (CLAUDE_CODE_UX.md §4).
31
+ */
32
+ thinkingGerund?: boolean;
33
+ }
34
+ export declare const StatusLine: React.FC<StatusLineProps>;
35
+ //# sourceMappingURL=StatusLine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusLine.d.ts","sourceRoot":"","sources":["../../../src/ui/ink/StatusLine.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAYD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAyDhD,CAAC"}