@ebowwa/coder 0.7.63 → 0.7.64

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 (341) hide show
  1. package/dist/core/__tests__/permissions.test.d.ts +12 -0
  2. package/dist/core/__tests__/permissions.test.d.ts.map +1 -0
  3. package/dist/core/__tests__/permissions.test.js +851 -0
  4. package/dist/core/agent-loop/__tests__/compaction.test.d.ts +5 -0
  5. package/dist/core/agent-loop/__tests__/compaction.test.d.ts.map +1 -0
  6. package/dist/core/agent-loop/__tests__/compaction.test.js +209 -0
  7. package/dist/core/agent-loop/__tests__/formatters.test.d.ts +5 -0
  8. package/dist/core/agent-loop/__tests__/formatters.test.d.ts.map +1 -0
  9. package/dist/core/agent-loop/__tests__/formatters.test.js +195 -0
  10. package/dist/core/agent-loop/__tests__/index.test.d.ts +5 -0
  11. package/dist/core/agent-loop/__tests__/index.test.d.ts.map +1 -0
  12. package/dist/core/agent-loop/__tests__/index.test.js +121 -0
  13. package/dist/core/agent-loop/__tests__/loop-state.test.d.ts +5 -0
  14. package/dist/core/agent-loop/__tests__/loop-state.test.d.ts.map +1 -0
  15. package/dist/core/agent-loop/__tests__/loop-state.test.js +340 -0
  16. package/dist/core/agent-loop/__tests__/message-builder.test.d.ts +5 -0
  17. package/dist/core/agent-loop/__tests__/message-builder.test.d.ts.map +1 -0
  18. package/dist/core/agent-loop/__tests__/message-builder.test.js +178 -0
  19. package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts +5 -0
  20. package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts.map +1 -0
  21. package/dist/core/agent-loop/__tests__/tool-executor.test.js +331 -0
  22. package/dist/core/agent-loop/compaction.d.ts +39 -0
  23. package/dist/core/agent-loop/compaction.d.ts.map +1 -0
  24. package/dist/core/agent-loop/compaction.js +51 -0
  25. package/dist/core/agent-loop/formatters.d.ts +21 -0
  26. package/dist/core/agent-loop/formatters.d.ts.map +1 -0
  27. package/dist/core/agent-loop/formatters.js +42 -0
  28. package/dist/core/agent-loop/index.d.ts +25 -0
  29. package/dist/core/agent-loop/index.d.ts.map +1 -0
  30. package/dist/core/agent-loop/index.js +83 -0
  31. package/dist/core/agent-loop/loop-state.d.ts +74 -0
  32. package/dist/core/agent-loop/loop-state.d.ts.map +1 -0
  33. package/dist/core/agent-loop/loop-state.js +147 -0
  34. package/dist/core/agent-loop/message-builder.d.ts +13 -0
  35. package/dist/core/agent-loop/message-builder.d.ts.map +1 -0
  36. package/dist/core/agent-loop/message-builder.js +49 -0
  37. package/dist/core/agent-loop/tool-executor.d.ts +23 -0
  38. package/dist/core/agent-loop/tool-executor.d.ts.map +1 -0
  39. package/dist/core/agent-loop/tool-executor.js +152 -0
  40. package/dist/core/agent-loop/turn-executor.d.ts +57 -0
  41. package/dist/core/agent-loop/turn-executor.d.ts.map +1 -0
  42. package/dist/core/agent-loop/turn-executor.js +124 -0
  43. package/dist/core/agent-loop/types.d.ts +141 -0
  44. package/dist/core/agent-loop/types.d.ts.map +1 -0
  45. package/dist/core/agent-loop/types.js +4 -0
  46. package/dist/core/agent-loop.d.ts +17 -0
  47. package/dist/core/agent-loop.d.ts.map +1 -0
  48. package/dist/core/agent-loop.js +16 -0
  49. package/dist/core/api-client-impl.d.ts +62 -0
  50. package/dist/core/api-client-impl.d.ts.map +1 -0
  51. package/dist/core/api-client-impl.js +479 -0
  52. package/dist/core/api-client.d.ts +6 -0
  53. package/dist/core/api-client.d.ts.map +1 -0
  54. package/dist/core/api-client.js +5 -0
  55. package/dist/core/checkpoints.d.ts +128 -0
  56. package/dist/core/checkpoints.d.ts.map +1 -0
  57. package/dist/core/checkpoints.js +438 -0
  58. package/dist/core/claude-md.d.ts +71 -0
  59. package/dist/core/claude-md.d.ts.map +1 -0
  60. package/dist/core/claude-md.js +198 -0
  61. package/dist/core/cognitive-security/hooks.d.ts +138 -0
  62. package/dist/core/cognitive-security/hooks.d.ts.map +1 -0
  63. package/dist/core/cognitive-security/hooks.js +389 -0
  64. package/dist/core/cognitive-security/index.d.ts +751 -0
  65. package/dist/core/cognitive-security/index.d.ts.map +1 -0
  66. package/dist/core/cognitive-security/index.js +1123 -0
  67. package/dist/core/cognitive-security/middleware.d.ts +136 -0
  68. package/dist/core/cognitive-security/middleware.d.ts.map +1 -0
  69. package/dist/core/cognitive-security/middleware.js +376 -0
  70. package/dist/core/config-loader.d.ts +127 -0
  71. package/dist/core/config-loader.d.ts.map +1 -0
  72. package/dist/core/config-loader.js +219 -0
  73. package/dist/core/context-compaction.d.ts +87 -0
  74. package/dist/core/context-compaction.d.ts.map +1 -0
  75. package/dist/core/context-compaction.js +428 -0
  76. package/dist/core/git-status.d.ts +25 -0
  77. package/dist/core/git-status.d.ts.map +1 -0
  78. package/dist/core/git-status.js +204 -0
  79. package/dist/core/image.d.ts +69 -0
  80. package/dist/core/image.d.ts.map +1 -0
  81. package/dist/core/image.js +290 -0
  82. package/dist/core/image.test.d.ts +2 -0
  83. package/dist/core/image.test.d.ts.map +1 -0
  84. package/dist/core/image.test.js +149 -0
  85. package/dist/core/models.d.ts +123 -0
  86. package/dist/core/models.d.ts.map +1 -0
  87. package/dist/core/models.js +325 -0
  88. package/dist/core/permissions.d.ts +81 -0
  89. package/dist/core/permissions.d.ts.map +1 -0
  90. package/dist/core/permissions.js +327 -0
  91. package/dist/core/retry.d.ts +25 -0
  92. package/dist/core/retry.d.ts.map +1 -0
  93. package/dist/core/retry.js +121 -0
  94. package/dist/core/session-store.d.ts +9 -0
  95. package/dist/core/session-store.d.ts.map +1 -0
  96. package/dist/core/session-store.js +10 -0
  97. package/dist/core/sessions/export.d.ts +47 -0
  98. package/dist/core/sessions/export.d.ts.map +1 -0
  99. package/dist/core/sessions/export.js +256 -0
  100. package/dist/core/sessions/index.d.ts +132 -0
  101. package/dist/core/sessions/index.d.ts.map +1 -0
  102. package/dist/core/sessions/index.js +442 -0
  103. package/dist/core/sessions/metadata.d.ts +77 -0
  104. package/dist/core/sessions/metadata.d.ts.map +1 -0
  105. package/dist/core/sessions/metadata.js +233 -0
  106. package/dist/core/sessions/persistence.d.ts +72 -0
  107. package/dist/core/sessions/persistence.d.ts.map +1 -0
  108. package/dist/core/sessions/persistence.js +201 -0
  109. package/dist/core/sessions/types.d.ts +110 -0
  110. package/dist/core/sessions/types.d.ts.map +1 -0
  111. package/dist/core/sessions/types.js +4 -0
  112. package/dist/core/stream-highlighter.d.ts +18 -0
  113. package/dist/core/stream-highlighter.d.ts.map +1 -0
  114. package/dist/core/stream-highlighter.js +916 -0
  115. package/dist/core/system-reminders.d.ts +89 -0
  116. package/dist/core/system-reminders.d.ts.map +1 -0
  117. package/dist/core/system-reminders.js +285 -0
  118. package/dist/ecosystem/hooks/__tests__/index.test.d.ts +5 -0
  119. package/dist/ecosystem/hooks/__tests__/index.test.d.ts.map +1 -0
  120. package/dist/ecosystem/hooks/__tests__/index.test.js +458 -0
  121. package/dist/ecosystem/hooks/index.d.ts +59 -0
  122. package/dist/ecosystem/hooks/index.d.ts.map +1 -0
  123. package/dist/ecosystem/hooks/index.js +294 -0
  124. package/dist/ecosystem/hooks/prompt-evaluator.d.ts +32 -0
  125. package/dist/ecosystem/hooks/prompt-evaluator.d.ts.map +1 -0
  126. package/dist/ecosystem/hooks/prompt-evaluator.js +229 -0
  127. package/dist/ecosystem/skills/index.d.ts +55 -0
  128. package/dist/ecosystem/skills/index.d.ts.map +1 -0
  129. package/dist/ecosystem/skills/index.js +258 -0
  130. package/dist/ecosystem/tools/__tests__/index.test.d.ts +7 -0
  131. package/dist/ecosystem/tools/__tests__/index.test.d.ts.map +1 -0
  132. package/dist/ecosystem/tools/__tests__/index.test.js +856 -0
  133. package/dist/ecosystem/tools/index.d.ts +24 -0
  134. package/dist/ecosystem/tools/index.d.ts.map +1 -0
  135. package/dist/ecosystem/tools/index.js +1709 -0
  136. package/dist/index.d.ts +24 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +32 -52192
  139. package/dist/interfaces/mcp/client.d.ts +40 -0
  140. package/dist/interfaces/mcp/client.d.ts.map +1 -0
  141. package/dist/interfaces/mcp/client.js +309 -0
  142. package/dist/interfaces/ui/index.d.ts +36 -0
  143. package/dist/interfaces/ui/index.d.ts.map +1 -0
  144. package/dist/interfaces/ui/index.js +61 -0
  145. package/dist/interfaces/ui/spinner.d.ts +140 -0
  146. package/dist/interfaces/ui/spinner.d.ts.map +1 -0
  147. package/dist/interfaces/ui/spinner.js +342 -0
  148. package/dist/interfaces/ui/terminal/cli/index.d.ts +12 -0
  149. package/dist/interfaces/ui/terminal/cli/index.d.ts.map +1 -0
  150. package/dist/interfaces/ui/terminal/cli/index.js +159 -52768
  151. package/dist/interfaces/ui/terminal/shared/args.d.ts +39 -0
  152. package/dist/interfaces/ui/terminal/shared/args.d.ts.map +1 -0
  153. package/dist/interfaces/ui/terminal/shared/args.js +176 -0
  154. package/dist/interfaces/ui/terminal/shared/index.d.ts +11 -0
  155. package/dist/interfaces/ui/terminal/shared/index.d.ts.map +1 -0
  156. package/dist/interfaces/ui/terminal/shared/index.js +16 -0
  157. package/dist/interfaces/ui/terminal/shared/loading-state.d.ts +124 -0
  158. package/dist/interfaces/ui/terminal/shared/loading-state.d.ts.map +1 -0
  159. package/dist/interfaces/ui/terminal/shared/loading-state.js +246 -0
  160. package/dist/interfaces/ui/terminal/shared/query.d.ts +22 -0
  161. package/dist/interfaces/ui/terminal/shared/query.d.ts.map +1 -0
  162. package/dist/interfaces/ui/terminal/shared/query.js +100 -0
  163. package/dist/interfaces/ui/terminal/shared/setup.d.ts +33 -0
  164. package/dist/interfaces/ui/terminal/shared/setup.d.ts.map +1 -0
  165. package/dist/interfaces/ui/terminal/shared/setup.js +226 -0
  166. package/dist/interfaces/ui/terminal/shared/status-line.d.ts +117 -0
  167. package/dist/interfaces/ui/terminal/shared/status-line.d.ts.map +1 -0
  168. package/dist/interfaces/ui/terminal/shared/status-line.js +267 -0
  169. package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts +38 -0
  170. package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts.map +1 -0
  171. package/dist/interfaces/ui/terminal/shared/system-prompt.js +102 -0
  172. package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts +39 -0
  173. package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts.map +1 -0
  174. package/dist/interfaces/ui/terminal/tui/HelpPanel.js +215 -0
  175. package/dist/interfaces/ui/terminal/tui/InputContext.d.ts +91 -0
  176. package/dist/interfaces/ui/terminal/tui/InputContext.d.ts.map +1 -0
  177. package/dist/interfaces/ui/terminal/tui/InputContext.js +154 -0
  178. package/dist/interfaces/ui/terminal/tui/InputField.d.ts +18 -0
  179. package/dist/interfaces/ui/terminal/tui/InputField.d.ts.map +1 -0
  180. package/dist/interfaces/ui/terminal/tui/InputField.js +41 -0
  181. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts +16 -0
  182. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts.map +1 -0
  183. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.js +451 -0
  184. package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts +10 -0
  185. package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts.map +1 -0
  186. package/dist/interfaces/ui/terminal/tui/MessageArea.js +91 -0
  187. package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts +48 -0
  188. package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts.map +1 -0
  189. package/dist/interfaces/ui/terminal/tui/MessageStore.js +151 -0
  190. package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts +9 -0
  191. package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts.map +1 -0
  192. package/dist/interfaces/ui/terminal/tui/StatusBar.js +36 -0
  193. package/dist/interfaces/ui/terminal/tui/commands.d.ts +21 -0
  194. package/dist/interfaces/ui/terminal/tui/commands.d.ts.map +1 -0
  195. package/dist/interfaces/ui/terminal/tui/commands.js +359 -0
  196. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts +115 -0
  197. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts.map +1 -0
  198. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.js +306 -0
  199. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts +92 -0
  200. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts.map +1 -0
  201. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.js +399 -0
  202. package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts +59 -0
  203. package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts.map +1 -0
  204. package/dist/interfaces/ui/terminal/tui/components/PaneManager.js +139 -0
  205. package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts +68 -0
  206. package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts.map +1 -0
  207. package/dist/interfaces/ui/terminal/tui/components/Sidebar.js +340 -0
  208. package/dist/interfaces/ui/terminal/tui/components/index.d.ts +23 -0
  209. package/dist/interfaces/ui/terminal/tui/components/index.d.ts.map +1 -0
  210. package/dist/interfaces/ui/terminal/tui/components/index.js +51 -0
  211. package/dist/interfaces/ui/terminal/tui/console.d.ts +20 -0
  212. package/dist/interfaces/ui/terminal/tui/console.d.ts.map +1 -0
  213. package/dist/interfaces/ui/terminal/tui/console.js +46 -0
  214. package/dist/interfaces/ui/terminal/tui/index.d.ts +20 -0
  215. package/dist/interfaces/ui/terminal/tui/index.d.ts.map +1 -0
  216. package/dist/interfaces/ui/terminal/tui/index.js +28 -0
  217. package/dist/interfaces/ui/terminal/tui/run.d.ts +13 -0
  218. package/dist/interfaces/ui/terminal/tui/run.d.ts.map +1 -0
  219. package/dist/interfaces/ui/terminal/tui/run.js +31 -0
  220. package/dist/interfaces/ui/terminal/tui/spinner.d.ts +44 -0
  221. package/dist/interfaces/ui/terminal/tui/spinner.d.ts.map +1 -0
  222. package/dist/interfaces/ui/terminal/tui/spinner.js +59 -0
  223. package/dist/interfaces/ui/terminal/tui/tui-app.d.ts +39 -0
  224. package/dist/interfaces/ui/terminal/tui/tui-app.d.ts.map +1 -0
  225. package/dist/interfaces/ui/terminal/tui/tui-app.js +198 -0
  226. package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts +167 -0
  227. package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts.map +1 -0
  228. package/dist/interfaces/ui/terminal/tui/tui-footer.js +330 -0
  229. package/dist/interfaces/ui/terminal/tui/types.d.ts +165 -0
  230. package/dist/interfaces/ui/terminal/tui/types.d.ts.map +1 -0
  231. package/dist/interfaces/ui/terminal/tui/types.js +5 -0
  232. package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts +23 -0
  233. package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts.map +1 -0
  234. package/dist/interfaces/ui/terminal/tui/useInputHandler.js +72 -0
  235. package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts +90 -0
  236. package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts.map +1 -0
  237. package/dist/interfaces/ui/terminal/tui/useNativeInput.js +188 -0
  238. package/dist/native/index.d.ts +480 -0
  239. package/dist/native/index.d.ts.map +1 -0
  240. package/dist/native/index.js +1625 -0
  241. package/dist/teammates/index.d.ts +161 -0
  242. package/dist/teammates/index.d.ts.map +1 -0
  243. package/dist/teammates/index.js +827 -0
  244. package/dist/types/index.d.ts +482 -0
  245. package/dist/types/index.d.ts.map +1 -0
  246. package/dist/types/index.js +52 -0
  247. package/package.json +4 -2
  248. package/packages/src/core/__tests__/permissions.test.ts +1091 -0
  249. package/packages/src/core/agent-loop/__tests__/compaction.test.ts +280 -0
  250. package/packages/src/core/agent-loop/__tests__/formatters.test.ts +234 -0
  251. package/packages/src/core/agent-loop/__tests__/index.test.ts +162 -0
  252. package/packages/src/core/agent-loop/__tests__/loop-state.test.ts +413 -0
  253. package/packages/src/core/agent-loop/__tests__/message-builder.test.ts +229 -0
  254. package/packages/src/core/agent-loop/__tests__/tool-executor.test.ts +457 -0
  255. package/packages/src/core/agent-loop/compaction.ts +88 -0
  256. package/packages/src/core/agent-loop/formatters.ts +50 -0
  257. package/packages/src/core/agent-loop/index.ts +135 -0
  258. package/packages/src/core/agent-loop/loop-state.ts +187 -0
  259. package/packages/src/core/agent-loop/message-builder.ts +62 -0
  260. package/packages/src/core/agent-loop/tool-executor.ts +211 -0
  261. package/packages/src/core/agent-loop/turn-executor.ts +222 -0
  262. package/packages/src/core/agent-loop/types.ts +148 -0
  263. package/packages/src/core/agent-loop.ts +18 -0
  264. package/packages/src/core/api-client-impl.ts +619 -0
  265. package/packages/src/core/api-client.ts +6 -0
  266. package/packages/src/core/checkpoints.ts +606 -0
  267. package/packages/src/core/claude-md.ts +272 -0
  268. package/packages/src/core/cognitive-security/hooks.ts +590 -0
  269. package/packages/src/core/cognitive-security/index.ts +2041 -0
  270. package/packages/src/core/cognitive-security/middleware.ts +536 -0
  271. package/packages/src/core/config-loader.ts +324 -0
  272. package/packages/src/core/context-compaction.ts +578 -0
  273. package/packages/src/core/git-status.ts +262 -0
  274. package/packages/src/core/image.test.ts +180 -0
  275. package/packages/src/core/image.ts +350 -0
  276. package/packages/src/core/lmdb.db +0 -0
  277. package/packages/src/core/lmdb.db-lock +0 -0
  278. package/packages/src/core/models.ts +430 -0
  279. package/packages/src/core/normalizers/todo +4 -0
  280. package/packages/src/core/permissions.ts +431 -0
  281. package/packages/src/core/retry.ts +170 -0
  282. package/packages/src/core/session-store.ts +36 -0
  283. package/packages/src/core/sessions/export.ts +329 -0
  284. package/packages/src/core/sessions/index.ts +587 -0
  285. package/packages/src/core/sessions/metadata.ts +309 -0
  286. package/packages/src/core/sessions/persistence.ts +244 -0
  287. package/packages/src/core/sessions/types.ts +169 -0
  288. package/packages/src/core/stream-highlighter.ts +1123 -0
  289. package/packages/src/core/system-reminders.ts +402 -0
  290. package/packages/src/core/todo +8 -0
  291. package/packages/src/ecosystem/hooks/__tests__/index.test.ts +561 -0
  292. package/packages/src/ecosystem/hooks/index.ts +341 -0
  293. package/packages/src/ecosystem/hooks/prompt-evaluator.ts +300 -0
  294. package/packages/src/ecosystem/skills/index.ts +295 -0
  295. package/packages/src/ecosystem/tools/__tests__/index.test.ts +1335 -0
  296. package/packages/src/ecosystem/tools/index.ts +1877 -0
  297. package/packages/src/index.ts +120 -0
  298. package/packages/src/interfaces/mcp/client.ts +389 -0
  299. package/packages/src/interfaces/ui/Screenshot 2026-03-02 at 9.23.10/342/200/257PM.png +0 -0
  300. package/packages/src/interfaces/ui/Screenshot 2026-03-03 at 10.55.11/342/200/257AM.png +0 -0
  301. package/packages/src/interfaces/ui/index.ts +161 -0
  302. package/packages/src/interfaces/ui/lmdb.db +0 -0
  303. package/packages/src/interfaces/ui/lmdb.db-lock +0 -0
  304. package/packages/src/interfaces/ui/spinner.ts +451 -0
  305. package/packages/src/interfaces/ui/terminal/cli/index.ts +228 -0
  306. package/packages/src/interfaces/ui/terminal/lmdb.db +0 -0
  307. package/packages/src/interfaces/ui/terminal/lmdb.db-lock +0 -0
  308. package/packages/src/interfaces/ui/terminal/shared/args.ts +222 -0
  309. package/packages/src/interfaces/ui/terminal/shared/index.ts +71 -0
  310. package/packages/src/interfaces/ui/terminal/shared/loading-state.ts +322 -0
  311. package/packages/src/interfaces/ui/terminal/shared/query.ts +146 -0
  312. package/packages/src/interfaces/ui/terminal/shared/setup.ts +295 -0
  313. package/packages/src/interfaces/ui/terminal/shared/status-line.ts +358 -0
  314. package/packages/src/interfaces/ui/terminal/shared/system-prompt.ts +146 -0
  315. package/packages/src/interfaces/ui/terminal/tui/HelpPanel.tsx +262 -0
  316. package/packages/src/interfaces/ui/terminal/tui/InputContext.tsx +232 -0
  317. package/packages/src/interfaces/ui/terminal/tui/InputField.tsx +62 -0
  318. package/packages/src/interfaces/ui/terminal/tui/InteractiveTUI.tsx +537 -0
  319. package/packages/src/interfaces/ui/terminal/tui/MessageArea.tsx +107 -0
  320. package/packages/src/interfaces/ui/terminal/tui/MessageStore.tsx +240 -0
  321. package/packages/src/interfaces/ui/terminal/tui/StatusBar.tsx +54 -0
  322. package/packages/src/interfaces/ui/terminal/tui/commands.ts +438 -0
  323. package/packages/src/interfaces/ui/terminal/tui/components/InteractiveElements.tsx +584 -0
  324. package/packages/src/interfaces/ui/terminal/tui/components/MultilineInput.tsx +614 -0
  325. package/packages/src/interfaces/ui/terminal/tui/components/PaneManager.tsx +333 -0
  326. package/packages/src/interfaces/ui/terminal/tui/components/Sidebar.tsx +604 -0
  327. package/packages/src/interfaces/ui/terminal/tui/components/index.ts +118 -0
  328. package/packages/src/interfaces/ui/terminal/tui/console.ts +49 -0
  329. package/packages/src/interfaces/ui/terminal/tui/index.ts +90 -0
  330. package/packages/src/interfaces/ui/terminal/tui/run.tsx +42 -0
  331. package/packages/src/interfaces/ui/terminal/tui/spinner.ts +69 -0
  332. package/packages/src/interfaces/ui/terminal/tui/tui-app.tsx +390 -0
  333. package/packages/src/interfaces/ui/terminal/tui/tui-footer.ts +422 -0
  334. package/packages/src/interfaces/ui/terminal/tui/types.ts +186 -0
  335. package/packages/src/interfaces/ui/terminal/tui/useInputHandler.ts +104 -0
  336. package/packages/src/interfaces/ui/terminal/tui/useNativeInput.ts +239 -0
  337. package/packages/src/lmdb.db +0 -0
  338. package/packages/src/lmdb.db-lock +0 -0
  339. package/packages/src/native/index.ts +2345 -0
  340. package/packages/src/teammates/index.ts +982 -0
  341. package/packages/src/types/index.ts +722 -0
@@ -0,0 +1,590 @@
1
+ /**
2
+ * Cognitive Security Hooks
3
+ *
4
+ * Automatic security checks integrated into the agent lifecycle.
5
+ * No manual calls needed - hooks intercept all operations.
6
+ */
7
+
8
+ import type { HookInput, HookOutput } from "../../types/index.js";
9
+ import {
10
+ classifyData,
11
+ classifyOperation,
12
+ scoreAlignment,
13
+ createFlowPolicyEngine,
14
+ createFlowTracker,
15
+ createLeakPrevention,
16
+ createTaintTracker,
17
+ type FlowPolicyEngineHandle,
18
+ type FlowTrackerHandle,
19
+ type LeakPreventionHandle,
20
+ type TaintTrackerHandle,
21
+ type AgentIntent,
22
+ type ActionContext,
23
+ } from "./index.js";
24
+
25
+ /**
26
+ * Security configuration for hooks
27
+ */
28
+ export interface SecurityHookConfig {
29
+ /** Enable all security checks */
30
+ enabled: boolean;
31
+
32
+ /** Check intent alignment before actions */
33
+ checkIntentAlignment: boolean;
34
+
35
+ /** Enforce flow policies */
36
+ enforceFlowPolicies: boolean;
37
+
38
+ /** Check for data leaks */
39
+ preventLeaks: boolean;
40
+
41
+ /** Track taint propagation */
42
+ trackTaints: boolean;
43
+
44
+ /** Log security events */
45
+ logEvents: boolean;
46
+
47
+ /** Block on violations (false = log only) */
48
+ blockOnViolation: boolean;
49
+
50
+ /** Minimum alignment score to allow (0-1) */
51
+ minAlignmentScore: number;
52
+
53
+ /** Sensitivities that require approval */
54
+ approvalRequiredSensitivities: string[];
55
+
56
+ /** Domains that require signed actions (every action cryptographically signed) */
57
+ requireSignedActions: string[];
58
+
59
+ /** Threshold for drift detection (0-1, higher = more strict) */
60
+ driftThreshold: number;
61
+
62
+ /** Enable immutable directives (cryptographically signed rules outside AI context) */
63
+ enableImmutableDirectives: boolean;
64
+
65
+ /** Require approval for operations above this sensitivity level */
66
+ approvalSensitivityLevel: string;
67
+ }
68
+
69
+ export const DEFAULT_SECURITY_CONFIG: SecurityHookConfig = {
70
+ enabled: true,
71
+ checkIntentAlignment: true,
72
+ enforceFlowPolicies: true,
73
+ preventLeaks: true,
74
+ trackTaints: true,
75
+ logEvents: true,
76
+ blockOnViolation: true,
77
+ minAlignmentScore: 0.5,
78
+ approvalRequiredSensitivities: ["secret", "top_secret"],
79
+ // Domains requiring cryptographic action signing
80
+ requireSignedActions: ["financial", "external", "credentials"],
81
+ // Drift detection threshold - flag when behavior deviates > 30%
82
+ driftThreshold: 0.3,
83
+ // Enable immutable directives from secure storage
84
+ enableImmutableDirectives: true,
85
+ // Sensitivity level requiring explicit user approval
86
+ approvalSensitivityLevel: "confidential",
87
+ };
88
+
89
+ /**
90
+ * Security event for logging
91
+ */
92
+ export interface SecurityEvent {
93
+ timestamp: number;
94
+ hook: string;
95
+ tool?: string;
96
+ action: "check" | "allow" | "deny" | "sanitize";
97
+ reason?: string;
98
+ sensitivity?: string;
99
+ category?: string;
100
+ alignmentScore?: number;
101
+ dataId?: string;
102
+ }
103
+
104
+ /**
105
+ * Cognitive Security Hook Handler
106
+ *
107
+ * Maintains state across hooks and provides security check methods.
108
+ */
109
+ export class CognitiveSecurityHooks {
110
+ private config: SecurityHookConfig;
111
+ private intent: AgentIntent | null = null;
112
+ private policyEngine: FlowPolicyEngineHandle | null = null;
113
+ private flowTracker: FlowTrackerHandle | null = null;
114
+ private leakPrevention: LeakPreventionHandle | null = null;
115
+ private taintTracker: TaintTrackerHandle | null = null;
116
+ private events: SecurityEvent[] = [];
117
+ private initialized = false;
118
+ private sessionId: string | null = null;
119
+
120
+ constructor(config: Partial<SecurityHookConfig> = {}) {
121
+ this.config = { ...DEFAULT_SECURITY_CONFIG, ...config };
122
+ }
123
+
124
+ /**
125
+ * Initialize security components (called on SessionStart)
126
+ */
127
+ private async initialize(): Promise<void> {
128
+ if (this.initialized) return;
129
+
130
+ try {
131
+ if (this.config.enforceFlowPolicies) {
132
+ this.policyEngine = await createFlowPolicyEngine();
133
+ }
134
+ if (this.config.trackTaints) {
135
+ this.flowTracker = await createFlowTracker();
136
+ this.taintTracker = await createTaintTracker();
137
+ }
138
+ if (this.config.preventLeaks) {
139
+ this.leakPrevention = await createLeakPrevention();
140
+ }
141
+ this.initialized = true;
142
+ this.log("SessionStart", undefined, "check", "Security hooks initialized");
143
+ } catch (error) {
144
+ this.log("SessionStart", undefined, "check", `Init failed: ${error}`);
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Set the agent intent for alignment checking
150
+ */
151
+ setIntent(intent: AgentIntent): void {
152
+ this.intent = intent;
153
+ this.log("SessionStart", undefined, "check", `Intent loaded: ${intent.identity.name}`);
154
+ }
155
+
156
+ /**
157
+ * SessionStart hook - Initialize security and load intent
158
+ */
159
+ async onSessionStart(input: HookInput): Promise<HookOutput> {
160
+ await this.initialize();
161
+ this.sessionId = input.session_id || null;
162
+
163
+ // Intent should be set externally before session starts
164
+ // This is just initialization
165
+
166
+ return { decision: "allow" };
167
+ }
168
+
169
+ /**
170
+ * PreToolUse hook - Check intent, classify action, enforce policies
171
+ */
172
+ async onPreToolUse(input: HookInput): Promise<HookOutput> {
173
+ if (!this.config.enabled) {
174
+ return { decision: "allow" };
175
+ }
176
+
177
+ await this.initialize();
178
+ const toolName = input.tool_name || "unknown";
179
+ const toolInput = input.tool_input || {};
180
+
181
+ // 1. Classify the operation
182
+ const actionContext: ActionContext = {
183
+ actionType: this.inferActionType(toolName),
184
+ domain: this.inferDomain(toolName),
185
+ operation: toolName,
186
+ target: typeof toolInput.file_path === "string" ? toolInput.file_path : undefined,
187
+ params: toolInput,
188
+ reasoning: `Tool: ${toolName}`,
189
+ };
190
+
191
+ try {
192
+ const classifiedAction = await classifyOperation(
193
+ toolName,
194
+ actionContext.domain,
195
+ actionContext.target,
196
+ actionContext.reasoning
197
+ );
198
+
199
+ // 2. Check intent alignment
200
+ if (this.config.checkIntentAlignment && this.intent) {
201
+ const alignment = await scoreAlignment(actionContext, this.intent);
202
+
203
+ this.log("PreToolUse", toolName, "check",
204
+ `Alignment: ${alignment.score.toFixed(2)}`,
205
+ undefined, undefined, alignment.score
206
+ );
207
+
208
+ if (alignment.shouldBlock || alignment.score < this.config.minAlignmentScore) {
209
+ const reason = alignment.boundaryConcerns.length > 0
210
+ ? `Boundary concerns: ${alignment.boundaryConcerns.join(", ")}`
211
+ : `Low alignment score: ${alignment.score.toFixed(2)}`;
212
+
213
+ this.log("PreToolUse", toolName, "deny", reason);
214
+
215
+ if (this.config.blockOnViolation) {
216
+ return {
217
+ decision: "deny",
218
+ reason: `[Security] ${reason}`,
219
+ };
220
+ }
221
+ }
222
+ }
223
+
224
+ // 3. Check flow policy
225
+ if (this.config.enforceFlowPolicies && this.policyEngine) {
226
+ // Extract content for classification
227
+ const content = this.extractContent(toolInput);
228
+ const classified = await classifyData(content, actionContext.domain, [toolName]);
229
+
230
+ this.log("PreToolUse", toolName, "check",
231
+ `Classified: ${classified.sensitivity}/${classified.category}`,
232
+ classified.sensitivity, classified.category
233
+ );
234
+
235
+ // Determine target domain
236
+ const targetDomain = this.isExternalTool(toolName) ? "external" : "internal";
237
+
238
+ const flowResult = this.policyEngine.evaluate(
239
+ classified,
240
+ actionContext.domain,
241
+ targetDomain
242
+ );
243
+
244
+ if (!flowResult.allowed) {
245
+ this.log("PreToolUse", toolName, "deny", flowResult.reason);
246
+
247
+ if (this.config.blockOnViolation) {
248
+ return {
249
+ decision: "deny",
250
+ reason: `[Security] Flow policy violation: ${flowResult.reason}`,
251
+ };
252
+ }
253
+ }
254
+
255
+ // Check if approval required
256
+ if (flowResult.requireApproval ||
257
+ this.config.approvalRequiredSensitivities.includes(classified.sensitivity)) {
258
+ // For now, just log - in full implementation would prompt user
259
+ this.log("PreToolUse", toolName, "check", "Approval recommended");
260
+ }
261
+ }
262
+
263
+ this.log("PreToolUse", toolName, "allow", "Checks passed");
264
+ return { decision: "allow" };
265
+
266
+ } catch (error) {
267
+ const msg = error instanceof Error ? error.message : String(error);
268
+ this.log("PreToolUse", toolName, "check", `Error: ${msg}`);
269
+ // On error, allow but log
270
+ return { decision: "allow" };
271
+ }
272
+ }
273
+
274
+ /**
275
+ * PostToolUse hook - Check output for leaks, track flows
276
+ */
277
+ async onPostToolUse(input: HookInput): Promise<HookOutput> {
278
+ if (!this.config.enabled) {
279
+ return { decision: "allow" };
280
+ }
281
+
282
+ await this.initialize();
283
+ const toolName = input.tool_name || "unknown";
284
+ const toolResult = input.tool_result || "";
285
+ const toolIsError = input.tool_result_is_error || false;
286
+
287
+ // Skip error results
288
+ if (toolIsError) {
289
+ return { decision: "allow" };
290
+ }
291
+
292
+ try {
293
+ // 1. Classify output
294
+ const content = typeof toolResult === "string" ? toolResult : JSON.stringify(toolResult);
295
+ const classified = await classifyData(content, "agent", [toolName, "output"]);
296
+
297
+ this.log("PostToolUse", toolName, "check",
298
+ `Output: ${classified.sensitivity}/${classified.category}`,
299
+ classified.sensitivity, classified.category
300
+ );
301
+
302
+ // 2. Check for leaks
303
+ if (this.config.preventLeaks && this.leakPrevention) {
304
+ const channel = this.isExternalTool(toolName) ? "external" : "internal";
305
+ const leakCheck = this.leakPrevention.check(content, channel);
306
+
307
+ if (leakCheck.action === "block") {
308
+ const patterns = leakCheck.detections.map(d => d.pattern_name).join(", ");
309
+ this.log("PostToolUse", toolName, "sanitize", `Leaks detected: ${patterns}`);
310
+
311
+ if (this.config.blockOnViolation) {
312
+ // Sanitize the output
313
+ const sanitized = this.leakPrevention.sanitize(content);
314
+ this.log("PostToolUse", toolName, "sanitize", "Output sanitized");
315
+
316
+ return {
317
+ decision: "allow",
318
+ modified_input: {
319
+ tool_result: sanitized,
320
+ },
321
+ };
322
+ }
323
+ }
324
+ }
325
+
326
+ // 3. Track flow
327
+ if (this.config.trackTaints && this.flowTracker && this.policyEngine) {
328
+ const sourceDomain = "agent";
329
+ const targetDomain = this.isExternalTool(toolName) ? "external" : "internal";
330
+
331
+ const flowResult = this.policyEngine.evaluate(
332
+ classified,
333
+ sourceDomain,
334
+ targetDomain
335
+ );
336
+
337
+ this.flowTracker.record(
338
+ classified,
339
+ sourceDomain,
340
+ targetDomain,
341
+ this.isExternalTool(toolName) ? "outbound" : "internal",
342
+ flowResult,
343
+ this.sessionId,
344
+ null
345
+ );
346
+
347
+ this.log("PostToolUse", toolName, "check", "Flow tracked");
348
+ }
349
+
350
+ this.log("PostToolUse", toolName, "allow", "Output checks passed");
351
+ return { decision: "allow" };
352
+
353
+ } catch (error) {
354
+ const msg = error instanceof Error ? error.message : String(error);
355
+ this.log("PostToolUse", toolName, "check", `Error: ${msg}`);
356
+ return { decision: "allow" };
357
+ }
358
+ }
359
+
360
+ /**
361
+ * UserPromptSubmit hook - Check user input for injection attempts
362
+ */
363
+ async onUserPromptSubmit(input: HookInput): Promise<HookOutput> {
364
+ if (!this.config.enabled) {
365
+ return { decision: "allow" };
366
+ }
367
+
368
+ const prompt = input.prompt || "";
369
+ await this.initialize();
370
+
371
+ try {
372
+ // Check for potential injection patterns
373
+ const suspiciousPatterns = [
374
+ /ignore (all )?(previous|above) instructions/i,
375
+ /you are now/i,
376
+ /disregard (all )?(rules|policies)/i,
377
+ /system:? prompt/i,
378
+ /\[system\]/i,
379
+ /<\|.*?\|>/,
380
+ ];
381
+
382
+ for (const pattern of suspiciousPatterns) {
383
+ if (pattern.test(prompt)) {
384
+ this.log("UserPromptSubmit", undefined, "check", "Suspicious pattern detected");
385
+
386
+ if (this.config.blockOnViolation) {
387
+ return {
388
+ decision: "deny",
389
+ reason: "[Security] Prompt contains potentially unsafe patterns",
390
+ };
391
+ }
392
+ }
393
+ }
394
+
395
+ // Classify user input
396
+ const classified = await classifyData(prompt, "user_input", []);
397
+
398
+ this.log("UserPromptSubmit", undefined, "check",
399
+ `Input: ${classified.sensitivity}`,
400
+ classified.sensitivity
401
+ );
402
+
403
+ return { decision: "allow" };
404
+
405
+ } catch (error) {
406
+ return { decision: "allow" };
407
+ }
408
+ }
409
+
410
+ /**
411
+ * SessionEnd hook - Generate security report
412
+ */
413
+ async onSessionEnd(_input: HookInput): Promise<HookOutput> {
414
+ const stats = this.getStats();
415
+
416
+ this.log("SessionEnd", undefined, "check",
417
+ `Session ended - ${stats.totalEvents} events, ${stats.deniedCount} denied`
418
+ );
419
+
420
+ return { decision: "allow" };
421
+ }
422
+
423
+ // ============================================
424
+ // Utility Methods
425
+ // ============================================
426
+
427
+ private inferActionType(toolName: string): string {
428
+ const typeMap: Record<string, string> = {
429
+ Read: "observe",
430
+ Glob: "observe",
431
+ Grep: "observe",
432
+ Write: "modify",
433
+ Edit: "modify",
434
+ MultiEdit: "modify",
435
+ Bash: "execute",
436
+ NotebookEdit: "modify",
437
+ };
438
+ return typeMap[toolName] || "observe";
439
+ }
440
+
441
+ private inferDomain(toolName: string): string {
442
+ const domainMap: Record<string, string> = {
443
+ Read: "filesystem",
444
+ Write: "filesystem",
445
+ Edit: "filesystem",
446
+ Glob: "filesystem",
447
+ Grep: "filesystem",
448
+ Bash: "shell",
449
+ MultiEdit: "filesystem",
450
+ };
451
+ return domainMap[toolName] || "agent";
452
+ }
453
+
454
+ private isExternalTool(toolName: string): boolean {
455
+ const externalTools = ["Bash", "Write", "Edit", "MultiEdit", "NotebookEdit"];
456
+ return externalTools.includes(toolName);
457
+ }
458
+
459
+ private extractContent(input: Record<string, unknown>): string {
460
+ const parts: string[] = [];
461
+ for (const [key, value] of Object.entries(input)) {
462
+ if (typeof value === "string") {
463
+ parts.push(value);
464
+ } else if (typeof value === "object" && value !== null) {
465
+ parts.push(JSON.stringify(value));
466
+ }
467
+ }
468
+ return parts.join(" ");
469
+ }
470
+
471
+ private log(
472
+ hook: string,
473
+ tool: string | undefined,
474
+ action: SecurityEvent["action"],
475
+ reason: string,
476
+ sensitivity?: string,
477
+ category?: string,
478
+ alignmentScore?: number
479
+ ): void {
480
+ const event: SecurityEvent = {
481
+ timestamp: Date.now(),
482
+ hook,
483
+ tool,
484
+ action,
485
+ reason,
486
+ sensitivity,
487
+ category,
488
+ alignmentScore,
489
+ };
490
+
491
+ this.events.push(event);
492
+
493
+ if (this.config.logEvents) {
494
+ const prefix = action === "deny" ? "\x1b[31m[Security]\x1b[0m" : "\x1b[90m[Security]\x1b[0m";
495
+ const toolStr = tool ? ` ${tool}:` : "";
496
+ console.log(`${prefix}${toolStr} ${reason}`);
497
+ }
498
+ }
499
+
500
+ /**
501
+ * Get all security events
502
+ */
503
+ getEvents(): SecurityEvent[] {
504
+ return [...this.events];
505
+ }
506
+
507
+ /**
508
+ * Get security statistics
509
+ */
510
+ getStats(): {
511
+ totalEvents: number;
512
+ allowedCount: number;
513
+ deniedCount: number;
514
+ sanitizedCount: number;
515
+ bySensitivity: Record<string, number>;
516
+ avgAlignmentScore: number;
517
+ } {
518
+ const allowedCount = this.events.filter(e => e.action === "allow").length;
519
+ const deniedCount = this.events.filter(e => e.action === "deny").length;
520
+ const sanitizedCount = this.events.filter(e => e.action === "sanitize").length;
521
+
522
+ const bySensitivity: Record<string, number> = {};
523
+ for (const event of this.events) {
524
+ if (event.sensitivity) {
525
+ bySensitivity[event.sensitivity] = (bySensitivity[event.sensitivity] || 0) + 1;
526
+ }
527
+ }
528
+
529
+ const alignmentScores = this.events
530
+ .filter(e => e.alignmentScore !== undefined)
531
+ .map(e => e.alignmentScore!);
532
+ const avgAlignmentScore = alignmentScores.length > 0
533
+ ? alignmentScores.reduce((a, b) => a + b, 0) / alignmentScores.length
534
+ : 0;
535
+
536
+ return {
537
+ totalEvents: this.events.length,
538
+ allowedCount,
539
+ deniedCount,
540
+ sanitizedCount,
541
+ bySensitivity,
542
+ avgAlignmentScore,
543
+ };
544
+ }
545
+
546
+ /**
547
+ * Clear event history
548
+ */
549
+ clearEvents(): void {
550
+ this.events = [];
551
+ }
552
+ }
553
+
554
+ // Singleton instance
555
+ let globalHooks: CognitiveSecurityHooks | null = null;
556
+
557
+ /**
558
+ * Get global security hooks instance
559
+ */
560
+ export function getSecurityHooks(
561
+ config?: Partial<SecurityHookConfig>
562
+ ): CognitiveSecurityHooks {
563
+ if (!globalHooks) {
564
+ globalHooks = new CognitiveSecurityHooks(config);
565
+ }
566
+ return globalHooks;
567
+ }
568
+
569
+ /**
570
+ * Create hook handlers for HookManager
571
+ */
572
+ export function createSecurityHookHandlers(
573
+ config?: Partial<SecurityHookConfig>
574
+ ): {
575
+ SessionStart: (input: HookInput) => Promise<HookOutput>;
576
+ PreToolUse: (input: HookInput) => Promise<HookOutput>;
577
+ PostToolUse: (input: HookInput) => Promise<HookOutput>;
578
+ UserPromptSubmit: (input: HookInput) => Promise<HookOutput>;
579
+ SessionEnd: (input: HookInput) => Promise<HookOutput>;
580
+ } {
581
+ const hooks = new CognitiveSecurityHooks(config);
582
+
583
+ return {
584
+ SessionStart: (input) => hooks.onSessionStart(input),
585
+ PreToolUse: (input) => hooks.onPreToolUse(input),
586
+ PostToolUse: (input) => hooks.onPostToolUse(input),
587
+ UserPromptSubmit: (input) => hooks.onUserPromptSubmit(input),
588
+ SessionEnd: (input) => hooks.onSessionEnd(input),
589
+ };
590
+ }