agent-recorder 0.0.1 → 0.0.9

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 (245) hide show
  1. package/package.json +2 -2
  2. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.test.js +1 -0
  3. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.test.js.map +1 -1
  4. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.d.ts +15 -0
  5. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.d.ts.map +1 -0
  6. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.js +233 -0
  7. package/vendor/node_modules/@agent-recorder/cli/commands/configure-wrap.js.map +1 -0
  8. package/vendor/node_modules/@agent-recorder/cli/commands/install.d.ts.map +1 -1
  9. package/vendor/node_modules/@agent-recorder/cli/commands/install.js +9 -0
  10. package/vendor/node_modules/@agent-recorder/cli/commands/install.js.map +1 -1
  11. package/vendor/node_modules/@agent-recorder/cli/index.js +11 -0
  12. package/vendor/node_modules/@agent-recorder/cli/index.js.map +1 -1
  13. package/vendor/node_modules/@agent-recorder/core/config.d.ts +4 -0
  14. package/vendor/node_modules/@agent-recorder/core/config.d.ts.map +1 -1
  15. package/vendor/node_modules/@agent-recorder/core/config.js +6 -0
  16. package/vendor/node_modules/@agent-recorder/core/config.js.map +1 -1
  17. package/vendor/node_modules/@agent-recorder/core/db/events.d.ts +3 -0
  18. package/vendor/node_modules/@agent-recorder/core/db/events.d.ts.map +1 -1
  19. package/vendor/node_modules/@agent-recorder/core/db/events.js +8 -3
  20. package/vendor/node_modules/@agent-recorder/core/db/events.js.map +1 -1
  21. package/vendor/node_modules/@agent-recorder/core/db/events.test.js +34 -0
  22. package/vendor/node_modules/@agent-recorder/core/db/events.test.js.map +1 -1
  23. package/vendor/node_modules/@agent-recorder/core/db/migrations.d.ts +2 -2
  24. package/vendor/node_modules/@agent-recorder/core/db/migrations.d.ts.map +1 -1
  25. package/vendor/node_modules/@agent-recorder/core/db/migrations.js +14 -6
  26. package/vendor/node_modules/@agent-recorder/core/db/migrations.js.map +1 -1
  27. package/vendor/node_modules/@agent-recorder/core/index.d.ts +1 -1
  28. package/vendor/node_modules/@agent-recorder/core/index.d.ts.map +1 -1
  29. package/vendor/node_modules/@agent-recorder/core/index.js +1 -1
  30. package/vendor/node_modules/@agent-recorder/core/index.js.map +1 -1
  31. package/vendor/node_modules/@agent-recorder/core/migrations/006_add_upstream_key.sql +7 -0
  32. package/vendor/node_modules/@agent-recorder/core/types/events.d.ts +2 -0
  33. package/vendor/node_modules/@agent-recorder/core/types/events.d.ts.map +1 -1
  34. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d.ts.map +1 -1
  35. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js +49 -4
  36. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js.map +1 -1
  37. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.test.js +165 -0
  38. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.test.js.map +1 -1
  39. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.d.ts +1 -0
  40. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.d.ts.map +1 -1
  41. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.js +5 -2
  42. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.js.map +1 -1
  43. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics 2.js +0 -205
  44. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.d 2.ts +0 -50
  45. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.d.ts 2.map +0 -1
  46. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.js 2.map +0 -1
  47. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.test 2.js +0 -253
  48. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.test.d 2.ts +0 -5
  49. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.test.d.ts 2.map +0 -1
  50. package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.test.js 2.map +0 -1
  51. package/vendor/node_modules/@agent-recorder/cli/commands/configure 2.js +0 -144
  52. package/vendor/node_modules/@agent-recorder/cli/commands/configure.d 2.ts +0 -17
  53. package/vendor/node_modules/@agent-recorder/cli/commands/configure.d.ts 2.map +0 -1
  54. package/vendor/node_modules/@agent-recorder/cli/commands/configure.js 2.map +0 -1
  55. package/vendor/node_modules/@agent-recorder/cli/commands/diagnose 2.js +0 -141
  56. package/vendor/node_modules/@agent-recorder/cli/commands/diagnose.d 2.ts +0 -5
  57. package/vendor/node_modules/@agent-recorder/cli/commands/diagnose.d.ts 2.map +0 -1
  58. package/vendor/node_modules/@agent-recorder/cli/commands/diagnose.js 2.map +0 -1
  59. package/vendor/node_modules/@agent-recorder/cli/commands/doctor 2.js +0 -253
  60. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.d 2.ts +0 -5
  61. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.d.ts 2.map +0 -1
  62. package/vendor/node_modules/@agent-recorder/cli/commands/doctor.js 2.map +0 -1
  63. package/vendor/node_modules/@agent-recorder/cli/commands/export 2.js +0 -56
  64. package/vendor/node_modules/@agent-recorder/cli/commands/export.d 2.ts +0 -12
  65. package/vendor/node_modules/@agent-recorder/cli/commands/export.d.ts 2.map +0 -1
  66. package/vendor/node_modules/@agent-recorder/cli/commands/export.js 2.map +0 -1
  67. package/vendor/node_modules/@agent-recorder/cli/commands/install 2.js +0 -77
  68. package/vendor/node_modules/@agent-recorder/cli/commands/install.d 2.ts +0 -13
  69. package/vendor/node_modules/@agent-recorder/cli/commands/install.d.ts 2.map +0 -1
  70. package/vendor/node_modules/@agent-recorder/cli/commands/install.js 2.map +0 -1
  71. package/vendor/node_modules/@agent-recorder/cli/commands/logs 2.js +0 -40
  72. package/vendor/node_modules/@agent-recorder/cli/commands/logs.d 2.ts +0 -8
  73. package/vendor/node_modules/@agent-recorder/cli/commands/logs.d.ts 2.map +0 -1
  74. package/vendor/node_modules/@agent-recorder/cli/commands/logs.js 2.map +0 -1
  75. package/vendor/node_modules/@agent-recorder/cli/commands/mock-mcp 2.js +0 -188
  76. package/vendor/node_modules/@agent-recorder/cli/commands/mock-mcp.d 2.ts +0 -10
  77. package/vendor/node_modules/@agent-recorder/cli/commands/mock-mcp.d.ts 2.map +0 -1
  78. package/vendor/node_modules/@agent-recorder/cli/commands/mock-mcp.js 2.map +0 -1
  79. package/vendor/node_modules/@agent-recorder/cli/commands/restart 2.js +0 -67
  80. package/vendor/node_modules/@agent-recorder/cli/commands/restart.d 2.ts +0 -9
  81. package/vendor/node_modules/@agent-recorder/cli/commands/restart.d.ts 2.map +0 -1
  82. package/vendor/node_modules/@agent-recorder/cli/commands/restart.js 2.map +0 -1
  83. package/vendor/node_modules/@agent-recorder/cli/commands/sessions 2.js +0 -333
  84. package/vendor/node_modules/@agent-recorder/cli/commands/sessions.d 2.ts +0 -52
  85. package/vendor/node_modules/@agent-recorder/cli/commands/sessions.d.ts 2.map +0 -1
  86. package/vendor/node_modules/@agent-recorder/cli/commands/sessions.js 2.map +0 -1
  87. package/vendor/node_modules/@agent-recorder/cli/commands/start 2.js +0 -174
  88. package/vendor/node_modules/@agent-recorder/cli/commands/start.d 2.ts +0 -10
  89. package/vendor/node_modules/@agent-recorder/cli/commands/start.d.ts 2.map +0 -1
  90. package/vendor/node_modules/@agent-recorder/cli/commands/start.js 2.map +0 -1
  91. package/vendor/node_modules/@agent-recorder/cli/commands/status 2.js +0 -104
  92. package/vendor/node_modules/@agent-recorder/cli/commands/status.d 2.ts +0 -5
  93. package/vendor/node_modules/@agent-recorder/cli/commands/status.d.ts 2.map +0 -1
  94. package/vendor/node_modules/@agent-recorder/cli/commands/status.js 2.map +0 -1
  95. package/vendor/node_modules/@agent-recorder/cli/commands/stop 2.js +0 -89
  96. package/vendor/node_modules/@agent-recorder/cli/commands/stop.d 2.ts +0 -8
  97. package/vendor/node_modules/@agent-recorder/cli/commands/stop.d.ts 2.map +0 -1
  98. package/vendor/node_modules/@agent-recorder/cli/commands/stop.js 2.map +0 -1
  99. package/vendor/node_modules/@agent-recorder/cli/commands/tui 2.js +0 -14
  100. package/vendor/node_modules/@agent-recorder/cli/commands/tui.d 2.ts +0 -5
  101. package/vendor/node_modules/@agent-recorder/cli/commands/tui.d.ts 2.map +0 -1
  102. package/vendor/node_modules/@agent-recorder/cli/commands/tui.js 2.map +0 -1
  103. package/vendor/node_modules/@agent-recorder/cli/config/claude-paths 2.js +0 -117
  104. package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.d 2.ts +0 -55
  105. package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.d.ts 2.map +0 -1
  106. package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.js 2.map +0 -1
  107. package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.test 2.js +0 -152
  108. package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.test.d 2.ts +0 -5
  109. package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.test.d.ts 2.map +0 -1
  110. package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.test.js 2.map +0 -1
  111. package/vendor/node_modules/@agent-recorder/cli/index 2.js +0 -194
  112. package/vendor/node_modules/@agent-recorder/cli/index.d 2.ts +0 -10
  113. package/vendor/node_modules/@agent-recorder/cli/index.d.ts 2.map +0 -1
  114. package/vendor/node_modules/@agent-recorder/cli/index.js 2.map +0 -1
  115. package/vendor/node_modules/@agent-recorder/cli/package 2.json +0 -17
  116. package/vendor/node_modules/@agent-recorder/cli/tui/App 2.js +0 -84
  117. package/vendor/node_modules/@agent-recorder/cli/tui/App.d 2.ts +0 -6
  118. package/vendor/node_modules/@agent-recorder/cli/tui/App.d.ts 2.map +0 -1
  119. package/vendor/node_modules/@agent-recorder/cli/tui/App.js 2.map +0 -1
  120. package/vendor/node_modules/@agent-recorder/cli/tui/api 2.js +0 -105
  121. package/vendor/node_modules/@agent-recorder/cli/tui/api.d 2.ts +0 -31
  122. package/vendor/node_modules/@agent-recorder/cli/tui/api.d.ts 2.map +0 -1
  123. package/vendor/node_modules/@agent-recorder/cli/tui/api.js 2.map +0 -1
  124. package/vendor/node_modules/@agent-recorder/cli/tui/components/EventInspectPanel 2.js +0 -45
  125. package/vendor/node_modules/@agent-recorder/cli/tui/components/EventInspectPanel.d 2.ts +0 -11
  126. package/vendor/node_modules/@agent-recorder/cli/tui/components/EventInspectPanel.d.ts 2.map +0 -1
  127. package/vendor/node_modules/@agent-recorder/cli/tui/components/EventInspectPanel.js 2.map +0 -1
  128. package/vendor/node_modules/@agent-recorder/cli/tui/components/Header 2.js +0 -13
  129. package/vendor/node_modules/@agent-recorder/cli/tui/components/Header.d 2.ts +0 -17
  130. package/vendor/node_modules/@agent-recorder/cli/tui/components/Header.d.ts 2.map +0 -1
  131. package/vendor/node_modules/@agent-recorder/cli/tui/components/Header.js 2.map +0 -1
  132. package/vendor/node_modules/@agent-recorder/cli/tui/components/Spinner 2.js +0 -21
  133. package/vendor/node_modules/@agent-recorder/cli/tui/components/Spinner.d 2.ts +0 -12
  134. package/vendor/node_modules/@agent-recorder/cli/tui/components/Spinner.d.ts 2.map +0 -1
  135. package/vendor/node_modules/@agent-recorder/cli/tui/components/Spinner.js 2.map +0 -1
  136. package/vendor/node_modules/@agent-recorder/cli/tui/components/StatusBadge 2.js +0 -50
  137. package/vendor/node_modules/@agent-recorder/cli/tui/components/StatusBadge.d 2.ts +0 -16
  138. package/vendor/node_modules/@agent-recorder/cli/tui/components/StatusBadge.d.ts 2.map +0 -1
  139. package/vendor/node_modules/@agent-recorder/cli/tui/components/StatusBadge.js 2.map +0 -1
  140. package/vendor/node_modules/@agent-recorder/cli/tui/components/Table 2.js +0 -20
  141. package/vendor/node_modules/@agent-recorder/cli/tui/components/Table.d 2.ts +0 -21
  142. package/vendor/node_modules/@agent-recorder/cli/tui/components/Table.d.ts 2.map +0 -1
  143. package/vendor/node_modules/@agent-recorder/cli/tui/components/Table.js 2.map +0 -1
  144. package/vendor/node_modules/@agent-recorder/cli/tui/components/index 2.js +0 -8
  145. package/vendor/node_modules/@agent-recorder/cli/tui/components/index.d 2.ts +0 -8
  146. package/vendor/node_modules/@agent-recorder/cli/tui/components/index.d.ts 2.map +0 -1
  147. package/vendor/node_modules/@agent-recorder/cli/tui/components/index.js 2.map +0 -1
  148. package/vendor/node_modules/@agent-recorder/cli/tui/hooks/useEventStream 2.js +0 -75
  149. package/vendor/node_modules/@agent-recorder/cli/tui/hooks/useEventStream.d 2.ts +0 -22
  150. package/vendor/node_modules/@agent-recorder/cli/tui/hooks/useEventStream.d.ts 2.map +0 -1
  151. package/vendor/node_modules/@agent-recorder/cli/tui/hooks/useEventStream.js 2.map +0 -1
  152. package/vendor/node_modules/@agent-recorder/cli/tui/screens/SessionDetailScreen 2.js +0 -190
  153. package/vendor/node_modules/@agent-recorder/cli/tui/screens/SessionDetailScreen.d 2.ts +0 -13
  154. package/vendor/node_modules/@agent-recorder/cli/tui/screens/SessionDetailScreen.d.ts 2.map +0 -1
  155. package/vendor/node_modules/@agent-recorder/cli/tui/screens/SessionDetailScreen.js 2.map +0 -1
  156. package/vendor/node_modules/@agent-recorder/cli/tui/screens/SessionsScreen 2.js +0 -166
  157. package/vendor/node_modules/@agent-recorder/cli/tui/screens/SessionsScreen.d 2.ts +0 -10
  158. package/vendor/node_modules/@agent-recorder/cli/tui/screens/SessionsScreen.d.ts 2.map +0 -1
  159. package/vendor/node_modules/@agent-recorder/cli/tui/screens/SessionsScreen.js 2.map +0 -1
  160. package/vendor/node_modules/@agent-recorder/cli/tui/screens/index 2.js +0 -6
  161. package/vendor/node_modules/@agent-recorder/cli/tui/screens/index.d 2.ts +0 -6
  162. package/vendor/node_modules/@agent-recorder/cli/tui/screens/index.d.ts 2.map +0 -1
  163. package/vendor/node_modules/@agent-recorder/cli/tui/screens/index.js 2.map +0 -1
  164. package/vendor/node_modules/@agent-recorder/core/config 2.js +0 -44
  165. package/vendor/node_modules/@agent-recorder/core/config.d 2.ts +0 -25
  166. package/vendor/node_modules/@agent-recorder/core/config.d.ts 2.map +0 -1
  167. package/vendor/node_modules/@agent-recorder/core/db/connection.d 2.ts +0 -15
  168. package/vendor/node_modules/@agent-recorder/core/migrations/001_initial 2.sql +0 -40
  169. package/vendor/node_modules/@agent-recorder/core/migrations/002_session_sequences 2.sql +0 -8
  170. package/vendor/node_modules/@agent-recorder/core/migrations/003_add_tool_columns 2.sql +0 -9
  171. package/vendor/node_modules/@agent-recorder/core/migrations/004_add_cancelled_status 2.sql +0 -23
  172. package/vendor/node_modules/@agent-recorder/core/migrations/005_add_error_category 2.sql +0 -6
  173. package/vendor/node_modules/@agent-recorder/core/package 2.json +0 -18
  174. package/vendor/node_modules/@agent-recorder/core/types/events.d 2.ts +0 -69
  175. package/vendor/node_modules/@agent-recorder/core/types/index 2.js +0 -2
  176. package/vendor/node_modules/@agent-recorder/core/types/index.js 2.map +0 -1
  177. package/vendor/node_modules/@agent-recorder/core/types/session 2.js +0 -6
  178. package/vendor/node_modules/@agent-recorder/core/types/session.d 2.ts +0 -22
  179. package/vendor/node_modules/@agent-recorder/core/types/session.d.ts 2.map +0 -1
  180. package/vendor/node_modules/@agent-recorder/core/types/session.js 2.map +0 -1
  181. package/vendor/node_modules/@agent-recorder/core/utils/error-category 2.js +0 -58
  182. package/vendor/node_modules/@agent-recorder/core/utils/error-category.d 2.ts +0 -22
  183. package/vendor/node_modules/@agent-recorder/core/utils/error-category.d.ts 2.map +0 -1
  184. package/vendor/node_modules/@agent-recorder/core/utils/error-category.js 2.map +0 -1
  185. package/vendor/node_modules/@agent-recorder/core/utils/error-category.test.d 2.ts +0 -5
  186. package/vendor/node_modules/@agent-recorder/core/utils/error-category.test.d.ts 2.map +0 -1
  187. package/vendor/node_modules/@agent-recorder/core/utils/error-category.test.js 2.map +0 -1
  188. package/vendor/node_modules/@agent-recorder/core/utils/index 2.js +0 -6
  189. package/vendor/node_modules/@agent-recorder/core/utils/index.d 2.ts +0 -6
  190. package/vendor/node_modules/@agent-recorder/core/utils/index.d.ts 2.map +0 -1
  191. package/vendor/node_modules/@agent-recorder/core/utils/index.js 2.map +0 -1
  192. package/vendor/node_modules/@agent-recorder/core/utils/redact.d 2.ts +0 -19
  193. package/vendor/node_modules/@agent-recorder/core/utils/redact.d.ts 2.map +0 -1
  194. package/vendor/node_modules/@agent-recorder/core/utils/redact.js 2.map +0 -1
  195. package/vendor/node_modules/@agent-recorder/service/index 2.js +0 -128
  196. package/vendor/node_modules/@agent-recorder/service/index.d 2.ts +0 -36
  197. package/vendor/node_modules/@agent-recorder/service/index.d.ts 2.map +0 -1
  198. package/vendor/node_modules/@agent-recorder/service/index.js 2.map +0 -1
  199. package/vendor/node_modules/@agent-recorder/service/mcp/index 2.js +0 -7
  200. package/vendor/node_modules/@agent-recorder/service/mcp/index.d 2.ts +0 -7
  201. package/vendor/node_modules/@agent-recorder/service/mcp/index.d.ts 2.map +0 -1
  202. package/vendor/node_modules/@agent-recorder/service/mcp/index.js 2.map +0 -1
  203. package/vendor/node_modules/@agent-recorder/service/mcp/proxy 2.js +0 -223
  204. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d 2.ts +0 -26
  205. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d.ts 2.map +0 -1
  206. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js 2.map +0 -1
  207. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.test.d 2.ts +0 -5
  208. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.test.d.ts 2.map +0 -1
  209. package/vendor/node_modules/@agent-recorder/service/mcp/proxy.test.js 2.map +0 -1
  210. package/vendor/node_modules/@agent-recorder/service/mcp/recorder 2.js +0 -62
  211. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.d 2.ts +0 -31
  212. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.d.ts 2.map +0 -1
  213. package/vendor/node_modules/@agent-recorder/service/mcp/recorder.js 2.map +0 -1
  214. package/vendor/node_modules/@agent-recorder/service/mcp/types 2.js +0 -15
  215. package/vendor/node_modules/@agent-recorder/service/mcp/types.d 2.ts +0 -40
  216. package/vendor/node_modules/@agent-recorder/service/mcp/types.d.ts 2.map +0 -1
  217. package/vendor/node_modules/@agent-recorder/service/mcp/types.js 2.map +0 -1
  218. package/vendor/node_modules/@agent-recorder/service/package 2.json +0 -15
  219. package/vendor/node_modules/@agent-recorder/service/routes/events 2.js +0 -71
  220. package/vendor/node_modules/@agent-recorder/service/routes/events.d 2.ts +0 -11
  221. package/vendor/node_modules/@agent-recorder/service/routes/events.d.ts 2.map +0 -1
  222. package/vendor/node_modules/@agent-recorder/service/routes/events.js 2.map +0 -1
  223. package/vendor/node_modules/@agent-recorder/service/routes/health 2.js +0 -18
  224. package/vendor/node_modules/@agent-recorder/service/routes/health.d 2.ts +0 -6
  225. package/vendor/node_modules/@agent-recorder/service/routes/health.d.ts 2.map +0 -1
  226. package/vendor/node_modules/@agent-recorder/service/routes/health.js 2.map +0 -1
  227. package/vendor/node_modules/@agent-recorder/service/routes/sessions 2.js +0 -80
  228. package/vendor/node_modules/@agent-recorder/service/routes/sessions.d 2.ts +0 -12
  229. package/vendor/node_modules/@agent-recorder/service/routes/sessions.d.ts 2.map +0 -1
  230. package/vendor/node_modules/@agent-recorder/service/routes/sessions.js 2.map +0 -1
  231. package/vendor/node_modules/@agent-recorder/service/server 2.js +0 -36
  232. package/vendor/node_modules/@agent-recorder/service/server.d 2.ts +0 -19
  233. package/vendor/node_modules/@agent-recorder/service/server.d.ts 2.map +0 -1
  234. package/vendor/node_modules/@agent-recorder/service/server.js 2.map +0 -1
  235. package/vendor/node_modules/@agent-recorder/service/server.test 2.js +0 -296
  236. package/vendor/node_modules/@agent-recorder/service/server.test.d 2.ts +0 -5
  237. package/vendor/node_modules/@agent-recorder/service/server.test.d.ts 2.map +0 -1
  238. package/vendor/node_modules/@agent-recorder/service/session-manager 2.js +0 -22
  239. package/vendor/node_modules/@agent-recorder/service/session-manager.d 2.ts +0 -16
  240. package/vendor/node_modules/@agent-recorder/service/session-manager.d.ts 2.map +0 -1
  241. package/vendor/node_modules/@agent-recorder/service/session-manager.js 2.map +0 -1
  242. package/vendor/node_modules/@agent-recorder/service/session-manager.test 2.js +0 -61
  243. package/vendor/node_modules/@agent-recorder/service/session-manager.test.d 2.ts +0 -5
  244. package/vendor/node_modules/@agent-recorder/service/session-manager.test.d.ts 2.map +0 -1
  245. package/vendor/node_modules/@agent-recorder/service/session-manager.test.js 2.map +0 -1
@@ -1,296 +0,0 @@
1
- /**
2
- * Integration test for the Agent Recorder service.
3
- */
4
- import { describe, it, expect, beforeAll, afterAll } from "vitest";
5
- import { openMemoryDatabase, runMigrations, } from "@agent-recorder/core";
6
- import { createServer } from "./server.js";
7
- import { join, dirname } from "node:path";
8
- import { fileURLToPath } from "node:url";
9
- import { randomUUID } from "node:crypto";
10
- const __filename = fileURLToPath(import.meta.url);
11
- const __dirname = dirname(__filename);
12
- describe("Agent Recorder Service", () => {
13
- let app;
14
- let db;
15
- beforeAll(async () => {
16
- // Create in-memory database
17
- db = openMemoryDatabase();
18
- // Run migrations - go from packages/service/src to packages/core/migrations
19
- const migrationsDir = join(__dirname, "..", "..", "core", "migrations");
20
- runMigrations(db, migrationsDir);
21
- // Create server
22
- app = await createServer({ db });
23
- await app.ready();
24
- });
25
- afterAll(async () => {
26
- await app.close();
27
- db.close();
28
- });
29
- it("GET /api/health returns ok", async () => {
30
- const response = await app.inject({
31
- method: "GET",
32
- url: "/api/health",
33
- });
34
- expect(response.statusCode).toBe(200);
35
- const health = response.json();
36
- expect(health.status).toBe("ok");
37
- expect(health).toHaveProperty("pid");
38
- expect(health).toHaveProperty("uptime");
39
- expect(health).toHaveProperty("mode");
40
- });
41
- it("POST /api/sessions creates a session", async () => {
42
- const response = await app.inject({
43
- method: "POST",
44
- url: "/api/sessions",
45
- });
46
- expect(response.statusCode).toBe(201);
47
- const session = response.json();
48
- expect(session).toHaveProperty("id");
49
- expect(session).toHaveProperty("startedAt");
50
- expect(session.status).toBe("active");
51
- });
52
- it("full session lifecycle with events", async () => {
53
- // Create session
54
- const createSessionRes = await app.inject({
55
- method: "POST",
56
- url: "/api/sessions",
57
- });
58
- expect(createSessionRes.statusCode).toBe(201);
59
- const session = createSessionRes.json();
60
- // Insert event
61
- const eventPayload = {
62
- id: randomUUID(),
63
- sessionId: session.id,
64
- parentEventId: null,
65
- sequence: 1,
66
- eventType: "agent_call",
67
- agentRole: "assistant",
68
- agentName: "claude",
69
- skillName: null,
70
- startedAt: new Date().toISOString(),
71
- status: "running",
72
- };
73
- const insertEventRes = await app.inject({
74
- method: "POST",
75
- url: "/api/events",
76
- payload: eventPayload,
77
- });
78
- expect(insertEventRes.statusCode).toBe(201);
79
- const event = insertEventRes.json();
80
- expect(event.id).toBe(eventPayload.id);
81
- expect(event.sessionId).toBe(session.id);
82
- // Get session events
83
- const getEventsRes = await app.inject({
84
- method: "GET",
85
- url: `/api/sessions/${session.id}/events`,
86
- });
87
- expect(getEventsRes.statusCode).toBe(200);
88
- const events = getEventsRes.json();
89
- expect(events).toHaveLength(1);
90
- expect(events[0].id).toBe(event.id);
91
- // End session
92
- const endSessionRes = await app.inject({
93
- method: "POST",
94
- url: `/api/sessions/${session.id}/end`,
95
- payload: { status: "completed" },
96
- });
97
- expect(endSessionRes.statusCode).toBe(200);
98
- const endedSession = endSessionRes.json();
99
- expect(endedSession.status).toBe("completed");
100
- expect(endedSession.endedAt).toBeTruthy();
101
- // Get session to verify
102
- const getSessionRes = await app.inject({
103
- method: "GET",
104
- url: `/api/sessions/${session.id}`,
105
- });
106
- expect(getSessionRes.statusCode).toBe(200);
107
- const fetchedSession = getSessionRes.json();
108
- expect(fetchedSession.status).toBe("completed");
109
- });
110
- it("enforces unique constraint on (session_id, sequence)", async () => {
111
- // Create session
112
- const createSessionRes = await app.inject({
113
- method: "POST",
114
- url: "/api/sessions",
115
- });
116
- const session = createSessionRes.json();
117
- // Insert first event with sequence 1
118
- const event1 = {
119
- id: randomUUID(),
120
- sessionId: session.id,
121
- parentEventId: null,
122
- sequence: 1,
123
- eventType: "agent_call",
124
- agentRole: "assistant",
125
- agentName: "claude",
126
- skillName: null,
127
- startedAt: new Date().toISOString(),
128
- status: "success",
129
- };
130
- const res1 = await app.inject({
131
- method: "POST",
132
- url: "/api/events",
133
- payload: event1,
134
- });
135
- expect(res1.statusCode).toBe(201);
136
- // Try to insert second event with same sequence - should fail
137
- const event2 = {
138
- id: randomUUID(),
139
- sessionId: session.id,
140
- parentEventId: null,
141
- sequence: 1, // duplicate sequence
142
- eventType: "tool_call",
143
- agentRole: "assistant",
144
- agentName: "claude",
145
- skillName: null,
146
- startedAt: new Date().toISOString(),
147
- status: "success",
148
- };
149
- const res2 = await app.inject({
150
- method: "POST",
151
- url: "/api/events",
152
- payload: event2,
153
- });
154
- expect(res2.statusCode).toBe(500); // Fails due to unique constraint
155
- });
156
- });
157
- describe("Agent Recorder Service - Current Session", () => {
158
- let db;
159
- beforeAll(() => {
160
- db = openMemoryDatabase();
161
- const migrationsDir = join(__dirname, "..", "..", "core", "migrations");
162
- runMigrations(db, migrationsDir);
163
- });
164
- afterAll(() => {
165
- db.close();
166
- });
167
- it("GET /api/sessions/current returns 404 when no currentSessionId", async () => {
168
- const app = await createServer({ db });
169
- await app.ready();
170
- const response = await app.inject({
171
- method: "GET",
172
- url: "/api/sessions/current",
173
- });
174
- expect(response.statusCode).toBe(404);
175
- expect(response.json()).toEqual({ error: "No active session" });
176
- await app.close();
177
- });
178
- it("GET /api/sessions/current returns session when currentSessionId is set", async () => {
179
- // Create a session first
180
- const appNoSession = await createServer({ db });
181
- await appNoSession.ready();
182
- const createRes = await appNoSession.inject({
183
- method: "POST",
184
- url: "/api/sessions",
185
- });
186
- const session = createRes.json();
187
- await appNoSession.close();
188
- // Now create server with currentSessionId
189
- const app = await createServer({ db, currentSessionId: session.id });
190
- await app.ready();
191
- const response = await app.inject({
192
- method: "GET",
193
- url: "/api/sessions/current",
194
- });
195
- expect(response.statusCode).toBe(200);
196
- const current = response.json();
197
- expect(current.id).toBe(session.id);
198
- expect(current.status).toBe("active");
199
- expect(current.startedAt).toBeTruthy();
200
- await app.close();
201
- });
202
- });
203
- describe("Agent Recorder Service - Paginated Events", () => {
204
- let app;
205
- let db;
206
- let sessionId;
207
- beforeAll(async () => {
208
- db = openMemoryDatabase();
209
- const migrationsDir = join(__dirname, "..", "..", "core", "migrations");
210
- runMigrations(db, migrationsDir);
211
- app = await createServer({ db });
212
- await app.ready();
213
- // Create a session
214
- const createRes = await app.inject({
215
- method: "POST",
216
- url: "/api/sessions",
217
- });
218
- sessionId = createRes.json().id;
219
- // Insert multiple events
220
- for (let i = 1; i <= 10; i++) {
221
- await app.inject({
222
- method: "POST",
223
- url: "/api/events",
224
- payload: {
225
- id: randomUUID(),
226
- sessionId,
227
- parentEventId: null,
228
- sequence: i,
229
- eventType: "tool_call",
230
- toolName: `tool_${i}`,
231
- agentRole: "assistant",
232
- agentName: "claude",
233
- skillName: null,
234
- startedAt: new Date().toISOString(),
235
- status: "success",
236
- },
237
- });
238
- }
239
- });
240
- afterAll(async () => {
241
- await app.close();
242
- db.close();
243
- });
244
- it("GET /api/sessions/:id/events returns all events without params", async () => {
245
- const response = await app.inject({
246
- method: "GET",
247
- url: `/api/sessions/${sessionId}/events`,
248
- });
249
- expect(response.statusCode).toBe(200);
250
- const events = response.json();
251
- expect(events).toHaveLength(10);
252
- });
253
- it("GET /api/sessions/:id/events?after=5 returns events after sequence 5", async () => {
254
- const response = await app.inject({
255
- method: "GET",
256
- url: `/api/sessions/${sessionId}/events?after=5`,
257
- });
258
- expect(response.statusCode).toBe(200);
259
- const events = response.json();
260
- expect(events).toHaveLength(5);
261
- expect(events[0].sequence).toBe(6);
262
- expect(events[4].sequence).toBe(10);
263
- });
264
- it("GET /api/sessions/:id/events?limit=3 returns first 3 events", async () => {
265
- const response = await app.inject({
266
- method: "GET",
267
- url: `/api/sessions/${sessionId}/events?limit=3`,
268
- });
269
- expect(response.statusCode).toBe(200);
270
- const events = response.json();
271
- expect(events).toHaveLength(3);
272
- expect(events[0].sequence).toBe(1);
273
- expect(events[2].sequence).toBe(3);
274
- });
275
- it("GET /api/sessions/:id/events?after=3&limit=2 returns 2 events after sequence 3", async () => {
276
- const response = await app.inject({
277
- method: "GET",
278
- url: `/api/sessions/${sessionId}/events?after=3&limit=2`,
279
- });
280
- expect(response.statusCode).toBe(200);
281
- const events = response.json();
282
- expect(events).toHaveLength(2);
283
- expect(events[0].sequence).toBe(4);
284
- expect(events[1].sequence).toBe(5);
285
- });
286
- it("GET /api/sessions/:id/events?after=10 returns empty array", async () => {
287
- const response = await app.inject({
288
- method: "GET",
289
- url: `/api/sessions/${sessionId}/events?after=10`,
290
- });
291
- expect(response.statusCode).toBe(200);
292
- const events = response.json();
293
- expect(events).toHaveLength(0);
294
- });
295
- });
296
- //# sourceMappingURL=server.test.js.map
@@ -1,5 +0,0 @@
1
- /**
2
- * Integration test for the Agent Recorder service.
3
- */
4
- export {};
5
- //# sourceMappingURL=server.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Session lifecycle manager for daemon.
3
- * Creates session on boot, ends on shutdown.
4
- */
5
- import { startSession, endSession, } from "@agent-recorder/core";
6
- /**
7
- * Create a session manager that starts a new session immediately.
8
- * The session is created in the database with status "active".
9
- */
10
- export function createSessionManager(db) {
11
- // Core generates the ID
12
- const session = startSession(db);
13
- console.log(`Session started: ${session.id}`);
14
- return {
15
- sessionId: session.id,
16
- shutdown(status = "cancelled") {
17
- endSession(db, session.id, new Date().toISOString(), status);
18
- console.log(`Session ended: ${session.id} (${status})`);
19
- },
20
- };
21
- }
22
- //# sourceMappingURL=session-manager.js.map
@@ -1,16 +0,0 @@
1
- /**
2
- * Session lifecycle manager for daemon.
3
- * Creates session on boot, ends on shutdown.
4
- */
5
- import type Database from "better-sqlite3";
6
- import { type SessionStatus } from "@agent-recorder/core";
7
- export interface SessionManager {
8
- readonly sessionId: string;
9
- shutdown(status?: SessionStatus): void;
10
- }
11
- /**
12
- * Create a session manager that starts a new session immediately.
13
- * The session is created in the database with status "active".
14
- */
15
- export declare function createSessionManager(db: Database.Database): SessionManager;
16
- //# sourceMappingURL=session-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CACxC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,cAAc,CAY1E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,YAAY,EACZ,UAAU,GAEX,MAAM,sBAAsB,CAAC;AAO9B;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAqB;IACxD,wBAAwB;IACxB,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9C,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,QAAQ,CAAC,SAAwB,WAAW;YAC1C,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,EAAE,KAAK,MAAM,GAAG,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,61 +0,0 @@
1
- /**
2
- * Tests for session manager.
3
- */
4
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
5
- import { openMemoryDatabase, runMigrations, getSessionById, } from "@agent-recorder/core";
6
- import { createSessionManager } from "./session-manager.js";
7
- import { join, dirname } from "node:path";
8
- import { fileURLToPath } from "node:url";
9
- const __filename = fileURLToPath(import.meta.url);
10
- const __dirname = dirname(__filename);
11
- describe("SessionManager", () => {
12
- let db;
13
- beforeEach(() => {
14
- db = openMemoryDatabase();
15
- const migrationsDir = join(__dirname, "..", "..", "core", "migrations");
16
- runMigrations(db, migrationsDir);
17
- });
18
- afterEach(() => {
19
- db.close();
20
- });
21
- it("creates active session on construction", () => {
22
- const manager = createSessionManager(db);
23
- expect(manager.sessionId).toBeDefined();
24
- expect(typeof manager.sessionId).toBe("string");
25
- expect(manager.sessionId.length).toBeGreaterThan(0);
26
- // Verify session exists in database with active status
27
- const session = getSessionById(db, manager.sessionId);
28
- expect(session).not.toBeNull();
29
- expect(session.status).toBe("active");
30
- expect(session.startedAt).toBeDefined();
31
- expect(session.endedAt).toBeNull();
32
- });
33
- it("ends session with cancelled status by default", () => {
34
- const manager = createSessionManager(db);
35
- const sessionId = manager.sessionId;
36
- manager.shutdown();
37
- const session = getSessionById(db, sessionId);
38
- expect(session).not.toBeNull();
39
- expect(session.status).toBe("cancelled");
40
- expect(session.endedAt).not.toBeNull();
41
- });
42
- it("ends session with specified status", () => {
43
- const manager = createSessionManager(db);
44
- const sessionId = manager.sessionId;
45
- manager.shutdown("completed");
46
- const session = getSessionById(db, sessionId);
47
- expect(session).not.toBeNull();
48
- expect(session.status).toBe("completed");
49
- expect(session.endedAt).not.toBeNull();
50
- });
51
- it("ends session with error status when specified", () => {
52
- const manager = createSessionManager(db);
53
- const sessionId = manager.sessionId;
54
- manager.shutdown("error");
55
- const session = getSessionById(db, sessionId);
56
- expect(session).not.toBeNull();
57
- expect(session.status).toBe("error");
58
- expect(session.endedAt).not.toBeNull();
59
- });
60
- });
61
- //# sourceMappingURL=session-manager.test.js.map
@@ -1,5 +0,0 @@
1
- /**
2
- * Tests for session manager.
3
- */
4
- export {};
5
- //# sourceMappingURL=session-manager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.test.d.ts","sourceRoot":"","sources":["../src/session-manager.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.test.js","sourceRoot":"","sources":["../src/session-manager.test.ts"],"names":[],"mappings":"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"}