lastlight 0.1.15 → 0.2.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 (478) hide show
  1. package/README.md +265 -118
  2. package/agent-context/rules.md +62 -9
  3. package/agent-context/security.md +69 -0
  4. package/config/default.yaml +89 -0
  5. package/deploy/.env.production.example +20 -2
  6. package/deploy/entrypoint.sh +16 -17
  7. package/deploy/native/README.md +160 -0
  8. package/deploy/native/install.sh +110 -0
  9. package/deploy/native/lastlight.env.example +95 -0
  10. package/deploy/native/lastlight.service +50 -0
  11. package/deploy/sandbox-entrypoint.sh +59 -42
  12. package/dist/admin/auth.d.ts +1 -1
  13. package/dist/admin/auth.js +3 -1
  14. package/dist/admin/auth.js.map +1 -1
  15. package/dist/admin/chat-session-reader.d.ts +11 -14
  16. package/dist/admin/chat-session-reader.js +27 -51
  17. package/dist/admin/chat-session-reader.js.map +1 -1
  18. package/dist/admin/docker.d.ts +37 -0
  19. package/dist/admin/docker.js +86 -1
  20. package/dist/admin/docker.js.map +1 -1
  21. package/dist/admin/index.js +38 -3
  22. package/dist/admin/index.js.map +1 -1
  23. package/dist/admin/log-search.test.d.ts +1 -0
  24. package/dist/admin/log-search.test.js +78 -0
  25. package/dist/admin/log-search.test.js.map +1 -0
  26. package/dist/admin/routes.d.ts +52 -3
  27. package/dist/admin/routes.js +780 -63
  28. package/dist/admin/routes.js.map +1 -1
  29. package/dist/admin/routes.test.js +680 -14
  30. package/dist/admin/routes.test.js.map +1 -1
  31. package/dist/admin/server-logs.test.d.ts +1 -0
  32. package/dist/admin/server-logs.test.js +58 -0
  33. package/dist/admin/server-logs.test.js.map +1 -0
  34. package/dist/admin/sessions.d.ts +26 -39
  35. package/dist/admin/sessions.js +86 -310
  36. package/dist/admin/sessions.js.map +1 -1
  37. package/dist/admin/sessions.test.d.ts +1 -0
  38. package/dist/admin/sessions.test.js +78 -0
  39. package/dist/admin/sessions.test.js.map +1 -0
  40. package/dist/admin/version.d.ts +15 -0
  41. package/dist/admin/version.js +73 -0
  42. package/dist/admin/version.js.map +1 -0
  43. package/dist/admin/version.test.d.ts +1 -0
  44. package/dist/admin/version.test.js +71 -0
  45. package/dist/admin/version.test.js.map +1 -0
  46. package/dist/cli-config.d.ts +55 -0
  47. package/dist/cli-config.js +119 -0
  48. package/dist/cli-config.js.map +1 -0
  49. package/dist/cli-config.test.d.ts +1 -0
  50. package/dist/cli-config.test.js +92 -0
  51. package/dist/cli-config.test.js.map +1 -0
  52. package/dist/cli-format.d.ts +19 -0
  53. package/dist/cli-format.js +107 -0
  54. package/dist/cli-format.js.map +1 -0
  55. package/dist/cli-server.d.ts +73 -0
  56. package/dist/cli-server.js +347 -0
  57. package/dist/cli-server.js.map +1 -0
  58. package/dist/cli-server.test.d.ts +1 -0
  59. package/dist/cli-server.test.js +38 -0
  60. package/dist/cli-server.test.js.map +1 -0
  61. package/dist/cli-timeline.d.ts +35 -0
  62. package/dist/cli-timeline.js +373 -0
  63. package/dist/cli-timeline.js.map +1 -0
  64. package/dist/cli-timeline.test.d.ts +1 -0
  65. package/dist/cli-timeline.test.js +104 -0
  66. package/dist/cli-timeline.test.js.map +1 -0
  67. package/dist/cli.d.ts +0 -19
  68. package/dist/cli.js +910 -194
  69. package/dist/cli.js.map +1 -1
  70. package/dist/config-overlay.test.d.ts +1 -0
  71. package/dist/config-overlay.test.js +112 -0
  72. package/dist/config-overlay.test.js.map +1 -0
  73. package/dist/config-resolve.d.ts +28 -0
  74. package/dist/config-resolve.js +47 -0
  75. package/dist/config-resolve.js.map +1 -0
  76. package/dist/config-resolve.test.d.ts +1 -0
  77. package/dist/config-resolve.test.js +68 -0
  78. package/dist/config-resolve.test.js.map +1 -0
  79. package/dist/config.d.ts +62 -49
  80. package/dist/config.js +452 -76
  81. package/dist/config.js.map +1 -1
  82. package/dist/config.test.js +201 -32
  83. package/dist/config.test.js.map +1 -1
  84. package/dist/connectors/github-webhook.js +83 -5
  85. package/dist/connectors/github-webhook.js.map +1 -1
  86. package/dist/connectors/github-webhook.test.d.ts +1 -0
  87. package/dist/connectors/github-webhook.test.js +156 -0
  88. package/dist/connectors/github-webhook.test.js.map +1 -0
  89. package/dist/connectors/messaging/session-manager.d.ts +18 -0
  90. package/dist/connectors/messaging/session-manager.js +83 -2
  91. package/dist/connectors/messaging/session-manager.js.map +1 -1
  92. package/dist/connectors/messaging/session-manager.test.d.ts +1 -0
  93. package/dist/connectors/messaging/session-manager.test.js +144 -0
  94. package/dist/connectors/messaging/session-manager.test.js.map +1 -0
  95. package/dist/connectors/slack/connector.d.ts +9 -0
  96. package/dist/connectors/slack/connector.js +15 -0
  97. package/dist/connectors/slack/connector.js.map +1 -1
  98. package/dist/connectors/slack/mrkdwn.js +81 -0
  99. package/dist/connectors/slack/mrkdwn.js.map +1 -1
  100. package/dist/connectors/slack/mrkdwn.test.js +49 -0
  101. package/dist/connectors/slack/mrkdwn.test.js.map +1 -1
  102. package/dist/connectors/types.d.ts +1 -1
  103. package/dist/cron/fanout.d.ts +33 -0
  104. package/dist/cron/fanout.js +55 -0
  105. package/dist/cron/fanout.js.map +1 -0
  106. package/dist/cron/fanout.test.d.ts +1 -0
  107. package/dist/cron/fanout.test.js +73 -0
  108. package/dist/cron/fanout.test.js.map +1 -0
  109. package/dist/cron/jobs.d.ts +5 -0
  110. package/dist/cron/jobs.js +10 -3
  111. package/dist/cron/jobs.js.map +1 -1
  112. package/dist/cron/scheduler.d.ts +12 -0
  113. package/dist/cron/scheduler.js +27 -1
  114. package/dist/cron/scheduler.js.map +1 -1
  115. package/dist/engine/agent-executor.d.ts +158 -0
  116. package/dist/engine/agent-executor.js +1140 -0
  117. package/dist/engine/agent-executor.js.map +1 -0
  118. package/dist/engine/agent-executor.test.d.ts +1 -0
  119. package/dist/engine/agent-executor.test.js +395 -0
  120. package/dist/engine/agent-executor.test.js.map +1 -0
  121. package/dist/engine/chat-runner.d.ts +123 -0
  122. package/dist/engine/chat-runner.js +379 -0
  123. package/dist/engine/chat-runner.js.map +1 -0
  124. package/dist/engine/chat-runner.test.d.ts +1 -0
  125. package/dist/engine/chat-runner.test.js +104 -0
  126. package/dist/engine/chat-runner.test.js.map +1 -0
  127. package/dist/engine/chat-skills.d.ts +45 -0
  128. package/dist/engine/chat-skills.js +184 -0
  129. package/dist/engine/chat-skills.js.map +1 -0
  130. package/dist/engine/chat-skills.test.d.ts +1 -0
  131. package/dist/engine/chat-skills.test.js +20 -0
  132. package/dist/engine/chat-skills.test.js.map +1 -0
  133. package/dist/engine/chat.d.ts +20 -23
  134. package/dist/engine/chat.js +251 -155
  135. package/dist/engine/chat.js.map +1 -1
  136. package/dist/engine/chat.test.d.ts +1 -0
  137. package/dist/engine/chat.test.js +42 -0
  138. package/dist/engine/chat.test.js.map +1 -0
  139. package/dist/engine/classifier.d.ts +35 -2
  140. package/dist/engine/classifier.js +170 -31
  141. package/dist/engine/classifier.js.map +1 -1
  142. package/dist/engine/classifier.test.d.ts +1 -0
  143. package/dist/engine/classifier.test.js +115 -0
  144. package/dist/engine/classifier.test.js.map +1 -0
  145. package/dist/engine/dispatcher.d.ts +60 -0
  146. package/dist/engine/dispatcher.js +601 -0
  147. package/dist/engine/dispatcher.js.map +1 -0
  148. package/dist/engine/dispatcher.test.d.ts +1 -0
  149. package/dist/engine/dispatcher.test.js +511 -0
  150. package/dist/engine/dispatcher.test.js.map +1 -0
  151. package/dist/engine/event-shim.d.ts +117 -0
  152. package/dist/engine/event-shim.js +435 -0
  153. package/dist/engine/event-shim.js.map +1 -0
  154. package/dist/engine/event-shim.test.d.ts +1 -0
  155. package/dist/engine/event-shim.test.js +194 -0
  156. package/dist/engine/event-shim.test.js.map +1 -0
  157. package/dist/engine/git-auth.d.ts +13 -17
  158. package/dist/engine/git-auth.js +99 -42
  159. package/dist/engine/git-auth.js.map +1 -1
  160. package/dist/engine/git-auth.test.d.ts +1 -0
  161. package/dist/engine/git-auth.test.js +117 -0
  162. package/dist/engine/git-auth.test.js.map +1 -0
  163. package/dist/engine/github-app-client.d.ts +7 -0
  164. package/dist/engine/github-app-client.js +16 -0
  165. package/dist/engine/github-app-client.js.map +1 -0
  166. package/dist/engine/github-app-client.test.d.ts +1 -0
  167. package/dist/engine/github-app-client.test.js +44 -0
  168. package/dist/engine/github-app-client.test.js.map +1 -0
  169. package/dist/engine/github-tools.d.ts +12 -0
  170. package/dist/engine/github-tools.js +261 -0
  171. package/dist/engine/github-tools.js.map +1 -0
  172. package/dist/engine/github.d.ts +1027 -43
  173. package/dist/engine/github.js +153 -14
  174. package/dist/engine/github.js.map +1 -1
  175. package/dist/engine/llm.d.ts +47 -0
  176. package/dist/engine/llm.js +221 -0
  177. package/dist/engine/llm.js.map +1 -0
  178. package/dist/engine/llm.test.d.ts +1 -0
  179. package/dist/engine/llm.test.js +189 -0
  180. package/dist/engine/llm.test.js.map +1 -0
  181. package/dist/engine/profiles.d.ts +249 -0
  182. package/dist/engine/profiles.js +42 -0
  183. package/dist/engine/profiles.js.map +1 -0
  184. package/dist/engine/router.d.ts +12 -6
  185. package/dist/engine/router.js +339 -81
  186. package/dist/engine/router.js.map +1 -1
  187. package/dist/engine/router.test.js +428 -78
  188. package/dist/engine/router.test.js.map +1 -1
  189. package/dist/engine/screen.d.ts +41 -0
  190. package/dist/engine/screen.js +93 -0
  191. package/dist/engine/screen.js.map +1 -0
  192. package/dist/engine/screen.test.d.ts +1 -0
  193. package/dist/engine/screen.test.js +82 -0
  194. package/dist/engine/screen.test.js.map +1 -0
  195. package/dist/index.js +377 -432
  196. package/dist/index.js.map +1 -1
  197. package/dist/managed-repos.d.ts +7 -9
  198. package/dist/managed-repos.js +12 -15
  199. package/dist/managed-repos.js.map +1 -1
  200. package/dist/managed-repos.test.js +24 -19
  201. package/dist/managed-repos.test.js.map +1 -1
  202. package/dist/notify/index.d.ts +15 -0
  203. package/dist/notify/index.js +6 -0
  204. package/dist/notify/index.js.map +1 -0
  205. package/dist/notify/model.d.ts +57 -0
  206. package/dist/notify/model.js +89 -0
  207. package/dist/notify/model.js.map +1 -0
  208. package/dist/notify/model.test.d.ts +1 -0
  209. package/dist/notify/model.test.js +109 -0
  210. package/dist/notify/model.test.js.map +1 -0
  211. package/dist/notify/notifier.d.ts +17 -0
  212. package/dist/notify/notifier.js +87 -0
  213. package/dist/notify/notifier.js.map +1 -0
  214. package/dist/notify/notifier.test.d.ts +1 -0
  215. package/dist/notify/notifier.test.js +100 -0
  216. package/dist/notify/notifier.test.js.map +1 -0
  217. package/dist/notify/render.d.ts +21 -0
  218. package/dist/notify/render.js +59 -0
  219. package/dist/notify/render.js.map +1 -0
  220. package/dist/notify/render.test.d.ts +1 -0
  221. package/dist/notify/render.test.js +65 -0
  222. package/dist/notify/render.test.js.map +1 -0
  223. package/dist/notify/transports/github.d.ts +26 -0
  224. package/dist/notify/transports/github.js +26 -0
  225. package/dist/notify/transports/github.js.map +1 -0
  226. package/dist/notify/transports/slack.d.ts +26 -0
  227. package/dist/notify/transports/slack.js +28 -0
  228. package/dist/notify/transports/slack.js.map +1 -0
  229. package/dist/notify/transports.test.d.ts +1 -0
  230. package/dist/notify/transports.test.js +71 -0
  231. package/dist/notify/transports.test.js.map +1 -0
  232. package/dist/notify/types.d.ts +95 -0
  233. package/dist/notify/types.js +16 -0
  234. package/dist/notify/types.js.map +1 -0
  235. package/dist/sandbox/docker-compose.test.d.ts +1 -0
  236. package/dist/sandbox/docker-compose.test.js +128 -0
  237. package/dist/sandbox/docker-compose.test.js.map +1 -0
  238. package/dist/sandbox/docker.d.ts +97 -9
  239. package/dist/sandbox/docker.js +192 -41
  240. package/dist/sandbox/docker.js.map +1 -1
  241. package/dist/sandbox/docker.test.d.ts +1 -0
  242. package/dist/sandbox/docker.test.js +137 -0
  243. package/dist/sandbox/docker.test.js.map +1 -0
  244. package/dist/sandbox/egress-allowlist.d.ts +69 -0
  245. package/dist/sandbox/egress-allowlist.js +164 -0
  246. package/dist/sandbox/egress-allowlist.js.map +1 -0
  247. package/dist/sandbox/egress-allowlist.test.d.ts +1 -0
  248. package/dist/sandbox/egress-allowlist.test.js +65 -0
  249. package/dist/sandbox/egress-allowlist.test.js.map +1 -0
  250. package/dist/sandbox/egress-firewall-config.d.ts +127 -0
  251. package/dist/sandbox/egress-firewall-config.js +434 -0
  252. package/dist/sandbox/egress-firewall-config.js.map +1 -0
  253. package/dist/sandbox/egress-firewall-config.test.d.ts +1 -0
  254. package/dist/sandbox/egress-firewall-config.test.js +244 -0
  255. package/dist/sandbox/egress-firewall-config.test.js.map +1 -0
  256. package/dist/sandbox/images.d.ts +23 -0
  257. package/dist/sandbox/images.js +55 -0
  258. package/dist/sandbox/images.js.map +1 -0
  259. package/dist/sandbox/index.d.ts +82 -3
  260. package/dist/sandbox/index.js +223 -93
  261. package/dist/sandbox/index.js.map +1 -1
  262. package/dist/sandbox/index.test.d.ts +1 -0
  263. package/dist/sandbox/index.test.js +157 -0
  264. package/dist/sandbox/index.test.js.map +1 -0
  265. package/dist/session-log.d.ts +63 -0
  266. package/dist/session-log.js +290 -0
  267. package/dist/session-log.js.map +1 -0
  268. package/dist/session-log.test.d.ts +1 -0
  269. package/dist/session-log.test.js +85 -0
  270. package/dist/session-log.test.js.map +1 -0
  271. package/dist/setup.d.ts +30 -1
  272. package/dist/setup.js +241 -25
  273. package/dist/setup.js.map +1 -1
  274. package/dist/setup.test.js +138 -6
  275. package/dist/setup.test.js.map +1 -1
  276. package/dist/state/approval-store.d.ts +86 -0
  277. package/dist/state/approval-store.js +140 -0
  278. package/dist/state/approval-store.js.map +1 -0
  279. package/dist/state/build-assets.d.ts +50 -0
  280. package/dist/state/build-assets.js +154 -0
  281. package/dist/state/build-assets.js.map +1 -0
  282. package/dist/state/build-assets.test.d.ts +1 -0
  283. package/dist/state/build-assets.test.js +106 -0
  284. package/dist/state/build-assets.test.js.map +1 -0
  285. package/dist/state/db.d.ts +65 -333
  286. package/dist/state/db.js +112 -835
  287. package/dist/state/db.js.map +1 -1
  288. package/dist/state/db.test.js +127 -91
  289. package/dist/state/db.test.js.map +1 -1
  290. package/dist/state/execution-store.d.ts +257 -0
  291. package/dist/state/execution-store.js +527 -0
  292. package/dist/state/execution-store.js.map +1 -0
  293. package/dist/state/migrate.d.ts +15 -0
  294. package/dist/state/migrate.js +175 -0
  295. package/dist/state/migrate.js.map +1 -0
  296. package/dist/state/workflow-run-store.d.ts +195 -0
  297. package/dist/state/workflow-run-store.js +363 -0
  298. package/dist/state/workflow-run-store.js.map +1 -0
  299. package/dist/state/workflow-run-store.test.d.ts +1 -0
  300. package/dist/state/workflow-run-store.test.js +264 -0
  301. package/dist/state/workflow-run-store.test.js.map +1 -0
  302. package/dist/telemetry/index.d.ts +38 -0
  303. package/dist/telemetry/index.js +253 -0
  304. package/dist/telemetry/index.js.map +1 -0
  305. package/dist/telemetry/index.test.d.ts +1 -0
  306. package/dist/telemetry/index.test.js +73 -0
  307. package/dist/telemetry/index.test.js.map +1 -0
  308. package/dist/telemetry/pi-events.d.ts +12 -0
  309. package/dist/telemetry/pi-events.js +134 -0
  310. package/dist/telemetry/pi-events.js.map +1 -0
  311. package/dist/telemetry/pi-events.test.d.ts +1 -0
  312. package/dist/telemetry/pi-events.test.js +69 -0
  313. package/dist/telemetry/pi-events.test.js.map +1 -0
  314. package/dist/workflows/dag.d.ts +13 -1
  315. package/dist/workflows/dag.js +7 -3
  316. package/dist/workflows/dag.js.map +1 -1
  317. package/dist/workflows/dag.test.js +22 -0
  318. package/dist/workflows/dag.test.js.map +1 -1
  319. package/dist/workflows/golden-build.test.d.ts +1 -0
  320. package/dist/workflows/golden-build.test.js +45 -0
  321. package/dist/workflows/golden-build.test.js.map +1 -0
  322. package/dist/workflows/loader-overlay.test.d.ts +1 -0
  323. package/dist/workflows/loader-overlay.test.js +101 -0
  324. package/dist/workflows/loader-overlay.test.js.map +1 -0
  325. package/dist/workflows/loader.d.ts +36 -11
  326. package/dist/workflows/loader.js +311 -87
  327. package/dist/workflows/loader.js.map +1 -1
  328. package/dist/workflows/loader.test.js +114 -10
  329. package/dist/workflows/loader.test.js.map +1 -1
  330. package/dist/workflows/loop-eval.js +2 -0
  331. package/dist/workflows/loop-eval.js.map +1 -1
  332. package/dist/workflows/loop-eval.test.js +14 -0
  333. package/dist/workflows/loop-eval.test.js.map +1 -1
  334. package/dist/workflows/phase-executor.d.ts +145 -0
  335. package/dist/workflows/phase-executor.js +691 -0
  336. package/dist/workflows/phase-executor.js.map +1 -0
  337. package/dist/workflows/phase-executor.test.d.ts +1 -0
  338. package/dist/workflows/phase-executor.test.js +434 -0
  339. package/dist/workflows/phase-executor.test.js.map +1 -0
  340. package/dist/workflows/phase-ref.d.ts +44 -0
  341. package/dist/workflows/phase-ref.js +78 -0
  342. package/dist/workflows/phase-ref.js.map +1 -0
  343. package/dist/workflows/phase-ref.test.d.ts +1 -0
  344. package/dist/workflows/phase-ref.test.js +24 -0
  345. package/dist/workflows/phase-ref.test.js.map +1 -0
  346. package/dist/workflows/resume.d.ts +5 -11
  347. package/dist/workflows/resume.js +88 -7
  348. package/dist/workflows/resume.js.map +1 -1
  349. package/dist/workflows/runner.d.ts +34 -27
  350. package/dist/workflows/runner.js +252 -930
  351. package/dist/workflows/runner.js.map +1 -1
  352. package/dist/workflows/runner.test.js +346 -35
  353. package/dist/workflows/runner.test.js.map +1 -1
  354. package/dist/workflows/schema.d.ts +52 -10
  355. package/dist/workflows/schema.js +147 -7
  356. package/dist/workflows/schema.js.map +1 -1
  357. package/dist/workflows/simple.d.ts +67 -3
  358. package/dist/workflows/simple.js +248 -87
  359. package/dist/workflows/simple.js.map +1 -1
  360. package/dist/workflows/simple.test.d.ts +1 -0
  361. package/dist/workflows/simple.test.js +107 -0
  362. package/dist/workflows/simple.test.js.map +1 -0
  363. package/dist/workflows/templates.d.ts +29 -0
  364. package/dist/workflows/templates.js +42 -4
  365. package/dist/workflows/templates.js.map +1 -1
  366. package/dist/workflows/templates.test.js +103 -0
  367. package/dist/workflows/templates.test.js.map +1 -1
  368. package/dist/workflows/triggers.d.ts +21 -0
  369. package/dist/workflows/triggers.js +44 -0
  370. package/dist/workflows/triggers.js.map +1 -0
  371. package/dist/workflows/verdict.d.ts +19 -0
  372. package/dist/workflows/verdict.js +30 -0
  373. package/dist/workflows/verdict.js.map +1 -0
  374. package/dist/workflows/verdict.test.d.ts +1 -0
  375. package/dist/workflows/verdict.test.js +44 -0
  376. package/dist/workflows/verdict.test.js.map +1 -0
  377. package/dist/worktree/manager.d.ts +1 -1
  378. package/dist/worktree/manager.js +14 -14
  379. package/dist/worktree/manager.js.map +1 -1
  380. package/dist/worktree/manager.test.d.ts +1 -0
  381. package/dist/worktree/manager.test.js +87 -0
  382. package/dist/worktree/manager.test.js.map +1 -0
  383. package/docker-compose.yml +206 -5
  384. package/package.json +19 -9
  385. package/sandbox.Dockerfile +97 -18
  386. package/skills/README.md +40 -0
  387. package/skills/browser-qa/SKILL.md +193 -0
  388. package/skills/browser-qa/scripts/agent-browser.mjs +380 -0
  389. package/skills/building/SKILL.md +95 -0
  390. package/skills/chat/SKILL.md +30 -11
  391. package/skills/code-review/SKILL.md +59 -0
  392. package/skills/debug-production/SKILL.md +108 -0
  393. package/skills/demo/SKILL.md +194 -0
  394. package/skills/demo/scripts/compose-demo.sh +205 -0
  395. package/skills/issue-answer/SKILL.md +90 -0
  396. package/skills/issue-comment/SKILL.md +38 -24
  397. package/skills/issue-triage/SKILL.md +103 -37
  398. package/skills/issue-triage/references/AGENT-BRIEF.md +61 -0
  399. package/skills/pr-comment/SKILL.md +64 -0
  400. package/skills/pr-review/SKILL.md +65 -49
  401. package/skills/qa-test/SKILL.md +97 -0
  402. package/skills/repo-health/SKILL.md +48 -45
  403. package/skills/security-feedback/SKILL.md +173 -0
  404. package/skills/security-feedback/references/templates.md +77 -0
  405. package/skills/security-review/SKILL.md +213 -0
  406. package/skills/security-review/references/issue-format.md +302 -0
  407. package/skills/verify/SKILL.md +118 -0
  408. package/workflows/answer.yaml +37 -0
  409. package/workflows/build.yaml +32 -22
  410. package/workflows/cron-security.yaml +6 -0
  411. package/workflows/demo.yaml +55 -0
  412. package/workflows/explore.yaml +9 -0
  413. package/workflows/pr-comment.yaml +16 -0
  414. package/workflows/pr-fix.yaml +3 -0
  415. package/workflows/pr-review.yaml +4 -1
  416. package/workflows/prompts/answer.md +67 -0
  417. package/workflows/prompts/architect.md +24 -7
  418. package/workflows/prompts/demo.md +100 -0
  419. package/workflows/prompts/executor.md +29 -20
  420. package/workflows/prompts/explore-ask.md +51 -22
  421. package/workflows/prompts/explore-publish.md +2 -2
  422. package/workflows/prompts/explore-read.md +24 -10
  423. package/workflows/prompts/explore-synthesize.md +15 -8
  424. package/workflows/prompts/fix.md +9 -10
  425. package/workflows/prompts/guardrails.md +26 -8
  426. package/workflows/prompts/pr-fix.md +6 -7
  427. package/workflows/prompts/pr.md +11 -10
  428. package/workflows/prompts/qa-browser.md +95 -0
  429. package/workflows/prompts/qa-synth.md +44 -0
  430. package/workflows/prompts/qa-test.md +60 -0
  431. package/workflows/prompts/re-reviewer.md +8 -9
  432. package/workflows/prompts/reviewer.md +10 -9
  433. package/workflows/prompts/verify-browser.md +93 -0
  434. package/workflows/prompts/verify-synth.md +44 -0
  435. package/workflows/prompts/verify.md +63 -0
  436. package/workflows/qa-test.yaml +87 -0
  437. package/workflows/security-feedback.yaml +25 -0
  438. package/workflows/security-review.yaml +29 -0
  439. package/workflows/verify.yaml +85 -0
  440. package/deploy/mcp-config.tmpl.json +0 -14
  441. package/dist/cron/rate-limits.d.ts +0 -26
  442. package/dist/cron/rate-limits.js +0 -193
  443. package/dist/cron/rate-limits.js.map +0 -1
  444. package/dist/engine/executor.d.ts +0 -75
  445. package/dist/engine/executor.js +0 -292
  446. package/dist/engine/executor.js.map +0 -1
  447. package/mcp-github-app/package.json +0 -18
  448. package/mcp-github-app/src/auth.js +0 -66
  449. package/mcp-github-app/src/github.js +0 -371
  450. package/mcp-github-app/src/index.js +0 -534
  451. package/skills/devops/webhook-subscriptions/SKILL.md +0 -180
  452. package/skills/github/DESCRIPTION.md +0 -3
  453. package/skills/github/codebase-inspection/SKILL.md +0 -115
  454. package/skills/github/github-auth/SKILL.md +0 -54
  455. package/skills/github/github-auth/scripts/gh-env.sh +0 -66
  456. package/skills/github/github-code-review/SKILL.md +0 -480
  457. package/skills/github/github-code-review/references/review-output-template.md +0 -74
  458. package/skills/github/github-issues/SKILL.md +0 -369
  459. package/skills/github/github-issues/templates/bug-report.md +0 -35
  460. package/skills/github/github-issues/templates/feature-request.md +0 -31
  461. package/skills/github/github-pr-workflow/SKILL.md +0 -395
  462. package/skills/github/github-pr-workflow/references/ci-troubleshooting.md +0 -183
  463. package/skills/github/github-pr-workflow/references/conventional-commits.md +0 -71
  464. package/skills/github/github-pr-workflow/templates/pr-body-bugfix.md +0 -35
  465. package/skills/github/github-pr-workflow/templates/pr-body-feature.md +0 -33
  466. package/skills/github/github-repo-management/SKILL.md +0 -515
  467. package/skills/github/github-repo-management/references/github-api-cheatsheet.md +0 -161
  468. package/skills/github-orchestrator/SKILL.md +0 -103
  469. package/skills/mcp/DESCRIPTION.md +0 -3
  470. package/skills/mcp/mcporter/SKILL.md +0 -122
  471. package/skills/mcp/native-mcp/SKILL.md +0 -356
  472. package/skills/software-development/architect/SKILL.md +0 -154
  473. package/skills/software-development/assure-guardrails/SKILL.md +0 -239
  474. package/skills/software-development/plan/SKILL.md +0 -64
  475. package/skills/software-development/requesting-code-review/SKILL.md +0 -291
  476. package/skills/software-development/subagent-driven-development/SKILL.md +0 -433
  477. package/skills/software-development/systematic-debugging/SKILL.md +0 -366
  478. package/skills/software-development/test-driven-development/SKILL.md +0 -342
@@ -1,348 +1,80 @@
1
1
  import Database from "better-sqlite3";
2
- export interface PhaseHistoryEntry {
3
- phase: string;
4
- timestamp: string;
5
- success: boolean;
6
- summary?: string;
7
- }
8
- export interface WorkflowApproval {
9
- id: string;
10
- workflowRunId: string;
11
- gate: string;
12
- summary: string;
13
- status: 'pending' | 'approved' | 'rejected';
14
- /**
15
- * Gate flavor. `approve` gates resolve only on an explicit approve/reject
16
- * command; `reply` gates resolve on any free-form reply in the same
17
- * thread (used by the socratic explore loop).
18
- */
19
- kind: 'approve' | 'reply';
20
- requestedBy?: string;
21
- respondedBy?: string;
22
- response?: string;
23
- respondedAt?: string;
24
- createdAt: string;
25
- }
26
- export interface WorkflowRun {
27
- id: string;
28
- workflowName: string;
29
- triggerId: string;
30
- repo?: string;
31
- issueNumber?: number;
32
- currentPhase: string;
33
- phaseHistory: PhaseHistoryEntry[];
34
- status: "running" | "paused" | "succeeded" | "failed" | "cancelled";
35
- context?: Record<string, unknown>;
36
- /**
37
- * Mutable phase-to-phase state, merged at the top level by
38
- * `updateWorkflowRunScratch`. Distinct from `context` (which is the
39
- * immutable trigger input) — used by features like the socratic explore
40
- * loop to accumulate Q&A across reply-gate pauses.
41
- */
42
- scratch?: Record<string, unknown>;
43
- nodeStatuses?: Record<string, "pending" | "running" | "succeeded" | "failed" | "skipped">;
44
- startedAt: string;
2
+ import { ExecutionStore } from "./execution-store.js";
3
+ import { ApprovalStore } from "./approval-store.js";
4
+ import { WorkflowRunStore } from "./workflow-run-store.js";
5
+ export type { ExecutionRecord } from "./execution-store.js";
6
+ export type { WorkflowApproval } from "./approval-store.js";
7
+ export type { WorkflowRun, PhaseHistoryEntry, PhaseMarker } from "./workflow-run-store.js";
8
+ export { ExecutionStore } from "./execution-store.js";
9
+ export { ApprovalStore } from "./approval-store.js";
10
+ export { WorkflowRunStore } from "./workflow-run-store.js";
11
+ export interface CronOverride {
12
+ name: string;
13
+ enabled: boolean;
14
+ /** Cron expression overriding the YAML default; null means use the YAML value. */
15
+ schedule: string | null;
45
16
  updatedAt: string;
46
- finishedAt?: string;
17
+ updatedBy: string | null;
47
18
  }
48
- export interface ExecutionRecord {
49
- id: string;
50
- triggerType: "webhook" | "cron" | "chat" | "api";
51
- triggerId: string;
52
- skill: string;
53
- repo?: string;
54
- issueNumber?: number;
55
- startedAt: string;
56
- finishedAt?: string;
57
- success?: boolean;
58
- error?: string;
59
- turns?: number;
60
- durationMs?: number;
61
- /**
62
- * Agent SDK session id captured from the stream-json `system/init` line.
63
- * Used by the dashboard to look up the session log for a given phase.
64
- */
65
- sessionId?: string;
66
- /** Total USD cost reported by Claude on the final result message. */
67
- costUsd?: number;
68
- /** Fresh input tokens (no cache hit). */
69
- inputTokens?: number;
70
- /** Tokens that triggered a cache write. */
71
- cacheCreationInputTokens?: number;
72
- /** Tokens served from prompt cache. */
73
- cacheReadInputTokens?: number;
74
- /** Output tokens generated by the model. */
75
- outputTokens?: number;
76
- /** API-side duration (excludes orchestrator overhead). */
77
- apiDurationMs?: number;
78
- /** Result subtype, e.g. "success" or "error_max_turns". */
79
- stopReason?: string;
80
- /**
81
- * Workflow run that owns this execution. Scopes dedup: a fresh re-trigger
82
- * creates a new workflow_run_id, so `shouldRunPhase` won't find matching
83
- * rows from the prior run and will correctly run the phase again.
84
- */
85
- workflowRunId?: string;
19
+ /**
20
+ * Per-workflow kill switch persisted to SQLite. When `enabled` is false,
21
+ * `runSimpleWorkflow` short-circuits and does not create a `workflow_runs`
22
+ * row — applies to every trigger source (cron, webhooks, mentions, Slack).
23
+ * No row at all means "enabled" (default).
24
+ */
25
+ export interface WorkflowOverride {
26
+ name: string;
27
+ enabled: boolean;
28
+ updatedAt: string;
29
+ updatedBy: string | null;
86
30
  }
87
31
  /**
88
32
  * Lightweight SQLite state for operational tracking.
89
33
  * NOT for conversation history — only execution logs and rate limits.
34
+ *
35
+ * Construction root for the three per-table stores (issue #97): it opens the
36
+ * single `Database` connection, runs {@link migrate}, and builds
37
+ * {@link ExecutionStore} / {@link ApprovalStore} / {@link WorkflowRunStore} on
38
+ * top of it (all sharing the one connection so better-sqlite3 transactions
39
+ * span every store). Callers reach the stores via `db.runs` / `db.approvals` /
40
+ * `db.executions`. StateDb itself retains only the cross-cutting cron-override
41
+ * and workflow kill-switch concerns.
90
42
  */
91
43
  export declare class StateDb {
92
44
  private db;
45
+ /** Owns the `executions` ledger. */
46
+ readonly executions: ExecutionStore;
47
+ /** Owns the `workflow_approvals` table. */
48
+ readonly approvals: ApprovalStore;
49
+ /** Aggregate root for `workflow_runs` + the atomic lifecycle operations. */
50
+ readonly runs: WorkflowRunStore;
93
51
  constructor(dbPath?: string);
94
- private migrate;
95
- recordStart(record: Omit<ExecutionRecord, "finishedAt" | "success" | "error" | "turns" | "durationMs">): void;
96
- /**
97
- * Mid-run update: persist the agent session id as soon as the executor sees
98
- * the stream-json `system/init` line. Lets the dashboard surface the live
99
- * session log for an in-flight phase, not just for completed ones.
100
- */
101
- recordSessionId(id: string, sessionId: string): void;
102
- recordFinish(id: string, result: {
103
- success: boolean;
104
- error?: string;
105
- turns?: number;
106
- durationMs?: number;
107
- sessionId?: string;
108
- costUsd?: number;
109
- inputTokens?: number;
110
- cacheCreationInputTokens?: number;
111
- cacheReadInputTokens?: number;
112
- outputTokens?: number;
113
- apiDurationMs?: number;
114
- stopReason?: string;
115
- }): void;
116
- /**
117
- * List chat threads aggregated from the executions table.
118
- *
119
- * Each row collapses every execution sharing a `trigger_id` (the messaging
120
- * session id) into one summary so the dashboard's chat-sessions tab can
121
- * show one card per Slack thread, not one per turn. Joined with
122
- * `messaging_sessions` for the agent SDK session id (used to resolve to
123
- * the on-disk jsonl when streaming messages) and with `messaging_messages`
124
- * for the most recent assistant text (preview snippet).
125
- */
126
- listChatThreads(limit: number): {
127
- triggerId: string;
128
- agentSessionId: string | null;
129
- firstStartedAt: string;
130
- lastActivityAt: string;
131
- turnCount: number;
132
- totalCost: number;
133
- inputTokens: number;
134
- outputTokens: number;
135
- cacheReadTokens: number;
136
- lastAssistantContent: string | null;
137
- }[];
138
- /** Look up a single chat thread by its messaging session id (= trigger_id). */
139
- getChatThread(triggerId: string): {
140
- triggerId: string;
141
- agentSessionId: string | null;
142
- firstStartedAt: string;
143
- lastActivityAt: string;
144
- turnCount: number;
145
- totalCost: number;
146
- inputTokens: number;
147
- outputTokens: number;
148
- cacheReadTokens: number;
149
- lastAssistantContent: string | null;
150
- } | null;
151
- /** Check if a skill is currently running for a given trigger */
152
- isRunning(skill: string, triggerId: string): boolean;
153
- /** Check if a skill has already completed successfully for a given trigger */
154
- isCompleted(skill: string, triggerId: string): boolean;
155
- /**
156
- * Check if a phase should run: not currently running AND not already
157
- * succeeded. When `workflowRunId` is provided, scopes the check to that
158
- * specific run — a fresh re-trigger (new workflow_run_id) will see no
159
- * matching rows and correctly return "run" even if a prior completed run
160
- * for the same trigger exists. Omit `workflowRunId` for legacy callers
161
- * (e.g. chat/status-report dedup) that want the old trigger-wide scope.
162
- */
163
- shouldRunPhase(skill: string, triggerId: string, workflowRunId?: string): "run" | "running" | "done";
164
- /** Mark all stale "running" executions for a skill/trigger as failed.
165
- * Called when we detect no matching Docker container is alive. */
166
- markStaleAsFailed(skill: string, triggerId: string, workflowRunId?: string): number;
167
- /**
168
- * Mark every unfinished execution row for a trigger as failed, regardless
169
- * of skill. Used by the boot-time recovery sweep to clear out phases that
170
- * were running when the harness crashed/restarted, so the runner's dedup
171
- * logic doesn't think they're still in flight.
172
- */
173
- markAllStaleForTrigger(triggerId: string, reason: string): number;
174
- /**
175
- * Mark the most recent execution for a skill/trigger as failed.
176
- * Used when the agent SDK reported success but the orchestrator decided
177
- * the business outcome was a failure (e.g. guardrails BLOCKED, reviewer
178
- * REQUEST_CHANGES). Without this, runPhase would skip the phase on the
179
- * next run because the DB still says success=1.
180
- */
181
- markLatestAsFailed(skill: string, triggerId: string, reason: string, workflowRunId?: string): number;
182
- /** Get recent executions for a skill */
183
- recentExecutions(skill: string, limit?: number): ExecutionRecord[];
184
- /** Count consecutive failures for a skill (for cron failure tracking) */
185
- consecutiveFailures(skill: string): number;
186
- /** Update rate limit state */
187
- updateRateLimit(resource: string, remaining: number, resetAt: string): void;
188
- /** Get all rate limit records */
189
- getRateLimits(): Array<{
190
- resource: string;
191
- remaining: number;
192
- reset_at: string;
193
- updated_at: string;
194
- }>;
195
- /**
196
- * Get the current state of a system component.
197
- * Returns null if the component has never reported.
198
- */
199
- getSystemStatus(component: string): {
200
- state: string;
201
- reason: string | null;
202
- since: string;
203
- updated_at: string;
204
- } | null;
205
- /**
206
- * Set the state of a system component. If the new state differs from the
207
- * current state, updates `since` to now (transition timestamp). Returns
208
- * true on transition (state changed), false on refresh (state unchanged).
209
- */
210
- setSystemStatus(component: string, state: string, reason?: string): boolean;
211
- /** List all known component statuses. */
212
- listSystemStatus(): Array<{
213
- component: string;
214
- state: string;
215
- reason: string | null;
216
- since: string;
217
- updated_at: string;
218
- }>;
219
- /** Get all executions with pagination */
220
- allExecutions(limit?: number, offset?: number): ExecutionRecord[];
221
- /**
222
- * Get every execution recorded for a workflow run, with camelCase fields
223
- * ready for the dashboard. Ordered by start time ascending so phases
224
- * display in the order they ran. Scopes to a specific `workflow_run_id`
225
- * when provided (preferred — isolates fresh re-triggers from prior runs);
226
- * falls back to the legacy trigger-wide scope for rows written before the
227
- * workflow_run_id column existed.
228
- */
229
- getExecutionsForWorkflowRun(workflowRunId: string, triggerId: string, workflowName?: string): ExecutionRecord[];
230
- /** Get currently running executions (no finished_at) */
231
- runningExecutions(): ExecutionRecord[];
232
- /** Aggregate execution stats */
233
- executionStats(): {
234
- total_executions: number;
235
- today_count: number;
236
- by_skill: Record<string, {
237
- count: number;
238
- success: number;
239
- fail: number;
240
- }>;
241
- by_trigger: Record<string, number>;
242
- running: number;
243
- };
244
- /** Daily aggregated stats for the last N days */
245
- dailyStats(days: number): {
246
- date: string;
247
- executions: number;
248
- successes: number;
249
- failures: number;
250
- totalTokens: number;
251
- inputTokens: number;
252
- outputTokens: number;
253
- cacheReadTokens: number;
254
- costUsd: number;
255
- }[];
256
- /** Hourly aggregated stats for the last N hours (UTC). Bucket key is `YYYY-MM-DDTHH`. */
257
- hourlyStats(hours: number): {
258
- date: string;
259
- executions: number;
260
- successes: number;
261
- failures: number;
262
- totalTokens: number;
263
- inputTokens: number;
264
- outputTokens: number;
265
- cacheReadTokens: number;
266
- costUsd: number;
267
- }[];
268
- /** Create a new workflow run record */
269
- createWorkflowRun(run: Omit<WorkflowRun, "phaseHistory" | "updatedAt">): void;
270
- /**
271
- * Top-level merge of `patch` into the workflow run's scratch state.
272
- * Loop iterations can append to `scratch.socratic.qa` without clobbering
273
- * other keys.
274
- */
275
- updateWorkflowRunScratch(id: string, patch: Record<string, unknown>): void;
276
- /** Update the current phase and append to phase history */
277
- updateWorkflowPhase(id: string, phase: string, entry: PhaseHistoryEntry): void;
278
- /** Mark a workflow run as finished */
279
- finishWorkflowRun(id: string, status: "succeeded" | "failed" | "cancelled", error?: string): void;
280
- /** Get a single workflow run by ID */
281
- getWorkflowRun(id: string): WorkflowRun | null;
282
- /** Find the most recent active (running or paused) workflow run for a trigger */
283
- getWorkflowRunByTrigger(triggerId: string): WorkflowRun | null;
284
- /** List all active (running or paused) workflow runs */
285
- activeWorkflowRuns(): WorkflowRun[];
286
- /** List recent workflow runs, ordered by start time descending */
287
- recentWorkflowRuns(limit?: number): WorkflowRun[];
288
- /**
289
- * List workflow runs with pagination + filters. Returns the page slice
290
- * AND the post-filter total so the dashboard knows how many remain.
291
- *
292
- * - sinceIso filters `started_at >= sinceIso` (used for the header date range).
293
- * - workflowName filters by exact `workflow_name`.
294
- * - statuses filters to one of the workflow statuses (`running`, `paused`,
295
- * `succeeded`, `failed`, `cancelled`). Used for the dashboard's "live"
296
- * filter, which maps to ['running','paused'].
297
- */
298
- listWorkflowRuns(opts?: {
299
- limit?: number;
300
- offset?: number;
301
- sinceIso?: string;
302
- workflowName?: string;
303
- statuses?: string[];
304
- }): {
305
- runs: WorkflowRun[];
306
- total: number;
307
- };
308
- /** Distinct workflow_name values, sorted alphabetically. */
309
- distinctWorkflowNames(): string[];
310
- /** Cancel a workflow run */
311
- cancelWorkflowRun(id: string): void;
312
- /** Pause a workflow run (waiting for approval) */
313
- pauseWorkflowRun(id: string): void;
314
- /** Resume a paused workflow run (set back to running) */
315
- resumeWorkflowRun(id: string): void;
316
- /** Create a new pending approval request */
317
- createApproval(approval: Omit<WorkflowApproval, "status" | "respondedBy" | "response" | "respondedAt" | "kind"> & {
318
- kind?: WorkflowApproval["kind"];
52
+ /** Get the override row for a single cron, or null if none. */
53
+ getCronOverride(name: string): CronOverride | null;
54
+ /** All override rows keyed by cron name. */
55
+ getAllCronOverrides(): Map<string, CronOverride>;
56
+ /**
57
+ * Upsert an override. Pass only the fields you want to change — undefined
58
+ * fields preserve the existing value (or default to enabled=1, schedule=null
59
+ * on insert).
60
+ */
61
+ setCronOverride(name: string, patch: {
62
+ enabled?: boolean;
63
+ schedule?: string | null;
64
+ updatedBy?: string;
319
65
  }): void;
320
- /**
321
- * Resolve a reply gate: marks the approval row as approved (reply gates
322
- * don't have approve/reject semantics — any reply is a "go") and stores
323
- * the reply text as the `response`. Used by the socratic explore loop.
324
- */
325
- resolveReplyGate(id: string, replyText: string, responder: string): void;
326
- /**
327
- * Find the most recent pending reply gate for a given trigger id. Used by
328
- * the router to short-circuit free-form replies on a paused socratic
329
- * explore loop without re-running classifier logic.
330
- */
331
- getPendingReplyGateByTrigger(triggerId: string): WorkflowApproval | null;
332
- /** Get a single approval by ID */
333
- getApproval(id: string): WorkflowApproval | null;
334
- /** Find the pending approval for a workflow run */
335
- getPendingApprovalForWorkflow(workflowRunId: string): WorkflowApproval | null;
336
- /** Find the pending approval by trigger ID (join with workflow_runs) */
337
- getPendingApprovalByTrigger(triggerId: string): WorkflowApproval | null;
338
- /** List all pending approvals */
339
- listPendingApprovals(): WorkflowApproval[];
340
- /** Record the response to an approval */
341
- respondToApproval(id: string, status: 'approved' | 'rejected', respondedBy: string, response?: string): void;
342
- /** Update a single node's status in the workflow run's nodeStatuses map. */
343
- updateNodeStatus(workflowId: string, nodeName: string, status: "pending" | "running" | "succeeded" | "failed" | "skipped"): void;
344
- private deserializeApproval;
345
- private deserializeWorkflowRun;
66
+ /** Remove the override entirely (revert to YAML defaults). */
67
+ clearCronOverride(name: string): void;
68
+ private deserializeCronOverride;
69
+ /**
70
+ * Cheap check used by every dispatch path. Returns true unless an explicit
71
+ * `workflow_overrides` row says otherwise.
72
+ */
73
+ isWorkflowEnabled(name: string): boolean;
74
+ getWorkflowOverride(name: string): WorkflowOverride | null;
75
+ getAllWorkflowOverrides(): Map<string, WorkflowOverride>;
76
+ setWorkflowEnabled(name: string, enabled: boolean, updatedBy?: string): void;
77
+ private deserializeWorkflowOverride;
346
78
  /** Expose the underlying Database instance (for SessionManager, etc.) */
347
79
  get database(): Database.Database;
348
80
  close(): void;