lastlight 0.6.2 → 0.7.1

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 (343) hide show
  1. package/dist/admin/routes.d.ts +1 -1
  2. package/dist/admin/routes.js +1 -1
  3. package/dist/admin/routes.js.map +1 -1
  4. package/dist/cli/cli-config.js.map +1 -0
  5. package/dist/cli/cli-format.js.map +1 -0
  6. package/dist/{cli-server.d.ts → cli/cli-server.d.ts} +1 -1
  7. package/dist/{cli-server.js → cli/cli-server.js} +2 -2
  8. package/dist/cli/cli-server.js.map +1 -0
  9. package/dist/cli/cli-timeline.js.map +1 -0
  10. package/dist/{cli.js → cli/cli.js} +2 -0
  11. package/dist/cli/cli.js.map +1 -0
  12. package/dist/{fork-cli.d.ts → cli/fork-cli.d.ts} +14 -5
  13. package/dist/{fork-cli.js → cli/fork-cli.js} +86 -16
  14. package/dist/cli/fork-cli.js.map +1 -0
  15. package/dist/{setup.js → cli/setup.js} +1 -1
  16. package/dist/cli/setup.js.map +1 -0
  17. package/dist/{skills-install.js → cli/skills-install.js} +1 -1
  18. package/dist/cli/skills-install.js.map +1 -0
  19. package/dist/config/config-resolve.js.map +1 -0
  20. package/dist/{config.js → config/config.js} +2 -2
  21. package/dist/config/config.js.map +1 -0
  22. package/dist/config/overlay-assets.js.map +1 -0
  23. package/dist/config/overlay-bootstrap.js.map +1 -0
  24. package/dist/connectors/github-webhook.js +5 -0
  25. package/dist/connectors/github-webhook.js.map +1 -1
  26. package/dist/connectors/types.d.ts +2 -0
  27. package/dist/engine/agent-executor.d.ts +8 -17
  28. package/dist/engine/agent-executor.js +35 -306
  29. package/dist/engine/agent-executor.js.map +1 -1
  30. package/dist/engine/{chat-runner.d.ts → chat/chat-runner.d.ts} +2 -2
  31. package/dist/engine/{chat-runner.js → chat/chat-runner.js} +1 -1
  32. package/dist/engine/chat/chat-runner.js.map +1 -0
  33. package/dist/engine/{chat-skills.js → chat/chat-skills.js} +1 -1
  34. package/dist/engine/chat/chat-skills.js.map +1 -0
  35. package/dist/engine/{chat.d.ts → chat/chat.d.ts} +2 -2
  36. package/dist/engine/{chat.js → chat/chat.js} +7 -7
  37. package/dist/engine/chat/chat.js.map +1 -0
  38. package/dist/engine/{message-batcher.d.ts → chat/message-batcher.d.ts} +1 -1
  39. package/dist/engine/chat/message-batcher.js.map +1 -0
  40. package/dist/engine/dispatcher.d.ts +2 -2
  41. package/dist/engine/dispatcher.js +24 -0
  42. package/dist/engine/dispatcher.js.map +1 -1
  43. package/dist/engine/executors/orchestrator.d.ts +81 -0
  44. package/dist/engine/executors/orchestrator.js +340 -0
  45. package/dist/engine/executors/orchestrator.js.map +1 -0
  46. package/dist/engine/executors/shared.d.ts +1 -1
  47. package/dist/engine/github/git-auth.js.map +1 -0
  48. package/dist/engine/github/github-app-client.js.map +1 -0
  49. package/dist/engine/github/github-tools.js.map +1 -0
  50. package/dist/engine/github/github.js.map +1 -0
  51. package/dist/engine/{profiles.d.ts → github/profiles.d.ts} +1 -1
  52. package/dist/engine/{profiles.js → github/profiles.js} +1 -1
  53. package/dist/engine/github/profiles.js.map +1 -0
  54. package/dist/engine/router.js +49 -3
  55. package/dist/engine/router.js.map +1 -1
  56. package/dist/engine/{classifier.d.ts → screen/classifier.d.ts} +11 -1
  57. package/dist/engine/{classifier.js → screen/classifier.js} +45 -1
  58. package/dist/engine/screen/classifier.js.map +1 -0
  59. package/dist/engine/{screen.d.ts → screen/screen.d.ts} +1 -1
  60. package/dist/engine/{screen.js → screen/screen.js} +1 -1
  61. package/dist/engine/screen/screen.js.map +1 -0
  62. package/dist/evals-api.d.ts +3 -3
  63. package/dist/evals-api.js +1 -1
  64. package/dist/evals-api.js.map +1 -1
  65. package/dist/index.js +17 -17
  66. package/dist/index.js.map +1 -1
  67. package/dist/managed-repos.js +1 -1
  68. package/dist/managed-repos.js.map +1 -1
  69. package/dist/notify/transports/github.d.ts +1 -1
  70. package/dist/sandbox/sandbox.d.ts +189 -0
  71. package/dist/sandbox/sandbox.js +429 -0
  72. package/dist/sandbox/sandbox.js.map +1 -0
  73. package/dist/state/workflow-run-store.d.ts +7 -0
  74. package/dist/state/workflow-run-store.js +14 -0
  75. package/dist/state/workflow-run-store.js.map +1 -1
  76. package/dist/telemetry/index.d.ts +1 -1
  77. package/dist/workflows/loader.d.ts +1 -1
  78. package/dist/workflows/phase-executor.d.ts +1 -1
  79. package/dist/workflows/resume.d.ts +3 -3
  80. package/dist/workflows/runner.d.ts +2 -2
  81. package/dist/workflows/runner.js +1 -1
  82. package/dist/workflows/runner.js.map +1 -1
  83. package/dist/workflows/schema.d.ts +2 -2
  84. package/dist/workflows/simple.d.ts +26 -5
  85. package/dist/workflows/simple.js +30 -4
  86. package/dist/workflows/simple.js.map +1 -1
  87. package/dist/workflows/triggers.js +1 -1
  88. package/dist/workflows/triggers.js.map +1 -1
  89. package/docker-compose.yml +1 -1
  90. package/package.json +4 -3
  91. package/plugins/lastlight/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lastlight/skills/lastlight-overlay/SKILL.md +7 -1
  93. package/plugins/lastlight/skills/lastlight-overlay/references/forking.md +23 -4
  94. package/skills/README.md +1 -1
  95. package/skills/issue-triage/SKILL.md +34 -7
  96. package/skills/issue-triage/references/AGENT-BRIEF.md +28 -24
  97. package/dist/admin/auth.test.d.ts +0 -1
  98. package/dist/admin/auth.test.js +0 -60
  99. package/dist/admin/auth.test.js.map +0 -1
  100. package/dist/admin/log-search.test.d.ts +0 -1
  101. package/dist/admin/log-search.test.js +0 -78
  102. package/dist/admin/log-search.test.js.map +0 -1
  103. package/dist/admin/routes.test.d.ts +0 -1
  104. package/dist/admin/routes.test.js +0 -877
  105. package/dist/admin/routes.test.js.map +0 -1
  106. package/dist/admin/server-logs.test.d.ts +0 -1
  107. package/dist/admin/server-logs.test.js +0 -58
  108. package/dist/admin/server-logs.test.js.map +0 -1
  109. package/dist/admin/sessions.test.d.ts +0 -1
  110. package/dist/admin/sessions.test.js +0 -78
  111. package/dist/admin/sessions.test.js.map +0 -1
  112. package/dist/admin/version.test.d.ts +0 -1
  113. package/dist/admin/version.test.js +0 -71
  114. package/dist/admin/version.test.js.map +0 -1
  115. package/dist/cli-config.js.map +0 -1
  116. package/dist/cli-config.test.d.ts +0 -1
  117. package/dist/cli-config.test.js +0 -92
  118. package/dist/cli-config.test.js.map +0 -1
  119. package/dist/cli-format.js.map +0 -1
  120. package/dist/cli-server.js.map +0 -1
  121. package/dist/cli-server.test.d.ts +0 -1
  122. package/dist/cli-server.test.js +0 -41
  123. package/dist/cli-server.test.js.map +0 -1
  124. package/dist/cli-timeline.js.map +0 -1
  125. package/dist/cli-timeline.test.d.ts +0 -1
  126. package/dist/cli-timeline.test.js +0 -104
  127. package/dist/cli-timeline.test.js.map +0 -1
  128. package/dist/cli.js.map +0 -1
  129. package/dist/config-overlay.test.d.ts +0 -1
  130. package/dist/config-overlay.test.js +0 -112
  131. package/dist/config-overlay.test.js.map +0 -1
  132. package/dist/config-resolve.js.map +0 -1
  133. package/dist/config-resolve.test.d.ts +0 -1
  134. package/dist/config-resolve.test.js +0 -68
  135. package/dist/config-resolve.test.js.map +0 -1
  136. package/dist/config.js.map +0 -1
  137. package/dist/config.test.d.ts +0 -1
  138. package/dist/config.test.js +0 -288
  139. package/dist/config.test.js.map +0 -1
  140. package/dist/connectors/github-webhook.test.d.ts +0 -1
  141. package/dist/connectors/github-webhook.test.js +0 -156
  142. package/dist/connectors/github-webhook.test.js.map +0 -1
  143. package/dist/connectors/messaging/session-manager.test.d.ts +0 -1
  144. package/dist/connectors/messaging/session-manager.test.js +0 -144
  145. package/dist/connectors/messaging/session-manager.test.js.map +0 -1
  146. package/dist/connectors/slack/connector.test.d.ts +0 -1
  147. package/dist/connectors/slack/connector.test.js +0 -135
  148. package/dist/connectors/slack/connector.test.js.map +0 -1
  149. package/dist/connectors/slack/mrkdwn.test.d.ts +0 -1
  150. package/dist/connectors/slack/mrkdwn.test.js +0 -114
  151. package/dist/connectors/slack/mrkdwn.test.js.map +0 -1
  152. package/dist/cron/fanout.test.d.ts +0 -1
  153. package/dist/cron/fanout.test.js +0 -73
  154. package/dist/cron/fanout.test.js.map +0 -1
  155. package/dist/engine/agent-executor.seam.test.d.ts +0 -1
  156. package/dist/engine/agent-executor.seam.test.js +0 -57
  157. package/dist/engine/agent-executor.seam.test.js.map +0 -1
  158. package/dist/engine/agent-executor.test.d.ts +0 -1
  159. package/dist/engine/agent-executor.test.js +0 -395
  160. package/dist/engine/agent-executor.test.js.map +0 -1
  161. package/dist/engine/chat-runner.js.map +0 -1
  162. package/dist/engine/chat-runner.test.d.ts +0 -1
  163. package/dist/engine/chat-runner.test.js +0 -104
  164. package/dist/engine/chat-runner.test.js.map +0 -1
  165. package/dist/engine/chat-skills.js.map +0 -1
  166. package/dist/engine/chat-skills.test.d.ts +0 -1
  167. package/dist/engine/chat-skills.test.js +0 -20
  168. package/dist/engine/chat-skills.test.js.map +0 -1
  169. package/dist/engine/chat.js.map +0 -1
  170. package/dist/engine/chat.test.d.ts +0 -1
  171. package/dist/engine/chat.test.js +0 -42
  172. package/dist/engine/chat.test.js.map +0 -1
  173. package/dist/engine/classifier.js.map +0 -1
  174. package/dist/engine/classifier.test.d.ts +0 -1
  175. package/dist/engine/classifier.test.js +0 -115
  176. package/dist/engine/classifier.test.js.map +0 -1
  177. package/dist/engine/dispatcher.test.d.ts +0 -1
  178. package/dist/engine/dispatcher.test.js +0 -511
  179. package/dist/engine/dispatcher.test.js.map +0 -1
  180. package/dist/engine/event-shim.test.d.ts +0 -1
  181. package/dist/engine/event-shim.test.js +0 -194
  182. package/dist/engine/event-shim.test.js.map +0 -1
  183. package/dist/engine/executors/backends.d.ts +0 -41
  184. package/dist/engine/executors/backends.js +0 -541
  185. package/dist/engine/executors/backends.js.map +0 -1
  186. package/dist/engine/git-auth.js.map +0 -1
  187. package/dist/engine/git-auth.test.d.ts +0 -1
  188. package/dist/engine/git-auth.test.js +0 -117
  189. package/dist/engine/git-auth.test.js.map +0 -1
  190. package/dist/engine/github-app-client.js.map +0 -1
  191. package/dist/engine/github-app-client.test.d.ts +0 -1
  192. package/dist/engine/github-app-client.test.js +0 -44
  193. package/dist/engine/github-app-client.test.js.map +0 -1
  194. package/dist/engine/github-tools.js.map +0 -1
  195. package/dist/engine/github.js.map +0 -1
  196. package/dist/engine/llm.test.d.ts +0 -1
  197. package/dist/engine/llm.test.js +0 -189
  198. package/dist/engine/llm.test.js.map +0 -1
  199. package/dist/engine/message-batcher.js.map +0 -1
  200. package/dist/engine/message-batcher.test.d.ts +0 -1
  201. package/dist/engine/message-batcher.test.js +0 -109
  202. package/dist/engine/message-batcher.test.js.map +0 -1
  203. package/dist/engine/profiles.js.map +0 -1
  204. package/dist/engine/router.test.d.ts +0 -1
  205. package/dist/engine/router.test.js +0 -695
  206. package/dist/engine/router.test.js.map +0 -1
  207. package/dist/engine/screen.js.map +0 -1
  208. package/dist/engine/screen.test.d.ts +0 -1
  209. package/dist/engine/screen.test.js +0 -82
  210. package/dist/engine/screen.test.js.map +0 -1
  211. package/dist/fork-cli.js.map +0 -1
  212. package/dist/fork-cli.test.d.ts +0 -1
  213. package/dist/fork-cli.test.js +0 -109
  214. package/dist/fork-cli.test.js.map +0 -1
  215. package/dist/managed-repos.test.d.ts +0 -1
  216. package/dist/managed-repos.test.js +0 -39
  217. package/dist/managed-repos.test.js.map +0 -1
  218. package/dist/notify/model.test.d.ts +0 -1
  219. package/dist/notify/model.test.js +0 -109
  220. package/dist/notify/model.test.js.map +0 -1
  221. package/dist/notify/notifier.test.d.ts +0 -1
  222. package/dist/notify/notifier.test.js +0 -100
  223. package/dist/notify/notifier.test.js.map +0 -1
  224. package/dist/notify/render.test.d.ts +0 -1
  225. package/dist/notify/render.test.js +0 -65
  226. package/dist/notify/render.test.js.map +0 -1
  227. package/dist/notify/transports.test.d.ts +0 -1
  228. package/dist/notify/transports.test.js +0 -71
  229. package/dist/notify/transports.test.js.map +0 -1
  230. package/dist/overlay-assets.js.map +0 -1
  231. package/dist/overlay-assets.test.d.ts +0 -1
  232. package/dist/overlay-assets.test.js +0 -75
  233. package/dist/overlay-assets.test.js.map +0 -1
  234. package/dist/overlay-bootstrap.js.map +0 -1
  235. package/dist/overlay-bootstrap.test.d.ts +0 -1
  236. package/dist/overlay-bootstrap.test.js +0 -61
  237. package/dist/overlay-bootstrap.test.js.map +0 -1
  238. package/dist/sandbox/command-exec.integration.test.d.ts +0 -1
  239. package/dist/sandbox/command-exec.integration.test.js +0 -183
  240. package/dist/sandbox/command-exec.integration.test.js.map +0 -1
  241. package/dist/sandbox/docker-compose.test.d.ts +0 -1
  242. package/dist/sandbox/docker-compose.test.js +0 -128
  243. package/dist/sandbox/docker-compose.test.js.map +0 -1
  244. package/dist/sandbox/docker.test.d.ts +0 -1
  245. package/dist/sandbox/docker.test.js +0 -137
  246. package/dist/sandbox/docker.test.js.map +0 -1
  247. package/dist/sandbox/egress-allowlist.test.d.ts +0 -1
  248. package/dist/sandbox/egress-allowlist.test.js +0 -65
  249. package/dist/sandbox/egress-allowlist.test.js.map +0 -1
  250. package/dist/sandbox/egress-firewall-config.test.d.ts +0 -1
  251. package/dist/sandbox/egress-firewall-config.test.js +0 -244
  252. package/dist/sandbox/egress-firewall-config.test.js.map +0 -1
  253. package/dist/sandbox/index.test.d.ts +0 -1
  254. package/dist/sandbox/index.test.js +0 -157
  255. package/dist/sandbox/index.test.js.map +0 -1
  256. package/dist/sandbox/smol.integration.test.d.ts +0 -1
  257. package/dist/sandbox/smol.integration.test.js +0 -130
  258. package/dist/sandbox/smol.integration.test.js.map +0 -1
  259. package/dist/session-log.test.d.ts +0 -1
  260. package/dist/session-log.test.js +0 -85
  261. package/dist/session-log.test.js.map +0 -1
  262. package/dist/setup.js.map +0 -1
  263. package/dist/setup.test.d.ts +0 -1
  264. package/dist/setup.test.js +0 -281
  265. package/dist/setup.test.js.map +0 -1
  266. package/dist/skills-install.js.map +0 -1
  267. package/dist/state/build-assets.test.d.ts +0 -1
  268. package/dist/state/build-assets.test.js +0 -106
  269. package/dist/state/build-assets.test.js.map +0 -1
  270. package/dist/state/db.test.d.ts +0 -1
  271. package/dist/state/db.test.js +0 -484
  272. package/dist/state/db.test.js.map +0 -1
  273. package/dist/state/workflow-run-store.test.d.ts +0 -1
  274. package/dist/state/workflow-run-store.test.js +0 -264
  275. package/dist/state/workflow-run-store.test.js.map +0 -1
  276. package/dist/telemetry/index.test.d.ts +0 -1
  277. package/dist/telemetry/index.test.js +0 -73
  278. package/dist/telemetry/index.test.js.map +0 -1
  279. package/dist/telemetry/pi-events.test.d.ts +0 -1
  280. package/dist/telemetry/pi-events.test.js +0 -69
  281. package/dist/telemetry/pi-events.test.js.map +0 -1
  282. package/dist/workflows/dag.test.d.ts +0 -1
  283. package/dist/workflows/dag.test.js +0 -197
  284. package/dist/workflows/dag.test.js.map +0 -1
  285. package/dist/workflows/golden-build.test.d.ts +0 -1
  286. package/dist/workflows/golden-build.test.js +0 -45
  287. package/dist/workflows/golden-build.test.js.map +0 -1
  288. package/dist/workflows/loader-overlay.test.d.ts +0 -1
  289. package/dist/workflows/loader-overlay.test.js +0 -101
  290. package/dist/workflows/loader-overlay.test.js.map +0 -1
  291. package/dist/workflows/loader.test.d.ts +0 -1
  292. package/dist/workflows/loader.test.js +0 -375
  293. package/dist/workflows/loader.test.js.map +0 -1
  294. package/dist/workflows/loop-eval.test.d.ts +0 -1
  295. package/dist/workflows/loop-eval.test.js +0 -89
  296. package/dist/workflows/loop-eval.test.js.map +0 -1
  297. package/dist/workflows/phase-executor.test.d.ts +0 -1
  298. package/dist/workflows/phase-executor.test.js +0 -497
  299. package/dist/workflows/phase-executor.test.js.map +0 -1
  300. package/dist/workflows/phase-ref.test.d.ts +0 -1
  301. package/dist/workflows/phase-ref.test.js +0 -24
  302. package/dist/workflows/phase-ref.test.js.map +0 -1
  303. package/dist/workflows/runner.test.d.ts +0 -1
  304. package/dist/workflows/runner.test.js +0 -1174
  305. package/dist/workflows/runner.test.js.map +0 -1
  306. package/dist/workflows/simple.test.d.ts +0 -1
  307. package/dist/workflows/simple.test.js +0 -107
  308. package/dist/workflows/simple.test.js.map +0 -1
  309. package/dist/workflows/templates.test.d.ts +0 -1
  310. package/dist/workflows/templates.test.js +0 -258
  311. package/dist/workflows/templates.test.js.map +0 -1
  312. package/dist/workflows/verdict.test.d.ts +0 -1
  313. package/dist/workflows/verdict.test.js +0 -44
  314. package/dist/workflows/verdict.test.js.map +0 -1
  315. package/dist/worktree/manager.test.d.ts +0 -1
  316. package/dist/worktree/manager.test.js +0 -87
  317. package/dist/worktree/manager.test.js.map +0 -1
  318. /package/dist/{cli-config.d.ts → cli/cli-config.d.ts} +0 -0
  319. /package/dist/{cli-config.js → cli/cli-config.js} +0 -0
  320. /package/dist/{cli-format.d.ts → cli/cli-format.d.ts} +0 -0
  321. /package/dist/{cli-format.js → cli/cli-format.js} +0 -0
  322. /package/dist/{cli-timeline.d.ts → cli/cli-timeline.d.ts} +0 -0
  323. /package/dist/{cli-timeline.js → cli/cli-timeline.js} +0 -0
  324. /package/dist/{cli.d.ts → cli/cli.d.ts} +0 -0
  325. /package/dist/{setup.d.ts → cli/setup.d.ts} +0 -0
  326. /package/dist/{skills-install.d.ts → cli/skills-install.d.ts} +0 -0
  327. /package/dist/{config-resolve.d.ts → config/config-resolve.d.ts} +0 -0
  328. /package/dist/{config-resolve.js → config/config-resolve.js} +0 -0
  329. /package/dist/{config.d.ts → config/config.d.ts} +0 -0
  330. /package/dist/{overlay-assets.d.ts → config/overlay-assets.d.ts} +0 -0
  331. /package/dist/{overlay-assets.js → config/overlay-assets.js} +0 -0
  332. /package/dist/{overlay-bootstrap.d.ts → config/overlay-bootstrap.d.ts} +0 -0
  333. /package/dist/{overlay-bootstrap.js → config/overlay-bootstrap.js} +0 -0
  334. /package/dist/engine/{chat-skills.d.ts → chat/chat-skills.d.ts} +0 -0
  335. /package/dist/engine/{message-batcher.js → chat/message-batcher.js} +0 -0
  336. /package/dist/engine/{git-auth.d.ts → github/git-auth.d.ts} +0 -0
  337. /package/dist/engine/{git-auth.js → github/git-auth.js} +0 -0
  338. /package/dist/engine/{github-app-client.d.ts → github/github-app-client.d.ts} +0 -0
  339. /package/dist/engine/{github-app-client.js → github/github-app-client.js} +0 -0
  340. /package/dist/engine/{github-tools.d.ts → github/github-tools.d.ts} +0 -0
  341. /package/dist/engine/{github-tools.js → github/github-tools.js} +0 -0
  342. /package/dist/engine/{github.d.ts → github/github.d.ts} +0 -0
  343. /package/dist/engine/{github.js → github/github.js} +0 -0
@@ -1,288 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import { resolveModel, resolveVariant, loadConfig } from './config.js';
3
- describe('resolveModel', () => {
4
- const models = {
5
- default: 'openai/gpt-5.5',
6
- architect: 'openai/gpt-5.4',
7
- chat: 'openai/gpt-5.4-mini',
8
- };
9
- it('returns per-type override when present', () => {
10
- expect(resolveModel(models, 'architect')).toBe('openai/gpt-5.4');
11
- });
12
- it('returns per-type override for chat', () => {
13
- expect(resolveModel(models, 'chat')).toBe('openai/gpt-5.4-mini');
14
- });
15
- it('falls back to default when no override exists', () => {
16
- expect(resolveModel(models, 'unknown-type')).toBe('openai/gpt-5.5');
17
- });
18
- it('falls back to default for empty string type', () => {
19
- expect(resolveModel(models, '')).toBe('openai/gpt-5.5');
20
- });
21
- });
22
- // For loadConfig tests we must ensure GITHUB_APP_ID is unset so the
23
- // function doesn't try to require companion GitHub App env vars.
24
- describe('loadConfig — model resolution', () => {
25
- beforeEach(() => {
26
- vi.stubEnv('GITHUB_APP_ID', '');
27
- vi.stubEnv('SLACK_BOT_TOKEN', '');
28
- // The dev .env now sets LASTLIGHT_MODEL — clear it so we test the
29
- // built-in default + legacy OPENCODE_MODEL fallback path.
30
- vi.stubEnv('LASTLIGHT_MODEL', '');
31
- vi.stubEnv('LASTLIGHT_MODELS', '');
32
- });
33
- afterEach(() => vi.unstubAllEnvs());
34
- it('returns the OpenCode default model when OPENCODE_MODEL not set', () => {
35
- vi.stubEnv('OPENCODE_MODEL', '');
36
- const config = loadConfig();
37
- expect(config.model).toBe('anthropic/claude-sonnet-4-6');
38
- });
39
- it('uses OPENCODE_MODEL env var when set', () => {
40
- vi.stubEnv('OPENCODE_MODEL', 'openai/gpt-5.4');
41
- const config = loadConfig();
42
- expect(config.model).toBe('openai/gpt-5.4');
43
- });
44
- });
45
- describe('loadConfig — buildAssets location', () => {
46
- beforeEach(() => {
47
- vi.stubEnv('GITHUB_APP_ID', '');
48
- vi.stubEnv('SLACK_BOT_TOKEN', '');
49
- });
50
- afterEach(() => vi.unstubAllEnvs());
51
- it('defaults to repo mode with a state-relative store dir', () => {
52
- vi.stubEnv('LASTLIGHT_BUILD_ASSETS', '');
53
- const config = loadConfig();
54
- expect(config.buildAssets).toBe('repo');
55
- expect(config.buildAssetsDir).toMatch(/build-assets$/);
56
- });
57
- it('LASTLIGHT_BUILD_ASSETS=server overrides the file/default location', () => {
58
- vi.stubEnv('LASTLIGHT_BUILD_ASSETS', 'server');
59
- const config = loadConfig();
60
- expect(config.buildAssets).toBe('server');
61
- });
62
- it('BUILD_ASSETS_DIR overrides the store directory', () => {
63
- vi.stubEnv('BUILD_ASSETS_DIR', '/var/lib/lastlight/assets');
64
- const config = loadConfig();
65
- expect(config.buildAssetsDir).toBe('/var/lib/lastlight/assets');
66
- });
67
- });
68
- describe('resolveVariant', () => {
69
- it('returns per-type override when present', () => {
70
- const variants = { default: 'medium', architect: 'high', triage: 'minimal' };
71
- expect(resolveVariant(variants, 'architect')).toBe('high');
72
- expect(resolveVariant(variants, 'triage')).toBe('minimal');
73
- });
74
- it('falls back to default when no override exists', () => {
75
- const variants = { default: 'medium', architect: 'high' };
76
- expect(resolveVariant(variants, 'unknown')).toBe('medium');
77
- });
78
- it('returns undefined when neither override nor default is set', () => {
79
- expect(resolveVariant({}, 'anything')).toBeUndefined();
80
- });
81
- });
82
- describe('loadConfig — variant overrides via OPENCODE_VARIANTS', () => {
83
- beforeEach(() => {
84
- vi.stubEnv('GITHUB_APP_ID', '');
85
- vi.stubEnv('SLACK_BOT_TOKEN', '');
86
- });
87
- afterEach(() => vi.unstubAllEnvs());
88
- it('returns an empty variants config when nothing is set', () => {
89
- vi.stubEnv('OPENCODE_VARIANTS', '');
90
- vi.stubEnv('OPENCODE_VARIANT', '');
91
- const config = loadConfig();
92
- expect(config.variants).toEqual({});
93
- });
94
- it('parses OPENCODE_VARIANTS JSON and exposes per-type entries', () => {
95
- vi.stubEnv('OPENCODE_VARIANTS', JSON.stringify({ architect: 'high', reviewer: 'high', triage: 'minimal' }));
96
- const config = loadConfig();
97
- expect(config.variants.architect).toBe('high');
98
- expect(config.variants.reviewer).toBe('high');
99
- expect(config.variants.triage).toBe('minimal');
100
- });
101
- it('uses OPENCODE_VARIANT as the catch-all default', () => {
102
- vi.stubEnv('OPENCODE_VARIANT', 'medium');
103
- vi.stubEnv('OPENCODE_VARIANTS', '');
104
- const config = loadConfig();
105
- expect(config.variants.default).toBe('medium');
106
- expect(resolveVariant(config.variants, 'anything')).toBe('medium');
107
- });
108
- it('combines default + per-type, with per-type winning', () => {
109
- vi.stubEnv('OPENCODE_VARIANT', 'medium');
110
- vi.stubEnv('OPENCODE_VARIANTS', JSON.stringify({ architect: 'high' }));
111
- const config = loadConfig();
112
- expect(resolveVariant(config.variants, 'architect')).toBe('high');
113
- expect(resolveVariant(config.variants, 'triage')).toBe('medium');
114
- });
115
- it('gracefully handles invalid OPENCODE_VARIANTS JSON', () => {
116
- vi.stubEnv('OPENCODE_VARIANTS', 'not-json');
117
- vi.stubEnv('OPENCODE_VARIANT', '');
118
- const config = loadConfig();
119
- expect(config.variants).toEqual({});
120
- });
121
- });
122
- describe('loadConfig — model overrides via OPENCODE_MODELS', () => {
123
- beforeEach(() => {
124
- vi.stubEnv('GITHUB_APP_ID', '');
125
- vi.stubEnv('SLACK_BOT_TOKEN', '');
126
- vi.stubEnv('LASTLIGHT_MODEL', '');
127
- vi.stubEnv('LASTLIGHT_MODELS', '');
128
- });
129
- afterEach(() => vi.unstubAllEnvs());
130
- it('returns default-only model config when OPENCODE_MODELS not set', () => {
131
- vi.stubEnv('OPENCODE_MODELS', '');
132
- vi.stubEnv('OPENCODE_MODEL', '');
133
- const config = loadConfig();
134
- expect(config.models.default).toBe('anthropic/claude-sonnet-4-6');
135
- });
136
- it('parses valid OPENCODE_MODELS JSON and sets per-type overrides', () => {
137
- vi.stubEnv('OPENCODE_MODELS', JSON.stringify({ architect: 'openai/gpt-5.4', chat: 'openai/gpt-5.4-mini' }));
138
- const config = loadConfig();
139
- expect(config.models.architect).toBe('openai/gpt-5.4');
140
- expect(config.models.chat).toBe('openai/gpt-5.4-mini');
141
- });
142
- it('gracefully handles invalid OPENCODE_MODELS JSON and falls back to defaults', () => {
143
- vi.stubEnv('OPENCODE_MODELS', 'not-valid-json');
144
- vi.stubEnv('OPENCODE_MODEL', '');
145
- const config = loadConfig();
146
- expect(config.models.default).toBe('anthropic/claude-sonnet-4-6');
147
- });
148
- });
149
- describe('loadConfig — approval gates', () => {
150
- beforeEach(() => {
151
- vi.stubEnv('GITHUB_APP_ID', '');
152
- vi.stubEnv('SLACK_BOT_TOKEN', '');
153
- });
154
- afterEach(() => vi.unstubAllEnvs());
155
- it('approval gates default to empty when APPROVAL_GATES is unset', () => {
156
- vi.stubEnv('APPROVAL_GATES', '');
157
- const config = loadConfig();
158
- expect(config.approval).toEqual({});
159
- });
160
- it('parses a comma-separated list of gate names', () => {
161
- vi.stubEnv('APPROVAL_GATES', 'post_architect,post_reviewer,custom_gate');
162
- const config = loadConfig();
163
- expect(config.approval?.post_architect).toBe(true);
164
- expect(config.approval?.post_reviewer).toBe(true);
165
- expect(config.approval?.custom_gate).toBe(true);
166
- });
167
- it('ignores whitespace and empty entries', () => {
168
- vi.stubEnv('APPROVAL_GATES', ' post_architect , , post_reviewer ');
169
- const config = loadConfig();
170
- expect(Object.keys(config.approval || {}).sort()).toEqual([
171
- 'post_architect',
172
- 'post_reviewer',
173
- ]);
174
- });
175
- });
176
- describe('loadConfig — otel', () => {
177
- beforeEach(() => {
178
- vi.stubEnv('GITHUB_APP_ID', '');
179
- vi.stubEnv('SLACK_BOT_TOKEN', '');
180
- vi.stubEnv('LASTLIGHT_OTEL_ENABLED', '');
181
- vi.stubEnv('LASTLIGHT_OTEL_SERVICE_NAME', '');
182
- vi.stubEnv('LASTLIGHT_OTEL_INCLUDE_CONTENT', '');
183
- vi.stubEnv('LASTLIGHT_OTEL_FORWARD_TO_SANDBOX', '');
184
- vi.stubEnv('LASTLIGHT_OTEL_STRICT', '');
185
- vi.stubEnv('LASTLIGHT_OTEL_COLLECTOR_HOSTS', '');
186
- vi.stubEnv('OTEL_SERVICE_NAME', '');
187
- vi.stubEnv('OTEL_EXPORTER_OTLP_ENDPOINT', '');
188
- });
189
- afterEach(() => vi.unstubAllEnvs());
190
- it('defaults to disabled metadata-only telemetry', () => {
191
- const config = loadConfig();
192
- expect(config.otel).toEqual({
193
- enabled: false,
194
- serviceName: 'lastlight',
195
- includeContent: false,
196
- forwardToSandbox: true,
197
- strict: false,
198
- collectorHosts: [],
199
- });
200
- });
201
- it('applies LASTLIGHT_OTEL_* env overrides', () => {
202
- vi.stubEnv('LASTLIGHT_OTEL_ENABLED', 'true');
203
- vi.stubEnv('LASTLIGHT_OTEL_INCLUDE_CONTENT', 'true');
204
- vi.stubEnv('LASTLIGHT_OTEL_FORWARD_TO_SANDBOX', 'false');
205
- vi.stubEnv('LASTLIGHT_OTEL_STRICT', 'true');
206
- vi.stubEnv('LASTLIGHT_OTEL_SERVICE_NAME', 'custom-service');
207
- vi.stubEnv('LASTLIGHT_OTEL_COLLECTOR_HOSTS', 'otel.example.com,https://collector.example.com:4318/v1/traces');
208
- const config = loadConfig();
209
- expect(config.otel.enabled).toBe(true);
210
- expect(config.otel.includeContent).toBe(true);
211
- expect(config.otel.forwardToSandbox).toBe(false);
212
- expect(config.otel.strict).toBe(true);
213
- expect(config.otel.serviceName).toBe('custom-service');
214
- expect(config.otel.collectorHosts).toEqual(['otel.example.com', 'collector.example.com']);
215
- });
216
- it('uses OTEL_SERVICE_NAME but does not auto-enable for OTEL exporter env vars alone', () => {
217
- vi.stubEnv('OTEL_SERVICE_NAME', 'env-service');
218
- vi.stubEnv('OTEL_EXPORTER_OTLP_ENDPOINT', 'https://otel.example.com:4318/v1/traces');
219
- const config = loadConfig();
220
- expect(config.otel.enabled).toBe(false);
221
- expect(config.otel.serviceName).toBe('env-service');
222
- expect(config.otel.collectorHosts).toEqual(['otel.example.com']);
223
- });
224
- it('rejects private/internal OTEL collector hosts from env before sandbox allowlisting', () => {
225
- vi.stubEnv('LASTLIGHT_OTEL_COLLECTOR_HOSTS', 'https://otel.example.com:4318,http://0.0.0.0:4318,http://[fd00::1]:4318');
226
- vi.stubEnv('OTEL_EXPORTER_OTLP_ENDPOINT', 'http://[::1]:4318/v1/traces');
227
- const config = loadConfig();
228
- expect(config.otel.collectorHosts).toEqual(['otel.example.com']);
229
- });
230
- });
231
- describe('loadConfig — provenance and the LASTLIGHT_MODELS/LASTLIGHT_MODEL interaction', () => {
232
- beforeEach(() => {
233
- vi.stubEnv('GITHUB_APP_ID', '');
234
- vi.stubEnv('SLACK_BOT_TOKEN', '');
235
- vi.stubEnv('LASTLIGHT_MODEL', '');
236
- vi.stubEnv('LASTLIGHT_MODELS', '');
237
- vi.stubEnv('OPENCODE_MODEL', '');
238
- vi.stubEnv('OPENCODE_MODELS', '');
239
- });
240
- afterEach(() => vi.unstubAllEnvs());
241
- it('resolves models.default once: LASTLIGHT_MODELS.default wins and config.model agrees with it', () => {
242
- vi.stubEnv('LASTLIGHT_MODEL', 'openai/env-default');
243
- vi.stubEnv('LASTLIGHT_MODELS', JSON.stringify({ default: 'openai/models-default', architect: 'openai/arch' }));
244
- const config = loadConfig();
245
- // The explicit per-task map's `default` key is the single source of truth...
246
- expect(config.models.default).toBe('openai/models-default');
247
- // ...and the top-level `model` is derived from it, not re-resolved from LASTLIGHT_MODEL.
248
- expect(config.model).toBe(config.models.default);
249
- expect(config.models.architect).toBe('openai/arch');
250
- });
251
- it('uses LASTLIGHT_MODEL for models.default when LASTLIGHT_MODELS has no default key', () => {
252
- vi.stubEnv('LASTLIGHT_MODEL', 'openai/env-default');
253
- vi.stubEnv('LASTLIGHT_MODELS', JSON.stringify({ architect: 'openai/arch' }));
254
- const config = loadConfig();
255
- expect(config.models.default).toBe('openai/env-default');
256
- expect(config.model).toBe('openai/env-default');
257
- });
258
- it('exposes a sources tree where env-supplied values are tagged env and untouched defaults are tagged default', () => {
259
- vi.stubEnv('LASTLIGHT_MODEL', 'openai/env-default');
260
- const config = loadConfig();
261
- const sources = config.publicConfig.sources;
262
- expect(sources.models.default).toBe('env');
263
- // routes come entirely from the packaged default.yaml
264
- expect(sources.routes.github.issue_opened).toBe('default');
265
- });
266
- });
267
- describe('loadConfig — structure', () => {
268
- beforeEach(() => {
269
- vi.stubEnv('GITHUB_APP_ID', '');
270
- vi.stubEnv('SLACK_BOT_TOKEN', '');
271
- });
272
- afterEach(() => vi.unstubAllEnvs());
273
- it('returns a config with expected keys', () => {
274
- const config = loadConfig();
275
- expect(config).toHaveProperty('port');
276
- expect(config).toHaveProperty('model');
277
- expect(config).toHaveProperty('models');
278
- expect(config).toHaveProperty('stateDir');
279
- expect(config).toHaveProperty('dbPath');
280
- expect(config).toHaveProperty('maxTurns');
281
- });
282
- it('maxTurns defaults to 200', () => {
283
- vi.stubEnv('MAX_TURNS', '');
284
- const config = loadConfig();
285
- expect(config.maxTurns).toBe(200);
286
- });
287
- });
288
- //# sourceMappingURL=config.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,156 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
- import { createHmac } from "crypto";
3
- import { GitHubWebhookConnector } from "./github-webhook.js";
4
- import { setRuntimeConfig, resetRuntimeConfigForTests, } from "../config.js";
5
- const SECRET = "test-webhook-secret";
6
- const BOT_LOGIN = "last-light[bot]";
7
- const REPO = "acme/widgets";
8
- function sign(body) {
9
- return "sha256=" + createHmac("sha256", SECRET).update(body).digest("hex");
10
- }
11
- function connector() {
12
- return new GitHubWebhookConnector({
13
- port: 0,
14
- webhookSecret: SECRET,
15
- botLogin: BOT_LOGIN,
16
- });
17
- }
18
- /** POST a signed `pull_request` webhook and return the parsed JSON response. */
19
- async function postPullRequest(conn, opts) {
20
- const payload = {
21
- action: opts.action,
22
- repository: { full_name: REPO },
23
- sender: { login: opts.senderLogin, type: opts.senderLogin.endsWith("[bot]") ? "Bot" : "User" },
24
- pull_request: {
25
- number: 109,
26
- title: "Some change",
27
- body: "",
28
- labels: [],
29
- user: { login: opts.authorLogin },
30
- },
31
- };
32
- const body = JSON.stringify(payload);
33
- const res = await conn.honoApp.request("/webhooks/github", {
34
- method: "POST",
35
- headers: {
36
- "x-hub-signature-256": sign(body),
37
- "x-github-event": "pull_request",
38
- "x-github-delivery": "test-delivery",
39
- "content-type": "application/json",
40
- },
41
- body,
42
- });
43
- return { status: res.status, json: await res.json() };
44
- }
45
- describe("GitHubWebhookConnector — self-review guard", () => {
46
- beforeEach(() => {
47
- setRuntimeConfig({ managedRepos: [REPO] });
48
- });
49
- afterEach(() => resetRuntimeConfigForTests());
50
- it("drops a PR the bot itself authored (opened)", async () => {
51
- const { json } = await postPullRequest(connector(), {
52
- action: "opened",
53
- authorLogin: BOT_LOGIN,
54
- senderLogin: BOT_LOGIN,
55
- });
56
- expect(json.filtered).toBe(true);
57
- expect(json.reason).toBe("bot-authored PR (self-review)");
58
- });
59
- it("drops a bot-authored PR on synchronize too", async () => {
60
- const { json } = await postPullRequest(connector(), {
61
- action: "synchronize",
62
- authorLogin: BOT_LOGIN,
63
- senderLogin: BOT_LOGIN,
64
- });
65
- expect(json.filtered).toBe(true);
66
- expect(json.reason).toBe("bot-authored PR (self-review)");
67
- });
68
- it("accepts a bot fix-commit (synchronize) on a HUMAN-authored PR — the re-review case", async () => {
69
- // sender is the bot (it pushed the fix), but the PR author is a human:
70
- // this must still flow through so branch protection gets a check on the
71
- // new head SHA. The author-based guard must NOT fire here.
72
- const { status, json } = await postPullRequest(connector(), {
73
- action: "synchronize",
74
- authorLogin: "a-human",
75
- senderLogin: BOT_LOGIN,
76
- });
77
- expect(status).toBe(202);
78
- expect(json.accepted).toBe(true);
79
- });
80
- it("accepts a normal human-authored PR (opened)", async () => {
81
- const { status, json } = await postPullRequest(connector(), {
82
- action: "opened",
83
- authorLogin: "a-human",
84
- senderLogin: "a-human",
85
- });
86
- expect(status).toBe(202);
87
- expect(json.accepted).toBe(true);
88
- });
89
- });
90
- /** POST a signed check_run/check_suite event; capture any emitted envelope. */
91
- async function postCheckEvent(conn, event, opts) {
92
- let emitted = null;
93
- conn.on("event", (e) => { emitted = e; });
94
- const prs = opts.prNumber ? [{ number: opts.prNumber, head: { ref: "feature" } }] : [];
95
- const payload = {
96
- action: opts.action,
97
- repository: { full_name: REPO },
98
- sender: { login: "a-human", type: "User" },
99
- [event]: { id: 1, head_sha: "abc123", pull_requests: prs },
100
- };
101
- const body = JSON.stringify(payload);
102
- const res = await conn.honoApp.request("/webhooks/github", {
103
- method: "POST",
104
- headers: {
105
- "x-hub-signature-256": sign(body),
106
- "x-github-event": event,
107
- "x-github-delivery": "test-delivery",
108
- "content-type": "application/json",
109
- },
110
- body,
111
- });
112
- const json = await res.json();
113
- // emission is scheduled via setImmediate — let it flush
114
- await new Promise((r) => setImmediate(r));
115
- return { status: res.status, json, emitted };
116
- }
117
- describe("GitHubWebhookConnector — re-run checks", () => {
118
- beforeEach(() => {
119
- setRuntimeConfig({ managedRepos: [REPO] });
120
- });
121
- afterEach(() => resetRuntimeConfigForTests());
122
- it("maps check_run.rerequested to a pr.synchronize for the associated PR", async () => {
123
- const { status, emitted } = await postCheckEvent(connector(), "check_run", {
124
- action: "rerequested",
125
- prNumber: 42,
126
- });
127
- expect(status).toBe(202);
128
- expect(emitted).not.toBeNull();
129
- expect(emitted.type).toBe("pr.synchronize");
130
- expect(emitted.prNumber).toBe(42);
131
- });
132
- it("maps check_suite.rerequested to a pr.synchronize", async () => {
133
- const { emitted } = await postCheckEvent(connector(), "check_suite", {
134
- action: "rerequested",
135
- prNumber: 7,
136
- });
137
- expect(emitted?.type).toBe("pr.synchronize");
138
- expect(emitted?.prNumber).toBe(7);
139
- });
140
- it("ignores check_run.completed (only re-runs should trigger)", async () => {
141
- const { json, emitted } = await postCheckEvent(connector(), "check_run", {
142
- action: "completed",
143
- prNumber: 42,
144
- });
145
- expect(json.filtered).toBe(true);
146
- expect(emitted).toBeNull();
147
- });
148
- it("ignores a rerequested check_run with no associated PR", async () => {
149
- const { json, emitted } = await postCheckEvent(connector(), "check_run", {
150
- action: "rerequested",
151
- });
152
- expect(json.filtered).toBe(true);
153
- expect(emitted).toBeNull();
154
- });
155
- });
156
- //# sourceMappingURL=github-webhook.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-webhook.test.js","sourceRoot":"","sources":["../../src/connectors/github-webhook.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,144 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
2
- import Database from "better-sqlite3";
3
- import { SessionManager } from "./session-manager.js";
4
- const KEY = {
5
- platform: "slack",
6
- channelId: "C123",
7
- threadId: "thread-1",
8
- userId: "U999",
9
- };
10
- describe("SessionManager", () => {
11
- let db;
12
- let manager;
13
- beforeEach(() => {
14
- db = new Database(":memory:");
15
- manager = new SessionManager(db);
16
- });
17
- afterEach(() => {
18
- db.close();
19
- });
20
- it("returns the same active session for the same key", () => {
21
- const a = manager.getOrCreateSession(KEY);
22
- const b = manager.getOrCreateSession(KEY);
23
- expect(b.id).toBe(a.id);
24
- expect(b.active).toBe(true);
25
- });
26
- it("creates a new session after the old one is deactivated", () => {
27
- const a = manager.getOrCreateSession(KEY);
28
- manager.deactivateSession(a.id);
29
- const b = manager.getOrCreateSession(KEY);
30
- expect(b.id).not.toBe(a.id);
31
- expect(b.active).toBe(true);
32
- // The old row should still exist (audit trail), just inactive — the
33
- // partial unique index only forbids two ACTIVE rows for the same key.
34
- const rows = db.prepare(`
35
- SELECT id, active FROM messaging_sessions
36
- WHERE platform = ? AND channel_id = ? AND thread_id = ? AND user_id = ?
37
- ORDER BY created_at
38
- `).all(KEY.platform, KEY.channelId, KEY.threadId, KEY.userId);
39
- expect(rows).toHaveLength(2);
40
- expect(rows.map((r) => r.active).sort()).toEqual([0, 1]);
41
- });
42
- it("migrates a legacy schema with FK-referencing messages without dropping them", () => {
43
- // Reproduces the production crash: a DB carrying messaging_messages
44
- // rows that point at messaging_sessions via FK fails DROP TABLE
45
- // unless FK enforcement is deferred.
46
- const legacy = new Database(":memory:");
47
- legacy.pragma("foreign_keys = ON");
48
- legacy.exec(`
49
- CREATE TABLE messaging_sessions (
50
- id TEXT PRIMARY KEY,
51
- platform TEXT NOT NULL,
52
- channel_id TEXT NOT NULL,
53
- thread_id TEXT,
54
- user_id TEXT NOT NULL,
55
- agent_session_id TEXT,
56
- created_at TEXT NOT NULL,
57
- last_activity_at TEXT NOT NULL,
58
- message_count INTEGER DEFAULT 0,
59
- active INTEGER DEFAULT 1,
60
- UNIQUE(platform, channel_id, thread_id, user_id)
61
- );
62
- CREATE TABLE messaging_messages (
63
- id INTEGER PRIMARY KEY AUTOINCREMENT,
64
- session_id TEXT NOT NULL REFERENCES messaging_sessions(id),
65
- role TEXT NOT NULL,
66
- content TEXT NOT NULL,
67
- timestamp TEXT NOT NULL,
68
- platform_message_id TEXT
69
- );
70
- INSERT INTO messaging_sessions
71
- (id, platform, channel_id, thread_id, user_id, created_at, last_activity_at, active)
72
- VALUES ('sess-1', 'slack', 'C123', 't1', 'U1', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z', 1);
73
- INSERT INTO messaging_messages (session_id, role, content, timestamp)
74
- VALUES ('sess-1', 'user', 'hi', '2026-01-01T00:00:01Z'),
75
- ('sess-1', 'assistant', 'hi back', '2026-01-01T00:00:02Z');
76
- `);
77
- // Migration should succeed without losing the FK-referenced rows.
78
- new SessionManager(legacy);
79
- const survivingMessages = legacy.prepare(`SELECT COUNT(*) AS n FROM messaging_messages WHERE session_id = 'sess-1'`).get();
80
- expect(survivingMessages.n).toBe(2);
81
- const survivingSession = legacy.prepare(`SELECT id FROM messaging_sessions WHERE id = 'sess-1'`).get();
82
- expect(survivingSession).toBeDefined();
83
- // And the FK is still enforced post-migration.
84
- expect(() => legacy.prepare(`
85
- INSERT INTO messaging_messages (session_id, role, content, timestamp)
86
- VALUES (?, ?, ?, ?)
87
- `).run("does-not-exist", "user", "x", "2026-01-01T00:00:03Z"))
88
- .toThrow(/FOREIGN KEY/);
89
- legacy.close();
90
- });
91
- it("migrates a legacy table that has the old unconditional UNIQUE constraint", () => {
92
- // Spin up a DB pre-loaded with the old schema, then run the manager
93
- // (which runs migrate()) and verify a fresh insert no longer collides.
94
- const legacy = new Database(":memory:");
95
- legacy.exec(`
96
- CREATE TABLE messaging_sessions (
97
- id TEXT PRIMARY KEY,
98
- platform TEXT NOT NULL,
99
- channel_id TEXT NOT NULL,
100
- thread_id TEXT,
101
- user_id TEXT NOT NULL,
102
- agent_session_id TEXT,
103
- created_at TEXT NOT NULL,
104
- last_activity_at TEXT NOT NULL,
105
- message_count INTEGER DEFAULT 0,
106
- active INTEGER DEFAULT 1,
107
- UNIQUE(platform, channel_id, thread_id, user_id)
108
- );
109
- INSERT INTO messaging_sessions
110
- (id, platform, channel_id, thread_id, user_id, created_at, last_activity_at, active)
111
- VALUES
112
- ('old-1', 'slack', 'C123', 'thread-1', 'U999', '2026-01-01T00:00:00Z', '2026-01-01T00:00:00Z', 0);
113
- `);
114
- // Sanity check: the legacy schema *would* reject a second insert.
115
- expect(() => legacy.prepare(`
116
- INSERT INTO messaging_sessions
117
- (id, platform, channel_id, thread_id, user_id, created_at, last_activity_at)
118
- VALUES (?, ?, ?, ?, ?, ?, ?)
119
- `).run("dup", "slack", "C123", "thread-1", "U999", "2026-01-01T00:00:00Z", "2026-01-01T00:00:00Z"))
120
- .toThrow(/UNIQUE/);
121
- // Run the migration via a fresh SessionManager on the same DB.
122
- const migrated = new SessionManager(legacy);
123
- // The old row survives the migration.
124
- const oldRow = legacy.prepare(`SELECT id FROM messaging_sessions WHERE id = 'old-1'`).get();
125
- expect(oldRow).toBeDefined();
126
- // And get-or-create now succeeds — old (active=0) row no longer blocks insert.
127
- const fresh = migrated.getOrCreateSession(KEY);
128
- expect(fresh.id).not.toBe("old-1");
129
- expect(fresh.active).toBe(true);
130
- legacy.close();
131
- });
132
- it("partial unique index still prevents two active rows for the same key", () => {
133
- const a = manager.getOrCreateSession(KEY);
134
- expect(a.active).toBe(true);
135
- // Directly insert a second active row — should fail the partial index.
136
- expect(() => db.prepare(`
137
- INSERT INTO messaging_sessions
138
- (id, platform, channel_id, thread_id, user_id, created_at, last_activity_at, active)
139
- VALUES (?, ?, ?, ?, ?, ?, ?, 1)
140
- `).run("dup", KEY.platform, KEY.channelId, KEY.threadId, KEY.userId, "2026-01-01T00:00:00Z", "2026-01-01T00:00:00Z"))
141
- .toThrow(/UNIQUE/);
142
- });
143
- });
144
- //# sourceMappingURL=session-manager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.test.js","sourceRoot":"","sources":["../../../src/connectors/messaging/session-manager.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};