@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,367 @@
1
+ import { exec } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { platform } from "node:os";
4
+ import { networkInterfaces } from "node:os";
5
+ import { createConnection } from "node:net";
6
+ import { getLatestNetworkScan, setLatestNetworkScan } from "../tools/network-tools.js";
7
+ const execAsync = promisify(exec);
8
+ // ---------------------------------------------------------------------------
9
+ // Helpers
10
+ // ---------------------------------------------------------------------------
11
+ /** Derive the local subnet (e.g. "192.168.1") from active network interfaces. */
12
+ function getLocalSubnets() {
13
+ const ifaces = networkInterfaces();
14
+ const subnets = [];
15
+ for (const entries of Object.values(ifaces)) {
16
+ if (!entries)
17
+ continue;
18
+ for (const entry of entries) {
19
+ if (entry.family === "IPv4" && !entry.internal) {
20
+ // Skip link-local / APIPA addresses (169.254.x.x)
21
+ if (entry.address.startsWith("169.254."))
22
+ continue;
23
+ const parts = entry.address.split(".");
24
+ subnets.push(parts.slice(0, 3).join("."));
25
+ }
26
+ }
27
+ }
28
+ return [...new Set(subnets)];
29
+ }
30
+ /** Parse the output of `arp -a` into a list of IP→MAC pairs. */
31
+ function parseArpTable(output) {
32
+ const results = [];
33
+ // Matches lines like " 192.168.1.1 00-0a-95-9d-68-16 dynamic"
34
+ // or "(192.168.1.1) at 00:0a:95:9d:68:16 [ether] on eth0"
35
+ const lineRegex = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(?:at\s+)?([0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-fA-F]{2})/;
36
+ for (const line of output.split("\n")) {
37
+ const match = lineRegex.exec(line);
38
+ if (match) {
39
+ results.push({ ip: match[1], mac: match[2].replace(/-/g, ":").toLowerCase() });
40
+ }
41
+ }
42
+ return results;
43
+ }
44
+ /** TCP-connect probe to check if a single port is open. */
45
+ function probePort(ip, port, timeoutMs = 2000) {
46
+ return new Promise((resolve) => {
47
+ const socket = createConnection({ host: ip, port, timeout: timeoutMs });
48
+ socket.once("connect", () => { socket.destroy(); resolve(true); });
49
+ socket.once("timeout", () => { socket.destroy(); resolve(false); });
50
+ socket.once("error", () => { socket.destroy(); resolve(false); });
51
+ });
52
+ }
53
+ /** Resolve hostname via reverse-DNS. */
54
+ async function reverseResolve(ip) {
55
+ try {
56
+ const cmd = platform() === "win32"
57
+ ? `nslookup ${ip} 2>nul`
58
+ : `host ${ip} 2>/dev/null || true`;
59
+ const { stdout } = await execAsync(cmd, { timeout: 3000 });
60
+ // Windows: "Name: myhost.local"
61
+ const winMatch = /Name:\s+(\S+)/i.exec(stdout);
62
+ if (winMatch)
63
+ return winMatch[1];
64
+ // Linux: "1.168.192.in-addr.arpa domain name pointer myhost.local."
65
+ const linMatch = /pointer\s+(\S+)/i.exec(stdout);
66
+ if (linMatch)
67
+ return linMatch[1].replace(/\.$/, "");
68
+ return null;
69
+ }
70
+ catch {
71
+ return null;
72
+ }
73
+ }
74
+ // ---------------------------------------------------------------------------
75
+ // In-memory node registry (gateway mesh)
76
+ // ---------------------------------------------------------------------------
77
+ const knownNodes = new Map();
78
+ // ---------------------------------------------------------------------------
79
+ // Route registration
80
+ // ---------------------------------------------------------------------------
81
+ export function registerNetworkRoutes(app) {
82
+ // ---- GET /api/network/interfaces — local NIC info ----
83
+ app.get("/api/network/interfaces", async () => {
84
+ const ifaces = networkInterfaces();
85
+ const result = [];
86
+ for (const [name, entries] of Object.entries(ifaces)) {
87
+ if (!entries)
88
+ continue;
89
+ for (const entry of entries) {
90
+ if (entry.family === "IPv4") {
91
+ result.push({ name, ip: entry.address, mac: entry.mac, netmask: entry.netmask, internal: entry.internal });
92
+ }
93
+ }
94
+ }
95
+ return { interfaces: result };
96
+ });
97
+ // ---- GET /api/network/scan/latest — return cached scan from the scheduled job ----
98
+ app.get("/api/network/scan/latest", async () => {
99
+ const cached = getLatestNetworkScan();
100
+ if (!cached) {
101
+ return { ok: false, message: "No scan results yet. Trigger a scan or wait for the scheduled job." };
102
+ }
103
+ return cached;
104
+ });
105
+ // ---- POST /api/network/scan — ARP scan + port probe ----
106
+ app.post("/api/network/scan", async (request) => {
107
+ const body = (request.body ?? {});
108
+ const targetSubnet = body["subnet"];
109
+ const subnets = targetSubnet ? [targetSubnet] : getLocalSubnets();
110
+ if (subnets.length === 0) {
111
+ return { error: "No active IPv4 subnets found" };
112
+ }
113
+ const start = Date.now();
114
+ // 1. Collect ARP table
115
+ let arpOutput = "";
116
+ try {
117
+ const { stdout } = await execAsync("arp -a", { timeout: 10000 });
118
+ arpOutput = stdout;
119
+ }
120
+ catch {
121
+ // ARP might not be available — continue with ping sweep
122
+ }
123
+ const arpEntries = parseArpTable(arpOutput);
124
+ // 2. Ping sweep every detected subnet to populate ARP cache
125
+ try {
126
+ for (const subnet of subnets) {
127
+ if (platform() === "win32") {
128
+ const pingCmd = Array.from({ length: 254 }, (_, i) => `start /b ping -n 1 -w 500 ${subnet}.${i + 1} > nul 2>&1`).join(" & ");
129
+ await execAsync(pingCmd, { timeout: 30000 }).catch(() => { });
130
+ }
131
+ else {
132
+ const pingCmd = `for i in $(seq 1 254); do ping -c 1 -W 1 ${subnet}.$i & done; wait`;
133
+ await execAsync(pingCmd, { timeout: 30000, shell: "/bin/bash" }).catch(() => { });
134
+ }
135
+ }
136
+ // Re-read ARP table after all sweeps
137
+ const { stdout } = await execAsync("arp -a", { timeout: 10000 });
138
+ arpOutput = stdout;
139
+ arpEntries.length = 0;
140
+ arpEntries.push(...parseArpTable(stdout));
141
+ }
142
+ catch {
143
+ // Ping sweep optional — use whatever ARP gave us
144
+ }
145
+ // 3. Filter to target subnet(s)
146
+ const subnetFiltered = arpEntries.filter(e => subnets.some(s => e.ip.startsWith(s + ".")));
147
+ // 4. Probe SSH (port 22) and common ports in parallel
148
+ const PROBE_PORTS = [22, 80, 443, 8000, 8080];
149
+ const hosts = await Promise.all(subnetFiltered.map(async (entry) => {
150
+ const portResults = await Promise.all(PROBE_PORTS.map(async (port) => ({ port, open: await probePort(entry.ip, port, 1500) })));
151
+ const openPorts = portResults.filter(p => p.open).map(p => p.port);
152
+ const sshReachable = openPorts.includes(22);
153
+ const hostname = await reverseResolve(entry.ip);
154
+ // Check if this is a known Jait gateway node
155
+ let agentStatus = "not-installed";
156
+ if (openPorts.includes(8000)) {
157
+ try {
158
+ const res = await fetch(`http://${entry.ip}:8000/health`, { signal: AbortSignal.timeout(2000) });
159
+ if (res.ok) {
160
+ const health = await res.json();
161
+ if (health.name === "jait-gateway")
162
+ agentStatus = "running";
163
+ }
164
+ }
165
+ catch {
166
+ agentStatus = "not-installed";
167
+ }
168
+ }
169
+ return {
170
+ ip: entry.ip,
171
+ mac: entry.mac,
172
+ hostname,
173
+ vendor: null, // Could add OUI lookup later
174
+ alive: true,
175
+ openPorts,
176
+ sshReachable,
177
+ agentStatus,
178
+ lastSeen: new Date().toISOString(),
179
+ };
180
+ }));
181
+ const result = {
182
+ subnet: subnets.map(s => s + ".0/24").join(", "),
183
+ hosts: hosts.sort((a, b) => {
184
+ const aNum = a.ip.split(".").map(Number).reduce((sum, n) => sum * 256 + n, 0);
185
+ const bNum = b.ip.split(".").map(Number).reduce((sum, n) => sum * 256 + n, 0);
186
+ return aNum - bNum;
187
+ }),
188
+ scannedAt: new Date().toISOString(),
189
+ durationMs: Date.now() - start,
190
+ };
191
+ // Update the shared cache so /api/network/scan/latest reflects this scan
192
+ setLatestNetworkScan(result);
193
+ return result;
194
+ });
195
+ // ---- POST /api/network/ssh/test — test SSH connectivity ----
196
+ app.post("/api/network/ssh/test", async (request) => {
197
+ const body = (request.body ?? {});
198
+ const ip = String(body["ip"] ?? "").trim();
199
+ const port = Number(body["port"] ?? 22);
200
+ if (!ip)
201
+ return { error: "IP address required" };
202
+ const reachable = await probePort(ip, port, 3000);
203
+ const result = {
204
+ ip,
205
+ reachable,
206
+ authMethods: reachable ? ["password", "publickey"] : [],
207
+ };
208
+ if (reachable) {
209
+ // Try to get platform info via SSH banner
210
+ try {
211
+ const banner = await new Promise((resolve) => {
212
+ const socket = createConnection({ host: ip, port, timeout: 3000 });
213
+ let data = "";
214
+ socket.on("data", (chunk) => { data += chunk.toString(); socket.destroy(); resolve(data); });
215
+ socket.on("timeout", () => { socket.destroy(); resolve(""); });
216
+ socket.on("error", () => { socket.destroy(); resolve(""); });
217
+ });
218
+ if (banner)
219
+ result.platform = banner.trim().slice(0, 100);
220
+ }
221
+ catch {
222
+ // ignore
223
+ }
224
+ }
225
+ return result;
226
+ });
227
+ // ---- POST /api/network/ssh/enable — guide/enable SSH on a target ----
228
+ app.post("/api/network/ssh/enable", async (request) => {
229
+ const body = (request.body ?? {});
230
+ const targetPlatform = String(body["platform"] ?? "").trim();
231
+ // Return platform-specific instructions for enabling SSH
232
+ const instructions = {
233
+ windows: {
234
+ command: "Add-WindowsCapability -Online -Name OpenSSH.Server; Start-Service sshd; Set-Service -Name sshd -StartupType Automatic",
235
+ steps: [
236
+ "Open PowerShell as Administrator on the target machine",
237
+ "Run: Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0",
238
+ "Run: Start-Service sshd",
239
+ "Run: Set-Service -Name sshd -StartupType Automatic",
240
+ 'Run: New-NetFirewallRule -Name "OpenSSH-Server" -DisplayName "OpenSSH Server" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22',
241
+ ],
242
+ },
243
+ linux: {
244
+ command: "sudo apt-get install -y openssh-server && sudo systemctl enable --now sshd",
245
+ steps: [
246
+ "Run: sudo apt-get install -y openssh-server",
247
+ "Run: sudo systemctl enable --now sshd",
248
+ "Run: sudo ufw allow 22/tcp (if UFW is active)",
249
+ ],
250
+ },
251
+ macos: {
252
+ command: "sudo systemsetup -setremotelogin on",
253
+ steps: [
254
+ "Open System Preferences → Sharing → enable Remote Login",
255
+ "Or run: sudo systemsetup -setremotelogin on",
256
+ ],
257
+ },
258
+ };
259
+ const key = targetPlatform.toLowerCase();
260
+ const info = instructions[key] ?? instructions["linux"];
261
+ return { platform: key || "linux", ...info };
262
+ });
263
+ // ---- POST /api/network/deploy — deploy gateway to a remote host via SSH ----
264
+ app.post("/api/network/deploy", async (request) => {
265
+ const body = (request.body ?? {});
266
+ const ip = String(body["ip"] ?? "").trim();
267
+ const username = String(body["username"] ?? "").trim();
268
+ const authMethod = String(body["authMethod"] ?? "password");
269
+ if (!ip || !username) {
270
+ return { error: "IP and username are required" };
271
+ }
272
+ // Build the deployment script that would be executed via SSH
273
+ const deployScript = [
274
+ "#!/bin/bash",
275
+ "set -e",
276
+ "",
277
+ "echo '[1/5] Checking system requirements...'",
278
+ "which curl > /dev/null 2>&1 || { echo 'curl is required'; exit 1; }",
279
+ "",
280
+ "echo '[2/5] Installing Bun runtime...'",
281
+ "curl -fsSL https://bun.sh/install | bash",
282
+ "export PATH=$HOME/.bun/bin:$PATH",
283
+ "",
284
+ "echo '[3/5] Downloading Jait Gateway...'",
285
+ "mkdir -p ~/.jait",
286
+ "cd ~/.jait",
287
+ "bun init -y 2>/dev/null || true",
288
+ "bun add @jait/gateway@latest",
289
+ "",
290
+ "echo '[4/5] Configuring gateway...'",
291
+ `cat > ~/.jait/.env << 'ENVEOF'`,
292
+ "PORT=8000",
293
+ "HOST=0.0.0.0",
294
+ "LOG_LEVEL=info",
295
+ "CORS_ORIGIN=*",
296
+ "ENVEOF",
297
+ "",
298
+ "echo '[5/5] Starting gateway service...'",
299
+ "# Create systemd service",
300
+ "sudo tee /etc/systemd/system/jait-gateway.service > /dev/null << 'SVCEOF'",
301
+ "[Unit]",
302
+ "Description=Jait Gateway",
303
+ "After=network.target",
304
+ "",
305
+ "[Service]",
306
+ `User=${username}`,
307
+ "WorkingDirectory=%h/.jait",
308
+ "ExecStart=%h/.bun/bin/bun run node_modules/@jait/gateway/src/index.ts",
309
+ "Restart=on-failure",
310
+ "Environment=PATH=%h/.bun/bin:/usr/local/bin:/usr/bin:/bin",
311
+ "",
312
+ "[Install]",
313
+ "WantedBy=multi-user.target",
314
+ "SVCEOF",
315
+ "",
316
+ "sudo systemctl daemon-reload",
317
+ "sudo systemctl enable --now jait-gateway",
318
+ "echo 'Jait Gateway deployed successfully!'",
319
+ ].join("\n");
320
+ // Build the SSH command (user would need to enter password or have key auth)
321
+ const sshCommand = authMethod === "key"
322
+ ? `ssh -o StrictHostKeyChecking=no ${username}@${ip} 'bash -s' << 'DEPLOY'\n${deployScript}\nDEPLOY`
323
+ : `sshpass -p '<PASSWORD>' ssh -o StrictHostKeyChecking=no ${username}@${ip} 'bash -s' << 'DEPLOY'\n${deployScript}\nDEPLOY`;
324
+ return {
325
+ ip,
326
+ username,
327
+ authMethod,
328
+ deployScript,
329
+ sshCommand,
330
+ instructions: [
331
+ `SSH into ${ip} as ${username}`,
332
+ "The deployment script will install Bun, download Jait Gateway, configure it, and set up a systemd service.",
333
+ "After deployment, the gateway will be accessible at http://" + ip + ":8000",
334
+ ],
335
+ estimatedDuration: "2-5 minutes",
336
+ };
337
+ });
338
+ // ---- GET /api/network/nodes — list known gateway mesh nodes ----
339
+ app.get("/api/network/nodes", async () => {
340
+ return { nodes: [...knownNodes.values()] };
341
+ });
342
+ // ---- POST /api/network/nodes/register — a remote gateway node announces itself ----
343
+ app.post("/api/network/nodes/register", async (request) => {
344
+ const body = (request.body ?? {});
345
+ const node = {
346
+ id: String(body["id"] ?? ""),
347
+ ip: String(body["ip"] ?? ""),
348
+ hostname: body["hostname"] ?? null,
349
+ platform: String(body["platform"] ?? "unknown"),
350
+ version: String(body["version"] ?? "unknown"),
351
+ status: "online",
352
+ lastSeen: new Date().toISOString(),
353
+ capabilities: Array.isArray(body["capabilities"]) ? body["capabilities"].map(String) : [],
354
+ };
355
+ if (!node.id || !node.ip)
356
+ return { error: "id and ip are required" };
357
+ knownNodes.set(node.id, node);
358
+ return { ok: true, node };
359
+ });
360
+ // ---- GET /api/network/devices — registered companion devices ----
361
+ app.get("/api/network/devices", async () => {
362
+ // Proxy to existing mobile device registry
363
+ // This unifies the view of all connected devices in the Network panel
364
+ return { devices: [] }; // Will be wired via deps if needed
365
+ });
366
+ }
367
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/routes/network.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Automation Repository REST routes.
3
+ *
4
+ * GET /api/repos — list repositories for the authenticated user
5
+ * POST /api/repos — create a repository
6
+ * PATCH /api/repos/:id — update a repository
7
+ * DELETE /api/repos/:id — delete a repository
8
+ */
9
+ import type { FastifyInstance } from "fastify";
10
+ import type { AppConfig } from "../config.js";
11
+ import type { RepositoryService } from "../services/repositories.js";
12
+ import type { WsControlPlane } from "../ws.js";
13
+ export interface RepoRouteDeps {
14
+ repoService: RepositoryService;
15
+ ws?: WsControlPlane;
16
+ }
17
+ export declare function registerRepoRoutes(app: FastifyInstance, config: AppConfig, deps: RepoRouteDeps): void;
18
+ //# sourceMappingURL=repositories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositories.d.ts","sourceRoot":"","sources":["../../src/routes/repositories.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,EAAE,CAAC,EAAE,cAAc,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,aAAa,GAClB,IAAI,CAsGN"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Automation Repository REST routes.
3
+ *
4
+ * GET /api/repos — list repositories for the authenticated user
5
+ * POST /api/repos — create a repository
6
+ * PATCH /api/repos/:id — update a repository
7
+ * DELETE /api/repos/:id — delete a repository
8
+ */
9
+ import { requireAuth } from "../security/http-auth.js";
10
+ export function registerRepoRoutes(app, config, deps) {
11
+ const { repoService, ws } = deps;
12
+ /** Broadcast a repo event over WS to all clients */
13
+ function broadcastRepoEvent(event, data) {
14
+ if (!ws)
15
+ return;
16
+ ws.broadcastAll({
17
+ type: `repo.${event}`,
18
+ sessionId: "",
19
+ timestamp: new Date().toISOString(),
20
+ payload: data,
21
+ });
22
+ }
23
+ // ── LIST ─────────────────────────────────────────────────────────
24
+ app.get("/api/repos", async (request, reply) => {
25
+ const user = await requireAuth(request, reply, config.jwtSecret);
26
+ if (!user)
27
+ return;
28
+ const repos = repoService.list(user.id);
29
+ return { repos };
30
+ });
31
+ // ── CREATE ───────────────────────────────────────────────────────
32
+ app.post("/api/repos", async (request, reply) => {
33
+ const user = await requireAuth(request, reply, config.jwtSecret);
34
+ if (!user)
35
+ return;
36
+ const body = request.body;
37
+ if (!body.name || !body.localPath) {
38
+ return reply.status(400).send({ error: "name and localPath are required" });
39
+ }
40
+ // Prevent duplicate path for same user
41
+ const existing = repoService.findByPath(body.localPath, user.id);
42
+ if (existing) {
43
+ // If re-registered from a different device, update deviceId
44
+ if (body.deviceId && existing.deviceId !== body.deviceId) {
45
+ const updated = repoService.update(existing.id, { deviceId: body.deviceId });
46
+ if (updated) {
47
+ broadcastRepoEvent("updated", { repo: updated });
48
+ return { repo: updated };
49
+ }
50
+ }
51
+ return { repo: existing };
52
+ }
53
+ const repo = repoService.create({
54
+ userId: user.id,
55
+ deviceId: body.deviceId,
56
+ name: body.name,
57
+ defaultBranch: body.defaultBranch,
58
+ localPath: body.localPath,
59
+ });
60
+ broadcastRepoEvent("created", { repo });
61
+ return { repo };
62
+ });
63
+ // ── UPDATE ───────────────────────────────────────────────────────
64
+ app.patch("/api/repos/:id", async (request, reply) => {
65
+ const user = await requireAuth(request, reply, config.jwtSecret);
66
+ if (!user)
67
+ return;
68
+ const body = request.body;
69
+ const repo = repoService.update(request.params.id, body);
70
+ if (!repo) {
71
+ return reply.status(404).send({ error: "Repository not found" });
72
+ }
73
+ broadcastRepoEvent("updated", { repo });
74
+ return { repo };
75
+ });
76
+ // ── DELETE ───────────────────────────────────────────────────────
77
+ app.delete("/api/repos/:id", async (request, reply) => {
78
+ const user = await requireAuth(request, reply, config.jwtSecret);
79
+ if (!user)
80
+ return;
81
+ const existing = repoService.getById(request.params.id);
82
+ if (!existing) {
83
+ return reply.status(404).send({ error: "Repository not found" });
84
+ }
85
+ repoService.delete(request.params.id);
86
+ broadcastRepoEvent("deleted", { repoId: request.params.id });
87
+ return { ok: true };
88
+ });
89
+ }
90
+ //# sourceMappingURL=repositories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositories.js","sourceRoot":"","sources":["../../src/routes/repositories.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Screen-share REST routes
3
+ *
4
+ * Provides HTTP endpoints for screen-share session management.
5
+ * WebRTC signaling happens over WebSocket (see ws.ts); these routes
6
+ * are for session lifecycle, device registration, and state queries.
7
+ */
8
+ import type { FastifyInstance } from "fastify";
9
+ import type { ScreenShareService } from "@jait/screen-share";
10
+ import type { WsControlPlane } from "../ws.js";
11
+ interface ScreenShareRouteDeps {
12
+ screenShare: ScreenShareService;
13
+ ws: WsControlPlane;
14
+ }
15
+ export declare function registerScreenShareRoutes(app: FastifyInstance, deps: ScreenShareRouteDeps): void;
16
+ export {};
17
+ //# sourceMappingURL=screen-share.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-share.d.ts","sourceRoot":"","sources":["../../src/routes/screen-share.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,UAAU,oBAAoB;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,EAAE,EAAE,cAAc,CAAC;CACpB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB,QA+FzF"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Screen-share REST routes
3
+ *
4
+ * Provides HTTP endpoints for screen-share session management.
5
+ * WebRTC signaling happens over WebSocket (see ws.ts); these routes
6
+ * are for session lifecycle, device registration, and state queries.
7
+ */
8
+ export function registerScreenShareRoutes(app, deps) {
9
+ const { screenShare, ws } = deps;
10
+ // ── State ───────────────────────────────────────────────────────────
11
+ app.get("/api/screen-share/state", async () => {
12
+ return screenShare.getState();
13
+ });
14
+ // ── Devices ─────────────────────────────────────────────────────────
15
+ app.get("/api/screen-share/devices", async () => {
16
+ return { devices: screenShare.getState().devices };
17
+ });
18
+ app.post("/api/screen-share/devices/register", async (request, reply) => {
19
+ const body = (request.body ?? {});
20
+ const id = String(body["id"] ?? "").trim();
21
+ const name = String(body["name"] ?? "").trim();
22
+ const platform = body["platform"];
23
+ const capabilities = Array.isArray(body["capabilities"])
24
+ ? body["capabilities"].map(String)
25
+ : [];
26
+ if (!id || !name || !["electron", "react-native", "web"].includes(platform)) {
27
+ return reply.code(400).send({ error: "Invalid device: id, name, and platform (electron|react-native|web) required." });
28
+ }
29
+ const device = screenShare.registerDevice({
30
+ id,
31
+ name,
32
+ platform: platform,
33
+ authorized: true,
34
+ capabilities,
35
+ });
36
+ return { ok: true, device };
37
+ });
38
+ // ── Session lifecycle ───────────────────────────────────────────────
39
+ app.post("/api/screen-share/start", async (request, reply) => {
40
+ const body = (request.body ?? {});
41
+ const hostDeviceId = String(body["hostDeviceId"] ?? "").trim();
42
+ const viewerDeviceIds = Array.isArray(body["viewerDeviceIds"])
43
+ ? body["viewerDeviceIds"].map(String)
44
+ : undefined;
45
+ if (!hostDeviceId) {
46
+ return reply.code(400).send({ error: "hostDeviceId is required." });
47
+ }
48
+ try {
49
+ const session = screenShare.startShare({ hostDeviceId, viewerDeviceIds });
50
+ ws.broadcastScreenShareState(session);
51
+ // Tell the host device to begin screen capture
52
+ ws.sendScreenShareStartRequest(session.id, hostDeviceId, viewerDeviceIds);
53
+ return { ok: true, session };
54
+ }
55
+ catch (err) {
56
+ return reply.code(400).send({
57
+ error: err instanceof Error ? err.message : "Failed to start screen share.",
58
+ });
59
+ }
60
+ });
61
+ app.post("/api/screen-share/stop", async () => {
62
+ const session = screenShare.stopShare();
63
+ if (session)
64
+ ws.broadcastScreenShareState(session);
65
+ return { ok: true, session };
66
+ });
67
+ app.post("/api/screen-share/transfer-control", async (request, reply) => {
68
+ const body = (request.body ?? {});
69
+ const controllerDeviceId = String(body["controllerDeviceId"] ?? "").trim();
70
+ if (!controllerDeviceId) {
71
+ return reply.code(400).send({ error: "controllerDeviceId is required." });
72
+ }
73
+ try {
74
+ const session = screenShare.transferControl(controllerDeviceId);
75
+ ws.broadcastScreenShareState(session);
76
+ return { ok: true, session };
77
+ }
78
+ catch (err) {
79
+ return reply.code(400).send({
80
+ error: err instanceof Error ? err.message : "Failed to transfer control.",
81
+ });
82
+ }
83
+ });
84
+ // ── Capture / Record ────────────────────────────────────────────────
85
+ app.post("/api/screen-share/capture", async () => {
86
+ return { ok: true, capture: screenShare.captureScreen() };
87
+ });
88
+ app.post("/api/screen-share/record", async () => {
89
+ return { ok: true, recording: screenShare.startRecording() };
90
+ });
91
+ }
92
+ //# sourceMappingURL=screen-share.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-share.js","sourceRoot":"","sources":["../../src/routes/screen-share.ts"],"names":[],"mappings":"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"}