@jait/gateway 0.1.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 (474) hide show
  1. package/bin/jait.mjs +144 -0
  2. package/dist/config.d.ts +24 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +73 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/db/connection.d.ts +37 -0
  7. package/dist/db/connection.d.ts.map +1 -0
  8. package/dist/db/connection.js +85 -0
  9. package/dist/db/connection.js.map +1 -0
  10. package/dist/db/index.d.ts +4 -0
  11. package/dist/db/index.d.ts.map +1 -0
  12. package/dist/db/index.js +4 -0
  13. package/dist/db/index.js.map +1 -0
  14. package/dist/db/migrations.d.ts +24 -0
  15. package/dist/db/migrations.d.ts.map +1 -0
  16. package/dist/db/migrations.js +312 -0
  17. package/dist/db/migrations.js.map +1 -0
  18. package/dist/db/schema.d.ts +2253 -0
  19. package/dist/db/schema.d.ts.map +1 -0
  20. package/dist/db/schema.js +195 -0
  21. package/dist/db/schema.js.map +1 -0
  22. package/dist/foundation.d.ts +26 -0
  23. package/dist/foundation.d.ts.map +1 -0
  24. package/dist/foundation.js +15 -0
  25. package/dist/foundation.js.map +1 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +413 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/lib/uuidv7.d.ts +10 -0
  31. package/dist/lib/uuidv7.d.ts.map +1 -0
  32. package/dist/lib/uuidv7.js +33 -0
  33. package/dist/lib/uuidv7.js.map +1 -0
  34. package/dist/memory/contracts.d.ts +42 -0
  35. package/dist/memory/contracts.d.ts.map +1 -0
  36. package/dist/memory/contracts.js +2 -0
  37. package/dist/memory/contracts.js.map +1 -0
  38. package/dist/memory/embeddings.d.ts +4 -0
  39. package/dist/memory/embeddings.d.ts.map +1 -0
  40. package/dist/memory/embeddings.js +26 -0
  41. package/dist/memory/embeddings.js.map +1 -0
  42. package/dist/memory/service.d.ts +17 -0
  43. package/dist/memory/service.d.ts.map +1 -0
  44. package/dist/memory/service.js +82 -0
  45. package/dist/memory/service.js.map +1 -0
  46. package/dist/memory/sqlite-backend.d.ts +11 -0
  47. package/dist/memory/sqlite-backend.d.ts.map +1 -0
  48. package/dist/memory/sqlite-backend.js +68 -0
  49. package/dist/memory/sqlite-backend.js.map +1 -0
  50. package/dist/plugins/contracts.d.ts +11 -0
  51. package/dist/plugins/contracts.d.ts.map +1 -0
  52. package/dist/plugins/contracts.js +2 -0
  53. package/dist/plugins/contracts.js.map +1 -0
  54. package/dist/providers/claude-code-provider.d.ts +39 -0
  55. package/dist/providers/claude-code-provider.d.ts.map +1 -0
  56. package/dist/providers/claude-code-provider.js +322 -0
  57. package/dist/providers/claude-code-provider.js.map +1 -0
  58. package/dist/providers/codex-provider.d.ts +51 -0
  59. package/dist/providers/codex-provider.d.ts.map +1 -0
  60. package/dist/providers/codex-provider.js +826 -0
  61. package/dist/providers/codex-provider.js.map +1 -0
  62. package/dist/providers/contracts.d.ts +167 -0
  63. package/dist/providers/contracts.d.ts.map +1 -0
  64. package/dist/providers/contracts.js +13 -0
  65. package/dist/providers/contracts.js.map +1 -0
  66. package/dist/providers/index.d.ts +6 -0
  67. package/dist/providers/index.d.ts.map +1 -0
  68. package/dist/providers/index.js +5 -0
  69. package/dist/providers/index.js.map +1 -0
  70. package/dist/providers/jait-provider.d.ts +23 -0
  71. package/dist/providers/jait-provider.d.ts.map +1 -0
  72. package/dist/providers/jait-provider.js +67 -0
  73. package/dist/providers/jait-provider.js.map +1 -0
  74. package/dist/providers/registry.d.ts +39 -0
  75. package/dist/providers/registry.d.ts.map +1 -0
  76. package/dist/providers/registry.js +64 -0
  77. package/dist/providers/registry.js.map +1 -0
  78. package/dist/pty-broker-client.d.ts +46 -0
  79. package/dist/pty-broker-client.d.ts.map +1 -0
  80. package/dist/pty-broker-client.js +142 -0
  81. package/dist/pty-broker-client.js.map +1 -0
  82. package/dist/routes/auth.d.ts +6 -0
  83. package/dist/routes/auth.d.ts.map +1 -0
  84. package/dist/routes/auth.js +236 -0
  85. package/dist/routes/auth.js.map +1 -0
  86. package/dist/routes/chat.d.ts +32 -0
  87. package/dist/routes/chat.d.ts.map +1 -0
  88. package/dist/routes/chat.js +1503 -0
  89. package/dist/routes/chat.js.map +1 -0
  90. package/dist/routes/consent.d.ts +10 -0
  91. package/dist/routes/consent.d.ts.map +1 -0
  92. package/dist/routes/consent.js +127 -0
  93. package/dist/routes/consent.js.map +1 -0
  94. package/dist/routes/filesystem.d.ts +14 -0
  95. package/dist/routes/filesystem.d.ts.map +1 -0
  96. package/dist/routes/filesystem.js +152 -0
  97. package/dist/routes/filesystem.js.map +1 -0
  98. package/dist/routes/git.d.ts +17 -0
  99. package/dist/routes/git.d.ts.map +1 -0
  100. package/dist/routes/git.js +213 -0
  101. package/dist/routes/git.js.map +1 -0
  102. package/dist/routes/health.d.ts +7 -0
  103. package/dist/routes/health.d.ts.map +1 -0
  104. package/dist/routes/health.js +21 -0
  105. package/dist/routes/health.js.map +1 -0
  106. package/dist/routes/hooks.d.ts +9 -0
  107. package/dist/routes/hooks.d.ts.map +1 -0
  108. package/dist/routes/hooks.js +22 -0
  109. package/dist/routes/hooks.js.map +1 -0
  110. package/dist/routes/jobs.d.ts +5 -0
  111. package/dist/routes/jobs.d.ts.map +1 -0
  112. package/dist/routes/jobs.js +333 -0
  113. package/dist/routes/jobs.js.map +1 -0
  114. package/dist/routes/mcp-server.d.ts +23 -0
  115. package/dist/routes/mcp-server.d.ts.map +1 -0
  116. package/dist/routes/mcp-server.js +177 -0
  117. package/dist/routes/mcp-server.js.map +1 -0
  118. package/dist/routes/mobile.d.ts +12 -0
  119. package/dist/routes/mobile.d.ts.map +1 -0
  120. package/dist/routes/mobile.js +64 -0
  121. package/dist/routes/mobile.js.map +1 -0
  122. package/dist/routes/network.d.ts +3 -0
  123. package/dist/routes/network.d.ts.map +1 -0
  124. package/dist/routes/network.js +367 -0
  125. package/dist/routes/network.js.map +1 -0
  126. package/dist/routes/repositories.d.ts +18 -0
  127. package/dist/routes/repositories.d.ts.map +1 -0
  128. package/dist/routes/repositories.js +90 -0
  129. package/dist/routes/repositories.js.map +1 -0
  130. package/dist/routes/screen-share.d.ts +17 -0
  131. package/dist/routes/screen-share.d.ts.map +1 -0
  132. package/dist/routes/screen-share.js +92 -0
  133. package/dist/routes/screen-share.js.map +1 -0
  134. package/dist/routes/sessions.d.ts +18 -0
  135. package/dist/routes/sessions.d.ts.map +1 -0
  136. package/dist/routes/sessions.js +169 -0
  137. package/dist/routes/sessions.js.map +1 -0
  138. package/dist/routes/terminals.d.ts +15 -0
  139. package/dist/routes/terminals.d.ts.map +1 -0
  140. package/dist/routes/terminals.js +326 -0
  141. package/dist/routes/terminals.js.map +1 -0
  142. package/dist/routes/threads.d.ts +38 -0
  143. package/dist/routes/threads.d.ts.map +1 -0
  144. package/dist/routes/threads.js +488 -0
  145. package/dist/routes/threads.js.map +1 -0
  146. package/dist/routes/trust.d.ts +9 -0
  147. package/dist/routes/trust.d.ts.map +1 -0
  148. package/dist/routes/trust.js +25 -0
  149. package/dist/routes/trust.js.map +1 -0
  150. package/dist/routes/voice.d.ts +5 -0
  151. package/dist/routes/voice.d.ts.map +1 -0
  152. package/dist/routes/voice.js +37 -0
  153. package/dist/routes/voice.js.map +1 -0
  154. package/dist/routes/workspace.d.ts +13 -0
  155. package/dist/routes/workspace.d.ts.map +1 -0
  156. package/dist/routes/workspace.js +275 -0
  157. package/dist/routes/workspace.js.map +1 -0
  158. package/dist/scheduler/contracts.d.ts +15 -0
  159. package/dist/scheduler/contracts.d.ts.map +1 -0
  160. package/dist/scheduler/contracts.js +2 -0
  161. package/dist/scheduler/contracts.js.map +1 -0
  162. package/dist/scheduler/hooks.d.ts +20 -0
  163. package/dist/scheduler/hooks.d.ts.map +1 -0
  164. package/dist/scheduler/hooks.js +78 -0
  165. package/dist/scheduler/hooks.js.map +1 -0
  166. package/dist/scheduler/service.d.ts +65 -0
  167. package/dist/scheduler/service.d.ts.map +1 -0
  168. package/dist/scheduler/service.js +188 -0
  169. package/dist/scheduler/service.js.map +1 -0
  170. package/dist/security/consent-executor.d.ts +48 -0
  171. package/dist/security/consent-executor.d.ts.map +1 -0
  172. package/dist/security/consent-executor.js +158 -0
  173. package/dist/security/consent-executor.js.map +1 -0
  174. package/dist/security/consent-manager.d.ts +105 -0
  175. package/dist/security/consent-manager.d.ts.map +1 -0
  176. package/dist/security/consent-manager.js +227 -0
  177. package/dist/security/consent-manager.js.map +1 -0
  178. package/dist/security/contracts.d.ts +31 -0
  179. package/dist/security/contracts.d.ts.map +1 -0
  180. package/dist/security/contracts.js +2 -0
  181. package/dist/security/contracts.js.map +1 -0
  182. package/dist/security/http-auth.d.ts +10 -0
  183. package/dist/security/http-auth.d.ts.map +1 -0
  184. package/dist/security/http-auth.js +48 -0
  185. package/dist/security/http-auth.js.map +1 -0
  186. package/dist/security/index.d.ts +10 -0
  187. package/dist/security/index.d.ts.map +1 -0
  188. package/dist/security/index.js +9 -0
  189. package/dist/security/index.js.map +1 -0
  190. package/dist/security/path-guard.d.ts +40 -0
  191. package/dist/security/path-guard.d.ts.map +1 -0
  192. package/dist/security/path-guard.js +125 -0
  193. package/dist/security/path-guard.js.map +1 -0
  194. package/dist/security/sandbox-manager.d.ts +43 -0
  195. package/dist/security/sandbox-manager.d.ts.map +1 -0
  196. package/dist/security/sandbox-manager.js +110 -0
  197. package/dist/security/sandbox-manager.js.map +1 -0
  198. package/dist/security/ssrf-guard.d.ts +11 -0
  199. package/dist/security/ssrf-guard.d.ts.map +1 -0
  200. package/dist/security/ssrf-guard.js +59 -0
  201. package/dist/security/ssrf-guard.js.map +1 -0
  202. package/dist/security/tool-permissions.d.ts +61 -0
  203. package/dist/security/tool-permissions.d.ts.map +1 -0
  204. package/dist/security/tool-permissions.js +105 -0
  205. package/dist/security/tool-permissions.js.map +1 -0
  206. package/dist/security/tool-profiles.d.ts +23 -0
  207. package/dist/security/tool-profiles.d.ts.map +1 -0
  208. package/dist/security/tool-profiles.js +106 -0
  209. package/dist/security/tool-profiles.js.map +1 -0
  210. package/dist/security/trust-engine.d.ts +61 -0
  211. package/dist/security/trust-engine.d.ts.map +1 -0
  212. package/dist/security/trust-engine.js +192 -0
  213. package/dist/security/trust-engine.js.map +1 -0
  214. package/dist/server.d.ts +54 -0
  215. package/dist/server.d.ts.map +1 -0
  216. package/dist/server.js +188 -0
  217. package/dist/server.js.map +1 -0
  218. package/dist/services/audit.d.ts +60 -0
  219. package/dist/services/audit.d.ts.map +1 -0
  220. package/dist/services/audit.js +58 -0
  221. package/dist/services/audit.js.map +1 -0
  222. package/dist/services/device-registry.d.ts +15 -0
  223. package/dist/services/device-registry.d.ts.map +1 -0
  224. package/dist/services/device-registry.js +32 -0
  225. package/dist/services/device-registry.js.map +1 -0
  226. package/dist/services/git.d.ts +168 -0
  227. package/dist/services/git.d.ts.map +1 -0
  228. package/dist/services/git.js +957 -0
  229. package/dist/services/git.js.map +1 -0
  230. package/dist/services/repositories.d.ts +32 -0
  231. package/dist/services/repositories.d.ts.map +1 -0
  232. package/dist/services/repositories.js +70 -0
  233. package/dist/services/repositories.js.map +1 -0
  234. package/dist/services/session-state.d.ts +20 -0
  235. package/dist/services/session-state.d.ts.map +1 -0
  236. package/dist/services/session-state.js +89 -0
  237. package/dist/services/session-state.js.map +1 -0
  238. package/dist/services/sessions.d.ts +68 -0
  239. package/dist/services/sessions.d.ts.map +1 -0
  240. package/dist/services/sessions.js +136 -0
  241. package/dist/services/sessions.js.map +1 -0
  242. package/dist/services/thread-title.d.ts +23 -0
  243. package/dist/services/thread-title.d.ts.map +1 -0
  244. package/dist/services/thread-title.js +141 -0
  245. package/dist/services/thread-title.js.map +1 -0
  246. package/dist/services/threads.d.ts +64 -0
  247. package/dist/services/threads.d.ts.map +1 -0
  248. package/dist/services/threads.js +202 -0
  249. package/dist/services/threads.js.map +1 -0
  250. package/dist/services/users.d.ts +39 -0
  251. package/dist/services/users.d.ts.map +1 -0
  252. package/dist/services/users.js +203 -0
  253. package/dist/services/users.js.map +1 -0
  254. package/dist/sessions/contracts.d.ts +14 -0
  255. package/dist/sessions/contracts.d.ts.map +1 -0
  256. package/dist/sessions/contracts.js +2 -0
  257. package/dist/sessions/contracts.js.map +1 -0
  258. package/dist/surfaces/browser.d.ts +65 -0
  259. package/dist/surfaces/browser.d.ts.map +1 -0
  260. package/dist/surfaces/browser.js +615 -0
  261. package/dist/surfaces/browser.js.map +1 -0
  262. package/dist/surfaces/contracts.d.ts +34 -0
  263. package/dist/surfaces/contracts.d.ts.map +1 -0
  264. package/dist/surfaces/contracts.js +2 -0
  265. package/dist/surfaces/contracts.js.map +1 -0
  266. package/dist/surfaces/filesystem.d.ts +76 -0
  267. package/dist/surfaces/filesystem.d.ts.map +1 -0
  268. package/dist/surfaces/filesystem.js +245 -0
  269. package/dist/surfaces/filesystem.js.map +1 -0
  270. package/dist/surfaces/index.d.ts +6 -0
  271. package/dist/surfaces/index.d.ts.map +1 -0
  272. package/dist/surfaces/index.js +5 -0
  273. package/dist/surfaces/index.js.map +1 -0
  274. package/dist/surfaces/registry.d.ts +24 -0
  275. package/dist/surfaces/registry.d.ts.map +1 -0
  276. package/dist/surfaces/registry.js +59 -0
  277. package/dist/surfaces/registry.js.map +1 -0
  278. package/dist/surfaces/terminal.d.ts +76 -0
  279. package/dist/surfaces/terminal.d.ts.map +1 -0
  280. package/dist/surfaces/terminal.js +271 -0
  281. package/dist/surfaces/terminal.js.map +1 -0
  282. package/dist/tools/agent-loop.d.ts +302 -0
  283. package/dist/tools/agent-loop.d.ts.map +1 -0
  284. package/dist/tools/agent-loop.js +918 -0
  285. package/dist/tools/agent-loop.js.map +1 -0
  286. package/dist/tools/agent-tools.d.ts +39 -0
  287. package/dist/tools/agent-tools.d.ts.map +1 -0
  288. package/dist/tools/agent-tools.js +263 -0
  289. package/dist/tools/agent-tools.js.map +1 -0
  290. package/dist/tools/browser-tools.d.ts +38 -0
  291. package/dist/tools/browser-tools.d.ts.map +1 -0
  292. package/dist/tools/browser-tools.js +725 -0
  293. package/dist/tools/browser-tools.js.map +1 -0
  294. package/dist/tools/chat-modes.d.ts +75 -0
  295. package/dist/tools/chat-modes.d.ts.map +1 -0
  296. package/dist/tools/chat-modes.js +228 -0
  297. package/dist/tools/chat-modes.js.map +1 -0
  298. package/dist/tools/contracts.d.ts +69 -0
  299. package/dist/tools/contracts.d.ts.map +1 -0
  300. package/dist/tools/contracts.js +2 -0
  301. package/dist/tools/contracts.js.map +1 -0
  302. package/dist/tools/core/agent.d.ts +31 -0
  303. package/dist/tools/core/agent.d.ts.map +1 -0
  304. package/dist/tools/core/agent.js +65 -0
  305. package/dist/tools/core/agent.js.map +1 -0
  306. package/dist/tools/core/edit.d.ts +30 -0
  307. package/dist/tools/core/edit.d.ts.map +1 -0
  308. package/dist/tools/core/edit.js +109 -0
  309. package/dist/tools/core/edit.js.map +1 -0
  310. package/dist/tools/core/execute.d.ts +36 -0
  311. package/dist/tools/core/execute.d.ts.map +1 -0
  312. package/dist/tools/core/execute.js +81 -0
  313. package/dist/tools/core/execute.js.map +1 -0
  314. package/dist/tools/core/get-fs.d.ts +32 -0
  315. package/dist/tools/core/get-fs.d.ts.map +1 -0
  316. package/dist/tools/core/get-fs.js +143 -0
  317. package/dist/tools/core/get-fs.js.map +1 -0
  318. package/dist/tools/core/index.d.ts +26 -0
  319. package/dist/tools/core/index.d.ts.map +1 -0
  320. package/dist/tools/core/index.js +26 -0
  321. package/dist/tools/core/index.js.map +1 -0
  322. package/dist/tools/core/jait.d.ts +60 -0
  323. package/dist/tools/core/jait.d.ts.map +1 -0
  324. package/dist/tools/core/jait.js +256 -0
  325. package/dist/tools/core/jait.js.map +1 -0
  326. package/dist/tools/core/read.d.ts +26 -0
  327. package/dist/tools/core/read.d.ts.map +1 -0
  328. package/dist/tools/core/read.js +118 -0
  329. package/dist/tools/core/read.js.map +1 -0
  330. package/dist/tools/core/search.d.ts +34 -0
  331. package/dist/tools/core/search.d.ts.map +1 -0
  332. package/dist/tools/core/search.js +187 -0
  333. package/dist/tools/core/search.js.map +1 -0
  334. package/dist/tools/core/todo.d.ts +38 -0
  335. package/dist/tools/core/todo.d.ts.map +1 -0
  336. package/dist/tools/core/todo.js +116 -0
  337. package/dist/tools/core/todo.js.map +1 -0
  338. package/dist/tools/core/web.d.ts +34 -0
  339. package/dist/tools/core/web.d.ts.map +1 -0
  340. package/dist/tools/core/web.js +120 -0
  341. package/dist/tools/core/web.js.map +1 -0
  342. package/dist/tools/cron-tools.d.ts +7 -0
  343. package/dist/tools/cron-tools.d.ts.map +1 -0
  344. package/dist/tools/cron-tools.js +116 -0
  345. package/dist/tools/cron-tools.js.map +1 -0
  346. package/dist/tools/file-tools.d.ts +32 -0
  347. package/dist/tools/file-tools.d.ts.map +1 -0
  348. package/dist/tools/file-tools.js +178 -0
  349. package/dist/tools/file-tools.js.map +1 -0
  350. package/dist/tools/gateway-tools.d.ts +15 -0
  351. package/dist/tools/gateway-tools.d.ts.map +1 -0
  352. package/dist/tools/gateway-tools.js +39 -0
  353. package/dist/tools/gateway-tools.js.map +1 -0
  354. package/dist/tools/index.d.ts +57 -0
  355. package/dist/tools/index.d.ts.map +1 -0
  356. package/dist/tools/index.js +170 -0
  357. package/dist/tools/index.js.map +1 -0
  358. package/dist/tools/mcp-bridge.d.ts +111 -0
  359. package/dist/tools/mcp-bridge.d.ts.map +1 -0
  360. package/dist/tools/mcp-bridge.js +166 -0
  361. package/dist/tools/mcp-bridge.js.map +1 -0
  362. package/dist/tools/memory-tools.d.ts +19 -0
  363. package/dist/tools/memory-tools.d.ts.map +1 -0
  364. package/dist/tools/memory-tools.js +78 -0
  365. package/dist/tools/memory-tools.js.map +1 -0
  366. package/dist/tools/meta-tools.d.ts +25 -0
  367. package/dist/tools/meta-tools.d.ts.map +1 -0
  368. package/dist/tools/meta-tools.js +125 -0
  369. package/dist/tools/meta-tools.js.map +1 -0
  370. package/dist/tools/network-tools.d.ts +21 -0
  371. package/dist/tools/network-tools.d.ts.map +1 -0
  372. package/dist/tools/network-tools.js +189 -0
  373. package/dist/tools/network-tools.js.map +1 -0
  374. package/dist/tools/os-tools.d.ts +18 -0
  375. package/dist/tools/os-tools.d.ts.map +1 -0
  376. package/dist/tools/os-tools.js +210 -0
  377. package/dist/tools/os-tools.js.map +1 -0
  378. package/dist/tools/prompts/claude-prompt.d.ts +8 -0
  379. package/dist/tools/prompts/claude-prompt.d.ts.map +1 -0
  380. package/dist/tools/prompts/claude-prompt.js +228 -0
  381. package/dist/tools/prompts/claude-prompt.js.map +1 -0
  382. package/dist/tools/prompts/default-openai-prompt.d.ts +8 -0
  383. package/dist/tools/prompts/default-openai-prompt.d.ts.map +1 -0
  384. package/dist/tools/prompts/default-openai-prompt.js +67 -0
  385. package/dist/tools/prompts/default-openai-prompt.js.map +1 -0
  386. package/dist/tools/prompts/default-prompt.d.ts +7 -0
  387. package/dist/tools/prompts/default-prompt.d.ts.map +1 -0
  388. package/dist/tools/prompts/default-prompt.js +50 -0
  389. package/dist/tools/prompts/default-prompt.js.map +1 -0
  390. package/dist/tools/prompts/gemini-prompt.d.ts +8 -0
  391. package/dist/tools/prompts/gemini-prompt.d.ts.map +1 -0
  392. package/dist/tools/prompts/gemini-prompt.js +118 -0
  393. package/dist/tools/prompts/gemini-prompt.js.map +1 -0
  394. package/dist/tools/prompts/gpt5-codex-prompt.d.ts +8 -0
  395. package/dist/tools/prompts/gpt5-codex-prompt.d.ts.map +1 -0
  396. package/dist/tools/prompts/gpt5-codex-prompt.js +72 -0
  397. package/dist/tools/prompts/gpt5-codex-prompt.js.map +1 -0
  398. package/dist/tools/prompts/gpt5-prompt.d.ts +8 -0
  399. package/dist/tools/prompts/gpt5-prompt.d.ts.map +1 -0
  400. package/dist/tools/prompts/gpt5-prompt.js +177 -0
  401. package/dist/tools/prompts/gpt5-prompt.js.map +1 -0
  402. package/dist/tools/prompts/gpt51-prompt.d.ts +8 -0
  403. package/dist/tools/prompts/gpt51-prompt.d.ts.map +1 -0
  404. package/dist/tools/prompts/gpt51-prompt.js +178 -0
  405. package/dist/tools/prompts/gpt51-prompt.js.map +1 -0
  406. package/dist/tools/prompts/gpt52-prompt.d.ts +8 -0
  407. package/dist/tools/prompts/gpt52-prompt.d.ts.map +1 -0
  408. package/dist/tools/prompts/gpt52-prompt.js +198 -0
  409. package/dist/tools/prompts/gpt52-prompt.js.map +1 -0
  410. package/dist/tools/prompts/index.d.ts +22 -0
  411. package/dist/tools/prompts/index.d.ts.map +1 -0
  412. package/dist/tools/prompts/index.js +23 -0
  413. package/dist/tools/prompts/index.js.map +1 -0
  414. package/dist/tools/prompts/prompt-registry.d.ts +44 -0
  415. package/dist/tools/prompts/prompt-registry.d.ts.map +1 -0
  416. package/dist/tools/prompts/prompt-registry.js +60 -0
  417. package/dist/tools/prompts/prompt-registry.js.map +1 -0
  418. package/dist/tools/prompts/shared-sections.d.ts +28 -0
  419. package/dist/tools/prompts/shared-sections.d.ts.map +1 -0
  420. package/dist/tools/prompts/shared-sections.js +111 -0
  421. package/dist/tools/prompts/shared-sections.js.map +1 -0
  422. package/dist/tools/prompts/xai-prompt.d.ts +8 -0
  423. package/dist/tools/prompts/xai-prompt.d.ts.map +1 -0
  424. package/dist/tools/prompts/xai-prompt.js +68 -0
  425. package/dist/tools/prompts/xai-prompt.js.map +1 -0
  426. package/dist/tools/redeploy-tools.d.ts +30 -0
  427. package/dist/tools/redeploy-tools.d.ts.map +1 -0
  428. package/dist/tools/redeploy-tools.js +191 -0
  429. package/dist/tools/redeploy-tools.js.map +1 -0
  430. package/dist/tools/registry.d.ts +51 -0
  431. package/dist/tools/registry.d.ts.map +1 -0
  432. package/dist/tools/registry.js +148 -0
  433. package/dist/tools/registry.js.map +1 -0
  434. package/dist/tools/screen-share-tools.d.ts +31 -0
  435. package/dist/tools/screen-share-tools.d.ts.map +1 -0
  436. package/dist/tools/screen-share-tools.js +183 -0
  437. package/dist/tools/screen-share-tools.js.map +1 -0
  438. package/dist/tools/surface-tools.d.ts +23 -0
  439. package/dist/tools/surface-tools.d.ts.map +1 -0
  440. package/dist/tools/surface-tools.js +99 -0
  441. package/dist/tools/surface-tools.js.map +1 -0
  442. package/dist/tools/terminal-tools.d.ts +37 -0
  443. package/dist/tools/terminal-tools.d.ts.map +1 -0
  444. package/dist/tools/terminal-tools.js +448 -0
  445. package/dist/tools/terminal-tools.js.map +1 -0
  446. package/dist/tools/thread-tools.d.ts +61 -0
  447. package/dist/tools/thread-tools.d.ts.map +1 -0
  448. package/dist/tools/thread-tools.js +484 -0
  449. package/dist/tools/thread-tools.js.map +1 -0
  450. package/dist/tools/token-estimator.d.ts +55 -0
  451. package/dist/tools/token-estimator.d.ts.map +1 -0
  452. package/dist/tools/token-estimator.js +82 -0
  453. package/dist/tools/token-estimator.js.map +1 -0
  454. package/dist/tools/tool-names.d.ts +64 -0
  455. package/dist/tools/tool-names.d.ts.map +1 -0
  456. package/dist/tools/tool-names.js +76 -0
  457. package/dist/tools/tool-names.js.map +1 -0
  458. package/dist/tools/validate.d.ts +27 -0
  459. package/dist/tools/validate.d.ts.map +1 -0
  460. package/dist/tools/validate.js +99 -0
  461. package/dist/tools/validate.js.map +1 -0
  462. package/dist/tools/voice-tools.d.ts +8 -0
  463. package/dist/tools/voice-tools.d.ts.map +1 -0
  464. package/dist/tools/voice-tools.js +32 -0
  465. package/dist/tools/voice-tools.js.map +1 -0
  466. package/dist/voice/service.d.ts +42 -0
  467. package/dist/voice/service.d.ts.map +1 -0
  468. package/dist/voice/service.js +75 -0
  469. package/dist/voice/service.js.map +1 -0
  470. package/dist/ws.d.ts +90 -0
  471. package/dist/ws.d.ts.map +1 -0
  472. package/dist/ws.js +562 -0
  473. package/dist/ws.js.map +1 -0
  474. package/package.json +61 -0
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Session REST routes.
3
+ *
4
+ * POST /api/sessions — create
5
+ * GET /api/sessions — list (filter by ?status=active)
6
+ * GET /api/sessions/:id — get by ID
7
+ * PATCH /api/sessions/:id — update name / metadata
8
+ * DELETE /api/sessions/:id — soft-delete
9
+ * POST /api/sessions/:id/archive — archive
10
+ */
11
+ import type { FastifyInstance } from "fastify";
12
+ import type { AppConfig } from "../config.js";
13
+ import type { SessionService } from "../services/sessions.js";
14
+ import type { SessionStateService } from "../services/session-state.js";
15
+ import type { AuditWriter } from "../services/audit.js";
16
+ import type { HookBus } from "../scheduler/hooks.js";
17
+ export declare function registerSessionRoutes(app: FastifyInstance, config: AppConfig, sessionService: SessionService, audit: AuditWriter, hooks?: HookBus, sessionState?: SessionStateService): void;
18
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,WAAW,EAClB,KAAK,CAAC,EAAE,OAAO,EACf,YAAY,CAAC,EAAE,mBAAmB,QA+KnC"}
@@ -0,0 +1,169 @@
1
+ import { uuidv7 } from "../lib/uuidv7.js";
2
+ import { requireAuth } from "../security/http-auth.js";
3
+ export function registerSessionRoutes(app, config, sessionService, audit, hooks, sessionState) {
4
+ // Create session
5
+ app.post("/api/sessions", async (request, reply) => {
6
+ const authUser = await requireAuth(request, reply, config.jwtSecret);
7
+ if (!authUser)
8
+ return;
9
+ const body = request.body ?? {};
10
+ const session = sessionService.create({
11
+ userId: authUser.id,
12
+ name: typeof body["name"] === "string" ? body["name"] : undefined,
13
+ workspacePath: typeof body["workspacePath"] === "string"
14
+ ? body["workspacePath"]
15
+ : undefined,
16
+ });
17
+ audit.write({
18
+ sessionId: session.id,
19
+ actionId: uuidv7(),
20
+ actionType: "session.create",
21
+ status: "executed",
22
+ consentMethod: "auto",
23
+ });
24
+ hooks?.emit("session.start", {
25
+ sessionId: session.id,
26
+ workspaceRoot: session.workspacePath ?? process.cwd(),
27
+ });
28
+ return reply.status(201).send(session);
29
+ });
30
+ // List sessions
31
+ app.get("/api/sessions", async (request, reply) => {
32
+ const authUser = await requireAuth(request, reply, config.jwtSecret);
33
+ if (!authUser)
34
+ return;
35
+ const query = request.query;
36
+ const status = typeof query["status"] === "string" ? query["status"] : undefined;
37
+ return { sessions: sessionService.list(status, authUser.id) };
38
+ });
39
+ // Get the most recently active session
40
+ app.get("/api/sessions/last-active", async (request, reply) => {
41
+ const authUser = await requireAuth(request, reply, config.jwtSecret);
42
+ if (!authUser)
43
+ return;
44
+ const session = sessionService.lastActive(authUser.id);
45
+ return { session };
46
+ });
47
+ // Get session by ID
48
+ app.get("/api/sessions/:id", async (request, reply) => {
49
+ const authUser = await requireAuth(request, reply, config.jwtSecret);
50
+ if (!authUser)
51
+ return;
52
+ const { id } = request.params;
53
+ // Skip the /:sessionId/messages route (handled by chat.ts)
54
+ if (id === "messages")
55
+ return reply.callNotFound();
56
+ const session = sessionService.getById(id, authUser.id);
57
+ if (!session) {
58
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Session not found" });
59
+ }
60
+ return session;
61
+ });
62
+ // Update session
63
+ app.patch("/api/sessions/:id", async (request, reply) => {
64
+ const authUser = await requireAuth(request, reply, config.jwtSecret);
65
+ if (!authUser)
66
+ return;
67
+ const { id } = request.params;
68
+ const body = request.body ?? {};
69
+ const session = sessionService.getById(id, authUser.id);
70
+ if (!session) {
71
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Session not found" });
72
+ }
73
+ sessionService.update(id, {
74
+ name: typeof body["name"] === "string" ? body["name"] : undefined,
75
+ }, authUser.id);
76
+ return sessionService.getById(id, authUser.id);
77
+ });
78
+ // Soft-delete session
79
+ app.delete("/api/sessions/:id", async (request, reply) => {
80
+ const authUser = await requireAuth(request, reply, config.jwtSecret);
81
+ if (!authUser)
82
+ return;
83
+ const { id } = request.params;
84
+ const session = sessionService.getById(id, authUser.id);
85
+ if (!session) {
86
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Session not found" });
87
+ }
88
+ sessionService.delete(id, authUser.id);
89
+ audit.write({
90
+ sessionId: id,
91
+ actionId: uuidv7(),
92
+ actionType: "session.delete",
93
+ status: "executed",
94
+ consentMethod: "auto",
95
+ });
96
+ return { ok: true };
97
+ });
98
+ // Archive session
99
+ app.post("/api/sessions/:id/archive", async (request, reply) => {
100
+ const authUser = await requireAuth(request, reply, config.jwtSecret);
101
+ if (!authUser)
102
+ return;
103
+ const { id } = request.params;
104
+ const session = sessionService.getById(id, authUser.id);
105
+ if (!session) {
106
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Session not found" });
107
+ }
108
+ sessionService.archive(id, authUser.id);
109
+ hooks?.emit("session.end", { sessionId: id });
110
+ return sessionService.getById(id, authUser.id);
111
+ });
112
+ // ─── Self-control tools ────────────────────────────────────────────
113
+ // These endpoints are called by the LLM agent itself.
114
+ // sessions.list — agent can list active sessions
115
+ app.get("/api/tools/sessions.list", async () => {
116
+ return { sessions: sessionService.list("active") };
117
+ });
118
+ // sessions.status — agent can check a specific session's status
119
+ app.get("/api/tools/sessions.status", async (request, reply) => {
120
+ const query = request.query;
121
+ const sessionId = typeof query["sessionId"] === "string" ? query["sessionId"] : undefined;
122
+ if (!sessionId) {
123
+ return reply
124
+ .status(400)
125
+ .send({ error: "VALIDATION_ERROR", details: "sessionId query param required" });
126
+ }
127
+ const session = sessionService.getById(sessionId);
128
+ if (!session) {
129
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Session not found" });
130
+ }
131
+ return session;
132
+ });
133
+ // ─── Session State (per-session key-value store) ───────────────────
134
+ if (sessionState) {
135
+ // GET /api/sessions/:id/state?keys=workspace.panel,terminal.visible
136
+ app.get("/api/sessions/:id/state", async (request, reply) => {
137
+ const authUser = await requireAuth(request, reply, config.jwtSecret);
138
+ if (!authUser)
139
+ return;
140
+ const { id } = request.params;
141
+ const session = sessionService.getById(id, authUser.id);
142
+ if (!session) {
143
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Session not found" });
144
+ }
145
+ const query = request.query;
146
+ const keysParam = typeof query["keys"] === "string" ? query["keys"] : undefined;
147
+ const keys = keysParam ? keysParam.split(",").map((k) => k.trim()).filter(Boolean) : undefined;
148
+ return sessionState.get(id, keys);
149
+ });
150
+ // PATCH /api/sessions/:id/state — body: { "workspace.panel": {...}, "key2": null }
151
+ app.patch("/api/sessions/:id/state", async (request, reply) => {
152
+ const authUser = await requireAuth(request, reply, config.jwtSecret);
153
+ if (!authUser)
154
+ return;
155
+ const { id } = request.params;
156
+ const session = sessionService.getById(id, authUser.id);
157
+ if (!session) {
158
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Session not found" });
159
+ }
160
+ const body = request.body ?? {};
161
+ if (typeof body !== "object" || Array.isArray(body)) {
162
+ return reply.status(400).send({ error: "VALIDATION_ERROR", details: "Body must be a JSON object of key→value pairs" });
163
+ }
164
+ sessionState.set(id, body);
165
+ return { ok: true };
166
+ });
167
+ }
168
+ }
169
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Terminal Routes — Sprint 3.5
3
+ *
4
+ * REST + WebSocket endpoints for terminal interaction.
5
+ */
6
+ import type { FastifyInstance } from "fastify";
7
+ import type { SurfaceRegistry } from "../surfaces/index.js";
8
+ import type { ToolRegistry } from "../tools/registry.js";
9
+ import type { ToolContext, ToolResult } from "../tools/contracts.js";
10
+ import type { AuditWriter } from "../services/audit.js";
11
+ export declare function registerTerminalRoutes(app: FastifyInstance, surfaceRegistry: SurfaceRegistry, toolRegistry: ToolRegistry, audit: AuditWriter, toolExecutor?: (toolName: string, input: unknown, context: ToolContext, options?: {
12
+ dryRun?: boolean;
13
+ consentTimeoutMs?: number;
14
+ }) => Promise<ToolResult>): void;
15
+ //# sourceMappingURL=terminals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminals.d.ts","sourceRoot":"","sources":["../../src/routes/terminals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAiBxD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,WAAW,EAClB,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,KACtD,OAAO,CAAC,UAAU,CAAC,QAqVzB"}
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Terminal Routes — Sprint 3.5
3
+ *
4
+ * REST + WebSocket endpoints for terminal interaction.
5
+ */
6
+ import { TerminalSurface } from "../surfaces/terminal.js";
7
+ import { uuidv7 } from "../lib/uuidv7.js";
8
+ import { writeFileSync, unlinkSync, mkdirSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { tmpdir } from "node:os";
11
+ /** Strip ANSI escape sequences */
12
+ function stripAnsi(s) {
13
+ // eslint-disable-next-line no-control-regex
14
+ return s.replace(/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\].*?(?:\x07|\x1B\\))/g, "");
15
+ }
16
+ // OSC 633 sequence patterns (same as terminal-tools.ts)
17
+ const OSC_DONE_RE = /\x1b\]633;D;(-?\d*)(?:\x07|\x1b\\)/;
18
+ const OSC_PROMPT_END_RE = /\x1b\]633;B(?:\x07|\x1b\\)/;
19
+ export function registerTerminalRoutes(app, surfaceRegistry, toolRegistry, audit, toolExecutor) {
20
+ // POST /api/terminals — create a new terminal
21
+ app.post("/api/terminals", async (request, reply) => {
22
+ const body = request.body ?? {};
23
+ const sessionId = typeof body["sessionId"] === "string" ? body["sessionId"] : "default";
24
+ const workspaceRoot = typeof body["workspaceRoot"] === "string" ? body["workspaceRoot"] : process.cwd();
25
+ const cols = typeof body["cols"] === "number" ? body["cols"] : 120;
26
+ const rows = typeof body["rows"] === "number" ? body["rows"] : 30;
27
+ const termId = `term-${uuidv7()}`;
28
+ try {
29
+ const surface = await surfaceRegistry.startSurface("terminal", termId, {
30
+ sessionId,
31
+ workspaceRoot,
32
+ });
33
+ // onOutput is auto-wired by surfaceRegistry.onSurfaceStarted
34
+ if (cols && rows)
35
+ surface.resize(cols, rows);
36
+ audit.write({
37
+ sessionId,
38
+ actionId: uuidv7(),
39
+ actionType: "terminal.create",
40
+ toolName: "terminal.stream",
41
+ inputs: { termId, workspaceRoot },
42
+ status: "executed",
43
+ });
44
+ return reply.status(201).send(surface.snapshot());
45
+ }
46
+ catch (err) {
47
+ return reply.status(500).send({
48
+ error: "TERMINAL_ERROR",
49
+ details: err instanceof Error ? err.message : "Failed to create terminal",
50
+ });
51
+ }
52
+ });
53
+ // GET /api/terminals — list terminals
54
+ app.get("/api/terminals", async () => {
55
+ const terminals = surfaceRegistry
56
+ .listSurfaces()
57
+ .filter((s) => s.type === "terminal")
58
+ .map((s) => s.snapshot());
59
+ return { terminals };
60
+ });
61
+ // GET /api/terminals/:id — get terminal info
62
+ app.get("/api/terminals/:id", async (request, reply) => {
63
+ const { id } = request.params;
64
+ const surface = surfaceRegistry.getSurface(id);
65
+ if (!surface || surface.type !== "terminal") {
66
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Terminal not found" });
67
+ }
68
+ return surface.snapshot();
69
+ });
70
+ // POST /api/terminals/:id/write — write data to terminal
71
+ app.post("/api/terminals/:id/write", async (request, reply) => {
72
+ const { id } = request.params;
73
+ const body = request.body ?? {};
74
+ const data = typeof body["data"] === "string" ? body["data"] : "";
75
+ const surface = surfaceRegistry.getSurface(id);
76
+ if (!surface || surface.type !== "terminal") {
77
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Terminal not found" });
78
+ }
79
+ try {
80
+ surface.write(data);
81
+ return { ok: true };
82
+ }
83
+ catch (err) {
84
+ return reply.status(400).send({
85
+ error: "TERMINAL_ERROR",
86
+ details: err instanceof Error ? err.message : "Write failed",
87
+ });
88
+ }
89
+ });
90
+ // POST /api/terminals/:id/resize — resize terminal
91
+ app.post("/api/terminals/:id/resize", async (request, reply) => {
92
+ const { id } = request.params;
93
+ const body = request.body ?? {};
94
+ const cols = typeof body["cols"] === "number" ? body["cols"] : 120;
95
+ const rows = typeof body["rows"] === "number" ? body["rows"] : 30;
96
+ const surface = surfaceRegistry.getSurface(id);
97
+ if (!surface || surface.type !== "terminal") {
98
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Terminal not found" });
99
+ }
100
+ surface.resize(cols, rows);
101
+ return { ok: true, cols, rows };
102
+ });
103
+ // DELETE /api/terminals/:id — kill terminal
104
+ app.delete("/api/terminals/:id", async (request, reply) => {
105
+ const { id } = request.params;
106
+ const stopped = await surfaceRegistry.stopSurface(id, "user request");
107
+ if (!stopped) {
108
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Terminal not found" });
109
+ }
110
+ audit.write({
111
+ actionId: uuidv7(),
112
+ actionType: "terminal.stop",
113
+ toolName: "terminal.stream",
114
+ inputs: { termId: id },
115
+ status: "executed",
116
+ });
117
+ return { ok: true };
118
+ });
119
+ // POST /api/terminals/:id/execute — run a command and return output
120
+ app.post("/api/terminals/:id/execute", async (request, reply) => {
121
+ const { id } = request.params;
122
+ const body = request.body ?? {};
123
+ const command = typeof body["command"] === "string" ? body["command"] : "";
124
+ const timeout = typeof body["timeout"] === "number" ? body["timeout"] : 30000;
125
+ if (!command.trim()) {
126
+ return reply.status(400).send({ error: "VALIDATION_ERROR", details: "command is required" });
127
+ }
128
+ const surface = surfaceRegistry.getSurface(id);
129
+ if (!surface || surface.type !== "terminal") {
130
+ return reply.status(404).send({ error: "NOT_FOUND", details: "Terminal not found" });
131
+ }
132
+ try {
133
+ // Ensure shell integration is ready before executing
134
+ await surface.waitForPrompt();
135
+ // Execute command using OSC 633 shell integration
136
+ const result = await new Promise((resolve) => {
137
+ let raw = "";
138
+ let settled = false;
139
+ // Cached D-marker result so we only scan for it once
140
+ let dMatch = null;
141
+ // Settle timer: after D+B is detected, wait briefly for any late
142
+ // output from PowerShell's deferred formatting pipeline.
143
+ let settleTimer = null;
144
+ const listener = (data) => {
145
+ raw += data;
146
+ if (settled)
147
+ return;
148
+ // If settling (D+B already found), reset timer on new data.
149
+ if (settleTimer) {
150
+ clearTimeout(settleTimer);
151
+ settleTimer = setTimeout(() => finish(false, dMatch.exitCode), 50);
152
+ return;
153
+ }
154
+ // Step 1: Find D marker (command done — provides exit code)
155
+ if (!dMatch) {
156
+ const m = raw.match(OSC_DONE_RE);
157
+ if (m) {
158
+ dMatch = {
159
+ exitCode: m[1] ? parseInt(m[1], 10) : 0,
160
+ end: m.index + m[0].length,
161
+ };
162
+ }
163
+ }
164
+ // Step 2: After D, wait for B (prompt-end). Start a settle
165
+ // timer instead of finishing immediately — PowerShell can
166
+ // flush output after the prompt markers.
167
+ if (dMatch && OSC_PROMPT_END_RE.test(raw.slice(dMatch.end))) {
168
+ settleTimer = setTimeout(() => finish(false, dMatch.exitCode), 50);
169
+ }
170
+ };
171
+ const finish = (timedOut, exitCode = null) => {
172
+ if (settled)
173
+ return;
174
+ settled = true;
175
+ clearTimeout(timer);
176
+ if (settleTimer)
177
+ clearTimeout(settleTimer);
178
+ surface.removeOutputListener(listener);
179
+ // Clean up temp script file
180
+ if (tmpFile) {
181
+ try {
182
+ unlinkSync(tmpFile);
183
+ }
184
+ catch { /* already gone */ }
185
+ }
186
+ // Strip all OSC 633 sequences — they are invisible control codes,
187
+ // so removing them leaves visible text in order:
188
+ // echoed command → command output → prompt text
189
+ let output = raw.replace(/\x1b\]633;[A-Z][^\x07]*(?:\x07|\x1b\\)/g, "");
190
+ output = stripAnsi(output).replace(/\r/g, "");
191
+ // Split into lines for targeted cleanup
192
+ const lines = output.split("\n");
193
+ // Remove echoed command line(s)
194
+ if (tmpFile) {
195
+ // For dot-sourced multi-line: remove the ". 'path'" echo
196
+ if (lines.length > 0 && (lines[0].trim().startsWith(". '") || lines[0].trim().startsWith("."))) {
197
+ lines.shift();
198
+ }
199
+ }
200
+ else {
201
+ const cmdLines = command.trim().split("\n").map((l) => l.trim());
202
+ while (lines.length > 0 && cmdLines.length > 0) {
203
+ const head = lines[0].trim();
204
+ const cmdHead = cmdLines[0];
205
+ if (head === cmdHead || head.endsWith(cmdHead) || cmdHead.startsWith(head)) {
206
+ lines.shift();
207
+ cmdLines.shift();
208
+ }
209
+ else {
210
+ break;
211
+ }
212
+ }
213
+ }
214
+ // Remove trailing empty lines
215
+ while (lines.length > 0 && lines[lines.length - 1].trim() === "") {
216
+ lines.pop();
217
+ }
218
+ // Remove the prompt line at the end (e.g. "PS E:\path> ")
219
+ if (lines.length > 0) {
220
+ const lastLine = lines[lines.length - 1].trim();
221
+ if (/^PS .+?>/.test(lastLine)) {
222
+ lines.pop();
223
+ }
224
+ }
225
+ output = lines.join("\n").trim();
226
+ if (output.length > 200_000)
227
+ output = "…(truncated)\n" + output.slice(-200_000);
228
+ resolve({ output: output || "(no output)", exitCode, timedOut });
229
+ };
230
+ surface.addOutputListener(listener);
231
+ const timer = setTimeout(() => {
232
+ surface.write("\x03\r");
233
+ setTimeout(() => finish(true), 500);
234
+ }, timeout);
235
+ // For multi-line commands, write to a temp .ps1 file and
236
+ // dot-source it — PSReadLine treats \n as separate Enter
237
+ // keystrokes, garbling execution order.
238
+ let tmpFile = null;
239
+ if (command.includes("\n")) {
240
+ const dir = join(tmpdir(), "jait-terminal");
241
+ mkdirSync(dir, { recursive: true });
242
+ tmpFile = join(dir, `cmd-${Date.now()}.ps1`);
243
+ writeFileSync(tmpFile, command, "utf-8");
244
+ surface.write(`. '${tmpFile.replace(/'/g, "''")}'\r`);
245
+ }
246
+ else {
247
+ surface.write(command + "\r");
248
+ }
249
+ });
250
+ const cleanOutput = result.output;
251
+ const ok = !result.timedOut && result.exitCode === 0;
252
+ const message = ok
253
+ ? "Command completed (exit code 0)"
254
+ : result.timedOut
255
+ ? `Command timed out after ${timeout}ms`
256
+ : result.exitCode == null
257
+ ? "Command failed (exit status unavailable)"
258
+ : `Command failed (exit code ${result.exitCode})`;
259
+ audit.write({
260
+ sessionId: surface.sessionId ?? undefined,
261
+ actionId: uuidv7(),
262
+ actionType: "terminal.run",
263
+ toolName: "terminal.run",
264
+ inputs: { command },
265
+ outputs: {
266
+ output: cleanOutput.slice(0, 10000),
267
+ exitCode: result.exitCode,
268
+ timedOut: result.timedOut,
269
+ },
270
+ status: ok ? "executed" : "failed",
271
+ });
272
+ return {
273
+ ok,
274
+ message,
275
+ output: cleanOutput,
276
+ exitCode: result.exitCode,
277
+ timedOut: result.timedOut,
278
+ };
279
+ }
280
+ catch (err) {
281
+ return reply.status(500).send({
282
+ error: "TERMINAL_ERROR",
283
+ details: err instanceof Error ? err.message : "Command execution failed",
284
+ });
285
+ }
286
+ });
287
+ // POST /api/tools/execute — generic tool execution endpoint
288
+ app.post("/api/tools/execute", async (request, reply) => {
289
+ const body = request.body ?? {};
290
+ const toolName = typeof body["tool"] === "string" ? body["tool"] : "";
291
+ const input = body["input"] ?? {};
292
+ const sessionId = typeof body["sessionId"] === "string" ? body["sessionId"] : "default";
293
+ const workspaceRoot = typeof body["workspaceRoot"] === "string" ? body["workspaceRoot"] : process.cwd();
294
+ const dryRun = body["dryRun"] === true;
295
+ const consentTimeoutMs = typeof body["consentTimeoutMs"] === "number" ? body["consentTimeoutMs"] : undefined;
296
+ if (!toolName) {
297
+ return reply.status(400).send({ error: "VALIDATION_ERROR", details: "tool name is required" });
298
+ }
299
+ const context = {
300
+ sessionId,
301
+ actionId: uuidv7(),
302
+ workspaceRoot,
303
+ requestedBy: "api",
304
+ };
305
+ const result = toolExecutor
306
+ ? await toolExecutor(toolName, input, context, { dryRun, consentTimeoutMs })
307
+ : await toolRegistry.execute(toolName, input, context, audit);
308
+ return result;
309
+ });
310
+ // GET /api/tools — list all available tools
311
+ app.get("/api/tools", async () => {
312
+ const tools = toolRegistry.list().map((t) => ({
313
+ name: t.name,
314
+ description: t.description,
315
+ }));
316
+ return { tools };
317
+ });
318
+ // GET /api/surfaces — list all surfaces
319
+ app.get("/api/surfaces", async () => {
320
+ return {
321
+ surfaces: surfaceRegistry.listSnapshots(),
322
+ registeredTypes: surfaceRegistry.registeredTypes,
323
+ };
324
+ });
325
+ }
326
+ //# sourceMappingURL=terminals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminals.js","sourceRoot":"","sources":["../../src/routes/terminals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Agent Thread REST + WS routes.
3
+ *
4
+ * Manages parallel agent threads — each thread is an independent agent
5
+ * session running on a specific provider (jait, codex, claude-code).
6
+ *
7
+ * GET /api/threads — list threads
8
+ * POST /api/threads — create thread
9
+ * GET /api/threads/:id — get thread
10
+ * PATCH /api/threads/:id — update thread
11
+ * DELETE /api/threads/:id — delete thread
12
+ * POST /api/threads/:id/start — start agent session
13
+ * POST /api/threads/:id/send — send a turn
14
+ * POST /api/threads/:id/stop — stop agent session
15
+ * POST /api/threads/:id/interrupt — interrupt current turn
16
+ * POST /api/threads/:id/approve — approve a tool call
17
+ * POST /api/threads/:id/create-pr — create a PR for a completed thread
18
+ * GET /api/threads/:id/activities — get activity log
19
+ * GET /api/providers — list available providers
20
+ */
21
+ import type { FastifyInstance } from "fastify";
22
+ import type { AppConfig } from "../config.js";
23
+ import type { ThreadService } from "../services/threads.js";
24
+ import type { ProviderRegistry } from "../providers/registry.js";
25
+ import type { WsControlPlane } from "../ws.js";
26
+ import { type GitStackedAction, type GitStepResult } from "../services/git.js";
27
+ import type { UserService } from "../services/users.js";
28
+ export interface ThreadRouteDeps {
29
+ threadService: ThreadService;
30
+ providerRegistry: ProviderRegistry;
31
+ userService?: UserService;
32
+ ws?: WsControlPlane;
33
+ gitService?: {
34
+ runStackedAction(cwd: string, action: GitStackedAction, commitMessage?: string, featureBranch?: boolean, baseBranch?: string, githubToken?: string): Promise<GitStepResult>;
35
+ };
36
+ }
37
+ export declare function registerThreadRoutes(app: FastifyInstance, config: AppConfig, deps: ThreadRouteDeps): void;
38
+ //# sourceMappingURL=threads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,OAAO,EAAc,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQxD,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,UAAU,CAAC,EAAE;QACX,gBAAgB,CACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,EACxB,aAAa,CAAC,EAAE,MAAM,EACtB,aAAa,CAAC,EAAE,OAAO,EACvB,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAAC;KAC3B,CAAC;CACH;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,eAAe,GACpB,IAAI,CAggBN"}