lastlight 0.16.0 → 0.16.2

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 (385) hide show
  1. package/README.md +71 -692
  2. package/dist/cli-config.js.map +1 -0
  3. package/dist/cli-format.js.map +1 -0
  4. package/dist/{cli/cli-server.d.ts → cli-server.d.ts} +39 -1
  5. package/dist/{cli/cli-server.js → cli-server.js} +105 -5
  6. package/dist/cli-server.js.map +1 -0
  7. package/dist/cli-timeline.js.map +1 -0
  8. package/dist/{cli/cli.js → cli.js} +9 -7
  9. package/dist/cli.js.map +1 -0
  10. package/dist/{cli/fork-cli.d.ts → fork-cli.d.ts} +3 -3
  11. package/dist/{cli/fork-cli.js → fork-cli.js} +28 -27
  12. package/dist/fork-cli.js.map +1 -0
  13. package/dist/{cli/oauth-cli.js → oauth-cli.js} +1 -1
  14. package/dist/oauth-cli.js.map +1 -0
  15. package/dist/{cli/setup.js → setup.js} +10 -4
  16. package/dist/setup.js.map +1 -0
  17. package/dist/{cli/skills-install.d.ts → skills-install.d.ts} +6 -0
  18. package/dist/{cli/skills-install.js → skills-install.js} +6 -2
  19. package/dist/skills-install.js.map +1 -0
  20. package/package.json +20 -65
  21. package/plugins/lastlight/.claude-plugin/plugin.json +1 -1
  22. package/agent-context/rules.md +0 -80
  23. package/agent-context/security.md +0 -69
  24. package/agent-context/soul.md +0 -21
  25. package/config/default.yaml +0 -119
  26. package/deploy/.env.production.example +0 -100
  27. package/deploy/entrypoint.sh +0 -82
  28. package/deploy/native/README.md +0 -160
  29. package/deploy/native/install.sh +0 -110
  30. package/deploy/native/lastlight.env.example +0 -95
  31. package/deploy/native/lastlight.service +0 -50
  32. package/deploy/sandbox-entrypoint.sh +0 -93
  33. package/dist/admin/auth.d.ts +0 -51
  34. package/dist/admin/auth.js +0 -121
  35. package/dist/admin/auth.js.map +0 -1
  36. package/dist/admin/chat-session-reader.d.ts +0 -39
  37. package/dist/admin/chat-session-reader.js +0 -84
  38. package/dist/admin/chat-session-reader.js.map +0 -1
  39. package/dist/admin/docker.d.ts +0 -61
  40. package/dist/admin/docker.js +0 -187
  41. package/dist/admin/docker.js.map +0 -1
  42. package/dist/admin/index.d.ts +0 -9
  43. package/dist/admin/index.js +0 -59
  44. package/dist/admin/index.js.map +0 -1
  45. package/dist/admin/routes.d.ts +0 -81
  46. package/dist/admin/routes.js +0 -1381
  47. package/dist/admin/routes.js.map +0 -1
  48. package/dist/admin/sessions.d.ts +0 -89
  49. package/dist/admin/sessions.js +0 -204
  50. package/dist/admin/sessions.js.map +0 -1
  51. package/dist/admin/tail.d.ts +0 -12
  52. package/dist/admin/tail.js +0 -145
  53. package/dist/admin/tail.js.map +0 -1
  54. package/dist/admin/version.d.ts +0 -22
  55. package/dist/admin/version.js +0 -92
  56. package/dist/admin/version.js.map +0 -1
  57. package/dist/cli/cli-config.js.map +0 -1
  58. package/dist/cli/cli-format.js.map +0 -1
  59. package/dist/cli/cli-server.js.map +0 -1
  60. package/dist/cli/cli-timeline.js.map +0 -1
  61. package/dist/cli/cli.js.map +0 -1
  62. package/dist/cli/fork-cli.js.map +0 -1
  63. package/dist/cli/oauth-cli.js.map +0 -1
  64. package/dist/cli/setup.js.map +0 -1
  65. package/dist/cli/skills-install.js.map +0 -1
  66. package/dist/config/config-resolve.d.ts +0 -28
  67. package/dist/config/config-resolve.js +0 -47
  68. package/dist/config/config-resolve.js.map +0 -1
  69. package/dist/config/config.d.ts +0 -157
  70. package/dist/config/config.js +0 -581
  71. package/dist/config/config.js.map +0 -1
  72. package/dist/config/core-pin.d.ts +0 -16
  73. package/dist/config/core-pin.js +0 -85
  74. package/dist/config/core-pin.js.map +0 -1
  75. package/dist/config/overlay-assets.d.ts +0 -20
  76. package/dist/config/overlay-assets.js +0 -114
  77. package/dist/config/overlay-assets.js.map +0 -1
  78. package/dist/config/overlay-bootstrap.d.ts +0 -44
  79. package/dist/config/overlay-bootstrap.js +0 -304
  80. package/dist/config/overlay-bootstrap.js.map +0 -1
  81. package/dist/connectors/github-webhook.d.ts +0 -45
  82. package/dist/connectors/github-webhook.js +0 -321
  83. package/dist/connectors/github-webhook.js.map +0 -1
  84. package/dist/connectors/index.d.ts +0 -18
  85. package/dist/connectors/index.js +0 -41
  86. package/dist/connectors/index.js.map +0 -1
  87. package/dist/connectors/messaging/base.d.ts +0 -42
  88. package/dist/connectors/messaging/base.js +0 -139
  89. package/dist/connectors/messaging/base.js.map +0 -1
  90. package/dist/connectors/messaging/delivery.d.ts +0 -14
  91. package/dist/connectors/messaging/delivery.js +0 -38
  92. package/dist/connectors/messaging/delivery.js.map +0 -1
  93. package/dist/connectors/messaging/index.d.ts +0 -4
  94. package/dist/connectors/messaging/index.js +0 -4
  95. package/dist/connectors/messaging/index.js.map +0 -1
  96. package/dist/connectors/messaging/session-manager.d.ts +0 -53
  97. package/dist/connectors/messaging/session-manager.js +0 -255
  98. package/dist/connectors/messaging/session-manager.js.map +0 -1
  99. package/dist/connectors/messaging/types.d.ts +0 -58
  100. package/dist/connectors/messaging/types.js +0 -7
  101. package/dist/connectors/messaging/types.js.map +0 -1
  102. package/dist/connectors/slack/connector.d.ts +0 -142
  103. package/dist/connectors/slack/connector.js +0 -494
  104. package/dist/connectors/slack/connector.js.map +0 -1
  105. package/dist/connectors/slack/index.d.ts +0 -2
  106. package/dist/connectors/slack/index.js +0 -3
  107. package/dist/connectors/slack/index.js.map +0 -1
  108. package/dist/connectors/slack/mrkdwn.d.ts +0 -19
  109. package/dist/connectors/slack/mrkdwn.js +0 -240
  110. package/dist/connectors/slack/mrkdwn.js.map +0 -1
  111. package/dist/connectors/types.d.ts +0 -61
  112. package/dist/connectors/types.js +0 -2
  113. package/dist/connectors/types.js.map +0 -1
  114. package/dist/cron/fanout.d.ts +0 -33
  115. package/dist/cron/fanout.js +0 -55
  116. package/dist/cron/fanout.js.map +0 -1
  117. package/dist/cron/jobs.d.ts +0 -18
  118. package/dist/cron/jobs.js +0 -37
  119. package/dist/cron/jobs.js.map +0 -1
  120. package/dist/cron/scheduler.d.ts +0 -45
  121. package/dist/cron/scheduler.js +0 -105
  122. package/dist/cron/scheduler.js.map +0 -1
  123. package/dist/engine/agent-executor.d.ts +0 -34
  124. package/dist/engine/agent-executor.js +0 -246
  125. package/dist/engine/agent-executor.js.map +0 -1
  126. package/dist/engine/chat/chat-runner.d.ts +0 -132
  127. package/dist/engine/chat/chat-runner.js +0 -424
  128. package/dist/engine/chat/chat-runner.js.map +0 -1
  129. package/dist/engine/chat/chat-skills.d.ts +0 -45
  130. package/dist/engine/chat/chat-skills.js +0 -184
  131. package/dist/engine/chat/chat-skills.js.map +0 -1
  132. package/dist/engine/chat/chat.d.ts +0 -54
  133. package/dist/engine/chat/chat.js +0 -316
  134. package/dist/engine/chat/chat.js.map +0 -1
  135. package/dist/engine/chat/message-batcher.d.ts +0 -32
  136. package/dist/engine/chat/message-batcher.js +0 -109
  137. package/dist/engine/chat/message-batcher.js.map +0 -1
  138. package/dist/engine/dispatcher.d.ts +0 -73
  139. package/dist/engine/dispatcher.js +0 -663
  140. package/dist/engine/dispatcher.js.map +0 -1
  141. package/dist/engine/event-shim.d.ts +0 -117
  142. package/dist/engine/event-shim.js +0 -435
  143. package/dist/engine/event-shim.js.map +0 -1
  144. package/dist/engine/executors/orchestrator.d.ts +0 -81
  145. package/dist/engine/executors/orchestrator.js +0 -365
  146. package/dist/engine/executors/orchestrator.js.map +0 -1
  147. package/dist/engine/executors/shared.d.ts +0 -189
  148. package/dist/engine/executors/shared.js +0 -616
  149. package/dist/engine/executors/shared.js.map +0 -1
  150. package/dist/engine/github/git-auth.d.ts +0 -62
  151. package/dist/engine/github/git-auth.js +0 -161
  152. package/dist/engine/github/git-auth.js.map +0 -1
  153. package/dist/engine/github/github-app-client.d.ts +0 -23
  154. package/dist/engine/github/github-app-client.js +0 -33
  155. package/dist/engine/github/github-app-client.js.map +0 -1
  156. package/dist/engine/github/github-tools.d.ts +0 -18
  157. package/dist/engine/github/github-tools.js +0 -263
  158. package/dist/engine/github/github-tools.js.map +0 -1
  159. package/dist/engine/github/github.d.ts +0 -1193
  160. package/dist/engine/github/github.js +0 -357
  161. package/dist/engine/github/github.js.map +0 -1
  162. package/dist/engine/github/profiles.d.ts +0 -279
  163. package/dist/engine/github/profiles.js +0 -42
  164. package/dist/engine/github/profiles.js.map +0 -1
  165. package/dist/engine/github/review-poster.d.ts +0 -98
  166. package/dist/engine/github/review-poster.js +0 -177
  167. package/dist/engine/github/review-poster.js.map +0 -1
  168. package/dist/engine/llm.d.ts +0 -79
  169. package/dist/engine/llm.js +0 -269
  170. package/dist/engine/llm.js.map +0 -1
  171. package/dist/engine/oauth.d.ts +0 -43
  172. package/dist/engine/oauth.js +0 -103
  173. package/dist/engine/oauth.js.map +0 -1
  174. package/dist/engine/router.d.ts +0 -29
  175. package/dist/engine/router.js +0 -680
  176. package/dist/engine/router.js.map +0 -1
  177. package/dist/engine/screen/classifier.d.ts +0 -93
  178. package/dist/engine/screen/classifier.js +0 -215
  179. package/dist/engine/screen/classifier.js.map +0 -1
  180. package/dist/engine/screen/screen.d.ts +0 -41
  181. package/dist/engine/screen/screen.js +0 -93
  182. package/dist/engine/screen/screen.js.map +0 -1
  183. package/dist/evals-api.d.ts +0 -24
  184. package/dist/evals-api.js +0 -22
  185. package/dist/evals-api.js.map +0 -1
  186. package/dist/index.d.ts +0 -1
  187. package/dist/index.js +0 -940
  188. package/dist/index.js.map +0 -1
  189. package/dist/managed-repos.d.ts +0 -30
  190. package/dist/managed-repos.js +0 -72
  191. package/dist/managed-repos.js.map +0 -1
  192. package/dist/notify/blocks.d.ts +0 -23
  193. package/dist/notify/blocks.js +0 -118
  194. package/dist/notify/blocks.js.map +0 -1
  195. package/dist/notify/index.d.ts +0 -17
  196. package/dist/notify/index.js +0 -7
  197. package/dist/notify/index.js.map +0 -1
  198. package/dist/notify/model.d.ts +0 -57
  199. package/dist/notify/model.js +0 -89
  200. package/dist/notify/model.js.map +0 -1
  201. package/dist/notify/notifier.d.ts +0 -18
  202. package/dist/notify/notifier.js +0 -100
  203. package/dist/notify/notifier.js.map +0 -1
  204. package/dist/notify/render.d.ts +0 -21
  205. package/dist/notify/render.js +0 -59
  206. package/dist/notify/render.js.map +0 -1
  207. package/dist/notify/transports/github.d.ts +0 -26
  208. package/dist/notify/transports/github.js +0 -27
  209. package/dist/notify/transports/github.js.map +0 -1
  210. package/dist/notify/transports/slack.d.ts +0 -27
  211. package/dist/notify/transports/slack.js +0 -37
  212. package/dist/notify/transports/slack.js.map +0 -1
  213. package/dist/notify/types.d.ts +0 -119
  214. package/dist/notify/types.js +0 -16
  215. package/dist/notify/types.js.map +0 -1
  216. package/dist/providers.d.ts +0 -125
  217. package/dist/providers.js +0 -279
  218. package/dist/providers.js.map +0 -1
  219. package/dist/sandbox/docker.d.ts +0 -180
  220. package/dist/sandbox/docker.js +0 -517
  221. package/dist/sandbox/docker.js.map +0 -1
  222. package/dist/sandbox/egress-allowlist.d.ts +0 -74
  223. package/dist/sandbox/egress-allowlist.js +0 -164
  224. package/dist/sandbox/egress-allowlist.js.map +0 -1
  225. package/dist/sandbox/egress-firewall-config.d.ts +0 -127
  226. package/dist/sandbox/egress-firewall-config.js +0 -434
  227. package/dist/sandbox/egress-firewall-config.js.map +0 -1
  228. package/dist/sandbox/images.d.ts +0 -23
  229. package/dist/sandbox/images.js +0 -55
  230. package/dist/sandbox/images.js.map +0 -1
  231. package/dist/sandbox/index.d.ts +0 -112
  232. package/dist/sandbox/index.js +0 -332
  233. package/dist/sandbox/index.js.map +0 -1
  234. package/dist/sandbox/sandbox.d.ts +0 -214
  235. package/dist/sandbox/sandbox.js +0 -453
  236. package/dist/sandbox/sandbox.js.map +0 -1
  237. package/dist/sandbox/smol.d.ts +0 -162
  238. package/dist/sandbox/smol.js +0 -485
  239. package/dist/sandbox/smol.js.map +0 -1
  240. package/dist/session-log.d.ts +0 -63
  241. package/dist/session-log.js +0 -290
  242. package/dist/session-log.js.map +0 -1
  243. package/dist/state/approval-store.d.ts +0 -88
  244. package/dist/state/approval-store.js +0 -149
  245. package/dist/state/approval-store.js.map +0 -1
  246. package/dist/state/build-assets.d.ts +0 -50
  247. package/dist/state/build-assets.js +0 -154
  248. package/dist/state/build-assets.js.map +0 -1
  249. package/dist/state/db.d.ts +0 -81
  250. package/dist/state/db.js +0 -155
  251. package/dist/state/db.js.map +0 -1
  252. package/dist/state/execution-store.d.ts +0 -257
  253. package/dist/state/execution-store.js +0 -527
  254. package/dist/state/execution-store.js.map +0 -1
  255. package/dist/state/migrate.d.ts +0 -15
  256. package/dist/state/migrate.js +0 -175
  257. package/dist/state/migrate.js.map +0 -1
  258. package/dist/state/workflow-run-store.d.ts +0 -216
  259. package/dist/state/workflow-run-store.js +0 -403
  260. package/dist/state/workflow-run-store.js.map +0 -1
  261. package/dist/telemetry/index.d.ts +0 -38
  262. package/dist/telemetry/index.js +0 -253
  263. package/dist/telemetry/index.js.map +0 -1
  264. package/dist/telemetry/pi-events.d.ts +0 -12
  265. package/dist/telemetry/pi-events.js +0 -134
  266. package/dist/telemetry/pi-events.js.map +0 -1
  267. package/dist/workflows/dag.d.ts +0 -37
  268. package/dist/workflows/dag.js +0 -118
  269. package/dist/workflows/dag.js.map +0 -1
  270. package/dist/workflows/loader.d.ts +0 -53
  271. package/dist/workflows/loader.js +0 -421
  272. package/dist/workflows/loader.js.map +0 -1
  273. package/dist/workflows/loop-eval.d.ts +0 -28
  274. package/dist/workflows/loop-eval.js +0 -74
  275. package/dist/workflows/loop-eval.js.map +0 -1
  276. package/dist/workflows/phase-executor.d.ts +0 -222
  277. package/dist/workflows/phase-executor.js +0 -1153
  278. package/dist/workflows/phase-executor.js.map +0 -1
  279. package/dist/workflows/phase-ref.d.ts +0 -50
  280. package/dist/workflows/phase-ref.js +0 -91
  281. package/dist/workflows/phase-ref.js.map +0 -1
  282. package/dist/workflows/resume.d.ts +0 -58
  283. package/dist/workflows/resume.js +0 -313
  284. package/dist/workflows/resume.js.map +0 -1
  285. package/dist/workflows/runner.d.ts +0 -63
  286. package/dist/workflows/runner.js +0 -381
  287. package/dist/workflows/runner.js.map +0 -1
  288. package/dist/workflows/schema.d.ts +0 -344
  289. package/dist/workflows/schema.js +0 -460
  290. package/dist/workflows/schema.js.map +0 -1
  291. package/dist/workflows/simple.d.ts +0 -90
  292. package/dist/workflows/simple.js +0 -393
  293. package/dist/workflows/simple.js.map +0 -1
  294. package/dist/workflows/target-policy.d.ts +0 -74
  295. package/dist/workflows/target-policy.js +0 -80
  296. package/dist/workflows/target-policy.js.map +0 -1
  297. package/dist/workflows/templates.d.ts +0 -88
  298. package/dist/workflows/templates.js +0 -127
  299. package/dist/workflows/templates.js.map +0 -1
  300. package/dist/workflows/triggers.d.ts +0 -21
  301. package/dist/workflows/triggers.js +0 -45
  302. package/dist/workflows/triggers.js.map +0 -1
  303. package/dist/workflows/verdict.d.ts +0 -19
  304. package/dist/workflows/verdict.js +0 -30
  305. package/dist/workflows/verdict.js.map +0 -1
  306. package/dist/worktree/manager.d.ts +0 -43
  307. package/dist/worktree/manager.js +0 -127
  308. package/dist/worktree/manager.js.map +0 -1
  309. package/docker-compose.yml +0 -274
  310. package/sandbox.Dockerfile +0 -68
  311. package/skills/README.md +0 -42
  312. package/skills/browser-qa/SKILL.md +0 -208
  313. package/skills/browser-qa/scripts/agent-browser.mjs +0 -531
  314. package/skills/building/SKILL.md +0 -95
  315. package/skills/chat/SKILL.md +0 -36
  316. package/skills/code-review/SKILL.md +0 -82
  317. package/skills/debug-production/SKILL.md +0 -108
  318. package/skills/demo/SKILL.md +0 -228
  319. package/skills/demo/scripts/compose-demo.sh +0 -243
  320. package/skills/issue-answer/SKILL.md +0 -91
  321. package/skills/issue-comment/SKILL.md +0 -49
  322. package/skills/issue-triage/SKILL.md +0 -149
  323. package/skills/issue-triage/references/AGENT-BRIEF.md +0 -65
  324. package/skills/pr-comment/SKILL.md +0 -64
  325. package/skills/pr-review/SKILL.md +0 -148
  326. package/skills/pr-review/references/findings-schema.md +0 -89
  327. package/skills/qa-test/SKILL.md +0 -97
  328. package/skills/repo-health/SKILL.md +0 -67
  329. package/skills/security-feedback/SKILL.md +0 -173
  330. package/skills/security-feedback/references/templates.md +0 -77
  331. package/skills/security-review/SKILL.md +0 -215
  332. package/skills/security-review/references/issue-format.md +0 -302
  333. package/skills/verify/SKILL.md +0 -118
  334. package/workflows/answer.yaml +0 -44
  335. package/workflows/build.yaml +0 -129
  336. package/workflows/cron-health.yaml +0 -6
  337. package/workflows/cron-review.yaml +0 -8
  338. package/workflows/cron-security.yaml +0 -6
  339. package/workflows/cron-triage.yaml +0 -8
  340. package/workflows/demo.yaml +0 -62
  341. package/workflows/examples/bash-smoke.yaml +0 -41
  342. package/workflows/examples/parallel-review.yaml +0 -36
  343. package/workflows/examples/tdd-loop.yaml +0 -17
  344. package/workflows/explore.yaml +0 -80
  345. package/workflows/issue-comment.yaml +0 -15
  346. package/workflows/issue-triage.yaml +0 -22
  347. package/workflows/pr-comment.yaml +0 -16
  348. package/workflows/pr-fix.yaml +0 -17
  349. package/workflows/pr-review.yaml +0 -50
  350. package/workflows/prompts/answer.md +0 -68
  351. package/workflows/prompts/architect.md +0 -44
  352. package/workflows/prompts/classifier.md +0 -60
  353. package/workflows/prompts/classify-adds-info.md +0 -17
  354. package/workflows/prompts/demo.md +0 -125
  355. package/workflows/prompts/executor.md +0 -42
  356. package/workflows/prompts/explore-ask.md +0 -99
  357. package/workflows/prompts/explore-publish.md +0 -31
  358. package/workflows/prompts/explore-read.md +0 -120
  359. package/workflows/prompts/explore-synthesize.md +0 -88
  360. package/workflows/prompts/fix.md +0 -18
  361. package/workflows/prompts/guardrails.md +0 -96
  362. package/workflows/prompts/pr-fix.md +0 -26
  363. package/workflows/prompts/pr.md +0 -39
  364. package/workflows/prompts/qa-browser.md +0 -95
  365. package/workflows/prompts/qa-synth.md +0 -44
  366. package/workflows/prompts/qa-test.md +0 -60
  367. package/workflows/prompts/re-reviewer.md +0 -33
  368. package/workflows/prompts/reviewer.md +0 -60
  369. package/workflows/prompts/verify-browser.md +0 -93
  370. package/workflows/prompts/verify-synth.md +0 -44
  371. package/workflows/prompts/verify.md +0 -63
  372. package/workflows/qa-test.yaml +0 -94
  373. package/workflows/repo-health.yaml +0 -15
  374. package/workflows/security-feedback.yaml +0 -25
  375. package/workflows/security-review.yaml +0 -37
  376. package/workflows/verify.yaml +0 -93
  377. /package/dist/{cli/cli-config.d.ts → cli-config.d.ts} +0 -0
  378. /package/dist/{cli/cli-config.js → cli-config.js} +0 -0
  379. /package/dist/{cli/cli-format.d.ts → cli-format.d.ts} +0 -0
  380. /package/dist/{cli/cli-format.js → cli-format.js} +0 -0
  381. /package/dist/{cli/cli-timeline.d.ts → cli-timeline.d.ts} +0 -0
  382. /package/dist/{cli/cli-timeline.js → cli-timeline.js} +0 -0
  383. /package/dist/{cli/cli.d.ts → cli.d.ts} +0 -0
  384. /package/dist/{cli/oauth-cli.d.ts → oauth-cli.d.ts} +0 -0
  385. /package/dist/{cli/setup.d.ts → setup.d.ts} +0 -0
@@ -1,253 +0,0 @@
1
- import { context, SpanStatusCode, trace, metrics } from "@opentelemetry/api";
2
- import { NodeSDK } from "@opentelemetry/sdk-node";
3
- import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
4
- import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
5
- import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
6
- import { resourceFromAttributes } from "@opentelemetry/resources";
7
- import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
8
- import { OTEL_COLLECTOR_SANDBOX_ENDPOINT } from "../sandbox/egress-firewall-config.js";
9
- export const OTEL_SANDBOX_ENV_ALLOWLIST = [
10
- "OTEL_SERVICE_NAME",
11
- "OTEL_RESOURCE_ATTRIBUTES",
12
- "OTEL_TRACES_EXPORTER",
13
- "OTEL_METRICS_EXPORTER",
14
- "OTEL_LOGS_EXPORTER",
15
- "OTEL_EXPORTER_OTLP_ENDPOINT",
16
- "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
17
- "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT",
18
- "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT",
19
- "OTEL_EXPORTER_OTLP_PROTOCOL",
20
- "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL",
21
- "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL",
22
- "OTEL_EXPORTER_OTLP_LOGS_PROTOCOL",
23
- "OTEL_EXPORTER_OTLP_HEADERS",
24
- "OTEL_EXPORTER_OTLP_TRACES_HEADERS",
25
- "OTEL_EXPORTER_OTLP_METRICS_HEADERS",
26
- "OTEL_EXPORTER_OTLP_LOGS_HEADERS",
27
- "OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT",
28
- "OTEL_ATTRIBUTE_COUNT_LIMIT",
29
- "OTEL_BSP_MAX_QUEUE_SIZE",
30
- "OTEL_BSP_SCHEDULE_DELAY",
31
- "OTEL_METRIC_EXPORT_INTERVAL",
32
- ];
33
- const METRIC_ATTR_ALLOWLIST = new Set([
34
- "workflow.name",
35
- "phase.name",
36
- "repo",
37
- "sandbox.backend",
38
- "model",
39
- "runtime",
40
- "surface",
41
- "success",
42
- "stop_reason",
43
- "github.profile",
44
- ]);
45
- const EXPLICIT_CONTENT_ATTR_ALLOWLIST = new Set([
46
- "message.content",
47
- "tool.result",
48
- "tool.output",
49
- "error.stack",
50
- ]);
51
- let sdk;
52
- let enabled = false;
53
- let includeContent = false;
54
- const tracer = () => trace.getTracer("lastlight");
55
- const meter = () => metrics.getMeter("lastlight");
56
- function primitive(value) {
57
- if (typeof value === "string")
58
- return value.length > 1024 ? value.slice(0, 1021) + "…" : value;
59
- if (typeof value === "number" && Number.isFinite(value))
60
- return value;
61
- if (typeof value === "boolean")
62
- return value;
63
- return undefined;
64
- }
65
- export function isTelemetryEnabled() {
66
- return enabled;
67
- }
68
- export function telemetryIncludesContent() {
69
- return includeContent;
70
- }
71
- export function safeSpanAttributes(attrs = {}) {
72
- const out = {};
73
- for (const [key, value] of Object.entries(attrs)) {
74
- const explicitlyAllowedContent = EXPLICIT_CONTENT_ATTR_ALLOWLIST.has(key);
75
- if (!explicitlyAllowedContent && (/prompt|body|stack|secret|token|headers?/i.test(key) || /(^|\.)content$/i.test(key)))
76
- continue;
77
- const p = primitive(value);
78
- if (p !== undefined)
79
- out[key] = p;
80
- }
81
- return out;
82
- }
83
- export function safeMetricAttributes(attrs = {}) {
84
- const out = {};
85
- for (const [key, value] of Object.entries(attrs)) {
86
- if (!METRIC_ATTR_ALLOWLIST.has(key))
87
- continue;
88
- const p = primitive(value);
89
- if (p !== undefined)
90
- out[key] = p;
91
- }
92
- return out;
93
- }
94
- export async function initTelemetry(config, opts = {}) {
95
- enabled = false;
96
- includeContent = config.includeContent === true;
97
- if (!config.enabled)
98
- return;
99
- try {
100
- if (!process.env.OTEL_SERVICE_NAME)
101
- process.env.OTEL_SERVICE_NAME = config.serviceName;
102
- const resource = resourceFromAttributes({
103
- [ATTR_SERVICE_NAME]: config.serviceName,
104
- ...(opts.packageVersion ? { [ATTR_SERVICE_VERSION]: opts.packageVersion } : {}),
105
- });
106
- sdk = new NodeSDK({
107
- resource,
108
- traceExporter: new OTLPTraceExporter(),
109
- metricReader: new PeriodicExportingMetricReader({ exporter: new OTLPMetricExporter() }),
110
- });
111
- await sdk.start();
112
- enabled = true;
113
- }
114
- catch (err) {
115
- sdk = undefined;
116
- enabled = false;
117
- const msg = err instanceof Error ? err.message : String(err);
118
- if (config.strict)
119
- throw err;
120
- console.warn(`[otel] initialization failed; continuing without telemetry: ${msg}`);
121
- }
122
- }
123
- export async function shutdownTelemetry() {
124
- if (!sdk)
125
- return;
126
- const active = sdk;
127
- sdk = undefined;
128
- enabled = false;
129
- await active.shutdown().catch((err) => {
130
- const msg = err instanceof Error ? err.message : String(err);
131
- console.warn(`[otel] shutdown failed: ${msg}`);
132
- });
133
- }
134
- export async function withSpan(name, attrs, fn) {
135
- if (!enabled)
136
- return await fn(undefined);
137
- const spanOptions = { attributes: safeSpanAttributes(attrs) };
138
- const span = tracer().startSpan(name, spanOptions);
139
- return await context.with(trace.setSpan(context.active(), span), async () => {
140
- try {
141
- const result = await fn(span);
142
- span.setStatus({ code: SpanStatusCode.OK });
143
- return result;
144
- }
145
- catch (err) {
146
- span.recordException(err);
147
- span.setStatus({ code: SpanStatusCode.ERROR, message: err instanceof Error ? err.message : String(err) });
148
- throw err;
149
- }
150
- finally {
151
- span.end();
152
- }
153
- });
154
- }
155
- export function recordExecutionMetrics(surface, attrs = {}) {
156
- if (!enabled)
157
- return;
158
- const metricAttrs = safeMetricAttributes({ ...attrs, surface });
159
- const m = meter();
160
- const durationMs = typeof attrs.durationMs === "number" ? attrs.durationMs : undefined;
161
- const costUsd = typeof attrs.costUsd === "number" ? attrs.costUsd : undefined;
162
- const inputTokens = typeof attrs.inputTokens === "number" ? attrs.inputTokens : undefined;
163
- const outputTokens = typeof attrs.outputTokens === "number" ? attrs.outputTokens : undefined;
164
- if (durationMs !== undefined)
165
- m.createHistogram("lastlight.execution.duration_ms").record(durationMs, metricAttrs);
166
- if (costUsd !== undefined)
167
- m.createCounter("lastlight.execution.cost_usd").add(costUsd, metricAttrs);
168
- if (inputTokens !== undefined)
169
- m.createCounter("lastlight.execution.input_tokens").add(inputTokens, metricAttrs);
170
- if (outputTokens !== undefined)
171
- m.createCounter("lastlight.execution.output_tokens").add(outputTokens, metricAttrs);
172
- m.createCounter("lastlight.execution.count").add(1, metricAttrs);
173
- }
174
- export function recordWorkflowRunStart(attrs = {}) {
175
- if (enabled)
176
- meter().createCounter("lastlight.workflow.run.started").add(1, safeMetricAttributes({ ...attrs, surface: "workflow" }));
177
- }
178
- export function recordWorkflowRunEnd(attrs = {}) {
179
- recordExecutionMetrics("workflow", attrs);
180
- }
181
- export function recordError(surface, error, attrs = {}) {
182
- if (!enabled)
183
- return;
184
- const span = trace.getActiveSpan();
185
- const errAttrs = safeSpanAttributes({ ...attrs, surface, "error.message": error instanceof Error ? error.message : String(error), "error.name": error instanceof Error ? error.name : "Error" });
186
- span?.addEvent("lastlight.error", errAttrs);
187
- span?.setStatus({ code: SpanStatusCode.ERROR, message: errAttrs["error.message"] });
188
- meter().createCounter("lastlight.errors").add(1, safeMetricAttributes({ ...attrs, surface }));
189
- }
190
- /**
191
- * Safe, non-secret OTEL descriptors passed through to a sandbox alongside
192
- * the collector endpoint — span/resource labels only, never headers or the
193
- * real backend endpoint.
194
- */
195
- const OTEL_SANDBOX_LABEL_ENV = [
196
- "OTEL_SERVICE_NAME",
197
- "OTEL_RESOURCE_ATTRIBUTES",
198
- "OTEL_TRACES_EXPORTER",
199
- "OTEL_METRICS_EXPORTER",
200
- "OTEL_LOGS_EXPORTER",
201
- ];
202
- /**
203
- * OTEL env for the **docker** backend, where pi-coding-agent runs *inside*
204
- * the container. The sandbox is pointed at the in-network collector by its
205
- * static IP — it never learns the real backend endpoint or its auth
206
- * headers (those stay host-side on the collector). Reached directly by IP
207
- * on `sandbox-egress`, so it traverses neither the SNI firewall nor DNS,
208
- * and works identically in strict and unrestricted-egress phases.
209
- */
210
- export function getDockerSandboxOtelEnv(env = process.env) {
211
- const out = {
212
- OTEL_EXPORTER_OTLP_ENDPOINT: OTEL_COLLECTOR_SANDBOX_ENDPOINT,
213
- OTEL_EXPORTER_OTLP_PROTOCOL: "http/protobuf",
214
- };
215
- for (const key of OTEL_SANDBOX_LABEL_ENV) {
216
- const value = env[key];
217
- if (value && !/[\r\n']/.test(value))
218
- out[key] = value;
219
- }
220
- return out;
221
- }
222
- /**
223
- * OTEL env for the **in-process** backends (gondolin / none), where
224
- * pi-coding-agent runs in the harness process rather than a container —
225
- * its own telemetry already inherits the harness SDK. This forwards the
226
- * host's OTEL_* config into the sandbox shell env for child processes the
227
- * agent spawns. There is no in-network collector reachable from a gondolin
228
- * VM, so the real endpoint/headers are forwarded directly; unsafe values
229
- * (newline / single-quote, which would break downstream shell quoting) are
230
- * dropped with a warning rather than forwarded.
231
- */
232
- export function getOtelEnvForSandbox(env = process.env) {
233
- const out = {};
234
- for (const key of OTEL_SANDBOX_ENV_ALLOWLIST) {
235
- const value = env[key];
236
- if (!value)
237
- continue;
238
- // The docker backend shell-quotes each value as `KEY='value'` when
239
- // building `--sandbox-env`, so a newline or single-quote in the value
240
- // would break the wrap and make docker.ts throw — aborting the whole
241
- // agent run. Drop the unsafe value here (with a warning) instead, so
242
- // telemetry forwarding degrades gracefully rather than taking the run
243
- // down with it. OTLP header values legitimately almost never contain a
244
- // single quote; when they do, the operator gets a clear log line.
245
- if (/[\r\n']/.test(value)) {
246
- console.warn(`[otel] not forwarding ${key}: value contains a newline or single quote`);
247
- continue;
248
- }
249
- out[key] = value;
250
- }
251
- return out;
252
- }
253
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { Span } from "@opentelemetry/api";
2
- export interface PiEventRecordOptions {
3
- includeContent: boolean;
4
- span?: Span;
5
- surface: "agent" | "chat";
6
- sessionId?: string;
7
- workflowName?: string;
8
- phaseName?: string;
9
- model?: string;
10
- }
11
- export declare function sanitizePiEvent(record: Record<string, unknown>, includeContent?: boolean): Record<string, unknown>;
12
- export declare function recordPiEvent(record: Record<string, unknown>, opts: PiEventRecordOptions): void;
@@ -1,134 +0,0 @@
1
- import { trace } from "@opentelemetry/api";
2
- import { safeSpanAttributes } from "./index.js";
3
- const CONTENT_LIMIT = 4096;
4
- function trunc(value) {
5
- if (typeof value !== "string")
6
- return value;
7
- return value.length > CONTENT_LIMIT ? value.slice(0, CONTENT_LIMIT - 1) + "…" : value;
8
- }
9
- function contentTypes(content) {
10
- if (!Array.isArray(content))
11
- return [];
12
- return content.map((c) => typeof c === "object" && c !== null && "type" in c ? String(c.type) : "unknown");
13
- }
14
- function sanitizeMessage(message, includeContent) {
15
- if (typeof message !== "object" || message === null)
16
- return {};
17
- const m = message;
18
- const content = Array.isArray(m.content) ? m.content : [];
19
- const out = {
20
- "message.role": typeof m.role === "string" ? m.role : undefined,
21
- "message.content_block_count": content.length,
22
- "message.content_block_types": contentTypes(content).join(","),
23
- };
24
- const usage = typeof m.usage === "object" && m.usage !== null ? m.usage : undefined;
25
- if (usage) {
26
- for (const [key, value] of Object.entries(usage)) {
27
- if (typeof value === "number" || typeof value === "string" || typeof value === "boolean")
28
- out[`usage.${key}`] = value;
29
- }
30
- }
31
- if (includeContent) {
32
- out["message.content"] = JSON.stringify(content, (_k, v) => trunc(v));
33
- }
34
- return out;
35
- }
36
- export function sanitizePiEvent(record, includeContent = false) {
37
- const type = typeof record.type === "string" ? record.type : "unknown";
38
- const out = { "pi.event_type": type };
39
- if (typeof record.sessionId === "string")
40
- out["agent.session_id"] = record.sessionId;
41
- switch (type) {
42
- case "session":
43
- if (typeof record.id === "string")
44
- out["agent.session_id"] = record.id;
45
- if (typeof record.cwd === "string")
46
- out["agent.cwd"] = record.cwd;
47
- if (typeof record.runtime === "string")
48
- out["agent.runtime"] = record.runtime;
49
- if (typeof record.version === "string")
50
- out["agent.version"] = record.version;
51
- break;
52
- case "message_end":
53
- Object.assign(out, sanitizeMessage(record.message, includeContent));
54
- break;
55
- case "tool_execution_end":
56
- if (typeof record.toolName === "string")
57
- out["tool.name"] = record.toolName;
58
- if (typeof record.tool === "string")
59
- out["tool.name"] = record.tool;
60
- if (typeof record.isError === "boolean")
61
- out["tool.is_error"] = record.isError;
62
- if (typeof record.durationMs === "number")
63
- out["tool.duration_ms"] = record.durationMs;
64
- if (typeof record.status === "string")
65
- out["tool.status"] = record.status;
66
- if (record.error instanceof Error) {
67
- out["error.name"] = record.error.name;
68
- out["error.message"] = record.error.message;
69
- if (includeContent)
70
- out["error.stack"] = trunc(record.error.stack);
71
- }
72
- else if (typeof record.error === "string") {
73
- out["error.message"] = record.error;
74
- }
75
- if (includeContent) {
76
- if (record.result !== undefined)
77
- out["tool.result"] = trunc(typeof record.result === "string" ? record.result : JSON.stringify(record.result));
78
- if (record.output !== undefined)
79
- out["tool.output"] = trunc(typeof record.output === "string" ? record.output : JSON.stringify(record.output));
80
- }
81
- break;
82
- case "extension_status":
83
- for (const key of ["extension", "status", "mode", "provider", "toolCount", "reason"]) {
84
- const value = record[key];
85
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean")
86
- out[`extension.${key}`] = value;
87
- }
88
- break;
89
- case "skills_status":
90
- for (const key of ["status", "discovered", "noSkills"]) {
91
- const value = record[key];
92
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean")
93
- out[`skills.${key}`] = value;
94
- }
95
- if (Array.isArray(record.skills)) {
96
- out["skills.names"] = record.skills
97
- .map((s) => (s && typeof s === "object" && "name" in s ? String(s.name) : ""))
98
- .filter(Boolean)
99
- .join(",");
100
- }
101
- break;
102
- case "usage_snapshot":
103
- for (const key of ["turns", "costUsd", "inputTokens", "outputTokens", "cacheReadInputTokens", "cacheCreationInputTokens"]) {
104
- const value = record[key];
105
- if (typeof value === "number")
106
- out[`usage.${key}`] = value;
107
- }
108
- break;
109
- case "fatal_error":
110
- if (typeof record.name === "string")
111
- out["error.name"] = record.name;
112
- if (typeof record.message === "string")
113
- out["error.message"] = record.message;
114
- if (includeContent && typeof record.stack === "string")
115
- out["error.stack"] = trunc(record.stack);
116
- break;
117
- }
118
- return safeSpanAttributes(out);
119
- }
120
- export function recordPiEvent(record, opts) {
121
- const span = opts.span ?? trace.getActiveSpan();
122
- if (!span)
123
- return;
124
- const attrs = safeSpanAttributes({
125
- ...sanitizePiEvent(record, opts.includeContent),
126
- surface: opts.surface,
127
- "workflow.name": opts.workflowName,
128
- "phase.name": opts.phaseName,
129
- model: opts.model,
130
- "agent.session_id": opts.sessionId,
131
- });
132
- span.addEvent(`pi.${typeof record.type === "string" ? record.type : "event"}`, attrs);
133
- }
134
- //# sourceMappingURL=pi-events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pi-events.js","sourceRoot":"","sources":["../../src/telemetry/pi-events.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import type { PhaseDefinition } from "./schema.js";
2
- export type NodeStatus = "pending" | "running" | "succeeded" | "failed" | "skipped";
3
- export type TriggerRule = "all_success" | "one_success" | "none_failed_min_one_success" | "all_done";
4
- export interface DagNode {
5
- name: string;
6
- depends_on: string[];
7
- trigger_rule: TriggerRule;
8
- status: NodeStatus;
9
- output?: string;
10
- }
11
- export interface BuildDagOptions {
12
- /**
13
- * When set and **no** phase declares `depends_on`, synthesize a chain:
14
- * each phase depends on the one declared before it (trigger rule
15
- * `all_success`). This reproduces the old linear runner's semantics —
16
- * sequential execution with a failure cascade — as a degenerate DAG, so
17
- * the unified scheduler can treat every workflow uniformly. When any phase
18
- * declares an explicit edge, the declared graph is used verbatim (no
19
- * synthesis).
20
- */
21
- chainIfNoDeps?: boolean;
22
- }
23
- /** Build a DAG from phase definitions. Validates edges and detects cycles. */
24
- export declare function buildDag(phases: PhaseDefinition[], opts?: BuildDagOptions): DagNode[];
25
- /** Evaluate a trigger rule against upstream dependency statuses. */
26
- export declare function evaluateTriggerRule(rule: TriggerRule, depStatuses: NodeStatus[]): boolean;
27
- /** Return nodes that are ready to run: pending, all deps terminal, trigger rule satisfied. */
28
- export declare function getReadyNodes(dag: DagNode[]): DagNode[];
29
- /** Return nodes that should be skipped: pending, all deps terminal, trigger rule NOT satisfied. */
30
- export declare function getNodesToSkip(dag: DagNode[]): DagNode[];
31
- /** Check if all nodes are in a terminal state. */
32
- export declare function isComplete(dag: DagNode[]): boolean;
33
- /**
34
- * Return layers of parallelizable phase names (topological sort).
35
- * Each layer contains phases that can run concurrently.
36
- */
37
- export declare function topoSort(dag: DagNode[]): string[][];
@@ -1,118 +0,0 @@
1
- const TERMINAL = ["succeeded", "failed", "skipped"];
2
- /** Build a DAG from phase definitions. Validates edges and detects cycles. */
3
- export function buildDag(phases, opts = {}) {
4
- const names = new Set(phases.map((p) => p.name));
5
- for (const phase of phases) {
6
- if (!phase.depends_on?.length)
7
- continue;
8
- for (const dep of phase.depends_on) {
9
- if (dep === phase.name)
10
- throw new Error(`Phase "${phase.name}" depends on itself`);
11
- if (!names.has(dep))
12
- throw new Error(`Phase "${phase.name}" depends on unknown phase "${dep}"`);
13
- }
14
- }
15
- const anyDeclared = phases.some((p) => p.depends_on && p.depends_on.length > 0);
16
- const synthesizeChain = opts.chainIfNoDeps === true && !anyDeclared;
17
- const nodes = phases.map((p, i) => ({
18
- name: p.name,
19
- depends_on: synthesizeChain
20
- ? (i > 0 ? [phases[i - 1].name] : [])
21
- : (p.depends_on ?? []),
22
- trigger_rule: p.trigger_rule ?? "all_success",
23
- status: "pending",
24
- }));
25
- // Detect cycles via DFS
26
- const nodeMap = new Map(nodes.map((n) => [n.name, n]));
27
- const WHITE = 0, GRAY = 1, BLACK = 2;
28
- const color = new Map(nodes.map((n) => [n.name, WHITE]));
29
- // NOTE: DFS follows depends_on edges (child → parent), the reverse of conventional
30
- // execution-order direction. Cycle detection still works: a GRAY ancestor reachable
31
- // from a descendant via depends_on edges indicates a cycle in this representation.
32
- function dfs(name, path) {
33
- color.set(name, GRAY);
34
- for (const dep of nodeMap.get(name).depends_on) {
35
- if (color.get(dep) === GRAY) {
36
- throw new Error(`Cycle detected: ${[...path, name, dep].join(" -> ")}`);
37
- }
38
- if (color.get(dep) === WHITE) {
39
- dfs(dep, [...path, name]);
40
- }
41
- }
42
- color.set(name, BLACK);
43
- }
44
- for (const node of nodes) {
45
- if (color.get(node.name) === WHITE)
46
- dfs(node.name, []);
47
- }
48
- return nodes;
49
- }
50
- /** Evaluate a trigger rule against upstream dependency statuses. */
51
- export function evaluateTriggerRule(rule, depStatuses) {
52
- if (depStatuses.length === 0)
53
- return true;
54
- switch (rule) {
55
- case "all_success":
56
- return depStatuses.every((s) => s === "succeeded");
57
- case "one_success":
58
- return depStatuses.some((s) => s === "succeeded");
59
- case "none_failed_min_one_success":
60
- return !depStatuses.some((s) => s === "failed") && depStatuses.some((s) => s === "succeeded");
61
- case "all_done":
62
- return depStatuses.every((s) => TERMINAL.includes(s));
63
- }
64
- }
65
- /** Return nodes that are ready to run: pending, all deps terminal, trigger rule satisfied. */
66
- export function getReadyNodes(dag) {
67
- const nodeMap = new Map(dag.map((n) => [n.name, n]));
68
- return dag.filter((node) => {
69
- if (node.status !== "pending")
70
- return false;
71
- const deps = node.depends_on.map((d) => nodeMap.get(d));
72
- if (!deps.every((d) => TERMINAL.includes(d.status)))
73
- return false;
74
- return evaluateTriggerRule(node.trigger_rule, deps.map((d) => d.status));
75
- });
76
- }
77
- /** Return nodes that should be skipped: pending, all deps terminal, trigger rule NOT satisfied. */
78
- export function getNodesToSkip(dag) {
79
- const nodeMap = new Map(dag.map((n) => [n.name, n]));
80
- return dag.filter((node) => {
81
- if (node.status !== "pending")
82
- return false;
83
- const deps = node.depends_on.map((d) => nodeMap.get(d));
84
- if (!deps.every((d) => TERMINAL.includes(d.status)))
85
- return false;
86
- return !evaluateTriggerRule(node.trigger_rule, deps.map((d) => d.status));
87
- });
88
- }
89
- /** Check if all nodes are in a terminal state. */
90
- export function isComplete(dag) {
91
- return dag.every((n) => TERMINAL.includes(n.status));
92
- }
93
- /**
94
- * Return layers of parallelizable phase names (topological sort).
95
- * Each layer contains phases that can run concurrently.
96
- */
97
- export function topoSort(dag) {
98
- const inDegree = new Map(dag.map((n) => [n.name, n.depends_on.length]));
99
- const layers = [];
100
- let current = dag.filter((n) => (inDegree.get(n.name) ?? 0) === 0).map((n) => n.name);
101
- while (current.length > 0) {
102
- layers.push([...current]);
103
- const next = [];
104
- for (const name of current) {
105
- for (const node of dag) {
106
- if (node.depends_on.includes(name)) {
107
- const deg = (inDegree.get(node.name) ?? 0) - 1;
108
- inDegree.set(node.name, deg);
109
- if (deg === 0)
110
- next.push(node.name);
111
- }
112
- }
113
- }
114
- current = next;
115
- }
116
- return layers;
117
- }
118
- //# sourceMappingURL=dag.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dag.js","sourceRoot":"","sources":["../../src/workflows/dag.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- import { type AgentWorkflowDefinition, type CronWorkflowDefinition } from "./schema.js";
2
- import type { DisabledConfig, RouteConfig } from "../config/config.js";
3
- export interface WorkflowAssetConfig {
4
- builtInRoot?: string;
5
- overlayRoot?: string;
6
- disabled?: Partial<DisabledConfig>;
7
- }
8
- export interface WorkflowOrigin {
9
- layer: string;
10
- filePath: string;
11
- }
12
- /** Configure ordered asset layers. Built-ins load first; overlay wins by logical name. */
13
- export declare function configureWorkflowAssets(config?: WorkflowAssetConfig): void;
14
- /** Legacy wrapper used by older tests to point directly at a workflow directory. */
15
- export declare function setWorkflowDir(dir: string): void;
16
- export declare function clearWorkflowCache(): void;
17
- /** Monotonic counter bumped on every asset-layer reconfigure / cache clear. */
18
- export declare function getAssetVersion(): number;
19
- export declare function getWorkflow(name: string): AgentWorkflowDefinition;
20
- export declare function getCronWorkflows(): CronWorkflowDefinition[];
21
- export declare function listAgentWorkflows(): AgentWorkflowDefinition[];
22
- /**
23
- * The enabled workflow that claims a given classifier intent via its
24
- * `classification.intent`, if any. Backs the router's data-driven fallback: an
25
- * intent the router's bespoke switch doesn't handle routes to its owning
26
- * workflow. Returns undefined for control intents and unclaimed tokens.
27
- */
28
- export declare function getWorkflowByIntent(intent: string): AgentWorkflowDefinition | undefined;
29
- export declare function getWorkflowOrigin(name: string): WorkflowOrigin | undefined;
30
- export declare function getCronWorkflowOrigin(name: string): WorkflowOrigin | undefined;
31
- export declare function loadWorkflowYamlRaw(name: string): string;
32
- export declare function loadPromptTemplate(relativePath: string): string;
33
- export declare function resolvePromptPath(relativePath: string): string;
34
- export declare function loadSkillRaw(name: string): string;
35
- export declare function loadSkillInstructions(name: string): string;
36
- /**
37
- * Resolve a list of skill names to their absolute directory paths.
38
- * Each returned path is the skill folder root (containing `SKILL.md`
39
- * plus any `scripts/`, `references/`, `assets/`) — not the .md file.
40
- * The sandbox staging step in agent-executor uses these to symlink or
41
- * copy the whole folder into the phase's bundle at
42
- * `<workspaceRoot>/.lastlight-skills/<phase>/<name>/`.
43
- * Layer-aware: overlay skills win over built-ins (same precedence and
44
- * disabled-skill handling as `loadSkillRaw`).
45
- */
46
- export declare function resolveSkillPaths(names: readonly string[]): string[];
47
- /**
48
- * Concatenate resolved agent-context/*.md with overlay filename replacement.
49
- * Later layers replace earlier files by basename; disabled.agentContext removes
50
- * either exact filenames (rules.md) or stem names (rules).
51
- */
52
- export declare function loadAgentContext(): string;
53
- export declare function validateAssets(routes?: RouteConfig): void;