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 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/hive/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,278 @@
1
+ // TinyBee Hive, Phase 6: plans, the 30-day trial, bundled-token metering and top-ups (docs/tinybee/01-PRD.md
2
+ // section 5, 02 section 7, 03 sections 9-10). Plan state lives on the tenant row; every relayed model call
3
+ // adds a relay_usage row with its token counts and nothing else. A trial that ends without a paid plan
4
+ // flips the tenant to `suspended`: the Bee keeps running on the laptop, remote access (tunnel) and routine
5
+ // pushes pause, and the app shows "Local only" with an Upgrade button. Payment goes through a provider
6
+ // interface; the only provider shipped is the test-mode mock (no real gateway yet, OPEN-QUESTIONS item 10).
7
+ import { hiveConfig, hiveLog } from './config.js';
8
+ import { hiveDb, newId } from './db.js';
9
+ import { HiveError } from './errors.js';
10
+ import { pushToUser } from './push.js';
11
+ import { requireTenant, TRIAL_DAYS, trialEndOf } from './tenants.js';
12
+ export const PLANS = {
13
+ trial: {
14
+ id: 'trial',
15
+ name: 'Trial',
16
+ tokens: 200_000,
17
+ workflows: 5,
18
+ priceVnd: 0,
19
+ priceUsd: 0,
20
+ blurb: `Everything in Standard for ${TRIAL_DAYS} days. No card.`,
21
+ },
22
+ standard: {
23
+ id: 'standard',
24
+ name: 'Standard',
25
+ tokens: 500_000,
26
+ workflows: 5,
27
+ priceVnd: 99_000,
28
+ priceUsd: 4,
29
+ blurb: 'Your address, remote access, push, 5 workflows, 500k bundled tokens a month or your own key.',
30
+ },
31
+ pro: {
32
+ id: 'pro',
33
+ name: 'Pro',
34
+ tokens: 3_000_000,
35
+ workflows: null,
36
+ priceVnd: 249_000,
37
+ priceUsd: 10,
38
+ blurb: 'Unlimited workflows, 3M bundled tokens a month, priority relay.',
39
+ },
40
+ };
41
+ /** One top-up pack (PRD: "top up or add own key"). */
42
+ export const TOPUP = { tokens: 500_000, priceVnd: 49_000, priceUsd: 2 };
43
+ export const PERIOD_DAYS = 30;
44
+ /** Usage rows older than this are dropped by the sweeper (the PRD keeps 90 days of logs at most). */
45
+ export const USAGE_RETENTION_DAYS = 90;
46
+ /** The budget banner turns on at this share of the bundle (docs 05 section 10 "low"). */
47
+ export const LOW_AT = 0.8;
48
+ export const SWEEP_MS = 60_000;
49
+ const DAY = 86_400_000;
50
+ const isoPlus = (from, days) => new Date(new Date(from).getTime() + days * DAY).toISOString();
51
+ export const PLAN_RULE = 'If your plan ends, your Bee keeps running on your laptop. Only remote access and notifications pause.';
52
+ /** The current period: the trial window, or the paid month that holds `now` (rolled forward lazily). */
53
+ export function periodOf(t, now = Date.now()) {
54
+ if (t.plan === 'trial')
55
+ return { start: t.createdAt, end: trialEndOf(t) };
56
+ let start = t.periodStart ?? t.createdAt;
57
+ let end = t.periodEnd ?? isoPlus(start, PERIOD_DAYS);
58
+ // A paid plan renews month by month (no recurring charge yet: the provider mock has no subscriptions).
59
+ while (new Date(end).getTime() <= now) {
60
+ start = end;
61
+ end = isoPlus(start, PERIOD_DAYS);
62
+ }
63
+ if (start !== t.periodStart || end !== t.periodEnd) {
64
+ hiveDb().prepare('UPDATE tenants SET periodStart = ?, periodEnd = ? WHERE id = ?').run(start, end, t.id);
65
+ t.periodStart = start;
66
+ t.periodEnd = end;
67
+ }
68
+ return { start, end };
69
+ }
70
+ export function usedTokens(tenantId, since) {
71
+ const r = hiveDb()
72
+ .prepare('SELECT COALESCE(SUM(inputTokens + outputTokens), 0) AS n FROM relay_usage WHERE tenantId = ? AND at >= ?')
73
+ .get(tenantId, since);
74
+ return Number(r.n);
75
+ }
76
+ export function budgetOf(t, now = Date.now()) {
77
+ const period = periodOf(t, now);
78
+ const used = usedTokens(t.id, period.start);
79
+ const cap = PLANS[t.plan].tokens + t.topupTokens;
80
+ const share = cap > 0 ? Math.min(1, used / cap) : 1;
81
+ return {
82
+ state: used >= cap ? 'exhausted' : share >= LOW_AT ? 'low' : 'ok',
83
+ usedTokens: used,
84
+ capTokens: cap,
85
+ used: Math.round(share * 1000) / 1000,
86
+ resetsAt: period.end,
87
+ };
88
+ }
89
+ function breakdownOf(tenantId, since) {
90
+ return hiveDb()
91
+ .prepare('SELECT source, SUM(inputTokens) AS inputTokens, SUM(outputTokens) AS outputTokens, COUNT(*) AS calls FROM relay_usage WHERE tenantId = ? AND at >= ? GROUP BY source ORDER BY inputTokens + outputTokens DESC')
92
+ .all(tenantId, since);
93
+ }
94
+ export function paymentProviders() {
95
+ return hiveConfig.env === 'prod' ? [] : ['mock'];
96
+ }
97
+ export function billingView(t, now = Date.now()) {
98
+ const period = periodOf(t, now);
99
+ return {
100
+ plan: PLANS[t.plan],
101
+ status: t.status,
102
+ suspendedReason: t.suspendedReason,
103
+ periodStartsAt: period.start,
104
+ periodEndsAt: period.end,
105
+ daysLeft: Math.max(0, Math.ceil((new Date(period.end).getTime() - now) / DAY)),
106
+ budget: budgetOf(t, now),
107
+ topupTokens: t.topupTokens,
108
+ breakdown: breakdownOf(t.id, period.start),
109
+ plans: [PLANS.standard, PLANS.pro],
110
+ topup: TOPUP,
111
+ providers: paymentProviders(),
112
+ rule: PLAN_RULE,
113
+ };
114
+ }
115
+ /** Whether the relay may serve this tenant right now, and why not. */
116
+ export function relayAllowance(t, now = Date.now()) {
117
+ const budget = budgetOf(t, now);
118
+ if (t.status !== 'active')
119
+ return { ok: false, code: 'plan_required', budget };
120
+ if (budget.state === 'exhausted')
121
+ return { ok: false, code: 'budget_exhausted', budget };
122
+ return { ok: true, budget };
123
+ }
124
+ export function recordRelayUsage(tenantId, u, now = Date.now()) {
125
+ hiveDb()
126
+ .prepare('INSERT INTO relay_usage (id, tenantId, at, model, source, inputTokens, outputTokens) VALUES (?, ?, ?, ?, ?, ?, ?)')
127
+ .run(newId('ru'), tenantId, new Date(now).toISOString(), u.model.slice(0, 80), u.source.slice(0, 80), Math.max(0, u.inputTokens | 0), Math.max(0, u.outputTokens | 0));
128
+ }
129
+ // --- trial expiry and renewal ---------------------------------------------------------------------------------
130
+ function tenantRow(id) {
131
+ return hiveDb().prepare('SELECT * FROM tenants WHERE id = ?').get(id);
132
+ }
133
+ async function billingPush(t, payload, now) {
134
+ try {
135
+ await pushToUser(t.userId, { ...payload, url: '#/plan', tag: 'billing', urgency: 'normal' }, now, { evenIfSuspended: true });
136
+ }
137
+ catch (err) {
138
+ hiveLog.warn(`billing: push for ${t.id} failed: ${err instanceof Error ? err.message : String(err)}`);
139
+ }
140
+ }
141
+ /** Ends the trial: suspended, remote access off. The Bee learns on its next heartbeat (within 30 s). */
142
+ export async function suspendTenant(t, reason, now = Date.now()) {
143
+ hiveDb()
144
+ .prepare("UPDATE tenants SET status = 'suspended', suspendedReason = ?, suspendedAt = ? WHERE id = ? AND status = 'active'")
145
+ .run(reason, new Date(now).toISOString(), t.id);
146
+ const next = tenantRow(t.id);
147
+ await billingPush(next, reason === 'trial_ended'
148
+ ? { title: 'Your trial has ended', body: 'Your Bee still works on your laptop. Upgrade to get remote access and notifications back.' }
149
+ : { title: 'Remote access paused', body: 'Your plan is unpaid. Your Bee still works on your laptop; upgrade to reconnect.' }, now);
150
+ return next;
151
+ }
152
+ /** One pass: trials past their end without a paid plan are suspended; old usage rows are dropped. */
153
+ export async function sweepBilling(now = Date.now()) {
154
+ const d = hiveDb();
155
+ const due = d
156
+ .prepare("SELECT * FROM tenants WHERE status = 'active' AND plan = 'trial'")
157
+ .all()
158
+ .map((r) => r)
159
+ .filter((t) => new Date(trialEndOf(t)).getTime() <= now);
160
+ for (const t of due)
161
+ await suspendTenant(t, 'trial_ended', now);
162
+ const dropped = d.prepare('DELETE FROM relay_usage WHERE at < ?').run(isoPlus(now, -USAGE_RETENTION_DAYS)).changes;
163
+ return { suspended: due.length, dropped: Number(dropped) };
164
+ }
165
+ let timer;
166
+ export function startBillingSweeper() {
167
+ if (timer)
168
+ return;
169
+ timer = setInterval(() => void sweepBilling().catch((err) => hiveLog.warn(`billing: sweep failed: ${err instanceof Error ? err.message : String(err)}`)), SWEEP_MS);
170
+ timer.unref?.();
171
+ }
172
+ export function stopBillingSweeper() {
173
+ if (timer)
174
+ clearInterval(timer);
175
+ timer = undefined;
176
+ }
177
+ const mockProvider = { name: 'mock', begin: async () => ({ providerRef: null, payUrl: null }) };
178
+ const providers = new Map([['mock', mockProvider]]);
179
+ export function setPaymentProvider(p, name = p?.name ?? 'mock') {
180
+ if (p)
181
+ providers.set(name, p);
182
+ else
183
+ providers.delete(name);
184
+ }
185
+ function invoiceRow(id) {
186
+ return hiveDb().prepare('SELECT * FROM invoices WHERE id = ?').get(id);
187
+ }
188
+ export function invoicesOf(tenantId) {
189
+ return hiveDb().prepare('SELECT * FROM invoices WHERE tenantId = ? ORDER BY createdAt DESC LIMIT 50').all(tenantId);
190
+ }
191
+ export async function checkout(t, raw, now = Date.now()) {
192
+ const b = (raw && typeof raw === 'object' ? raw : {});
193
+ const kind = b.kind === 'topup' ? 'topup' : b.kind === 'plan' ? 'plan' : undefined;
194
+ if (!kind)
195
+ throw new HiveError(400, 'bad_checkout', 'Choose a plan or a top-up.');
196
+ const plan = kind === 'plan' ? (b.plan === 'standard' || b.plan === 'pro' ? b.plan : undefined) : null;
197
+ if (kind === 'plan' && !plan)
198
+ throw new HiveError(400, 'bad_plan', 'Choose Standard or Pro.');
199
+ if (kind === 'topup' && t.status !== 'active')
200
+ throw new HiveError(409, 'plan_required', 'Upgrade first; a top-up needs an active plan.');
201
+ const providerName = typeof b.provider === 'string' && b.provider ? b.provider : paymentProviders()[0];
202
+ const provider = providerName && paymentProviders().includes(providerName) ? providers.get(providerName) : undefined;
203
+ if (!provider)
204
+ throw new HiveError(503, 'payments_unavailable', 'Payments are not set up on this Hive yet.');
205
+ const id = newId('inv');
206
+ const created = new Date(now).toISOString();
207
+ const amount = kind === 'plan' ? PLANS[plan].priceVnd : TOPUP.priceVnd;
208
+ hiveDb()
209
+ .prepare('INSERT INTO invoices (id, tenantId, kind, plan, tokens, amount, currency, provider, status, createdAt) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)')
210
+ .run(id, t.id, kind, plan ?? null, kind === 'topup' ? TOPUP.tokens : null, amount, 'VND', provider.name, 'pending', created);
211
+ const begun = await provider.begin(invoiceRow(id));
212
+ hiveDb().prepare('UPDATE invoices SET providerRef = ? WHERE id = ?').run(begun.providerRef, id);
213
+ return { invoice: invoiceRow(id), payUrl: begun.payUrl };
214
+ }
215
+ /** A paid invoice takes effect: the plan starts a fresh month and lifts a suspension; a top-up adds tokens. */
216
+ export async function settleInvoice(invoiceId, outcome, now = Date.now()) {
217
+ const inv = typeof invoiceId === 'string' ? invoiceRow(invoiceId) : undefined;
218
+ if (!inv)
219
+ throw new HiveError(404, 'invoice_unknown', 'No such invoice.');
220
+ if (inv.status !== 'pending')
221
+ return inv;
222
+ const d = hiveDb();
223
+ const at = new Date(now).toISOString();
224
+ d.prepare('UPDATE invoices SET status = ?, paidAt = ? WHERE id = ?').run(outcome, outcome === 'paid' ? at : null, inv.id);
225
+ if (outcome === 'paid') {
226
+ if (inv.kind === 'plan' && inv.plan) {
227
+ d.prepare("UPDATE tenants SET plan = ?, periodStart = ?, periodEnd = ?, status = CASE WHEN status = 'suspended' THEN 'active' ELSE status END, suspendedReason = NULL, suspendedAt = NULL WHERE id = ?").run(inv.plan, at, isoPlus(at, PERIOD_DAYS), inv.tenantId);
228
+ await billingPush(tenantRow(inv.tenantId), { title: `You are on ${PLANS[inv.plan].name}`, body: 'Remote access and notifications are back on.' }, now);
229
+ }
230
+ else if (inv.kind === 'topup' && inv.tokens) {
231
+ d.prepare('UPDATE tenants SET topupTokens = topupTokens + ? WHERE id = ?').run(inv.tokens, inv.tenantId);
232
+ }
233
+ }
234
+ return invoiceRow(inv.id);
235
+ }
236
+ /** Test mode (never prod): the app settles the mock invoice itself. */
237
+ export async function completeMockInvoice(t, invoiceId, now = Date.now()) {
238
+ if (hiveConfig.env === 'prod')
239
+ throw new HiveError(404, 'not_found', 'Not found.');
240
+ const inv = typeof invoiceId === 'string' ? invoiceRow(invoiceId) : undefined;
241
+ if (!inv || inv.tenantId !== t.id)
242
+ throw new HiveError(404, 'invoice_unknown', 'No such invoice.');
243
+ if (inv.provider !== 'mock')
244
+ throw new HiveError(409, 'not_mock', 'Only mock invoices complete this way.');
245
+ return settleInvoice(inv.id, 'paid', now);
246
+ }
247
+ export async function devBilling(userId, body, now = Date.now()) {
248
+ if (hiveConfig.env !== 'local')
249
+ throw new HiveError(404, 'not_found', 'Not found.');
250
+ const t = requireTenant(userId);
251
+ const d = hiveDb();
252
+ if (body.reset) {
253
+ d.prepare("UPDATE tenants SET plan = 'trial', trialEndsAt = ?, periodStart = NULL, periodEnd = NULL, topupTokens = 0, status = 'active', suspendedReason = NULL, suspendedAt = NULL WHERE id = ?").run(isoPlus(now, TRIAL_DAYS), t.id);
254
+ d.prepare('DELETE FROM relay_usage WHERE tenantId = ?').run(t.id);
255
+ }
256
+ if (body.plan) {
257
+ if (body.plan === 'trial')
258
+ d.prepare("UPDATE tenants SET plan = 'trial', periodStart = NULL, periodEnd = NULL WHERE id = ?").run(t.id);
259
+ else
260
+ d.prepare("UPDATE tenants SET plan = ?, periodStart = ?, periodEnd = ?, status = 'active', suspendedReason = NULL, suspendedAt = NULL WHERE id = ?").run(body.plan, new Date(now).toISOString(), isoPlus(now, PERIOD_DAYS), t.id);
261
+ }
262
+ if (body.trialEndsAt)
263
+ d.prepare('UPDATE tenants SET trialEndsAt = ? WHERE id = ?').run(new Date(body.trialEndsAt).toISOString(), t.id);
264
+ if (typeof body.usedTokens === 'number' && body.usedTokens > 0)
265
+ recordRelayUsage(t.id, { model: 'dev', source: 'dev', inputTokens: Math.floor(body.usedTokens / 2), outputTokens: Math.ceil(body.usedTokens / 2) }, now);
266
+ await sweepBilling(now);
267
+ return { ok: true, billing: billingView(tenantRow(t.id), now) };
268
+ }
269
+ export function devBillingOf(raw) {
270
+ const b = (raw && typeof raw === 'object' ? raw : {});
271
+ return {
272
+ ...(typeof b.trialEndsAt === 'string' && !Number.isNaN(new Date(b.trialEndsAt).getTime()) ? { trialEndsAt: b.trialEndsAt } : {}),
273
+ ...(b.plan === 'trial' || b.plan === 'standard' || b.plan === 'pro' ? { plan: b.plan } : {}),
274
+ ...(typeof b.usedTokens === 'number' ? { usedTokens: b.usedTokens } : {}),
275
+ ...(b.reset === true ? { reset: true } : {}),
276
+ };
277
+ }
278
+ //# sourceMappingURL=billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/hive/billing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ // Hive settings (docs/tinybee/06-environments-and-delivery.md section 1.2). Hive is the TinyBee control
2
+ // plane: identity, tenants, pairing, tunnel provisioning, push and presence. It runs as its own process
3
+ // (src/hive/index.ts) on Railway, and inside the localdost server in local development (TINYBEE_ENV=local
4
+ // with no TINYBEE_HIVE_URL), so one `npm run demo` has both halves.
5
+ import { join } from 'node:path';
6
+ import { ROOT } from '../config.js';
7
+ export const TINYBEE_ENVS = ['local', 'staging', 'prod'];
8
+ function envOf(v) {
9
+ const s = (v ?? '').trim().toLowerCase();
10
+ return TINYBEE_ENVS.includes(s) ? s : undefined;
11
+ }
12
+ const dataDir = process.env.HIVE_DATA_DIR || process.env.LOCALDOST_DATA_DIR || join(ROOT, 'data');
13
+ export const hiveConfig = {
14
+ /** local, staging or prod. Unset means TinyBee is off and localdost behaves as before. */
15
+ get env() {
16
+ return envOf(process.env.TINYBEE_ENV);
17
+ },
18
+ /** Standalone Hive port. The embedded Hive shares the localdost port. */
19
+ port: Number(process.env.HIVE_PORT || process.env.PORT || 4330),
20
+ host: process.env.HOST || '0.0.0.0',
21
+ /**
22
+ * Where a tenant's Bee answers, as a pattern with `{slug}`: `dots-{slug}.testllms.com` on staging (one level
23
+ * under the zone, like admin.testllms.com and superapp.testllms.com, so Cloudflare's zone certificate covers
24
+ * it), `{slug}.tinybee.app` in prod. TINYBEE_TENANT_HOST wins; else `{slug}.<TINYBEE_TENANT_DOMAIN>`.
25
+ */
26
+ get tenantHost() {
27
+ const pattern = (process.env.TINYBEE_TENANT_HOST || '').trim().toLowerCase();
28
+ if (pattern.includes('{slug}'))
29
+ return pattern;
30
+ return `{slug}.${(process.env.TINYBEE_TENANT_DOMAIN || 'localhost').trim().toLowerCase()}`;
31
+ },
32
+ dataDir,
33
+ dbPath: process.env.HIVE_DB || join(dataDir, 'hive.db'),
34
+ /** cloudflare or mock. Unset: cloudflare when the CF_* vars are set, else mock. */
35
+ get tunnelProvider() {
36
+ const v = (process.env.TINYBEE_TUNNEL_PROVIDER || '').trim().toLowerCase();
37
+ if (v === 'cloudflare' || v === 'mock')
38
+ return v;
39
+ return process.env.CF_API_TOKEN && process.env.CF_ACCOUNT_ID && process.env.CF_ZONE_ID ? 'cloudflare' : 'mock';
40
+ },
41
+ /** Bearer for /api/hive/admin/* (staging cleanup, tunnel count). Unset: those routes answer 404. */
42
+ get adminToken() {
43
+ return process.env.HIVE_ADMIN_TOKEN?.trim() || undefined;
44
+ },
45
+ /** Soft cap on live tunnels per Cloudflare account (free plan allows more, but the budget says no). */
46
+ tunnelCap: Number(process.env.TINYBEE_TUNNEL_CAP || 50),
47
+ jwt: {
48
+ /** PEM (PKCS8) with \n escapes, as Railway stores it. Unset: a key is generated into <dataDir>/hive-jwt.json. */
49
+ privateKey: process.env.HIVE_JWT_PRIVATE_KEY || undefined,
50
+ kid: process.env.HIVE_JWT_KID || undefined,
51
+ },
52
+ logLevel: process.env.LOG_LEVEL || 'info',
53
+ };
54
+ /** The public hostname of a tenant's Bee: hiveConfig.tenantHost with the slug filled in. */
55
+ export function tenantHostname(slug) {
56
+ return hiveConfig.tenantHost.replace('{slug}', slug);
57
+ }
58
+ export const hiveLog = {
59
+ info: (msg, ...rest) => console.log(`[hive] ${msg}`, ...rest),
60
+ warn: (msg, ...rest) => console.warn(`[hive] WARN ${msg}`, ...rest),
61
+ error: (msg, ...rest) => console.error(`[hive] ERROR ${msg}`, ...rest),
62
+ };
63
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/hive/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ // Hive's own SQLite database (docs/tinybee/01-PRD.md section 3.2): accounts, tenants, one-time codes
2
+ // and refresh tokens. It never holds workflow definitions, connection tokens or message contents.
3
+ // Separate from the localdost database on purpose: the standalone Hive on Railway has no localdost data,
4
+ // and the embedded Hive in local development keeps its rows out of localdost.db.
5
+ import { mkdirSync } from 'node:fs';
6
+ import { dirname } from 'node:path';
7
+ import { randomBytes } from 'node:crypto';
8
+ import { DatabaseSync } from 'node:sqlite';
9
+ import { hiveConfig } from './config.js';
10
+ const TABLES = [
11
+ `CREATE TABLE IF NOT EXISTS users (
12
+ id TEXT PRIMARY KEY,
13
+ email TEXT NOT NULL UNIQUE,
14
+ name TEXT,
15
+ googleSub TEXT UNIQUE,
16
+ createdAt TEXT NOT NULL,
17
+ lastSignInAt TEXT
18
+ )`,
19
+ `CREATE TABLE IF NOT EXISTS tenants (
20
+ id TEXT PRIMARY KEY,
21
+ slug TEXT NOT NULL UNIQUE,
22
+ userId TEXT NOT NULL UNIQUE,
23
+ status TEXT NOT NULL DEFAULT 'active',
24
+ slugChangedAt TEXT,
25
+ createdAt TEXT NOT NULL
26
+ )`,
27
+ `CREATE TABLE IF NOT EXISTS otps (
28
+ id TEXT PRIMARY KEY,
29
+ email TEXT NOT NULL,
30
+ codeHash TEXT NOT NULL,
31
+ expiresAt INTEGER NOT NULL,
32
+ attempts INTEGER NOT NULL DEFAULT 0,
33
+ usedAt INTEGER,
34
+ createdAt INTEGER NOT NULL
35
+ )`,
36
+ `CREATE TABLE IF NOT EXISTS refresh_tokens (
37
+ id TEXT PRIMARY KEY,
38
+ userId TEXT NOT NULL,
39
+ tokenHash TEXT NOT NULL UNIQUE,
40
+ expiresAt INTEGER NOT NULL,
41
+ revokedAt INTEGER,
42
+ createdAt INTEGER NOT NULL
43
+ )`,
44
+ `CREATE TABLE IF NOT EXISTS install_codes (
45
+ id TEXT PRIMARY KEY,
46
+ tenantId TEXT NOT NULL,
47
+ code TEXT NOT NULL UNIQUE,
48
+ expiresAt INTEGER NOT NULL,
49
+ usedAt INTEGER,
50
+ createdAt INTEGER NOT NULL
51
+ )`,
52
+ // Paired laptops (docs/tinybee/02-architecture-pairing.md section 4). One live Bee per tenant in v1;
53
+ // a replaced one keeps its row with status 'replaced'. Only the public device id is stored.
54
+ `CREATE TABLE IF NOT EXISTS bees (
55
+ id TEXT PRIMARY KEY,
56
+ tenantId TEXT NOT NULL,
57
+ pub TEXT NOT NULL,
58
+ host TEXT NOT NULL,
59
+ name TEXT NOT NULL,
60
+ hc TEXT NOT NULL,
61
+ status TEXT NOT NULL,
62
+ hostname TEXT,
63
+ tunnelId TEXT,
64
+ relayTokenHash TEXT,
65
+ lastError TEXT,
66
+ createdAt INTEGER NOT NULL,
67
+ pairedAt INTEGER,
68
+ lastSeenAt INTEGER,
69
+ offlineSince INTEGER,
70
+ offlineNotifiedAt INTEGER,
71
+ devFrozenUntil INTEGER
72
+ )`,
73
+ // Web push subscriptions of signed-in phones (docs/tinybee/02-architecture-pairing.md section 8): the
74
+ // "Bee offline" and "back online" notices go here. One row per browser endpoint.
75
+ `CREATE TABLE IF NOT EXISTS push_subscriptions (
76
+ id TEXT PRIMARY KEY,
77
+ userId TEXT NOT NULL,
78
+ endpoint TEXT NOT NULL UNIQUE,
79
+ json TEXT NOT NULL,
80
+ createdAt INTEGER NOT NULL
81
+ )`,
82
+ // A pairing offer: the nonce a Bee put in its QR (or claimed with an install code), and what the
83
+ // phone bound it to. The tunnel token waits in `delivery` until the Bee's next status poll takes it.
84
+ `CREATE TABLE IF NOT EXISTS pair_nonces (
85
+ nonce TEXT PRIMARY KEY,
86
+ pub TEXT NOT NULL,
87
+ host TEXT NOT NULL,
88
+ hc TEXT NOT NULL,
89
+ lan TEXT,
90
+ sig TEXT NOT NULL,
91
+ state TEXT NOT NULL,
92
+ tenantId TEXT,
93
+ beeId TEXT,
94
+ delivery TEXT,
95
+ iat INTEGER NOT NULL,
96
+ boundAt INTEGER,
97
+ deliveredAt INTEGER
98
+ )`,
99
+ 'CREATE INDEX IF NOT EXISTS idx_otps_email ON otps(email, createdAt)',
100
+ 'CREATE INDEX IF NOT EXISTS idx_bees_tenant ON bees(tenantId, createdAt)',
101
+ 'CREATE INDEX IF NOT EXISTS idx_bees_pub ON bees(pub)',
102
+ 'CREATE INDEX IF NOT EXISTS idx_pair_tenant ON pair_nonces(tenantId, state)',
103
+ 'CREATE INDEX IF NOT EXISTS idx_refresh_user ON refresh_tokens(userId)',
104
+ 'CREATE INDEX IF NOT EXISTS idx_install_tenant ON install_codes(tenantId, createdAt)',
105
+ 'CREATE INDEX IF NOT EXISTS idx_push_user ON push_subscriptions(userId)',
106
+ // Phase 6 (docs/tinybee/01-PRD.md section 5): one row per relayed model call, tokens only, never content.
107
+ `CREATE TABLE IF NOT EXISTS relay_usage (
108
+ id TEXT PRIMARY KEY,
109
+ tenantId TEXT NOT NULL,
110
+ at TEXT NOT NULL,
111
+ model TEXT NOT NULL,
112
+ source TEXT NOT NULL,
113
+ inputTokens INTEGER NOT NULL,
114
+ outputTokens INTEGER NOT NULL
115
+ )`,
116
+ 'CREATE INDEX IF NOT EXISTS idx_relay_tenant ON relay_usage(tenantId, at)',
117
+ `CREATE TABLE IF NOT EXISTS invoices (
118
+ id TEXT PRIMARY KEY,
119
+ tenantId TEXT NOT NULL,
120
+ kind TEXT NOT NULL,
121
+ plan TEXT,
122
+ tokens INTEGER,
123
+ amount INTEGER NOT NULL,
124
+ currency TEXT NOT NULL,
125
+ provider TEXT NOT NULL,
126
+ providerRef TEXT,
127
+ status TEXT NOT NULL,
128
+ createdAt TEXT NOT NULL,
129
+ paidAt TEXT
130
+ )`,
131
+ 'CREATE INDEX IF NOT EXISTS idx_invoice_tenant ON invoices(tenantId, createdAt)',
132
+ ];
133
+ /** Columns added after a table shipped. Each is applied once; SQLite has no ADD COLUMN IF NOT EXISTS. */
134
+ const COLUMNS = [
135
+ ['bees', 'offlineSince', 'INTEGER'],
136
+ ['bees', 'offlineNotifiedAt', 'INTEGER'],
137
+ ['bees', 'devFrozenUntil', 'INTEGER'],
138
+ // Phase 6: plan state lives on the tenant (billing.ts). Older rows read as a trial that started at createdAt.
139
+ ['tenants', 'plan', "TEXT NOT NULL DEFAULT 'trial'"],
140
+ ['tenants', 'trialEndsAt', 'TEXT'],
141
+ ['tenants', 'periodStart', 'TEXT'],
142
+ ['tenants', 'periodEnd', 'TEXT'],
143
+ ['tenants', 'topupTokens', 'INTEGER NOT NULL DEFAULT 0'],
144
+ ['tenants', 'suspendedReason', 'TEXT'],
145
+ ['tenants', 'suspendedAt', 'TEXT'],
146
+ // Phase 8: the tenant is made at sign-in from the email; this is when the person picked a name themselves.
147
+ ['tenants', 'slugChosenAt', 'TEXT'],
148
+ // Phase 7: the store apps register native tokens next to web subscriptions (push.ts, native-push.ts).
149
+ ['push_subscriptions', 'kind', "TEXT NOT NULL DEFAULT 'web'"],
150
+ ['push_subscriptions', 'appVersion', 'TEXT'],
151
+ ];
152
+ function addColumns(d) {
153
+ for (const [table, column, ddl] of COLUMNS) {
154
+ const have = d.prepare(`PRAGMA table_info(${table})`).all().some((c) => c.name === column);
155
+ if (!have)
156
+ d.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${ddl}`);
157
+ }
158
+ }
159
+ let handle;
160
+ function open() {
161
+ const path = hiveConfig.dbPath;
162
+ if (path !== ':memory:')
163
+ mkdirSync(dirname(path), { recursive: true });
164
+ const d = new DatabaseSync(path);
165
+ if (path !== ':memory:')
166
+ d.exec('PRAGMA journal_mode = WAL');
167
+ d.exec('PRAGMA synchronous = NORMAL');
168
+ d.exec('PRAGMA busy_timeout = 5000');
169
+ d.exec('PRAGMA foreign_keys = ON');
170
+ for (const sql of TABLES)
171
+ d.exec(sql);
172
+ addColumns(d);
173
+ return d;
174
+ }
175
+ /** The Hive database, opened and migrated on first use. */
176
+ export function hiveDb() {
177
+ return (handle ??= open());
178
+ }
179
+ /** Tests close the database between cases; the next hiveDb() reopens it at hiveConfig.dbPath. */
180
+ export function closeHiveDb() {
181
+ handle?.close();
182
+ handle = undefined;
183
+ }
184
+ export const newId = (prefix) => `${prefix}_${randomBytes(9).toString('base64url')}`;
185
+ export const nowIso = () => new Date().toISOString();
186
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/hive/db.ts"],"names":[],"mappings":"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"}