@wascartech/devbot 0.0.0-stage → 2.1.0

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 (376) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +638 -2
  3. package/dist/access-grant-store.js +99 -0
  4. package/dist/access-grant-store.js.map +1 -0
  5. package/dist/access-resolve.js +11 -0
  6. package/dist/access-resolve.js.map +1 -0
  7. package/dist/access-rule-store.js +99 -0
  8. package/dist/access-rule-store.js.map +1 -0
  9. package/dist/admin/access-routes.js +73 -0
  10. package/dist/admin/access-routes.js.map +1 -0
  11. package/dist/admin/access-rule-routes.js +107 -0
  12. package/dist/admin/access-rule-routes.js.map +1 -0
  13. package/dist/admin/custom-repos-routes.js +93 -0
  14. package/dist/admin/custom-repos-routes.js.map +1 -0
  15. package/dist/admin/env-routes.js +74 -0
  16. package/dist/admin/env-routes.js.map +1 -0
  17. package/dist/admin/global-settings-routes.js +254 -0
  18. package/dist/admin/global-settings-routes.js.map +1 -0
  19. package/dist/admin/mcp-cleanup.js +12 -0
  20. package/dist/admin/mcp-cleanup.js.map +1 -0
  21. package/dist/admin/mcp-routes.js +169 -0
  22. package/dist/admin/mcp-routes.js.map +1 -0
  23. package/dist/admin/query-params.js +80 -0
  24. package/dist/admin/query-params.js.map +1 -0
  25. package/dist/admin/routes.js +150 -0
  26. package/dist/admin/routes.js.map +1 -0
  27. package/dist/admin/run-history-routes.js +44 -0
  28. package/dist/admin/run-history-routes.js.map +1 -0
  29. package/dist/admin/run-routes.js +99 -0
  30. package/dist/admin/run-routes.js.map +1 -0
  31. package/dist/admin/settings-routes.js +119 -0
  32. package/dist/admin/settings-routes.js.map +1 -0
  33. package/dist/admin/stats-routes.js +51 -0
  34. package/dist/admin/stats-routes.js.map +1 -0
  35. package/dist/admin/task-routes.js +213 -0
  36. package/dist/admin/task-routes.js.map +1 -0
  37. package/dist/admin/test-routes.js +38 -0
  38. package/dist/admin/test-routes.js.map +1 -0
  39. package/dist/admin/volume-routes.js +82 -0
  40. package/dist/admin/volume-routes.js.map +1 -0
  41. package/dist/admin/webhook-routes.js +174 -0
  42. package/dist/admin/webhook-routes.js.map +1 -0
  43. package/dist/agents.js +48 -0
  44. package/dist/agents.js.map +1 -0
  45. package/dist/assignee-value.js +6 -0
  46. package/dist/assignee-value.js.map +1 -0
  47. package/dist/attachments.js +76 -0
  48. package/dist/attachments.js.map +1 -0
  49. package/dist/auto-commands.js +88 -0
  50. package/dist/auto-commands.js.map +1 -0
  51. package/dist/auto-features.js +32 -0
  52. package/dist/auto-features.js.map +1 -0
  53. package/dist/base-branch-store.js +40 -0
  54. package/dist/base-branch-store.js.map +1 -0
  55. package/dist/base-branches.js +9 -0
  56. package/dist/base-branches.js.map +1 -0
  57. package/dist/build-workflow.js +116 -0
  58. package/dist/build-workflow.js.map +1 -0
  59. package/dist/change-request-lifecycle.js +16 -0
  60. package/dist/change-request-lifecycle.js.map +1 -0
  61. package/dist/change-request-store.js +72 -0
  62. package/dist/change-request-store.js.map +1 -0
  63. package/dist/ci-failure.js +80 -0
  64. package/dist/ci-failure.js.map +1 -0
  65. package/dist/cli.js +3 -0
  66. package/dist/cli.js.map +1 -0
  67. package/dist/config.js +17 -0
  68. package/dist/config.js.map +1 -0
  69. package/dist/conflict-fix.js +178 -0
  70. package/dist/conflict-fix.js.map +1 -0
  71. package/dist/cookie.js +70 -0
  72. package/dist/cookie.js.map +1 -0
  73. package/dist/crypto-util.js +40 -0
  74. package/dist/crypto-util.js.map +1 -0
  75. package/dist/custom-repos-store.js +90 -0
  76. package/dist/custom-repos-store.js.map +1 -0
  77. package/dist/custom-repos-sync.js +118 -0
  78. package/dist/custom-repos-sync.js.map +1 -0
  79. package/dist/db.js +12 -0
  80. package/dist/db.js.map +1 -0
  81. package/dist/devbot-scripts.js +18 -0
  82. package/dist/devbot-scripts.js.map +1 -0
  83. package/dist/devcontainer.js +141 -0
  84. package/dist/devcontainer.js.map +1 -0
  85. package/dist/env-config-store.js +132 -0
  86. package/dist/env-config-store.js.map +1 -0
  87. package/dist/error-log-store.js +193 -0
  88. package/dist/error-log-store.js.map +1 -0
  89. package/dist/git.js +605 -0
  90. package/dist/git.js.map +1 -0
  91. package/dist/global-queue.js +127 -0
  92. package/dist/global-queue.js.map +1 -0
  93. package/dist/global-settings-store.js +307 -0
  94. package/dist/global-settings-store.js.map +1 -0
  95. package/dist/help.js +41 -0
  96. package/dist/help.js.map +1 -0
  97. package/dist/http-csp.js +15 -0
  98. package/dist/http-csp.js.map +1 -0
  99. package/dist/http-util.js +40 -0
  100. package/dist/http-util.js.map +1 -0
  101. package/dist/idempotency.js +50 -0
  102. package/dist/idempotency.js.map +1 -0
  103. package/dist/lifecycle.js +234 -0
  104. package/dist/lifecycle.js.map +1 -0
  105. package/dist/logger.js +33 -0
  106. package/dist/logger.js.map +1 -0
  107. package/dist/lsp-servers.js +81 -0
  108. package/dist/lsp-servers.js.map +1 -0
  109. package/dist/mcp/auth.js +62 -0
  110. package/dist/mcp/auth.js.map +1 -0
  111. package/dist/mcp/effective-mcp.js +42 -0
  112. package/dist/mcp/effective-mcp.js.map +1 -0
  113. package/dist/mcp/oauth-refresh.js +138 -0
  114. package/dist/mcp/oauth-refresh.js.map +1 -0
  115. package/dist/mcp/peer-sync.js +109 -0
  116. package/dist/mcp/peer-sync.js.map +1 -0
  117. package/dist/mcp/registry.js +54 -0
  118. package/dist/mcp/registry.js.map +1 -0
  119. package/dist/mcp/runner-bridge.js +93 -0
  120. package/dist/mcp/runner-bridge.js.map +1 -0
  121. package/dist/mcp/server.js +173 -0
  122. package/dist/mcp/server.js.map +1 -0
  123. package/dist/mcp/tools/_helpers.js +88 -0
  124. package/dist/mcp/tools/_helpers.js.map +1 -0
  125. package/dist/mcp/tools/attachments.js +117 -0
  126. package/dist/mcp/tools/attachments.js.map +1 -0
  127. package/dist/mcp/tools/cicd.js +105 -0
  128. package/dist/mcp/tools/cicd.js.map +1 -0
  129. package/dist/mcp/tools/discovery.js +34 -0
  130. package/dist/mcp/tools/discovery.js.map +1 -0
  131. package/dist/mcp/tools/issues.js +56 -0
  132. package/dist/mcp/tools/issues.js.map +1 -0
  133. package/dist/mcp/tools/merge_requests.js +67 -0
  134. package/dist/mcp/tools/merge_requests.js.map +1 -0
  135. package/dist/mcp/tools/metadata.js +127 -0
  136. package/dist/mcp/tools/metadata.js.map +1 -0
  137. package/dist/mcp/tools/peer_sync.js +43 -0
  138. package/dist/mcp/tools/peer_sync.js.map +1 -0
  139. package/dist/mcp/tools/repository.js +178 -0
  140. package/dist/mcp/tools/repository.js.map +1 -0
  141. package/dist/mcp/tools/work_tracking.js +125 -0
  142. package/dist/mcp/tools/work_tracking.js.map +1 -0
  143. package/dist/mcp/tools/workitems.js +30 -0
  144. package/dist/mcp/tools/workitems.js.map +1 -0
  145. package/dist/mcp/volume-files.js +187 -0
  146. package/dist/mcp/volume-files.js.map +1 -0
  147. package/dist/mcp-auth-store.js +134 -0
  148. package/dist/mcp-auth-store.js.map +1 -0
  149. package/dist/mcp-config-store.js +83 -0
  150. package/dist/mcp-config-store.js.map +1 -0
  151. package/dist/mention.js +512 -0
  152. package/dist/mention.js.map +1 -0
  153. package/dist/migrate.js +73 -0
  154. package/dist/migrate.js.map +1 -0
  155. package/dist/mr-assignee.js +71 -0
  156. package/dist/mr-assignee.js.map +1 -0
  157. package/dist/mr-content.js +90 -0
  158. package/dist/mr-content.js.map +1 -0
  159. package/dist/oauth-routes.js +54 -0
  160. package/dist/oauth-routes.js.map +1 -0
  161. package/dist/onboarding-allowlist.js +32 -0
  162. package/dist/onboarding-allowlist.js.map +1 -0
  163. package/dist/opencode.js +291 -0
  164. package/dist/opencode.js.map +1 -0
  165. package/dist/outbound-webhook-store.js +229 -0
  166. package/dist/outbound-webhook-store.js.map +1 -0
  167. package/dist/outbound-webhook.js +314 -0
  168. package/dist/outbound-webhook.js.map +1 -0
  169. package/dist/path-sandbox.js +200 -0
  170. package/dist/path-sandbox.js.map +1 -0
  171. package/dist/platform/git-auth.js +34 -0
  172. package/dist/platform/git-auth.js.map +1 -0
  173. package/dist/platform/gitealike/attachments.js +62 -0
  174. package/dist/platform/gitealike/attachments.js.map +1 -0
  175. package/dist/platform/gitealike/base.js +935 -0
  176. package/dist/platform/gitealike/base.js.map +1 -0
  177. package/dist/platform/gitealike/forgejo.js +16 -0
  178. package/dist/platform/gitealike/forgejo.js.map +1 -0
  179. package/dist/platform/gitealike/gitea.js +16 -0
  180. package/dist/platform/gitealike/gitea.js.map +1 -0
  181. package/dist/platform/gitealike/http.js +152 -0
  182. package/dist/platform/gitealike/http.js.map +1 -0
  183. package/dist/platform/gitealike/schemas.js +284 -0
  184. package/dist/platform/gitealike/schemas.js.map +1 -0
  185. package/dist/platform/github/attachments.js +52 -0
  186. package/dist/platform/github/attachments.js.map +1 -0
  187. package/dist/platform/github/http.js +153 -0
  188. package/dist/platform/github/http.js.map +1 -0
  189. package/dist/platform/github/index.js +936 -0
  190. package/dist/platform/github/index.js.map +1 -0
  191. package/dist/platform/github/schemas.js +308 -0
  192. package/dist/platform/github/schemas.js.map +1 -0
  193. package/dist/platform/github/zip.js +85 -0
  194. package/dist/platform/github/zip.js.map +1 -0
  195. package/dist/platform/gitlab/admin.js +105 -0
  196. package/dist/platform/gitlab/admin.js.map +1 -0
  197. package/dist/platform/gitlab/api.js +229 -0
  198. package/dist/platform/gitlab/api.js.map +1 -0
  199. package/dist/platform/gitlab/attachments.js +79 -0
  200. package/dist/platform/gitlab/attachments.js.map +1 -0
  201. package/dist/platform/gitlab/http.js +165 -0
  202. package/dist/platform/gitlab/http.js.map +1 -0
  203. package/dist/platform/gitlab/index.js +630 -0
  204. package/dist/platform/gitlab/index.js.map +1 -0
  205. package/dist/platform/gitlab/oauth.js +58 -0
  206. package/dist/platform/gitlab/oauth.js.map +1 -0
  207. package/dist/platform/gitlab/read.js +182 -0
  208. package/dist/platform/gitlab/read.js.map +1 -0
  209. package/dist/platform/gitlab/schemas-read.js +274 -0
  210. package/dist/platform/gitlab/schemas-read.js.map +1 -0
  211. package/dist/platform/gitlab/schemas.js +251 -0
  212. package/dist/platform/gitlab/schemas.js.map +1 -0
  213. package/dist/platform/gitlab/signature.js +52 -0
  214. package/dist/platform/gitlab/signature.js.map +1 -0
  215. package/dist/platform/index.js +38 -0
  216. package/dist/platform/index.js.map +1 -0
  217. package/dist/platform/port.js +26 -0
  218. package/dist/platform/port.js.map +1 -0
  219. package/dist/platform/types.js +80 -0
  220. package/dist/platform/types.js.map +1 -0
  221. package/dist/podman.js +119 -0
  222. package/dist/podman.js.map +1 -0
  223. package/dist/project-sync.js +69 -0
  224. package/dist/project-sync.js.map +1 -0
  225. package/dist/prompt.js +47 -0
  226. package/dist/prompt.js.map +1 -0
  227. package/dist/queue-store.js +236 -0
  228. package/dist/queue-store.js.map +1 -0
  229. package/dist/queue.js +129 -0
  230. package/dist/queue.js.map +1 -0
  231. package/dist/redact.js +23 -0
  232. package/dist/redact.js.map +1 -0
  233. package/dist/run-files.js +297 -0
  234. package/dist/run-files.js.map +1 -0
  235. package/dist/run-filters.js +54 -0
  236. package/dist/run-filters.js.map +1 -0
  237. package/dist/run-history-store.js +229 -0
  238. package/dist/run-history-store.js.map +1 -0
  239. package/dist/run-log-sink.js +270 -0
  240. package/dist/run-log-sink.js.map +1 -0
  241. package/dist/run-log.js +97 -0
  242. package/dist/run-log.js.map +1 -0
  243. package/dist/run-usage.js +29 -0
  244. package/dist/run-usage.js.map +1 -0
  245. package/dist/run-view.js +112 -0
  246. package/dist/run-view.js.map +1 -0
  247. package/dist/runner.js +1094 -0
  248. package/dist/runner.js.map +1 -0
  249. package/dist/runtime-apply.js +26 -0
  250. package/dist/runtime-apply.js.map +1 -0
  251. package/dist/runtime-settings.js +71 -0
  252. package/dist/runtime-settings.js.map +1 -0
  253. package/dist/runtime-state.js +19 -0
  254. package/dist/runtime-state.js.map +1 -0
  255. package/dist/server.js +119 -0
  256. package/dist/server.js.map +1 -0
  257. package/dist/settings-store.js +320 -0
  258. package/dist/settings-store.js.map +1 -0
  259. package/dist/status.js +121 -0
  260. package/dist/status.js.map +1 -0
  261. package/dist/stop.js +56 -0
  262. package/dist/stop.js.map +1 -0
  263. package/dist/sweeps.js +87 -0
  264. package/dist/sweeps.js.map +1 -0
  265. package/dist/task-log.js +279 -0
  266. package/dist/task-log.js.map +1 -0
  267. package/dist/task-view.js +62 -0
  268. package/dist/task-view.js.map +1 -0
  269. package/dist/token-store.js +68 -0
  270. package/dist/token-store.js.map +1 -0
  271. package/dist/types/access.js +74 -0
  272. package/dist/types/access.js.map +1 -0
  273. package/dist/types/custom-repos.js +28 -0
  274. package/dist/types/custom-repos.js.map +1 -0
  275. package/dist/types/env-config.js +25 -0
  276. package/dist/types/env-config.js.map +1 -0
  277. package/dist/types/env.js +190 -0
  278. package/dist/types/env.js.map +1 -0
  279. package/dist/types/global-settings.js +178 -0
  280. package/dist/types/global-settings.js.map +1 -0
  281. package/dist/types/lsp-servers.js +145 -0
  282. package/dist/types/lsp-servers.js.map +1 -0
  283. package/dist/types/mcp-config.js +77 -0
  284. package/dist/types/mcp-config.js.map +1 -0
  285. package/dist/types/opencode.js +59 -0
  286. package/dist/types/opencode.js.map +1 -0
  287. package/dist/types/outbound-webhook.js +56 -0
  288. package/dist/types/outbound-webhook.js.map +1 -0
  289. package/dist/types/project-settings.js +114 -0
  290. package/dist/types/project-settings.js.map +1 -0
  291. package/dist/types/provider-registry.js +37 -0
  292. package/dist/types/provider-registry.js.map +1 -0
  293. package/dist/types/runtime-settings.js +78 -0
  294. package/dist/types/runtime-settings.js.map +1 -0
  295. package/dist/usage-stats.js +159 -0
  296. package/dist/usage-stats.js.map +1 -0
  297. package/dist/version.js +19 -0
  298. package/dist/version.js.map +1 -0
  299. package/dist/volume-gc.js +193 -0
  300. package/dist/volume-gc.js.map +1 -0
  301. package/dist/volume-manage.js +191 -0
  302. package/dist/volume-manage.js.map +1 -0
  303. package/dist/volume-store.js +122 -0
  304. package/dist/volume-store.js.map +1 -0
  305. package/dist/webhook.js +1106 -0
  306. package/dist/webhook.js.map +1 -0
  307. package/dist/work-item-auto-store.js +75 -0
  308. package/dist/work-item-auto-store.js.map +1 -0
  309. package/dist/work-item-branch-store.js +37 -0
  310. package/dist/work-item-branch-store.js.map +1 -0
  311. package/migrations/0001_initial.sql +59 -0
  312. package/migrations/0002_queue_status.sql +15 -0
  313. package/migrations/0003_work_item_base_branch.sql +14 -0
  314. package/migrations/0004_project_settings.sql +15 -0
  315. package/migrations/0005_global_settings.sql +34 -0
  316. package/migrations/0006_model_variants.sql +8 -0
  317. package/migrations/0007_container_error_logs.sql +21 -0
  318. package/migrations/0008_project_access_grants.sql +16 -0
  319. package/migrations/0009_drop_imported_legacy.sql +4 -0
  320. package/migrations/0010_container_error_log_model.sql +6 -0
  321. package/migrations/0011_container_error_log_title.sql +5 -0
  322. package/migrations/0012_pending_task_cancel.sql +6 -0
  323. package/migrations/0013_builder_image.sql +6 -0
  324. package/migrations/0014_build_workflow.sql +7 -0
  325. package/migrations/0015_access_rules.sql +24 -0
  326. package/migrations/0016_trigger_policy.sql +17 -0
  327. package/migrations/0017_attachment_upload.sql +8 -0
  328. package/migrations/0018_work_item_branch.sql +11 -0
  329. package/migrations/0019_auto_push_mr.sql +18 -0
  330. package/migrations/0020_outbound_webhooks.sql +47 -0
  331. package/migrations/0021_runtime_settings.sql +12 -0
  332. package/migrations/0022_auto_resolve_conflicts.sql +17 -0
  333. package/migrations/0023_ci_fail_auto_report.sql +27 -0
  334. package/migrations/0024_work_item_auto_override.sql +22 -0
  335. package/migrations/0025_run_history.sql +37 -0
  336. package/migrations/0026_run_history_task_seq.sql +6 -0
  337. package/migrations/0027_custom_repos.sql +11 -0
  338. package/migrations/0028_run_usage.sql +14 -0
  339. package/migrations/0029_drop_ocr_langs.sql +6 -0
  340. package/migrations/0030_mr_assignee.sql +9 -0
  341. package/migrations/0031_lsp_servers.sql +14 -0
  342. package/opencode-config/managed/devbot-agent-policy.md +61 -0
  343. package/opencode-config/managed/opencode.json +77 -0
  344. package/opencode-config/opencode.json +211 -0
  345. package/opencode-config/plugins/devbot-path-guard.js +224 -0
  346. package/package.json +157 -4
  347. package/public/assets/DashboardSidebarCollapse-rIuzCmVm.js +1 -0
  348. package/public/assets/DashboardToolbar-DFCUqZ4Z.js +1 -0
  349. package/public/assets/ErrorLogModal.vue_vue_type_script_setup_true_lang-BCyNIf1E.js +1 -0
  350. package/public/assets/ErrorLogsPage-DyYK2Rop.js +1 -0
  351. package/public/assets/LogSlideover.vue_vue_type_script_setup_true_lang-33xie7TE.js +1 -0
  352. package/public/assets/OverviewPage-CFfa0uwg.js +1 -0
  353. package/public/assets/PageGrid-CBROIU87.js +1 -0
  354. package/public/assets/PeriodRangePicker.vue_vue_type_script_setup_true_lang-DiFUNem7.js +1 -0
  355. package/public/assets/ProjectDetailPage-CreyvUit.js +1 -0
  356. package/public/assets/ProjectsPage-CFx8-elJ.js +1 -0
  357. package/public/assets/RunDetailSlideover.vue_vue_type_script_setup_true_lang-DopYYmCT.js +1 -0
  358. package/public/assets/RunsPage-CRnnXU4P.js +1 -0
  359. package/public/assets/Select-Bvx32Diz.js +1 -0
  360. package/public/assets/SelectMenu-BjMxc4VB.js +1 -0
  361. package/public/assets/SettingsPage-Bb6LM3wO.js +60 -0
  362. package/public/assets/TimeCell.vue_vue_type_script_setup_true_lang-DW_UB0Fu.js +1 -0
  363. package/public/assets/UsagePage-BLMDEsv-.js +332 -0
  364. package/public/assets/UsagePage-DodEeAjB.css +1 -0
  365. package/public/assets/VolumesPage-CxcLc3L2.js +1 -0
  366. package/public/assets/WebhookConfigPanel.vue_vue_type_script_setup_true_lang-B2V2GF6b.js +1 -0
  367. package/public/assets/WorkItemCell.vue_vue_type_script_setup_true_lang-BQn6vTjd.js +1 -0
  368. package/public/assets/index-BMbMibyb.js +4 -0
  369. package/public/assets/index-C5RBBrPj.js +30 -0
  370. package/public/assets/index-CgX29UgC.css +1 -0
  371. package/public/assets/usage-format-jsb31_O8.js +1 -0
  372. package/public/assets/useManagedProjects-8rtjRqVJ.js +1 -0
  373. package/public/assets/useRouteTab-DfwrcMic.js +1 -0
  374. package/public/favicon.ico +0 -0
  375. package/public/favicon.png +0 -0
  376. package/public/index.html +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAiD,MAAM,mBAAmB,CAAC;AAEzN,4EAA4E;AAC5E,+EAA+E;AAE/E,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,0DAA0D;AAC1D,MAAM,UAAU,OAAO,CAAC,IAA4C;IAClE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,OAAO,GAAG,MAAM,aAAa,UAAU,EAAE,CAAC;AAC5C,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,mDAAmD;AACnD,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACvC,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,OAAO,CAAC,gBAAgB,EAAE,eAAe,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,aAAa,UAAU,MAAM,CAAC;AACvC,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,OAAO,aAAa,UAAU,GAAG,CAAC;AACpC,CAAC;AAED,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAChF,uEAAuE;AACvE,6DAA6D;AAC7D,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,iFAAiF;AACjF,2BAA2B;AAC3B,MAAM,UAAU,qBAAqB,CAAC,UAAkB,EAAE,KAAa;IACrE,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,GAAG,KAAK,EAAE,CAAC;AAC1D,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,4EAA4E;AAC5E,wDAAwD;AACxD,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO;QACL,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC3C,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC;QAC1C,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC;QACzC,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC;QACzC,qBAAqB,CAAC,UAAU,EAAE,aAAa,CAAC;QAChD,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC;QAC7C,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC;QAC7C,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC;QAC/C,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC;QAC/C,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC;QAC7C,gBAAgB,CAAC,UAAU,CAAC;QAC5B,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC;QACzC,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC;QAC9C,qBAAqB,CAAC,UAAU,EAAE,eAAe,CAAC;QAClD,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC;QACxC,qBAAqB,CAAC,UAAU,EAAE,SAAS,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,8DAA8D;AAC9D,MAAM,YAAY,GAA2B;IAC3C,MAAM,EAAE,qBAAqB;IAC7B,KAAK,EAAE,oBAAoB;IAC3B,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,mBAAmB;IACzB,aAAa,EAAE,yBAAyB;IACxC,QAAQ,EAAE,yBAAyB;IACnC,QAAQ,EAAE,sBAAsB;IAChC,UAAU,EAAE,uBAAuB;IACnC,UAAU,EAAE,oBAAoB;IAChC,QAAQ,EAAE,wBAAwB;IAClC,GAAG,EAAE,eAAe;IACpB,IAAI,EAAE,gBAAgB;IACtB,SAAS,EAAE,sBAAsB;IACjC,aAAa,EAAE,wBAAwB;IACvC,GAAG,EAAE,oBAAoB;IACzB,OAAO,EAAE,qBAAqB;CAC/B,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AACtC,CAAC;AAED,6EAA6E;AAC7E,8EAA8E;AAC9E,+EAA+E;AAC/E,yCAAyC;AACzC,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,OAAO,GAAG,MAAM,aAAa,UAAU,SAAS,CAAC;AACnD,CAAC;AAED,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,yEAAyE;AACzE,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEhD,gFAAgF;AAChF,6EAA6E;AAC7E,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,OAAO,GAAG,MAAM,aAAa,UAAU,MAAM,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,cAAsB;IAC/C,OAAO,MAAM,cAAc,EAAE,CAAC;AAChC,CAAC;AAED,8EAA8E;AAC9E,2EAA2E;AAC3E,gEAAgE;AAChE,MAAM,UAAU,iBAAiB,CAAC,MAAqB,EAAE,cAAsB;IAC7E,OAAO,MAAM,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,OAAO,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC;AAC/E,CAAC;AAED,8EAA8E;AAC9E,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,gFAAgF;AAChF,kFAAkF;AAClF,gFAAgF;AAChF,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClD,CAAC;AAED,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,yCAAyC;AACzC,MAAM,UAAU,cAAc;IAC5B,OAAO,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;AAChD,CAAC;AAED,sEAAsE;AACtE,0EAA0E;AAC1E,gFAAgF;AAChF,4EAA4E;AAC5E,4DAA4D;AAC5D,+EAA+E;AAC/E,6EAA6E;AAC7E,gFAAgF;AAChF,mFAAmF;AACnF,+EAA+E;AAC/E,oDAAoD;AACpD,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,OAAO,GAAG,MAAM,CAAC,iBAAiB;IACxF,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,OAAO,IAAI,eAAe,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;IAC5D,MAAM,GAAG,GAAG,OAAO,IAAI,eAAe,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,EAAE,CAAC;IAClE,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC;IACtD,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,eAAe,GAAG,CAAC,aAAa,IAAI,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,2EAA2E;AAC3E,+EAA+E;AAC/E,yCAAyC;AACzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAEjE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC,8EAA8E;AAC9E,yEAAyE;AACzE,0EAA0E;AAC1E,8EAA8E;AAC9E,+DAA+D;AAC/D,MAAM,UAAU,kBAAkB,CAAC,YAAoB,EAAE,OAAO,GAAG,IAAI;IACrE,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,GAAG,YAAY,sCAAsC,CAAC;IACrE,MAAM,MAAM,GACV,uEAAuE,uBAAuB,SAAS,CAAC;IAC1G,OAAO,KAAK,MAAM,OAAO,MAAM,KAAK,CAAC;AACvC,CAAC;AAED,gFAAgF;AAChF,gEAAgE;AAChE,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,uBAAuB,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjE,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC1B,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,gFAAgF;AAChF,6EAA6E;AAC7E,wEAAwE;AACxE,MAAM,UAAU,sBAAsB,CAAC,KAAe;IACpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9E,OAAO,gDAAgD,IAAI,4BAA4B,CAAC;AAC1F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,wEAAwE;AACxE,gFAAgF;AAChF,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB;IAC9B,OAAO,4DAA4D,CAAC;AACtE,CAAC;AAED,0EAA0E;AAC1E,2EAA2E;AAC3E,wEAAwE;AACxE,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,iCAAiC;AACjC,uCAAuC;AACvC,8DAA8D;AAC9D,iFAAiF;AACjF,0FAA0F;AAC1F,8EAA8E;AAC9E,4EAA4E;AAC5E,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,WAAmB,EAAE,KAAW,EAAE,aAAa,GAAG,EAAE;IAC7F,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,QAAQ,GACZ,gBAAgB,CAAC,cAAc;QAC/B,uBAAuB,CAAC,WAAW,CAAC,cAAc;QAClD,uBAAuB,CAAC,EAAE,CAAC;IAC7B,0EAA0E;IAC1E,8EAA8E;IAC9E,6EAA6E;IAC7E,+EAA+E;IAC/E,4EAA4E;IAC5E,+EAA+E;IAC/E,sEAAsE;IACtE,8EAA8E;IAC9E,wEAAwE;IACxE,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,EAAE,GAAG,WAAW,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC1G,IAAI,aAAa;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,wBAAwB,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAuI,EACvI,IAAU,EACV,UAAkD,EAAE,EACpD,WAAqB,EAAE,EACvB,eAAuB,MAAM,CAAC,aAAa;IAE3C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5I,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;IACnC,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,yEAAyE;IACzE,6EAA6E;IAC7E,wEAAwE;IACxE,2CAA2C;IAC3C,MAAM,aAAa,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,oBAAoB,CAAC,CAAC;IAE1G,uDAAuD;IACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;QAC1B,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,EAAE,QAAQ,EAAE,aAAa,KAAK,CAAC,UAAU,SAAS;QACnF,IAAI,EAAE,GAAG,GAAG,eAAe;QAC3B,GAAG,OAAO,CAAC,OAAO,CAAC;QACnB,YAAY;QACZ,IAAI,EAAE,IAAI,EAAE,uGAAuG;KACpH,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,0CAA0C;QAC1C,oFAAoF;QACpF,iFAAiF;QACjF,+EAA+E;QAC/E,6EAA6E;QAC7E,0EAA0E;QAC1E,6EAA6E;QAC7E,4EAA4E;QAC5E,8EAA8E;QAC9E,4EAA4E;QAC5E,oEAAoE;QACpE,4EAA4E;QAC5E,2EAA2E;QAC3E,SAAS;QACT,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3H,IAAI,YAAoB,CAAC;QACzB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,GAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,WAAW,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACtF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,uCAAuC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACtI,CAAC;YACD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gCAAgC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACzG,CAAC;YACD,YAAY,GAAG,GAAG,CAAC;QACrB,CAAC;QACD,MAAM,SAAS,GACb,wBAAwB,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,6BAA6B,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3G,MAAM,UAAU,GAAG;YACjB,GAAG,WAAW,mBAAmB,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa;YAC1E,GAAG,WAAW,mBAAmB,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa;SACjF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACf,MAAM,cAAc,GAAG,uBAAuB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,0EAA0E;QAC1E,4EAA4E;QAC5E,4EAA4E;QAC5E,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;QACzC,yEAAyE;QACzE,wEAAwE;QACxE,0EAA0E;QAC1E,qDAAqD;QACrD,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,qEAAqE;QACrE,uEAAuE;QACvE,MAAM,QAAQ,GAAG,gBAAgB,UAAU,wBAAwB,SAAS,GAAG,cAAc,GAAG,gBAAgB,OAAO,SAAS,OAAO,gBAAgB,EAAE,qEAAqE,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC;QAClQ,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC;YACrB,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,EAAE,QAAQ,EAAE,aAAa,KAAK,CAAC,UAAU,QAAQ;YAClF,IAAI,EAAE,GAAG,GAAG,eAAe;YAC3B,GAAG,OAAO,CAAC,OAAO,CAAC;YACnB,YAAY;YACZ,IAAI,EAAE,IAAI,EAAE,QAAQ;SACrB,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACjB,kEAAkE;YAClE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC5D,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;gBAC/F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gCAAgC,QAAQ,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACpJ,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACrI,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAClI,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,8EAA8E;IAC9E,+DAA+D;IAC/D,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,EAAE,QAAQ,EAAE,aAAa,KAAK,CAAC,UAAU,OAAO;QACjF,IAAI,EAAE,GAAG,GAAG,eAAe;QAC3B,GAAG,OAAO,CAAC,OAAO,CAAC;QACnB,YAAY;QACV,IAAI,EAAE,IAAI,EAAE,OAAO;KACpB,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACjB,oEAAoE;QACpE,uEAAuE;QACvE,wEAAwE;QACxE,yEAAyE;QACzE,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,OAAO;YACpB,CAAC,CAAC,qBAAqB,MAAM,6DAA6D;YAC1F,CAAC,CAAC,0BAA0B,MAAM,EAAE,CAAC;QACvC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACrF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AACnI,CAAC;AAED,0EAA0E;AAC1E,gFAAgF;AAChF,uEAAuE;AACvE,4EAA4E;AAC5E,mBAAmB;AACnB,uEAAuE;AACvE,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,sCAAsC;AACtC,gFAAgF;AAChF,iFAAiF;AACjF,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,cAAsB,EAAE,MAAc,EAAE,WAAmB,EAAE,KAAK,GAAG,KAAK;IACnG,OAAO,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,2BAA2B;AAC3B,kFAAkF;AAClF,8DAA8D;AAC9D,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAC9E,6EAA6E;AAC7E,MAAM,UAAU,yBAAyB,CAAC,MAAc,EAAE,WAAmB;IAC3E,OAAO;QACL,eAAe;QACf,6CAA6C,GAAG,CAAC,MAAM,CAAC,oCAAoC,MAAM,cAAc;QAChH,GAAG,WAAW,eAAe;QAC7B,GAAG,WAAW,gBAAgB,GAAG,CAAC,MAAM,CAAC,oCAAoC;KAC9E,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAED,6EAA6E;AAC7E,0EAA0E;AAC1E,iFAAiF;AACjF,8EAA8E;AAC9E,yEAAyE;AACzE,yEAAyE;AACzE,oCAAoC;AACpC,8EAA8E;AAC9E,oCAAoC;AACpC,yDAAyD;AACzD,yEAAyE;AACzE,kEAAkE;AAClE,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,WAAmB;IACtE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO;QACL,eAAe;QACf,6CAA6C,CAAC,oCAAoC,MAAM,cAAc;QACtG,GAAG,WAAW,eAAe;QAC7B,8CAA8C,CAAC,qBAAqB,WAAW,gBAAgB,CAAC,kBAAkB;QAClH,4CAA4C,CAAC,wDAAwD,CAAC,kBAAkB,WAAW,gBAAgB,CAAC,4CAA4C;QAChM,wBAAwB,MAAM,eAAe;KAC9C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAA0E,EAC1E,UAAkD,EAAE,EACpD,eAAuB,MAAM,CAAC,aAAa;IAK3C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,0EAA0E;IAC1E,6EAA6E;IAC7E,2EAA2E;IAC3E,8BAA8B;IAC9B,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,2CAA2C,GAAG,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACjH,CAAC;IACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,EAAE,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC;QACjG,IAAI,EAAE,GAAG,GAAG,eAAe;QAC3B,IAAI,EAAE,YAAY;QAClB,GAAG,OAAO,CAAC,OAAO,CAAC;QACnB,YAAY;QACZ,IAAI,EAAE,IAAI;QACV,yBAAyB,CAAC,MAAM,EAAE,WAAW,CAAC;KAC/C,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACjB,oEAAoE;QACpE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,MAAM,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACpI,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAChG,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,uEAAuE;AACvE,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAA0E,EAC1E,UAAkD,EAAE,EACpD,eAAuB,MAAM,CAAC,aAAa;IAK3C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,2CAA2C,GAAG,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACjH,CAAC;IACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,EAAE,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5F,IAAI,EAAE,GAAG,GAAG,eAAe;QAC3B,IAAI,EAAE,YAAY;QAClB,GAAG,OAAO,CAAC,OAAO,CAAC;QACnB,YAAY;QACZ,IAAI,EAAE,IAAI;QACV,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC;KAC1C,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,MAAM,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC9H,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,MAAM,8DAA8D,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACpK,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAChG,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAmH,EACnH,UAAkD,EAAE,EACpD,eAAuB,MAAM,CAAC,aAAa;IAE3C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,EAAE,QAAQ,EAAE,aAAa,KAAK,CAAC,UAAU,OAAO;QACjF,IAAI,EAAE,GAAG,GAAG,eAAe;QAC3B,IAAI,EAAE,YAAY;QAClB,GAAG,OAAO,CAAC,OAAO,CAAC;QACnB,YAAY;QACZ,IAAI,EAAE,IAAI;QACV,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC;KACjG,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QACvF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,QAAQ,4CAA4C,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/I,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wEAAwE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5I,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,mEAAmE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1J,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAChG,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AAC9I,CAAC;AAED,4EAA4E;AAC5E,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAA0F,EAC1F,UAAkD,EAAE,EACpD,eAAuB,MAAM,CAAC,aAAa;IAE3C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,EAAE,QAAQ,EAAE,aAAa,KAAK,CAAC,UAAU,gBAAgB;QAC1F,IAAI,EAAE,GAAG,GAAG,eAAe;QAC3B,IAAI,EAAE,YAAY;QAClB,GAAG,OAAO,CAAC,OAAO,CAAC;QACnB,YAAY;QACZ,IAAI,EAAE,IAAI;QACV,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC;KACvD,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,wBAAwB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1H,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAA0E,EAC1E,UAAkD,EAAE,EACpD,eAAuB,MAAM,CAAC,aAAa;IAE3C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACjF,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,EAAE,QAAQ,EAAE,aAAa,KAAK,CAAC,UAAU,MAAM;QAChF,IAAI,EAAE,GAAG,GAAG,eAAe;QAC3B,IAAI,EAAE,YAAY;QAClB,GAAG,OAAO,CAAC,OAAO,CAAC;QACnB,YAAY;QACZ,IAAI,EAAE,IAAI;QACV,yCAAyC,GAAG,CAAC,MAAM,CAAC,sBAAsB;KAC3E,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,MAAc;IACnE,OAAO,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,127 @@
1
+ // Global FIFO semaphore — bounds simultaneous podman builder runs across all
2
+ // work items. Option A: the backlog lives in the DB (pending_tasks rows ordered
3
+ // by seq), and only the `active` counter is in-memory. The counter is
4
+ // re-derived from the DB on boot (countRunning) so a crash resets cleanly.
5
+ //
6
+ // The per-work-item worker (queue.ts) acquires a slot before running its task.
7
+ // If the gate is full, it polls until a slot frees. Global FIFO order is
8
+ // preserved by JS event-loop scheduling: waiters' poll timers fire in the order
9
+ // acquireGlobalSlot was called, so the earliest enqueued task is admitted first.
10
+ //
11
+ // Milestone notes (queued/you're-next/starting) use an in-memory waiter set for
12
+ // position, and the row's enqueued_at for the "waited Xs" note. The DB provides
13
+ // durability (replay); the in-memory set provides position tracking. Waiters are
14
+ // keyed by task seq so the WebUI can surface a row's live gate position
15
+ // (globalQueuePosition) and label it "waiting". On restart, waiting tasks
16
+ // re-enter the queue via replay (their positions are recomputed on re-acquire).
17
+ import { config } from "./config.js";
18
+ import { countRunning } from "./queue-store.js";
19
+ import { runtime } from "./runtime-state.js";
20
+ let active = 0;
21
+ // Test-only override; null = use the live runtime snapshot.
22
+ let maxOverride = null;
23
+ // In-memory set of task seqs waiting for a gate slot (not yet admitted), in
24
+ // insertion (FIFO) order. Used for the "Queued globally (position N)" milestone
25
+ // note and the WebUI "waiting" badge/position. Reset on boot (tasks re-enter via
26
+ // replay and re-acquire, recomputing their position).
27
+ const waitingSeqs = new Set();
28
+ // Effective concurrency cap: the test override when set, else the live resolved
29
+ // runtime setting (WebUI override -> MAX_CONCURRENT_RUNS env -> built-in default).
30
+ // Read at use time so a settings change applies without a restart.
31
+ function effectiveMax() {
32
+ return maxOverride ?? runtime().maxConcurrentRuns;
33
+ }
34
+ /** Current effective concurrency cap (for the task-quota header and tests). */
35
+ export function globalQueueMax() {
36
+ return effectiveMax();
37
+ }
38
+ // Called from lifecycle on boot: re-derive `active` from the DB so a crash
39
+ // mid-run doesn't leave a phantom active count. After resetOrphanedRunning,
40
+ // countRunning is 0 — but this is called for belt-and-braces.
41
+ export function syncActiveFromDb() {
42
+ active = countRunning();
43
+ waitingSeqs.clear();
44
+ }
45
+ // Test-only overrides.
46
+ let pollIntervalOverride = null;
47
+ export function setPollIntervalForTest(ms) {
48
+ pollIntervalOverride = ms;
49
+ }
50
+ function pollIntervalMs() {
51
+ return pollIntervalOverride ?? config.QUEUE_POLL_INTERVAL_MS;
52
+ }
53
+ // Test-only: override the cap without env coupling. Tests must restore to the
54
+ // live runtime value (setMaxConcurrentForTest(null)) in teardown. Uses an epoch
55
+ // counter so stale polls from previous tests self-cancel instead of stealing
56
+ // slots from the next test.
57
+ let epoch = 0;
58
+ export function setMaxConcurrentForTest(n) {
59
+ maxOverride = n;
60
+ active = 0;
61
+ waitingSeqs.clear();
62
+ epoch++; // invalidate all pending polls
63
+ }
64
+ export function globalQueueDepth() {
65
+ return { active, waiting: waitingSeqs.size };
66
+ }
67
+ // 1-based position of a task currently waiting for a gate slot, in FIFO order
68
+ // (the head waiter is 1). Null when the seq is not waiting (running, queued in
69
+ // the DB backlog, or settled). Used by the WebUI to label gate-blocked rows.
70
+ export function globalQueuePosition(seq) {
71
+ let i = 1;
72
+ for (const s of waitingSeqs) {
73
+ if (s === seq)
74
+ return i;
75
+ i++;
76
+ }
77
+ return null;
78
+ }
79
+ // Acquire a global concurrency slot for a task. If the gate has capacity
80
+ // (active < max), the slot is granted immediately. Otherwise the caller polls
81
+ // via the returned `ready` promise, which resolves when a slot frees. FIFO
82
+ // order is preserved by JS event-loop scheduling: poll timers fire in the order
83
+ // acquireGlobalSlot was called.
84
+ //
85
+ // `enqueuedAt` is the row's enqueued_at (ms) for the "waited Xs" note.
86
+ // `seq` is the task's queue seq, tracked so the WebUI can label this row
87
+ // "waiting" with its live gate position.
88
+ // `onAdvance` is called once at enqueue with (position, isNext) for the
89
+ // "Queued globally (position N)" / "You're next" milestone notes.
90
+ export function acquireGlobalSlot(ctx) {
91
+ if (active < effectiveMax()) {
92
+ active++;
93
+ return { ready: Promise.resolve(), queued: false, position: 0, enqueuedAt: 0 };
94
+ }
95
+ // Gate full — this task waits. Position = current waiter count + 1.
96
+ waitingSeqs.add(ctx.seq);
97
+ const position = waitingSeqs.size;
98
+ const onAdvance = ctx.onAdvance;
99
+ // Fire the enqueue-time advance: (position, isNext). isNext is true when
100
+ // this task is the first waiter (position 1).
101
+ onAdvance(position, position === 1);
102
+ // Poll for admission: wait for a slot to free, then admit. FIFO order is
103
+ // preserved by JS event-loop scheduling — waiters' poll timers fire in the
104
+ // order acquireGlobalSlot was called, so the earliest enqueued task is
105
+ // admitted first after a release.
106
+ const ready = new Promise((resolve) => {
107
+ const myEpoch = epoch;
108
+ const poll = () => {
109
+ if (myEpoch !== epoch)
110
+ return; // stale — test reset, abort
111
+ if (active < effectiveMax()) {
112
+ active++;
113
+ waitingSeqs.delete(ctx.seq);
114
+ resolve();
115
+ return;
116
+ }
117
+ setTimeout(poll, pollIntervalMs());
118
+ };
119
+ setTimeout(poll, 0); // first check immediately
120
+ });
121
+ return { ready, queued: true, position, enqueuedAt: ctx.enqueuedAt };
122
+ }
123
+ export function releaseGlobalSlot() {
124
+ if (active > 0)
125
+ active--;
126
+ }
127
+ //# sourceMappingURL=global-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-queue.js","sourceRoot":"","sources":["../src/global-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,307 @@
1
+ import { db } from "./db.js";
2
+ import { log } from "./logger.js";
3
+ import { encrypt, decryptOrPlaintext } from "./crypto-util.js";
4
+ import { GlobalSettingsSchema, ProviderBodySchema, DEFAULT_GLOBAL_SETTINGS, } from "./types/global-settings.js";
5
+ import { runtimeFromJson } from "./runtime-settings.js";
6
+ import { lspServersFromStoredJson } from "./lsp-servers.js";
7
+ // Global (bot-wide) settings + provider registry. Same DB file as the other
8
+ // stores (devbot.db, 0600). Provider API keys are encrypted at rest via
9
+ // crypto-util.ts and never returned to the browser. Values are re-validated on
10
+ // read — a corrupt row is skipped/treated as default, never crashes a run.
11
+ export function initGlobalSettingsTables() {
12
+ db.exec(`
13
+ CREATE TABLE IF NOT EXISTS global_settings (
14
+ id INTEGER PRIMARY KEY CHECK (id = 1),
15
+ plan_model TEXT,
16
+ build_model TEXT,
17
+ plan_variant TEXT NOT NULL DEFAULT '',
18
+ build_variant TEXT NOT NULL DEFAULT '',
19
+ plugins TEXT,
20
+ base_branches TEXT NOT NULL DEFAULT 'main,dev',
21
+ builder_image TEXT NOT NULL DEFAULT '',
22
+ assignee TEXT NOT NULL DEFAULT '',
23
+ build_workflow TEXT NOT NULL DEFAULT '',
24
+ mr_description TEXT NOT NULL DEFAULT '',
25
+ min_role TEXT NOT NULL DEFAULT 'write',
26
+ require_author_or_assignee INTEGER NOT NULL DEFAULT 1,
27
+ auto_push INTEGER NOT NULL DEFAULT 0,
28
+ auto_mr INTEGER NOT NULL DEFAULT 0,
29
+ auto_resolve_conflicts INTEGER NOT NULL DEFAULT 0,
30
+ ci_fail_auto_report INTEGER NOT NULL DEFAULT 0,
31
+ lsp_servers TEXT NOT NULL DEFAULT '',
32
+ runtime TEXT NOT NULL DEFAULT '',
33
+ created_at INTEGER NOT NULL,
34
+ updated_at INTEGER NOT NULL
35
+ )
36
+ `);
37
+ // Pre-0006 DBs: add the variant columns. Belt-and-braces for test DBs that
38
+ // skip migrate; ADD COLUMN errors if the column already exists.
39
+ try {
40
+ db.exec("ALTER TABLE global_settings ADD COLUMN plan_variant TEXT NOT NULL DEFAULT ''");
41
+ }
42
+ catch { /* exists */ }
43
+ try {
44
+ db.exec("ALTER TABLE global_settings ADD COLUMN build_variant TEXT NOT NULL DEFAULT ''");
45
+ }
46
+ catch { /* exists */ }
47
+ // Pre-0013 DBs lack the builder_image column.
48
+ try {
49
+ db.exec("ALTER TABLE global_settings ADD COLUMN builder_image TEXT NOT NULL DEFAULT ''");
50
+ }
51
+ catch { /* exists */ }
52
+ // Pre-0030 DBs lack the MR assignee column.
53
+ try {
54
+ db.exec("ALTER TABLE global_settings ADD COLUMN assignee TEXT NOT NULL DEFAULT ''");
55
+ }
56
+ catch { /* exists */ }
57
+ // Pre-0014 DBs lack the build-mode template columns.
58
+ try {
59
+ db.exec("ALTER TABLE global_settings ADD COLUMN build_workflow TEXT NOT NULL DEFAULT ''");
60
+ }
61
+ catch { /* exists */ }
62
+ try {
63
+ db.exec("ALTER TABLE global_settings ADD COLUMN mr_description TEXT NOT NULL DEFAULT ''");
64
+ }
65
+ catch { /* exists */ }
66
+ // Pre-0016 DBs lack the trigger-policy columns.
67
+ try {
68
+ db.exec("ALTER TABLE global_settings ADD COLUMN min_role TEXT NOT NULL DEFAULT 'write'");
69
+ }
70
+ catch { /* exists */ }
71
+ try {
72
+ db.exec("ALTER TABLE global_settings ADD COLUMN require_author_or_assignee INTEGER NOT NULL DEFAULT 1");
73
+ }
74
+ catch { /* exists */ }
75
+ // Pre-0019 DBs lack the auto-push / auto-MR columns.
76
+ try {
77
+ db.exec("ALTER TABLE global_settings ADD COLUMN auto_push INTEGER NOT NULL DEFAULT 0");
78
+ }
79
+ catch { /* exists */ }
80
+ try {
81
+ db.exec("ALTER TABLE global_settings ADD COLUMN auto_mr INTEGER NOT NULL DEFAULT 0");
82
+ }
83
+ catch { /* exists */ }
84
+ // Pre-0021 DBs lack the conflict auto-fix column.
85
+ try {
86
+ db.exec("ALTER TABLE global_settings ADD COLUMN auto_resolve_conflicts INTEGER NOT NULL DEFAULT 0");
87
+ }
88
+ catch { /* exists */ }
89
+ // Pre-0021 DBs lack the runtime (ENV -> WebUI) JSON column.
90
+ try {
91
+ db.exec("ALTER TABLE global_settings ADD COLUMN runtime TEXT NOT NULL DEFAULT ''");
92
+ }
93
+ catch { /* exists */ }
94
+ // Pre-0022 DBs lack the CI-failure auto-report column.
95
+ try {
96
+ db.exec("ALTER TABLE global_settings ADD COLUMN ci_fail_auto_report INTEGER NOT NULL DEFAULT 0");
97
+ }
98
+ catch { /* exists */ }
99
+ // Pre-0031 DBs lack the LSP server list.
100
+ try {
101
+ db.exec("ALTER TABLE global_settings ADD COLUMN lsp_servers TEXT NOT NULL DEFAULT ''");
102
+ }
103
+ catch { /* exists */ }
104
+ db.exec(`
105
+ CREATE TABLE IF NOT EXISTS global_providers (
106
+ id TEXT PRIMARY KEY,
107
+ name TEXT NOT NULL,
108
+ npm TEXT NOT NULL,
109
+ api_url TEXT,
110
+ env_var TEXT,
111
+ api_key TEXT NOT NULL,
112
+ base_url TEXT,
113
+ models TEXT NOT NULL,
114
+ enabled INTEGER NOT NULL,
115
+ source TEXT NOT NULL,
116
+ created_at INTEGER NOT NULL,
117
+ updated_at INTEGER NOT NULL
118
+ )
119
+ `);
120
+ // Pre-0028 DBs lack the per-model price map.
121
+ try {
122
+ db.exec("ALTER TABLE global_providers ADD COLUMN model_costs TEXT NOT NULL DEFAULT '{}'");
123
+ }
124
+ catch { /* exists */ }
125
+ }
126
+ // ---- Global settings singleton ---------------------------------------------
127
+ export function getGlobalSettings() {
128
+ let row;
129
+ try {
130
+ row = db
131
+ .prepare("SELECT plan_model, build_model, plan_variant, build_variant, plugins, base_branches, builder_image, assignee, build_workflow, mr_description, min_role, require_author_or_assignee, auto_push, auto_mr, auto_resolve_conflicts, ci_fail_auto_report, lsp_servers, runtime FROM global_settings WHERE id = 1")
132
+ .get();
133
+ }
134
+ catch {
135
+ // Table may not exist in focused unit tests that skip init.
136
+ return { ...DEFAULT_GLOBAL_SETTINGS };
137
+ }
138
+ if (!row)
139
+ return { ...DEFAULT_GLOBAL_SETTINGS };
140
+ const parsed = GlobalSettingsSchema.safeParse({
141
+ planModel: row.plan_model ?? "",
142
+ buildModel: row.build_model ?? "",
143
+ planVariant: row.plan_variant ?? "",
144
+ buildVariant: row.build_variant ?? "",
145
+ plugins: row.plugins ?? "",
146
+ baseBranches: row.base_branches ?? "dev,master",
147
+ builderImage: row.builder_image ?? "",
148
+ assignee: row.assignee ?? "",
149
+ buildWorkflow: row.build_workflow ?? "",
150
+ mrDescription: row.mr_description ?? "",
151
+ minRole: row.min_role ?? "write",
152
+ requireAuthorOrAssignee: row.require_author_or_assignee === 0 ? false : true,
153
+ autoPush: row.auto_push === 1,
154
+ autoMr: row.auto_mr === 1,
155
+ autoResolveConflicts: row.auto_resolve_conflicts === 1,
156
+ ciFailAutoReport: row.ci_fail_auto_report === 1,
157
+ lspServers: lspServersFromStoredJson(row.lsp_servers),
158
+ runtime: runtimeFromJson(typeof row.runtime === "string" ? row.runtime : ""),
159
+ });
160
+ if (!parsed.success) {
161
+ log.warn("global settings row failed schema, using defaults");
162
+ return { ...DEFAULT_GLOBAL_SETTINGS };
163
+ }
164
+ return parsed.data;
165
+ }
166
+ export function upsertGlobalSettings(s) {
167
+ const parsed = GlobalSettingsSchema.safeParse(s);
168
+ if (!parsed.success)
169
+ throw new Error("invalid global settings");
170
+ const v = parsed.data;
171
+ const now = Math.floor(Date.now() / 1000);
172
+ db.prepare(`INSERT OR REPLACE INTO global_settings
173
+ (id, plan_model, build_model, plan_variant, build_variant, plugins, base_branches, builder_image, assignee, build_workflow, mr_description, min_role, require_author_or_assignee, auto_push, auto_mr, auto_resolve_conflicts, ci_fail_auto_report, lsp_servers, runtime, created_at, updated_at)
174
+ VALUES (1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
175
+ COALESCE((SELECT created_at FROM global_settings WHERE id = 1), ?),
176
+ ?)`).run(v.planModel, v.buildModel, v.planVariant, v.buildVariant, v.plugins, v.baseBranches || "dev,master", v.builderImage, v.assignee, v.buildWorkflow, v.mrDescription, v.minRole, v.requireAuthorOrAssignee ? 1 : 0, v.autoPush ? 1 : 0, v.autoMr ? 1 : 0, v.autoResolveConflicts ? 1 : 0, v.ciFailAutoReport ? 1 : 0, JSON.stringify(v.lspServers), JSON.stringify(v.runtime), now, now);
177
+ }
178
+ // ---- Provider registry -----------------------------------------------------
179
+ function rowToProvider(row) {
180
+ let key;
181
+ let models;
182
+ try {
183
+ key = decryptOrPlaintext(String(row.api_key));
184
+ models = JSON.parse(String(row.models));
185
+ }
186
+ catch {
187
+ log.warn("global provider row undecodable, skipping", { id: row.id });
188
+ return null;
189
+ }
190
+ if (!Array.isArray(models) || !models.every((m) => typeof m === "string")) {
191
+ log.warn("global provider models invalid, skipping", { id: row.id });
192
+ return null;
193
+ }
194
+ let modelCosts = {};
195
+ try {
196
+ const parsed = JSON.parse(String(row.model_costs ?? "{}"));
197
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed))
198
+ modelCosts = parsed;
199
+ }
200
+ catch {
201
+ modelCosts = {};
202
+ }
203
+ return {
204
+ id: String(row.id),
205
+ name: String(row.name),
206
+ npm: String(row.npm),
207
+ apiUrl: row.api_url ?? "",
208
+ envVar: row.env_var ?? "",
209
+ apiKey: key,
210
+ baseUrl: row.base_url ?? "",
211
+ models: models,
212
+ enabled: row.enabled === 1,
213
+ source: row.source === "registry" ? "registry" : "custom",
214
+ modelCosts,
215
+ };
216
+ }
217
+ export function listProviders() {
218
+ let rows;
219
+ try {
220
+ rows = db.prepare("SELECT * FROM global_providers ORDER BY id").all();
221
+ }
222
+ catch {
223
+ // Table may not exist in focused unit tests that skip init.
224
+ return [];
225
+ }
226
+ const out = [];
227
+ for (const r of rows) {
228
+ const p = rowToProvider(r);
229
+ if (p)
230
+ out.push(p);
231
+ }
232
+ return out;
233
+ }
234
+ export function listProviderSummaries() {
235
+ return listProviders().map((p) => ({
236
+ id: p.id,
237
+ name: p.name,
238
+ npm: p.npm,
239
+ apiUrl: p.apiUrl,
240
+ envVar: p.envVar,
241
+ baseUrl: p.baseUrl,
242
+ models: p.models,
243
+ modelCount: p.models.length,
244
+ hasKey: p.apiKey.length > 0,
245
+ enabled: p.enabled,
246
+ source: p.source,
247
+ modelCosts: p.modelCosts,
248
+ }));
249
+ }
250
+ export function getProvider(id) {
251
+ let row;
252
+ try {
253
+ row = db.prepare("SELECT * FROM global_providers WHERE id = ?").get(id);
254
+ }
255
+ catch {
256
+ return null;
257
+ }
258
+ return row ? rowToProvider(row) : null;
259
+ }
260
+ export function upsertProvider(id, body) {
261
+ const v = ProviderBodySchema.parse(body);
262
+ const now = Math.floor(Date.now() / 1000);
263
+ const existing = getProvider(id);
264
+ let keyBlob;
265
+ if (v.apiKey) {
266
+ keyBlob = encrypt(v.apiKey);
267
+ }
268
+ else if (existing) {
269
+ keyBlob = encrypt(existing.apiKey);
270
+ }
271
+ else {
272
+ throw new Error("apiKey required for a new provider");
273
+ }
274
+ db.prepare(`INSERT OR REPLACE INTO global_providers
275
+ (id, name, npm, api_url, env_var, api_key, base_url, models, enabled, source, model_costs, created_at, updated_at)
276
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
277
+ COALESCE((SELECT created_at FROM global_providers WHERE id = ?), ?), ?)`).run(id, v.name, v.npm, v.apiUrl || null, v.envVar || null, keyBlob, v.baseUrl || null, JSON.stringify(v.models), v.enabled ? 1 : 0, v.source, JSON.stringify(v.modelCosts ?? {}), id, now, now);
278
+ }
279
+ export function deleteProvider(id) {
280
+ const r = db.prepare("DELETE FROM global_providers WHERE id = ?").run(id);
281
+ return r.changes > 0;
282
+ }
283
+ // True when the provider is the plan or build model's provider, or is used by a
284
+ // project override (projects may span providers now). Deletion is blocked.
285
+ export function providerIsReferenced(id) {
286
+ const g = getGlobalSettings();
287
+ for (const m of [g.planModel, g.buildModel]) {
288
+ if (m && m.split("/")[0] === id)
289
+ return true;
290
+ }
291
+ const rows = db
292
+ .prepare("SELECT plan_model, build_model FROM project_settings WHERE plan_model LIKE ? OR build_model LIKE ?")
293
+ .all(`${id}/%`, `${id}/%`);
294
+ return rows.length > 0;
295
+ }
296
+ // Enabled providers that carry a key — the set written to auth.json and used to
297
+ // build the opencode.json provider block.
298
+ export function enabledProvidersForRun() {
299
+ return listProviders().filter((p) => p.enabled && p.apiKey.length > 0);
300
+ }
301
+ // True once at least one enabled provider with a key exists and both global
302
+ // models are set. Until then, mention runs are blocked with an actionable note.
303
+ export function hasUsableConfig() {
304
+ const g = getGlobalSettings();
305
+ return enabledProvidersForRun().length > 0 && g.planModel !== "" && g.buildModel !== "";
306
+ }
307
+ //# sourceMappingURL=global-settings-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-settings-store.js","sourceRoot":"","sources":["../src/global-settings-store.ts"],"names":[],"mappings":"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"}
package/dist/help.js ADDED
@@ -0,0 +1,41 @@
1
+ import { log } from "./logger.js";
2
+ import { getPlatform } from "./platform/index.js";
3
+ import { AUTO_FEATURES, autoFeatureMeta } from "./auto-features.js";
4
+ // /help (work item #95): reply-only command that posts the list of command
5
+ // tokens and dispatches no run. Authorization (the configured trigger policy,
6
+ // refined by per-project rules) is enforced by webhook.ts before this is
7
+ // called — no local check here. The auto-* tokens are read from AUTO_FEATURES
8
+ // so the reply cannot drift from the parser's feature set.
9
+ export function buildHelpBody() {
10
+ const autoTokens = AUTO_FEATURES.map((f) => `\`${autoFeatureMeta(f).token}\``).join(", ");
11
+ return [
12
+ "📖 **DevBot commands** — @mention me with any of these tokens; they can be combined.",
13
+ "",
14
+ "- `/build` — build mode: implement and commit on the work branch (default is plan mode)",
15
+ "- `/base <branch>` — set this work item's MR target branch (first run only)",
16
+ "- `/branch <name>` — name this work item's work branch (first naming only)",
17
+ "- `/agent <name> <segment>` — route a prompt segment to a subagent",
18
+ "- `/push` — push-only task; with `/build`, force the build's push",
19
+ "- `/mr` — publish and open/update the MR; with `/build`, force push + MR",
20
+ "- `/force-push` — force-push-only task; with `/build`, force-push after the run",
21
+ "- `/fix-conflicts` — re-run the conflict resolver on this work item's branch",
22
+ `- ${autoTokens} \`[on|off]\` — query or override one auto-* feature for this work item`,
23
+ "- `/auto [on|off]` — all four auto-* features at once; `/ask` = `/auto off`",
24
+ "- `/reset` — destroy this work item's workspace volumes",
25
+ "- `/stop` — cancel this work item's running and queued tasks",
26
+ "- `/status` — show this work item's queue and effective auto-* settings",
27
+ "- `/help` — show this list",
28
+ ].join("\n");
29
+ }
30
+ // Posts the command list in-thread when the forge supports it, top-level
31
+ // otherwise (the same mechanism the contextual auto-* acknowledgements use).
32
+ // triggeringNoteId is undefined on the work-item-creation path (no note).
33
+ export async function handleHelpNote(projectId, workItemNumber, triggeringNoteId) {
34
+ try {
35
+ await getPlatform().workItems.postErrorReply(projectId, workItemNumber, triggeringNoteId, buildHelpBody());
36
+ }
37
+ catch (e) {
38
+ log.warn("help reply failed", { projectId, workItemNumber, err: e });
39
+ }
40
+ }
41
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEpE,2EAA2E;AAC3E,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAC9E,2DAA2D;AAE3D,MAAM,UAAU,aAAa;IAC3B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,OAAO;QACL,sFAAsF;QACtF,EAAE;QACF,yFAAyF;QACzF,6EAA6E;QAC7E,4EAA4E;QAC5E,oEAAoE;QACpE,mEAAmE;QACnE,0EAA0E;QAC1E,iFAAiF;QACjF,8EAA8E;QAC9E,KAAK,UAAU,yEAAyE;QACxF,6EAA6E;QAC7E,yDAAyD;QACzD,8DAA8D;QAC9D,yEAAyE;QACzE,4BAA4B;KAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,yEAAyE;AACzE,6EAA6E;AAC7E,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,cAAsB,EACtB,gBAAoC;IAEpC,IAAI,CAAC;QACH,MAAM,WAAW,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7G,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,CAAU,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ // Content-Security-Policy directives for the app. Extracted so a self-check can
2
+ // assert the policy stays in sync with the client's outbound requests: the
3
+ // Global settings panel fetches the models.dev provider registry from the
4
+ // browser, so connect-src must allow https://models.dev (fetch falls back to
5
+ // default-src when connect-src is absent, which would block it).
6
+ //
7
+ // Typed as a plain record: helmet's ContentSecurityPolicyDirectives type is not
8
+ // exported, and a record is structurally compatible with its `directives` field.
9
+ export const CSP_DIRECTIVES = {
10
+ defaultSrc: ["'self'"],
11
+ scriptSrc: ["'self'"],
12
+ styleSrc: ["'self'", "'unsafe-inline'"],
13
+ connectSrc: ["'self'", "https://models.dev"],
14
+ };
15
+ //# sourceMappingURL=http-csp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-csp.js","sourceRoot":"","sources":["../src/http-csp.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2EAA2E;AAC3E,0EAA0E;AAC1E,6EAA6E;AAC7E,iEAAiE;AACjE,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,UAAU,EAAE,CAAC,QAAQ,CAAC;IACtB,SAAS,EAAE,CAAC,QAAQ,CAAC;IACrB,QAAQ,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACvC,UAAU,EAAE,CAAC,QAAQ,EAAE,oBAAoB,CAAC;CAC7C,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { log } from "./logger.js";
2
+ import { redact } from "./redact.js";
3
+ import { readCookieWithReason, SESSION_COOKIE } from "./cookie.js";
4
+ export function logReq(req, level, msg, extra) {
5
+ const base = { ip: req.ip, method: req.method, path: req.path };
6
+ if (extra && "err" in extra && extra.err instanceof Error) {
7
+ const { err, ...rest } = extra;
8
+ log[level](msg, { ...base, ...rest, message: redact(err.message), stack: err.stack ? redact(err.stack) : undefined });
9
+ }
10
+ else {
11
+ log[level](msg, { ...base, ...(extra ?? {}) });
12
+ }
13
+ }
14
+ export function readSession(req) {
15
+ const raw = req.cookies?.[SESSION_COOKIE];
16
+ const { payload, reason } = readCookieWithReason(raw);
17
+ if (!payload) {
18
+ // ponytail: "missing" bumped to info for audit (every 401 visible at
19
+ // default LOG_LEVEL=info). Tampered/expired/decrypt-fail stay at warn
20
+ // (real signal). Revisit if bot traffic makes this noisy.
21
+ const level = reason === "missing" ? "info" : "warn";
22
+ log[level]("session cookie rejected", {
23
+ reason,
24
+ ip: req.ip,
25
+ path: req.path,
26
+ hasCookie: !!raw,
27
+ });
28
+ }
29
+ return payload;
30
+ }
31
+ export function requireSession(handler) {
32
+ return (req, res) => {
33
+ const session = readSession(req);
34
+ if (!session)
35
+ return res.status(401).json({ error: "unauthorized" });
36
+ req.session = session;
37
+ return handler(req, res);
38
+ };
39
+ }
40
+ //# sourceMappingURL=http-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-util.js","sourceRoot":"","sources":["../src/http-util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAuB,MAAM,aAAa,CAAC;AASxF,MAAM,UAAU,MAAM,CAAC,GAAoB,EAAE,KAAe,EAAE,GAAW,EAAE,KAA+B;IACxG,MAAM,IAAI,GAA4B,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACzF,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,YAAY,KAAK,EAAE,CAAC;QAC1D,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;QAC/B,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACxH,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAoB;IAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,cAAc,CAAuB,CAAC;IAChE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,qEAAqE;QACrE,wEAAwE;QACxE,4DAA4D;QAC5D,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,GAAG,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE;YACpC,MAAM;YACN,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,CAAC,CAAC,GAAG;SACjB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD,MAAM,UAAU,cAAc,CAAC,OAA4D;IACzF,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAClB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACpE,GAAqD,CAAC,OAAO,GAAG,OAAO,CAAC;QACzE,OAAO,OAAO,CAAC,GAAiB,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC;AACJ,CAAC"}