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.
- package/.railway/railway.ts +83 -0
- package/.railway/tsconfig.json +13 -0
- package/AGENTS.md +102 -0
- package/Dockerfile +108 -0
- package/LICENSE +21 -0
- package/README.md +275 -2
- package/bin/localdost.js +29 -0
- package/bin/tinybeeai.js +28 -0
- package/compose.yml +63 -0
- package/demo/payloads/ci_failure.json +46 -0
- package/demo/payloads/outage.json +18 -0
- package/demo/payloads/pr_comment_edited.json +50 -0
- package/demo/payloads/pr_merged.json +80 -0
- package/demo/payloads/pr_opened.json +69 -0
- package/demo/payloads/pr_synchronize.json +69 -0
- package/demo/payloads/ticket_created.json +138 -0
- package/demo/sample-app/playwright.config.ts +20 -0
- package/demo/sample-app/server.ts +163 -0
- package/demo/sample-app/tests/checkout.spec.ts +13 -0
- package/demo/sample-app/tests/smoke.spec.ts +8 -0
- package/dist/agent/approval-retries.js +59 -0
- package/dist/agent/approval-retries.js.map +1 -0
- package/dist/agent/approvals.js +390 -0
- package/dist/agent/approvals.js.map +1 -0
- package/dist/agent/chat-bridge.js +154 -0
- package/dist/agent/chat-bridge.js.map +1 -0
- package/dist/agent/chat-lead.js +475 -0
- package/dist/agent/chat-lead.js.map +1 -0
- package/dist/agent/chat-loop.js +106 -0
- package/dist/agent/chat-loop.js.map +1 -0
- package/dist/agent/chat-mcp.js +49 -0
- package/dist/agent/chat-mcp.js.map +1 -0
- package/dist/agent/chat-tool-blocks.js +453 -0
- package/dist/agent/chat-tool-blocks.js.map +1 -0
- package/dist/agent/chat-view.js +94 -0
- package/dist/agent/chat-view.js.map +1 -0
- package/dist/agent/chat-views.js +781 -0
- package/dist/agent/chat-views.js.map +1 -0
- package/dist/agent/chat.js +1703 -0
- package/dist/agent/chat.js.map +1 -0
- package/dist/agent/destinations.js +150 -0
- package/dist/agent/destinations.js.map +1 -0
- package/dist/agent/llm-cli.js +451 -0
- package/dist/agent/llm-cli.js.map +1 -0
- package/dist/agent/llm-codex.js +493 -0
- package/dist/agent/llm-codex.js.map +1 -0
- package/dist/agent/llm-openai.js +211 -0
- package/dist/agent/llm-openai.js.map +1 -0
- package/dist/agent/llm.js +1464 -0
- package/dist/agent/llm.js.map +1 -0
- package/dist/agent/memory.js +33 -0
- package/dist/agent/memory.js.map +1 -0
- package/dist/agent/mock-views.js +93 -0
- package/dist/agent/mock-views.js.map +1 -0
- package/dist/agent/model-availability.js +207 -0
- package/dist/agent/model-availability.js.map +1 -0
- package/dist/agent/model-errors.js +188 -0
- package/dist/agent/model-errors.js.map +1 -0
- package/dist/agent/model-guard.js +311 -0
- package/dist/agent/model-guard.js.map +1 -0
- package/dist/agent/prompts.js +374 -0
- package/dist/agent/prompts.js.map +1 -0
- package/dist/agent/qa-lenses/qa-auth.md +32 -0
- package/dist/agent/qa-lenses/qa-check-then-act.md +33 -0
- package/dist/agent/qa-lenses/qa-control-has-no-effect.md +32 -0
- package/dist/agent/qa-lenses/qa-dates.md +31 -0
- package/dist/agent/qa-lenses/qa-double-submit.md +34 -0
- package/dist/agent/qa-lenses/qa-feature-flag.md +29 -0
- package/dist/agent/qa-lenses/qa-migration.md +35 -0
- package/dist/agent/qa-lenses/qa-money.md +38 -0
- package/dist/agent/qa-lenses/qa-response-shape-break.md +33 -0
- package/dist/agent/qa-lenses/qa-validation.md +29 -0
- package/dist/agent/qa-prompts.js +660 -0
- package/dist/agent/qa-prompts.js.map +1 -0
- package/dist/agent/reasoning.js +55 -0
- package/dist/agent/reasoning.js.map +1 -0
- package/dist/agent/redact.js +48 -0
- package/dist/agent/redact.js.map +1 -0
- package/dist/agent/rules.js +927 -0
- package/dist/agent/rules.js.map +1 -0
- package/dist/agent/runs.js +440 -0
- package/dist/agent/runs.js.map +1 -0
- package/dist/agent/send-retry.js +62 -0
- package/dist/agent/send-retry.js.map +1 -0
- package/dist/agent/team-notes.js +288 -0
- package/dist/agent/team-notes.js.map +1 -0
- package/dist/agent/token-meter.js +31 -0
- package/dist/agent/token-meter.js.map +1 -0
- package/dist/agent/triage.js +506 -0
- package/dist/agent/triage.js.map +1 -0
- package/dist/api.js +1047 -0
- package/dist/api.js.map +1 -0
- package/dist/approval-targets.js +107 -0
- package/dist/approval-targets.js.map +1 -0
- package/dist/bee/cloudflared.js +108 -0
- package/dist/bee/cloudflared.js.map +1 -0
- package/dist/bee/health.js +99 -0
- package/dist/bee/health.js.map +1 -0
- package/dist/bee/hive-client.js +75 -0
- package/dist/bee/hive-client.js.map +1 -0
- package/dist/bee/identity.js +39 -0
- package/dist/bee/identity.js.map +1 -0
- package/dist/bee/models.js +510 -0
- package/dist/bee/models.js.map +1 -0
- package/dist/bee/pairing.js +351 -0
- package/dist/bee/pairing.js.map +1 -0
- package/dist/bee/relay-client.js +50 -0
- package/dist/bee/relay-client.js.map +1 -0
- package/dist/bee/routes.js +214 -0
- package/dist/bee/routes.js.map +1 -0
- package/dist/bee/setup-page.js +223 -0
- package/dist/bee/setup-page.js.map +1 -0
- package/dist/bee/state.js +41 -0
- package/dist/bee/state.js.map +1 -0
- package/dist/bee/status.js +117 -0
- package/dist/bee/status.js.map +1 -0
- package/dist/bee/tunnel-manager.js +245 -0
- package/dist/bee/tunnel-manager.js.map +1 -0
- package/dist/bee/updater.js +268 -0
- package/dist/bee/updater.js.map +1 -0
- package/dist/boot.js +41 -0
- package/dist/boot.js.map +1 -0
- package/dist/call/index.js +145 -0
- package/dist/call/index.js.map +1 -0
- package/dist/case-folders.js +294 -0
- package/dist/case-folders.js.map +1 -0
- package/dist/cases.js +554 -0
- package/dist/cases.js.map +1 -0
- package/dist/chat-blocks.js +709 -0
- package/dist/chat-blocks.js.map +1 -0
- package/dist/chat-parse-util.js +38 -0
- package/dist/chat-parse-util.js.map +1 -0
- package/dist/chat-results.js +96 -0
- package/dist/chat-results.js.map +1 -0
- package/dist/chat-stats.js +193 -0
- package/dist/chat-stats.js.map +1 -0
- package/dist/chat-view-specs.js +186 -0
- package/dist/chat-view-specs.js.map +1 -0
- package/dist/cli/doctor-ops.js +361 -0
- package/dist/cli/doctor-ops.js.map +1 -0
- package/dist/cli/doctor.js +289 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/dogfood.js +70 -0
- package/dist/cli/dogfood.js.map +1 -0
- package/dist/cli/env-file.js +34 -0
- package/dist/cli/env-file.js.map +1 -0
- package/dist/cli/eval-chat-cases.js +359 -0
- package/dist/cli/eval-chat-cases.js.map +1 -0
- package/dist/cli/eval-chat-results.js +85 -0
- package/dist/cli/eval-chat-results.js.map +1 -0
- package/dist/cli/eval-chat.js +508 -0
- package/dist/cli/eval-chat.js.map +1 -0
- package/dist/cli/eval-designer.js +67 -0
- package/dist/cli/eval-designer.js.map +1 -0
- package/dist/cli/eval-qa-review.js +284 -0
- package/dist/cli/eval-qa-review.js.map +1 -0
- package/dist/cli/golden-export.js +35 -0
- package/dist/cli/golden-export.js.map +1 -0
- package/dist/cli/index.js +90 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.js +746 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/scan-repo.js +199 -0
- package/dist/cli/scan-repo.js.map +1 -0
- package/dist/cli/seed.js +108 -0
- package/dist/cli/seed.js.map +1 -0
- package/dist/cli/tinybee.js +247 -0
- package/dist/cli/tinybee.js.map +1 -0
- package/dist/config.js +138 -0
- package/dist/config.js.map +1 -0
- package/dist/connect/aivision-local.js +833 -0
- package/dist/connect/aivision-local.js.map +1 -0
- package/dist/connect/aivision-token.js +84 -0
- package/dist/connect/aivision-token.js.map +1 -0
- package/dist/connect/crypto.js +65 -0
- package/dist/connect/crypto.js.map +1 -0
- package/dist/connect/deps.js +110 -0
- package/dist/connect/deps.js.map +1 -0
- package/dist/connect/engines.js +144 -0
- package/dist/connect/engines.js.map +1 -0
- package/dist/connect/github-access.js +74 -0
- package/dist/connect/github-access.js.map +1 -0
- package/dist/connect/github-app.js +129 -0
- package/dist/connect/github-app.js.map +1 -0
- package/dist/connect/index.js +9 -0
- package/dist/connect/index.js.map +1 -0
- package/dist/connect/model-choices.js +201 -0
- package/dist/connect/model-choices.js.map +1 -0
- package/dist/connect/providers.js +900 -0
- package/dist/connect/providers.js.map +1 -0
- package/dist/connect/readiness.js +232 -0
- package/dist/connect/readiness.js.map +1 -0
- package/dist/connect/redact.js +16 -0
- package/dist/connect/redact.js.map +1 -0
- package/dist/connect/registry.js +406 -0
- package/dist/connect/registry.js.map +1 -0
- package/dist/connect/store.js +283 -0
- package/dist/connect/store.js.map +1 -0
- package/dist/connect/tunnel.js +134 -0
- package/dist/connect/tunnel.js.map +1 -0
- package/dist/connect/types.js +8 -0
- package/dist/connect/types.js.map +1 -0
- package/dist/connections/index.js +5 -0
- package/dist/connections/index.js.map +1 -0
- package/dist/connections/manager.js +223 -0
- package/dist/connections/manager.js.map +1 -0
- package/dist/connections/presets.js +264 -0
- package/dist/connections/presets.js.map +1 -0
- package/dist/connections/store.js +132 -0
- package/dist/connections/store.js.map +1 -0
- package/dist/connections/tools.js +206 -0
- package/dist/connections/tools.js.map +1 -0
- package/dist/db-schema.js +355 -0
- package/dist/db-schema.js.map +1 -0
- package/dist/db.js +379 -0
- package/dist/db.js.map +1 -0
- package/dist/delivery.js +49 -0
- package/dist/delivery.js.map +1 -0
- package/dist/deploy-wait.js +701 -0
- package/dist/deploy-wait.js.map +1 -0
- package/dist/disk.js +243 -0
- package/dist/disk.js.map +1 -0
- package/dist/dot-health.js +966 -0
- package/dist/dot-health.js.map +1 -0
- package/dist/dot-remove.js +246 -0
- package/dist/dot-remove.js.map +1 -0
- package/dist/events.js +38 -0
- package/dist/events.js.map +1 -0
- package/dist/evidence-pack.js +423 -0
- package/dist/evidence-pack.js.map +1 -0
- package/dist/flows/answers.js +289 -0
- package/dist/flows/answers.js.map +1 -0
- package/dist/flows/change.js +811 -0
- package/dist/flows/change.js.map +1 -0
- package/dist/flows/checkStatus.js +524 -0
- package/dist/flows/checkStatus.js.map +1 -0
- package/dist/flows/ci.js +236 -0
- package/dist/flows/ci.js.map +1 -0
- package/dist/flows/ciFailure.js +76 -0
- package/dist/flows/ciFailure.js.map +1 -0
- package/dist/flows/common.js +522 -0
- package/dist/flows/common.js.map +1 -0
- package/dist/flows/default-branch.js +29 -0
- package/dist/flows/default-branch.js.map +1 -0
- package/dist/flows/defectDraft.js +447 -0
- package/dist/flows/defectDraft.js.map +1 -0
- package/dist/flows/defects.js +623 -0
- package/dist/flows/defects.js.map +1 -0
- package/dist/flows/digest.js +295 -0
- package/dist/flows/digest.js.map +1 -0
- package/dist/flows/impact.js +82 -0
- package/dist/flows/impact.js.map +1 -0
- package/dist/flows/index.js +23 -0
- package/dist/flows/index.js.map +1 -0
- package/dist/flows/intent-sources.js +72 -0
- package/dist/flows/intent-sources.js.map +1 -0
- package/dist/flows/mergeCases.js +169 -0
- package/dist/flows/mergeCases.js.map +1 -0
- package/dist/flows/nightlyRun.js +82 -0
- package/dist/flows/nightlyRun.js.map +1 -0
- package/dist/flows/outage.js +64 -0
- package/dist/flows/outage.js.map +1 -0
- package/dist/flows/postMerge.js +5 -0
- package/dist/flows/postMerge.js.map +1 -0
- package/dist/flows/prCheck.js +5 -0
- package/dist/flows/prCheck.js.map +1 -0
- package/dist/flows/prTarget.js +66 -0
- package/dist/flows/prTarget.js.map +1 -0
- package/dist/flows/qa.js +363 -0
- package/dist/flows/qa.js.map +1 -0
- package/dist/flows/questions.js +160 -0
- package/dist/flows/questions.js.map +1 -0
- package/dist/flows/recovery.js +64 -0
- package/dist/flows/recovery.js.map +1 -0
- package/dist/flows/rerun.js +50 -0
- package/dist/flows/rerun.js.map +1 -0
- package/dist/flows/testDesign.js +294 -0
- package/dist/flows/testDesign.js.map +1 -0
- package/dist/flows/testDesignJob.js +46 -0
- package/dist/flows/testDesignJob.js.map +1 -0
- package/dist/flows/testRepo.js +228 -0
- package/dist/flows/testRepo.js.map +1 -0
- package/dist/flows/testSavings.js +381 -0
- package/dist/flows/testSavings.js.map +1 -0
- package/dist/flows/testStatus.js +343 -0
- package/dist/flows/testStatus.js.map +1 -0
- package/dist/flows/ticketContext.js +425 -0
- package/dist/flows/ticketContext.js.map +1 -0
- package/dist/flows/ticketReview.js +249 -0
- package/dist/flows/ticketReview.js.map +1 -0
- package/dist/flows/ticks.js +73 -0
- package/dist/flows/ticks.js.map +1 -0
- package/dist/hive/admin.js +122 -0
- package/dist/hive/admin.js.map +1 -0
- package/dist/hive/auth.js +130 -0
- package/dist/hive/auth.js.map +1 -0
- package/dist/hive/billing.js +278 -0
- package/dist/hive/billing.js.map +1 -0
- package/dist/hive/config.js +63 -0
- package/dist/hive/config.js.map +1 -0
- package/dist/hive/db.js +186 -0
- package/dist/hive/db.js.map +1 -0
- package/dist/hive/embed.js +76 -0
- package/dist/hive/embed.js.map +1 -0
- package/dist/hive/errors.js +17 -0
- package/dist/hive/errors.js.map +1 -0
- package/dist/hive/google.js +75 -0
- package/dist/hive/google.js.map +1 -0
- package/dist/hive/index.js +25 -0
- package/dist/hive/index.js.map +1 -0
- package/dist/hive/jwt.js +57 -0
- package/dist/hive/jwt.js.map +1 -0
- package/dist/hive/keys.js +61 -0
- package/dist/hive/keys.js.map +1 -0
- package/dist/hive/mail.js +27 -0
- package/dist/hive/mail.js.map +1 -0
- package/dist/hive/native-push.js +255 -0
- package/dist/hive/native-push.js.map +1 -0
- package/dist/hive/pairing.js +342 -0
- package/dist/hive/pairing.js.map +1 -0
- package/dist/hive/presence.js +121 -0
- package/dist/hive/presence.js.map +1 -0
- package/dist/hive/push.js +185 -0
- package/dist/hive/push.js.map +1 -0
- package/dist/hive/relay.js +205 -0
- package/dist/hive/relay.js.map +1 -0
- package/dist/hive/routes.js +228 -0
- package/dist/hive/routes.js.map +1 -0
- package/dist/hive/server.js +12 -0
- package/dist/hive/server.js.map +1 -0
- package/dist/hive/session.js +28 -0
- package/dist/hive/session.js.map +1 -0
- package/dist/hive/tenants.js +287 -0
- package/dist/hive/tenants.js.map +1 -0
- package/dist/hive/tunnel/cloudflare.js +160 -0
- package/dist/hive/tunnel/cloudflare.js.map +1 -0
- package/dist/hive/tunnel/mock.js +52 -0
- package/dist/hive/tunnel/mock.js.map +1 -0
- package/dist/hive/tunnel/provider.js +19 -0
- package/dist/hive/tunnel/provider.js.map +1 -0
- package/dist/hive/updates.js +61 -0
- package/dist/hive/updates.js.map +1 -0
- package/dist/http-error.js +11 -0
- package/dist/http-error.js.map +1 -0
- package/dist/impact/classify.js +226 -0
- package/dist/impact/classify.js.map +1 -0
- package/dist/impact/find.js +259 -0
- package/dist/impact/find.js.map +1 -0
- package/dist/impact/pr.js +54 -0
- package/dist/impact/pr.js.map +1 -0
- package/dist/impact/store.js +365 -0
- package/dist/impact/store.js.map +1 -0
- package/dist/impact/text.js +158 -0
- package/dist/impact/text.js.map +1 -0
- package/dist/index.js +288 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/adf.js +397 -0
- package/dist/integrations/adf.js.map +1 -0
- package/dist/integrations/bot-marker.js +103 -0
- package/dist/integrations/bot-marker.js.map +1 -0
- package/dist/integrations/github-issues.js +705 -0
- package/dist/integrations/github-issues.js.map +1 -0
- package/dist/integrations/github.js +1284 -0
- package/dist/integrations/github.js.map +1 -0
- package/dist/integrations/issue-create.js +60 -0
- package/dist/integrations/issue-create.js.map +1 -0
- package/dist/integrations/jira.js +279 -0
- package/dist/integrations/jira.js.map +1 -0
- package/dist/integrations/linear.js +273 -0
- package/dist/integrations/linear.js.map +1 -0
- package/dist/integrations/own-identity-warm.js +47 -0
- package/dist/integrations/own-identity-warm.js.map +1 -0
- package/dist/integrations/own-identity.js +39 -0
- package/dist/integrations/own-identity.js.map +1 -0
- package/dist/integrations/status-change.js +42 -0
- package/dist/integrations/status-change.js.map +1 -0
- package/dist/lead-defects.js +202 -0
- package/dist/lead-defects.js.map +1 -0
- package/dist/lead-digest.js +333 -0
- package/dist/lead-digest.js.map +1 -0
- package/dist/lead-release.js +286 -0
- package/dist/lead-release.js.map +1 -0
- package/dist/lead.js +328 -0
- package/dist/lead.js.map +1 -0
- package/dist/legacy-names.js +51 -0
- package/dist/legacy-names.js.map +1 -0
- package/dist/limits.js +44 -0
- package/dist/limits.js.map +1 -0
- package/dist/link-trust.js +224 -0
- package/dist/link-trust.js.map +1 -0
- package/dist/links.js +219 -0
- package/dist/links.js.map +1 -0
- package/dist/loopback.js +35 -0
- package/dist/loopback.js.map +1 -0
- package/dist/model-cap.js +60 -0
- package/dist/model-cap.js.map +1 -0
- package/dist/model-usage.js +173 -0
- package/dist/model-usage.js.map +1 -0
- package/dist/monitor/backfill.js +39 -0
- package/dist/monitor/backfill.js.map +1 -0
- package/dist/monitor/browser-probe.js +198 -0
- package/dist/monitor/browser-probe.js.map +1 -0
- package/dist/monitor/catch-up.js +31 -0
- package/dist/monitor/catch-up.js.map +1 -0
- package/dist/monitor/pollers.js +1606 -0
- package/dist/monitor/pollers.js.map +1 -0
- package/dist/monitor/probes.js +178 -0
- package/dist/monitor/probes.js.map +1 -0
- package/dist/monitor/self-health.js +228 -0
- package/dist/monitor/self-health.js.map +1 -0
- package/dist/monitor/statuspage.js +105 -0
- package/dist/monitor/statuspage.js.map +1 -0
- package/dist/nightly-scheduler.js +127 -0
- package/dist/nightly-scheduler.js.map +1 -0
- package/dist/nightly.js +141 -0
- package/dist/nightly.js.map +1 -0
- package/dist/notify/headline.js +114 -0
- package/dist/notify/headline.js.map +1 -0
- package/dist/notify/push.js +174 -0
- package/dist/notify/push.js.map +1 -0
- package/dist/object-cards.js +585 -0
- package/dist/object-cards.js.map +1 -0
- package/dist/object-links.js +47 -0
- package/dist/object-links.js.map +1 -0
- package/dist/onboarding-checks.js +141 -0
- package/dist/onboarding-checks.js.map +1 -0
- package/dist/onboarding.js +401 -0
- package/dist/onboarding.js.map +1 -0
- package/dist/path-filters.js +62 -0
- package/dist/path-filters.js.map +1 -0
- package/dist/phone/alerts.js +67 -0
- package/dist/phone/alerts.js.map +1 -0
- package/dist/phone/auth.js +240 -0
- package/dist/phone/auth.js.map +1 -0
- package/dist/phone/pairing.js +442 -0
- package/dist/phone/pairing.js.map +1 -0
- package/dist/phone/prefs.js +27 -0
- package/dist/phone/prefs.js.map +1 -0
- package/dist/phone/tailscale.js +161 -0
- package/dist/phone/tailscale.js.map +1 -0
- package/dist/pr-scope.js +441 -0
- package/dist/pr-scope.js.map +1 -0
- package/dist/proc.js +156 -0
- package/dist/proc.js.map +1 -0
- package/dist/profile/cache.js +108 -0
- package/dist/profile/cache.js.map +1 -0
- package/dist/profile/ci.js +216 -0
- package/dist/profile/ci.js.map +1 -0
- package/dist/profile/index.js +8 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/profile/job.js +135 -0
- package/dist/profile/job.js.map +1 -0
- package/dist/profile/queries/go-tags.scm +47 -0
- package/dist/profile/queries/java-tags.scm +25 -0
- package/dist/profile/queries/javascript-tags.scm +104 -0
- package/dist/profile/queries/python-tags.scm +19 -0
- package/dist/profile/queries/typescript-tags.scm +28 -0
- package/dist/profile/scan-thread.js +42 -0
- package/dist/profile/scan-thread.js.map +1 -0
- package/dist/profile/scan-worker.js +16 -0
- package/dist/profile/scan-worker.js.map +1 -0
- package/dist/profile/scan.js +351 -0
- package/dist/profile/scan.js.map +1 -0
- package/dist/profile/stack.js +528 -0
- package/dist/profile/stack.js.map +1 -0
- package/dist/profile/store.js +35 -0
- package/dist/profile/store.js.map +1 -0
- package/dist/profile/tests.js +399 -0
- package/dist/profile/tests.js.map +1 -0
- package/dist/queue.js +350 -0
- package/dist/queue.js.map +1 -0
- package/dist/refs.js +756 -0
- package/dist/refs.js.map +1 -0
- package/dist/release-notes.js +272 -0
- package/dist/release-notes.js.map +1 -0
- package/dist/reports/build.js +243 -0
- package/dist/reports/build.js.map +1 -0
- package/dist/reports/index.js +211 -0
- package/dist/reports/index.js.map +1 -0
- package/dist/reports/store.js +150 -0
- package/dist/reports/store.js.map +1 -0
- package/dist/reports/ticket-titles.js +124 -0
- package/dist/reports/ticket-titles.js.map +1 -0
- package/dist/reports/trace-map.js +1278 -0
- package/dist/reports/trace-map.js.map +1 -0
- package/dist/reports/traceability.js +422 -0
- package/dist/reports/traceability.js.map +1 -0
- package/dist/repos/mirror.js +356 -0
- package/dist/repos/mirror.js.map +1 -0
- package/dist/repos-github.js +108 -0
- package/dist/repos-github.js.map +1 -0
- package/dist/repos.js +891 -0
- package/dist/repos.js.map +1 -0
- package/dist/review/backend-anthropic.js +90 -0
- package/dist/review/backend-anthropic.js.map +1 -0
- package/dist/review/backend-cli.js +248 -0
- package/dist/review/backend-cli.js.map +1 -0
- package/dist/review/backend-codex.js +81 -0
- package/dist/review/backend-codex.js.map +1 -0
- package/dist/review/backend-mock.js +686 -0
- package/dist/review/backend-mock.js.map +1 -0
- package/dist/review/backend-only.js +168 -0
- package/dist/review/backend-only.js.map +1 -0
- package/dist/review/backend.js +105 -0
- package/dist/review/backend.js.map +1 -0
- package/dist/review/baseline/render-v1.js +483 -0
- package/dist/review/baseline/render-v1.js.map +1 -0
- package/dist/review/change-summary.js +197 -0
- package/dist/review/change-summary.js.map +1 -0
- package/dist/review/changelog.js +40 -0
- package/dist/review/changelog.js.map +1 -0
- package/dist/review/check.js +494 -0
- package/dist/review/check.js.map +1 -0
- package/dist/review/checkout.js +185 -0
- package/dist/review/checkout.js.map +1 -0
- package/dist/review/classify.js +178 -0
- package/dist/review/classify.js.map +1 -0
- package/dist/review/coverage.js +347 -0
- package/dist/review/coverage.js.map +1 -0
- package/dist/review/decision-eval.js +121 -0
- package/dist/review/decision-eval.js.map +1 -0
- package/dist/review/deliver.js +104 -0
- package/dist/review/deliver.js.map +1 -0
- package/dist/review/designer-eval.js +280 -0
- package/dist/review/designer-eval.js.map +1 -0
- package/dist/review/dogfood-digest.js +136 -0
- package/dist/review/dogfood-digest.js.map +1 -0
- package/dist/review/dogfood-eval.js +486 -0
- package/dist/review/dogfood-eval.js.map +1 -0
- package/dist/review/environment.js +109 -0
- package/dist/review/environment.js.map +1 -0
- package/dist/review/eval.js +405 -0
- package/dist/review/eval.js.map +1 -0
- package/dist/review/glob.js +110 -0
- package/dist/review/glob.js.map +1 -0
- package/dist/review/golden-export.js +219 -0
- package/dist/review/golden-export.js.map +1 -0
- package/dist/review/impact.js +406 -0
- package/dist/review/impact.js.map +1 -0
- package/dist/review/imports.js +542 -0
- package/dist/review/imports.js.map +1 -0
- package/dist/review/index.js +512 -0
- package/dist/review/index.js.map +1 -0
- package/dist/review/intent.js +128 -0
- package/dist/review/intent.js.map +1 -0
- package/dist/review/lenses.js +167 -0
- package/dist/review/lenses.js.map +1 -0
- package/dist/review/linked-tickets.js +293 -0
- package/dist/review/linked-tickets.js.map +1 -0
- package/dist/review/merge.js +370 -0
- package/dist/review/merge.js.map +1 -0
- package/dist/review/on-demand.js +218 -0
- package/dist/review/on-demand.js.map +1 -0
- package/dist/review/prompt-eval.js +299 -0
- package/dist/review/prompt-eval.js.map +1 -0
- package/dist/review/prompt-variants.js +37 -0
- package/dist/review/prompt-variants.js.map +1 -0
- package/dist/review/readability-eval.js +217 -0
- package/dist/review/readability-eval.js.map +1 -0
- package/dist/review/readability.js +295 -0
- package/dist/review/readability.js.map +1 -0
- package/dist/review/render.js +2409 -0
- package/dist/review/render.js.map +1 -0
- package/dist/review/repo.js +194 -0
- package/dist/review/repo.js.map +1 -0
- package/dist/review/report-plan.js +90 -0
- package/dist/review/report-plan.js.map +1 -0
- package/dist/review/routes.js +195 -0
- package/dist/review/routes.js.map +1 -0
- package/dist/review/run-summary.js +34 -0
- package/dist/review/run-summary.js.map +1 -0
- package/dist/review/run.js +245 -0
- package/dist/review/run.js.map +1 -0
- package/dist/review/scope.js +454 -0
- package/dist/review/scope.js.map +1 -0
- package/dist/review/security.js +432 -0
- package/dist/review/security.js.map +1 -0
- package/dist/review/signals.js +550 -0
- package/dist/review/signals.js.map +1 -0
- package/dist/review/specs.js +150 -0
- package/dist/review/specs.js.map +1 -0
- package/dist/review/ste.js +133 -0
- package/dist/review/ste.js.map +1 -0
- package/dist/review/test-repo-file.js +18 -0
- package/dist/review/test-repo-file.js.map +1 -0
- package/dist/review/test-repo-lines.js +53 -0
- package/dist/review/test-repo-lines.js.map +1 -0
- package/dist/review/ticket-on-demand.js +232 -0
- package/dist/review/ticket-on-demand.js.map +1 -0
- package/dist/review/yaml.js +298 -0
- package/dist/review/yaml.js.map +1 -0
- package/dist/room.js +361 -0
- package/dist/room.js.map +1 -0
- package/dist/routes/activity.js +219 -0
- package/dist/routes/activity.js.map +1 -0
- package/dist/routes/call.js +29 -0
- package/dist/routes/call.js.map +1 -0
- package/dist/routes/cards.js +40 -0
- package/dist/routes/cards.js.map +1 -0
- package/dist/routes/cases.js +133 -0
- package/dist/routes/cases.js.map +1 -0
- package/dist/routes/connect.js +268 -0
- package/dist/routes/connect.js.map +1 -0
- package/dist/routes/connection-presets.js +32 -0
- package/dist/routes/connection-presets.js.map +1 -0
- package/dist/routes/connections.js +177 -0
- package/dist/routes/connections.js.map +1 -0
- package/dist/routes/disk.js +19 -0
- package/dist/routes/disk.js.map +1 -0
- package/dist/routes/docs.js +71 -0
- package/dist/routes/docs.js.map +1 -0
- package/dist/routes/dot-suggest.js +1002 -0
- package/dist/routes/dot-suggest.js.map +1 -0
- package/dist/routes/evidence-pack.js +16 -0
- package/dist/routes/evidence-pack.js.map +1 -0
- package/dist/routes/health.js +121 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/impact.js +48 -0
- package/dist/routes/impact.js.map +1 -0
- package/dist/routes/lead.js +50 -0
- package/dist/routes/lead.js.map +1 -0
- package/dist/routes/links.js +13 -0
- package/dist/routes/links.js.map +1 -0
- package/dist/routes/markdown.js +62 -0
- package/dist/routes/markdown.js.map +1 -0
- package/dist/routes/onboarding.js +47 -0
- package/dist/routes/onboarding.js.map +1 -0
- package/dist/routes/phone.js +231 -0
- package/dist/routes/phone.js.map +1 -0
- package/dist/routes/release-notes.js +30 -0
- package/dist/routes/release-notes.js.map +1 -0
- package/dist/routes/reports.js +102 -0
- package/dist/routes/reports.js.map +1 -0
- package/dist/routes/repos.js +91 -0
- package/dist/routes/repos.js.map +1 -0
- package/dist/routes/review.js +283 -0
- package/dist/routes/review.js.map +1 -0
- package/dist/routes/roles.js +114 -0
- package/dist/routes/roles.js.map +1 -0
- package/dist/routes/room.js +21 -0
- package/dist/routes/room.js.map +1 -0
- package/dist/routes/runner.js +156 -0
- package/dist/routes/runner.js.map +1 -0
- package/dist/routes/runs.js +84 -0
- package/dist/routes/runs.js.map +1 -0
- package/dist/routes/setup.js +18 -0
- package/dist/routes/setup.js.map +1 -0
- package/dist/routes/test-runs.js +220 -0
- package/dist/routes/test-runs.js.map +1 -0
- package/dist/routes/ticket-status.js +17 -0
- package/dist/routes/ticket-status.js.map +1 -0
- package/dist/routes/traceability.js +143 -0
- package/dist/routes/traceability.js.map +1 -0
- package/dist/routes/true.js +142 -0
- package/dist/routes/true.js.map +1 -0
- package/dist/routes/updates.js +70 -0
- package/dist/routes/updates.js.map +1 -0
- package/dist/runner/adapters/index.js +12 -0
- package/dist/runner/adapters/index.js.map +1 -0
- package/dist/runner/adapters/playwright.js +68 -0
- package/dist/runner/adapters/playwright.js.map +1 -0
- package/dist/runner/aivision/cases.js +172 -0
- package/dist/runner/aivision/cases.js.map +1 -0
- package/dist/runner/aivision/cli.js +201 -0
- package/dist/runner/aivision/cli.js.map +1 -0
- package/dist/runner/aivision/index.js +281 -0
- package/dist/runner/aivision/index.js.map +1 -0
- package/dist/runner/aivision/server.js +394 -0
- package/dist/runner/aivision/server.js.map +1 -0
- package/dist/runner/aivision/shared.js +140 -0
- package/dist/runner/aivision/shared.js.map +1 -0
- package/dist/runner/artifact-cap.js +189 -0
- package/dist/runner/artifact-cap.js.map +1 -0
- package/dist/runner/artifacts.js +433 -0
- package/dist/runner/artifacts.js.map +1 -0
- package/dist/runner/command.js +564 -0
- package/dist/runner/command.js.map +1 -0
- package/dist/runner/copyfiles.js +221 -0
- package/dist/runner/copyfiles.js.map +1 -0
- package/dist/runner/engines.js +32 -0
- package/dist/runner/engines.js.map +1 -0
- package/dist/runner/evidence.js +114 -0
- package/dist/runner/evidence.js.map +1 -0
- package/dist/runner/host-env.js +160 -0
- package/dist/runner/host-env.js.map +1 -0
- package/dist/runner/index.js +1221 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/runner/observe.js +603 -0
- package/dist/runner/observe.js.map +1 -0
- package/dist/runner/playwright-json.js +108 -0
- package/dist/runner/playwright-json.js.map +1 -0
- package/dist/runner/pwgen/exec.js +192 -0
- package/dist/runner/pwgen/exec.js.map +1 -0
- package/dist/runner/pwgen/explore.js +111 -0
- package/dist/runner/pwgen/explore.js.map +1 -0
- package/dist/runner/pwgen/index.js +423 -0
- package/dist/runner/pwgen/index.js.map +1 -0
- package/dist/runner/pwgen/propose.js +69 -0
- package/dist/runner/pwgen/propose.js.map +1 -0
- package/dist/runner/pwgen/source.js +632 -0
- package/dist/runner/pwgen/source.js.map +1 -0
- package/dist/runner/setup.js +222 -0
- package/dist/runner/setup.js.map +1 -0
- package/dist/runner/step-reporter.js +107 -0
- package/dist/runner/step-reporter.js.map +1 -0
- package/dist/runner/test-repo.js +326 -0
- package/dist/runner/test-repo.js.map +1 -0
- package/dist/runner/typed-value.js +46 -0
- package/dist/runner/typed-value.js.map +1 -0
- package/dist/runner/verify.js +133 -0
- package/dist/runner/verify.js.map +1 -0
- package/dist/runner/worktree.js +349 -0
- package/dist/runner/worktree.js.map +1 -0
- package/dist/sandbox.js +61 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/server.js +262 -0
- package/dist/server.js.map +1 -0
- package/dist/shadow-week.js +126 -0
- package/dist/shadow-week.js.map +1 -0
- package/dist/shutdown.js +92 -0
- package/dist/shutdown.js.map +1 -0
- package/dist/slack/index.js +645 -0
- package/dist/slack/index.js.map +1 -0
- package/dist/stages/config.js +147 -0
- package/dist/stages/config.js.map +1 -0
- package/dist/stages/index.js +41 -0
- package/dist/stages/index.js.map +1 -0
- package/dist/suites.js +293 -0
- package/dist/suites.js.map +1 -0
- package/dist/target-url.js +116 -0
- package/dist/target-url.js.map +1 -0
- package/dist/test-runs.js +662 -0
- package/dist/test-runs.js.map +1 -0
- package/dist/ticket-keys.js +97 -0
- package/dist/ticket-keys.js.map +1 -0
- package/dist/ticket-supersede.js +105 -0
- package/dist/ticket-supersede.js.map +1 -0
- package/dist/tinybee/ed25519.js +99 -0
- package/dist/tinybee/ed25519.js.map +1 -0
- package/dist/tinybee/models-routes.js +19 -0
- package/dist/tinybee/models-routes.js.map +1 -0
- package/dist/tinybee/pair-payload.js +41 -0
- package/dist/tinybee/pair-payload.js.map +1 -0
- package/dist/tinybee/update-manifest.js +77 -0
- package/dist/tinybee/update-manifest.js.map +1 -0
- package/dist/tinybee/well-known.js +64 -0
- package/dist/tinybee/well-known.js.map +1 -0
- package/dist/tinybee/workflows/activity.js +23 -0
- package/dist/tinybee/workflows/activity.js.map +1 -0
- package/dist/tinybee/workflows/cron.js +210 -0
- package/dist/tinybee/workflows/cron.js.map +1 -0
- package/dist/tinybee/workflows/engine.js +371 -0
- package/dist/tinybee/workflows/engine.js.map +1 -0
- package/dist/tinybee/workflows/from-text.js +203 -0
- package/dist/tinybee/workflows/from-text.js.map +1 -0
- package/dist/tinybee/workflows/routes.js +189 -0
- package/dist/tinybee/workflows/routes.js.map +1 -0
- package/dist/tinybee/workflows/scheduler.js +100 -0
- package/dist/tinybee/workflows/scheduler.js.map +1 -0
- package/dist/tinybee/workflows/skills.js +227 -0
- package/dist/tinybee/workflows/skills.js.map +1 -0
- package/dist/tinybee/workflows/store.js +205 -0
- package/dist/tinybee/workflows/store.js.map +1 -0
- package/dist/tinybee/workflows/types.js +180 -0
- package/dist/tinybee/workflows/types.js.map +1 -0
- package/dist/tinybee/workflows/yaml.js +323 -0
- package/dist/tinybee/workflows/yaml.js.map +1 -0
- package/dist/true/api.js +495 -0
- package/dist/true/api.js.map +1 -0
- package/dist/true/client.js +292 -0
- package/dist/true/client.js.map +1 -0
- package/dist/true/clock.js +36 -0
- package/dist/true/clock.js.map +1 -0
- package/dist/true/events.js +125 -0
- package/dist/true/events.js.map +1 -0
- package/dist/true/hosts.js +98 -0
- package/dist/true/hosts.js.map +1 -0
- package/dist/true/index.js +29 -0
- package/dist/true/index.js.map +1 -0
- package/dist/true/key.js +54 -0
- package/dist/true/key.js.map +1 -0
- package/dist/true/line.js +69 -0
- package/dist/true/line.js.map +1 -0
- package/dist/true/mask.js +31 -0
- package/dist/true/mask.js.map +1 -0
- package/dist/true/names.js +114 -0
- package/dist/true/names.js.map +1 -0
- package/dist/true/outbox.js +233 -0
- package/dist/true/outbox.js.map +1 -0
- package/dist/true/replay.js +164 -0
- package/dist/true/replay.js.map +1 -0
- package/dist/true/settings.js +123 -0
- package/dist/true/settings.js.map +1 -0
- package/dist/true/status.js +189 -0
- package/dist/true/status.js.map +1 -0
- package/dist/true/sync-cases.js +222 -0
- package/dist/true/sync-cases.js.map +1 -0
- package/dist/true/sync-manual.js +295 -0
- package/dist/true/sync-manual.js.map +1 -0
- package/dist/true/sync-runs.js +109 -0
- package/dist/true/sync-runs.js.map +1 -0
- package/dist/true/worker.js +414 -0
- package/dist/true/worker.js.map +1 -0
- package/dist/types.js +32 -0
- package/dist/types.js.map +1 -0
- package/dist/updates/asks.js +38 -0
- package/dist/updates/asks.js.map +1 -0
- package/dist/updates/index.js +835 -0
- package/dist/updates/index.js.map +1 -0
- package/dist/updates/owner.js +24 -0
- package/dist/updates/owner.js.map +1 -0
- package/dist/updates/prefs.js +118 -0
- package/dist/updates/prefs.js.map +1 -0
- package/dist/updates/route.js +78 -0
- package/dist/updates/route.js.map +1 -0
- package/dist/updates/sources.js +345 -0
- package/dist/updates/sources.js.map +1 -0
- package/dist/updates/words.js +452 -0
- package/dist/updates/words.js.map +1 -0
- package/dist/version.js +53 -0
- package/dist/version.js.map +1 -0
- package/dist/view-compute.js +382 -0
- package/dist/view-compute.js.map +1 -0
- package/dist/view-spec.js +894 -0
- package/dist/view-spec.js.map +1 -0
- package/dist/web/apple-touch-icon.png +0 -0
- package/dist/web/assets/ApprovalCard-Br_z5z7G.css +1 -0
- package/dist/web/assets/ApprovalCard-CfGhGFo_.js +3 -0
- package/dist/web/assets/CardFromRef-BaTGmZ9c.js +2 -0
- package/dist/web/assets/CardFromRef-DO7i2uDd.css +1 -0
- package/dist/web/assets/Cases-8l_6UcLh.js +2 -0
- package/dist/web/assets/Cases-CpfED0uB.css +1 -0
- package/dist/web/assets/Chat-BKDiR0qt.js +3 -0
- package/dist/web/assets/Chat-DxjdyYUu.css +1 -0
- package/dist/web/assets/ConfirmDialog-CIMveD-b.js +2 -0
- package/dist/web/assets/ConnectSheet-Cm5vbZdR.js +4 -0
- package/dist/web/assets/Docs-HKGuY0WE.js +2 -0
- package/dist/web/assets/Docs-fodKx8S7.css +1 -0
- package/dist/web/assets/DotDetail-DskS3NWe.js +2 -0
- package/dist/web/assets/DotDetail-OWRSD_1x.css +1 -0
- package/dist/web/assets/DotStage-BZDclfzV.css +1 -0
- package/dist/web/assets/DotStage-CtMNzCN3.js +2 -0
- package/dist/web/assets/Dots-BqCsS34m.js +2 -0
- package/dist/web/assets/EvidencePack-DQ3kCJX4.js +2 -0
- package/dist/web/assets/EvidencePack-DV_9ETsA.css +1 -0
- package/dist/web/assets/FailedDeliveries-1F2kFcs9.js +2 -0
- package/dist/web/assets/FailedDeliveries-DXa2_VvI.css +1 -0
- package/dist/web/assets/Feed-5wiHRTFK.js +2 -0
- package/dist/web/assets/GfmView-C-NYaduC.js +4 -0
- package/dist/web/assets/ImpactList-C-RNuDB0.js +2 -0
- package/dist/web/assets/ImpactList-C612dFdw.css +1 -0
- package/dist/web/assets/Inbox-kc1bKVL_.js +2 -0
- package/dist/web/assets/JoinScreen-C3L4wmP3.js +2 -0
- package/dist/web/assets/JoinScreen-COeAUv5v.css +1 -0
- package/dist/web/assets/LeadDialog-N3Zul9Rw.js +8 -0
- package/dist/web/assets/LeadDialog-xyWjAuAS.css +1 -0
- package/dist/web/assets/ListeningLine-BRFNaczY.js +2 -0
- package/dist/web/assets/ListeningLine-pN8CgyiK.css +1 -0
- package/dist/web/assets/Mascots-pIyGpxtD.js +2 -0
- package/dist/web/assets/ModelChoices-BxO1zyyr.js +2 -0
- package/dist/web/assets/ModelChoices-DQJnVxfs.css +1 -0
- package/dist/web/assets/NewDotDialog-CDPUWmgN.js +2 -0
- package/dist/web/assets/NewDotDialog-DrPPqkSZ.css +1 -0
- package/dist/web/assets/NewTestRunDialog-BQBthVHE.js +2 -0
- package/dist/web/assets/NoBreakNames-Csxdqdt6.js +2 -0
- package/dist/web/assets/Pair-omex_K7H.js +2 -0
- package/dist/web/assets/PushSection-CmqHlE_2.js +2 -0
- package/dist/web/assets/ReleaseNotes-B6VqFewP.js +2 -0
- package/dist/web/assets/ReleaseNotes-DBJUL7Vm.css +1 -0
- package/dist/web/assets/ReportPage-BHS1xWEt.js +162 -0
- package/dist/web/assets/Reports-BEHnDIb1.js +2 -0
- package/dist/web/assets/ReviewChangeDialog-BVSt-cw-.js +2 -0
- package/dist/web/assets/ReviewChangeDialog-BbIlHRx0.css +1 -0
- package/dist/web/assets/Room-BoG_uge4.js +2 -0
- package/dist/web/assets/Room-evAfiW_e.css +1 -0
- package/dist/web/assets/RunActions-ZY7yf1AF.js +2 -0
- package/dist/web/assets/RunDetail-C8St20GQ.css +1 -0
- package/dist/web/assets/RunDetail-qADXjBvd.js +9 -0
- package/dist/web/assets/RunRow-BKEJv8ib.js +2 -0
- package/dist/web/assets/RunnerTry-Dgpp67-s.js +6 -0
- package/dist/web/assets/RunnerTry-DsweWOfO.css +1 -0
- package/dist/web/assets/Settings-fs-QJwNM.js +2 -0
- package/dist/web/assets/Setup-DI6hBEP-.js +2 -0
- package/dist/web/assets/TestRows-wh03T5Li.js +4 -0
- package/dist/web/assets/TestRun-DTOyF-Pv.js +2 -0
- package/dist/web/assets/TestRuns-ggDjm1Q8.js +2 -0
- package/dist/web/assets/TinyBeeAddLaptop-bc3pmh3T.js +2 -0
- package/dist/web/assets/TinyBeeAi-CkyOzhm5.js +2 -0
- package/dist/web/assets/TinyBeeConnections-B2K_P38u.js +2 -0
- package/dist/web/assets/TinyBeeHome-DSpxX5KS.js +3 -0
- package/dist/web/assets/TinyBeePlan-BamiLziu.js +2 -0
- package/dist/web/assets/TinyBeeSignup-vHcz0Wen.js +2 -0
- package/dist/web/assets/TinyBeeSkills-By9RLUse.js +2 -0
- package/dist/web/assets/TinyBeeWorkflow-DeNO7Jsh.js +2 -0
- package/dist/web/assets/TinyBeeWorkflowEditor-B6OGC2OT.js +2 -0
- package/dist/web/assets/TinyBeeWorkflows-BN4-h6lt.js +2 -0
- package/dist/web/assets/Trace-BBCI1aIB.css +1 -0
- package/dist/web/assets/Trace-aF92UWaH.js +2 -0
- package/dist/web/assets/UpdatesSection-CCWEbkue.js +2 -0
- package/dist/web/assets/Welcome-CCcy558Q.js +2 -0
- package/dist/web/assets/activity-C3qilrDm.css +1 -0
- package/dist/web/assets/activity-CBfTSxqw.js +2 -0
- package/dist/web/assets/authedMedia-BTYt_tyu.js +2 -0
- package/dist/web/assets/beeApi-BHW8Tx1s.js +2 -0
- package/dist/web/assets/data-CmXvx3Mj.js +2 -0
- package/dist/web/assets/engines-CfdJODFj.css +1 -0
- package/dist/web/assets/format-BBZ8vFyT.js +2 -0
- package/dist/web/assets/forms-Coc7p2UF.css +1 -0
- package/dist/web/assets/hivePush-DZJDokj7.js +2 -0
- package/dist/web/assets/impactModel-MY1OFuiP.js +2 -0
- package/dist/web/assets/index-B6qKm1NW.js +13 -0
- package/dist/web/assets/index-BvKyT1X7.css +1 -0
- package/dist/web/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/dist/web/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/dist/web/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/dist/web/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/dist/web/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/dist/web/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/dist/web/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/dist/web/assets/lead-BL_P_kri.css +1 -0
- package/dist/web/assets/model-BIQy5IVG.js +2 -0
- package/dist/web/assets/modelsApi-PUSySRQw.js +2 -0
- package/dist/web/assets/newDotModel-BaLLyw57.js +2 -0
- package/dist/web/assets/onboarding-bfKqnM4Z.css +1 -0
- package/dist/web/assets/phone-Rs7FoyG0.css +1 -0
- package/dist/web/assets/phoneApi-BG_1-M-D.js +3 -0
- package/dist/web/assets/releaseModel-EynYMVOC.js +2 -0
- package/dist/web/assets/releaseNotesModel-A1Rtv3cV.js +2 -0
- package/dist/web/assets/reports-BWaA1HhM.js +37 -0
- package/dist/web/assets/reports-DXwdWQsB.css +1 -0
- package/dist/web/assets/router-W6nZsQ33.js +2 -0
- package/dist/web/assets/runs-BY0Owv93.css +1 -0
- package/dist/web/assets/shadowWeekModel-BUUiww09.js +2 -0
- package/dist/web/assets/storage-yvL36AWt.js +2 -0
- package/dist/web/assets/store-IqrqHuFR.js +2 -0
- package/dist/web/assets/testruns-BzIZ0cR0.css +1 -0
- package/dist/web/assets/testruns-DyaqX4ji.js +2 -0
- package/dist/web/assets/true-9Q68cs5b.js +2 -0
- package/dist/web/assets/true-DPGBpoir.css +1 -0
- package/dist/web/assets/ui-DcmhYyYp.js +13 -0
- package/dist/web/assets/ui-DxEDgbIx.css +1 -0
- package/dist/web/assets/usePauseDot-BV60ZVy1.js +2 -0
- package/dist/web/assets/usePauseDot-NrSzMI1C.css +1 -0
- package/dist/web/assets/usePush-Dsm-TjlG.js +2 -0
- package/dist/web/assets/useRefChips-CbafNx59.js +68 -0
- package/dist/web/assets/useRestoreDot-D0B6W82H.js +2 -0
- package/dist/web/assets/view-worker-pyeVAhUT.js +2 -0
- package/dist/web/assets/workflowUi-QYsd3n9J.js +2 -0
- package/dist/web/favicon.png +0 -0
- package/dist/web/icon-192.png +0 -0
- package/dist/web/icon-512.png +0 -0
- package/dist/web/icon-maskable-512.png +0 -0
- package/dist/web/index.html +45 -0
- package/dist/web/manifest.webmanifest +23 -0
- package/dist/web/mascots/argus-attention.svg +7 -0
- package/dist/web/mascots/argus-ok.svg +7 -0
- package/dist/web/mascots/argus-outage.svg +7 -0
- package/dist/web/mascots/argus-running.svg +7 -0
- package/dist/web/mascots/bolt-attention.svg +7 -0
- package/dist/web/mascots/bolt-ok.svg +7 -0
- package/dist/web/mascots/bolt-outage.svg +7 -0
- package/dist/web/mascots/bolt-running.svg +7 -0
- package/dist/web/mascots/echo-attention.svg +7 -0
- package/dist/web/mascots/echo-ok.svg +7 -0
- package/dist/web/mascots/echo-outage.svg +7 -0
- package/dist/web/mascots/echo-running.svg +7 -0
- package/dist/web/mascots/lens-attention.svg +7 -0
- package/dist/web/mascots/lens-ok.svg +7 -0
- package/dist/web/mascots/lens-outage.svg +7 -0
- package/dist/web/mascots/lens-running.svg +7 -0
- package/dist/web/mascots/moss-attention.svg +7 -0
- package/dist/web/mascots/moss-ok.svg +7 -0
- package/dist/web/mascots/moss-outage.svg +7 -0
- package/dist/web/mascots/moss-running.svg +7 -0
- package/dist/web/mascots/nit-attention.svg +7 -0
- package/dist/web/mascots/nit-ok.svg +7 -0
- package/dist/web/mascots/nit-outage.svg +7 -0
- package/dist/web/mascots/nit-running.svg +7 -0
- package/dist/web/mascots/nova-attention.svg +7 -0
- package/dist/web/mascots/nova-ok.svg +7 -0
- package/dist/web/mascots/nova-outage.svg +7 -0
- package/dist/web/mascots/nova-running.svg +7 -0
- package/dist/web/mascots/penn-attention.svg +7 -0
- package/dist/web/mascots/penn-ok.svg +7 -0
- package/dist/web/mascots/penn-outage.svg +7 -0
- package/dist/web/mascots/penn-running.svg +7 -0
- package/dist/web/mascots/pip-attention.svg +7 -0
- package/dist/web/mascots/pip-ok.svg +7 -0
- package/dist/web/mascots/pip-outage.svg +7 -0
- package/dist/web/mascots/pip-running.svg +7 -0
- package/dist/web/mascots/ward-attention.svg +7 -0
- package/dist/web/mascots/ward-ok.svg +7 -0
- package/dist/web/mascots/ward-outage.svg +7 -0
- package/dist/web/mascots/ward-running.svg +7 -0
- package/dist/web/sw.js +98 -0
- package/dist/webhook-seen.js +53 -0
- package/dist/webhook-seen.js.map +1 -0
- package/dist/webhooks.js +625 -0
- package/dist/webhooks.js.map +1 -0
- package/dist/zip.js +63 -0
- package/dist/zip.js.map +1 -0
- package/docs/API-V2.md +532 -0
- package/docs/CHAT-EVAL.md +130 -0
- package/docs/CHAT-UI.md +416 -0
- package/docs/CONNECTIONS.md +89 -0
- package/docs/DATA-MODEL.md +518 -0
- package/docs/DEPLOY.md +577 -0
- package/docs/DOGFOOD-LEDGER.md +81 -0
- package/docs/GITHUB.md +148 -0
- package/docs/INTEGRATION-MODEL.md +200 -0
- package/docs/LEAD-DOT.md +553 -0
- package/docs/LIST-PATTERNS.md +52 -0
- package/docs/MULTI-REPO.md +766 -0
- package/docs/PARITY.md +276 -0
- package/docs/PR-REVIEW-QA.md +1266 -0
- package/docs/PR-REVIEW.md +357 -0
- package/docs/SANDBOX.md +320 -0
- package/docs/SETUP.md +776 -0
- package/docs/SLACK.md +80 -0
- package/docs/STAGES.md +619 -0
- package/docs/TRACE-MAP.md +89 -0
- package/docs/TRACKERS.md +225 -0
- package/docs/VOICE.md +36 -0
- package/docs/tinybee/00-README.md +45 -0
- package/docs/tinybee/01-PRD.md +216 -0
- package/docs/tinybee/02-architecture-pairing.md +199 -0
- package/docs/tinybee/03-local-agent.md +222 -0
- package/docs/tinybee/04-local-setup-ui.md +128 -0
- package/docs/tinybee/05-mobile-app-ux.md +199 -0
- package/docs/tinybee/06-environments-and-delivery.md +148 -0
- package/docs/tinybee/07-coding-agent-handoff.md +116 -0
- package/docs/tinybee/OPEN-QUESTIONS.md +26 -0
- package/docs/tinybee/PROGRESS.md +134 -0
- package/package.json +111 -4
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# TinyBeeAI — Open questions
|
|
2
|
+
|
|
3
|
+
Questions the coding agent could not settle from the docs. Each one names what was assumed meanwhile. Resolved items move to the bottom with the decision and the date.
|
|
4
|
+
|
|
5
|
+
## Open
|
|
6
|
+
|
|
7
|
+
1. **DNS for `dots.testllms.com`.** The Railway services exist in project `localdost` (resolved below), but the custom domain is not on service `localdost` yet and the Cloudflare zone `testllms.com` has no record for it. Needed: `railway domain -s localdost dots.testllms.com` (prints the CNAME target), then a proxied CNAME in Cloudflare. Who holds the Cloudflare zone? Until then staging is reached at the Railway domain. *2026-10-25:* the Hive service has the custom domain `localdost.testllms.com` (proxied CNAME in the zone, ACTIVE), so the zone is reachable from the Hive side; `dots.testllms.com` on `localdost` is still to be added the same way.
|
|
8
|
+
2. **Cloudflare API token** (Tunnel:Edit, DNS:Edit on zone `testllms.com`) for the real tunnel provider in Phase 3, set with `railway variable set CF_API_TOKEN --stdin --service hive`. Also `CF_ACCOUNT_ID`, `CF_ZONE_ID` on `hive`, plus `HIVE_ADMIN_TOKEN` (any long random string) for the nightly cleanup. Until then the `mock` provider is used on staging. *Phase 3 added:* the provider and the Bee tunnel manager are written and unit-tested against a fake API; nothing has run against Cloudflare yet. *2026-10-25:* `CF_ACCOUNT_ID`, `CF_ZONE_ID` and `CF_API_TOKEN` are set on `hive` (token derived from the account's `cloudflared` certificate, Tunnel and DNS on the zone). Still missing: `HIVE_ADMIN_TOKEN` on `hive`, and the Workers/KV token of item 6.
|
|
9
|
+
3. **Google OAuth client** for "Continue with Google" (Phase 1). Email OTP ships first; the Hive already checks Google id tokens against `HIVE_GOOGLE_CLIENT_ID` (web client id only, no secret needed for the id-token flow), and the sign-up shows the Google button only when it is set. Which Google Cloud project owns it, and which origins should the client allow (`https://dots.testllms.com`, `http://localhost:4319`)?
|
|
10
|
+
4. **Email sender for OTP** (Phase 1): Resend, SES, or SMTP? *Assumed meanwhile:* `HIVE_MAIL_PROVIDER=console` (the default) writes the code to the Hive log in local and staging; a prod Hive refuses to start sign-in with it. Local servers also return the code in the API response (`devCode`) so the PWA and Playwright can finish the flow.
|
|
11
|
+
5. **Bee data dir on macOS.** `03-local-agent.md` puts data under `/Library/Application Support/TinyBee` (system-wide, needs admin). A per-user LaunchAgent and `~/Library/Application Support/TinyBee` need no admin password at install. Which one?
|
|
12
|
+
6. **Edge Worker deploy.** `infra/cf-worker` is ready for `wrangler deploy`. Needed on the GitHub repo: secrets `CLOUDFLARE_API_TOKEN` (Workers Scripts:Edit, Workers KV:Edit, Workers Routes:Edit on `testllms.com`) and `CLOUDFLARE_ACCOUNT_ID`, and a KV namespace id for `wrangler.toml` (optional; the Worker caches in memory without it). Also `STAGING_HIVE_ADMIN_TOKEN` for the nightly cleanup workflow. *Assumed meanwhile:* the route `dots-*.testllms.com/*` and that every tenant host is a proxied CNAME created by the Hive.
|
|
13
|
+
7. **Superapp admin ingest.** Superapp's console has a `tinybee` tenant (`POST admin.testllms.com/api/_ingest/tinybee`). Should Hive send sign-up and pairing events there, and from which phase?
|
|
14
|
+
8. **Offline chat queue.** `05 §10` says messages typed while the Bee is offline are queued locally for up to 24 h. *Assumed meanwhile (Phase 4):* the composer stays on while the Bee is offline and the message goes to the Bee's own queue through the tunnel as soon as it answers; only a phone without internet disables the composer. A client-side queue needs a decision on where the 24 h clock lives (phone or Hive) and what happens to a message that expires.
|
|
15
|
+
9. **Troubleshoot page.** The offline status card links to the docs index; `05` names a Troubleshoot target but no content exists. Which steps belong there (sleep settings, Wi-Fi, `cloudflared`, open `/setup`)?
|
|
16
|
+
10. **Payment gateway and relay key** (Phase 6). Which gateway for VND (VNPay, MoMo, Stripe in USD)? The Hive has a `PaymentProvider` interface (`src/hive/billing.ts`) with one implementation, the test-mode `mock`, which a prod Hive never offers; a real provider needs its keys on `hive` and a webhook route that calls `settleInvoice()`. *Also needed on `hive`:* `HIVE_RELAY_ANTHROPIC_KEY` (the Hive's own model for app-side features; since Phase A a laptop never needs it: host work runs on the CLI, key, Ollama, LM Studio or endpoint the user set up there) and `HIVE_ADMIN_TOKEN` for `GET /api/hive/admin/metrics`. Set with `railway variable set NAME -s hive --stdin`.
|
|
17
|
+
11. **Apple, Google and release signing material** (Phase 7). The native shell, the store workflow and the macOS package are written but have never run against real accounts. Needed: an Apple Developer team (team id for `TINYBEE_IOS_APP_ID` and `APNS_TEAM_ID`, a Developer ID Application + Installer identity and a notarization profile for `build-pkg.sh`, a distribution certificate and provisioning profile for the iOS job, an APNs auth key `.p8` for `hive`), a Google Play developer account with an upload keystore (`ANDROID_KEYSTORE_B64`, passwords) and a Firebase project for FCM (`google-services.json` for the Android job, a service account JSON for `FCM_SERVICE_ACCOUNT_JSON` on `hive`), and the SHA-256 of the signing certificate for `TINYBEE_ANDROID_CERT_SHA256`. Also: who holds the Bee update release key (generated with `node scripts/tinybee-sign-manifest.mjs --generate`; the public id goes to `HIVE_BEE_UPDATE_PUBKEY` on `hive` and into the pkg as `TINYBEE_UPDATE_PUBKEY`, the private PEM only into a GitHub secret), where the `.pkg` files are hosted (the manifest's `pkg` URL), and the privacy-policy and support URLs the stores require (`packaging/store/README.md`).
|
|
18
|
+
|
|
19
|
+
## Resolved
|
|
20
|
+
|
|
21
|
+
- **Railway project** (2026-10-24): the existing project `localdost` hosts both services (`localdost`, `hive`); the stray `localdost`/`hive` services that had been created in `superapp` were removed. `.railway/railway.ts` names `localdost`.
|
|
22
|
+
|
|
23
|
+
- **Hive URL** (2026-10-24): no `hive.testllms.com`. Hive is reached at `dots.testllms.com/api/hive/*` through the Bee origin's proxy; the Hive service stays private on Railway.
|
|
24
|
+
- **Tenant hostnames** (2026-10-24): `dots-<slug>.testllms.com` on staging (one level under the zone, same pattern as `admin.testllms.com`), `<slug>.tinybee.app` in prod. Env `TINYBEE_TENANT_HOST=dots-{slug}.testllms.com`.
|
|
25
|
+
- **Service name** (2026-10-24): the existing Railway service stays `localdost`; the docs' `bee-dev` is its role, not its name.
|
|
26
|
+
- **Windows** (2026-10-24): not supported. macOS is the only Bee platform in the docs.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# TinyBeeAI — Progress
|
|
2
|
+
|
|
3
|
+
One entry per coding-agent session, newest first, at most 15 lines each.
|
|
4
|
+
|
|
5
|
+
## 2026-10-25 — cloudflared downloaded by the install (local)
|
|
6
|
+
|
|
7
|
+
- `src/bee/cloudflared.ts`: pinned release 2026.10.3 with SHA256 per platform (darwin arm64/x64, linux x64/arm64, win32 x64), downloaded into `TINYBEE_HOME/bin` by `ensureCloudflared` when PATH has none; a `.version` stamp makes a new pin replace the file. The tunnel manager falls back to that path (`TINYBEE_HOME` is set by `applyTinybeeEnv`).
|
|
8
|
+
- Checked for real on this Mac with brew off PATH: 19 MB download, binary runs and reports 2026.10.3. The release notes' digests for the two macOS tarballs differ from the assets as served; the pinned values are from two identical downloads.
|
|
9
|
+
- Tests: `test/bee/cloudflared.test.ts` (5), tunnel-manager and CLI tests updated. Version 0.16.1 (0.16.0 is on npm).
|
|
10
|
+
|
|
11
|
+
## 2026-10-25 — Phase 8: no address step, `npx tinybeeai install` (local)
|
|
12
|
+
|
|
13
|
+
- Sign-up is Sign in → Install. `src/hive/tenants.ts`: `slugFromEmail` and `ensureTenant` make the tenant at sign-in (`withTenant` in `auth.ts`, OTP and Google, never on refresh); `tenants.slugChosenAt` (null = automatic) is the one new column. `POST /tenants` on an automatic slug picks it (201) and 409s only a chosen one; the first `PATCH /tenants/me` of an automatic slug does not count as the rename. `TenantView.slugChosen` tells the client.
|
|
14
|
+
- Client: `AddressStep` is gone; the Install step shows `https://<hostname>` with Change it (`RenameAddress`: live availability, suggestions, Use this address). The install command reads `npx tinybeeai install`. The Install step polls `pairPending` every 3 s and goes to `#/add-laptop` when the laptop has typed the code.
|
|
15
|
+
- npm: package renamed `tinybeeai` (public, `prepublishOnly` builds; `tinybee` on npm is taken), new `bin/tinybeeai.js` → `src/cli/tinybee.ts` (`install [CODE]`, `start`, `--dir`, `--hive`, `--port`, `--replace`). Defaults: `~/.tinybee/data`, `TINYBEE_ENV=staging`, `TINYBEE_HIVE_URL=https://dots.testllms.com`, `PORT=4319`, `LOG_LEVEL=warn`; the shell wins. It boots `src/index.ts`, waits for `initBee`, calls `submitInstallCode`, prints the stages from `onBeeChange`. `files` drops `docs/demos`, `docs/images` and `dist/web/**/*.map` (3.2 MB packed).
|
|
16
|
+
- Google OAuth web client is set on staging (`HIVE_GOOGLE_CLIENT_ID` on the `hive` service); the pasted client secret is not used anywhere and should be reset.
|
|
17
|
+
- Tests: `test/hive/identity.test.ts` (12, incl. `slugFromEmail`/`ensureTenant`), `test/bee/tinybee-cli.test.ts` (3), `test/bee/pairing.test.ts` and `test/tinybee/workflow-routes.test.ts` now expect `wrong_tenant` for a fresh sign-in (every session carries a tenant); e2e `tinybee-signup` + `tinybee-pair` 12/12. Client 1908 tests, typecheck and lint clean (eslint now ignores `native/android|ios|build-out`). Pre-existing failures unrelated to this work in `test/aivision-local`, `test/connect-routes`, `test/lead-ask` (also fail at `771dd21`).
|
|
18
|
+
- Not done: `npm publish --access public` needs the owner's `npm login`; the staging `hive` and `qadots` services need a redeploy for the new tenant flow; no run of `npx tinybeeai install` against staging with a real `cloudflared` yet.
|
|
19
|
+
|
|
20
|
+
## 2026-10-25 — Continue with Google on sign-up (local)
|
|
21
|
+
|
|
22
|
+
- The OTP step is painful on staging (the mail provider is console, so codes only reach the Hive logs). The sign-up page now shows a Google button when `GET /api/hive/auth/providers` carries `googleClientId` (the Hive adds it from `HIVE_GOOGLE_CLIENT_ID`). `client/src/features/tinybee/googleSignIn.ts` loads Google Identity Services once; the id token goes to `POST /api/hive/auth/google` and the result is the same session as the email code, so the address step follows.
|
|
23
|
+
- Branding: `client/public` icons (192, 512, maskable, apple-touch, favicon) are generated from the tinybee.ai bee; the brand mark in `AppShell` is that image instead of the pip mascot. The sign-up steps bar shows phases (Sign in, Address, Install), since Google sign-in has no code step.
|
|
24
|
+
- Still to do on staging: create the OAuth web client in Google Cloud (project tinybee-dev, JavaScript origin `https://dots.testllms.com`), set `HIVE_GOOGLE_CLIENT_ID` on the `hive` Railway service, redeploy.
|
|
25
|
+
- Checks: client join + pages 54 tests, server identity 11 tests, typecheck and eslint clean.
|
|
26
|
+
|
|
27
|
+
## 2026-10-25 — Login first on a hosted Hive (local)
|
|
28
|
+
|
|
29
|
+
- The live app at dots.testllms.com showed the admin Join (token) screen to every visitor. A hosted Hive (TINYBEE_ENV staging or prod, read from the public `GET /api/hive/health`) now sends a turned-away browser to `#/signup`; `client/src/features/join/joinFlow.ts` (`useLoginFirst`) decides, `App.tsx` navigates and shows only a skeleton meanwhile.
|
|
30
|
+
- `#/join` (with or without a code) keeps the Join screen, so invite links still work; the sign-up page links there for a teammate with a code. A laptop that embeds Hive (local) behaves as before.
|
|
31
|
+
- A browser with a Hive session is a TinyBee user: the Join gate no longer covers it, and the empty address opens `#/home`.
|
|
32
|
+
- Checks: client 118 files / 1908 tests, e2e tinybee-signup + tinybee-home 16/16.
|
|
33
|
+
|
|
34
|
+
## 2026-10-25 — Rename: QA Dots becomes localdost (local)
|
|
35
|
+
|
|
36
|
+
- The product, package, CLI, PWA, docs and env vars now read `localdost` (lowercase, like `localhost`; QA is one workflow, not the product). `bin/localdost.js` replaces `bin/qadots.js`; `qadots` stays as a CLI alias.
|
|
37
|
+
- Compat (`src/legacy-names.ts`): `QADOTS_*` env fills `LOCALDOST_*` at startup; parsed env files map old keys; `.env.qadots`, `.qadots/` and `qadots.db` are read when the new names are missing; connect-store rows `QADOTS_*` re-encrypt under `LOCALDOST_*` once; the PWA moves `qadots:*` localStorage keys to `localdost:*`.
|
|
38
|
+
- Markers write `localdost:` but match `qadots:` too (sticky PR comment, review, bot marker, hidden markers in the client); defect label `localdost` with legacy `qa-dots` still searched; `/qadots review` still triggers.
|
|
39
|
+
- Icon: white dot + cursor bar on coral (`client/scripts/export-mascots.ts`), all PNG sizes regenerated.
|
|
40
|
+
- Unchanged on purpose: Railway service/volume names and keys, Docker user `qadots` and image tags, CI runner label, `duonghaijoe/localdost` history links, HMAC key `qadots:bot-marker:v1`, CHANGELOG history.
|
|
41
|
+
- Checks: typecheck, server and client suites green; e2e tinybee specs rerun. Next: Phase 7 follow-ups continue on this branch; GitHub repo is `duonghaijoe/localdost`.
|
|
42
|
+
|
|
43
|
+
## 2026-10-25 — Phase B: the phone app after impeccable (local)
|
|
44
|
+
|
|
45
|
+
- Craft floor (pbakaus/impeccable, Operate mode): no eyebrow above headings, no emoji as icons, sentence-case section titles, cards at radius 12–16 with elevation declared once by a hairline, state-only motion on `--ease`. Tokens: `--radius-xl`, `--ease-out`, `--dur-slow`; Inter self-hosted (`@fontsource-variable/inter`), caret and scrollbar follow the accent.
|
|
46
|
+
- Home (`pages/TinyBeeHome.tsx`): one status card with a dot and a 4 px ring per state, the laptop's name and address said once, `seen HH:MM` on the right; the first-run nudge "No AI on the laptop yet" (`home-ai-nudge`) shows when the shared `MODELS_KEY` scan has no active backend and points at `#/ai`; quick actions are pills.
|
|
47
|
+
- Shell (`shell/AppShell.tsx`, `styles/shell.css`): in TinyBee mode the localdost setup and sandbox strips and the Demo badges stay hidden; the More sheet is grouped "Your Bee" (AI on your laptop, Skills, Plan & billing, Settings) then "localdost" (Dots, Inbox, Activity) with `more-ai` / `more-skills` / `more-plan` test ids.
|
|
48
|
+
- Workflows: a labeled pill FAB "New workflow" above the tab bar (`.btn.workflows__fab`), rows with a 40 px tile. AI screen: the active card says the model and "in use on this laptop" under the name; a row's detail wraps inside the button; the picked row uses `--surface-selected`.
|
|
49
|
+
- Plan: the usage card now says the bundle covers the app's own features and links `#/ai` for host work (was "Add it in Setup"); `TinyBeePlan.test.tsx` follows.
|
|
50
|
+
- Checks: typecheck, vitest 1902, e2e tinybee-{home,workflows,ai,billing,pair,signup} in both projects (34).
|
|
51
|
+
|
|
52
|
+
## 2026-10-25 — Phase A: local AI backends, the app only picks (local)
|
|
53
|
+
|
|
54
|
+
- Rule (02 section 7): Dots ships no AI for host work. The Bee scans the laptop and the phone picks; the Hive's model serves app-side features only. The engine's bundle gate and the relay backend are gone from `src/agent/llm.ts`.
|
|
55
|
+
- Bee: `src/bee/models.ts` (`scanModels()`: `claude` / `codex` CLIs and their sign-in, Anthropic / OpenAI / Gemini keys, Ollama and LM Studio on loopback with their model lists, the custom endpoint; `applyModelChange()` with a 409 and rollback when the pick is not ready; `llmForTier()` from `TINYBEE_MODEL_TIERS`), `src/agent/llm-openai.ts` (presets with `PRESET_KEYS`, default server addresses), `src/tinybee/models-routes.ts` (`GET|PUT /api/v1/models`, errors `model_pick` / `model_error`).
|
|
56
|
+
- Client: `#/ai` "AI on your laptop" (`pages/TinyBeeAi.tsx`, `features/tinybee/modelsApi.ts`, `brandMarks.tsx`): the active card, one row per backend with what it needs, a sheet per backend (install / sign-in help, write-only key, server address, model, custom base URL and extra body), the tier map editor. More menu entry; the Connections budget card points here.
|
|
57
|
+
- Tests: `test/bee/models.test.ts` (11: scan with nothing set up, CLIs, Ollama / LM Studio listing, pick, not-ready rollback, keys never returned, custom endpoint, env override, parse and route errors), `test/tinybee/workflows.test.ts` (the bundle never gates host work), `e2e/tinybee-ai.spec.ts` (the screen under the e2e server's `LOCALDOST_LLM=mock` override: rows, read-only pick, a custom endpoint saved and cleared, the key never shown).
|
|
58
|
+
- Open: no backend set up means no workflow runs; a first-run nudge on Home is Phase B's.
|
|
59
|
+
|
|
60
|
+
## 2026-10-25 — Phase 7: native packaging (local)
|
|
61
|
+
|
|
62
|
+
- Hive: `native-push.ts` (FCM v1 with a service-account JWT, APNs HTTP/2 with a p8 token; `POST|DELETE /push/device`; `pushToUser()` fans out to web and native and drops rejected tokens), `updates.ts` (`GET /updates/bee/:channel`, `/summary`; admin `PUT /admin/updates/bee/:channel` checks the manifest signature against `HIVE_BEE_UPDATE_PUBKEY` and keeps it under `HIVE_BEE_UPDATES_DIR`), `src/tinybee/update-manifest.ts` (canonical JSON, Ed25519 sign / verify, `scripts/tinybee-sign-manifest.mjs`).
|
|
63
|
+
- Bee: `updater.ts` (fetch, verify, download, sha256, stage, apply request when no workflow runs, `result.json` read at boot, `updateStatus()` current / available / staged / installing / failed / blocked by `minVersion`), `GET /api/bee/menubar/status` (loopback, `x-tinybee-menubar: 1`), `/setup` shows the update card; `src/tinybee/workflows/activity.ts` holds the running set so `status.ts` no longer imports the engine (import cycle).
|
|
64
|
+
- Server: `src/tinybee/well-known.ts` (`assetlinks.json`, `apple-app-site-association` from `TINYBEE_ANDROID_PACKAGE`, `TINYBEE_ANDROID_CERT_SHA256`, `TINYBEE_IOS_APP_ID`; 404 when unset).
|
|
65
|
+
- Client: `client/src/native/` (`capacitor.ts` reads `window.Capacitor` only, `nativePush.ts` registers the device token with the Hive and routes push taps, `deepLinks.ts` turns `/workflows/…` App Links into hash routes); `enableHivePush()` prefers native push inside the shell; `main.tsx` installs both.
|
|
66
|
+
- Packaging: `native/` (Capacitor 7 config, `ai.tinybee.app`), `.github/workflows/native-release.yml` (web → Android `.aab` → iOS `.ipa` on `v*` tags, gated by repo variables), `packaging/macos/` (`build-pkg.sh`: payload under `/Library/TinyBeeAI`, `_tinybee` user, three launchd plists, `Distribution.xml` with the power-settings choice, signing and notarization when the identities are set; `apply-update.sh` with install, restart, health wait, rollback; `MenuBar/main.swift`; `uninstall.sh`), `packaging/store/` (listings en-US / vi-VN, privacy).
|
|
67
|
+
- Tests: `test/hive/native-push.test.ts` (FCM and APNs against fake endpoints, device routes, token drop), `test/bee/updater.test.ts` (8: manifest signature, stale key, download and stage, apply when idle, result at boot, minVersion block, admin upload), `test/tinybee/apply-update.test.ts` (6: the shell script against a fake installer / launchctl / health, rollback, sha256 and path checks), `test/tinybee/well-known.test.ts` (3), vitest `client/src/native/*.test.ts` (9).
|
|
68
|
+
- Deviations: nothing has been built on a real Apple or Google account (OPEN-QUESTIONS 11): no signing identity, keystore, Firebase project, APNs key or release key exists yet, so the workflows and `build-pkg.sh` are unexercised in CI; the Bee data dir is `/Library/TinyBeeAI/data` (system-wide, OPEN-QUESTIONS 5 assumed); the menu bar app polls the loopback API instead of an XPC link; the updater channel `beta` has no manifest.
|
|
69
|
+
- Next: real accounts and a first signed build; then the staging Playwright gate of `06 §4`.
|
|
70
|
+
|
|
71
|
+
## 2026-10-25 — Phase 6: plan, relay and metering (local)
|
|
72
|
+
|
|
73
|
+
- Hive: `billing.ts` (`PLANS` trial 200k / standard 500k, 99,000 VND / pro 3M, 249,000 VND; `TOPUP` 500k, 49,000 VND; 30-day periods; `budgetOf()` ok / low at 80% / exhausted; `relayAllowance()`; `recordRelayUsage()`; a minute sweeper suspends tenants whose period ended (`trial_ended`, `unpaid`) with one push "Your trial has ended" → `#/plan`, and drops usage rows older than 90 days; `checkout()` and `settleInvoice()` behind a `PaymentProvider` interface whose only implementation is the test-mode mock, never offered in prod), `relay.ts` (`POST /relay/anthropic/v1/messages`, `GET /relay/anthropic/budget`; relay token `tbrl.` per tenant, minted at pairing and handed over on the pair poll; the Hive key is added, `x-tinybee-source` is stripped and the body goes through byte for byte; JSON and SSE token counts metered only when the provider answered < 400; 402 with `x-tinybee-refusal`, 503 `relay_unconfigured`, 502 `relay_upstream`; no prompt is stored or logged). Routes: `GET /billing`, `GET /invoices`, `POST /billing/checkout`, `POST /billing/mock/complete` (not prod), local-only `POST /dev/billing`, admin `GET /admin/metrics`. A suspended tenant gets `plan.tunnel: off` on the heartbeat and `pushToUser()` skips it; `GET /me` and `GET /bee` carry the plan, status and reason.
|
|
74
|
+
- Bee: `relay-client.ts` (fetch with the relay token, reads the refusal header), `status.ts` (`beePlan()`, `budgetNow()`, `bundledModelAllowed()`), `llm.ts` picks the relay when paired and no own key is set (`ANTHROPIC_API_KEY` / `LOCALDOST_LLM` bypass it), `pairing.ts` stops or starts `cloudflared` from `plan.tunnel` and shows the plan notice on `/setup`; the workflow engine pauses a workflow that reads sources before it starts when the bundle is used up ("Paused: budget") and lets plain reminders run.
|
|
75
|
+
- Client: `#/plan` (`TinyBeePlan.tsx`: plan card and period, usage meter with the breakdown by source, Upgrade / Go Pro / Top up sheets, test-mode pay, payments list, `?pick=topup` opens the sheet), `beeStatus()` turns a suspended tenant into "Local only · Trial ended · remote access paused" even while the tunnel still reports connected, the budget banner links to Top up. AppShell: the More sheet no longer reopens when you come back to the route it was opened on.
|
|
76
|
+
- Tests: `test/hive/billing.test.ts` (5: plan view, trial end → suspended → upgrade in test mode → back on; relay forwarding, metering, SSE, 529 passthrough, 402, top-up, 502; 503 unconfigured + retention sweep; dev route and admin metrics), Bee pairing test extended (relay backend, 402 budget, suspension on heartbeat, reset), engine budget pause, vitest `beeStatus.test.ts`, `TinyBeePlan.test.tsx` (7), `e2e/tinybee-billing.spec.ts` (trial ends → Local only with the reason → Upgrade pays in test mode → Online, then a top-up).
|
|
77
|
+
- Deviations: no real payment gateway (OPEN-QUESTIONS 10): the only provider is the test-mode mock; prices are VND with a USD hint; the relay covers Anthropic only (`HIVE_RELAY_OPENAI_KEY` of `06` is not wired); paid plans do not renew automatically, the tenant is suspended `unpaid` at the end of the month until a new checkout; the "within 5 minutes" of the handoff is a 60 s sweep plus the next heartbeat.
|
|
78
|
+
- Next: Phase 7 (native packaging) — done, see above.
|
|
79
|
+
|
|
80
|
+
## 2026-10-25 — Phase 5: workflows, editor and skills (local)
|
|
81
|
+
|
|
82
|
+
- Bee (`src/tinybee/workflows/`): `types.ts` (the YAML schema of `03 §6.1`, `rulesOf()` maps `permissions` auto/ask/deny onto the dot rule gate), `yaml.ts` (parse, validate with field paths, print), `cron.ts` (five-field cron, next runs, human sentence), `from-text.ts` (a sentence → draft + summary, no model call), `skills.ts` (7 skills in 5 groups; `roleSkills()` adds the localdost role presets), `store.ts` (a workflow is a watch of kind `workflow` on the tenant dot; runs are ordinary `runs` rows; `tb_seen`, `tb_digest`, `tb_notes` hold the seen keys, digest entries and hand-off notes), `engine.ts` (read inputs through the existing Gmail/Sheets/Drive/URL connections, model only when something is new, outputs through `gate()`; `ask` → approval card, `deny` → hand-off note), `scheduler.ts` (minute tick, `CATCH_UP_MINUTES=60`), `routes.ts` (`/api/v1/workflows*`, `/runs*`, `/digest`, `/skills*`; tenant JWT or any localdost caller). Hive: `POST /presence/notify` (laptop-signed) relays a workflow push to the owner's phone.
|
|
83
|
+
- Client: `features/tinybee/beeApi.ts` (typed client, `BeeApiError` with `code`/`field`), `schedule.ts` (cron ↔ the editor's When picker, `savedSentence`), `workflowUi.tsx` (shared rows, dots, run sheet). Pages `#/workflows` (tabs, switch, add sheet: describe / skill / YAML, read-only while the Bee cannot act or the budget is out), `#/skills` (cards by group, sheet, Use this skill), `#/workflows/new` (guided editor, field errors land on the field, Test runs once and shows the steps), `#/workflows/:id` (detail, runs, Run now, Duplicate, Delete). Chat offers "Make this a workflow" under the chips once you have sent a message, pre-filling the editor with it.
|
|
84
|
+
- Tests: `test/tinybee/workflows.test.ts` + `workflow-routes.test.ts` (19: YAML round trip and errors, cron, from-text, engine with ask/deny, scheduler catch-up, every route), vitest `schedule.test.ts` (7), `TinyBeeWorkflows.test.tsx` (5), `TinyBeeSkills.test.tsx` (2), `TinyBeeWorkflowEditor.test.tsx` (4), `e2e/tinybee-workflows.spec.ts` (4 on mobile: describe → edit → save → pause → run → run sheet → YAML → duplicate → delete; skill → Test; read-only without a laptop; YAML import with a bad cron). Shared e2e helpers moved to `e2e/tinybee-helpers.ts`.
|
|
85
|
+
- Found by the e2e: a Hive session minted before the tenant exists carries `tenant_id: null`, and the Bee answers 403 `no_tenant`; the app and the helpers refresh the session after sign-up. `prettier --check` had drifted on 29 earlier TinyBee files; formatted.
|
|
86
|
+
- Deviations: workflows count toward the dot totals in the existing UI (they are watches); an `ask` output approved later runs on the laptop but the result is not relayed to the Hive as an event; catch-up after sleep is capped at 60 minutes (the localdost nightly run allows 6 hours); `ask` pushes reuse the standard approval notice; the "< 2 minutes on staging" check of the handoff waits for the staging deploy (OPEN-QUESTIONS 1, 2).
|
|
87
|
+
- Next: Phase 6 (billing, relay, metering).
|
|
88
|
+
|
|
89
|
+
## 2026-10-24 — Phase 4: mobile core, presence and the degraded states (local)
|
|
90
|
+
|
|
91
|
+
- Hive (`src/hive/presence.ts`, `push.ts`): `OFFLINE_AFTER_SEC=300` sweeper (every 30 s) sets `offlineSince`/`offlineNotifiedAt`, pushes "<name> is offline" once and "still offline" daily (`REMIND_AFTER_SEC`); a heartbeat clears both and pushes "back online". `GET /push/vapid`, `POST|DELETE /push/subscribe` (session-bound, 410/404 drops the row); keys from `HIVE_VAPID_*` or `hive-vapid.json` (0600). `beeView` carries `online`, `offlineSince`, `hc.tunnel`. Dev (local only): `POST /dev/bee {offlineForSec|tunnel|thaw}` (freezes heartbeats for 10 min so the embedded Bee cannot undo the fake; `thaw` lets the next one through; `{}` restores), `GET|DELETE /dev/pushes`.
|
|
92
|
+
- Bee (`src/bee/status.ts`, `health.ts`): `GET /api/health.tinybee` = `{budget, connections, update, apiVersion, minClientApiVersion}` (real values are stubs until Phases 5–6: budget ok, no connections, update current). Dev: `POST /api/bee/dev/fake` (loopback + `x-setup-token`) overrides any part, `POST /api/bee/dev/heartbeat` sends one now.
|
|
93
|
+
- Client (`client/src/features/tinybee/`): `beeStatus.ts` (pure: `beeStatus()` → online/local/offline/unpaired/provisioning/phoneOffline; `degradedNotices()` → budget/connection/update/apiVersion banners, a blocking one alone), `useTinyBee.ts` (session via `useSyncExternalStore`, 30 s Bee poll while visible, `navigator.onLine`), `TinyBeeShell.tsx` (pill, banners, tab bar), `hivePush.ts` (subscribe the service worker to Hive push). `AppShell` swaps the brand link, sidebar, pill, banners and tab bar when a Hive session exists. Pages: `#/home` (`TinyBeeHome.tsx`: status card with the §10 actions, Needs you = pending approvals with inline `ApprovalCard`, Today digest from runs, quick actions that pre-fill Chat, recent activity), `#/workflows` (read-only banner + "Describe one in Chat"), `#/connections?fix=` (budget card, integrations with Reconnect, highlighted row). Chat gets a Bee strip and a disabled composer with the reason when the phone is offline.
|
|
94
|
+
- Tests: `test/hive/presence.test.ts` (3: push subscribe, sweep → push → remind → back online, dev route + thaw), `test/bee/pairing.test.ts` (+1: health block + dev fake), vitest `beeStatus.test.ts` (6) + `TinyBeeShell.test.tsx` (5), `e2e/tinybee-home.spec.ts` (5 on mobile + desktop: every §10 row through the dev routes, phone offline via `context.setOffline`, and approve-from-phone recorded to `.build/recordings/tinybee/approve-from-phone.webm`).
|
|
95
|
+
- Fix found by the e2e: `readHiveSession()` returned a fresh object per call and React looped (#185) under `useSyncExternalStore`; the parsed session is cached by its raw value now.
|
|
96
|
+
- Deviations: the demo video shows approve-from-phone on the local demo server (embedded Hive + Bee), not through a Cloudflare tunnel (OPEN-QUESTIONS 1, 2); "Top up" is disabled until Phase 6; the 24-hour offline chat queue of §10 is not built (OPEN-QUESTIONS 8); Troubleshoot links to the docs index until a TinyBee troubleshooting page exists; the web-push service worker handler is the existing localdost one, so a Hive push opens its `url`.
|
|
97
|
+
- Next: Phase 5 (workflow editor and skills).
|
|
98
|
+
|
|
99
|
+
## 2026-10-24 — Phase 3: Cloudflare tunnel, edge auth and staging hygiene (local)
|
|
100
|
+
|
|
101
|
+
- Hive (`src/hive/tunnel/cloudflare.ts`): real provider on the Cloudflare v4 API: `provision` finds or creates the tunnel `tinybee-<tenant>`, sets its ingress to `http://localhost:<TINYBEE_BEE_PORT>`, upserts a proxied CNAME to `<tunnel-id>.cfargotunnel.com` (fixes a stale one), returns the token; `revoke` deletes DNS, connections and the tunnel (cascade); `rotate` and `count` too. `CloudflareApiError` carries the Cloudflare error list. Picked when the three `CF_*` vars are set.
|
|
102
|
+
- Hive admin (`src/hive/admin.ts`): `HIVE_ADMIN_TOKEN` guards (404 when unset, 401 otherwise, constant-time compare) `DELETE /admin/tenants?prefix=&dryRun=1` (prefix ≥ 4 chars, revokes the tunnel first and keeps the tenant when that fails, then deletes nonces, install codes, bees, tenant, refresh tokens and the orphaned user in one transaction) and `GET /admin/tunnels` (`count`, `cap`, `warnAt`, `ok`). `GET /edge/tenants/:slug` (public, 60 s cache) is what the Worker calls.
|
|
103
|
+
- Bee (`src/bee/tunnel-manager.ts`): spawns `cloudflared tunnel --no-autoupdate --protocol quic run` with `TUNNEL_TOKEN` in the env, reads "Registered tunnel connection" / "Unregistered" / invalid-token lines, states off/starting/connected/reconnecting/no_cloudflared/stopped, backoff 2 s doubling to 5 min, HTTP/2 after three QUIC runs shorter than 60 s, SIGTERM then SIGKILL on stop. `pairing.ts` starts it once paired (never for `mock.` tokens or `TINYBEE_TUNNEL=off`), stops it on unpair/replace; `/setup` done screen and `GET /api/v1/health` show the state.
|
|
104
|
+
- Edge (`infra/cf-worker`): Worker for `dots-*.testllms.com/*` (slug from Host via `TENANT_HOST`), RS256 check with Web Crypto against the Hive JWKS (5 min cache), tenant lookup (10 min cache, KV optional), error codes session_required/malformed/bad_signature/bad_issuer/expired/unknown_key/no_tenant/wrong_tenant/tenant_not_found/not_a_tenant/hive_unreachable, OPTIONS passes, forwards with `x-tinybee-edge: 1`. `wrangler.toml` staging + `[env.prod]`; `.github/workflows/edge-worker.yml` deploys on push to main.
|
|
105
|
+
- Hygiene: `scripts/tinybee-staging-cleanup.mjs` (`--prefix test-,e2e-,pw-`, `--dry-run`, exit 2 above `warnAt`) and `.github/workflows/staging-cleanup.yml` (nightly 19:17 UTC). `TINYBEE_TUNNEL_CAP`, `TINYBEE_TUNNEL`, `TINYBEE_BEE_PORT`, `HIVE_ADMIN_TOKEN` documented in `.env.example`; the secrets are kept out of runner envs.
|
|
106
|
+
- Tests: `test/hive/cloudflare.test.ts` (in-memory Cloudflare API, 6 cases), `test/hive/admin.test.ts` (3), `test/hive/edge-worker.test.ts` (real signed tokens through the Worker's `gate`, 6), `test/bee/tunnel-manager.test.ts` (fake child process, 6). `npm run typecheck` also checks the Worker (`infra/cf-worker/tsconfig.json`).
|
|
107
|
+
- Not done: the Worker is not deployed (needs `CLOUDFLARE_API_TOKEN`/`CLOUDFLARE_ACCOUNT_ID` repo secrets and a KV id); staging Hive still runs the `mock` provider (OPEN-QUESTIONS 2); `dots.testllms.com` CNAME pending (OPEN-QUESTIONS 1); no end-to-end run with a real `cloudflared` yet. Next: Phase 4 (mobile core).
|
|
108
|
+
|
|
109
|
+
## 2026-10-24 — Phase 2: pairing with the mock tunnel (local)
|
|
110
|
+
|
|
111
|
+
- Hive (`src/hive/pairing.ts`, `tunnel.ts` mock): `pair_nonces` and `bees` tables; `POST /pair/offer` (Bee-signed, Ed25519 over the payload), `POST /pair/claim` (install code), `GET /pair/status?nonce` (the Bee polls; the tunnel token travels once, in `delivery`), `POST /pair/complete {nonce, replace?}` (409 `bee_exists` with the current Bee until `replace: true`), `GET /pair/pending`, `GET /bee`, `POST /presence/heartbeat` (`bee_unknown` tells a replaced laptop). Nonce TTL 10 min; one live Bee per tenant.
|
|
112
|
+
- Bee (`src/bee/`): `identity.ts` (device key, 0600), `health.ts` (memory, disk, power, LLM key), `pairing.ts` (stages off/idle/showing/claimed/paired/replaced; QR renew, 2 s poll, 30 s heartbeat, state file `TINYBEE_STATE_PATH`), `setup-page.ts` (inline HTML/CSS/JS, en/vi, no external assets, strict CSP), `routes.ts` (`/setup` and `/api/bee/*` on loopback only with an `x-setup-token`; `GET /api/v1/health` checks the tenant JWT against Hive's JWKS, 403 `no_tenant`/`wrong_tenant`). `src/index.ts` starts it when TinyBee is on.
|
|
113
|
+
- Client: `#/add-laptop` (`client/src/pages/TinyBeeAddLaptop.tsx`): BarcodeDetector scanner or paste box, pending install-code claim, confirm with health list, replace prompt, provisioning poll, online card; deep link `?d=`; `hiveApi.pairComplete/pairPending/bee`; `@pair-payload` alias shares the payload codec with the server.
|
|
114
|
+
- Tests: `test/hive/pairing.test.ts` + `test/bee/pairing.test.ts` (37 cases hive+bee: signature and TTL failures per the 02 §4.5 table, replace, restart, unpair, loopback and token refusals, JWKS verification); `e2e/tinybee-pair.spec.ts` (3 cases on mobile + desktop: paste → confirm → online → reload, deep link + replace, foreign Host refused). Test hygiene: the restore-check table scan skips `src/hive` (own database file); `TINYBEE_DEVICE_KEY_PATH` is held back from runner envs.
|
|
115
|
+
- Deviations: `/setup` is served by the localdost port (4319 default), not a separate 7331; the e2e pairs the demo server with itself (embedded Hive + Bee in one process) since no staging Bee exists yet.
|
|
116
|
+
- Railway: project `localdost` (services `localdost`, `hive`), `.railway/railway.ts` renamed; deploy health and `dots.testllms.com` DNS still unverified (OPEN-QUESTIONS 1).
|
|
117
|
+
- Not done: the staging "done when" (phone scans a QR from a cloud Bee at `dots-dev.testllms.com`) waits on DNS; the camera path is untested in Playwright (no BarcodeDetector in headless). Next: Phase 3 (Cloudflare tunnel provider, edge auth Worker, Bee tunnel manager, tenant cleanup).
|
|
118
|
+
|
|
119
|
+
## 2026-10-24 — Phase 1: identity, tenants and the sign-up PWA route (local)
|
|
120
|
+
|
|
121
|
+
- `src/hive/`: `db.ts` (SQLite: users, otp_codes, refresh_tokens, tenants, install_codes), `auth.ts` (email OTP start/verify with try, expiry and rate limits), `jwt.ts` (RS256 access tokens, rotating refresh with reuse detection), `google.ts` (id-token check against Google JWKS, `HIVE_GOOGLE_CLIENT_ID`), `tenants.ts` (slug rules, reserved list, availability with 3 suggestions, one rename, install codes), `mail.ts` (`console` sender only; refused in prod), `errors.ts`, `session.ts`; routes under `/api/hive/auth/*`, `/api/hive/me`, `/api/hive/tenants*`.
|
|
122
|
+
- Client: `#/signup` (`client/src/pages/TinyBeeSignup.tsx`, `features/tinybee/hiveApi.ts` with its own session store and refresh) — email → code → address → "Now install TinyBee on your laptop" with the 6-char code and countdown; open route in the join gate. Named `signup` because `onboarding` is the KAT-257 welcome flow.
|
|
123
|
+
- Tests: `test/hive/identity.test.ts` (11 cases: OTP, tries, expiry by injected clock, rate limit, refresh rotation and reuse, `/me` errors, slug rules, taken slug, one tenant per user, rename lock, Google, prod mailer refusal); `e2e/tinybee-signup.spec.ts` (happy path, taken slug, wrong and spent code; 6/6 on mobile + desktop). Deviation: the expired-OTP case lives in node:test with an injected clock; Playwright covers a spent code instead of waiting 10 minutes.
|
|
124
|
+
- `playwright.config.ts` boots the e2e server with `TINYBEE_ENV=local`.
|
|
125
|
+
- Not done: Google in the UI is wired but untested against a real client id; no real mail sender; staging still blocked (OPEN-QUESTIONS 1). Next: Phase 2 pairing (Bee device key, QR, `/setup`, Hive `/pair/*`, mock tunnel).
|
|
126
|
+
|
|
127
|
+
## 2026-10-24 — Phase 0: Hive scaffold (local)
|
|
128
|
+
|
|
129
|
+
- Added `src/hive/`: config, RS256 signing key + JWKS, `TunnelProvider` (mock + Cloudflare stub), routes, standalone server (`npm run hive`, port 4330), and `embed.ts` (embedded in local mode, proxied through `/api/hive` when `TINYBEE_HIVE_URL` is set, absent otherwise).
|
|
130
|
+
- `src/server.ts` mounts Hive and lets `/api/hive/*` through the localdost auth hook only when TinyBee is on.
|
|
131
|
+
- `.railway/railway.ts`: new private `hive` service with its own volume; `localdost` service gets `TINYBEE_ENV=staging` and `TINYBEE_HIVE_URL`.
|
|
132
|
+
- Decisions recorded in `06` and `OPEN-QUESTIONS.md`: Hive behind the Bee origin, tenants `dots-<slug>.testllms.com`, hosting like Superapp (custom domains on Railway, Cloudflare CNAME).
|
|
133
|
+
- Tests: `test/hive/health.test.ts` (9 cases: health, JWKS, key persistence, env key, mock provider, embedded, proxy + 502, off mode).
|
|
134
|
+
- Not done: staging deploy (no Railway project or DNS yet, see OPEN-QUESTIONS 1). Next: Phase 1 (Hive SQLite, email OTP, JWT issue/refresh, tenants + slugs, `/onboarding` PWA route).
|
package/package.json
CHANGED
|
@@ -1,6 +1,113 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tinybeeai",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.16.1",
|
|
4
|
+
"description": "TinyBee: an always-on QA agent on your laptop, paired with your phone. Also the self-hosted localdost server.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=24"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"homepage": "https://tinybee.ai",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/duonghaijoe/localdost.git"
|
|
14
|
+
},
|
|
15
|
+
"bin": {
|
|
16
|
+
"tinybeeai": "bin/tinybeeai.js",
|
|
17
|
+
"localdost": "bin/localdost.js",
|
|
18
|
+
"qadots": "bin/localdost.js"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"bin/",
|
|
22
|
+
"dist/",
|
|
23
|
+
"!dist/web/**/*.map",
|
|
24
|
+
"demo/",
|
|
25
|
+
"docs/",
|
|
26
|
+
"!docs/demos/",
|
|
27
|
+
"!docs/images/",
|
|
28
|
+
"AGENTS.md",
|
|
29
|
+
"README.md",
|
|
30
|
+
"Dockerfile",
|
|
31
|
+
"compose.yml",
|
|
32
|
+
".railway/"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"init": "node bin/localdost.js init",
|
|
36
|
+
"doctor": "node bin/localdost.js doctor",
|
|
37
|
+
"dev": "node scripts/dev.mjs",
|
|
38
|
+
"dev:server": "tsx watch src/index.ts",
|
|
39
|
+
"dev:web": "vite",
|
|
40
|
+
"build": "tsc -p tsconfig.json && node scripts/copy-assets.mjs && tsc -p tsconfig.client.json && vite build",
|
|
41
|
+
"prepublishOnly": "npm run build",
|
|
42
|
+
"build:web": "vite build",
|
|
43
|
+
"start": "node dist/index.js",
|
|
44
|
+
"hive": "tsx src/hive/index.ts",
|
|
45
|
+
"start:hive": "node dist/hive/index.js",
|
|
46
|
+
"demo": "vite build && LOCALDOST_DEMO=1 tsx src/index.ts",
|
|
47
|
+
"test": "npm run test:server && npm run test:client",
|
|
48
|
+
"test:server": "LOCALDOST_AIVISION_DEFAULT_PORT=5999 LOCALDOST_TEST_DEBOUNCE_DEFAULT_SEC=0 node scripts/with-tmp.mjs tsx --test test/*.test.ts test/hive/*.test.ts test/bee/*.test.ts",
|
|
49
|
+
"test:client": "node scripts/with-tmp.mjs vitest run --config vite.config.ts",
|
|
50
|
+
"test:e2e": "node scripts/with-tmp.mjs node scripts/e2e.mjs",
|
|
51
|
+
"lint": "eslint . --max-warnings=50",
|
|
52
|
+
"format": "prettier --write .",
|
|
53
|
+
"format:check": "prettier --check .",
|
|
54
|
+
"changelog:check": "node scripts/check-changelog.mjs",
|
|
55
|
+
"release": "node scripts/release.mjs",
|
|
56
|
+
"typecheck": "tsc --noEmit -p tsconfig.json && tsc -p tsconfig.client.json && tsc -p .railway/tsconfig.json && tsc -p infra/cf-worker/tsconfig.json",
|
|
57
|
+
"seed": "tsx src/cli/seed.ts",
|
|
58
|
+
"dogfood": "tsx src/cli/dogfood.ts",
|
|
59
|
+
"eval:qa-review": "tsx src/cli/eval-qa-review.ts",
|
|
60
|
+
"eval:designer": "tsx src/cli/eval-designer.ts",
|
|
61
|
+
"golden:export": "tsx src/cli/golden-export.ts",
|
|
62
|
+
"scan": "tsx src/cli/scan-repo.ts",
|
|
63
|
+
"eval:chat": "tsx src/cli/eval-chat.ts"
|
|
64
|
+
},
|
|
65
|
+
"dependencies": {
|
|
66
|
+
"@anthropic-ai/sdk": "^0.131.0",
|
|
67
|
+
"@fastify/static": "^10.1.5",
|
|
68
|
+
"@fontsource-variable/inter": "^5.3.0",
|
|
69
|
+
"@katalon/playwright-reporter": "0.0.3",
|
|
70
|
+
"@linear/sdk": "^97.0.0",
|
|
71
|
+
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
72
|
+
"@octokit/auth-app": "^8.3.1",
|
|
73
|
+
"@octokit/rest": "^22.0.1",
|
|
74
|
+
"@playwright/test": "^1.63.0",
|
|
75
|
+
"@slack/bolt": "^5.1.0",
|
|
76
|
+
"@tiptap/extension-list": "^3.31.4",
|
|
77
|
+
"@tiptap/extension-table": "^3.31.4",
|
|
78
|
+
"@tiptap/pm": "^3.31.4",
|
|
79
|
+
"@tiptap/react": "^3.31.4",
|
|
80
|
+
"@tiptap/starter-kit": "^3.31.4",
|
|
81
|
+
"dockerode": "^5.0.1",
|
|
82
|
+
"fastify": "^5.12.5",
|
|
83
|
+
"marked": "^18.1.0",
|
|
84
|
+
"playwright": "^1.63.0",
|
|
85
|
+
"react": "^19.3.0",
|
|
86
|
+
"react-dom": "^19.3.0",
|
|
87
|
+
"tiptap-markdown": "^0.9.0",
|
|
88
|
+
"uqr": "0.1.3",
|
|
89
|
+
"web-push": "^3.6.7"
|
|
90
|
+
},
|
|
91
|
+
"devDependencies": {
|
|
92
|
+
"@eslint/js": "^10.0.1",
|
|
93
|
+
"@testing-library/dom": "^10.4.2",
|
|
94
|
+
"@testing-library/jest-dom": "^7.0.1",
|
|
95
|
+
"@testing-library/react": "^16.3.3",
|
|
96
|
+
"@types/dockerode": "^4.0.1",
|
|
97
|
+
"@types/node": "^24.19.1",
|
|
98
|
+
"@types/react": "^19.3.0",
|
|
99
|
+
"@types/react-dom": "^19.3.0",
|
|
100
|
+
"@types/web-push": "^3.6.4",
|
|
101
|
+
"@vitejs/plugin-react": "^6.1.2",
|
|
102
|
+
"eslint": "^10.12.0",
|
|
103
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
104
|
+
"jsdom": "^30.1.2",
|
|
105
|
+
"prettier": "^3.9.9",
|
|
106
|
+
"railway": "3.13.1",
|
|
107
|
+
"tsx": "^4.23.15",
|
|
108
|
+
"typescript": "^5.9.3",
|
|
109
|
+
"typescript-eslint": "^8.71.1",
|
|
110
|
+
"vite": "^8.3.3",
|
|
111
|
+
"vitest": "^5.0.3"
|
|
112
|
+
}
|
|
113
|
+
}
|