@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
package/dist/index.js ADDED
@@ -0,0 +1,413 @@
1
+ import { loadConfig } from "./config.js";
2
+ import { createServer } from "./server.js";
3
+ import { WsControlPlane } from "./ws.js";
4
+ import { openDatabase, migrateDatabase } from "./db/index.js";
5
+ import { SessionService } from "./services/sessions.js";
6
+ import { SessionStateService } from "./services/session-state.js";
7
+ import { AuditWriter } from "./services/audit.js";
8
+ import { SurfaceRegistry, TerminalSurfaceFactory, FileSystemSurfaceFactory, BrowserSurfaceFactory } from "./surfaces/index.js";
9
+ import { createToolRegistry } from "./tools/index.js";
10
+ import { SchedulerService } from "./scheduler/service.js";
11
+ import { HookBus, registerBuiltInHooks } from "./scheduler/hooks.js";
12
+ import { MemoryEngine } from "./memory/service.js";
13
+ import { SqliteMemoryBackend } from "./memory/sqlite-backend.js";
14
+ import { join } from "node:path";
15
+ import { homedir } from "node:os";
16
+ import { ConsentManager } from "./security/consent-manager.js";
17
+ import { TrustEngine } from "./security/trust-engine.js";
18
+ import { getProfile } from "./security/tool-profiles.js";
19
+ import { ConsentAwareExecutor } from "./security/consent-executor.js";
20
+ import { UserService } from "./services/users.js";
21
+ import { DeviceRegistry } from "./services/device-registry.js";
22
+ import { VoiceService } from "./voice/service.js";
23
+ import { ScreenShareService } from "@jait/screen-share";
24
+ import { ThreadService } from "./services/threads.js";
25
+ import { RepositoryService } from "./services/repositories.js";
26
+ import { ProviderRegistry } from "./providers/registry.js";
27
+ import { CodexProvider } from "./providers/codex-provider.js";
28
+ import { ClaudeCodeProvider } from "./providers/claude-code-provider.js";
29
+ import { JaitProvider } from "./providers/jait-provider.js";
30
+ async function main() {
31
+ const config = loadConfig();
32
+ // Initialize SQLite database
33
+ const { db, sqlite } = openDatabase();
34
+ migrateDatabase(sqlite);
35
+ console.log("Database initialized at ~/.jait/data/jait.db");
36
+ // Services
37
+ const sessionService = new SessionService(db);
38
+ const sessionState = new SessionStateService(db);
39
+ const userService = new UserService(db);
40
+ const audit = new AuditWriter(db);
41
+ const deviceRegistry = new DeviceRegistry();
42
+ // Agent threads + provider registry
43
+ const threadService = new ThreadService(db);
44
+ const repoService = new RepositoryService(db);
45
+ const providerRegistry = new ProviderRegistry();
46
+ providerRegistry.register(new JaitProvider());
47
+ providerRegistry.register(new CodexProvider());
48
+ providerRegistry.register(new ClaudeCodeProvider());
49
+ console.log(`Providers registered: ${providerRegistry.list().map(p => p.id).join(", ")}`);
50
+ // Surface registry — register all surface factories
51
+ const surfaceRegistry = new SurfaceRegistry();
52
+ surfaceRegistry.register(new TerminalSurfaceFactory());
53
+ surfaceRegistry.register(new FileSystemSurfaceFactory());
54
+ surfaceRegistry.register(new BrowserSurfaceFactory());
55
+ console.log(`Surfaces registered: ${surfaceRegistry.registeredTypes.join(", ")}`);
56
+ // WebSocket control plane (created early so consent callbacks can reference it)
57
+ const ws = new WsControlPlane(config);
58
+ // Auto-wire terminal output → WebSocket for ALL terminals (REST, tool, etc.)
59
+ // Also broadcast workspace activation for filesystem surfaces.
60
+ surfaceRegistry.onSurfaceStarted = (id, surface) => {
61
+ if (surface.type === "terminal" && "write" in surface) {
62
+ surface.onOutput = (data) => ws.broadcastTerminalOutput(id, data);
63
+ }
64
+ if (surface.type === "filesystem") {
65
+ const snap = surface.snapshot();
66
+ const sid = snap.sessionId ?? "";
67
+ const workspaceRoot = snap.metadata?.workspaceRoot ?? null;
68
+ const panelState = { open: true, remotePath: workspaceRoot, surfaceId: id };
69
+ // Push a UI command to open the workspace panel
70
+ ws.sendUICommand({
71
+ command: "workspace.open",
72
+ data: {
73
+ surfaceId: id,
74
+ workspaceRoot: workspaceRoot,
75
+ },
76
+ }, sid);
77
+ // Also broadcast ui.state-sync so handleStateSync fires on all clients
78
+ ws.broadcast(sid, {
79
+ type: "ui.state-sync",
80
+ sessionId: sid,
81
+ timestamp: new Date().toISOString(),
82
+ payload: { key: "workspace.panel", value: panelState },
83
+ });
84
+ // Persist workspace state to DB so late-joining clients get it
85
+ if (sid) {
86
+ try {
87
+ sessionState.set(sid, { "workspace.panel": panelState });
88
+ }
89
+ catch (err) {
90
+ console.error("Failed to persist workspace state:", err);
91
+ }
92
+ }
93
+ }
94
+ };
95
+ surfaceRegistry.onSurfaceStopped = (id, surface) => {
96
+ if (surface.type === "filesystem") {
97
+ const snap = surface.snapshot();
98
+ const sid = snap.sessionId ?? "";
99
+ ws.sendUICommand({
100
+ command: "workspace.close",
101
+ data: { surfaceId: id },
102
+ }, sid);
103
+ // Also broadcast ui.state-sync so handleStateSync fires on all clients
104
+ ws.broadcast(sid, {
105
+ type: "ui.state-sync",
106
+ sessionId: sid,
107
+ timestamp: new Date().toISOString(),
108
+ payload: { key: "workspace.panel", value: null },
109
+ });
110
+ // Clear workspace state from DB
111
+ if (sid) {
112
+ try {
113
+ sessionState.set(sid, { "workspace.panel": null });
114
+ }
115
+ catch (err) {
116
+ console.error("Failed to clear workspace state:", err);
117
+ }
118
+ }
119
+ }
120
+ };
121
+ // Hook bus + built-ins
122
+ const hooks = new HookBus();
123
+ registerBuiltInHooks(hooks);
124
+ // Memory engine — Sprint 6
125
+ const memory = new MemoryEngine({
126
+ backend: new SqliteMemoryBackend(db),
127
+ memoryDir: join(homedir(), ".jait", "memory"),
128
+ });
129
+ // Tool registry — Sprint 3 + Sprint 10
130
+ const voiceService = new VoiceService();
131
+ const screenShare = new ScreenShareService();
132
+ let toolRegistry = createToolRegistry(surfaceRegistry, {
133
+ memoryService: memory,
134
+ hooks,
135
+ voiceService,
136
+ screenShare,
137
+ ws,
138
+ threadMcpConfig: { host: config.host, port: config.port },
139
+ threadService,
140
+ providerRegistry,
141
+ });
142
+ console.log(`Tools registered: ${toolRegistry.listNames().join(", ")}`);
143
+ // Consent & Trust — Sprint 4
144
+ const trustEngine = new TrustEngine(db);
145
+ const consentManager = new ConsentManager({
146
+ defaultTimeoutMs: 120_000,
147
+ db,
148
+ onRequest: (request) => {
149
+ ws.broadcastAll({
150
+ type: "consent.required",
151
+ sessionId: request.sessionId,
152
+ timestamp: new Date().toISOString(),
153
+ payload: request,
154
+ });
155
+ console.log(`Consent required: ${request.toolName} (${request.id})`);
156
+ },
157
+ onDecision: (decision) => {
158
+ ws.broadcastAll({
159
+ type: "consent.resolved",
160
+ sessionId: "",
161
+ timestamp: new Date().toISOString(),
162
+ payload: decision,
163
+ });
164
+ console.log(`Consent ${decision.approved ? "approved" : "rejected"}: ${decision.requestId}`);
165
+ },
166
+ });
167
+ const permissions = getProfile("coding");
168
+ const sessionApprovalsBySession = new Map();
169
+ const getSessionApprovals = (sessionId) => {
170
+ const existing = sessionApprovalsBySession.get(sessionId);
171
+ if (existing)
172
+ return existing;
173
+ const created = new Set();
174
+ sessionApprovalsBySession.set(sessionId, created);
175
+ return created;
176
+ };
177
+ const toolExecutor = async (toolName, input, context, options) => {
178
+ const executor = new ConsentAwareExecutor({
179
+ toolRegistry,
180
+ consentManager,
181
+ trustEngine,
182
+ audit,
183
+ permissions,
184
+ sessionApprovals: getSessionApprovals(context.sessionId),
185
+ });
186
+ return executor.execute(toolName, input, context, options);
187
+ };
188
+ const scheduler = new SchedulerService({
189
+ db,
190
+ executeTool: async (execution) => {
191
+ const userApiKeys = execution.userId ? userService.getSettings(execution.userId).apiKeys : undefined;
192
+ const context = {
193
+ sessionId: execution.sessionId,
194
+ actionId: `sched-${Date.now()}`,
195
+ workspaceRoot: execution.workspaceRoot,
196
+ requestedBy: "scheduler",
197
+ userId: execution.userId ?? undefined,
198
+ apiKeys: userApiKeys,
199
+ };
200
+ return toolExecutor(execution.toolName, execution.input, context);
201
+ },
202
+ onExecuted: (result) => {
203
+ hooks.emit("scheduler.executed", result);
204
+ ws.broadcastAll({
205
+ type: "session.created",
206
+ sessionId: "",
207
+ timestamp: new Date().toISOString(),
208
+ payload: { type: "scheduler.executed", ...result },
209
+ });
210
+ },
211
+ });
212
+ // Rebuild tool registry with Sprint 7 scheduler + gateway status tools.
213
+ // shutdown ref is assigned after server.listen — use late-bound wrapper
214
+ let shutdownFn;
215
+ const shutdownRef = async () => { if (shutdownFn)
216
+ await shutdownFn();
217
+ else
218
+ process.exit(0); };
219
+ toolRegistry = createToolRegistry(surfaceRegistry, {
220
+ scheduler,
221
+ sessionService,
222
+ ws,
223
+ startedAt: Date.now(),
224
+ memoryService: memory,
225
+ hooks,
226
+ voiceService,
227
+ screenShare,
228
+ threadMcpConfig: { host: config.host, port: config.port },
229
+ threadService,
230
+ providerRegistry,
231
+ config,
232
+ shutdown: shutdownRef,
233
+ });
234
+ console.log(`Tools registered: ${toolRegistry.listNames().join(", ")}`);
235
+ scheduler.start(30_000);
236
+ // Seed built-in "Network Scan" job if it doesn't already exist
237
+ {
238
+ const existingJobs = scheduler.list();
239
+ const hasNetworkScan = existingJobs.some((j) => j.toolName === "network.scan" && j.name === "Network Scan");
240
+ if (!hasNetworkScan) {
241
+ // Remove legacy "Device Discovery" job if present
242
+ const legacy = existingJobs.find((j) => j.toolName === "network.scan" && j.name === "Device Discovery");
243
+ if (legacy)
244
+ scheduler.remove(legacy.id);
245
+ scheduler.create({
246
+ name: "Network Scan",
247
+ cron: "0 * * * *", // every hour at :00
248
+ toolName: "network.scan",
249
+ input: {
250
+ __jaitJobMeta: {
251
+ jobType: "system_job",
252
+ description: "Scans the local network for devices, checks SSH connectivity, and detects running Jait gateway nodes.",
253
+ },
254
+ },
255
+ enabled: true,
256
+ });
257
+ console.log("Seeded built-in job: Network Scan (hourly)");
258
+ }
259
+ }
260
+ console.log(`Consent manager initialized (profile: coding, timeout: 120s, ${permissions.size} tool permissions)`);
261
+ const server = await createServer(config, {
262
+ db,
263
+ sqlite,
264
+ sessionService,
265
+ userService,
266
+ audit,
267
+ surfaceRegistry,
268
+ toolRegistry,
269
+ consentManager,
270
+ trustEngine,
271
+ ws,
272
+ hooks,
273
+ scheduler,
274
+ hookSecret: config.hookSecret,
275
+ onWakeHook: async () => scheduler.tick(),
276
+ onAgentHook: async (payload) => {
277
+ hooks.emit("agent.webhook", payload);
278
+ return { accepted: true };
279
+ },
280
+ memoryService: memory,
281
+ deviceRegistry,
282
+ sessionState,
283
+ voiceService,
284
+ toolExecutor,
285
+ screenShare,
286
+ threadService,
287
+ repoService,
288
+ providerRegistry,
289
+ });
290
+ // Wire terminal WS ↔ PTY
291
+ ws.onTerminalInput = (terminalId, data) => {
292
+ try {
293
+ const surface = surfaceRegistry.getSurface(terminalId);
294
+ if (surface && surface.type === "terminal" && "write" in surface) {
295
+ surface.write(data);
296
+ }
297
+ }
298
+ catch (err) {
299
+ console.error(`Terminal write error (${terminalId}):`, err);
300
+ }
301
+ };
302
+ ws.onTerminalResize = (terminalId, cols, rows) => {
303
+ try {
304
+ const surface = surfaceRegistry.getSurface(terminalId);
305
+ if (surface && surface.type === "terminal" && "resize" in surface) {
306
+ surface.resize(cols, rows);
307
+ }
308
+ }
309
+ catch (err) {
310
+ console.error(`Terminal resize error (${terminalId}):`, err);
311
+ }
312
+ };
313
+ ws.onTerminalReplay = (terminalId) => {
314
+ try {
315
+ const surface = surfaceRegistry.getSurface(terminalId);
316
+ if (surface && surface.type === "terminal" && "getRecentOutput" in surface) {
317
+ return surface.getRecentOutput();
318
+ }
319
+ }
320
+ catch {
321
+ // ignore
322
+ }
323
+ return null;
324
+ };
325
+ // Wire consent WS ↔ ConsentManager
326
+ ws.onConsentApprove = (requestId) => {
327
+ consentManager.approve(requestId, "click");
328
+ };
329
+ ws.onConsentReject = (requestId, reason) => {
330
+ consentManager.reject(requestId, "click", reason);
331
+ };
332
+ // UI state sync (client → server → DB → other clients)
333
+ ws.onUIStateUpdate = (sid, key, value, clientId) => {
334
+ try {
335
+ sessionState.set(sid, { [key]: value });
336
+ // Broadcast to other session clients so they stay in sync
337
+ ws.broadcastExcluding(sid, clientId, {
338
+ type: "ui.state-sync",
339
+ sessionId: sid,
340
+ timestamp: new Date().toISOString(),
341
+ payload: { key, value },
342
+ });
343
+ console.log(`UI state synced: session=${sid} key=${key} value=${value === null ? "null" : "set"}`);
344
+ }
345
+ catch (err) {
346
+ console.error(`Failed to persist UI state (${key}):`, err);
347
+ }
348
+ };
349
+ // Push full session state when a client subscribes to a session.
350
+ // This ensures every client gets the authoritative state on connect/reconnect.
351
+ ws.onClientSubscribe = (sid, clientId) => {
352
+ try {
353
+ const allState = sessionState.get(sid);
354
+ ws.sendToClient(clientId, {
355
+ type: "ui.full-state",
356
+ sessionId: sid,
357
+ timestamp: new Date().toISOString(),
358
+ payload: allState, // Record<string, unknown>
359
+ });
360
+ console.log(`Full state pushed to client ${clientId}: session=${sid} keys=${Object.keys(allState).join(", ") || "(empty)"}`);
361
+ }
362
+ catch (err) {
363
+ console.error(`Failed to push full state to client ${clientId}:`, err);
364
+ }
365
+ };
366
+ // Screen-share WS start callback is no longer needed here — the start-request
367
+ // is relayed directly to clients by the WS handler, and session creation happens
368
+ // via the REST route or tool. This callback is kept as a no-op for safety.
369
+ ws.onScreenShareStart = (hostDeviceId, _viewerDeviceIds) => {
370
+ console.log(`Screen share start-request relayed for host: ${hostDeviceId}`);
371
+ };
372
+ ws.onScreenShareStop = (sessionId) => {
373
+ const session = screenShare.stopShare();
374
+ if (session) {
375
+ ws.broadcastScreenShareState(session);
376
+ console.log(`Screen share stopped: ${sessionId}`);
377
+ }
378
+ };
379
+ // Start Fastify first, then attach WS to its HTTP server (shared port)
380
+ await server.listen({ port: config.port, host: config.host });
381
+ ws.start(server.server); // shares port with Fastify
382
+ console.log(`Jait Gateway listening on http://${config.host}:${config.port} (HTTP + WS)`);
383
+ const shutdown = async () => {
384
+ console.log("Shutting down...");
385
+ consentManager.cancelAll("shutdown");
386
+ await surfaceRegistry.stopAll("shutdown");
387
+ scheduler.stop();
388
+ ws.stop();
389
+ await server.close();
390
+ sqlite.close();
391
+ process.exit(0);
392
+ };
393
+ // Wire shutdown into redeploy tool's late-bound reference
394
+ shutdownFn = shutdown;
395
+ process.on("SIGINT", () => void shutdown());
396
+ process.on("SIGTERM", () => void shutdown());
397
+ // Prevent uncaught native errors (e.g. node-pty ConPTY) from crashing the gateway
398
+ process.on("uncaughtException", (err) => {
399
+ console.error("Uncaught exception (non-fatal):", err);
400
+ });
401
+ process.on("unhandledRejection", (reason) => {
402
+ console.error("Unhandled rejection (non-fatal):", reason);
403
+ });
404
+ }
405
+ export { main };
406
+ // Auto-run when invoked directly (not via CLI bin entry)
407
+ if (!process.env["__JAIT_CLI"]) {
408
+ main().catch((err) => {
409
+ console.error("Fatal error:", err);
410
+ process.exit(1);
411
+ });
412
+ }
413
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * UUIDv7 — time-sortable unique identifiers.
3
+ *
4
+ * Format: 48-bit ms timestamp + 4-bit version (7) + 12-bit rand + 2-bit variant + 62-bit rand
5
+ * Total: 128 bits, lexicographically sortable by creation time.
6
+ */
7
+ export declare function uuidv7(): string;
8
+ /** Generate a new action ID (UUIDv7). */
9
+ export declare function newActionId(): string;
10
+ //# sourceMappingURL=uuidv7.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuidv7.d.ts","sourceRoot":"","sources":["../../src/lib/uuidv7.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,MAAM,IAAI,MAAM,CA2B/B;AAED,yCAAyC;AACzC,wBAAgB,WAAW,IAAI,MAAM,CAEpC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * UUIDv7 — time-sortable unique identifiers.
3
+ *
4
+ * Format: 48-bit ms timestamp + 4-bit version (7) + 12-bit rand + 2-bit variant + 62-bit rand
5
+ * Total: 128 bits, lexicographically sortable by creation time.
6
+ */
7
+ export function uuidv7() {
8
+ const now = Date.now();
9
+ const bytes = new Uint8Array(16);
10
+ // Fill with random bytes first
11
+ crypto.getRandomValues(bytes);
12
+ // Timestamp: first 48 bits (6 bytes)
13
+ bytes[0] = (now / 2 ** 40) & 0xff;
14
+ bytes[1] = (now / 2 ** 32) & 0xff;
15
+ bytes[2] = (now / 2 ** 24) & 0xff;
16
+ bytes[3] = (now / 2 ** 16) & 0xff;
17
+ bytes[4] = (now / 2 ** 8) & 0xff;
18
+ bytes[5] = now & 0xff;
19
+ // Version 7: set bits 48-51 to 0111
20
+ bytes[6] = (bytes[6] & 0x0f) | 0x70;
21
+ // Variant: set bits 64-65 to 10
22
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
23
+ // Convert to hex string
24
+ const hex = Array.from(bytes)
25
+ .map((b) => b.toString(16).padStart(2, "0"))
26
+ .join("");
27
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
28
+ }
29
+ /** Generate a new action ID (UUIDv7). */
30
+ export function newActionId() {
31
+ return uuidv7();
32
+ }
33
+ //# sourceMappingURL=uuidv7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuidv7.js","sourceRoot":"","sources":["../../src/lib/uuidv7.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,MAAM;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAEjC,+BAA+B;IAC/B,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAE9B,qCAAqC;IACrC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IAEtB,oCAAoC;IACpC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAErC,gCAAgC;IAChC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAErC,wBAAwB;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,EAAE,CAAC;AAClB,CAAC"}
@@ -0,0 +1,42 @@
1
+ export type MemoryScope = "workspace" | "project" | "contact";
2
+ export interface MemorySource {
3
+ type: string;
4
+ id: string;
5
+ surface: string;
6
+ }
7
+ export interface MemoryEntry {
8
+ id: string;
9
+ scope: MemoryScope;
10
+ content: string;
11
+ source: MemorySource;
12
+ embedding: Record<string, number>;
13
+ createdAt: string;
14
+ updatedAt: string;
15
+ expiresAt?: string;
16
+ }
17
+ export interface SaveMemoryInput {
18
+ scope: MemoryScope;
19
+ content: string;
20
+ source: MemorySource;
21
+ expiresAt?: string;
22
+ }
23
+ export interface SearchMemoryInput {
24
+ query: string;
25
+ scope?: MemoryScope;
26
+ limit?: number;
27
+ now?: Date;
28
+ }
29
+ export interface MemoryBackend {
30
+ save(entry: MemoryEntry): Promise<void>;
31
+ list(scope?: MemoryScope): Promise<MemoryEntry[]>;
32
+ forget(id: string): Promise<boolean>;
33
+ forgetExpired(now?: Date): Promise<number>;
34
+ }
35
+ export interface MemoryService {
36
+ save(entry: SaveMemoryInput): Promise<MemoryEntry>;
37
+ search(query: string, limit?: number, scope?: MemoryScope): Promise<MemoryEntry[]>;
38
+ forget(id: string): Promise<boolean>;
39
+ forgetExpired(now?: Date): Promise<number>;
40
+ flushPreCompaction(sessionId: string, snippets: string[]): Promise<number>;
41
+ }
42
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/memory/contracts.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACnF,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5E"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/memory/contracts.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export type EmbeddingVector = Record<string, number>;
2
+ export declare function embedText(text: string): EmbeddingVector;
3
+ export declare function cosineSimilarity(a: EmbeddingVector, b: EmbeddingVector): number;
4
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/memory/embeddings.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAIrD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAOvD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,GAAG,MAAM,CAgB/E"}
@@ -0,0 +1,26 @@
1
+ const TOKEN_RE = /[a-zA-Z0-9_]{2,}/g;
2
+ export function embedText(text) {
3
+ const tokens = (text.toLowerCase().match(TOKEN_RE) ?? []);
4
+ const vector = {};
5
+ for (const token of tokens) {
6
+ vector[token] = (vector[token] ?? 0) + 1;
7
+ }
8
+ return vector;
9
+ }
10
+ export function cosineSimilarity(a, b) {
11
+ const keys = new Set([...Object.keys(a), ...Object.keys(b)]);
12
+ let dot = 0;
13
+ let magA = 0;
14
+ let magB = 0;
15
+ for (const key of keys) {
16
+ const av = a[key] ?? 0;
17
+ const bv = b[key] ?? 0;
18
+ dot += av * bv;
19
+ magA += av * av;
20
+ magB += bv * bv;
21
+ }
22
+ if (magA === 0 || magB === 0)
23
+ return 0;
24
+ return dot / (Math.sqrt(magA) * Math.sqrt(magB));
25
+ }
26
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/memory/embeddings.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AAErC,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAkB,EAAE,CAAkB;IACrE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACvC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { MemoryBackend, MemoryEntry, MemoryScope, MemoryService, SaveMemoryInput } from "./contracts.js";
2
+ export interface MemoryEngineOptions {
3
+ backend: MemoryBackend;
4
+ memoryDir?: string;
5
+ }
6
+ export declare class MemoryEngine implements MemoryService {
7
+ private readonly backend;
8
+ private readonly memoryDir?;
9
+ constructor(options: MemoryEngineOptions);
10
+ save(input: SaveMemoryInput): Promise<MemoryEntry>;
11
+ search(query: string, limit?: number, scope?: MemoryScope): Promise<MemoryEntry[]>;
12
+ forget(id: string): Promise<boolean>;
13
+ forgetExpired(now?: Date): Promise<number>;
14
+ flushPreCompaction(sessionId: string, snippets: string[]): Promise<number>;
15
+ private writeMemoryLog;
16
+ }
17
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/memory/service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAG9G,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;gBAExB,OAAO,EAAE,mBAAmB;IAKlC,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAkBlD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAa7E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1C,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBhF,OAAO,CAAC,cAAc;CAoBvB"}