tinybeeai 0.0.0-stage → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1034) hide show
  1. package/.railway/railway.ts +83 -0
  2. package/.railway/tsconfig.json +13 -0
  3. package/AGENTS.md +102 -0
  4. package/Dockerfile +108 -0
  5. package/LICENSE +21 -0
  6. package/README.md +275 -2
  7. package/bin/localdost.js +29 -0
  8. package/bin/tinybeeai.js +28 -0
  9. package/compose.yml +63 -0
  10. package/demo/payloads/ci_failure.json +46 -0
  11. package/demo/payloads/outage.json +18 -0
  12. package/demo/payloads/pr_comment_edited.json +50 -0
  13. package/demo/payloads/pr_merged.json +80 -0
  14. package/demo/payloads/pr_opened.json +69 -0
  15. package/demo/payloads/pr_synchronize.json +69 -0
  16. package/demo/payloads/ticket_created.json +138 -0
  17. package/demo/sample-app/playwright.config.ts +20 -0
  18. package/demo/sample-app/server.ts +163 -0
  19. package/demo/sample-app/tests/checkout.spec.ts +13 -0
  20. package/demo/sample-app/tests/smoke.spec.ts +8 -0
  21. package/dist/agent/approval-retries.js +59 -0
  22. package/dist/agent/approval-retries.js.map +1 -0
  23. package/dist/agent/approvals.js +390 -0
  24. package/dist/agent/approvals.js.map +1 -0
  25. package/dist/agent/chat-bridge.js +154 -0
  26. package/dist/agent/chat-bridge.js.map +1 -0
  27. package/dist/agent/chat-lead.js +475 -0
  28. package/dist/agent/chat-lead.js.map +1 -0
  29. package/dist/agent/chat-loop.js +106 -0
  30. package/dist/agent/chat-loop.js.map +1 -0
  31. package/dist/agent/chat-mcp.js +49 -0
  32. package/dist/agent/chat-mcp.js.map +1 -0
  33. package/dist/agent/chat-tool-blocks.js +453 -0
  34. package/dist/agent/chat-tool-blocks.js.map +1 -0
  35. package/dist/agent/chat-view.js +94 -0
  36. package/dist/agent/chat-view.js.map +1 -0
  37. package/dist/agent/chat-views.js +781 -0
  38. package/dist/agent/chat-views.js.map +1 -0
  39. package/dist/agent/chat.js +1703 -0
  40. package/dist/agent/chat.js.map +1 -0
  41. package/dist/agent/destinations.js +150 -0
  42. package/dist/agent/destinations.js.map +1 -0
  43. package/dist/agent/llm-cli.js +451 -0
  44. package/dist/agent/llm-cli.js.map +1 -0
  45. package/dist/agent/llm-codex.js +493 -0
  46. package/dist/agent/llm-codex.js.map +1 -0
  47. package/dist/agent/llm-openai.js +211 -0
  48. package/dist/agent/llm-openai.js.map +1 -0
  49. package/dist/agent/llm.js +1464 -0
  50. package/dist/agent/llm.js.map +1 -0
  51. package/dist/agent/memory.js +33 -0
  52. package/dist/agent/memory.js.map +1 -0
  53. package/dist/agent/mock-views.js +93 -0
  54. package/dist/agent/mock-views.js.map +1 -0
  55. package/dist/agent/model-availability.js +207 -0
  56. package/dist/agent/model-availability.js.map +1 -0
  57. package/dist/agent/model-errors.js +188 -0
  58. package/dist/agent/model-errors.js.map +1 -0
  59. package/dist/agent/model-guard.js +311 -0
  60. package/dist/agent/model-guard.js.map +1 -0
  61. package/dist/agent/prompts.js +374 -0
  62. package/dist/agent/prompts.js.map +1 -0
  63. package/dist/agent/qa-lenses/qa-auth.md +32 -0
  64. package/dist/agent/qa-lenses/qa-check-then-act.md +33 -0
  65. package/dist/agent/qa-lenses/qa-control-has-no-effect.md +32 -0
  66. package/dist/agent/qa-lenses/qa-dates.md +31 -0
  67. package/dist/agent/qa-lenses/qa-double-submit.md +34 -0
  68. package/dist/agent/qa-lenses/qa-feature-flag.md +29 -0
  69. package/dist/agent/qa-lenses/qa-migration.md +35 -0
  70. package/dist/agent/qa-lenses/qa-money.md +38 -0
  71. package/dist/agent/qa-lenses/qa-response-shape-break.md +33 -0
  72. package/dist/agent/qa-lenses/qa-validation.md +29 -0
  73. package/dist/agent/qa-prompts.js +660 -0
  74. package/dist/agent/qa-prompts.js.map +1 -0
  75. package/dist/agent/reasoning.js +55 -0
  76. package/dist/agent/reasoning.js.map +1 -0
  77. package/dist/agent/redact.js +48 -0
  78. package/dist/agent/redact.js.map +1 -0
  79. package/dist/agent/rules.js +927 -0
  80. package/dist/agent/rules.js.map +1 -0
  81. package/dist/agent/runs.js +440 -0
  82. package/dist/agent/runs.js.map +1 -0
  83. package/dist/agent/send-retry.js +62 -0
  84. package/dist/agent/send-retry.js.map +1 -0
  85. package/dist/agent/team-notes.js +288 -0
  86. package/dist/agent/team-notes.js.map +1 -0
  87. package/dist/agent/token-meter.js +31 -0
  88. package/dist/agent/token-meter.js.map +1 -0
  89. package/dist/agent/triage.js +506 -0
  90. package/dist/agent/triage.js.map +1 -0
  91. package/dist/api.js +1047 -0
  92. package/dist/api.js.map +1 -0
  93. package/dist/approval-targets.js +107 -0
  94. package/dist/approval-targets.js.map +1 -0
  95. package/dist/bee/cloudflared.js +108 -0
  96. package/dist/bee/cloudflared.js.map +1 -0
  97. package/dist/bee/health.js +99 -0
  98. package/dist/bee/health.js.map +1 -0
  99. package/dist/bee/hive-client.js +75 -0
  100. package/dist/bee/hive-client.js.map +1 -0
  101. package/dist/bee/identity.js +39 -0
  102. package/dist/bee/identity.js.map +1 -0
  103. package/dist/bee/models.js +510 -0
  104. package/dist/bee/models.js.map +1 -0
  105. package/dist/bee/pairing.js +351 -0
  106. package/dist/bee/pairing.js.map +1 -0
  107. package/dist/bee/relay-client.js +50 -0
  108. package/dist/bee/relay-client.js.map +1 -0
  109. package/dist/bee/routes.js +214 -0
  110. package/dist/bee/routes.js.map +1 -0
  111. package/dist/bee/setup-page.js +223 -0
  112. package/dist/bee/setup-page.js.map +1 -0
  113. package/dist/bee/state.js +41 -0
  114. package/dist/bee/state.js.map +1 -0
  115. package/dist/bee/status.js +117 -0
  116. package/dist/bee/status.js.map +1 -0
  117. package/dist/bee/tunnel-manager.js +245 -0
  118. package/dist/bee/tunnel-manager.js.map +1 -0
  119. package/dist/bee/updater.js +268 -0
  120. package/dist/bee/updater.js.map +1 -0
  121. package/dist/boot.js +41 -0
  122. package/dist/boot.js.map +1 -0
  123. package/dist/call/index.js +145 -0
  124. package/dist/call/index.js.map +1 -0
  125. package/dist/case-folders.js +294 -0
  126. package/dist/case-folders.js.map +1 -0
  127. package/dist/cases.js +554 -0
  128. package/dist/cases.js.map +1 -0
  129. package/dist/chat-blocks.js +709 -0
  130. package/dist/chat-blocks.js.map +1 -0
  131. package/dist/chat-parse-util.js +38 -0
  132. package/dist/chat-parse-util.js.map +1 -0
  133. package/dist/chat-results.js +96 -0
  134. package/dist/chat-results.js.map +1 -0
  135. package/dist/chat-stats.js +193 -0
  136. package/dist/chat-stats.js.map +1 -0
  137. package/dist/chat-view-specs.js +186 -0
  138. package/dist/chat-view-specs.js.map +1 -0
  139. package/dist/cli/doctor-ops.js +361 -0
  140. package/dist/cli/doctor-ops.js.map +1 -0
  141. package/dist/cli/doctor.js +289 -0
  142. package/dist/cli/doctor.js.map +1 -0
  143. package/dist/cli/dogfood.js +70 -0
  144. package/dist/cli/dogfood.js.map +1 -0
  145. package/dist/cli/env-file.js +34 -0
  146. package/dist/cli/env-file.js.map +1 -0
  147. package/dist/cli/eval-chat-cases.js +359 -0
  148. package/dist/cli/eval-chat-cases.js.map +1 -0
  149. package/dist/cli/eval-chat-results.js +85 -0
  150. package/dist/cli/eval-chat-results.js.map +1 -0
  151. package/dist/cli/eval-chat.js +508 -0
  152. package/dist/cli/eval-chat.js.map +1 -0
  153. package/dist/cli/eval-designer.js +67 -0
  154. package/dist/cli/eval-designer.js.map +1 -0
  155. package/dist/cli/eval-qa-review.js +284 -0
  156. package/dist/cli/eval-qa-review.js.map +1 -0
  157. package/dist/cli/golden-export.js +35 -0
  158. package/dist/cli/golden-export.js.map +1 -0
  159. package/dist/cli/index.js +90 -0
  160. package/dist/cli/index.js.map +1 -0
  161. package/dist/cli/init.js +746 -0
  162. package/dist/cli/init.js.map +1 -0
  163. package/dist/cli/scan-repo.js +199 -0
  164. package/dist/cli/scan-repo.js.map +1 -0
  165. package/dist/cli/seed.js +108 -0
  166. package/dist/cli/seed.js.map +1 -0
  167. package/dist/cli/tinybee.js +247 -0
  168. package/dist/cli/tinybee.js.map +1 -0
  169. package/dist/config.js +138 -0
  170. package/dist/config.js.map +1 -0
  171. package/dist/connect/aivision-local.js +833 -0
  172. package/dist/connect/aivision-local.js.map +1 -0
  173. package/dist/connect/aivision-token.js +84 -0
  174. package/dist/connect/aivision-token.js.map +1 -0
  175. package/dist/connect/crypto.js +65 -0
  176. package/dist/connect/crypto.js.map +1 -0
  177. package/dist/connect/deps.js +110 -0
  178. package/dist/connect/deps.js.map +1 -0
  179. package/dist/connect/engines.js +144 -0
  180. package/dist/connect/engines.js.map +1 -0
  181. package/dist/connect/github-access.js +74 -0
  182. package/dist/connect/github-access.js.map +1 -0
  183. package/dist/connect/github-app.js +129 -0
  184. package/dist/connect/github-app.js.map +1 -0
  185. package/dist/connect/index.js +9 -0
  186. package/dist/connect/index.js.map +1 -0
  187. package/dist/connect/model-choices.js +201 -0
  188. package/dist/connect/model-choices.js.map +1 -0
  189. package/dist/connect/providers.js +900 -0
  190. package/dist/connect/providers.js.map +1 -0
  191. package/dist/connect/readiness.js +232 -0
  192. package/dist/connect/readiness.js.map +1 -0
  193. package/dist/connect/redact.js +16 -0
  194. package/dist/connect/redact.js.map +1 -0
  195. package/dist/connect/registry.js +406 -0
  196. package/dist/connect/registry.js.map +1 -0
  197. package/dist/connect/store.js +283 -0
  198. package/dist/connect/store.js.map +1 -0
  199. package/dist/connect/tunnel.js +134 -0
  200. package/dist/connect/tunnel.js.map +1 -0
  201. package/dist/connect/types.js +8 -0
  202. package/dist/connect/types.js.map +1 -0
  203. package/dist/connections/index.js +5 -0
  204. package/dist/connections/index.js.map +1 -0
  205. package/dist/connections/manager.js +223 -0
  206. package/dist/connections/manager.js.map +1 -0
  207. package/dist/connections/presets.js +264 -0
  208. package/dist/connections/presets.js.map +1 -0
  209. package/dist/connections/store.js +132 -0
  210. package/dist/connections/store.js.map +1 -0
  211. package/dist/connections/tools.js +206 -0
  212. package/dist/connections/tools.js.map +1 -0
  213. package/dist/db-schema.js +355 -0
  214. package/dist/db-schema.js.map +1 -0
  215. package/dist/db.js +379 -0
  216. package/dist/db.js.map +1 -0
  217. package/dist/delivery.js +49 -0
  218. package/dist/delivery.js.map +1 -0
  219. package/dist/deploy-wait.js +701 -0
  220. package/dist/deploy-wait.js.map +1 -0
  221. package/dist/disk.js +243 -0
  222. package/dist/disk.js.map +1 -0
  223. package/dist/dot-health.js +966 -0
  224. package/dist/dot-health.js.map +1 -0
  225. package/dist/dot-remove.js +246 -0
  226. package/dist/dot-remove.js.map +1 -0
  227. package/dist/events.js +38 -0
  228. package/dist/events.js.map +1 -0
  229. package/dist/evidence-pack.js +423 -0
  230. package/dist/evidence-pack.js.map +1 -0
  231. package/dist/flows/answers.js +289 -0
  232. package/dist/flows/answers.js.map +1 -0
  233. package/dist/flows/change.js +811 -0
  234. package/dist/flows/change.js.map +1 -0
  235. package/dist/flows/checkStatus.js +524 -0
  236. package/dist/flows/checkStatus.js.map +1 -0
  237. package/dist/flows/ci.js +236 -0
  238. package/dist/flows/ci.js.map +1 -0
  239. package/dist/flows/ciFailure.js +76 -0
  240. package/dist/flows/ciFailure.js.map +1 -0
  241. package/dist/flows/common.js +522 -0
  242. package/dist/flows/common.js.map +1 -0
  243. package/dist/flows/default-branch.js +29 -0
  244. package/dist/flows/default-branch.js.map +1 -0
  245. package/dist/flows/defectDraft.js +447 -0
  246. package/dist/flows/defectDraft.js.map +1 -0
  247. package/dist/flows/defects.js +623 -0
  248. package/dist/flows/defects.js.map +1 -0
  249. package/dist/flows/digest.js +295 -0
  250. package/dist/flows/digest.js.map +1 -0
  251. package/dist/flows/impact.js +82 -0
  252. package/dist/flows/impact.js.map +1 -0
  253. package/dist/flows/index.js +23 -0
  254. package/dist/flows/index.js.map +1 -0
  255. package/dist/flows/intent-sources.js +72 -0
  256. package/dist/flows/intent-sources.js.map +1 -0
  257. package/dist/flows/mergeCases.js +169 -0
  258. package/dist/flows/mergeCases.js.map +1 -0
  259. package/dist/flows/nightlyRun.js +82 -0
  260. package/dist/flows/nightlyRun.js.map +1 -0
  261. package/dist/flows/outage.js +64 -0
  262. package/dist/flows/outage.js.map +1 -0
  263. package/dist/flows/postMerge.js +5 -0
  264. package/dist/flows/postMerge.js.map +1 -0
  265. package/dist/flows/prCheck.js +5 -0
  266. package/dist/flows/prCheck.js.map +1 -0
  267. package/dist/flows/prTarget.js +66 -0
  268. package/dist/flows/prTarget.js.map +1 -0
  269. package/dist/flows/qa.js +363 -0
  270. package/dist/flows/qa.js.map +1 -0
  271. package/dist/flows/questions.js +160 -0
  272. package/dist/flows/questions.js.map +1 -0
  273. package/dist/flows/recovery.js +64 -0
  274. package/dist/flows/recovery.js.map +1 -0
  275. package/dist/flows/rerun.js +50 -0
  276. package/dist/flows/rerun.js.map +1 -0
  277. package/dist/flows/testDesign.js +294 -0
  278. package/dist/flows/testDesign.js.map +1 -0
  279. package/dist/flows/testDesignJob.js +46 -0
  280. package/dist/flows/testDesignJob.js.map +1 -0
  281. package/dist/flows/testRepo.js +228 -0
  282. package/dist/flows/testRepo.js.map +1 -0
  283. package/dist/flows/testSavings.js +381 -0
  284. package/dist/flows/testSavings.js.map +1 -0
  285. package/dist/flows/testStatus.js +343 -0
  286. package/dist/flows/testStatus.js.map +1 -0
  287. package/dist/flows/ticketContext.js +425 -0
  288. package/dist/flows/ticketContext.js.map +1 -0
  289. package/dist/flows/ticketReview.js +249 -0
  290. package/dist/flows/ticketReview.js.map +1 -0
  291. package/dist/flows/ticks.js +73 -0
  292. package/dist/flows/ticks.js.map +1 -0
  293. package/dist/hive/admin.js +122 -0
  294. package/dist/hive/admin.js.map +1 -0
  295. package/dist/hive/auth.js +130 -0
  296. package/dist/hive/auth.js.map +1 -0
  297. package/dist/hive/billing.js +278 -0
  298. package/dist/hive/billing.js.map +1 -0
  299. package/dist/hive/config.js +63 -0
  300. package/dist/hive/config.js.map +1 -0
  301. package/dist/hive/db.js +186 -0
  302. package/dist/hive/db.js.map +1 -0
  303. package/dist/hive/embed.js +76 -0
  304. package/dist/hive/embed.js.map +1 -0
  305. package/dist/hive/errors.js +17 -0
  306. package/dist/hive/errors.js.map +1 -0
  307. package/dist/hive/google.js +75 -0
  308. package/dist/hive/google.js.map +1 -0
  309. package/dist/hive/index.js +25 -0
  310. package/dist/hive/index.js.map +1 -0
  311. package/dist/hive/jwt.js +57 -0
  312. package/dist/hive/jwt.js.map +1 -0
  313. package/dist/hive/keys.js +61 -0
  314. package/dist/hive/keys.js.map +1 -0
  315. package/dist/hive/mail.js +27 -0
  316. package/dist/hive/mail.js.map +1 -0
  317. package/dist/hive/native-push.js +255 -0
  318. package/dist/hive/native-push.js.map +1 -0
  319. package/dist/hive/pairing.js +342 -0
  320. package/dist/hive/pairing.js.map +1 -0
  321. package/dist/hive/presence.js +121 -0
  322. package/dist/hive/presence.js.map +1 -0
  323. package/dist/hive/push.js +185 -0
  324. package/dist/hive/push.js.map +1 -0
  325. package/dist/hive/relay.js +205 -0
  326. package/dist/hive/relay.js.map +1 -0
  327. package/dist/hive/routes.js +228 -0
  328. package/dist/hive/routes.js.map +1 -0
  329. package/dist/hive/server.js +12 -0
  330. package/dist/hive/server.js.map +1 -0
  331. package/dist/hive/session.js +28 -0
  332. package/dist/hive/session.js.map +1 -0
  333. package/dist/hive/tenants.js +287 -0
  334. package/dist/hive/tenants.js.map +1 -0
  335. package/dist/hive/tunnel/cloudflare.js +160 -0
  336. package/dist/hive/tunnel/cloudflare.js.map +1 -0
  337. package/dist/hive/tunnel/mock.js +52 -0
  338. package/dist/hive/tunnel/mock.js.map +1 -0
  339. package/dist/hive/tunnel/provider.js +19 -0
  340. package/dist/hive/tunnel/provider.js.map +1 -0
  341. package/dist/hive/updates.js +61 -0
  342. package/dist/hive/updates.js.map +1 -0
  343. package/dist/http-error.js +11 -0
  344. package/dist/http-error.js.map +1 -0
  345. package/dist/impact/classify.js +226 -0
  346. package/dist/impact/classify.js.map +1 -0
  347. package/dist/impact/find.js +259 -0
  348. package/dist/impact/find.js.map +1 -0
  349. package/dist/impact/pr.js +54 -0
  350. package/dist/impact/pr.js.map +1 -0
  351. package/dist/impact/store.js +365 -0
  352. package/dist/impact/store.js.map +1 -0
  353. package/dist/impact/text.js +158 -0
  354. package/dist/impact/text.js.map +1 -0
  355. package/dist/index.js +288 -0
  356. package/dist/index.js.map +1 -0
  357. package/dist/integrations/adf.js +397 -0
  358. package/dist/integrations/adf.js.map +1 -0
  359. package/dist/integrations/bot-marker.js +103 -0
  360. package/dist/integrations/bot-marker.js.map +1 -0
  361. package/dist/integrations/github-issues.js +705 -0
  362. package/dist/integrations/github-issues.js.map +1 -0
  363. package/dist/integrations/github.js +1284 -0
  364. package/dist/integrations/github.js.map +1 -0
  365. package/dist/integrations/issue-create.js +60 -0
  366. package/dist/integrations/issue-create.js.map +1 -0
  367. package/dist/integrations/jira.js +279 -0
  368. package/dist/integrations/jira.js.map +1 -0
  369. package/dist/integrations/linear.js +273 -0
  370. package/dist/integrations/linear.js.map +1 -0
  371. package/dist/integrations/own-identity-warm.js +47 -0
  372. package/dist/integrations/own-identity-warm.js.map +1 -0
  373. package/dist/integrations/own-identity.js +39 -0
  374. package/dist/integrations/own-identity.js.map +1 -0
  375. package/dist/integrations/status-change.js +42 -0
  376. package/dist/integrations/status-change.js.map +1 -0
  377. package/dist/lead-defects.js +202 -0
  378. package/dist/lead-defects.js.map +1 -0
  379. package/dist/lead-digest.js +333 -0
  380. package/dist/lead-digest.js.map +1 -0
  381. package/dist/lead-release.js +286 -0
  382. package/dist/lead-release.js.map +1 -0
  383. package/dist/lead.js +328 -0
  384. package/dist/lead.js.map +1 -0
  385. package/dist/legacy-names.js +51 -0
  386. package/dist/legacy-names.js.map +1 -0
  387. package/dist/limits.js +44 -0
  388. package/dist/limits.js.map +1 -0
  389. package/dist/link-trust.js +224 -0
  390. package/dist/link-trust.js.map +1 -0
  391. package/dist/links.js +219 -0
  392. package/dist/links.js.map +1 -0
  393. package/dist/loopback.js +35 -0
  394. package/dist/loopback.js.map +1 -0
  395. package/dist/model-cap.js +60 -0
  396. package/dist/model-cap.js.map +1 -0
  397. package/dist/model-usage.js +173 -0
  398. package/dist/model-usage.js.map +1 -0
  399. package/dist/monitor/backfill.js +39 -0
  400. package/dist/monitor/backfill.js.map +1 -0
  401. package/dist/monitor/browser-probe.js +198 -0
  402. package/dist/monitor/browser-probe.js.map +1 -0
  403. package/dist/monitor/catch-up.js +31 -0
  404. package/dist/monitor/catch-up.js.map +1 -0
  405. package/dist/monitor/pollers.js +1606 -0
  406. package/dist/monitor/pollers.js.map +1 -0
  407. package/dist/monitor/probes.js +178 -0
  408. package/dist/monitor/probes.js.map +1 -0
  409. package/dist/monitor/self-health.js +228 -0
  410. package/dist/monitor/self-health.js.map +1 -0
  411. package/dist/monitor/statuspage.js +105 -0
  412. package/dist/monitor/statuspage.js.map +1 -0
  413. package/dist/nightly-scheduler.js +127 -0
  414. package/dist/nightly-scheduler.js.map +1 -0
  415. package/dist/nightly.js +141 -0
  416. package/dist/nightly.js.map +1 -0
  417. package/dist/notify/headline.js +114 -0
  418. package/dist/notify/headline.js.map +1 -0
  419. package/dist/notify/push.js +174 -0
  420. package/dist/notify/push.js.map +1 -0
  421. package/dist/object-cards.js +585 -0
  422. package/dist/object-cards.js.map +1 -0
  423. package/dist/object-links.js +47 -0
  424. package/dist/object-links.js.map +1 -0
  425. package/dist/onboarding-checks.js +141 -0
  426. package/dist/onboarding-checks.js.map +1 -0
  427. package/dist/onboarding.js +401 -0
  428. package/dist/onboarding.js.map +1 -0
  429. package/dist/path-filters.js +62 -0
  430. package/dist/path-filters.js.map +1 -0
  431. package/dist/phone/alerts.js +67 -0
  432. package/dist/phone/alerts.js.map +1 -0
  433. package/dist/phone/auth.js +240 -0
  434. package/dist/phone/auth.js.map +1 -0
  435. package/dist/phone/pairing.js +442 -0
  436. package/dist/phone/pairing.js.map +1 -0
  437. package/dist/phone/prefs.js +27 -0
  438. package/dist/phone/prefs.js.map +1 -0
  439. package/dist/phone/tailscale.js +161 -0
  440. package/dist/phone/tailscale.js.map +1 -0
  441. package/dist/pr-scope.js +441 -0
  442. package/dist/pr-scope.js.map +1 -0
  443. package/dist/proc.js +156 -0
  444. package/dist/proc.js.map +1 -0
  445. package/dist/profile/cache.js +108 -0
  446. package/dist/profile/cache.js.map +1 -0
  447. package/dist/profile/ci.js +216 -0
  448. package/dist/profile/ci.js.map +1 -0
  449. package/dist/profile/index.js +8 -0
  450. package/dist/profile/index.js.map +1 -0
  451. package/dist/profile/job.js +135 -0
  452. package/dist/profile/job.js.map +1 -0
  453. package/dist/profile/queries/go-tags.scm +47 -0
  454. package/dist/profile/queries/java-tags.scm +25 -0
  455. package/dist/profile/queries/javascript-tags.scm +104 -0
  456. package/dist/profile/queries/python-tags.scm +19 -0
  457. package/dist/profile/queries/typescript-tags.scm +28 -0
  458. package/dist/profile/scan-thread.js +42 -0
  459. package/dist/profile/scan-thread.js.map +1 -0
  460. package/dist/profile/scan-worker.js +16 -0
  461. package/dist/profile/scan-worker.js.map +1 -0
  462. package/dist/profile/scan.js +351 -0
  463. package/dist/profile/scan.js.map +1 -0
  464. package/dist/profile/stack.js +528 -0
  465. package/dist/profile/stack.js.map +1 -0
  466. package/dist/profile/store.js +35 -0
  467. package/dist/profile/store.js.map +1 -0
  468. package/dist/profile/tests.js +399 -0
  469. package/dist/profile/tests.js.map +1 -0
  470. package/dist/queue.js +350 -0
  471. package/dist/queue.js.map +1 -0
  472. package/dist/refs.js +756 -0
  473. package/dist/refs.js.map +1 -0
  474. package/dist/release-notes.js +272 -0
  475. package/dist/release-notes.js.map +1 -0
  476. package/dist/reports/build.js +243 -0
  477. package/dist/reports/build.js.map +1 -0
  478. package/dist/reports/index.js +211 -0
  479. package/dist/reports/index.js.map +1 -0
  480. package/dist/reports/store.js +150 -0
  481. package/dist/reports/store.js.map +1 -0
  482. package/dist/reports/ticket-titles.js +124 -0
  483. package/dist/reports/ticket-titles.js.map +1 -0
  484. package/dist/reports/trace-map.js +1278 -0
  485. package/dist/reports/trace-map.js.map +1 -0
  486. package/dist/reports/traceability.js +422 -0
  487. package/dist/reports/traceability.js.map +1 -0
  488. package/dist/repos/mirror.js +356 -0
  489. package/dist/repos/mirror.js.map +1 -0
  490. package/dist/repos-github.js +108 -0
  491. package/dist/repos-github.js.map +1 -0
  492. package/dist/repos.js +891 -0
  493. package/dist/repos.js.map +1 -0
  494. package/dist/review/backend-anthropic.js +90 -0
  495. package/dist/review/backend-anthropic.js.map +1 -0
  496. package/dist/review/backend-cli.js +248 -0
  497. package/dist/review/backend-cli.js.map +1 -0
  498. package/dist/review/backend-codex.js +81 -0
  499. package/dist/review/backend-codex.js.map +1 -0
  500. package/dist/review/backend-mock.js +686 -0
  501. package/dist/review/backend-mock.js.map +1 -0
  502. package/dist/review/backend-only.js +168 -0
  503. package/dist/review/backend-only.js.map +1 -0
  504. package/dist/review/backend.js +105 -0
  505. package/dist/review/backend.js.map +1 -0
  506. package/dist/review/baseline/render-v1.js +483 -0
  507. package/dist/review/baseline/render-v1.js.map +1 -0
  508. package/dist/review/change-summary.js +197 -0
  509. package/dist/review/change-summary.js.map +1 -0
  510. package/dist/review/changelog.js +40 -0
  511. package/dist/review/changelog.js.map +1 -0
  512. package/dist/review/check.js +494 -0
  513. package/dist/review/check.js.map +1 -0
  514. package/dist/review/checkout.js +185 -0
  515. package/dist/review/checkout.js.map +1 -0
  516. package/dist/review/classify.js +178 -0
  517. package/dist/review/classify.js.map +1 -0
  518. package/dist/review/coverage.js +347 -0
  519. package/dist/review/coverage.js.map +1 -0
  520. package/dist/review/decision-eval.js +121 -0
  521. package/dist/review/decision-eval.js.map +1 -0
  522. package/dist/review/deliver.js +104 -0
  523. package/dist/review/deliver.js.map +1 -0
  524. package/dist/review/designer-eval.js +280 -0
  525. package/dist/review/designer-eval.js.map +1 -0
  526. package/dist/review/dogfood-digest.js +136 -0
  527. package/dist/review/dogfood-digest.js.map +1 -0
  528. package/dist/review/dogfood-eval.js +486 -0
  529. package/dist/review/dogfood-eval.js.map +1 -0
  530. package/dist/review/environment.js +109 -0
  531. package/dist/review/environment.js.map +1 -0
  532. package/dist/review/eval.js +405 -0
  533. package/dist/review/eval.js.map +1 -0
  534. package/dist/review/glob.js +110 -0
  535. package/dist/review/glob.js.map +1 -0
  536. package/dist/review/golden-export.js +219 -0
  537. package/dist/review/golden-export.js.map +1 -0
  538. package/dist/review/impact.js +406 -0
  539. package/dist/review/impact.js.map +1 -0
  540. package/dist/review/imports.js +542 -0
  541. package/dist/review/imports.js.map +1 -0
  542. package/dist/review/index.js +512 -0
  543. package/dist/review/index.js.map +1 -0
  544. package/dist/review/intent.js +128 -0
  545. package/dist/review/intent.js.map +1 -0
  546. package/dist/review/lenses.js +167 -0
  547. package/dist/review/lenses.js.map +1 -0
  548. package/dist/review/linked-tickets.js +293 -0
  549. package/dist/review/linked-tickets.js.map +1 -0
  550. package/dist/review/merge.js +370 -0
  551. package/dist/review/merge.js.map +1 -0
  552. package/dist/review/on-demand.js +218 -0
  553. package/dist/review/on-demand.js.map +1 -0
  554. package/dist/review/prompt-eval.js +299 -0
  555. package/dist/review/prompt-eval.js.map +1 -0
  556. package/dist/review/prompt-variants.js +37 -0
  557. package/dist/review/prompt-variants.js.map +1 -0
  558. package/dist/review/readability-eval.js +217 -0
  559. package/dist/review/readability-eval.js.map +1 -0
  560. package/dist/review/readability.js +295 -0
  561. package/dist/review/readability.js.map +1 -0
  562. package/dist/review/render.js +2409 -0
  563. package/dist/review/render.js.map +1 -0
  564. package/dist/review/repo.js +194 -0
  565. package/dist/review/repo.js.map +1 -0
  566. package/dist/review/report-plan.js +90 -0
  567. package/dist/review/report-plan.js.map +1 -0
  568. package/dist/review/routes.js +195 -0
  569. package/dist/review/routes.js.map +1 -0
  570. package/dist/review/run-summary.js +34 -0
  571. package/dist/review/run-summary.js.map +1 -0
  572. package/dist/review/run.js +245 -0
  573. package/dist/review/run.js.map +1 -0
  574. package/dist/review/scope.js +454 -0
  575. package/dist/review/scope.js.map +1 -0
  576. package/dist/review/security.js +432 -0
  577. package/dist/review/security.js.map +1 -0
  578. package/dist/review/signals.js +550 -0
  579. package/dist/review/signals.js.map +1 -0
  580. package/dist/review/specs.js +150 -0
  581. package/dist/review/specs.js.map +1 -0
  582. package/dist/review/ste.js +133 -0
  583. package/dist/review/ste.js.map +1 -0
  584. package/dist/review/test-repo-file.js +18 -0
  585. package/dist/review/test-repo-file.js.map +1 -0
  586. package/dist/review/test-repo-lines.js +53 -0
  587. package/dist/review/test-repo-lines.js.map +1 -0
  588. package/dist/review/ticket-on-demand.js +232 -0
  589. package/dist/review/ticket-on-demand.js.map +1 -0
  590. package/dist/review/yaml.js +298 -0
  591. package/dist/review/yaml.js.map +1 -0
  592. package/dist/room.js +361 -0
  593. package/dist/room.js.map +1 -0
  594. package/dist/routes/activity.js +219 -0
  595. package/dist/routes/activity.js.map +1 -0
  596. package/dist/routes/call.js +29 -0
  597. package/dist/routes/call.js.map +1 -0
  598. package/dist/routes/cards.js +40 -0
  599. package/dist/routes/cards.js.map +1 -0
  600. package/dist/routes/cases.js +133 -0
  601. package/dist/routes/cases.js.map +1 -0
  602. package/dist/routes/connect.js +268 -0
  603. package/dist/routes/connect.js.map +1 -0
  604. package/dist/routes/connection-presets.js +32 -0
  605. package/dist/routes/connection-presets.js.map +1 -0
  606. package/dist/routes/connections.js +177 -0
  607. package/dist/routes/connections.js.map +1 -0
  608. package/dist/routes/disk.js +19 -0
  609. package/dist/routes/disk.js.map +1 -0
  610. package/dist/routes/docs.js +71 -0
  611. package/dist/routes/docs.js.map +1 -0
  612. package/dist/routes/dot-suggest.js +1002 -0
  613. package/dist/routes/dot-suggest.js.map +1 -0
  614. package/dist/routes/evidence-pack.js +16 -0
  615. package/dist/routes/evidence-pack.js.map +1 -0
  616. package/dist/routes/health.js +121 -0
  617. package/dist/routes/health.js.map +1 -0
  618. package/dist/routes/impact.js +48 -0
  619. package/dist/routes/impact.js.map +1 -0
  620. package/dist/routes/lead.js +50 -0
  621. package/dist/routes/lead.js.map +1 -0
  622. package/dist/routes/links.js +13 -0
  623. package/dist/routes/links.js.map +1 -0
  624. package/dist/routes/markdown.js +62 -0
  625. package/dist/routes/markdown.js.map +1 -0
  626. package/dist/routes/onboarding.js +47 -0
  627. package/dist/routes/onboarding.js.map +1 -0
  628. package/dist/routes/phone.js +231 -0
  629. package/dist/routes/phone.js.map +1 -0
  630. package/dist/routes/release-notes.js +30 -0
  631. package/dist/routes/release-notes.js.map +1 -0
  632. package/dist/routes/reports.js +102 -0
  633. package/dist/routes/reports.js.map +1 -0
  634. package/dist/routes/repos.js +91 -0
  635. package/dist/routes/repos.js.map +1 -0
  636. package/dist/routes/review.js +283 -0
  637. package/dist/routes/review.js.map +1 -0
  638. package/dist/routes/roles.js +114 -0
  639. package/dist/routes/roles.js.map +1 -0
  640. package/dist/routes/room.js +21 -0
  641. package/dist/routes/room.js.map +1 -0
  642. package/dist/routes/runner.js +156 -0
  643. package/dist/routes/runner.js.map +1 -0
  644. package/dist/routes/runs.js +84 -0
  645. package/dist/routes/runs.js.map +1 -0
  646. package/dist/routes/setup.js +18 -0
  647. package/dist/routes/setup.js.map +1 -0
  648. package/dist/routes/test-runs.js +220 -0
  649. package/dist/routes/test-runs.js.map +1 -0
  650. package/dist/routes/ticket-status.js +17 -0
  651. package/dist/routes/ticket-status.js.map +1 -0
  652. package/dist/routes/traceability.js +143 -0
  653. package/dist/routes/traceability.js.map +1 -0
  654. package/dist/routes/true.js +142 -0
  655. package/dist/routes/true.js.map +1 -0
  656. package/dist/routes/updates.js +70 -0
  657. package/dist/routes/updates.js.map +1 -0
  658. package/dist/runner/adapters/index.js +12 -0
  659. package/dist/runner/adapters/index.js.map +1 -0
  660. package/dist/runner/adapters/playwright.js +68 -0
  661. package/dist/runner/adapters/playwright.js.map +1 -0
  662. package/dist/runner/aivision/cases.js +172 -0
  663. package/dist/runner/aivision/cases.js.map +1 -0
  664. package/dist/runner/aivision/cli.js +201 -0
  665. package/dist/runner/aivision/cli.js.map +1 -0
  666. package/dist/runner/aivision/index.js +281 -0
  667. package/dist/runner/aivision/index.js.map +1 -0
  668. package/dist/runner/aivision/server.js +394 -0
  669. package/dist/runner/aivision/server.js.map +1 -0
  670. package/dist/runner/aivision/shared.js +140 -0
  671. package/dist/runner/aivision/shared.js.map +1 -0
  672. package/dist/runner/artifact-cap.js +189 -0
  673. package/dist/runner/artifact-cap.js.map +1 -0
  674. package/dist/runner/artifacts.js +433 -0
  675. package/dist/runner/artifacts.js.map +1 -0
  676. package/dist/runner/command.js +564 -0
  677. package/dist/runner/command.js.map +1 -0
  678. package/dist/runner/copyfiles.js +221 -0
  679. package/dist/runner/copyfiles.js.map +1 -0
  680. package/dist/runner/engines.js +32 -0
  681. package/dist/runner/engines.js.map +1 -0
  682. package/dist/runner/evidence.js +114 -0
  683. package/dist/runner/evidence.js.map +1 -0
  684. package/dist/runner/host-env.js +160 -0
  685. package/dist/runner/host-env.js.map +1 -0
  686. package/dist/runner/index.js +1221 -0
  687. package/dist/runner/index.js.map +1 -0
  688. package/dist/runner/observe.js +603 -0
  689. package/dist/runner/observe.js.map +1 -0
  690. package/dist/runner/playwright-json.js +108 -0
  691. package/dist/runner/playwright-json.js.map +1 -0
  692. package/dist/runner/pwgen/exec.js +192 -0
  693. package/dist/runner/pwgen/exec.js.map +1 -0
  694. package/dist/runner/pwgen/explore.js +111 -0
  695. package/dist/runner/pwgen/explore.js.map +1 -0
  696. package/dist/runner/pwgen/index.js +423 -0
  697. package/dist/runner/pwgen/index.js.map +1 -0
  698. package/dist/runner/pwgen/propose.js +69 -0
  699. package/dist/runner/pwgen/propose.js.map +1 -0
  700. package/dist/runner/pwgen/source.js +632 -0
  701. package/dist/runner/pwgen/source.js.map +1 -0
  702. package/dist/runner/setup.js +222 -0
  703. package/dist/runner/setup.js.map +1 -0
  704. package/dist/runner/step-reporter.js +107 -0
  705. package/dist/runner/step-reporter.js.map +1 -0
  706. package/dist/runner/test-repo.js +326 -0
  707. package/dist/runner/test-repo.js.map +1 -0
  708. package/dist/runner/typed-value.js +46 -0
  709. package/dist/runner/typed-value.js.map +1 -0
  710. package/dist/runner/verify.js +133 -0
  711. package/dist/runner/verify.js.map +1 -0
  712. package/dist/runner/worktree.js +349 -0
  713. package/dist/runner/worktree.js.map +1 -0
  714. package/dist/sandbox.js +61 -0
  715. package/dist/sandbox.js.map +1 -0
  716. package/dist/server.js +262 -0
  717. package/dist/server.js.map +1 -0
  718. package/dist/shadow-week.js +126 -0
  719. package/dist/shadow-week.js.map +1 -0
  720. package/dist/shutdown.js +92 -0
  721. package/dist/shutdown.js.map +1 -0
  722. package/dist/slack/index.js +645 -0
  723. package/dist/slack/index.js.map +1 -0
  724. package/dist/stages/config.js +147 -0
  725. package/dist/stages/config.js.map +1 -0
  726. package/dist/stages/index.js +41 -0
  727. package/dist/stages/index.js.map +1 -0
  728. package/dist/suites.js +293 -0
  729. package/dist/suites.js.map +1 -0
  730. package/dist/target-url.js +116 -0
  731. package/dist/target-url.js.map +1 -0
  732. package/dist/test-runs.js +662 -0
  733. package/dist/test-runs.js.map +1 -0
  734. package/dist/ticket-keys.js +97 -0
  735. package/dist/ticket-keys.js.map +1 -0
  736. package/dist/ticket-supersede.js +105 -0
  737. package/dist/ticket-supersede.js.map +1 -0
  738. package/dist/tinybee/ed25519.js +99 -0
  739. package/dist/tinybee/ed25519.js.map +1 -0
  740. package/dist/tinybee/models-routes.js +19 -0
  741. package/dist/tinybee/models-routes.js.map +1 -0
  742. package/dist/tinybee/pair-payload.js +41 -0
  743. package/dist/tinybee/pair-payload.js.map +1 -0
  744. package/dist/tinybee/update-manifest.js +77 -0
  745. package/dist/tinybee/update-manifest.js.map +1 -0
  746. package/dist/tinybee/well-known.js +64 -0
  747. package/dist/tinybee/well-known.js.map +1 -0
  748. package/dist/tinybee/workflows/activity.js +23 -0
  749. package/dist/tinybee/workflows/activity.js.map +1 -0
  750. package/dist/tinybee/workflows/cron.js +210 -0
  751. package/dist/tinybee/workflows/cron.js.map +1 -0
  752. package/dist/tinybee/workflows/engine.js +371 -0
  753. package/dist/tinybee/workflows/engine.js.map +1 -0
  754. package/dist/tinybee/workflows/from-text.js +203 -0
  755. package/dist/tinybee/workflows/from-text.js.map +1 -0
  756. package/dist/tinybee/workflows/routes.js +189 -0
  757. package/dist/tinybee/workflows/routes.js.map +1 -0
  758. package/dist/tinybee/workflows/scheduler.js +100 -0
  759. package/dist/tinybee/workflows/scheduler.js.map +1 -0
  760. package/dist/tinybee/workflows/skills.js +227 -0
  761. package/dist/tinybee/workflows/skills.js.map +1 -0
  762. package/dist/tinybee/workflows/store.js +205 -0
  763. package/dist/tinybee/workflows/store.js.map +1 -0
  764. package/dist/tinybee/workflows/types.js +180 -0
  765. package/dist/tinybee/workflows/types.js.map +1 -0
  766. package/dist/tinybee/workflows/yaml.js +323 -0
  767. package/dist/tinybee/workflows/yaml.js.map +1 -0
  768. package/dist/true/api.js +495 -0
  769. package/dist/true/api.js.map +1 -0
  770. package/dist/true/client.js +292 -0
  771. package/dist/true/client.js.map +1 -0
  772. package/dist/true/clock.js +36 -0
  773. package/dist/true/clock.js.map +1 -0
  774. package/dist/true/events.js +125 -0
  775. package/dist/true/events.js.map +1 -0
  776. package/dist/true/hosts.js +98 -0
  777. package/dist/true/hosts.js.map +1 -0
  778. package/dist/true/index.js +29 -0
  779. package/dist/true/index.js.map +1 -0
  780. package/dist/true/key.js +54 -0
  781. package/dist/true/key.js.map +1 -0
  782. package/dist/true/line.js +69 -0
  783. package/dist/true/line.js.map +1 -0
  784. package/dist/true/mask.js +31 -0
  785. package/dist/true/mask.js.map +1 -0
  786. package/dist/true/names.js +114 -0
  787. package/dist/true/names.js.map +1 -0
  788. package/dist/true/outbox.js +233 -0
  789. package/dist/true/outbox.js.map +1 -0
  790. package/dist/true/replay.js +164 -0
  791. package/dist/true/replay.js.map +1 -0
  792. package/dist/true/settings.js +123 -0
  793. package/dist/true/settings.js.map +1 -0
  794. package/dist/true/status.js +189 -0
  795. package/dist/true/status.js.map +1 -0
  796. package/dist/true/sync-cases.js +222 -0
  797. package/dist/true/sync-cases.js.map +1 -0
  798. package/dist/true/sync-manual.js +295 -0
  799. package/dist/true/sync-manual.js.map +1 -0
  800. package/dist/true/sync-runs.js +109 -0
  801. package/dist/true/sync-runs.js.map +1 -0
  802. package/dist/true/worker.js +414 -0
  803. package/dist/true/worker.js.map +1 -0
  804. package/dist/types.js +32 -0
  805. package/dist/types.js.map +1 -0
  806. package/dist/updates/asks.js +38 -0
  807. package/dist/updates/asks.js.map +1 -0
  808. package/dist/updates/index.js +835 -0
  809. package/dist/updates/index.js.map +1 -0
  810. package/dist/updates/owner.js +24 -0
  811. package/dist/updates/owner.js.map +1 -0
  812. package/dist/updates/prefs.js +118 -0
  813. package/dist/updates/prefs.js.map +1 -0
  814. package/dist/updates/route.js +78 -0
  815. package/dist/updates/route.js.map +1 -0
  816. package/dist/updates/sources.js +345 -0
  817. package/dist/updates/sources.js.map +1 -0
  818. package/dist/updates/words.js +452 -0
  819. package/dist/updates/words.js.map +1 -0
  820. package/dist/version.js +53 -0
  821. package/dist/version.js.map +1 -0
  822. package/dist/view-compute.js +382 -0
  823. package/dist/view-compute.js.map +1 -0
  824. package/dist/view-spec.js +894 -0
  825. package/dist/view-spec.js.map +1 -0
  826. package/dist/web/apple-touch-icon.png +0 -0
  827. package/dist/web/assets/ApprovalCard-Br_z5z7G.css +1 -0
  828. package/dist/web/assets/ApprovalCard-CfGhGFo_.js +3 -0
  829. package/dist/web/assets/CardFromRef-BaTGmZ9c.js +2 -0
  830. package/dist/web/assets/CardFromRef-DO7i2uDd.css +1 -0
  831. package/dist/web/assets/Cases-8l_6UcLh.js +2 -0
  832. package/dist/web/assets/Cases-CpfED0uB.css +1 -0
  833. package/dist/web/assets/Chat-BKDiR0qt.js +3 -0
  834. package/dist/web/assets/Chat-DxjdyYUu.css +1 -0
  835. package/dist/web/assets/ConfirmDialog-CIMveD-b.js +2 -0
  836. package/dist/web/assets/ConnectSheet-Cm5vbZdR.js +4 -0
  837. package/dist/web/assets/Docs-HKGuY0WE.js +2 -0
  838. package/dist/web/assets/Docs-fodKx8S7.css +1 -0
  839. package/dist/web/assets/DotDetail-DskS3NWe.js +2 -0
  840. package/dist/web/assets/DotDetail-OWRSD_1x.css +1 -0
  841. package/dist/web/assets/DotStage-BZDclfzV.css +1 -0
  842. package/dist/web/assets/DotStage-CtMNzCN3.js +2 -0
  843. package/dist/web/assets/Dots-BqCsS34m.js +2 -0
  844. package/dist/web/assets/EvidencePack-DQ3kCJX4.js +2 -0
  845. package/dist/web/assets/EvidencePack-DV_9ETsA.css +1 -0
  846. package/dist/web/assets/FailedDeliveries-1F2kFcs9.js +2 -0
  847. package/dist/web/assets/FailedDeliveries-DXa2_VvI.css +1 -0
  848. package/dist/web/assets/Feed-5wiHRTFK.js +2 -0
  849. package/dist/web/assets/GfmView-C-NYaduC.js +4 -0
  850. package/dist/web/assets/ImpactList-C-RNuDB0.js +2 -0
  851. package/dist/web/assets/ImpactList-C612dFdw.css +1 -0
  852. package/dist/web/assets/Inbox-kc1bKVL_.js +2 -0
  853. package/dist/web/assets/JoinScreen-C3L4wmP3.js +2 -0
  854. package/dist/web/assets/JoinScreen-COeAUv5v.css +1 -0
  855. package/dist/web/assets/LeadDialog-N3Zul9Rw.js +8 -0
  856. package/dist/web/assets/LeadDialog-xyWjAuAS.css +1 -0
  857. package/dist/web/assets/ListeningLine-BRFNaczY.js +2 -0
  858. package/dist/web/assets/ListeningLine-pN8CgyiK.css +1 -0
  859. package/dist/web/assets/Mascots-pIyGpxtD.js +2 -0
  860. package/dist/web/assets/ModelChoices-BxO1zyyr.js +2 -0
  861. package/dist/web/assets/ModelChoices-DQJnVxfs.css +1 -0
  862. package/dist/web/assets/NewDotDialog-CDPUWmgN.js +2 -0
  863. package/dist/web/assets/NewDotDialog-DrPPqkSZ.css +1 -0
  864. package/dist/web/assets/NewTestRunDialog-BQBthVHE.js +2 -0
  865. package/dist/web/assets/NoBreakNames-Csxdqdt6.js +2 -0
  866. package/dist/web/assets/Pair-omex_K7H.js +2 -0
  867. package/dist/web/assets/PushSection-CmqHlE_2.js +2 -0
  868. package/dist/web/assets/ReleaseNotes-B6VqFewP.js +2 -0
  869. package/dist/web/assets/ReleaseNotes-DBJUL7Vm.css +1 -0
  870. package/dist/web/assets/ReportPage-BHS1xWEt.js +162 -0
  871. package/dist/web/assets/Reports-BEHnDIb1.js +2 -0
  872. package/dist/web/assets/ReviewChangeDialog-BVSt-cw-.js +2 -0
  873. package/dist/web/assets/ReviewChangeDialog-BbIlHRx0.css +1 -0
  874. package/dist/web/assets/Room-BoG_uge4.js +2 -0
  875. package/dist/web/assets/Room-evAfiW_e.css +1 -0
  876. package/dist/web/assets/RunActions-ZY7yf1AF.js +2 -0
  877. package/dist/web/assets/RunDetail-C8St20GQ.css +1 -0
  878. package/dist/web/assets/RunDetail-qADXjBvd.js +9 -0
  879. package/dist/web/assets/RunRow-BKEJv8ib.js +2 -0
  880. package/dist/web/assets/RunnerTry-Dgpp67-s.js +6 -0
  881. package/dist/web/assets/RunnerTry-DsweWOfO.css +1 -0
  882. package/dist/web/assets/Settings-fs-QJwNM.js +2 -0
  883. package/dist/web/assets/Setup-DI6hBEP-.js +2 -0
  884. package/dist/web/assets/TestRows-wh03T5Li.js +4 -0
  885. package/dist/web/assets/TestRun-DTOyF-Pv.js +2 -0
  886. package/dist/web/assets/TestRuns-ggDjm1Q8.js +2 -0
  887. package/dist/web/assets/TinyBeeAddLaptop-bc3pmh3T.js +2 -0
  888. package/dist/web/assets/TinyBeeAi-CkyOzhm5.js +2 -0
  889. package/dist/web/assets/TinyBeeConnections-B2K_P38u.js +2 -0
  890. package/dist/web/assets/TinyBeeHome-DSpxX5KS.js +3 -0
  891. package/dist/web/assets/TinyBeePlan-BamiLziu.js +2 -0
  892. package/dist/web/assets/TinyBeeSignup-vHcz0Wen.js +2 -0
  893. package/dist/web/assets/TinyBeeSkills-By9RLUse.js +2 -0
  894. package/dist/web/assets/TinyBeeWorkflow-DeNO7Jsh.js +2 -0
  895. package/dist/web/assets/TinyBeeWorkflowEditor-B6OGC2OT.js +2 -0
  896. package/dist/web/assets/TinyBeeWorkflows-BN4-h6lt.js +2 -0
  897. package/dist/web/assets/Trace-BBCI1aIB.css +1 -0
  898. package/dist/web/assets/Trace-aF92UWaH.js +2 -0
  899. package/dist/web/assets/UpdatesSection-CCWEbkue.js +2 -0
  900. package/dist/web/assets/Welcome-CCcy558Q.js +2 -0
  901. package/dist/web/assets/activity-C3qilrDm.css +1 -0
  902. package/dist/web/assets/activity-CBfTSxqw.js +2 -0
  903. package/dist/web/assets/authedMedia-BTYt_tyu.js +2 -0
  904. package/dist/web/assets/beeApi-BHW8Tx1s.js +2 -0
  905. package/dist/web/assets/data-CmXvx3Mj.js +2 -0
  906. package/dist/web/assets/engines-CfdJODFj.css +1 -0
  907. package/dist/web/assets/format-BBZ8vFyT.js +2 -0
  908. package/dist/web/assets/forms-Coc7p2UF.css +1 -0
  909. package/dist/web/assets/hivePush-DZJDokj7.js +2 -0
  910. package/dist/web/assets/impactModel-MY1OFuiP.js +2 -0
  911. package/dist/web/assets/index-B6qKm1NW.js +13 -0
  912. package/dist/web/assets/index-BvKyT1X7.css +1 -0
  913. package/dist/web/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  914. package/dist/web/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  915. package/dist/web/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  916. package/dist/web/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  917. package/dist/web/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  918. package/dist/web/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  919. package/dist/web/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  920. package/dist/web/assets/lead-BL_P_kri.css +1 -0
  921. package/dist/web/assets/model-BIQy5IVG.js +2 -0
  922. package/dist/web/assets/modelsApi-PUSySRQw.js +2 -0
  923. package/dist/web/assets/newDotModel-BaLLyw57.js +2 -0
  924. package/dist/web/assets/onboarding-bfKqnM4Z.css +1 -0
  925. package/dist/web/assets/phone-Rs7FoyG0.css +1 -0
  926. package/dist/web/assets/phoneApi-BG_1-M-D.js +3 -0
  927. package/dist/web/assets/releaseModel-EynYMVOC.js +2 -0
  928. package/dist/web/assets/releaseNotesModel-A1Rtv3cV.js +2 -0
  929. package/dist/web/assets/reports-BWaA1HhM.js +37 -0
  930. package/dist/web/assets/reports-DXwdWQsB.css +1 -0
  931. package/dist/web/assets/router-W6nZsQ33.js +2 -0
  932. package/dist/web/assets/runs-BY0Owv93.css +1 -0
  933. package/dist/web/assets/shadowWeekModel-BUUiww09.js +2 -0
  934. package/dist/web/assets/storage-yvL36AWt.js +2 -0
  935. package/dist/web/assets/store-IqrqHuFR.js +2 -0
  936. package/dist/web/assets/testruns-BzIZ0cR0.css +1 -0
  937. package/dist/web/assets/testruns-DyaqX4ji.js +2 -0
  938. package/dist/web/assets/true-9Q68cs5b.js +2 -0
  939. package/dist/web/assets/true-DPGBpoir.css +1 -0
  940. package/dist/web/assets/ui-DcmhYyYp.js +13 -0
  941. package/dist/web/assets/ui-DxEDgbIx.css +1 -0
  942. package/dist/web/assets/usePauseDot-BV60ZVy1.js +2 -0
  943. package/dist/web/assets/usePauseDot-NrSzMI1C.css +1 -0
  944. package/dist/web/assets/usePush-Dsm-TjlG.js +2 -0
  945. package/dist/web/assets/useRefChips-CbafNx59.js +68 -0
  946. package/dist/web/assets/useRestoreDot-D0B6W82H.js +2 -0
  947. package/dist/web/assets/view-worker-pyeVAhUT.js +2 -0
  948. package/dist/web/assets/workflowUi-QYsd3n9J.js +2 -0
  949. package/dist/web/favicon.png +0 -0
  950. package/dist/web/icon-192.png +0 -0
  951. package/dist/web/icon-512.png +0 -0
  952. package/dist/web/icon-maskable-512.png +0 -0
  953. package/dist/web/index.html +45 -0
  954. package/dist/web/manifest.webmanifest +23 -0
  955. package/dist/web/mascots/argus-attention.svg +7 -0
  956. package/dist/web/mascots/argus-ok.svg +7 -0
  957. package/dist/web/mascots/argus-outage.svg +7 -0
  958. package/dist/web/mascots/argus-running.svg +7 -0
  959. package/dist/web/mascots/bolt-attention.svg +7 -0
  960. package/dist/web/mascots/bolt-ok.svg +7 -0
  961. package/dist/web/mascots/bolt-outage.svg +7 -0
  962. package/dist/web/mascots/bolt-running.svg +7 -0
  963. package/dist/web/mascots/echo-attention.svg +7 -0
  964. package/dist/web/mascots/echo-ok.svg +7 -0
  965. package/dist/web/mascots/echo-outage.svg +7 -0
  966. package/dist/web/mascots/echo-running.svg +7 -0
  967. package/dist/web/mascots/lens-attention.svg +7 -0
  968. package/dist/web/mascots/lens-ok.svg +7 -0
  969. package/dist/web/mascots/lens-outage.svg +7 -0
  970. package/dist/web/mascots/lens-running.svg +7 -0
  971. package/dist/web/mascots/moss-attention.svg +7 -0
  972. package/dist/web/mascots/moss-ok.svg +7 -0
  973. package/dist/web/mascots/moss-outage.svg +7 -0
  974. package/dist/web/mascots/moss-running.svg +7 -0
  975. package/dist/web/mascots/nit-attention.svg +7 -0
  976. package/dist/web/mascots/nit-ok.svg +7 -0
  977. package/dist/web/mascots/nit-outage.svg +7 -0
  978. package/dist/web/mascots/nit-running.svg +7 -0
  979. package/dist/web/mascots/nova-attention.svg +7 -0
  980. package/dist/web/mascots/nova-ok.svg +7 -0
  981. package/dist/web/mascots/nova-outage.svg +7 -0
  982. package/dist/web/mascots/nova-running.svg +7 -0
  983. package/dist/web/mascots/penn-attention.svg +7 -0
  984. package/dist/web/mascots/penn-ok.svg +7 -0
  985. package/dist/web/mascots/penn-outage.svg +7 -0
  986. package/dist/web/mascots/penn-running.svg +7 -0
  987. package/dist/web/mascots/pip-attention.svg +7 -0
  988. package/dist/web/mascots/pip-ok.svg +7 -0
  989. package/dist/web/mascots/pip-outage.svg +7 -0
  990. package/dist/web/mascots/pip-running.svg +7 -0
  991. package/dist/web/mascots/ward-attention.svg +7 -0
  992. package/dist/web/mascots/ward-ok.svg +7 -0
  993. package/dist/web/mascots/ward-outage.svg +7 -0
  994. package/dist/web/mascots/ward-running.svg +7 -0
  995. package/dist/web/sw.js +98 -0
  996. package/dist/webhook-seen.js +53 -0
  997. package/dist/webhook-seen.js.map +1 -0
  998. package/dist/webhooks.js +625 -0
  999. package/dist/webhooks.js.map +1 -0
  1000. package/dist/zip.js +63 -0
  1001. package/dist/zip.js.map +1 -0
  1002. package/docs/API-V2.md +532 -0
  1003. package/docs/CHAT-EVAL.md +130 -0
  1004. package/docs/CHAT-UI.md +416 -0
  1005. package/docs/CONNECTIONS.md +89 -0
  1006. package/docs/DATA-MODEL.md +518 -0
  1007. package/docs/DEPLOY.md +577 -0
  1008. package/docs/DOGFOOD-LEDGER.md +81 -0
  1009. package/docs/GITHUB.md +148 -0
  1010. package/docs/INTEGRATION-MODEL.md +200 -0
  1011. package/docs/LEAD-DOT.md +553 -0
  1012. package/docs/LIST-PATTERNS.md +52 -0
  1013. package/docs/MULTI-REPO.md +766 -0
  1014. package/docs/PARITY.md +276 -0
  1015. package/docs/PR-REVIEW-QA.md +1266 -0
  1016. package/docs/PR-REVIEW.md +357 -0
  1017. package/docs/SANDBOX.md +320 -0
  1018. package/docs/SETUP.md +776 -0
  1019. package/docs/SLACK.md +80 -0
  1020. package/docs/STAGES.md +619 -0
  1021. package/docs/TRACE-MAP.md +89 -0
  1022. package/docs/TRACKERS.md +225 -0
  1023. package/docs/VOICE.md +36 -0
  1024. package/docs/tinybee/00-README.md +45 -0
  1025. package/docs/tinybee/01-PRD.md +216 -0
  1026. package/docs/tinybee/02-architecture-pairing.md +199 -0
  1027. package/docs/tinybee/03-local-agent.md +222 -0
  1028. package/docs/tinybee/04-local-setup-ui.md +128 -0
  1029. package/docs/tinybee/05-mobile-app-ux.md +199 -0
  1030. package/docs/tinybee/06-environments-and-delivery.md +148 -0
  1031. package/docs/tinybee/07-coding-agent-handoff.md +116 -0
  1032. package/docs/tinybee/OPEN-QUESTIONS.md +26 -0
  1033. package/docs/tinybee/PROGRESS.md +134 -0
  1034. package/package.json +111 -4
@@ -0,0 +1,161 @@
1
+ // Tailscale detection and "Serve over Tailscale" for the pairing sheet (KAT-141).
2
+ //
3
+ // Reads `tailscale status --json` and `tailscale serve status --json`, and runs
4
+ // `tailscale serve --bg --https=<port> http://127.0.0.1:<port>` for this instance's port only. Other
5
+ // serve entries (another app on 443, say) are read to spot a conflict and never changed.
6
+ // A userspace tailscaled often listens on a non-default socket, so the socket is probed too.
7
+ import { execFile } from 'node:child_process';
8
+ import { existsSync } from 'node:fs';
9
+ import { homedir } from 'node:os';
10
+ import { join } from 'node:path';
11
+ const defaultRunner = (bin, args, timeoutMs) => new Promise((resolve) => {
12
+ execFile(bin, args, { timeout: timeoutMs, maxBuffer: 4 * 1024 * 1024, env: process.env }, (err, stdout, stderr) => {
13
+ const code = err ? (typeof err.code === 'number' ? err.code : 1) : 0;
14
+ resolve({ code, stdout: String(stdout ?? ''), stderr: String(stderr ?? (err ? err.message : '')) });
15
+ });
16
+ });
17
+ let runner = defaultRunner;
18
+ /** Tests swap in a fake so nothing touches the real tailscaled. */
19
+ export function setTailscaleRunner(r) {
20
+ runner = r ?? defaultRunner;
21
+ cache = null;
22
+ }
23
+ export function tailscaleDisabled() {
24
+ return process.env.LOCALDOST_TAILSCALE === '0';
25
+ }
26
+ function binCandidates() {
27
+ const out = [];
28
+ if (process.env.LOCALDOST_TAILSCALE_BIN)
29
+ out.push(process.env.LOCALDOST_TAILSCALE_BIN);
30
+ for (const p of ['/opt/homebrew/bin/tailscale', '/usr/local/bin/tailscale', '/usr/bin/tailscale', '/Applications/Tailscale.app/Contents/MacOS/Tailscale'])
31
+ if (existsSync(p))
32
+ out.push(p);
33
+ out.push('tailscale');
34
+ return [...new Set(out)];
35
+ }
36
+ function socketCandidates() {
37
+ const out = [];
38
+ if (process.env.LOCALDOST_TAILSCALE_SOCKET)
39
+ out.push(process.env.LOCALDOST_TAILSCALE_SOCKET);
40
+ out.push(null);
41
+ const userspace = join(homedir(), '.local/state/tailscale/tailscaled.sock');
42
+ if (existsSync(userspace))
43
+ out.push(userspace);
44
+ return out;
45
+ }
46
+ const sockArgs = (socket) => (socket ? ['--socket', socket] : []);
47
+ async function findDaemon() {
48
+ let installed = false;
49
+ let error = null;
50
+ for (const bin of binCandidates()) {
51
+ for (const socket of socketCandidates()) {
52
+ const r = await runner(bin, [...sockArgs(socket), 'status', '--json'], 5_000);
53
+ if (r.code === 127 || (/ENOENT|not found/i.test(r.stderr) && !r.stdout))
54
+ break;
55
+ installed = true;
56
+ try {
57
+ const status = JSON.parse(r.stdout);
58
+ if (status && typeof status === 'object' && 'BackendState' in status)
59
+ return { found: { bin, socket, status }, installed, error: null };
60
+ }
61
+ catch {
62
+ error = (r.stderr || r.stdout).trim().split('\n')[0]?.slice(0, 200) || 'tailscale status failed';
63
+ }
64
+ }
65
+ }
66
+ return { found: null, installed, error };
67
+ }
68
+ /** Reads `serve status --json` for one port: the URL that serves this instance, or what else holds the port. */
69
+ export function readServe(json, dnsName, port) {
70
+ const cfg = (json && typeof json === 'object' ? json : {});
71
+ const target = new RegExp(`^https?://(127\\.0\\.0\\.1|localhost|\\[::1\\]):${port}/?$`);
72
+ let servedUrl = null;
73
+ for (const [hostPort, web] of Object.entries(cfg.Web ?? {})) {
74
+ const proxy = web?.Handlers?.['/']?.Proxy ?? '';
75
+ if (target.test(proxy) && hostPort.startsWith(`${dnsName}:`)) {
76
+ const p = hostPort.slice(dnsName.length + 1);
77
+ servedUrl = `https://${dnsName}${p === '443' ? '' : `:${p}`}`;
78
+ }
79
+ }
80
+ const mine = cfg.Web?.[`${dnsName}:${port}`];
81
+ const tcp = cfg.TCP?.[String(port)];
82
+ let conflict = null;
83
+ if (mine) {
84
+ const proxy = mine.Handlers?.['/']?.Proxy ?? '';
85
+ if (!target.test(proxy))
86
+ conflict = `Port ${port} on the tailnet already serves ${proxy || 'another handler'}.`;
87
+ }
88
+ else if (tcp)
89
+ conflict = `Port ${port} on the tailnet is already used by another serve entry.`;
90
+ return { servedUrl, conflict };
91
+ }
92
+ let cache = null;
93
+ const CACHE_MS = 30_000;
94
+ export async function detectTailscale(port, opts = {}) {
95
+ const empty = {
96
+ installed: false,
97
+ running: false,
98
+ backendState: null,
99
+ dnsName: null,
100
+ login: null,
101
+ servedUrl: null,
102
+ conflict: null,
103
+ error: null,
104
+ };
105
+ if (tailscaleDisabled())
106
+ return { ...empty, error: 'Tailscale detection is off (LOCALDOST_TAILSCALE=0).' };
107
+ if (!opts.fresh && cache && cache.port === port && Date.now() - cache.at < CACHE_MS)
108
+ return cache.state;
109
+ const { found, installed, error } = await findDaemon();
110
+ if (!found) {
111
+ const state = { ...empty, installed, error: installed ? error || 'tailscaled is not running.' : null };
112
+ cache = { at: Date.now(), port, state, found: null };
113
+ return state;
114
+ }
115
+ const st = found.status;
116
+ const dnsName = (st.Self?.DNSName ?? '').replace(/\.$/, '') || null;
117
+ const login = st.Self?.UserID != null ? (st.User?.[String(st.Self.UserID)]?.LoginName ?? null) : null;
118
+ const state = {
119
+ ...empty,
120
+ installed: true,
121
+ running: st.BackendState === 'Running',
122
+ backendState: st.BackendState ?? null,
123
+ dnsName,
124
+ login,
125
+ };
126
+ if (state.running && dnsName) {
127
+ const r = await runner(found.bin, [...sockArgs(found.socket), 'serve', 'status', '--json'], 5_000);
128
+ try {
129
+ Object.assign(state, readServe(r.stdout.trim() ? JSON.parse(r.stdout) : {}, dnsName, port));
130
+ }
131
+ catch {
132
+ state.error = 'Could not read tailscale serve status.';
133
+ }
134
+ }
135
+ cache = { at: Date.now(), port, state, found };
136
+ return state;
137
+ }
138
+ /** Serves this instance's port over HTTPS on the tailnet. Touches only that port's entry. */
139
+ export async function serveOverTailscale(port) {
140
+ if (!Number.isInteger(port) || port < 1 || port > 65535)
141
+ throw new Error('bad port');
142
+ const before = await detectTailscale(port, { fresh: true });
143
+ if (!before.installed)
144
+ throw new Error('Tailscale is not installed on this machine.');
145
+ if (!before.running || !before.dnsName)
146
+ throw new Error('Tailscale is not running. Start it and sign in, then try again.');
147
+ if (before.servedUrl)
148
+ return before;
149
+ if (before.conflict)
150
+ throw new Error(`${before.conflict} Pick another port for localdost, or free that serve entry yourself.`);
151
+ const found = cache?.found;
152
+ if (!found)
153
+ throw new Error('Tailscale went away. Try again.');
154
+ const r = await runner(found.bin, [...sockArgs(found.socket), 'serve', '--bg', `--https=${port}`, `http://127.0.0.1:${port}`], 20_000);
155
+ if (r.code !== 0) {
156
+ const msg = (r.stderr || r.stdout).trim().split('\n').slice(0, 3).join(' ').slice(0, 300);
157
+ throw new Error(msg || 'tailscale serve failed.');
158
+ }
159
+ return detectTailscale(port, { fresh: true });
160
+ }
161
+ //# sourceMappingURL=tailscale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailscale.js","sourceRoot":"","sources":["../../src/phone/tailscale.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,EAAE;AACF,gFAAgF;AAChF,qGAAqG;AACrG,yFAAyF;AACzF,6FAA6F;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA0BjC,MAAM,aAAa,GAAW,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CACrD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACtB,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAChH,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAQ,GAA0B,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnH,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,IAAI,MAAM,GAAW,aAAa,CAAC;AACnC,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,CAAgB;IACjD,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC;IAC5B,KAAK,GAAG,IAAI,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG,CAAC;AACjD,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACvF,KAAK,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,sDAAsD,CAAC;QACvJ,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC7F,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,wCAAwC,CAAC,CAAC;IAC5E,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC;AACb,CAAC;AAQD,MAAM,QAAQ,GAAG,CAAC,MAAqB,EAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE3F,KAAK,UAAU,UAAU;IACvB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,EAAE,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;YAC9E,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,MAAM;YAC/E,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAA4B,CAAC;gBAC/D,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,cAAc,IAAI,MAAM;oBAAE,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC1I,CAAC;YAAC,MAAM,CAAC;gBACP,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,yBAAyB,CAAC;YACnG,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC;AAMD,gHAAgH;AAChH,MAAM,UAAU,SAAS,CAAC,IAAa,EAAE,OAAe,EAAE,IAAY;IACpE,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAGxD,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,mDAAmD,IAAI,KAAK,CAAC,CAAC;IACxF,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC;YAC7D,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC7C,SAAS,GAAG,WAAW,OAAO,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAChE,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,QAAQ,GAAG,QAAQ,IAAI,kCAAkC,KAAK,IAAI,iBAAiB,GAAG,CAAC;IAClH,CAAC;SAAM,IAAI,GAAG;QAAE,QAAQ,GAAG,QAAQ,IAAI,yDAAyD,CAAC;IACjG,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACjC,CAAC;AAED,IAAI,KAAK,GAAoF,IAAI,CAAC;AAClG,MAAM,QAAQ,GAAG,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,OAA4B,EAAE;IAChF,MAAM,KAAK,GAAmB;QAC5B,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;KACZ,CAAC;IACF,IAAI,iBAAiB,EAAE;QAAE,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,qDAAqD,EAAE,CAAC;IAC3G,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,QAAQ;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IACxG,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,4BAA4B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvG,KAAK,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,EAAE,GAAG,KAAK,CAAC,MAIhB,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;IACpE,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtG,MAAM,KAAK,GAAmB;QAC5B,GAAG,KAAK;QACR,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,EAAE,CAAC,YAAY,KAAK,SAAS;QACtC,YAAY,EAAE,EAAE,CAAC,YAAY,IAAI,IAAI;QACrC,OAAO;QACP,KAAK;KACN,CAAC;IACF,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QACnG,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9F,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,KAAK,GAAG,wCAAwC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,KAAK,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACnD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACtF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IAC3H,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC;IACpC,IAAI,MAAM,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,sEAAsE,CAAC,CAAC;IAC/H,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC;IAC3B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,IAAI,EAAE,EAAE,oBAAoB,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACvI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1F,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yBAAyB,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,441 @@
1
+ // PR scope (KAT-354): which PRs of a shared repo a dot takes. A repo entry of a dot may carry `prScope`
2
+ // (src/types.ts). `authors`, `team` and `linkedIssueLabels` let a PR in, and a PR needs to match one of the ones set.
3
+ // `skipDrafts` and `skipBots` keep a PR out. A PR a person asked to review is never held back.
4
+ //
5
+ // The scope judges a PR to review, a merged PR, and the push that brings a merge into the default branch: a push has no
6
+ // author of its own, so resolvePrScope reads the PR whose merge it is (`scopeFacts.mergedPr`) and the same rules apply.
7
+ // Without that, the merge of a PR the scope kept out would still run the dot's post-merge flow, and a poller, which
8
+ // sees pushes and no merged-PR events, would never apply the scope to a merge at all.
9
+ //
10
+ // watchMatches (src/webhooks.ts) decides synchronously, so what needs GitHub or a tracker is read first: resolvePrScope
11
+ // puts the answers on the event (`scopeFacts`) for every dot that needs them, once per PR. The webhook path and the
12
+ // poller both call it before they dispatch. A read that fails lets the PR in and says so once in the log, on the run
13
+ // (scopeNote) and on the dot (scopeUnreadOf), so a token without org access never silences the dot. A PR that was let
14
+ // in this way is not trusted: its PR comment and check wait in the Inbox like a first look (src/agent/rules.ts, KAT-363).
15
+ import { log } from './config.js';
16
+ import { list } from './db.js';
17
+ import { describeFetchError, githubFor, normalizeGithub } from './integrations/github.js';
18
+ import { GithubHttpError, issueApi, NotAnIssueError } from './integrations/github-issues.js';
19
+ import { repoForEvent, watchRepos } from './repos.js';
20
+ const lc = (s) => (s ?? '').toLowerCase();
21
+ /** How long a team's member list is kept. */
22
+ export const TEAM_TTL_MS = 10 * 60_000;
23
+ /** A failed read is remembered this long, so a burst of PRs does not call GitHub once each. */
24
+ const FAILED_TTL_MS = 60_000;
25
+ const CACHE_CAP = 200;
26
+ /** Does the event carry a PR whose scope matters: a PR to review or a merged PR. */
27
+ function isPrEvent(ev) {
28
+ return ev.source === 'github' && !!ev.pr && !!ev.repo && (ev.kind === 'pr_opened' || ev.kind === 'pr_merged');
29
+ }
30
+ function isPushEvent(ev) {
31
+ return ev.source === 'github' && ev.kind === 'push' && !!ev.push && !!ev.repo;
32
+ }
33
+ /**
34
+ * The PR a scope decision is about: a PR event is its own, and a push is the merged PR that resolvePrScope read for it.
35
+ * null for a push whose PR is not known (a direct push, or GitHub could not say), which the scope lets in.
36
+ */
37
+ function subjectOf(ev) {
38
+ if (isPrEvent(ev))
39
+ return ev;
40
+ const merged = ev.scopeFacts?.mergedPr;
41
+ if (isPushEvent(ev) && merged)
42
+ return { ...ev, kind: 'pr_merged', title: merged.title, pr: merged.pr };
43
+ return null;
44
+ }
45
+ /** The scope this dot sets for the event's repo, or undefined. A push counts only on the repo's default branch. */
46
+ export function scopeFor(w, ev) {
47
+ if (!isPrEvent(ev) && !isPushEvent(ev))
48
+ return undefined;
49
+ const entry = repoForEvent(w, ev);
50
+ if (entry?.role !== 'app')
51
+ return undefined;
52
+ // A branch the dot lists in testBranches is tested as it is: it carries no PR to scope.
53
+ if (isPushEvent(ev) && ev.push.ref.replace(/^refs\/heads\//, '') !== entry.defaultBranch)
54
+ return undefined;
55
+ return entry.prScope;
56
+ }
57
+ const teamKey = (team) => lc(team);
58
+ const asked = (s) => ({
59
+ authors: !!s.authors?.length,
60
+ team: !!s.team,
61
+ labels: !!s.linkedIssueLabels?.length,
62
+ });
63
+ /** True when the cheap rules (author, draft, bot) already decide the event for this scope, so nothing needs reading. */
64
+ function decidedWithoutGithub(s, pr) {
65
+ if (s.skipDrafts && pr.draft)
66
+ return true;
67
+ if (s.skipBots && pr.authorIsBot)
68
+ return true;
69
+ return !!s.authors?.some((a) => lc(a) === lc(pr.author));
70
+ }
71
+ /** Does the scope say whose PRs the dot takes (an author, a team, or linked issue labels), apart from keeping drafts and bots out. */
72
+ export function hasInclusionRule(s) {
73
+ return !!s && (!!s.authors?.length || !!s.team || !!s.linkedIssueLabels?.length);
74
+ }
75
+ function judge(w, ev) {
76
+ const taken = { reason: null, unread: [] };
77
+ if (ev.requestedBy)
78
+ return taken;
79
+ const s = scopeFor(w, ev);
80
+ const subject = subjectOf(ev);
81
+ if (!s || !subject)
82
+ return taken;
83
+ const pr = subject.pr;
84
+ if (s.skipDrafts && pr.draft)
85
+ return { reason: 'out of scope: draft', unread: [] };
86
+ if (s.skipBots && pr.authorIsBot)
87
+ return { reason: 'out of scope: bot', unread: [] };
88
+ const want = asked(s);
89
+ if (!want.authors && !want.team && !want.labels)
90
+ return taken;
91
+ const rules = [];
92
+ const unread = [];
93
+ if (want.authors) {
94
+ rules.push('authors');
95
+ if (s.authors.some((a) => lc(a) === lc(pr.author)))
96
+ return taken;
97
+ }
98
+ if (want.team) {
99
+ rules.push('team');
100
+ const member = ev.scopeFacts?.teams?.[teamKey(s.team)];
101
+ if (member === true)
102
+ return taken;
103
+ // null: GitHub could not say, so the PR is let in.
104
+ if (member === null)
105
+ unread.push(`the members of team ${s.team}`);
106
+ }
107
+ if (want.labels) {
108
+ rules.push('linked issue labels');
109
+ const wanted = new Set(s.linkedIssueLabels.map(lc));
110
+ // Two places hold the labels of what a PR links: GitHub issues, and the tickets of a Jira or Linear tracker.
111
+ const sources = [ev.scopeFacts?.linkedLabels, ev.scopeFacts?.ticketLabels?.[w.id]];
112
+ if (sources.some((found) => Array.isArray(found) && found.some((l) => wanted.has(l))))
113
+ return taken;
114
+ if (sources.some((found) => found === null))
115
+ unread.push('the labels of the issues this PR links');
116
+ }
117
+ if (unread.length)
118
+ return { reason: null, unread };
119
+ return { reason: `out of scope: ${rules.join(', ')}`, unread: [] };
120
+ }
121
+ /**
122
+ * The reason this dot skips the PR event, "out of scope: <rule>", or null when the dot takes it. The rule is
123
+ * `draft`, `bot`, or the inclusion rules that were set and none matched, for example `authors, team`.
124
+ * Events a person asked for (`requestedBy`) are never out of scope.
125
+ */
126
+ export function outOfScope(w, ev) {
127
+ return judge(w, ev).reason;
128
+ }
129
+ /** The rules the dot's scope could not read for this event, in words ("the members of team acme/web"). Empty when every rule was read. */
130
+ export function unreadRules(w, ev) {
131
+ return judge(w, ev).unread;
132
+ }
133
+ const TEAM_HINT = 'A team rule needs the organization permission Members: read on the GitHub App or token.';
134
+ const LABELS_HINT = 'The GitHub token or tracker connection must be able to read the issues a PR links.';
135
+ /** What to fix for the rules that could not be read. */
136
+ const fixHint = (unread) => [unread.some((u) => u.startsWith('the members')) ? TEAM_HINT : '', unread.some((u) => u.startsWith('the labels')) ? LABELS_HINT : '']
137
+ .filter(Boolean)
138
+ .join(' ');
139
+ /**
140
+ * What the dot's scope could not decide for this event, in words, or null. A rule that could not be read lets the PR
141
+ * run, so the run says so and the PR comment and check wait in the Inbox (KAT-363): a team rule that reads nothing is not silent.
142
+ */
143
+ export function scopeNote(w, ev) {
144
+ const unread = unreadRules(w, ev);
145
+ if (!unread.length)
146
+ return null;
147
+ return `Could not read ${unread.join(' and ')}, so this PR ran without the scope. Its PR comment and check wait in the Inbox. ${fixHint(unread)}`.trim();
148
+ }
149
+ /**
150
+ * Per dot, in memory: set when a PR's scope rule could not be read, cleared when a later PR's rule was read. A restart
151
+ * clears it, and the next PR that cannot be read sets it again. The held PR comments in the Inbox stay either way.
152
+ */
153
+ const unreadByDot = new Map();
154
+ /** Does the dot's scope hold a rule that needs a read from GitHub or a tracker (a team, or issue labels) on an app repo. */
155
+ function needsRead(w) {
156
+ return watchRepos(w).some((r) => r.role === 'app' && (!!r.prScope?.team || !!r.prScope?.linkedIssueLabels?.length));
157
+ }
158
+ /** The failed scope read to show on the dot, or null when the last read worked or the dot's scope has no rule that reads. */
159
+ export function scopeUnreadOf(w) {
160
+ const hit = unreadByDot.get(w.id);
161
+ return hit && needsRead(w) ? hit : null;
162
+ }
163
+ function noteReads(dots, ev) {
164
+ for (const { w, s } of dots) {
165
+ if (!s.team && !s.linkedIssueLabels?.length)
166
+ continue;
167
+ const unread = unreadRules(w, ev);
168
+ if (unread.length)
169
+ unreadByDot.set(w.id, { reason: `could not read ${unread.join(' and ')}`, hint: fixHint(unread), at: new Date().toISOString() });
170
+ else
171
+ unreadByDot.delete(w.id);
172
+ }
173
+ }
174
+ const teams = new Map();
175
+ const warned = new Set();
176
+ function warnOnce(key, text) {
177
+ if (warned.has(key))
178
+ return;
179
+ warned.add(key);
180
+ log.warn(text);
181
+ }
182
+ /** Members of `slug` (lower-case logins) through the GitHub client of `w`, kept for 10 minutes. null when GitHub cannot say. */
183
+ async function membersOf(w, ev, slug) {
184
+ const key = teamKey(slug);
185
+ const hit = teams.get(key);
186
+ const now = Date.now();
187
+ if (hit?.pending)
188
+ return hit.pending;
189
+ if (hit && now - hit.at <= (hit.failed ? FAILED_TTL_MS : TEAM_TTL_MS))
190
+ return hit.failed ? null : (hit.members ?? null);
191
+ const pending = (async () => {
192
+ try {
193
+ const logins = await githubFor(w, ev).teamMembers(slug);
194
+ if (!logins)
195
+ return null;
196
+ warned.delete(`team:${key}`);
197
+ return new Set(logins.map(lc));
198
+ }
199
+ catch (err) {
200
+ warnOnce(`team:${key}`, `PR scope: could not read the members of team ${slug}, so its PRs are let in (${describeFetchError(err)})`);
201
+ return null;
202
+ }
203
+ })();
204
+ teams.set(key, { at: now, pending });
205
+ const members = await pending;
206
+ teams.delete(key);
207
+ teams.set(key, { at: Date.now(), ...(members ? { members } : { failed: true }) });
208
+ if (teams.size > CACHE_CAP)
209
+ teams.delete(teams.keys().next().value);
210
+ return members;
211
+ }
212
+ // Linked issues
213
+ const linked = new Map();
214
+ /** Cap on the issues or tickets one PR reads labels for. */
215
+ const MAX_LINKED = 10;
216
+ /** The read failed because the number is no issue this token can see: 404 and 410 (GitHub answers 404 for a private repo too), or a pull request. */
217
+ function namesNoIssue(err) {
218
+ return err instanceof NotAnIssueError || (err instanceof GithubHttpError && (err.status === 404 || err.status === 410));
219
+ }
220
+ /** One tracker read waits this long, since the webhook answer waits for it. */
221
+ const READ_TIMEOUT_MS = 3000;
222
+ /**
223
+ * Lower-case labels of the GitHub issues the PR links. The links are the ones the dot's own PR check records
224
+ * (src/links.ts): closing keywords in the title and body, the issues GitHub lists as closed by the PR (the Development
225
+ * sidebar), and the links recorded from issue timelines. No linked issue gives []. null when nothing could be read.
226
+ */
227
+ async function linkedLabelsOf(ev) {
228
+ const full = `${ev.repo.owner}/${ev.repo.name}`;
229
+ const key = `${full}#${ev.pr.number}@${ev.pr.headSha}`.toLowerCase();
230
+ const hit = linked.get(key);
231
+ if (hit?.pending)
232
+ return hit.pending;
233
+ if (hit && Date.now() - hit.at <= (hit.labels ? TEAM_TTL_MS : FAILED_TTL_MS))
234
+ return hit.labels;
235
+ const pending = (async () => {
236
+ try {
237
+ // Loaded on demand: links.ts reaches the flow modules, which import this one through webhooks.
238
+ const links = await import('./links.js');
239
+ const pr = `${full}#${ev.pr.number}`.toLowerCase();
240
+ const { targets, error } = await links.closingTargets(ev);
241
+ if (error)
242
+ warnOnce(`links:${full}`, `PR scope: could not read the issues ${full} PRs link (${describeFetchError(error)})`);
243
+ const refs = new Set(targets.map((t) => t.toRef));
244
+ // Links an issue timeline recorded, for example a PR that mentions the issue. Ticket keys have no #, and are the tracker's.
245
+ for (const l of links.linksFor(pr))
246
+ if (l.fromRef === pr && l.toRef.includes('#') && l.toRef !== pr)
247
+ refs.add(l.toRef);
248
+ // Mentions with no closing keyword ("Part of acme/product#412", an issue URL) count for the scope only: the PR check records no link for them and closes nothing.
249
+ const mentioned = new Set(links.parseMentionedRefs(links.prTextOf(ev)).filter((m) => m !== pr && !refs.has(m)));
250
+ const labels = new Set();
251
+ let read = 0;
252
+ let unread = 0;
253
+ const picked = [...refs, ...mentioned].slice(0, MAX_LINKED);
254
+ for (const ref of picked) {
255
+ const m = /^(.+)#(\d+)$/.exec(ref);
256
+ if (!m)
257
+ continue;
258
+ try {
259
+ const t = await issueApi(m[1]).getIssue(Number(m[2]));
260
+ read++;
261
+ for (const l of t.labels ?? [])
262
+ labels.add(lc(l));
263
+ }
264
+ catch (err) {
265
+ // A mention that names no issue the token can see (a missing or private one, a PR) is a word, not a link: it never makes the rule unread.
266
+ if (mentioned.has(ref) && namesNoIssue(err))
267
+ continue;
268
+ unread++;
269
+ warnOnce(`issue:${ref}`, `PR scope: could not read ${ref}, linked from ${full}#${ev.pr.number} (${describeFetchError(err)})`);
270
+ }
271
+ }
272
+ // Links we could not list, or every linked issue unreadable: nothing is known, so the PR is let in.
273
+ if (!read && (unread || error))
274
+ return null;
275
+ return [...labels];
276
+ }
277
+ catch (err) {
278
+ warnOnce(`links:${full}`, `PR scope: could not read linked issues of ${full} (${describeFetchError(err)})`);
279
+ return null;
280
+ }
281
+ })();
282
+ linked.set(key, { at: Date.now(), labels: null, pending });
283
+ const labels = await pending;
284
+ linked.delete(key);
285
+ linked.set(key, { at: Date.now(), labels });
286
+ if (linked.size > CACHE_CAP)
287
+ linked.delete(linked.keys().next().value);
288
+ return labels;
289
+ }
290
+ // Tickets of a Jira or Linear tracker
291
+ const tickets = new Map();
292
+ /** Lower-case labels of one ticket, read through the dot's tracker and kept for 10 minutes. null when it cannot be read. */
293
+ async function ticketLabels(w, kind, key) {
294
+ const id = `${w.id}:${key}`;
295
+ const hit = tickets.get(id);
296
+ if (hit && Date.now() - hit.at <= (hit.labels ? TEAM_TTL_MS : FAILED_TTL_MS))
297
+ return hit.labels;
298
+ let labels = null;
299
+ let timer;
300
+ try {
301
+ // Loaded on demand: ticket-on-demand pulls in the webhook and flow modules, which import this one.
302
+ const t = await import('./review/ticket-on-demand.js');
303
+ const limit = new Promise((resolve) => {
304
+ timer = setTimeout(() => resolve(null), READ_TIMEOUT_MS);
305
+ timer.unref?.();
306
+ });
307
+ const res = await Promise.race([t.fetchTicketRef(w, { tracker: kind, key }), limit]);
308
+ if (res?.ok)
309
+ labels = (res.ticket.labels ?? []).map(lc);
310
+ else
311
+ warnOnce(`ticket:${id}`, `PR scope: could not read ${key} through the ${kind} tracker of ${w.name} (${res ? res.error : 'timed out'})`);
312
+ }
313
+ catch (err) {
314
+ warnOnce(`ticket:${id}`, `PR scope: could not read ${key} through the ${kind} tracker of ${w.name} (${describeFetchError(err)})`);
315
+ }
316
+ finally {
317
+ clearTimeout(timer);
318
+ }
319
+ tickets.delete(id);
320
+ tickets.set(id, { at: Date.now(), labels });
321
+ if (tickets.size > CACHE_CAP)
322
+ tickets.delete(tickets.keys().next().value);
323
+ return labels;
324
+ }
325
+ /**
326
+ * Labels of the Jira or Linear tickets the PR names, through the dot's tracker. The keys are the ones the PR check
327
+ * records as links (src/links.ts): a key counts when the tracker lists its project or reads it as a real issue.
328
+ * undefined for a dot with another tracker. null when keys were named and none could be read.
329
+ */
330
+ async function ticketLabelsOf(w, ev) {
331
+ const kind = w.tracker?.kind;
332
+ if (kind !== 'jira' && kind !== 'linear')
333
+ return undefined;
334
+ const links = await import('./links.js');
335
+ const keys = (await links.ticketKeyTargets(w, ev)).map((k) => k.key).slice(0, MAX_LINKED);
336
+ if (!keys.length)
337
+ return [];
338
+ const known = (await Promise.all(keys.map((k) => ticketLabels(w, kind, k)))).filter((l) => l !== null);
339
+ return known.length ? [...new Set(known.flat())] : null;
340
+ }
341
+ /** Forgets every kept team, link and ticket answer. Tests call it between cases. */
342
+ export function clearPrScopeCache() {
343
+ teams.clear();
344
+ linked.clear();
345
+ tickets.clear();
346
+ warned.clear();
347
+ unreadByDot.clear();
348
+ }
349
+ // Reading what the rules need
350
+ /** Dots that scope the event's repo, with their scope. */
351
+ function scopedDots(ev) {
352
+ const out = [];
353
+ for (const w of list('watches')) {
354
+ if (w.paused || w.archived)
355
+ continue;
356
+ const s = scopeFor(w, ev);
357
+ if (s)
358
+ out.push({ w, s });
359
+ }
360
+ return out;
361
+ }
362
+ /** The team, link and ticket answers the given dots need for this PR, or undefined when none needs a read. */
363
+ async function readFacts(view, dots) {
364
+ const needTeams = dots.filter((d) => d.s.team);
365
+ const needLabels = dots.filter((d) => d.s.linkedIssueLabels?.length);
366
+ if (!needTeams.length && !needLabels.length)
367
+ return undefined;
368
+ const facts = {};
369
+ for (const { w, s } of needTeams) {
370
+ const k = teamKey(s.team);
371
+ facts.teams ??= {};
372
+ if (k in facts.teams)
373
+ continue;
374
+ const members = await membersOf(w, view, s.team);
375
+ facts.teams[k] = members ? members.has(lc(view.pr.author)) : null;
376
+ }
377
+ if (needLabels.length) {
378
+ facts.linkedLabels = await linkedLabelsOf(view);
379
+ for (const { w } of needLabels) {
380
+ const t = await ticketLabelsOf(w, view);
381
+ if (t !== undefined)
382
+ (facts.ticketLabels ??= {})[w.id] = t;
383
+ }
384
+ }
385
+ return facts;
386
+ }
387
+ /** The merged PR a push to the default branch brings in, as GitHub ties it to the head commit. null for a direct push or when GitHub cannot say. */
388
+ async function mergedPrOf(w, ev) {
389
+ const full = `${ev.repo.owner}/${ev.repo.name}`;
390
+ try {
391
+ const rows = await githubFor(w, ev).pullsOfCommit(ev.push.after);
392
+ const raw = rows?.find((p) => p?.merged_at || p?.merged);
393
+ if (!raw)
394
+ return null;
395
+ const merged = normalizeGithub('pull_request', {
396
+ action: 'closed',
397
+ number: raw.number,
398
+ pull_request: { ...raw, merged: true },
399
+ repository: { owner: { login: ev.repo.owner }, name: ev.repo.name, full_name: full },
400
+ });
401
+ return merged?.pr ? { pr: merged.pr, title: merged.title } : null;
402
+ }
403
+ catch (err) {
404
+ warnOnce(`merged:${full}`, `PR scope: could not tell which PR the push to ${full} brings in, so the push is let in (${describeFetchError(err)})`);
405
+ return null;
406
+ }
407
+ }
408
+ /**
409
+ * Puts the scope facts on a PR or push event: for each dot that scopes the event's repo and whose cheap rules leave the PR
410
+ * open, the answer to its team rule and its linked issue labels rule. A push also gets the PR whose merge it is. Other events,
411
+ * events without a scoping dot, and events a person asked for come back unchanged.
412
+ */
413
+ export async function resolvePrScope(ev) {
414
+ if (ev.requestedBy || ev.scopeFacts)
415
+ return ev;
416
+ if (isPushEvent(ev)) {
417
+ const dots = scopedDots(ev);
418
+ if (!dots.length)
419
+ return ev;
420
+ const mergedPr = await mergedPrOf(dots[0].w, ev);
421
+ if (!mergedPr)
422
+ return { ...ev, scopeFacts: { mergedPr: null } };
423
+ const view = subjectOf({ ...ev, scopeFacts: { mergedPr } });
424
+ const open = dots.filter((d) => !decidedWithoutGithub(d.s, mergedPr.pr));
425
+ const facts = await readFacts(view, open);
426
+ const out = { ...ev, scopeFacts: { ...facts, mergedPr } };
427
+ if (facts)
428
+ noteReads(open, out);
429
+ return out;
430
+ }
431
+ if (!isPrEvent(ev))
432
+ return ev;
433
+ const open = scopedDots(ev).filter((d) => !decidedWithoutGithub(d.s, ev.pr));
434
+ const facts = await readFacts(ev, open);
435
+ if (!facts)
436
+ return ev;
437
+ const out = { ...ev, scopeFacts: facts };
438
+ noteReads(open, out);
439
+ return out;
440
+ }
441
+ //# sourceMappingURL=pr-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-scope.js","sourceRoot":"","sources":["../src/pr-scope.ts"],"names":[],"mappings":"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"}