@phnx-labs/agents-cli 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 (486) hide show
  1. package/CHANGELOG.md +316 -0
  2. package/LICENSE +21 -0
  3. package/README.md +537 -0
  4. package/dist/commands/__tests__/sessions.test.d.ts +2 -0
  5. package/dist/commands/__tests__/sessions.test.d.ts.map +1 -0
  6. package/dist/commands/__tests__/sessions.test.js +636 -0
  7. package/dist/commands/__tests__/sessions.test.js.map +1 -0
  8. package/dist/commands/cloud.d.ts +3 -0
  9. package/dist/commands/cloud.d.ts.map +1 -0
  10. package/dist/commands/cloud.js +322 -0
  11. package/dist/commands/cloud.js.map +1 -0
  12. package/dist/commands/commands.d.ts +3 -0
  13. package/dist/commands/commands.d.ts.map +1 -0
  14. package/dist/commands/commands.js +628 -0
  15. package/dist/commands/commands.js.map +1 -0
  16. package/dist/commands/daemon.d.ts +3 -0
  17. package/dist/commands/daemon.d.ts.map +1 -0
  18. package/dist/commands/daemon.js +110 -0
  19. package/dist/commands/daemon.js.map +1 -0
  20. package/dist/commands/drive.d.ts +3 -0
  21. package/dist/commands/drive.d.ts.map +1 -0
  22. package/dist/commands/drive.js +166 -0
  23. package/dist/commands/drive.js.map +1 -0
  24. package/dist/commands/exec.d.ts +3 -0
  25. package/dist/commands/exec.d.ts.map +1 -0
  26. package/dist/commands/exec.js +241 -0
  27. package/dist/commands/exec.js.map +1 -0
  28. package/dist/commands/fork.d.ts +3 -0
  29. package/dist/commands/fork.d.ts.map +1 -0
  30. package/dist/commands/fork.js +139 -0
  31. package/dist/commands/fork.js.map +1 -0
  32. package/dist/commands/hooks.d.ts +3 -0
  33. package/dist/commands/hooks.d.ts.map +1 -0
  34. package/dist/commands/hooks.js +689 -0
  35. package/dist/commands/hooks.js.map +1 -0
  36. package/dist/commands/init.d.ts +6 -0
  37. package/dist/commands/init.d.ts.map +1 -0
  38. package/dist/commands/init.js +127 -0
  39. package/dist/commands/init.js.map +1 -0
  40. package/dist/commands/mcp.d.ts +3 -0
  41. package/dist/commands/mcp.d.ts.map +1 -0
  42. package/dist/commands/mcp.js +581 -0
  43. package/dist/commands/mcp.js.map +1 -0
  44. package/dist/commands/models.d.ts +3 -0
  45. package/dist/commands/models.d.ts.map +1 -0
  46. package/dist/commands/models.js +158 -0
  47. package/dist/commands/models.js.map +1 -0
  48. package/dist/commands/packages.d.ts +3 -0
  49. package/dist/commands/packages.d.ts.map +1 -0
  50. package/dist/commands/packages.js +541 -0
  51. package/dist/commands/packages.js.map +1 -0
  52. package/dist/commands/permissions.d.ts +3 -0
  53. package/dist/commands/permissions.d.ts.map +1 -0
  54. package/dist/commands/permissions.js +723 -0
  55. package/dist/commands/permissions.js.map +1 -0
  56. package/dist/commands/plugins.d.ts +3 -0
  57. package/dist/commands/plugins.d.ts.map +1 -0
  58. package/dist/commands/plugins.js +382 -0
  59. package/dist/commands/plugins.js.map +1 -0
  60. package/dist/commands/profiles.d.ts +3 -0
  61. package/dist/commands/profiles.d.ts.map +1 -0
  62. package/dist/commands/profiles.js +242 -0
  63. package/dist/commands/profiles.js.map +1 -0
  64. package/dist/commands/pty.d.ts +20 -0
  65. package/dist/commands/pty.d.ts.map +1 -0
  66. package/dist/commands/pty.js +389 -0
  67. package/dist/commands/pty.js.map +1 -0
  68. package/dist/commands/pull.d.ts +3 -0
  69. package/dist/commands/pull.d.ts.map +1 -0
  70. package/dist/commands/pull.js +448 -0
  71. package/dist/commands/pull.js.map +1 -0
  72. package/dist/commands/push.d.ts +3 -0
  73. package/dist/commands/push.d.ts.map +1 -0
  74. package/dist/commands/push.js +180 -0
  75. package/dist/commands/push.js.map +1 -0
  76. package/dist/commands/refresh-memory.d.ts +9 -0
  77. package/dist/commands/refresh-memory.d.ts.map +1 -0
  78. package/dist/commands/refresh-memory.js +45 -0
  79. package/dist/commands/refresh-memory.js.map +1 -0
  80. package/dist/commands/resource-view.d.ts +31 -0
  81. package/dist/commands/resource-view.d.ts.map +1 -0
  82. package/dist/commands/resource-view.js +183 -0
  83. package/dist/commands/resource-view.js.map +1 -0
  84. package/dist/commands/routines.d.ts +3 -0
  85. package/dist/commands/routines.d.ts.map +1 -0
  86. package/dist/commands/routines.js +579 -0
  87. package/dist/commands/routines.js.map +1 -0
  88. package/dist/commands/rules.d.ts +3 -0
  89. package/dist/commands/rules.d.ts.map +1 -0
  90. package/dist/commands/rules.js +488 -0
  91. package/dist/commands/rules.js.map +1 -0
  92. package/dist/commands/secrets.d.ts +3 -0
  93. package/dist/commands/secrets.d.ts.map +1 -0
  94. package/dist/commands/secrets.js +339 -0
  95. package/dist/commands/secrets.js.map +1 -0
  96. package/dist/commands/sessions-picker.d.ts +16 -0
  97. package/dist/commands/sessions-picker.d.ts.map +1 -0
  98. package/dist/commands/sessions-picker.js +256 -0
  99. package/dist/commands/sessions-picker.js.map +1 -0
  100. package/dist/commands/sessions.d.ts +16 -0
  101. package/dist/commands/sessions.d.ts.map +1 -0
  102. package/dist/commands/sessions.js +1077 -0
  103. package/dist/commands/sessions.js.map +1 -0
  104. package/dist/commands/skills.d.ts +3 -0
  105. package/dist/commands/skills.d.ts.map +1 -0
  106. package/dist/commands/skills.js +716 -0
  107. package/dist/commands/skills.js.map +1 -0
  108. package/dist/commands/status.d.ts +3 -0
  109. package/dist/commands/status.d.ts.map +1 -0
  110. package/dist/commands/status.js +19 -0
  111. package/dist/commands/status.js.map +1 -0
  112. package/dist/commands/subagents.d.ts +3 -0
  113. package/dist/commands/subagents.d.ts.map +1 -0
  114. package/dist/commands/subagents.js +350 -0
  115. package/dist/commands/subagents.js.map +1 -0
  116. package/dist/commands/sync.d.ts +3 -0
  117. package/dist/commands/sync.d.ts.map +1 -0
  118. package/dist/commands/sync.js +62 -0
  119. package/dist/commands/sync.js.map +1 -0
  120. package/dist/commands/teams-picker.d.ts +14 -0
  121. package/dist/commands/teams-picker.d.ts.map +1 -0
  122. package/dist/commands/teams-picker.js +278 -0
  123. package/dist/commands/teams-picker.js.map +1 -0
  124. package/dist/commands/teams.d.ts +3 -0
  125. package/dist/commands/teams.d.ts.map +1 -0
  126. package/dist/commands/teams.js +917 -0
  127. package/dist/commands/teams.js.map +1 -0
  128. package/dist/commands/utils.d.ts +39 -0
  129. package/dist/commands/utils.d.ts.map +1 -0
  130. package/dist/commands/utils.js +100 -0
  131. package/dist/commands/utils.js.map +1 -0
  132. package/dist/commands/versions.d.ts +3 -0
  133. package/dist/commands/versions.d.ts.map +1 -0
  134. package/dist/commands/versions.js +700 -0
  135. package/dist/commands/versions.js.map +1 -0
  136. package/dist/commands/view.d.ts +8 -0
  137. package/dist/commands/view.d.ts.map +1 -0
  138. package/dist/commands/view.js +626 -0
  139. package/dist/commands/view.js.map +1 -0
  140. package/dist/index.d.ts +3 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +484 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/lib/__tests__/bugfixes.test.d.ts +2 -0
  145. package/dist/lib/__tests__/bugfixes.test.d.ts.map +1 -0
  146. package/dist/lib/__tests__/bugfixes.test.js +192 -0
  147. package/dist/lib/__tests__/bugfixes.test.js.map +1 -0
  148. package/dist/lib/__tests__/exec.test.d.ts +2 -0
  149. package/dist/lib/__tests__/exec.test.d.ts.map +1 -0
  150. package/dist/lib/__tests__/exec.test.js +446 -0
  151. package/dist/lib/__tests__/exec.test.js.map +1 -0
  152. package/dist/lib/__tests__/git-sync.test.d.ts +2 -0
  153. package/dist/lib/__tests__/git-sync.test.d.ts.map +1 -0
  154. package/dist/lib/__tests__/git-sync.test.js +138 -0
  155. package/dist/lib/__tests__/git-sync.test.js.map +1 -0
  156. package/dist/lib/__tests__/hooks.test.d.ts +2 -0
  157. package/dist/lib/__tests__/hooks.test.d.ts.map +1 -0
  158. package/dist/lib/__tests__/hooks.test.js +203 -0
  159. package/dist/lib/__tests__/hooks.test.js.map +1 -0
  160. package/dist/lib/__tests__/memory-compile.test.d.ts +2 -0
  161. package/dist/lib/__tests__/memory-compile.test.d.ts.map +1 -0
  162. package/dist/lib/__tests__/memory-compile.test.js +95 -0
  163. package/dist/lib/__tests__/memory-compile.test.js.map +1 -0
  164. package/dist/lib/__tests__/models.test.d.ts +2 -0
  165. package/dist/lib/__tests__/models.test.d.ts.map +1 -0
  166. package/dist/lib/__tests__/models.test.js +239 -0
  167. package/dist/lib/__tests__/models.test.js.map +1 -0
  168. package/dist/lib/__tests__/rotate.test.d.ts +2 -0
  169. package/dist/lib/__tests__/rotate.test.d.ts.map +1 -0
  170. package/dist/lib/__tests__/rotate.test.js +80 -0
  171. package/dist/lib/__tests__/rotate.test.js.map +1 -0
  172. package/dist/lib/__tests__/secrets-bundles.test.d.ts +2 -0
  173. package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +1 -0
  174. package/dist/lib/__tests__/secrets-bundles.test.js +104 -0
  175. package/dist/lib/__tests__/secrets-bundles.test.js.map +1 -0
  176. package/dist/lib/__tests__/secrets.test.d.ts +2 -0
  177. package/dist/lib/__tests__/secrets.test.d.ts.map +1 -0
  178. package/dist/lib/__tests__/secrets.test.js +90 -0
  179. package/dist/lib/__tests__/secrets.test.js.map +1 -0
  180. package/dist/lib/__tests__/shims.test.d.ts +2 -0
  181. package/dist/lib/__tests__/shims.test.d.ts.map +1 -0
  182. package/dist/lib/__tests__/shims.test.js +39 -0
  183. package/dist/lib/__tests__/shims.test.js.map +1 -0
  184. package/dist/lib/__tests__/usage.test.d.ts +2 -0
  185. package/dist/lib/__tests__/usage.test.d.ts.map +1 -0
  186. package/dist/lib/__tests__/usage.test.js +220 -0
  187. package/dist/lib/__tests__/usage.test.js.map +1 -0
  188. package/dist/lib/__tests__/versions.test.d.ts +2 -0
  189. package/dist/lib/__tests__/versions.test.d.ts.map +1 -0
  190. package/dist/lib/__tests__/versions.test.js +63 -0
  191. package/dist/lib/__tests__/versions.test.js.map +1 -0
  192. package/dist/lib/agents.d.ts +107 -0
  193. package/dist/lib/agents.d.ts.map +1 -0
  194. package/dist/lib/agents.js +1096 -0
  195. package/dist/lib/agents.js.map +1 -0
  196. package/dist/lib/artifact-actions.d.ts +22 -0
  197. package/dist/lib/artifact-actions.d.ts.map +1 -0
  198. package/dist/lib/artifact-actions.js +55 -0
  199. package/dist/lib/artifact-actions.js.map +1 -0
  200. package/dist/lib/cloud/codex.d.ts +19 -0
  201. package/dist/lib/cloud/codex.d.ts.map +1 -0
  202. package/dist/lib/cloud/codex.js +210 -0
  203. package/dist/lib/cloud/codex.js.map +1 -0
  204. package/dist/lib/cloud/factory.d.ts +26 -0
  205. package/dist/lib/cloud/factory.d.ts.map +1 -0
  206. package/dist/lib/cloud/factory.js +37 -0
  207. package/dist/lib/cloud/factory.js.map +1 -0
  208. package/dist/lib/cloud/registry.d.ts +6 -0
  209. package/dist/lib/cloud/registry.d.ts.map +1 -0
  210. package/dist/lib/cloud/registry.js +56 -0
  211. package/dist/lib/cloud/registry.js.map +1 -0
  212. package/dist/lib/cloud/rush.d.ts +15 -0
  213. package/dist/lib/cloud/rush.d.ts.map +1 -0
  214. package/dist/lib/cloud/rush.js +185 -0
  215. package/dist/lib/cloud/rush.js.map +1 -0
  216. package/dist/lib/cloud/store.d.ts +10 -0
  217. package/dist/lib/cloud/store.d.ts.map +1 -0
  218. package/dist/lib/cloud/store.js +96 -0
  219. package/dist/lib/cloud/store.js.map +1 -0
  220. package/dist/lib/cloud/stream.d.ts +18 -0
  221. package/dist/lib/cloud/stream.d.ts.map +1 -0
  222. package/dist/lib/cloud/stream.js +138 -0
  223. package/dist/lib/cloud/stream.js.map +1 -0
  224. package/dist/lib/cloud/types.d.ts +60 -0
  225. package/dist/lib/cloud/types.d.ts.map +1 -0
  226. package/dist/lib/cloud/types.js +2 -0
  227. package/dist/lib/cloud/types.js.map +1 -0
  228. package/dist/lib/commands.d.ts +121 -0
  229. package/dist/lib/commands.d.ts.map +1 -0
  230. package/dist/lib/commands.js +499 -0
  231. package/dist/lib/commands.js.map +1 -0
  232. package/dist/lib/convert.d.ts +11 -0
  233. package/dist/lib/convert.d.ts.map +1 -0
  234. package/dist/lib/convert.js +45 -0
  235. package/dist/lib/convert.js.map +1 -0
  236. package/dist/lib/daemon.d.ts +22 -0
  237. package/dist/lib/daemon.d.ts.map +1 -0
  238. package/dist/lib/daemon.js +311 -0
  239. package/dist/lib/daemon.js.map +1 -0
  240. package/dist/lib/drive-sync.d.ts +28 -0
  241. package/dist/lib/drive-sync.d.ts.map +1 -0
  242. package/dist/lib/drive-sync.js +193 -0
  243. package/dist/lib/drive-sync.js.map +1 -0
  244. package/dist/lib/exec.d.ts +85 -0
  245. package/dist/lib/exec.d.ts.map +1 -0
  246. package/dist/lib/exec.js +423 -0
  247. package/dist/lib/exec.js.map +1 -0
  248. package/dist/lib/factory.d.ts +57 -0
  249. package/dist/lib/factory.d.ts.map +1 -0
  250. package/dist/lib/factory.js +110 -0
  251. package/dist/lib/factory.js.map +1 -0
  252. package/dist/lib/git.d.ts +146 -0
  253. package/dist/lib/git.d.ts.map +1 -0
  254. package/dist/lib/git.js +635 -0
  255. package/dist/lib/git.js.map +1 -0
  256. package/dist/lib/help.d.ts +3 -0
  257. package/dist/lib/help.d.ts.map +1 -0
  258. package/dist/lib/help.js +63 -0
  259. package/dist/lib/help.js.map +1 -0
  260. package/dist/lib/hooks.d.ts +116 -0
  261. package/dist/lib/hooks.d.ts.map +1 -0
  262. package/dist/lib/hooks.js +837 -0
  263. package/dist/lib/hooks.js.map +1 -0
  264. package/dist/lib/manifest.d.ts +8 -0
  265. package/dist/lib/manifest.d.ts.map +1 -0
  266. package/dist/lib/manifest.js +36 -0
  267. package/dist/lib/manifest.js.map +1 -0
  268. package/dist/lib/markdown.d.ts +5 -0
  269. package/dist/lib/markdown.d.ts.map +1 -0
  270. package/dist/lib/markdown.js +11 -0
  271. package/dist/lib/markdown.js.map +1 -0
  272. package/dist/lib/mcp.d.ts +64 -0
  273. package/dist/lib/mcp.d.ts.map +1 -0
  274. package/dist/lib/mcp.js +327 -0
  275. package/dist/lib/mcp.js.map +1 -0
  276. package/dist/lib/memory-compile.d.ts +56 -0
  277. package/dist/lib/memory-compile.d.ts.map +1 -0
  278. package/dist/lib/memory-compile.js +167 -0
  279. package/dist/lib/memory-compile.js.map +1 -0
  280. package/dist/lib/memory.d.ts +56 -0
  281. package/dist/lib/memory.d.ts.map +1 -0
  282. package/dist/lib/memory.js +267 -0
  283. package/dist/lib/memory.js.map +1 -0
  284. package/dist/lib/models.d.ts +91 -0
  285. package/dist/lib/models.d.ts.map +1 -0
  286. package/dist/lib/models.js +706 -0
  287. package/dist/lib/models.js.map +1 -0
  288. package/dist/lib/permissions.d.ts +204 -0
  289. package/dist/lib/permissions.d.ts.map +1 -0
  290. package/dist/lib/permissions.js +1022 -0
  291. package/dist/lib/permissions.js.map +1 -0
  292. package/dist/lib/picker.d.ts +17 -0
  293. package/dist/lib/picker.d.ts.map +1 -0
  294. package/dist/lib/picker.js +95 -0
  295. package/dist/lib/picker.js.map +1 -0
  296. package/dist/lib/plugins.d.ts +73 -0
  297. package/dist/lib/plugins.d.ts.map +1 -0
  298. package/dist/lib/plugins.js +549 -0
  299. package/dist/lib/plugins.js.map +1 -0
  300. package/dist/lib/profiles-keychain.d.ts +3 -0
  301. package/dist/lib/profiles-keychain.d.ts.map +1 -0
  302. package/dist/lib/profiles-keychain.js +10 -0
  303. package/dist/lib/profiles-keychain.js.map +1 -0
  304. package/dist/lib/profiles-presets.d.ts +15 -0
  305. package/dist/lib/profiles-presets.d.ts.map +1 -0
  306. package/dist/lib/profiles-presets.js +95 -0
  307. package/dist/lib/profiles-presets.js.map +1 -0
  308. package/dist/lib/profiles.d.ts +35 -0
  309. package/dist/lib/profiles.d.ts.map +1 -0
  310. package/dist/lib/profiles.js +123 -0
  311. package/dist/lib/profiles.js.map +1 -0
  312. package/dist/lib/pty-client.d.ts +22 -0
  313. package/dist/lib/pty-client.d.ts.map +1 -0
  314. package/dist/lib/pty-client.js +181 -0
  315. package/dist/lib/pty-client.js.map +1 -0
  316. package/dist/lib/pty-server.d.ts +16 -0
  317. package/dist/lib/pty-server.d.ts.map +1 -0
  318. package/dist/lib/pty-server.js +422 -0
  319. package/dist/lib/pty-server.js.map +1 -0
  320. package/dist/lib/registry.d.ts +28 -0
  321. package/dist/lib/registry.d.ts.map +1 -0
  322. package/dist/lib/registry.js +203 -0
  323. package/dist/lib/registry.js.map +1 -0
  324. package/dist/lib/resources.d.ts +50 -0
  325. package/dist/lib/resources.d.ts.map +1 -0
  326. package/dist/lib/resources.js +103 -0
  327. package/dist/lib/resources.js.map +1 -0
  328. package/dist/lib/rotate.d.ts +52 -0
  329. package/dist/lib/rotate.d.ts.map +1 -0
  330. package/dist/lib/rotate.js +87 -0
  331. package/dist/lib/rotate.js.map +1 -0
  332. package/dist/lib/routines.d.ts +70 -0
  333. package/dist/lib/routines.d.ts.map +1 -0
  334. package/dist/lib/routines.js +325 -0
  335. package/dist/lib/routines.js.map +1 -0
  336. package/dist/lib/runner.d.ts +12 -0
  337. package/dist/lib/runner.d.ts.map +1 -0
  338. package/dist/lib/runner.js +311 -0
  339. package/dist/lib/runner.js.map +1 -0
  340. package/dist/lib/sandbox.d.ts +10 -0
  341. package/dist/lib/sandbox.d.ts.map +1 -0
  342. package/dist/lib/sandbox.js +201 -0
  343. package/dist/lib/sandbox.js.map +1 -0
  344. package/dist/lib/scheduler.d.ts +18 -0
  345. package/dist/lib/scheduler.d.ts.map +1 -0
  346. package/dist/lib/scheduler.js +69 -0
  347. package/dist/lib/scheduler.js.map +1 -0
  348. package/dist/lib/secrets-bundles.d.ts +29 -0
  349. package/dist/lib/secrets-bundles.d.ts.map +1 -0
  350. package/dist/lib/secrets-bundles.js +168 -0
  351. package/dist/lib/secrets-bundles.js.map +1 -0
  352. package/dist/lib/secrets.d.ts +27 -0
  353. package/dist/lib/secrets.d.ts.map +1 -0
  354. package/dist/lib/secrets.js +127 -0
  355. package/dist/lib/secrets.js.map +1 -0
  356. package/dist/lib/session/__tests__/db.test.d.ts +2 -0
  357. package/dist/lib/session/__tests__/db.test.d.ts.map +1 -0
  358. package/dist/lib/session/__tests__/db.test.js +54 -0
  359. package/dist/lib/session/__tests__/db.test.js.map +1 -0
  360. package/dist/lib/session/__tests__/discover.test.d.ts +2 -0
  361. package/dist/lib/session/__tests__/discover.test.d.ts.map +1 -0
  362. package/dist/lib/session/__tests__/discover.test.js +63 -0
  363. package/dist/lib/session/__tests__/discover.test.js.map +1 -0
  364. package/dist/lib/session/__tests__/prompt.test.d.ts +2 -0
  365. package/dist/lib/session/__tests__/prompt.test.d.ts.map +1 -0
  366. package/dist/lib/session/__tests__/prompt.test.js +44 -0
  367. package/dist/lib/session/__tests__/prompt.test.js.map +1 -0
  368. package/dist/lib/session/__tests__/render.test.d.ts +2 -0
  369. package/dist/lib/session/__tests__/render.test.d.ts.map +1 -0
  370. package/dist/lib/session/__tests__/render.test.js +602 -0
  371. package/dist/lib/session/__tests__/render.test.js.map +1 -0
  372. package/dist/lib/session/artifacts.d.ts +5 -0
  373. package/dist/lib/session/artifacts.d.ts.map +1 -0
  374. package/dist/lib/session/artifacts.js +75 -0
  375. package/dist/lib/session/artifacts.js.map +1 -0
  376. package/dist/lib/session/db.d.ts +118 -0
  377. package/dist/lib/session/db.d.ts.map +1 -0
  378. package/dist/lib/session/db.js +576 -0
  379. package/dist/lib/session/db.js.map +1 -0
  380. package/dist/lib/session/discover.d.ts +60 -0
  381. package/dist/lib/session/discover.d.ts.map +1 -0
  382. package/dist/lib/session/discover.js +1272 -0
  383. package/dist/lib/session/discover.js.map +1 -0
  384. package/dist/lib/session/parse.d.ts +23 -0
  385. package/dist/lib/session/parse.d.ts.map +1 -0
  386. package/dist/lib/session/parse.js +650 -0
  387. package/dist/lib/session/parse.js.map +1 -0
  388. package/dist/lib/session/prompt.d.ts +4 -0
  389. package/dist/lib/session/prompt.d.ts.map +1 -0
  390. package/dist/lib/session/prompt.js +64 -0
  391. package/dist/lib/session/prompt.js.map +1 -0
  392. package/dist/lib/session/prompt.test.d.ts +2 -0
  393. package/dist/lib/session/prompt.test.d.ts.map +1 -0
  394. package/dist/lib/session/prompt.test.js +57 -0
  395. package/dist/lib/session/prompt.test.js.map +1 -0
  396. package/dist/lib/session/render.d.ts +90 -0
  397. package/dist/lib/session/render.d.ts.map +1 -0
  398. package/dist/lib/session/render.js +778 -0
  399. package/dist/lib/session/render.js.map +1 -0
  400. package/dist/lib/session/team-filter.d.ts +26 -0
  401. package/dist/lib/session/team-filter.d.ts.map +1 -0
  402. package/dist/lib/session/team-filter.js +66 -0
  403. package/dist/lib/session/team-filter.js.map +1 -0
  404. package/dist/lib/session/team-filter.test.d.ts +2 -0
  405. package/dist/lib/session/team-filter.test.d.ts.map +1 -0
  406. package/dist/lib/session/team-filter.test.js +157 -0
  407. package/dist/lib/session/team-filter.test.js.map +1 -0
  408. package/dist/lib/session/types.d.ts +69 -0
  409. package/dist/lib/session/types.d.ts.map +1 -0
  410. package/dist/lib/session/types.js +2 -0
  411. package/dist/lib/session/types.js.map +1 -0
  412. package/dist/lib/shims.d.ts +228 -0
  413. package/dist/lib/shims.d.ts.map +1 -0
  414. package/dist/lib/shims.js +1170 -0
  415. package/dist/lib/shims.js.map +1 -0
  416. package/dist/lib/skills.d.ts +134 -0
  417. package/dist/lib/skills.d.ts.map +1 -0
  418. package/dist/lib/skills.js +783 -0
  419. package/dist/lib/skills.js.map +1 -0
  420. package/dist/lib/state.d.ts +53 -0
  421. package/dist/lib/state.d.ts.map +1 -0
  422. package/dist/lib/state.js +299 -0
  423. package/dist/lib/state.js.map +1 -0
  424. package/dist/lib/subagents.d.ts +75 -0
  425. package/dist/lib/subagents.d.ts.map +1 -0
  426. package/dist/lib/subagents.js +402 -0
  427. package/dist/lib/subagents.js.map +1 -0
  428. package/dist/lib/teams/agents.d.ts +146 -0
  429. package/dist/lib/teams/agents.d.ts.map +1 -0
  430. package/dist/lib/teams/agents.js +1072 -0
  431. package/dist/lib/teams/agents.js.map +1 -0
  432. package/dist/lib/teams/api.d.ts +77 -0
  433. package/dist/lib/teams/api.d.ts.map +1 -0
  434. package/dist/lib/teams/api.js +229 -0
  435. package/dist/lib/teams/api.js.map +1 -0
  436. package/dist/lib/teams/cloud.d.ts +11 -0
  437. package/dist/lib/teams/cloud.d.ts.map +1 -0
  438. package/dist/lib/teams/cloud.js +169 -0
  439. package/dist/lib/teams/cloud.js.map +1 -0
  440. package/dist/lib/teams/debug.d.ts +2 -0
  441. package/dist/lib/teams/debug.d.ts.map +1 -0
  442. package/dist/lib/teams/debug.js +6 -0
  443. package/dist/lib/teams/debug.js.map +1 -0
  444. package/dist/lib/teams/file_ops.d.ts +6 -0
  445. package/dist/lib/teams/file_ops.d.ts.map +1 -0
  446. package/dist/lib/teams/file_ops.js +59 -0
  447. package/dist/lib/teams/file_ops.js.map +1 -0
  448. package/dist/lib/teams/parsers.d.ts +5 -0
  449. package/dist/lib/teams/parsers.d.ts.map +1 -0
  450. package/dist/lib/teams/parsers.js +826 -0
  451. package/dist/lib/teams/parsers.js.map +1 -0
  452. package/dist/lib/teams/persistence.d.ts +28 -0
  453. package/dist/lib/teams/persistence.d.ts.map +1 -0
  454. package/dist/lib/teams/persistence.js +289 -0
  455. package/dist/lib/teams/persistence.js.map +1 -0
  456. package/dist/lib/teams/ralph.d.ts +8 -0
  457. package/dist/lib/teams/ralph.d.ts.map +1 -0
  458. package/dist/lib/teams/ralph.js +59 -0
  459. package/dist/lib/teams/ralph.js.map +1 -0
  460. package/dist/lib/teams/registry.d.ts +11 -0
  461. package/dist/lib/teams/registry.d.ts.map +1 -0
  462. package/dist/lib/teams/registry.js +56 -0
  463. package/dist/lib/teams/registry.js.map +1 -0
  464. package/dist/lib/teams/summarizer.d.ts +58 -0
  465. package/dist/lib/teams/summarizer.d.ts.map +1 -0
  466. package/dist/lib/teams/summarizer.js +766 -0
  467. package/dist/lib/teams/summarizer.js.map +1 -0
  468. package/dist/lib/template.d.ts +24 -0
  469. package/dist/lib/template.d.ts.map +1 -0
  470. package/dist/lib/template.js +57 -0
  471. package/dist/lib/template.js.map +1 -0
  472. package/dist/lib/types.d.ts +282 -0
  473. package/dist/lib/types.d.ts.map +1 -0
  474. package/dist/lib/types.js +18 -0
  475. package/dist/lib/types.js.map +1 -0
  476. package/dist/lib/usage.d.ts +73 -0
  477. package/dist/lib/usage.d.ts.map +1 -0
  478. package/dist/lib/usage.js +623 -0
  479. package/dist/lib/usage.js.map +1 -0
  480. package/dist/lib/versions.d.ts +248 -0
  481. package/dist/lib/versions.d.ts.map +1 -0
  482. package/dist/lib/versions.js +1737 -0
  483. package/dist/lib/versions.js.map +1 -0
  484. package/package.json +82 -0
  485. package/scripts/postinstall.js +72 -0
  486. package/scripts/rebuild-sqlite.sh +46 -0
@@ -0,0 +1,576 @@
1
+ import * as fs from 'fs';
2
+ import * as os from 'os';
3
+ import * as path from 'path';
4
+ import Database from 'better-sqlite3';
5
+ const HOME = os.homedir();
6
+ const SESSIONS_DIR = path.join(HOME, '.agents', 'sessions');
7
+ const DB_PATH = path.join(SESSIONS_DIR, 'sessions.db');
8
+ const SCHEMA_VERSION = 4;
9
+ // BM25 column weights for session_text: label > topic > project > content.
10
+ // Higher weights make matches in that column rank higher.
11
+ const BM25_WEIGHTS = [5.0, 2.0, 1.5, 1.0];
12
+ const SCHEMA = `
13
+ CREATE TABLE IF NOT EXISTS sessions (
14
+ id TEXT PRIMARY KEY,
15
+ short_id TEXT NOT NULL,
16
+ agent TEXT NOT NULL,
17
+ version TEXT,
18
+ account TEXT,
19
+ timestamp TEXT NOT NULL,
20
+ project TEXT,
21
+ cwd TEXT,
22
+ git_branch TEXT,
23
+ topic TEXT,
24
+ label TEXT,
25
+ message_count INTEGER,
26
+ token_count INTEGER,
27
+ file_path TEXT NOT NULL,
28
+ file_mtime_ms INTEGER,
29
+ file_size INTEGER,
30
+ scanned_at INTEGER,
31
+ is_team_origin INTEGER DEFAULT 0
32
+ );
33
+ CREATE INDEX IF NOT EXISTS idx_sessions_timestamp ON sessions(timestamp DESC);
34
+ CREATE INDEX IF NOT EXISTS idx_sessions_cwd ON sessions(cwd);
35
+ CREATE INDEX IF NOT EXISTS idx_sessions_agent ON sessions(agent);
36
+ CREATE INDEX IF NOT EXISTS idx_sessions_file_path ON sessions(file_path);
37
+
38
+ CREATE VIRTUAL TABLE IF NOT EXISTS session_text USING fts5(
39
+ session_id UNINDEXED,
40
+ label,
41
+ topic,
42
+ project,
43
+ content,
44
+ tokenize = 'unicode61 remove_diacritics 2'
45
+ );
46
+
47
+ CREATE TABLE IF NOT EXISTS meta (
48
+ key TEXT PRIMARY KEY,
49
+ value TEXT
50
+ );
51
+
52
+ -- Tracks every file we've stat'd during a scan, regardless of whether it
53
+ -- produced a session row. Decouples "did we already look at this?" from
54
+ -- "do we have a session from it?" — essential for files that don't parse
55
+ -- into a session (no id) or session rows whose file_path is synthetic.
56
+ CREATE TABLE IF NOT EXISTS scan_ledger (
57
+ file_path TEXT PRIMARY KEY,
58
+ file_mtime_ms INTEGER NOT NULL,
59
+ file_size INTEGER NOT NULL,
60
+ scanned_at INTEGER NOT NULL
61
+ );
62
+ `;
63
+ let dbInstance = null;
64
+ /**
65
+ * Apply schema migrations from `fromVersion` → SCHEMA_VERSION. The new
66
+ * `CREATE IF NOT EXISTS` at SCHEMA doesn't help when column sets or FTS
67
+ * column definitions change — those need explicit migration here.
68
+ */
69
+ function migrateSchema(db, fromVersion) {
70
+ if (fromVersion < 2) {
71
+ // v1 → v2: add `label` column to sessions and switch session_text from
72
+ // single `content` column to multi-column (label, topic, project, content).
73
+ const cols = db.prepare(`PRAGMA table_info(sessions)`).all();
74
+ if (!cols.some(c => c.name === 'label')) {
75
+ db.exec(`ALTER TABLE sessions ADD COLUMN label TEXT`);
76
+ }
77
+ // FTS5 virtual tables can't be ALTERed — drop and recreate. Scan ledger
78
+ // is cleared so every file gets re-parsed on next run, repopulating FTS5.
79
+ db.exec(`
80
+ DROP TABLE IF EXISTS session_text;
81
+ CREATE VIRTUAL TABLE session_text USING fts5(
82
+ session_id UNINDEXED,
83
+ label,
84
+ topic,
85
+ project,
86
+ content,
87
+ tokenize = 'unicode61 remove_diacritics 2'
88
+ );
89
+ DELETE FROM scan_ledger;
90
+ `);
91
+ }
92
+ if (fromVersion < 3) {
93
+ // v2 → v3: topic extraction now strips team-spawn wrapper prompts
94
+ // (HEADLESS PLAN MODE prefix + summary suffix). Force a rescan so cached
95
+ // topics like "You are running in HEADLESS PLAN MODE..." get re-extracted.
96
+ db.exec(`DELETE FROM scan_ledger;`);
97
+ }
98
+ if (fromVersion < 4) {
99
+ // v3 → v4: team-origin is now captured structurally from the JSONL
100
+ // `entrypoint` field at scan time. Add the column and force a rescan so
101
+ // every existing Claude session gets its flag populated.
102
+ const cols = db.prepare(`PRAGMA table_info(sessions)`).all();
103
+ if (!cols.some(c => c.name === 'is_team_origin')) {
104
+ db.exec(`ALTER TABLE sessions ADD COLUMN is_team_origin INTEGER DEFAULT 0`);
105
+ }
106
+ db.exec(`DELETE FROM scan_ledger;`);
107
+ }
108
+ }
109
+ export function getDB() {
110
+ if (dbInstance)
111
+ return dbInstance;
112
+ fs.mkdirSync(SESSIONS_DIR, { recursive: true });
113
+ const db = new Database(DB_PATH);
114
+ db.pragma('journal_mode = WAL');
115
+ db.pragma('synchronous = NORMAL');
116
+ db.pragma('temp_store = MEMORY');
117
+ db.exec(SCHEMA);
118
+ const current = db.prepare(`SELECT value FROM meta WHERE key = 'schema_version'`).get();
119
+ const currentVersion = current ? parseInt(current.value, 10) : 0;
120
+ if (!current) {
121
+ db.prepare(`INSERT INTO meta(key, value) VALUES ('schema_version', ?)`).run(String(SCHEMA_VERSION));
122
+ }
123
+ else if (currentVersion < SCHEMA_VERSION) {
124
+ migrateSchema(db, currentVersion);
125
+ db.prepare(`INSERT OR REPLACE INTO meta(key, value) VALUES ('schema_version', ?)`).run(String(SCHEMA_VERSION));
126
+ }
127
+ // One-shot cleanup of the pre-SQLite JSONL indexes. Safe — nothing reads
128
+ // them anymore. Guarded by a meta flag so we only try once.
129
+ const cleaned = db.prepare(`SELECT value FROM meta WHERE key = 'legacy_indexes_removed'`).get();
130
+ if (!cleaned) {
131
+ for (const p of [
132
+ path.join(SESSIONS_DIR, 'index.jsonl'),
133
+ path.join(SESSIONS_DIR, 'content_index.jsonl'),
134
+ path.join(SESSIONS_DIR, 'index.jsonl.bak'),
135
+ ]) {
136
+ try {
137
+ if (fs.existsSync(p))
138
+ fs.unlinkSync(p);
139
+ }
140
+ catch { /* ignore */ }
141
+ }
142
+ db.prepare(`INSERT INTO meta(key, value) VALUES ('legacy_indexes_removed', '1')`).run();
143
+ }
144
+ dbInstance = db;
145
+ return db;
146
+ }
147
+ export function closeDB() {
148
+ if (dbInstance) {
149
+ dbInstance.close();
150
+ dbInstance = null;
151
+ }
152
+ }
153
+ export function getDBPath() {
154
+ return DB_PATH;
155
+ }
156
+ /**
157
+ * Look up the file stat stamp we stored the last time we scanned a given file path.
158
+ * Callers compare this to the current fs.stat to decide whether to rescan.
159
+ */
160
+ export function getScanStampByPath(filePath) {
161
+ const db = getDB();
162
+ const row = db
163
+ .prepare(`SELECT file_mtime_ms, file_size FROM scan_ledger WHERE file_path = ? LIMIT 1`)
164
+ .get(filePath);
165
+ return row ? { fileMtimeMs: row.file_mtime_ms, fileSize: row.file_size } : null;
166
+ }
167
+ /**
168
+ * Bulk-load the stamp ledger for a set of file paths in a single SQL query.
169
+ * This is the fast path used by the incremental scanner — avoids N+1 queries.
170
+ */
171
+ export function getScanStampsForPaths(filePaths) {
172
+ const result = new Map();
173
+ if (filePaths.length === 0)
174
+ return result;
175
+ const db = getDB();
176
+ // SQLite parameter limit is typically 999 / 32766 — chunk defensively.
177
+ const CHUNK = 500;
178
+ for (let i = 0; i < filePaths.length; i += CHUNK) {
179
+ const chunk = filePaths.slice(i, i + CHUNK);
180
+ const placeholders = chunk.map(() => '?').join(',');
181
+ const rows = db
182
+ .prepare(`
183
+ SELECT file_path, file_mtime_ms, file_size
184
+ FROM scan_ledger
185
+ WHERE file_path IN (${placeholders})
186
+ `)
187
+ .all(...chunk);
188
+ for (const row of rows) {
189
+ result.set(row.file_path, { fileMtimeMs: row.file_mtime_ms, fileSize: row.file_size });
190
+ }
191
+ }
192
+ return result;
193
+ }
194
+ /**
195
+ * Record scan stamps for files we've looked at. Covers both files that produced
196
+ * a session and files we looked at but chose not to index (e.g. malformed).
197
+ */
198
+ export function recordScans(entries) {
199
+ if (entries.length === 0)
200
+ return;
201
+ const db = getDB();
202
+ const stmt = db.prepare(`
203
+ INSERT INTO scan_ledger (file_path, file_mtime_ms, file_size, scanned_at)
204
+ VALUES (?, ?, ?, ?)
205
+ ON CONFLICT(file_path) DO UPDATE SET
206
+ file_mtime_ms = excluded.file_mtime_ms,
207
+ file_size = excluded.file_size,
208
+ scanned_at = excluded.scanned_at
209
+ `);
210
+ const now = Date.now();
211
+ const txn = db.transaction((items) => {
212
+ for (const { filePath, scan } of items) {
213
+ stmt.run(filePath, scan.fileMtimeMs, scan.fileSize, now);
214
+ }
215
+ });
216
+ txn(entries);
217
+ }
218
+ const upsertSessionStmt = (db) => db.prepare(`
219
+ INSERT INTO sessions (
220
+ id, short_id, agent, version, account, timestamp,
221
+ project, cwd, git_branch, topic, label, message_count, token_count,
222
+ file_path, file_mtime_ms, file_size, scanned_at, is_team_origin
223
+ ) VALUES (
224
+ @id, @short_id, @agent, @version, @account, @timestamp,
225
+ @project, @cwd, @git_branch, @topic, @label, @message_count, @token_count,
226
+ @file_path, @file_mtime_ms, @file_size, @scanned_at, @is_team_origin
227
+ )
228
+ ON CONFLICT(id) DO UPDATE SET
229
+ short_id = excluded.short_id,
230
+ agent = excluded.agent,
231
+ version = excluded.version,
232
+ account = excluded.account,
233
+ timestamp = excluded.timestamp,
234
+ project = excluded.project,
235
+ cwd = excluded.cwd,
236
+ git_branch = excluded.git_branch,
237
+ topic = excluded.topic,
238
+ label = excluded.label,
239
+ message_count = excluded.message_count,
240
+ token_count = excluded.token_count,
241
+ file_path = excluded.file_path,
242
+ file_mtime_ms = excluded.file_mtime_ms,
243
+ file_size = excluded.file_size,
244
+ scanned_at = excluded.scanned_at,
245
+ is_team_origin = excluded.is_team_origin
246
+ `);
247
+ const deleteTextStmt = (db) => db.prepare(`DELETE FROM session_text WHERE session_id = ?`);
248
+ const insertTextStmt = (db) => db.prepare(`INSERT INTO session_text (session_id, label, topic, project, content) VALUES (?, ?, ?, ?, ?)`);
249
+ let cachedStmts = {};
250
+ function stmts(db) {
251
+ if (!cachedStmts.upsert) {
252
+ cachedStmts = {
253
+ upsert: upsertSessionStmt(db),
254
+ delText: deleteTextStmt(db),
255
+ insText: insertTextStmt(db),
256
+ };
257
+ }
258
+ return cachedStmts;
259
+ }
260
+ /**
261
+ * Upsert a session row and replace its FTS5 content in a single transaction.
262
+ * `content` is the tokenizable user-prompt text; pass '' to leave the row unsearchable.
263
+ */
264
+ export function upsertSession(meta, content, scan) {
265
+ const db = getDB();
266
+ const { upsert, delText, insText } = stmts(db);
267
+ const row = {
268
+ id: meta.id,
269
+ short_id: meta.shortId,
270
+ agent: meta.agent,
271
+ version: meta.version ?? null,
272
+ account: meta.account ?? null,
273
+ timestamp: meta.timestamp,
274
+ project: meta.project ?? null,
275
+ cwd: meta.cwd ?? null,
276
+ git_branch: meta.gitBranch ?? null,
277
+ topic: meta.topic ?? null,
278
+ label: meta.label ?? null,
279
+ message_count: meta.messageCount ?? null,
280
+ token_count: meta.tokenCount ?? null,
281
+ file_path: meta.filePath,
282
+ file_mtime_ms: scan?.fileMtimeMs ?? null,
283
+ file_size: scan?.fileSize ?? null,
284
+ scanned_at: Date.now(),
285
+ is_team_origin: meta.isTeamOrigin ? 1 : 0,
286
+ };
287
+ const txn = db.transaction(() => {
288
+ upsert.run(row);
289
+ delText.run(meta.id);
290
+ insText.run(meta.id, meta.label ?? '', meta.topic ?? '', meta.project ?? '', content ?? '');
291
+ });
292
+ txn();
293
+ }
294
+ export function upsertSessionsBatch(entries) {
295
+ if (entries.length === 0)
296
+ return;
297
+ const db = getDB();
298
+ const { upsert, delText, insText } = stmts(db);
299
+ const now = Date.now();
300
+ const ledger = db.prepare(`
301
+ INSERT INTO scan_ledger (file_path, file_mtime_ms, file_size, scanned_at)
302
+ VALUES (?, ?, ?, ?)
303
+ ON CONFLICT(file_path) DO UPDATE SET
304
+ file_mtime_ms = excluded.file_mtime_ms,
305
+ file_size = excluded.file_size,
306
+ scanned_at = excluded.scanned_at
307
+ `);
308
+ const txn = db.transaction((items) => {
309
+ for (const { meta, content, scan } of items) {
310
+ upsert.run({
311
+ id: meta.id,
312
+ short_id: meta.shortId,
313
+ agent: meta.agent,
314
+ version: meta.version ?? null,
315
+ account: meta.account ?? null,
316
+ timestamp: meta.timestamp,
317
+ project: meta.project ?? null,
318
+ cwd: meta.cwd ?? null,
319
+ git_branch: meta.gitBranch ?? null,
320
+ topic: meta.topic ?? null,
321
+ label: meta.label ?? null,
322
+ message_count: meta.messageCount ?? null,
323
+ token_count: meta.tokenCount ?? null,
324
+ file_path: meta.filePath,
325
+ file_mtime_ms: scan?.fileMtimeMs ?? null,
326
+ file_size: scan?.fileSize ?? null,
327
+ scanned_at: now,
328
+ is_team_origin: meta.isTeamOrigin ? 1 : 0,
329
+ });
330
+ delText.run(meta.id);
331
+ insText.run(meta.id, meta.label ?? '', meta.topic ?? '', meta.project ?? '', content ?? '');
332
+ if (scan && meta.filePath) {
333
+ ledger.run(meta.filePath, scan.fileMtimeMs, scan.fileSize, now);
334
+ }
335
+ }
336
+ });
337
+ txn(entries);
338
+ }
339
+ /**
340
+ * Sync labels for a set of sessions. For each id in the map, if the stored
341
+ * label differs, update both `sessions.label` and the FTS5 label column.
342
+ * Leaves FTS5 content/topic/project untouched — cheap to call every run.
343
+ */
344
+ export function syncLabels(labelMap) {
345
+ if (labelMap.size === 0)
346
+ return 0;
347
+ const db = getDB();
348
+ const ids = [...labelMap.keys()];
349
+ const CHUNK = 500;
350
+ const updates = [];
351
+ for (let i = 0; i < ids.length; i += CHUNK) {
352
+ const chunk = ids.slice(i, i + CHUNK);
353
+ const placeholders = chunk.map(() => '?').join(',');
354
+ const rows = db
355
+ .prepare(`SELECT id, label FROM sessions WHERE id IN (${placeholders})`)
356
+ .all(...chunk);
357
+ for (const row of rows) {
358
+ const live = labelMap.get(row.id) ?? null;
359
+ if ((live ?? '') !== (row.label ?? '')) {
360
+ updates.push({ id: row.id, label: live });
361
+ }
362
+ }
363
+ }
364
+ if (updates.length === 0)
365
+ return 0;
366
+ const updSessions = db.prepare(`UPDATE sessions SET label = ? WHERE id = ?`);
367
+ const updFts = db.prepare(`UPDATE session_text SET label = ? WHERE session_id = ?`);
368
+ const txn = db.transaction((items) => {
369
+ for (const { id, label } of items) {
370
+ updSessions.run(label, id);
371
+ updFts.run(label ?? '', id);
372
+ }
373
+ });
374
+ txn(updates);
375
+ return updates.length;
376
+ }
377
+ function rowToMeta(row) {
378
+ return {
379
+ id: row.id,
380
+ shortId: row.short_id,
381
+ agent: row.agent,
382
+ timestamp: row.timestamp,
383
+ project: row.project ?? undefined,
384
+ cwd: row.cwd ?? undefined,
385
+ filePath: row.file_path,
386
+ gitBranch: row.git_branch ?? undefined,
387
+ messageCount: row.message_count ?? undefined,
388
+ tokenCount: row.token_count ?? undefined,
389
+ version: row.version ?? undefined,
390
+ account: row.account ?? undefined,
391
+ topic: row.topic ?? undefined,
392
+ label: row.label ?? undefined,
393
+ isTeamOrigin: row.is_team_origin === 1,
394
+ };
395
+ }
396
+ function buildSessionWhere(options) {
397
+ const where = [];
398
+ const params = [];
399
+ if (options.agent) {
400
+ where.push('agent = ?');
401
+ params.push(options.agent);
402
+ }
403
+ else if (options.agents && options.agents.length > 0) {
404
+ where.push(`agent IN (${options.agents.map(() => '?').join(',')})`);
405
+ params.push(...options.agents);
406
+ }
407
+ if (options.version) {
408
+ where.push('version = ?');
409
+ params.push(options.version);
410
+ }
411
+ if (options.cwd) {
412
+ where.push('cwd = ?');
413
+ params.push(options.cwd);
414
+ }
415
+ if (options.cwdPrefix) {
416
+ where.push('(cwd = ? OR cwd LIKE ?)');
417
+ params.push(options.cwdPrefix, options.cwdPrefix + '/%');
418
+ }
419
+ if (options.project) {
420
+ where.push('LOWER(IFNULL(project, \'\')) LIKE ?');
421
+ params.push(`%${options.project.toLowerCase()}%`);
422
+ }
423
+ if (typeof options.sinceMs === 'number') {
424
+ // Compare as strings; ISO 8601 timestamps sort lexicographically.
425
+ where.push('timestamp >= ?');
426
+ params.push(new Date(options.sinceMs).toISOString());
427
+ }
428
+ if (typeof options.untilMs === 'number') {
429
+ where.push('timestamp <= ?');
430
+ params.push(new Date(options.untilMs).toISOString());
431
+ }
432
+ if (options.excludeTeamOrigin) {
433
+ where.push('IFNULL(is_team_origin, 0) = 0');
434
+ }
435
+ if (options.onlyTeamOrigin) {
436
+ where.push('IFNULL(is_team_origin, 0) = 1');
437
+ }
438
+ const clause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
439
+ return { clause, params };
440
+ }
441
+ export function querySessions(options = {}) {
442
+ const db = getDB();
443
+ const { clause, params } = buildSessionWhere(options);
444
+ const limitClause = options.limit ? `LIMIT ${Math.max(1, Math.floor(options.limit))}` : '';
445
+ const sql = `SELECT * FROM sessions ${clause} ORDER BY timestamp DESC ${limitClause}`;
446
+ const rows = db.prepare(sql).all(...params);
447
+ return rows.map(rowToMeta);
448
+ }
449
+ export function countSessions(options = {}) {
450
+ const db = getDB();
451
+ const { clause, params } = buildSessionWhere(options);
452
+ const sql = `SELECT COUNT(*) AS n FROM sessions ${clause}`;
453
+ const row = db.prepare(sql).get(...params);
454
+ return row ? row.n : 0;
455
+ }
456
+ export function getAllFilePaths() {
457
+ const db = getDB();
458
+ const rows = db.prepare(`SELECT file_path FROM sessions`).all();
459
+ return new Set(rows.map(r => r.file_path));
460
+ }
461
+ export function getSessionsByFilePaths(paths) {
462
+ if (paths.length === 0)
463
+ return new Map();
464
+ const db = getDB();
465
+ const placeholders = paths.map(() => '?').join(',');
466
+ const rows = db
467
+ .prepare(`SELECT * FROM sessions WHERE file_path IN (${placeholders})`)
468
+ .all(...paths);
469
+ const result = new Map();
470
+ for (const row of rows)
471
+ result.set(row.file_path, rowToMeta(row));
472
+ return result;
473
+ }
474
+ export function getSessionById(id) {
475
+ const db = getDB();
476
+ const row = db.prepare(`SELECT * FROM sessions WHERE id = ?`).get(id);
477
+ return row ? rowToMeta(row) : null;
478
+ }
479
+ /**
480
+ * Escape a raw user query into a safe FTS5 MATCH expression.
481
+ * Splits on non-word characters, keeps tokens >= 2 chars, and OR-joins
482
+ * them with a prefix wildcard so partial typing ('rush dep') matches.
483
+ */
484
+ export function buildFtsQuery(input) {
485
+ const terms = input.toLowerCase().split(/[^a-z0-9]+/).filter(t => t.length >= 2);
486
+ if (terms.length === 0)
487
+ return { expr: '', terms: [] };
488
+ const expr = terms.map(t => `${t}*`).join(' OR ');
489
+ return { expr, terms };
490
+ }
491
+ /**
492
+ * Label-first search. Sessions whose custom label substring-matches the query
493
+ * always rank ahead of FTS5 hits — this gives predictable behavior when a user
494
+ * types the exact name they gave a session via /rename.
495
+ *
496
+ * Tiers (highest → lowest):
497
+ * 1. Exact label match (case-insensitive): score 1_000_000
498
+ * 2. Label prefix match: score 900_000
499
+ * 3. Label contains query: score 800_000
500
+ * 4. FTS5 BM25 hits: score 1..1000 (scaled)
501
+ *
502
+ * Note: FTS5's bm25() returns negative numbers; we flip the sign for tier 4
503
+ * so "higher = better" is consistent across all tiers.
504
+ */
505
+ export function ftsSearch(input, limit = 200) {
506
+ const db = getDB();
507
+ const trimmed = input.trim();
508
+ if (!trimmed)
509
+ return [];
510
+ const { expr, terms } = buildFtsQuery(input);
511
+ const lower = trimmed.toLowerCase();
512
+ const seen = new Set();
513
+ const hits = [];
514
+ // Tier 1-3: label-based matches, ordered by exactness.
515
+ const labelRows = db.prepare(`
516
+ SELECT id, label FROM sessions
517
+ WHERE label IS NOT NULL AND LOWER(label) LIKE ?
518
+ `).all(`%${lower}%`);
519
+ let hasExactLabelMatch = false;
520
+ for (const row of labelRows) {
521
+ const labelLower = row.label.toLowerCase();
522
+ let score;
523
+ if (labelLower === lower) {
524
+ score = 1_000_000;
525
+ hasExactLabelMatch = true;
526
+ }
527
+ else if (labelLower.startsWith(lower)) {
528
+ score = 900_000;
529
+ }
530
+ else {
531
+ score = 800_000;
532
+ }
533
+ // matchedTerms is empty for label hits — the picker can render the label
534
+ // itself as the highlight, no badge needed.
535
+ hits.push({ sessionId: row.id, score, matchedTerms: [] });
536
+ seen.add(row.id);
537
+ }
538
+ // If the query exactly names a labeled session, don't dilute the result
539
+ // with FTS5 content hits — the user typed a specific thing, show just it.
540
+ if (hasExactLabelMatch) {
541
+ hits.sort((a, b) => b.score - a.score);
542
+ return hits.slice(0, limit);
543
+ }
544
+ // Tier 4: FTS5 content match, skipping anything already surfaced via label.
545
+ if (expr) {
546
+ try {
547
+ const rows = db
548
+ .prepare(`
549
+ SELECT session_id, bm25(session_text, ${BM25_WEIGHTS.join(', ')}) AS rank
550
+ FROM session_text
551
+ WHERE session_text MATCH ?
552
+ ORDER BY rank ASC
553
+ LIMIT ?
554
+ `)
555
+ .all(expr, limit);
556
+ for (const r of rows) {
557
+ if (seen.has(r.session_id))
558
+ continue;
559
+ hits.push({ sessionId: r.session_id, score: -r.rank, matchedTerms: terms });
560
+ seen.add(r.session_id);
561
+ }
562
+ }
563
+ catch {
564
+ /* invalid MATCH expression — tier 4 just yields nothing */
565
+ }
566
+ }
567
+ hits.sort((a, b) => b.score - a.score);
568
+ return hits.slice(0, limit);
569
+ }
570
+ export function getRowCount() {
571
+ const db = getDB();
572
+ const sessions = db.prepare(`SELECT COUNT(*) AS c FROM sessions`).get().c;
573
+ const textRows = db.prepare(`SELECT COUNT(*) AS c FROM session_text`).get().c;
574
+ return { sessions, textRows };
575
+ }
576
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/lib/session/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { SessionAgentId, SessionMeta } from './types.js';
2
+ export interface DiscoverOptions {
3
+ agent?: SessionAgentId;
4
+ version?: string;
5
+ project?: string;
6
+ all?: boolean;
7
+ cwd?: string;
8
+ /** Match any session whose cwd equals this or is a descendant. Overrides `cwd`. */
9
+ cwdPrefix?: string;
10
+ limit?: number;
11
+ /** Filter sessions newer than this (ISO timestamp or "7d", "30d", "90d") */
12
+ since?: string;
13
+ /** Filter sessions older than this (ISO timestamp) */
14
+ until?: string;
15
+ /** Drop team-spawned sessions at the DB level, before LIMIT. */
16
+ excludeTeamOrigin?: boolean;
17
+ /** Keep only team-spawned sessions (used for hidden-count queries). */
18
+ onlyTeamOrigin?: boolean;
19
+ /** Called as each agent makes parsing progress. Totals count only files that need re-parsing (cache misses). */
20
+ onProgress?: (progress: ScanProgress) => void;
21
+ }
22
+ export interface ScanProgress {
23
+ agent: SessionAgentId;
24
+ parsed: number;
25
+ total: number;
26
+ }
27
+ /**
28
+ * Discover sessions. Scans only files whose (mtime, size) have changed since
29
+ * the last run; everything else is served from the SQLite cache.
30
+ */
31
+ export declare function discoverSessions(options?: DiscoverOptions): Promise<SessionMeta[]>;
32
+ /**
33
+ * Count sessions in scope without running an incremental scan. Assumes the DB
34
+ * is already fresh (typically true because `discoverSessions` ran first this
35
+ * turn). Uses the exact same filter shape as the discover query.
36
+ */
37
+ export declare function countSessionsInScope(options: DiscoverOptions): number;
38
+ /**
39
+ * Resolve a session by full or short ID. Accepts a pre-loaded session list
40
+ * (fast path from discoverSessions) and falls back to a DB lookup for the
41
+ * "I only know the id" case.
42
+ */
43
+ export declare function resolveSessionById(sessions: SessionMeta[], idQuery: string): SessionMeta[];
44
+ /**
45
+ * Run an FTS5 search over the DB and intersect with the given session list,
46
+ * preserving the existing SessionMeta[] contract so sessions.ts is unchanged.
47
+ */
48
+ export declare function searchContentIndex(sessions: SessionMeta[], query: string): Map<string, SessionMeta>;
49
+ /**
50
+ * Collect all directories to scan for an agent's sessions. Deduplicates by
51
+ * realpath to avoid double-counting symlinked version homes.
52
+ */
53
+ export declare function getAgentSessionDirs(agent: string, subdir: string): string[];
54
+ export declare function readFirstLines(filePath: string, maxLines: number): Promise<string[]>;
55
+ /**
56
+ * Walk a directory recursively for files with a given extension.
57
+ */
58
+ export declare function walkForFiles(dir: string, ext: string, limit: number): string[];
59
+ export declare function parseTimeFilter(input: string): number;
60
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../src/lib/session/discover.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA4B9D,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gHAAgH;IAChH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAuCD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAsBxF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAGrE;AAwCD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAS1F;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,EAAE,MAAM,GACZ,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAiB1B;AAmCD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAkC3E;AAo6BD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBpF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA6B9E;AAkLD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAYrD"}