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
@@ -0,0 +1,16 @@
1
+ kind: comment
2
+ name: pr-comment
3
+ description: |
4
+ Answer a maintainer's question about an open PR with concrete, code-cited
5
+ evidence. The PR-side counterpart to `issue-comment` — distinguished
6
+ because PR questions need the diff and a higher file-read cap.
7
+
8
+ Triggered by:
9
+ - issue_comment.created webhook on a PR (when classifier returns a
10
+ non-build intent and prNumber is set)
11
+
12
+ phases:
13
+ - name: respond
14
+ label: Respond
15
+ skill: pr-comment
16
+ model: "{{models.comment}}"
@@ -2,11 +2,14 @@ kind: pr-fix
2
2
  name: pr-fix
3
3
  description: "Lightweight PR fix — no architect/reviewer, just fix and push"
4
4
  trigger: pr-fix
5
+ # Single in-place task-list comment/message instead of a comment per phase.
6
+ status_checklist: true
5
7
 
6
8
  phases:
7
9
  - name: fix
8
10
  label: Fix
9
11
  prompt: prompts/pr-fix.md
12
+ skill: building
10
13
  model: "{{models.pr-fix}}"
11
14
  messages:
12
15
  on_start: "On it — fixing PR #{{prNumber}}..."
@@ -13,5 +13,8 @@ description: |
13
13
  phases:
14
14
  - name: review
15
15
  label: Review
16
- skill: pr-review
16
+ # pr-review: the PR procedure (primary). building: install + test gate.
17
+ # code-review: the finding-tier + what-to-check rubric.
18
+ skills: [pr-review, building, code-review]
17
19
  model: "{{models.review}}"
20
+ variant: "{{variants.review}}"
@@ -0,0 +1,67 @@
1
+ You are answering a **question** — the user wants information, an explanation,
2
+ or a comparison, not a code change. Read the `issue-answer` skill for the full
3
+ procedure and rules, then follow it. This prompt gives you the specific question
4
+ and how your answer is delivered.
5
+
6
+ ## The question
7
+
8
+ {{#if issueTitle}}**Issue title:** {{issueTitle}}{{/if}}
9
+ {{#if issueBody}}
10
+ **Issue body:**
11
+ {{issueBody}}
12
+ {{/if}}
13
+ {{#if commentBody}}
14
+ **Question:**
15
+ {{commentBody}}
16
+ {{/if}}
17
+
18
+ Target repo: **{{owner}}/{{repo}}**
19
+ {{#if issueNumber}}Originating GitHub issue: **#{{issueNumber}}**{{/if}}
20
+
21
+ ## Workspace
22
+
23
+ The repo is (or will be) in a `{{repo}}/` subdirectory under your cwd:
24
+
25
+ ```
26
+ ls -la
27
+ ```
28
+
29
+ If you see `{{repo}}/.git/`, the harness pre-cloned it — `cd {{repo}}`.
30
+ Otherwise `git clone https://github.com/{{owner}}/{{repo}}.git {{repo}}` and
31
+ `cd` in. Read what the question needs (`CONTEXT.md`, `README`, `docs/`,
32
+ `spec/`, code) — don't survey the whole tree. Use the `web_search` /
33
+ `web_fetch` tools for anything outside this repo (other tools, frameworks,
34
+ "X vs Y" comparisons); cite what you use.
35
+
36
+ ## How your answer is delivered — read carefully
37
+
38
+ Your **final message is the answer**, and the harness posts it for you:
39
+ {{#if issueNumber}}
40
+ - as a comment on issue #{{issueNumber}}.
41
+ {{/if}}
42
+ {{#if !issueNumber}}
43
+ - back into the Slack thread this question came from.
44
+ {{/if}}
45
+
46
+ So make your final message the complete, self-contained answer in clean
47
+ markdown — no "here's what I'll do" preamble, no meta-commentary.
48
+
49
+ **Converge — don't get cut off.** Your tool budget is bounded. The moment you
50
+ think "I have enough" or "let me just confirm one more thing", stop researching
51
+ and write the answer in that same turn — do **not** fire another tool call
52
+ first. A reply truncated mid-research is worse than one that omits a minor
53
+ detail; flag anything unverified as unverified rather than chasing it with your
54
+ last turn.
55
+
56
+ **Do NOT post the answer yourself** (no `github_add_issue_comment`) — that would
57
+ double-post. The only GitHub write you make is the label:
58
+
59
+ {{#if issueNumber}}
60
+ - Apply the `question` label to issue #{{issueNumber}} with `github_add_labels`
61
+ (create it first with `github_create_label`, color `d876e3`; ignore a 422).
62
+ Leave the issue open.
63
+ {{/if}}
64
+ {{#if !issueNumber}}
65
+ - This is a Slack-initiated question — there is no issue to label. Just produce
66
+ the answer.
67
+ {{/if}}
@@ -1,9 +1,11 @@
1
1
  You are the ARCHITECT. Analyze the codebase and produce an implementation plan.
2
2
 
3
- SETUP (git is pre-configured, you are in a sandbox workspace):
4
- 1. git clone --branch {{branch}} https://github.com/{{owner}}/{{repo}}.git && cd {{repo}}
5
- 2. Read CLAUDE.md and AGENTS.md if they exist
6
- 3. Read {{issueDir}}/guardrails-report.md for pre-flight results
3
+ You are already inside the {{repo}} repo at branch {{branch}} — the harness
4
+ pre-cloned it and your cwd is the repo root. Git is configured.
5
+
6
+ Before planning:
7
+ 1. Read CLAUDE.md (and CONTRIBUTING.md if present) for project-specific guidance.
8
+ 2. Read {{issueDir}}/guardrails-report.md for the test/lint/typecheck commands.
7
9
 
8
10
  CONTEXT:
9
11
  {{contextSnapshot}}
@@ -11,9 +13,24 @@ CONTEXT:
11
13
  OUTPUT — write the plan to {{issueDir}}/architect-plan.md:
12
14
  - Problem Statement (2-5 sentences with file:line references)
13
15
  - Summary of what needs to change
14
- - Files to modify (with line numbers and what to change)
16
+ - Files to modify an EXHAUSTIVE manifest the executor implements verbatim:
17
+ - List EVERY file to change, with the exact path, line/symbol anchor, and what
18
+ to change. The executor should not need to go hunting for files.
19
+ - Enumerate ALL members of any multi-file group. If a change touches one
20
+ member of a set, glob/`ls` the set and list them ALL — e.g. every i18n
21
+ locale under the locales dir, every adapter/provider variant, every test
22
+ file for the touched module. Name the exact keys/identifiers to add (e.g.
23
+ the precise i18n keys). Missing a sibling here forces the executor to
24
+ rediscover it mid-implementation.
25
+ - Commands — copy the exact test / lint / typecheck commands from
26
+ guardrails-report.md into the plan so the executor uses them directly.
15
27
  - Implementation approach (step-by-step)
16
28
  - Risks and edge cases
29
+ - For every input the design does NOT fully support, specify **warn-and-skip**
30
+ or **warn-and-surface** behaviour explicitly. A silent default, a silently
31
+ skipped case, or a dropped output is a correctness bug — never plan for one.
32
+ If an input can't be handled, the plan must say how the user is told (a
33
+ warning, a surfaced error), not let it disappear.
17
34
  - Test strategy
18
35
  - Estimated complexity: simple / medium / complex
19
36
 
@@ -21,7 +38,7 @@ AFTER WRITING:
21
38
  1. mkdir -p {{issueDir}}
22
39
  2. Write architect-plan.md
23
40
  3. Write status.md with current_phase: architect
24
- 4. git add .lastlight/ && git commit -m "docs: architect plan for #{{issueNumber}}"
25
- 5. git push -u origin HEAD
41
+ {{#if !externalizeArtifacts}}4. git add .lastlight/ && git commit -m "docs: architect plan for #{{issueNumber}}"
42
+ 5. git push -u origin HEAD{{/if}}{{#if externalizeArtifacts}}4. Do NOT git add or commit {{issueDir}}/ — the harness persists it to the Last Light server automatically.{{/if}}
26
43
 
27
44
  OUTPUT: The branch name and a brief summary (3-5 lines).
@@ -0,0 +1,100 @@
1
+ You are recording a short **demo video** of a PR or feature — driving the
2
+ repo's web UI in a **real headless browser**, screen-recording the session, and
3
+ compositing a titled mp4. Read the `demo` skill for the director procedure and
4
+ the `compose-demo.sh` wrapper, the `browser-qa` skill for the driver contract,
5
+ and the `building` skill for install/run — then follow them.
6
+
7
+ **Stay in the browser.** Your deliverable is a *moving* demonstration of
8
+ behaviour, not a code walkthrough. Don't quote or analyse source files — show
9
+ what the running app does.
10
+
11
+ ## What to demo
12
+
13
+ {{#if commentBody}}
14
+ **Request / notes:**
15
+ {{commentBody}}
16
+ {{/if}}
17
+ {{#if issueTitle}}**Issue/PR title:** {{issueTitle}}{{/if}}
18
+ {{#if issueBody}}
19
+ **Issue/PR body:**
20
+ {{issueBody}}
21
+ {{/if}}
22
+
23
+ Target repo: **{{owner}}/{{repo}}** at branch {{branch}}
24
+ {{#if issueNumber}}Target issue/PR: **#{{issueNumber}}**{{/if}}
25
+
26
+ Read the PR (description, diff, linked issue) from the context above. Decide the
27
+ single thing the video must prove — the moment that only happens if the change
28
+ works as claimed — and whether the story is a `single` walkthrough (default) or a
29
+ `side-by-side` before/after comparison (only for a genuine regression/refactor).
30
+
31
+ ## First: confirm the browser + ffmpeg are available
32
+
33
+ Run the driver's probe before anything else (the `browser-qa` skill is staged
34
+ into this phase's bundle — find its absolute path from the available-skills
35
+ catalogue):
36
+
37
+ ```
38
+ node <browser-qa skill dir>/scripts/agent-browser.mjs doctor
39
+ ```
40
+
41
+ If `doctor` exits non-zero, the toolchain isn't present: say so plainly and
42
+ stop — **do not fake a recording.** This phase only runs on the docker QA image,
43
+ so `doctor` should pass.
44
+
45
+ ## Workspace + run the app
46
+
47
+ You are already inside the **{{repo}}** repo at branch {{branch}} — the harness
48
+ pre-cloned it and your cwd is the repo root (no `cd`). Follow the `building`
49
+ skill to install dependencies and start the dev-server in the background; poll
50
+ with `curl` until it answers on `localhost:<port>`. For a before/after demo,
51
+ run each branch in turn and record the same scripted interaction against each.
52
+
53
+ ## Capture and compose
54
+
55
+ Author a `flow.json` (shape in the `browser-qa` skill) that scripts the
56
+ interaction like a director — record the baseline first, hold after state
57
+ changes, verify between steps. Record with `--record-dir`:
58
+
59
+ ```
60
+ node <browser-qa skill dir>/scripts/agent-browser.mjs run flow.json \
61
+ --base-url http://localhost:<port> --record-dir /tmp/demo-cap
62
+ ```
63
+
64
+ Then composite the raw webm into the final mp4 with the `demo` skill's wrapper,
65
+ writing it into **`{{issueDir}}/demo.mp4`** (the harness harvests that dir):
66
+
67
+ ```
68
+ <demo skill dir>/scripts/compose-demo.sh \
69
+ --output {{issueDir}}/demo.mp4 --title "<PR # — what it does>" \
70
+ --subtitle "<one line>" --layout single --speed 1.5 --target-size-mb 5 \
71
+ /tmp/demo-cap/session.webm
72
+ ```
73
+
74
+ Self-check the result with `ffprobe` (the wrapper prints a summary): resolution
75
+ sane, duration watchable (~15–90s), and **size ≤ 5 MB** so GitHub embeds it. If
76
+ it's over, re-run with a lower `--target-size-mb` or a higher `--speed`.
77
+
78
+ ## How your report is delivered — read carefully
79
+
80
+ Your **final message is the report**, and the harness posts it for you{{#if issueNumber}} as a
81
+ comment on **#{{issueNumber}}**{{/if}}{{#if !issueNumber}} back into the thread this request came from{{/if}}.
82
+ Use the `demo` skill's report shape — a one-line environment summary, a sentence
83
+ on what the video shows and the moment to watch, the video, and a one-line
84
+ "not covered". **Keep it tight.**
85
+
86
+ **Embed the video inline so it plays in the comment.**
87
+ {{#if artifactBaseUrl}}Your `{{issueDir}}/demo.mp4` is served publicly at
88
+ `{{artifactBaseUrl}}/demo.mp4`. Include a raw HTML video tag on its own line —
89
+ `<video src="{{artifactBaseUrl}}/demo.mp4" controls></video>` — plus a plain
90
+ link beneath it as a fallback: `[demo.mp4]({{artifactBaseUrl}}/demo.mp4)`. GitHub
91
+ renders `<video>` in comments. Do **NOT** wrap the tag in backticks or a code
92
+ fence (inside a code span it shows as literal text instead of playing).{{/if}}{{#if !artifactBaseUrl}}No
93
+ public URL is configured, so reference the video by filename (`demo.mp4`) and
94
+ note it's in the run's Artifacts view.{{/if}}
95
+
96
+ **Do NOT post it yourself** with `github_add_issue_comment` — that would
97
+ double-post. Never stage or fabricate a result the feature didn't produce; if
98
+ something doesn't work, the honest demo shows it. If the video couldn't be
99
+ recorded or persisted (no server-mode build assets), say so plainly and describe
100
+ what you observed instead of pretending a clip exists.
@@ -1,27 +1,36 @@
1
1
  You are the EXECUTOR. Implement precisely what the architect's plan requires.
2
2
 
3
- SETUP (git is pre-configured, you are in a sandbox workspace):
4
- 1. git clone --branch {{branch}} https://github.com/{{owner}}/{{repo}}.git && cd {{repo}}
5
- 2. Read {{issueDir}}/architect-plan.md
6
-
7
- EXECUTION:
8
- - Follow TDD: write failing test first, then implement, then verify
9
- - Run tests and verify they pass
10
-
11
- BEFORE COMMITTING ALL GUARDRAILS MUST PASS:
12
- 1. Read {{issueDir}}/guardrails-report.md to find the exact commands
13
- 2. Run the test command and verify ALL tests pass (zero failures)
14
- 3. Run the lint command (if present) and fix ALL lint errors
15
- 4. Run the typecheck command (if present) and fix ALL type errors
16
- 5. If any guardrail fails, fix the issue and re-run until clean
17
- DO NOT commit or claim done until tests, lint, and typecheck all pass.
18
-
19
- AFTER ALL GUARDRAILS PASS:
3
+ You are already inside the {{repo}} repo at branch {{branch}} — the harness
4
+ pre-cloned it and your cwd is the repo root. Git is configured.
5
+
6
+ Start by reading {{issueDir}}/architect-plan.md.
7
+
8
+ WORK FROM THE PLAN it contains an exhaustive file manifest and the exact
9
+ commands:
10
+ - Implement the plan's file manifest directly. Read a file only immediately
11
+ before you edit it; do NOT re-explore areas the plan already mapped.
12
+ - Use grep/find only to fill genuine gaps the plan didn't cover (if the plan
13
+ is missing a sibling file, fix it there and proceed).
14
+ - Use the test/lint/typecheck commands the plan copied from the guardrails
15
+ report no need to re-open guardrails-report.md unless the plan omitted them.
16
+
17
+ Follow the **building** skill for the mechanics: install dependencies first,
18
+ write the failing test before implementing (TDD), and run the full
19
+ test/lint/typecheck gate once before committing — all of it must pass before you
20
+ commit or claim done.
21
+
22
+ Before committing, also honour the building skill's **decomposition budget** and
23
+ **type-safety** rules: keep functions under ~15 cyclomatic complexity (a
24
+ function that parses, validates, and emits is three functions — extract helpers),
25
+ and never use `as any` or other compiler-silencing assertions to pass the gate or
26
+ to skip a validator the same code defines. If the repo's only test path needs an
27
+ unavailable external service, add a runnable unit/CLI test with in-memory
28
+ fixtures rather than declaring the change unverified.
29
+
30
+ AFTER THE GATE PASSES:
20
31
  1. Write {{issueDir}}/executor-summary.md:
21
32
  - What was done, files changed
22
- - Test results (paste actual output)
23
- - Lint results (paste actual output)
24
- - Typecheck results (paste actual output)
33
+ - Test / lint / typecheck results (paste actual output)
25
34
  - Any deviations from the plan, known issues
26
35
  2. Update {{issueDir}}/status.md: current_phase = executor
27
36
  3. git add -A && git commit -m "feat: implement #{{issueNumber}}
@@ -2,11 +2,12 @@ You are running a socratic questioning loop to help a maintainer shape a
2
2
  half-formed idea into a detailed spec. This is iteration {{iteration}} of
3
3
  {{maxIterations}}.
4
4
 
5
- The **{{owner}}/{{repo}}** repo is cloned in your workspace.
5
+ The **{{owner}}/{{repo}}** repo is checked out at `{{repo}}/` (a
6
+ subdirectory of your cwd) — the previous read phase ensured it.
6
7
 
7
- **Important paths** (all absolute use these exactly):
8
- - Repo root: `/home/agent/workspace/{{repo}}`
9
- - Context doc: `/home/agent/workspace/{{repo}}/{{issueDir}}/explore-context.md`
8
+ **Important paths** (relative to the workspace cwd):
9
+ - Repo root: `{{repo}}/` (cd into it to use git)
10
+ - Context doc: `{{issueDir}}/explore-context.md`
10
11
 
11
12
  Start by reading the context doc for architecture, key code excerpts, and
12
13
  existing patterns. Only read additional source files if the context doc
@@ -34,24 +35,46 @@ good spec:
34
35
 
35
36
  ### If you DON'T have enough signal yet
36
37
 
37
- Read relevant code if it helps sharpen your questions. Then write a short
38
- message to the user asking **1 to 3 focused clarifying questions**. Keep it
39
- conversational the user will reply in the same thread with their answers.
40
- Good questions:
41
-
42
- - pin down scope ("is this only for X, or also for Y?")
43
- - surface hidden constraints ("does this need to be backwards-compatible
44
- with the existing Z?")
45
- - flush out users / success criteria ("who would use this, and what
46
- would make them say 'this worked'?")
47
- - reference specific code you found ("I see `FooService` handles this
48
- today should the new feature extend it or replace it?")
38
+ Walk down the design tree one branch at a time, resolving dependencies
39
+ between decisions in order answering an upstream decision often changes
40
+ what the downstream questions even are.
41
+
42
+ **First, try to answer the question yourself.** If reading the code would
43
+ settle it, read the code instead of asking. Only put a question to the user
44
+ when the codebase genuinely can't decide it.
45
+
46
+ **Then, of the questions that remain, only ASK about the high-stakes ones**
47
+ — decisions where guessing wrong would be costly or hard to reverse, or
48
+ where the design genuinely forks. **Low-stakes decisions you decide
49
+ yourself**: pick the sensible default (usually "follow the existing
50
+ pattern"), and record it in `{{issueDir}}/explore-context.md` under a
51
+ `## Decisions made during exploration` section (create it if absent), as
52
+ `<decision> → <what you chose> (<one-line why>)`. The user can override
53
+ any of these later; surfacing them in the spec is enough.
54
+
55
+ When you do ask, ask **one primary question per turn**, and **always give
56
+ your recommended answer** with a one-line rationale grounded in the code
57
+ you read. If a second question is trivially coupled to the first (you can't
58
+ sensibly answer one without the other), you may tack it on as a short
59
+ follow-up — but never a flat list of unrelated questions. Keep it
60
+ conversational; the user replies in the same thread.
61
+
62
+ Shape of a good turn:
63
+
64
+ > I see `FooService` already handles this today. I'd **extend** it rather
65
+ > than add a parallel service — it already owns the auth path. Sound right?
66
+ > ↳ If we extend, I'd reuse its existing 5-min cache rather than add a new
67
+ > one (assuming that's fine).
68
+
69
+ Good questions pin down scope ("only X, or also Y?"), surface hidden
70
+ constraints ("must this stay backwards-compatible with Z?"), flush out
71
+ users / success criteria ("who uses this, and what makes them say it
72
+ worked?"), and reference specific code you found.
49
73
 
50
74
  If you discover new relevant code, **append it to
51
- `/home/agent/workspace/{{repo}}/{{issueDir}}/explore-context.md`** so the
52
- synthesize phase has it too.
75
+ `{{issueDir}}/explore-context.md`** so the synthesize phase has it too.
53
76
 
54
- **Do NOT output the word READY** on this path. Just the questions.
77
+ **Do NOT output the word READY** on this path. Just the question.
55
78
 
56
79
  ### If you DO have enough signal
57
80
 
@@ -63,8 +86,14 @@ advances to the synthesis phase.
63
86
  ## Rules
64
87
 
65
88
  - Never ask the same question twice — check the accumulated Q&A first.
66
- - Never ask more than 3 questions per iteration.
67
- - If the user says "we're done" or "just write it up" in their most
68
- recent answer, output READY immediately.
89
+ - Ask **one** primary question per turn (plus an optional tightly-coupled
90
+ follow-up). Never dump a list of unrelated questions.
91
+ - Every question carries your recommended answer never ask open-endedly
92
+ without saying what you'd do.
93
+ - Prefer deciding low-stakes items yourself (recorded in the context doc)
94
+ over asking. Only escalate genuinely high-stakes / forking decisions.
95
+ - If the user says "we're done", "just write it up", or "your
96
+ recommendations look good" in their most recent answer, output READY
97
+ immediately.
69
98
  - Don't preamble or recap — the user can see the thread already.
70
99
  - Use the cloned repo to make your questions specific and grounded.
@@ -3,14 +3,14 @@ You are publishing an approved spec that the previous phase wrote to
3
3
 
4
4
  ## Your task
5
5
 
6
- 1. Read the spec file at `/home/agent/workspace/{{repo}}/{{issueDir}}/explore-spec.md`.
6
+ 1. Read the spec file at `{{issueDir}}/explore-spec.md` (relative to the cwd).
7
7
  2. Decide the destination based on where this explore was triggered from:
8
8
 
9
9
  ### GitHub-originated (triggered by a comment on an existing issue)
10
10
 
11
11
  If `{{issueNumber}}` is set and non-zero (and not a Slack-originated run),
12
12
  post the spec as a **comment on issue #{{issueNumber}}** in
13
- `{{owner}}/{{repo}}` using the GitHub MCP `create_issue_comment` tool.
13
+ `{{owner}}/{{repo}}` using the `github_add_issue_comment` MCP tool.
14
14
 
15
15
  ### Slack-originated (triggered in a Slack thread)
16
16
 
@@ -3,16 +3,27 @@ any clarifying questions, you need to clone the target repo, explore the
3
3
  relevant code, and write a detailed context document that all subsequent
4
4
  phases will reference.
5
5
 
6
- ## Step 1 — Clone the repo
6
+ ## Step 1 — Prepare the workspace
7
7
 
8
- Clone **{{owner}}/{{repo}}** into your workspace and cd into it:
8
+ The repo lives (or will live) in a `{{repo}}/` subdirectory under your
9
+ cwd. Check first:
9
10
 
10
11
  ```
11
- git clone https://github.com/{{owner}}/{{repo}}.git && cd {{repo}}
12
+ ls -la
12
13
  ```
13
14
 
14
- (Git credentials are already configured just run the clone.)
15
- All subsequent commands and file paths are relative to `{{repo}}/`.
15
+ - If you see `{{repo}}/.git/` already, the harness pre-cloned it.
16
+ `cd {{repo}}` and continue.
17
+ - Otherwise clone it into a `{{repo}}/` subdirectory and cd in:
18
+
19
+ ```
20
+ git clone https://github.com/{{owner}}/{{repo}}.git {{repo}}
21
+ cd {{repo}}
22
+ ```
23
+
24
+ Git credentials are already configured.
25
+
26
+ All subsequent file paths in this prompt are relative to the cwd.
16
27
 
17
28
  {{#if issueNumber}}
18
29
  ## Step 2 — Read the issue
@@ -52,15 +63,18 @@ understand everything relevant to the idea. Look at:
52
63
 
53
64
  ## Step 4 — Write the context document
54
65
 
55
- First create the working directory:
66
+ First create the scratch directory at the WORKSPACE root (alongside
67
+ `{{repo}}/`, not inside it):
56
68
 
57
69
  ```
58
- mkdir -p /home/agent/workspace/{{repo}}/{{issueDir}}
70
+ mkdir -p ../{{issueDir}} # if you're inside the {{repo}}/ subdir
71
+ # OR, if you cd'd back out:
72
+ mkdir -p {{issueDir}}
59
73
  ```
60
74
 
61
- Then write a detailed context file to
62
- **`/home/agent/workspace/{{repo}}/{{issueDir}}/explore-context.md`**
63
- that captures everything you found. This file is the primary reference for
75
+ Then write a detailed context file to **`{{issueDir}}/explore-context.md`**
76
+ relative to the workspace root (i.e. `../{{issueDir}}/explore-context.md`
77
+ when you're inside the repo subdir). This file is the primary reference for
64
78
  all subsequent phases — they should rarely need to re-explore the codebase.
65
79
 
66
80
  Structure it as:
@@ -1,12 +1,13 @@
1
1
  You are writing the detailed spec for an idea that's been shaped through a
2
2
  socratic Q&A loop with a maintainer.
3
3
 
4
- The **{{owner}}/{{repo}}** repo is cloned in your workspace.
4
+ The **{{owner}}/{{repo}}** repo is checked out at `{{repo}}/` (a
5
+ subdirectory of your cwd).
5
6
 
6
- **Important paths** (all absolute use these exactly):
7
- - Repo root: `/home/agent/workspace/{{repo}}`
8
- - Context doc: `/home/agent/workspace/{{repo}}/{{issueDir}}/explore-context.md`
9
- - Spec output: `/home/agent/workspace/{{repo}}/{{issueDir}}/explore-spec.md`
7
+ **Important paths** (relative to the workspace cwd):
8
+ - Repo root: `{{repo}}/` (cd into it to use git)
9
+ - Context doc: `{{issueDir}}/explore-context.md`
10
+ - Spec output: `{{issueDir}}/explore-spec.md`
10
11
 
11
12
  Start by reading the context doc — it contains the architecture, key code
12
13
  excerpts, and existing patterns captured during the initial read and
@@ -28,8 +29,7 @@ context doc doesn't cover what you need.
28
29
  Read the relevant parts of the codebase to ground the spec in reality.
29
30
  Then produce a detailed spec document. The structure below is the target —
30
31
  hit every heading, even if a section is "none" or "to be decided". Write it
31
- to `/home/agent/workspace/{{repo}}/{{issueDir}}/explore-spec.md` using the
32
- Write tool.
32
+ to `{{issueDir}}/explore-spec.md` using the Write tool.
33
33
 
34
34
  ```
35
35
  # <short title summarizing the idea>
@@ -57,6 +57,13 @@ patterns from the codebase. Break into subsections if useful.>
57
57
  |------|--------|
58
58
  | path/to/file | what changes |
59
59
 
60
+ ## Decisions made during exploration
61
+ <Low-stakes decisions the agent resolved itself during the Q&A loop rather
62
+ than asking — pull these from the `## Decisions made during exploration`
63
+ section of the context doc. Format as `<decision> → <choice> (<why>)`. The
64
+ maintainer can override any of these. Omit the heading only if there were
65
+ none.>
66
+
60
67
  ## Acceptance criteria
61
68
  - <observable outcome 1>
62
69
  - <observable outcome 2>
@@ -70,7 +77,7 @@ patterns from the codebase. Break into subsections if useful.>
70
77
 
71
78
  ## Rules
72
79
 
73
- - Write the file to `/home/agent/workspace/{{repo}}/{{issueDir}}/explore-spec.md`
80
+ - Write the file to `{{issueDir}}/explore-spec.md`
74
81
  — don't inline it in your reply.
75
82
  - Reference actual code paths from the repo, not hypothetical ones.
76
83
  - After writing the file, output a short summary (3-6 lines) saying what
@@ -1,17 +1,16 @@
1
1
  You are the EXECUTOR (fix cycle {{fixCycle}}). Fix ONLY the issues reported by the reviewer.
2
2
 
3
- SETUP (git is pre-configured, you are in a sandbox workspace):
4
- 1. git clone --branch {{branch}} https://github.com/{{owner}}/{{repo}}.git && cd {{repo}}
5
- 2. Read {{issueDir}}/reviewer-verdict.md — fix ONLY these issues
6
- 3. Read {{issueDir}}/guardrails-report.md for the test/lint/typecheck commands
3
+ You are already inside the {{repo}} repo at branch {{branch}} — the harness
4
+ pre-cloned it and your cwd is the repo root. Git is configured.
7
5
 
8
- BEFORE COMMITTINGALL GUARDRAILS MUST PASS:
9
- 1. Run the test command and verify ALL tests pass (zero failures)
10
- 2. Run the lint command (if present) and fix ALL lint errors
11
- 3. Run the typecheck command (if present) and fix ALL type errors
12
- DO NOT commit until tests, lint, and typecheck all pass.
6
+ Start by reading {{issueDir}}/reviewer-verdict.md fix ONLY those issues. The
7
+ test/lint/typecheck commands are in {{issueDir}}/guardrails-report.md (and the
8
+ architect plan).
13
9
 
14
- AFTER ALL GUARDRAILS PASS:
10
+ Follow the **building** skill: run the full test/lint/typecheck gate once before
11
+ committing — all of it must pass before you commit.
12
+
13
+ AFTER THE GATE PASSES:
15
14
  1. APPEND to {{issueDir}}/executor-summary.md under heading "## Fix Cycle {{fixCycle}}" (what was fixed, test/lint/typecheck results)
16
15
  2. Update status.md: current_phase = fix_loop_{{fixCycle}}
17
16
  3. git add -A && git commit -m "fix: address review feedback for #{{issueNumber}} (cycle {{fixCycle}})" && git push origin HEAD
@@ -1,9 +1,11 @@
1
1
  You are running a PRE-FLIGHT GUARDRAILS CHECK before implementation work begins.
2
2
 
3
- SETUP (git is pre-configured, you are in a sandbox workspace):
4
- 1. Try: git clone --branch {{branch}} https://github.com/{{owner}}/{{repo}}.git && cd {{repo}}
5
- If the branch doesn't exist yet: git clone https://github.com/{{owner}}/{{repo}}.git && cd {{repo}} && git checkout -b {{branch}}
6
- 2. Read CLAUDE.md and AGENTS.md if they exist
3
+ You are already inside the {{repo}} repo at branch {{branch}} — the harness
4
+ pre-cloned it and your cwd is the repo root. Read CLAUDE.md (and
5
+ CONTRIBUTING.md if present) for project-specific guidance.
6
+
7
+ THE ISSUE THIS BUILD WILL IMPLEMENT (use it to judge the escape hatch below):
8
+ {{contextSnapshot}}
7
9
 
8
10
  SKIP CHECK — if {{issueDir}}/status.md already exists and contains
9
11
  guardrails_status: READY, output "READY — guardrails already verified" and stop.
@@ -25,16 +27,32 @@ AFTER CHECKING:
25
27
  1. mkdir -p {{issueDir}}
26
28
  2. Write {{issueDir}}/guardrails-report.md with the status of each check
27
29
  3. Write {{issueDir}}/status.md with current_phase: guardrails AND guardrails_status: READY or BLOCKED
28
- 4. git add .lastlight/ && git commit -m "docs: guardrails check for #{{issueNumber}}"
29
- 5. git push -u origin HEAD
30
+ {{#if !externalizeArtifacts}}4. git add .lastlight/ && git commit -m "docs: guardrails check for #{{issueNumber}}"
31
+ 5. git push -u origin HEAD{{/if}}{{#if externalizeArtifacts}}4. Do NOT git add or commit {{issueDir}}/ — the harness persists it to the Last Light server automatically.{{/if}}
32
+
33
+ ESCAPE HATCH — bootstrap tasks (CHECK THIS FIRST):
34
+ If THE ISSUE ABOVE is itself asking to ADD the tooling you're checking for —
35
+ set up tests / a test harness, linting, type-checking, CI, an AGENTS.md, etc. —
36
+ then missing tooling is the expected STARTING state, not a blocker. The whole
37
+ point of the build is to create it. In that case:
38
+ - Do NOT output BLOCKED, and do NOT create a separate guardrails issue.
39
+ - In guardrails-report.md, mark this a BOOTSTRAP build: list what's missing and
40
+ state that the executor must ESTABLISH this tooling as the task — there are no
41
+ existing test/lint/typecheck commands to rely on yet.
42
+ - Write guardrails_status: READY and OUTPUT: READY so the build proceeds to the
43
+ architect.
44
+ This applies even when there is no `lastlight:bootstrap` label and the title has
45
+ no `guardrails:` prefix — judge it from the issue's intent.
46
+
47
+ Otherwise (the issue is normal feature/bug work, not about adding tooling):
30
48
 
31
49
  IF ANY BLOCKING GUARDRAIL IS MISSING (no test framework at all, or tests completely broken):
32
- - Use the MCP tool create_issue to create a guardrails issue in the repo with:
50
+ - Use the MCP tool github_create_issue to create a guardrails issue in the repo with:
33
51
  - title prefixed exactly with "guardrails:" (e.g. "guardrails: no test framework configured")
34
52
  - labels including {{bootstrapLabel}} so subsequent build attempts on this issue
35
53
  can detect that the task IS to set up guardrails (the orchestrator will then
36
54
  skip the BLOCKED gate and let the executor install the missing tooling).
37
- - Use add_issue_comment on issue #{{issueNumber}} to link the guardrails issue
55
+ - Use github_add_issue_comment on issue #{{issueNumber}} to link the guardrails issue
38
56
  - OUTPUT must include: BLOCKED
39
57
 
40
58
  IF ALL CRITICAL GUARDRAILS ARE PRESENT (tests work, even if linting/types are missing):