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,3 @@
|
|
|
1
|
+
import{C as e,Cn as t,Ct as n,E as r,F as i,Fn as a,G as o,H as s,I as c,L as l,Lt as u,M as d,Nt as f,Pn as p,Pt as m,Q as h,S as g,Tn as _,Vn as v,Vt as y,W as b,Wn as x,Y as S,_ as C,a as w,at as T,b as E,bt as ee,c as te,dn as ne,dt as D,en as re,et as O,f as ie,in as ae,it as k,l as oe,mn as se,o as ce,ot as A,p as j,pn as M,q as le,rt as N,s as ue,un as de,ut as fe,v as P,x as F}from"./ui-DcmhYyYp.js";import{r as pe,t as me}from"./router-W6nZsQ33.js";import{r as he,t as ge}from"./storage-yvL36AWt.js";import{c as _e,i as ve,n as ye,r as be}from"./store-IqrqHuFR.js";import{a as xe}from"./data-CmXvx3Mj.js";import{S as Se,a as Ce,i as we,p as Te,r as Ee,v as I,y as De}from"./format-BBZ8vFyT.js";import{Nt as Oe,Qt as ke,St as Ae,a as je,c as Me,s as Ne,yt as Pe}from"./index-B6qKm1NW.js";import{t as Fe}from"./ReviewChangeDialog-BVSt-cw-.js";import{n as Ie}from"./usePush-Dsm-TjlG.js";import{c as Le,d as Re,f as ze,i as Be,l as Ve,m as He,n as Ue,o as We,r as Ge,t as Ke,u as qe}from"./activity-CBfTSxqw.js";import{n as Je}from"./DotStage-CtMNzCN3.js";import{i as Ye,t as Xe}from"./useRefChips-CbafNx59.js";import{t as Ze}from"./ApprovalCard-CfGhGFo_.js";import{_ as Qe,a as $e,c as et,d as L,f as tt,g as nt,h as rt,l as it,m as at,n as ot,o as st,p as ct,s as R,t as lt,u as z,v as ut}from"./CardFromRef-BaTGmZ9c.js";import{t as dt}from"./NoBreakNames-Csxdqdt6.js";import{a as ft,n as pt,o as mt,r as ht,t as gt}from"./releaseModel-EynYMVOC.js";/* empty css */import{t as _t}from"./RunActions-ZY7yf1AF.js";var B=x(v(),1),V=se(),vt=`chat:activityCardOpen`,yt=`(min-width: 1128px)`;function bt(){let[e,t]=(0,B.useState)(()=>{try{return window.matchMedia(yt).matches}catch{return!0}});return(0,B.useEffect)(()=>{let e=window.matchMedia?.(yt);if(!e)return;let n=()=>t(e.matches);return e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}function xt(){try{return window.matchMedia(`(min-width: 1200px)`).matches}catch{return!0}}function St({dotId:t,dot:n,onCall:r,inCall:i,callStarting:a}){let o=Ke(t),[s,c]=(0,B.useState)(()=>ge(vt,null)??xt()),[l,u]=(0,B.useState)(!1),d=bt(),[f,p]=(0,B.useState)(!1),m=(0,B.useRef)(!1),h=We(o.data);(0,B.useEffect)(()=>{let e=window.matchMedia?.(yt);if(!e)return;let t=()=>e.matches&&u(!1);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),(0,B.useEffect)(()=>{m.current&&(m.current=!1,document.querySelector(s?`.acard__collapse`:`.acard__pill`)?.focus())},[s]);function _(){m.current=!0,c(e=>(he(vt,!e),!e))}let v=e=>(0,V.jsx)(Ct,{activity:o.data,error:o.error,loading:o.loading,progress:o.progress,dotId:t,dot:n,onRetry:()=>void o.reload(),onNavigate:()=>u(!1),onCall:r?()=>{u(!1),r()}:void 0,inCall:i,callStarting:a,onReview:n?()=>{u(!1),p(!0)}:void 0,onCollapse:e?void 0:_});return(0,V.jsxs)(V.Fragment,{children:[s&&d?(0,V.jsx)(`aside`,{className:`acard acard--open`,"data-open":`true`,"aria-label":`Activity`,children:v(!1)}):(0,V.jsx)(`aside`,{className:`acard acard--pill`,"data-open":`false`,"aria-label":`Activity`,children:(0,V.jsxs)(`button`,{type:`button`,className:`acard__pill`,onClick:d?_:()=>u(!0),"aria-expanded":!d&&void 0,"aria-haspopup":d?void 0:`dialog`,"aria-label":`${Ve(o.data)}. Show activity`,children:[(0,V.jsx)(F,{name:n?g(n):`pip`,state:n?e(n.status):`ok`,size:20,decorative:!0}),(0,V.jsx)(`span`,{className:`acard__pill-text`,children:Ve(o.data)}),(0,V.jsx)(T,{size:12,style:{transform:`rotate(90deg)`}})]})}),(0,V.jsxs)(`button`,{type:`button`,className:`activity-pill`,onClick:()=>u(!0),"aria-haspopup":`dialog`,children:[(0,V.jsx)(E,{kind:h.working||h.reviewing?`running`:h.waiting?`waiting`:`none`,label:``,size:14,decorative:!0}),(0,V.jsx)(`span`,{className:`activity-pill__text`,children:Ve(o.data)}),(0,V.jsx)(T,{size:14})]}),(0,V.jsx)(S,{open:l,onClose:()=>u(!1),title:`Activity`,description:`What this dot is working on`,hideDescription:!0,className:`acard-sheet`,children:v(!0)}),n&&f&&(0,V.jsx)(Fe,{dot:n,open:f,onClose:()=>p(!1)})]})}function Ct({activity:t,error:n,loading:r,progress:i,dotId:a,dot:o,onRetry:s,onNavigate:c,onCall:l,inCall:u,callStarting:d,onReview:p,onCollapse:m}){let h=t?.items??[],_=Le(h),v=qe(h),y=t?.outputs??[],b=o?.lastRun?o.lastRun.finishedAt??o.lastRun.createdAt:void 0,x=Re({data:t,lastRunAt:b,paused:o?.status===`paused`}),S=!t&&r,C=!t&&!!n;return(0,V.jsxs)(`div`,{className:`acard__inner`,children:[(0,V.jsxs)(`header`,{className:`acard__head`,children:[(0,V.jsx)(F,{name:o?g(o):`pip`,state:o?e(o.status):`ok`,size:36,label:o?`${o.name}, ${x}`:`All dots`}),(0,V.jsxs)(`div`,{className:`acard__who`,children:[(0,V.jsx)(`p`,{className:`acard__name`,children:o?.name??(a?`Dot`:`All dots`)}),(0,V.jsx)(`p`,{className:`acard__line`,children:a?x:Re({data:t}).replace(`No activity yet`,`Questions go to every dot`)})]}),m&&(0,V.jsx)(`button`,{type:`button`,className:`acard__collapse`,onClick:m,"aria-expanded":`true`,"aria-label":`Hide activity`,children:(0,V.jsx)(A,{size:14})})]}),(l||p)&&(0,V.jsxs)(`div`,{className:`acard__actions`,children:[l&&(0,V.jsx)(M,{size:`sm`,icon:(0,V.jsx)(f,{size:14}),onClick:l,loading:d,children:u?`In a call`:`Call`}),p&&(0,V.jsx)(M,{size:`sm`,onClick:p,children:`Check a PR`})]}),(0,V.jsx)(Pt,{}),C?(0,V.jsxs)(`div`,{className:`acard__error`,role:`alert`,children:[(0,V.jsx)(`p`,{children:`Could not load activity. Try again in a minute.`}),(0,V.jsx)(M,{size:`sm`,onClick:s,children:`Try again`})]}):S?(0,V.jsx)(`p`,{className:`acard__muted`,role:`status`,children:`Loading activity`}):(0,V.jsxs)(V.Fragment,{children:[n?(0,V.jsx)(`p`,{className:`acard__stale`,role:`status`,children:`Could not refresh. Showing the last result.`}):null,(0,V.jsx)(kt,{items:_,notes:t?.notes??[],progress:i,showDot:!a,onNavigate:c}),(0,V.jsx)(At,{count:t?.waiting??0,onNavigate:c}),(0,V.jsx)(jt,{items:v,showDot:!a,onNavigate:c}),(0,V.jsx)(Mt,{outputs:y,onNavigate:c})]})]})}function wt({title:e,children:t}){let n=(0,B.useId)();return(0,V.jsxs)(`section`,{className:`acard__section`,"aria-labelledby":n,children:[(0,V.jsx)(`h3`,{className:`acard__h`,id:n,children:e}),t]})}function Tt({open:e,hidden:t,onToggle:n}){return t<=0&&!e?null:(0,V.jsx)(`button`,{type:`button`,className:`acard__more`,onClick:n,"aria-expanded":e,children:e?`Show less`:`Show ${t} more`})}function Et({state:e}){return(0,V.jsx)(E,{kind:Ge[e],label:Be[e],size:14})}function Dt({item:e,detail:t,trailing:n,onNavigate:r}){let i=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Et,{state:e.state}),(0,V.jsxs)(`span`,{className:`acard__row-text`,children:[(0,V.jsx)(`span`,{className:`acard__row-title`,children:e.title}),t?(0,V.jsx)(`span`,{className:`acard__row-detail`,children:t}):null]}),n?(0,V.jsx)(`span`,{className:`acard__row-time num`,children:n}):null]});return(0,V.jsx)(`li`,{children:e.runId?(0,V.jsx)(`a`,{className:`acard__row`,href:me({name:`run`,id:e.runId}),onClick:r,children:i}):(0,V.jsx)(`div`,{className:`acard__row`,children:i})})}function Ot({note:e,showDot:t}){return(0,V.jsx)(`li`,{children:(0,V.jsxs)(`div`,{className:`acard__row`,children:[(0,V.jsx)(E,{kind:e.held?`paused`:`running`,label:e.held?`Waiting`:`Working on it`,size:14}),(0,V.jsxs)(`span`,{className:`acard__row-text`,children:[(0,V.jsx)(`span`,{className:`acard__row-title`,children:e.text}),t?(0,V.jsx)(`span`,{className:`acard__row-detail`,children:e.dotName}):null]})]})})}function kt({items:e,notes:t,progress:n,showDot:r,onNavigate:i}){let[a,o]=(0,B.useState)(!1),s=a?e:e.slice(0,3);return(0,V.jsxs)(wt,{title:`Now`,id:`acard-now`,children:[e.length===0&&t.length===0?(0,V.jsx)(`p`,{className:`acard__muted`,children:`Nothing running.`}):(0,V.jsxs)(`ul`,{className:`acard__list list-box`,children:[t.map(e=>(0,V.jsx)(Ot,{note:e,showDot:r},e.dotId)),s.map(e=>(0,V.jsx)(Dt,{item:e,detail:[ze(e,e.runId?n[e.runId]:void 0),r?e.dotName:``].filter(Boolean).join(` · `),onNavigate:i},`${e.dotId}|${e.key}`))]}),(0,V.jsx)(Tt,{open:a,hidden:e.length-3,onToggle:()=>o(e=>!e)})]})}function At({count:e,onNavigate:t}){let n=He(e);return(0,V.jsx)(wt,{title:`To review`,id:`acard-waiting`,children:(0,V.jsxs)(`a`,{className:`acard__row acard__waiting${e?` acard__waiting--some`:``}`,href:`#/inbox`,onClick:t,"aria-label":e?`${n}. Open the Inbox`:`Nothing to review. Open the Inbox`,children:[(0,V.jsx)(E,{kind:e?`waiting`:`none`,label:e?`To review`:`Nothing to review`,size:14,decorative:!0}),(0,V.jsx)(`span`,{className:`acard__row-text`,children:n}),(0,V.jsx)(T,{size:12})]})})}function jt({items:e,showDot:t,onNavigate:n}){let[r,i]=(0,B.useState)(!1),a=r?e:e.slice(0,5);return(0,V.jsxs)(wt,{title:`Recent activity`,id:`acard-recent`,children:[e.length===0?(0,V.jsx)(`p`,{className:`acard__muted`,children:`No work yet. A PR or ticket shows up here.`}):(0,V.jsx)(`ul`,{className:`acard__list list-box`,children:a.map(e=>(0,V.jsx)(Dt,{item:e,detail:t?e.dotName:void 0,trailing:De(e.at),onNavigate:n},`${e.dotId}|${e.key}`))}),(0,V.jsx)(Tt,{open:r,hidden:e.length-5,onToggle:()=>i(e=>!e)})]})}function Mt({outputs:e,onNavigate:t}){let[n,r]=(0,B.useState)(!1),i=n?e:e.slice(0,4);return(0,V.jsxs)(wt,{title:`Outputs`,id:`acard-outputs`,children:[e.length===0?(0,V.jsx)(`p`,{className:`acard__muted`,children:`Reports, bug reports and PR comments show up here.`}):(0,V.jsx)(`ul`,{className:`acard__list list-box`,children:i.map(e=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(`a`,{className:`acard__row`,href:me({name:`run`,id:e.runId}),onClick:t,children:[(0,V.jsx)(C,{icon:(0,V.jsx)(w,{meta:ue[e.kind],size:14}),label:Ue[e.kind],className:`acard__kind`}),(0,V.jsx)(`span`,{className:`acard__row-text`,children:(0,V.jsx)(`span`,{className:`acard__row-title`,children:e.title})})]})},e.id))}),(0,V.jsx)(Tt,{open:n,hidden:e.length-4,onToggle:()=>r(e=>!e)})]})}var Nt={denied:`Blocked in the browser settings.`,unsupported:`This browser cannot send push.`,"no-worker":`Open the production build to use push.`,"ios-browser":`Add localdost to your Home Screen first.`};function Pt(){let{state:e,busy:t,error:n,enable:r,disable:i}=Ie(),a=e.kind===`on`||e.kind===`off`;return(0,V.jsxs)(`div`,{className:`acard__push`,children:[(0,V.jsx)(d,{checked:e.kind===`on`,label:`Push notifications`,disabled:!a||t,disabledReason:a?void 0:Nt[e.kind]??`Checking this browser.`,onChange:e=>void(e?r():i())}),n&&(0,V.jsxs)(`p`,{className:`acard__error-text`,role:`alert`,children:[(0,V.jsx)(h,{size:12,"aria-hidden":`true`}),` `,n]})]})}function Ft(e){let t=Math.max(0,Math.floor(e/1e3)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=String(r).padStart(n?2:1,`0`),o=String(i).padStart(2,`0`);return n?`${n}:${a}:${o}`:`${a}:${o}`}function It(e){let[t,n]=(0,B.useState)(()=>Date.now());return(0,B.useEffect)(()=>{if(!e)return;let t=setInterval(()=>n(Date.now()),1e3);return()=>clearInterval(t)},[e]),t}var Lt={connecting:`Connecting`,listening:`Listening`,thinking:`Thinking`,speaking:`Speaking`,paused:`Mic muted`};function Rt({off:e}){return(0,V.jsxs)(`svg`,{width:22,height:22,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:1.75,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,V.jsx)(`path`,{d:`M4 9.5h3.5L12 5.5v13l-4.5-4H4z`}),e?(0,V.jsx)(`path`,{d:`M16 9.5l5 5M21 9.5l-5 5`}):(0,V.jsx)(`path`,{d:`M15.5 9a4 4 0 0 1 0 6M18 6.5a7.5 7.5 0 0 1 0 11`})]})}function zt(){return(0,V.jsx)(`svg`,{width:22,height:22,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:1.75,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,V.jsx)(`path`,{d:`M9 9V6a3 3 0 0 1 5.8-1M15 11v.5a3 3 0 0 1-4.6 2.5M5.5 11a6.5 6.5 0 0 0 10.8 4.9M18.5 11a6.4 6.4 0 0 1-.4 2.2M12 17.5V21M4 4l16 16`})})}function Bt({call:e,dotName:t,mascot:r,onCallAgain:i}){let a=It(e.phase===`live`),o=e.startedAt?Ft(a-e.startedAt):`0:00`,s=(0,B.useRef)(null),c=(0,B.useRef)(null),l=(0,B.useRef)(null),u=(0,B.useRef)(null),d=(e.phase===`starting`||e.phase===`live`)&&!e.minimized,p=(e.phase===`starting`||e.phase===`live`)&&e.minimized,m=e.phase===`ended`&&(e.error!==null||e.receiptStatus===`failed`);(0,B.useEffect)(()=>{d||m?(!u.current&&document.activeElement instanceof HTMLElement&&!s.current?.contains(document.activeElement)&&(u.current=document.activeElement),(c.current??s.current?.querySelector(`button`))?.focus()):p?l.current?.focus():u.current&&=(u.current.focus?.(),null)},[d,p,m]);function h(t){if(t.key===`Escape`){t.preventDefault(),d?e.setMinimized(!0):m&&e.dismiss();return}if(t.key!==`Tab`||!s.current)return;let n=Array.from(s.current.querySelectorAll(`button, a[href], [tabindex]:not([tabindex="-1"])`)).filter(e=>!e.hasAttribute(`disabled`));if(!n.length)return;let r=n[0],i=n[n.length-1];t.shiftKey&&document.activeElement===r?(t.preventDefault(),i.focus()):!t.shiftKey&&document.activeElement===i&&(t.preventDefault(),r.focus())}if(p)return(0,V.jsxs)(`div`,{className:`call-pill`,role:`region`,"aria-label":`Call with ${t}`,children:[(0,V.jsxs)(`button`,{ref:l,type:`button`,className:`call-pill__open`,onClick:()=>e.setMinimized(!1),children:[(0,V.jsx)(F,{name:r,state:e.activity===`speaking`?`running`:`ok`,size:28,decorative:!0}),(0,V.jsxs)(`span`,{className:`call-pill__text`,children:[(0,V.jsx)(`span`,{className:`call-pill__title`,children:t}),(0,V.jsxs)(`span`,{className:`call-pill__meta num`,children:[`On a call, `,o,`, `,Lt[e.activity].toLowerCase()]})]}),(0,V.jsx)(`span`,{className:`call-pill__action`,children:`Open call`})]}),(0,V.jsxs)(`button`,{type:`button`,className:`call-pill__hang`,onClick:e.hangUp,children:[(0,V.jsx)(f,{size:18}),(0,V.jsx)(`span`,{children:`Hang up`})]})]});if(m)return(0,V.jsx)(`div`,{className:`call`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`call-ended-title`,ref:s,onKeyDown:h,children:(0,V.jsxs)(`div`,{className:`call__inner call__inner--ended`,children:[(0,V.jsx)(F,{name:r,state:`attention`,size:88,decorative:!0}),(0,V.jsx)(`h2`,{id:`call-ended-title`,className:`call__name`,children:`Call ended`}),e.error&&(0,V.jsx)(`p`,{className:`call__error`,role:`alert`,children:e.error}),e.receiptStatus===`failed`&&(0,V.jsx)(`p`,{className:`call__error`,role:`alert`,children:`The call record was not saved to the chat.`}),e.receiptStatus===`saved`&&(0,V.jsx)(`p`,{className:`call__notice`,children:`The call record is in the chat.`}),(0,V.jsxs)(`div`,{className:`call__ended-actions`,children:[e.receiptStatus===`failed`&&(0,V.jsx)(M,{variant:`primary`,size:`lg`,loading:!1,onClick:e.retryReceipt,children:`Save call record again`}),e.error&&i&&(0,V.jsx)(M,{size:`lg`,icon:(0,V.jsx)(f,{size:18}),onClick:i,children:`Call again`}),(0,V.jsx)(M,{size:`lg`,variant:`ghost`,onClick:e.dismiss,children:`Close`})]})]})});if(!d)return null;let g=e.activity===`speaking`;return(0,V.jsxs)(`div`,{className:`call`,role:`dialog`,"aria-modal":`true`,"aria-label":`Call with ${t}`,ref:s,onKeyDown:h,children:[(0,V.jsxs)(`div`,{className:`call__top`,children:[(0,V.jsxs)(`button`,{type:`button`,className:`call__minimize`,onClick:()=>e.setMinimized(!0),children:[(0,V.jsx)(k,{size:20}),(0,V.jsx)(`span`,{children:`Minimize`})]}),(0,V.jsx)(`span`,{className:`call__mode`,children:e.mode===`realtime`?`Realtime voice`:e.mode===`browser`?`Browser voice`:`Starting`})]}),(0,V.jsxs)(`div`,{className:`call__inner`,children:[(0,V.jsx)(`div`,{className:`call__avatar${g?` is-speaking`:``}`,children:(0,V.jsx)(F,{name:r,state:g||e.activity===`thinking`?`running`:`ok`,size:112,decorative:!0})}),(0,V.jsx)(`h2`,{className:`call__name`,children:t}),(0,V.jsxs)(`p`,{className:`call__status`,children:[(0,V.jsx)(`span`,{className:`call__timer num`,"aria-label":`Call time ${o}`,children:e.phase===`live`?o:`Connecting`}),e.phase===`live`&&(0,V.jsx)(`span`,{className:`call__activity`,children:Lt[e.activity]})]}),e.notice&&(0,V.jsx)(`p`,{className:`call__notice`,children:e.notice}),(0,V.jsxs)(`div`,{className:`call__captions`,"aria-live":`polite`,children:[(0,V.jsxs)(`div`,{className:`caption caption--user`,children:[(0,V.jsx)(`span`,{className:`caption__who`,children:`You`}),(0,V.jsx)(`p`,{className:`caption__text`,children:e.userCaption||(e.micMuted?`Your mic is muted.`:`Say something.`)})]}),(0,V.jsxs)(`div`,{className:`caption caption--dot`,children:[(0,V.jsx)(`span`,{className:`caption__who`,children:t}),(0,V.jsx)(`p`,{className:`caption__text`,children:e.dotCaption||`Waiting for you to speak.`})]})]})]}),(0,V.jsxs)(`div`,{className:`call__controls`,children:[(0,V.jsxs)(`button`,{type:`button`,className:`call__ctl${e.micMuted?` is-off`:``}`,onClick:e.toggleMic,children:[(0,V.jsx)(`span`,{className:`call__ctl-icon`,children:e.micMuted?(0,V.jsx)(zt,{}):(0,V.jsx)(n,{size:22})}),(0,V.jsx)(`span`,{className:`call__ctl-label`,children:e.micMuted?`Unmute mic`:`Mute mic`})]}),(0,V.jsxs)(`button`,{type:`button`,className:`call__ctl${e.speakerMuted?` is-off`:``}`,onClick:e.toggleSpeaker,children:[(0,V.jsx)(`span`,{className:`call__ctl-icon`,children:(0,V.jsx)(Rt,{off:e.speakerMuted})}),(0,V.jsx)(`span`,{className:`call__ctl-label`,children:e.speakerMuted?`Unmute speaker`:`Mute speaker`})]}),(0,V.jsxs)(`button`,{ref:c,type:`button`,className:`call__ctl call__ctl--hang`,onClick:e.hangUp,children:[(0,V.jsx)(`span`,{className:`call__ctl-icon`,children:(0,V.jsx)(f,{size:22})}),(0,V.jsx)(`span`,{className:`call__ctl-label`,children:`Hang up`})]})]})]})}function Vt(){if(typeof window>`u`)return null;let e=window;return e.SpeechRecognition??e.webkitSpeechRecognition??null}var Ht=()=>Vt()!==null,Ut=()=>typeof window<`u`&&`speechSynthesis`in window&&typeof SpeechSynthesisUtterance<`u`;function Wt(e){return e.replace(/```[\s\S]*?```/g,` (code omitted) `).replace(/`([^`]+)`/g,`$1`).replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`).replace(/https?:\/\/\S+/g,`a link`).replace(/^\s{0,3}(#{1,6}|[-*+]|\d+\.)\s+/gm,``).replace(/[*_~>|]/g,``).replace(/\s+/g,` `).trim()}function Gt(e,t={}){if(!Ut()||!e.trim())return t.onEnd?.(),()=>{};let n=!1,r=()=>{n||(n=!0,t.onEnd?.())},i=new SpeechSynthesisUtterance(e);return i.lang=t.lang??(navigator.language||`en-US`),i.rate=1.05,i.onend=r,i.onerror=r,window.speechSynthesis.speak(i),()=>{window.speechSynthesis.cancel(),r()}}var Kt={"not-allowed":`Microphone access is blocked. Allow it in the browser site settings.`,"service-not-allowed":`Speech recognition is blocked in this browser.`,"no-speech":`No speech heard. Try again closer to the mic.`,"audio-capture":`No microphone found.`,network:`Speech recognition needs a network connection in this browser.`};function qt(e){let[t,n]=(0,B.useState)(!1),[r,i]=(0,B.useState)(``),[a,o]=(0,B.useState)(null),s=(0,B.useRef)(null),c=(0,B.useRef)(``),l=(0,B.useRef)(e);(0,B.useEffect)(()=>{l.current=e});let[u]=(0,B.useState)(Ht),d=(0,B.useCallback)(()=>{let e=Vt();if(!e||s.current)return;let t=new e;t.lang=navigator.language||`en-US`,t.interimResults=!0,t.continuous=!0,c.current=``,t.onresult=e=>{let t=``,n=``;for(let r=0;r<e.results.length;r++){let i=e.results[r];i.isFinal?t+=i[0].transcript:n+=i[0].transcript}c.current=(t+n).trim(),i(c.current)},t.onerror=e=>{e.error!==`aborted`&&o(Kt[e.error]??`Speech recognition stopped (${e.error}).`)},t.onend=()=>{s.current=null,n(!1),i(``);let e=c.current.trim();e&&l.current(e)},s.current=t,o(null),i(``);try{t.start(),n(!0)}catch{s.current=null,o(`Could not start the microphone.`)}},[]),f=(0,B.useCallback)(()=>{s.current?.stop()},[]);return(0,B.useEffect)(()=>()=>s.current?.abort(),[]),{supported:u,listening:t,interim:r,error:a,start:d,stop:f}}function Jt(e,t){let n=!1,r=!1,i=!1,a=null,o=null,s=null,c=!1;function l(){if(n||c)return;if(r){t.onActivity(`paused`);return}let e=Vt();if(!e){t.onError(`This browser has no speech recognition. Try Chrome, Edge, or Safari, or type in the chat instead.`);return}if(a)return;let i=new e;i.lang=navigator.language||`en-US`,i.interimResults=!0,i.continuous=!1;let o=``;i.onresult=e=>{let n=``;for(let t=0;t<e.results.length;t++)n+=e.results[t][0].transcript;o=n.trim(),o&&t.onUser(o,!1)},i.onerror=e=>{e.error===`not-allowed`||e.error===`service-not-allowed`?(n=!0,t.onError(`Microphone access is blocked. Allow it in the browser site settings, then call again.`)):e.error===`audio-capture`&&(n=!0,t.onError(`No microphone found.`))},i.onend=()=>{a=null,!n&&(o?u(o):setTimeout(l,150))},a=i;try{i.start(),t.onActivity(`listening`)}catch{a=null,setTimeout(l,500)}}async function u(r){c=!0,t.onUser(r,!0),t.onActivity(`thinking`);let a=new AbortController;o=a;let u=``,d;try{let o=await p({dotId:e,text:r,channel:`call`},e=>{e.type===`delta`?(u+=e.text,t.onDot(u,!1)):e.type===`work`&&(d=e.work)},a.signal);if(n)return;let c=o||u;t.onDot(c,!0,d),!i&&c&&(t.onActivity(`speaking`),await new Promise(e=>{s=Gt(Wt(c),{onEnd:e})}),s=null)}catch(e){if(n||a.signal.aborted)return;t.onError(e instanceof Error?e.message:`The dot could not answer.`)}finally{o=null,c=!1,n||l()}}return{async start(){if(!Vt())throw Error(`This browser has no speech recognition. Try Chrome, Edge, or Safari, or type in the chat instead.`);l()},setMicMuted(e){r=e,e?(a?.abort(),a=null,c||t.onActivity(`paused`)):l()},setSpeakerMuted(e){i=e,e&&s?.()},stop(){n=!0,a?.abort(),a=null,o?.abort(),s?.()}}}function Yt(e,t){let n=null,r=null,i=null,a=null,o=!1,s=``,c=``;function l(e){let n;try{n=JSON.parse(e)}catch{return}let r=e=>typeof e==`string`?e:``;switch(n.type){case`input_audio_buffer.speech_started`:s=``,t.onActivity(`listening`);break;case`conversation.item.input_audio_transcription.delta`:s+=r(n.delta),t.onUser(s,!1);break;case`conversation.item.input_audio_transcription.completed`:s=r(n.transcript).trim()||s,s&&t.onUser(s,!0),s=``;break;case`response.created`:c=``,t.onActivity(`thinking`);break;case`output_audio_buffer.started`:t.onActivity(`speaking`);break;case`response.output_audio_transcript.delta`:case`response.audio_transcript.delta`:c+=r(n.delta),t.onDot(c,!1);break;case`response.output_audio_transcript.done`:case`response.audio_transcript.done`:c=r(n.transcript)||c,c&&t.onDot(c,!0),c=``;break;case`output_audio_buffer.stopped`:case`response.done`:t.onActivity(`listening`);break;case`error`:{let e=n.error??{};t.onError(e.message||`The realtime call reported an error.`);break}}}return{async start(){t.onActivity(`connecting`),n=new RTCPeerConnection,a=document.createElement(`audio`),a.autoplay=!0,n.ontrack=e=>{a&&(a.srcObject=e.streams[0])},n.onconnectionstatechange=()=>{!o&&n&&(n.connectionState===`failed`||n.connectionState===`disconnected`)&&t.onError(`The call connection dropped.`)};try{i=await navigator.mediaDevices.getUserMedia({audio:!0})}catch{throw Error(`Microphone access is blocked. Allow it in the browser site settings, then call again.`)}if(o)return;n.addTrack(i.getTracks()[0],i),r=n.createDataChannel(`oai-events`),r.onopen=()=>{r?.send(JSON.stringify({type:`session.update`,session:{type:`realtime`,audio:{input:{transcription:{model:`whisper-1`}}}}})),t.onActivity(`listening`)},r.onmessage=e=>l(String(e.data));let s=await n.createOffer();await n.setLocalDescription(s);let c=await fetch(e.callsUrl||`https://api.openai.com/v1/realtime/calls`,{method:`POST`,body:s.sdp,headers:{Authorization:`Bearer ${e.token}`,"Content-Type":`application/sdp`}});if(!c.ok)throw Error(`The realtime call could not start (HTTP ${c.status}).`);let u=await c.text();o||await n.setRemoteDescription({type:`answer`,sdp:u})},setMicMuted(e){i?.getAudioTracks().forEach(t=>t.enabled=!e),e?t.onActivity(`paused`):t.onActivity(`listening`)},setSpeakerMuted(e){a&&(a.muted=e)},stop(){o=!0;try{r?.close()}catch{}i?.getTracks().forEach(e=>e.stop()),n?.close(),a&&(a.srcObject=null),n=null,r=null,i=null,a=null}}}var Xt={phase:`idle`,mode:null,activity:`connecting`,startedAt:null,userCaption:``,dotCaption:``,transcript:[],micMuted:!1,speakerMuted:!1,minimized:!1,error:null,notice:null,receiptStatus:`idle`};function Zt(e,t={}){let[n,r]=(0,B.useState)(Xt),i=(0,B.useRef)(null),a=(0,B.useRef)([]),o=(0,B.useRef)(null),s=(0,B.useRef)(null),c=(0,B.useRef)(t.onReceipt);(0,B.useEffect)(()=>{c.current=t.onReceipt});let l=(0,B.useCallback)(e=>r(t=>({...t,...e})),[]),u=(0,B.useCallback)(e=>{s.current=e,l({receiptStatus:`saving`}),_.callReceipt(e).then(t=>{s.current=null,l({receiptStatus:`saved`});let n=t&&typeof t==`object`&&`id`in t?t.id:void 0;c.current?.(e,n)},()=>l({receiptStatus:`failed`}))},[l]),d=(0,B.useCallback)(t=>{let n=i.current;i.current=null,n?.stop();let r=o.current;o.current=null,l({phase:`ended`,minimized:!1,...t?{error:t}:{}});let s=a.current.length===0;r&&e&&!(t&&s)&&u({dotId:e,startedAt:new Date(r).toISOString(),endedAt:new Date().toISOString(),transcript:a.current.slice()})},[e,u,l]),f=(0,B.useCallback)(()=>{if(!e||i.current)return;a.current=[],o.current=null,r({...Xt,phase:`starting`});let t=(e,t,n)=>{let r=n?{elapsedMs:n.elapsedMs,steps:n.steps,...n.tokens===void 0?{}:{tokens:n.tokens}}:void 0;a.current.push({role:e,text:t,at:new Date().toISOString(),...r?{work:r}:{}}),l({transcript:a.current.slice()})},n={onUser:(e,n)=>{l({userCaption:e}),n&&t(`user`,e)},onDot:(e,n,r)=>{l({dotCaption:e}),n&&t(`assistant`,e,r)},onActivity:e=>l({activity:e}),onError:e=>d(e)};(async()=>{let t,r=null;try{let i=await _.callSession(e);i.mode===`realtime`&&i.token&&typeof RTCPeerConnection<`u`?(t=Yt({token:i.token,callsUrl:i.callsUrl,model:i.model},n),l({mode:`realtime`})):(i.fallbackReason&&(r=`Realtime voice is unavailable, so this call uses the browser voice.`),t=Jt(e,n),l({mode:`browser`,notice:r}))}catch{t=Jt(e,n),l({mode:`browser`,notice:`Could not reach the call service, so this call uses the browser voice.`})}i.current=t;try{if(await t.start(),i.current!==t)return;o.current=Date.now(),l({phase:`live`,startedAt:o.current})}catch(e){i.current=null,t.stop(),l({phase:`ended`,error:e instanceof Error?e.message:`The call could not start.`})}})()},[e,d,l]),p=(0,B.useCallback)(()=>{if(n.phase===`starting`&&!i.current){r(Xt);return}d(null)},[d,n.phase]),m=(0,B.useCallback)(()=>{let e=!n.micMuted;i.current?.setMicMuted(e),l({micMuted:e})},[n.micMuted,l]),h=(0,B.useCallback)(()=>{let e=!n.speakerMuted;i.current?.setSpeakerMuted(e),l({speakerMuted:e})},[n.speakerMuted,l]),g=(0,B.useCallback)(()=>{s.current&&u(s.current)},[u]),v=(0,B.useCallback)(()=>r(Xt),[]),y=(0,B.useRef)(d);return(0,B.useEffect)(()=>{y.current=d}),(0,B.useEffect)(()=>()=>{i.current&&y.current(null)},[]),{...n,start:f,hangUp:p,toggleMic:m,toggleSpeaker:h,setMinimized:e=>l({minimized:e}),retryReceipt:g,dismiss:v}}var Qt=8;function $t({onSend:e,onStop:t,streaming:r,placeholder:i=`Message the dot`,autoFocus:a,initialText:o,disabled:s}){let[c,l]=(0,B.useState)(o??``),[u,d]=(0,B.useState)(null),f=(0,B.useRef)(null),p=(0,B.useId)(),m=(0,B.useId)(),h=qt(t=>{if(r){l(e=>e?`${e} ${t}`:t);return}e(t)});(0,B.useEffect)(()=>{let e=f.current;e&&(o?(e.focus(),e.setSelectionRange(e.value.length,e.value.length)):a&&window.matchMedia?.(`(pointer: fine)`).matches&&e.focus())},[]),(0,B.useEffect)(()=>{let e=f.current;if(!e)return;e.style.height=`auto`;let t=parseFloat(getComputedStyle(e).lineHeight)||20;e.style.height=`${Math.min(e.scrollHeight,t*Qt+16)}px`},[c]);function g(){let t=c.trim();!t||r||s||(e(t),l(``))}function _(e){e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),g())}function v(){if(!h.supported){d(`Voice input is not available in this browser. Type instead, or try Chrome, Edge, or Safari.`);return}d(null),h.start()}let b=u??h.error;return(0,V.jsxs)(`div`,{className:`composer${s?` is-disabled`:``}`,children:[s&&(0,V.jsx)(`p`,{className:`composer__note`,role:`status`,children:s}),(h.listening||b)&&(0,V.jsx)(`p`,{id:m,className:`composer__note${b&&!h.listening?` is-error`:``}`,role:`status`,children:h.listening?h.interim||`Listening. Release to send.`:b}),(0,V.jsxs)(`form`,{className:`composer__row`,onSubmit:e=>{e.preventDefault(),g()},children:[(0,V.jsxs)(`button`,{type:`button`,className:`composer__mic${h.listening?` is-listening`:``}`,"aria-label":h.listening?`Listening, release to send`:`Hold to talk`,"aria-describedby":b?m:void 0,disabled:!!s,onPointerDown:e=>{e.button===0&&(e.preventDefault(),e.currentTarget.setPointerCapture?.(e.pointerId),v())},onPointerUp:()=>h.stop(),onPointerCancel:()=>h.stop(),onKeyDown:e=>{(e.key===` `||e.key===`Enter`)&&!e.repeat&&(e.preventDefault(),v())},onKeyUp:e=>{(e.key===` `||e.key===`Enter`)&&h.stop()},onContextMenu:e=>e.preventDefault(),children:[(0,V.jsx)(n,{size:20}),(0,V.jsx)(`span`,{className:`composer__mic-label`,children:h.listening?`Release`:`Talk`})]}),(0,V.jsx)(`label`,{className:`sr-only`,htmlFor:`${p}-box`,children:`Message`}),(0,V.jsx)(`textarea`,{id:`${p}-box`,ref:f,className:`composer__input`,rows:1,value:c,placeholder:i,"aria-describedby":p,enterKeyHint:`send`,disabled:!!s,onChange:e=>l(e.target.value),onKeyDown:_}),r?(0,V.jsxs)(`button`,{type:`button`,className:`composer__send composer__send--stop`,onClick:t,children:[(0,V.jsx)(re,{size:18}),(0,V.jsx)(`span`,{className:`composer__send-label`,children:`Stop`})]}):(0,V.jsxs)(`button`,{type:`submit`,className:`composer__send`,disabled:!!s,"aria-disabled":!c.trim()||void 0,children:[(0,V.jsx)(y,{size:18}),(0,V.jsx)(`span`,{className:`composer__send-label`,children:`Send`})]})]}),(0,V.jsx)(`p`,{id:p,className:`composer__hint`,children:`Enter to send, Shift+Enter for a new line`})]})}function en({block:e}){return e.state===`loading`&&e.cards.length===0?(0,V.jsx)(`div`,{className:`cards-stack`,"data-block":`cards`,"aria-busy":`true`,children:(0,V.jsx)(`div`,{className:`ocard ocard--loading`,role:`status`,"aria-label":`Loading card`})}):(0,V.jsxs)(`div`,{className:`cards-stack`,"data-block":`cards`,children:[e.cards.map(e=>(0,V.jsx)($e,{card:e},`${e.kind}:${e.ref}`)),e.more?(0,V.jsxs)(`p`,{className:`cblock__more`,children:[I(e.more,`more card`),` not shown`]}):null]})}function H({kind:e,title:t,count:n,noun:r,more:i,moreHref:a,moreLabel:o,loading:s,empty:c,toolbar:l,children:u}){let d=(0,B.useId)(),f=!s&&n===0;return(0,V.jsxs)(`section`,{className:`cblock cblock--${e}`,"aria-labelledby":d,"data-block":e,"aria-busy":s||void 0,children:[(0,V.jsxs)(`header`,{className:`cblock__head`,children:[(0,V.jsx)(`h3`,{id:d,className:`cblock__title`,children:t}),n!==void 0&&r&&n>0&&(0,V.jsx)(`span`,{className:`cblock__count num`,children:I(n+(i??0),r)})]}),l&&(0,V.jsx)(`div`,{className:`cblock__toolbar`,children:l}),s&&n===0?(0,V.jsx)(tn,{}):f?(0,V.jsx)(`p`,{className:`cblock__empty`,children:c??`Nothing to show.`}):u,s&&n!==void 0&&n>0&&(0,V.jsxs)(`p`,{className:`cblock__loading`,role:`status`,children:[(0,V.jsx)(`span`,{className:`spinner`,"aria-hidden":`true`}),` Loading more`]}),i?(0,V.jsx)(`p`,{className:`cblock__more`,children:a?(0,V.jsx)(`a`,{href:a,children:o??`${I(i,`more row`)}`}):`${I(i,`more row`)} not shown`}):null]})}function tn(){return(0,V.jsx)(`ul`,{className:`cblock__rows`,"aria-hidden":`true`,children:[62,48,55].map(e=>(0,V.jsx)(`li`,{className:`crow crow--skeleton`,children:(0,V.jsxs)(`span`,{className:`crow__main`,children:[(0,V.jsx)(`span`,{className:`skeleton`,style:{width:`${e}%`,height:12}}),(0,V.jsx)(`span`,{className:`skeleton`,style:{width:`${e-25}%`,height:10}})]})},e))})}function nn({label:e,options:t,value:n,onChange:r}){return(0,V.jsx)(`div`,{className:`cblock__chips`,role:`group`,"aria-label":e,children:t.map(e=>(0,V.jsxs)(`button`,{type:`button`,className:`cblock__chip`,"aria-pressed":n===e.key,onClick:()=>r(e.key),children:[e.label,(0,V.jsx)(`span`,{className:`cblock__chip-count num`,children:e.count})]},e.key))})}var U=7.3,rn=new Intl.NumberFormat(`en-US`,{maximumFractionDigits:1});function W(e,t=``){return`${rn.format(e)}${t}`}function an(e,t){return t<2?``:e.length>t?`${e.slice(0,t-1)}…`:e}var on=[1,2,5,10];function sn(e,t,n=4){if(!(t>e))return{ticks:[e,e+1],lo:e,hi:e+1};let r=(t-e)/n,i=10**Math.floor(Math.log10(r)),a=(on.find(e=>e*i>=r)??10)*i,o=Math.floor(e/a+1e-9)*a,s=Math.ceil(t/a-1e-9)*a,c=[];for(let e=o;e<=s+a/1e6;e+=a)c.push(Math.round(e*1e6)/1e6);return{ticks:c,lo:c[0],hi:c[c.length-1]}}function cn(e,t,n){let r=0;for(let i=0;i<n;i++)if(e===`stacked_bar`)r=Math.max(r,t.reduce((e,t)=>e+Math.max(0,t.values[i]??0),0));else for(let e of t)r=Math.max(r,e.values[i]??0);return r}function ln(e,t,n,r){if(e!==`line`)return sn(0,Math.max(cn(e,t,n),1));let i=t.flatMap(e=>e.values).filter(e=>e!==null);if(!i.length)return sn(0,1);let a=Math.min(...i),o=Math.max(...i);return r===`%`&&o<=100?sn(Math.max(0,Math.floor((a-5)/10)*10),100):sn(Math.min(0,a),Math.max(o,1))}function un(e){return e.split(/\*\*(.+?)\*\*/g).map((e,t)=>({text:e,bold:t%2==1})).filter(e=>e.text)}function dn(e){return e.replace(/\*\*/g,``)}var fn=e=>`#/runs/${encodeURIComponent(e)}`;function pn({runs:e,label:t}){return e?.length?(0,V.jsxs)(`div`,{className:`cblock__refs`,children:[(0,V.jsx)(`p`,{className:`cblock__refs-label`,children:t??`Runs`}),(0,V.jsx)(`ul`,{className:`cblock__refs-list`,children:e.map(e=>(0,V.jsx)(`li`,{children:(0,V.jsx)(r,{source:`run`,title:e.title,href:fn(e.runId)})},e.runId))})]}):null}function mn({block:e}){return(0,V.jsxs)(H,{kind:`stats`,title:e.title??`Summary`,count:e.tiles.length,loading:e.state===`loading`,empty:`Nothing to show.`,children:[(0,V.jsx)(`dl`,{className:`cstats`,children:e.tiles.map((e,t)=>(0,V.jsxs)(`div`,{className:`cstat${e.tone?` cstat--${e.tone}`:``}`,children:[(0,V.jsx)(`dt`,{className:`cstat__label`,children:e.label}),(0,V.jsx)(`dd`,{className:`cstat__value num`,children:e.value}),e.sub&&(0,V.jsx)(`dd`,{className:`cstat__sub`,children:e.sub})]},t))}),(0,V.jsx)(pn,{runs:e.runs,label:e.runsLabel})]})}var hn=184,G={top:18,right:10,bottom:24},gn=28;function _n(){let[e,t]=(0,B.useState)(null),[n,r]=(0,B.useState)(0);return(0,B.useEffect)(()=>{if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(()=>r(Math.floor(e.clientWidth)));return t.observe(e),()=>t.disconnect()},[e]),[t,n>0?n:320]}var vn=e=>e.length*U,yn=e=>`cchart__s${e%4}`;function bn({block:e,width:t}){let{labels:n,series:r,chartType:i,unit:a}=e,o=ln(i,r,n.length,a),s=o.ticks.map(e=>W(e,a)),c=Math.max(...n.map(e=>e.length),1);return i!==`line`&&c*7.3+4>(t-40)/n.length?(0,V.jsx)(Tn,{block:e,width:t,axis:o,tickText:s}):(0,V.jsx)(xn,{block:e,width:t,axis:o,tickText:s})}function xn({block:e,width:t,axis:n,tickText:r}){let{labels:i,series:a,chartType:o,unit:s}=e,c=i.length,l=Math.max(...r.map(e=>e.length))*U+10,u=Math.max(t-l-G.right,40),d=hn-G.top-G.bottom,f=u/c,p=e=>l+f*(e+.5),m=e=>G.top+d*(1-(e-n.lo)/(n.hi-n.lo)),h=Math.max(...i.map(e=>e.length),1),g=Math.max(1,Math.ceil((h*U+8)/f)),_=o===`stacked_bar`,v=(a.length===1||_)&&f>=vn(W(n.hi,s))+2;return(0,V.jsxs)(`svg`,{className:`cchart__svg`,width:t,height:hn,viewBox:`0 0 ${t} ${hn}`,"aria-hidden":`true`,focusable:`false`,children:[n.ticks.map((e,t)=>(0,V.jsxs)(`g`,{children:[(0,V.jsx)(`line`,{className:e===n.lo?`cchart__base`:`cchart__grid`,x1:l,x2:l+u,y1:m(e),y2:m(e)}),(0,V.jsx)(`text`,{className:`cchart__tick`,x:l-6,y:m(e),textAnchor:`end`,dominantBaseline:`middle`,children:r[t]})]},e)),i.map((e,t)=>t%g===0?(0,V.jsx)(`text`,{className:`cchart__tick`,x:p(t),y:hn-G.bottom+15,textAnchor:`middle`,children:an(e,Math.floor((f*g-4)/U))},t):null),o===`line`?(0,V.jsx)(Sn,{block:e,x:p,y:m,slot:f}):i.map((e,t)=>{let n=_?Math.min(f*.7,40):Math.min(f*.7/a.length,28),r=p(t)-(_?n:n*a.length)/2,i=0,o=a.map((a,o)=>{let c=Math.max(0,a.values[t]??0),l=m(_?i+c:c),u=m(_?i:0);return i+=c,c>0?(0,V.jsx)(`rect`,{className:`cchart__bar ${yn(o)}`,x:r+(_?0:o*n),y:l,width:n,height:Math.max(u-l,1),rx:2,children:(0,V.jsx)(`title`,{children:`${e}, ${a.name}: ${W(c,s)}`})},o):null}),c=_?i:a[0].values[t]??0;return(0,V.jsxs)(B.Fragment,{children:[o,v&&(0,V.jsx)(`text`,{className:`cchart__value`,x:p(t),y:m(c)-5,textAnchor:`middle`,children:W(c,s)})]},t)})]})}function Sn({block:e,x:t,y:n,slot:r}){let{series:i,unit:a,labels:o}=e,s=i.length===1;return(0,V.jsx)(V.Fragment,{children:i.map((e,i)=>{let c=``,l=!1;e.values.forEach((e,r)=>{e===null?l=!1:(c+=`${l?`L`:`M`}${t(r).toFixed(1)} ${n(e).toFixed(1)}`,l=!0)});let u=e.values.reduce((e,t,n)=>t===null?e:n,-1),d=e.values.reduce((t,n,r)=>n!==null&&(t<0||n>(e.values[t]??-1/0))?r:t,-1),f=Math.max(...e.values.map(e=>e===null?0:W(e,a).length)),p=r>=f*U+4,m=d<0||Math.abs(u-d)*r>=f*7.3+4,h=t=>p||t===d||t===u&&(e.values[t]??0)!==0&&m;return(0,V.jsxs)(`g`,{className:yn(i),children:[(0,V.jsx)(`path`,{className:`cchart__line`,d:c}),e.values.map((r,i)=>r===null?null:(0,V.jsxs)(B.Fragment,{children:[(0,V.jsx)(`circle`,{className:`cchart__dot`,cx:t(i),cy:n(r),r:3.5,children:(0,V.jsx)(`title`,{children:`${o[i]}, ${e.name}: ${W(r,a)}`})}),s&&h(i)&&(0,V.jsx)(`text`,{className:`cchart__value`,x:t(i),y:n(r)-8,textAnchor:`middle`,children:W(r,a)})]},i))]},i)})})}var Cn=(e,t)=>e===t-1?`end`:e===0?`start`:`middle`;function wn(e,t){let n=e=>e.anchor===`start`?[e.at,e.at+e.width]:e.anchor===`end`?[e.at-e.width,e.at]:[e.at-e.width/2,e.at+e.width/2],r=new Set,i=-1/0;return e.forEach((e,a)=>{let[o,s]=n(e);o<i+t||(r.add(a),i=s)}),r}function Tn({block:e,width:t,axis:n,tickText:r}){let{labels:i,series:a,chartType:o,unit:s}=e,c=o===`stacked_bar`,l=i.map((e,t)=>c?a.reduce((e,n)=>e+Math.max(0,n.values[t]??0),0):Math.max(0,...a.map(e=>e.values[t]??0))),u=Math.max(...l.map(e=>W(e,s).length))*U+8,d=Math.min(Math.max(...i.map(e=>e.length))*U+10,t*.45),f=Math.max(t-d-u,40),p=c?14:Math.max(8,Math.min(14,28/a.length)),m=c?gn:Math.max(gn,a.length*(p+2)+10),h=m*i.length,g=h+22,_=e=>d+f*((e-n.lo)/(n.hi-n.lo)),v=wn(n.ticks.map((e,t)=>({at:_(e),width:r[t].length*U,anchor:Cn(t,n.ticks.length)})),6);return(0,V.jsxs)(`svg`,{className:`cchart__svg`,width:t,height:g,viewBox:`0 0 ${t} ${g}`,"aria-hidden":`true`,focusable:`false`,children:[n.ticks.map((e,t)=>(0,V.jsxs)(`g`,{children:[(0,V.jsx)(`line`,{className:e===n.lo?`cchart__base`:`cchart__grid`,x1:_(e),x2:_(e),y1:0,y2:h}),v.has(t)&&(0,V.jsx)(`text`,{className:`cchart__tick`,x:_(e),y:h+15,textAnchor:Cn(t,n.ticks.length),children:r[t]})]},e)),i.map((e,t)=>{let n=m*t+m/2,r=a.length*(p+2)-2,i=0;return(0,V.jsxs)(`g`,{children:[(0,V.jsxs)(`text`,{className:`cchart__tick`,x:d-8,y:n,textAnchor:`end`,dominantBaseline:`middle`,children:[an(e,Math.floor((d-10)/U)),(0,V.jsx)(`title`,{children:e})]}),a.map((a,o)=>{let l=Math.max(0,a.values[t]??0),u=c?i:0;i+=l;let d=c?n-p/2:n-r/2+o*(p+2);return l>0?(0,V.jsx)(`rect`,{className:`cchart__bar ${yn(o)}`,x:_(u),y:d,width:Math.max(_(u+l)-_(u),1),height:p,rx:2,children:(0,V.jsx)(`title`,{children:`${e}, ${a.name}: ${W(l,s)}`})},o):null}),(a.length===1||c)&&(0,V.jsx)(`text`,{className:`cchart__value`,x:_(l[t])+6,y:n,dominantBaseline:`middle`,children:W(l[t],s)})]},t)})]})}function En({series:e,type:t}){return e.length<2?null:(0,V.jsx)(`ul`,{className:`cchart__legend`,"aria-label":`Series`,children:e.map((e,n)=>(0,V.jsxs)(`li`,{className:`cchart__key ${yn(n)}`,children:[(0,V.jsx)(`svg`,{width:18,height:10,"aria-hidden":`true`,focusable:`false`,children:t===`line`?(0,V.jsx)(`line`,{className:`cchart__line`,x1:1,x2:17,y1:5,y2:5}):(0,V.jsx)(`rect`,{className:`cchart__bar`,x:3,y:1,width:12,height:8,rx:2})}),(0,V.jsx)(`span`,{children:e.name})]},n))})}function Dn({block:e}){return(0,V.jsxs)(`table`,{className:`sr-only`,children:[(0,V.jsx)(`caption`,{children:e.title??`Chart data`}),(0,V.jsx)(`thead`,{children:(0,V.jsxs)(`tr`,{children:[(0,V.jsx)(`th`,{scope:`col`,children:`Label`}),e.series.map((e,t)=>(0,V.jsx)(`th`,{scope:`col`,children:e.name},t))]})}),(0,V.jsx)(`tbody`,{children:e.labels.map((t,n)=>(0,V.jsxs)(`tr`,{children:[(0,V.jsx)(`th`,{scope:`row`,children:t}),e.series.map((t,r)=>{let i=t.values[n];return(0,V.jsx)(`td`,{children:i==null?`No data`:W(i,e.unit)},r)})]},n))})]})}function On({block:e}){let[t,n]=_n(),r=(0,B.useId)(),i=e.finding?dn(e.finding):e.title??`Chart`;return(0,V.jsxs)(H,{kind:`chart`,title:e.title??`Chart`,count:e.labels.length,loading:e.state===`loading`,empty:`Nothing to show.`,children:[e.finding&&(0,V.jsx)(`p`,{className:`cchart__finding`,children:un(e.finding).map((e,t)=>e.bold?(0,V.jsx)(`strong`,{children:e.text},t):(0,V.jsx)(B.Fragment,{children:e.text},t))}),(0,V.jsxs)(`div`,{ref:t,className:`cchart__plot`,role:`img`,"aria-labelledby":r,children:[(0,V.jsx)(`span`,{id:r,className:`sr-only`,children:i}),(0,V.jsx)(bn,{block:e,width:n})]}),(0,V.jsx)(En,{series:e.series,type:e.chartType}),(0,V.jsx)(Dn,{block:e}),(0,V.jsx)(pn,{runs:e.runs,label:e.runsLabel})]})}var K=e=>`#/runs/${encodeURIComponent(e)}`;function kn({iso:e}){return e?(0,V.jsx)(`time`,{dateTime:e,title:ke(e),children:De(e)}):null}function An({href:e,label:t,name:n}){return(0,V.jsxs)(`a`,{className:`btn btn--secondary btn--sm`,href:e,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`${t} ${n} (opens in a new tab)`,children:[(0,V.jsx)(`span`,{className:`btn__label`,children:t}),(0,V.jsx)(`span`,{className:`btn__icon`,"aria-hidden":`true`,children:(0,V.jsx)(D,{size:14})})]})}function jn(e){return e.status===`running`?`running`:e.status===`failed`||(e.failed??0)>0||e.outcome&&e.outcome!==`pass`&&e.outcome!==`info`?`failed`:e.status===`done`?`passed`:`other`}function Mn(e){return e.status?Se({status:e.status,verdict:e.outcome?{outcome:e.outcome}:void 0}):e.outcome?{status:e.outcome===`pass`?`ok`:`attention`,label:Ce[e.outcome],icon:we[e.outcome]}:{status:`paused`,label:`Unknown`,icon:`none`}}function Nn({block:e}){let[t,n]=(0,B.useState)(`all`),r={failed:0,running:0,passed:0};for(let t of e.runs){let e=jn(t);e!==`other`&&r[e]++}let i=t===`all`?e.runs:e.runs.filter(e=>jn(e)===t),a=e.runs.length>3?(0,V.jsx)(nn,{label:`Filter checks`,value:t,onChange:n,options:[{key:`all`,label:`All`,count:e.runs.length},{key:`failed`,label:`Failed`,count:r.failed},{key:`running`,label:`Running`,count:r.running},{key:`passed`,label:`Passed`,count:r.passed}]}):void 0;return(0,V.jsx)(H,{kind:`runs`,title:e.title??`Test runs`,count:e.runs.length,noun:`check`,more:e.more,moreHref:`#/feed`,moreLabel:`${I(e.more??0,`more check`)} in Activity`,loading:e.state===`loading`,empty:`No checks match.`,toolbar:a,children:i.length===0?(0,V.jsxs)(`p`,{className:`cblock__empty`,children:[`No `,t,` runs here.`,` `,(0,V.jsx)(`button`,{type:`button`,className:`link-btn`,onClick:()=>n(`all`),children:`Show all runs`})]}):(0,V.jsx)(`ul`,{className:`cblock__rows`,children:i.map(e=>(0,V.jsx)(Pn,{run:e},e.id))})})}function Pn({run:e}){let t=z(),n=Mn(e),r=e.title||(e.kind?Ee[e.kind]:`Check ${e.id}`),i=e.passed!==void 0||e.failed!==void 0?`${(e.passed??0).toLocaleString()} passed, ${(e.failed??0).toLocaleString()} failed`:null;return(0,V.jsxs)(`li`,{className:`crow`,"data-row":e.id,children:[(0,V.jsxs)(`div`,{className:`crow__line`,children:[(0,V.jsxs)(`div`,{className:`crow__main`,children:[(0,V.jsx)(`p`,{className:`crow__title`,children:r}),(0,V.jsxs)(`p`,{className:`crow__meta`,children:[(0,V.jsx)(P,{kind:n.icon,label:n.label}),e.kind&&(0,V.jsx)(C,{icon:(0,V.jsx)(j,{kind:e.kind,size:14}),label:Ee[e.kind]}),e.dotName&&(0,V.jsx)(`span`,{children:e.dotName}),i&&(0,V.jsx)(`span`,{className:`num`,children:i}),e.durationMs!==void 0&&(0,V.jsx)(`span`,{className:`num`,children:Te(e.durationMs)}),(0,V.jsx)(kn,{iso:e.startedAt})]})]}),(0,V.jsxs)(`div`,{className:`crow__actions`,children:[(0,V.jsx)(`a`,{className:`btn btn--secondary btn--sm`,href:K(e.id),"aria-label":`Open check ${r}`,children:(0,V.jsx)(`span`,{className:`btn__label`,children:`Open`})}),e.status!==`running`&&(0,V.jsx)(M,{size:`sm`,icon:(0,V.jsx)(u,{size:14}),loading:t.busy===`rerun`,"aria-label":`Check again: ${r}`,onClick:()=>void t.run(`rerun`,async()=>{let t=await _.rerun(e.id),n=`runId`in t&&typeof t.runId==`string`?t.runId:`id`in t&&typeof t.id==`string`?t.id:void 0;return n?{tone:`ok`,text:`Checking again.`,link:{href:K(n),label:`Open the new check`}}:{tone:`ok`,text:`Checking again. It shows in Activity when it starts.`}}),children:`Check again`})]})]}),(0,V.jsx)(R,{result:t.result})]})}var Fn={open:`Open`,draft:`Draft`,merged:`Merged`,closed:`Closed`},In={passing:{icon:`passed`,label:`Checks pass`},failing:{icon:`failed`,label:`Checks fail`},pending:{icon:`running`,label:`Checks running`},none:null};function Ln({block:e}){return(0,V.jsx)(H,{kind:`pulls`,title:e.title??(e.repo?`Open PRs in ${e.repo}`:`Open PRs`),count:e.pulls.length,noun:`PR`,more:e.more,loading:e.state===`loading`,empty:`No open pull requests.`,children:(0,V.jsx)(`ul`,{className:`cblock__rows`,children:e.pulls.map(t=>(0,V.jsx)(Rn,{pull:t,dotId:e.dotId,repo:e.repo},t.number))})})}function Rn({pull:e,dotId:t,repo:n}){let r=L(),i=z(),a=e.state?{label:Fn[e.state],icon:oe[e.state]}:null,o=e.checks?In[e.checks]:null,s=`PR #${e.number}`,c=t??r.dotId,l=e.state!==`merged`&&e.state!==`closed`,u=n?`${n}#${e.number}`:e.url,d=st({refText:u??``,kind:`github_pr`,dotId:c},s);return(0,V.jsxs)(`li`,{className:`crow`,"data-row":`pr-${e.number}`,children:[(0,V.jsxs)(`div`,{className:`crow__line`,children:[(0,V.jsxs)(`div`,{className:`crow__main`,children:[(0,V.jsxs)(`p`,{className:`crow__title`,children:[(0,V.jsxs)(`span`,{className:`crow__ref num`,children:[`#`,e.number]}),` `,e.title??`Untitled pull request`]}),(0,V.jsxs)(`p`,{className:`crow__meta`,children:[a&&(0,V.jsx)(C,{icon:(0,V.jsx)(w,{meta:a.icon,size:14}),label:a.label,className:`crow__state`}),o&&(0,V.jsx)(P,{kind:o.icon,label:o.label}),e.author&&(0,V.jsx)(`span`,{children:e.author}),e.branch&&(0,V.jsx)(`code`,{className:`crow__branch`,title:e.branch,tabIndex:0,children:e.branch}),(0,V.jsx)(kn,{iso:e.updatedAt})]}),e.lastReport&&(0,V.jsxs)(`p`,{className:`crow__note`,children:[(0,V.jsx)(`span`,{className:`crow__note-label`,children:`Last QA report:`}),` `,e.lastReport,e.lastReportRunId&&(0,V.jsxs)(V.Fragment,{children:[` `,(0,V.jsx)(`a`,{href:K(e.lastReportRunId),children:`View report`})]})]})]}),(0,V.jsxs)(`div`,{className:`crow__actions`,children:[u&&d.toggle,e.url&&(0,V.jsx)(An,{href:e.url,label:`Open`,name:s}),l&&(0,V.jsx)(M,{size:`sm`,loading:i.busy===`review`,"aria-label":`Review ${s} now`,onClick:()=>void i.run(`review`,async()=>{if(!c)return it(r,`Review PR #${e.number}${n?` in ${n}`:``} now`,`Asked the dot to review this PR.`);let t=await _.requestReview(c,{pr:e.number,...n?{repo:n}:{}}),i=t.runId?{href:K(t.runId),label:`Open the review`}:void 0;return t.duplicate?{tone:`info`,text:`A review of this head is already queued or running.`,link:i}:{tone:`ok`,text:`Review started. What it wants to post waits in the Inbox for your OK.`,link:i}}),children:`Review now`})]})]}),u&&d.panel,(0,V.jsx)(R,{result:i.result})]})}var zn={critical:`Critical`,high:`High`,medium:`Medium`,low:`Low`};function Bn({block:e}){return(0,V.jsx)(H,{kind:`defects`,title:e.title??`Defects`,count:e.defects.length,noun:`defect`,more:e.more,loading:e.state===`loading`,empty:`No defects filed.`,children:(0,V.jsx)(`ul`,{className:`cblock__rows`,children:e.defects.map(e=>{let t=e.severity?{level:e.severity,label:zn[e.severity]}:null;return(0,V.jsx)(`li`,{className:`crow`,"data-row":e.key,children:(0,V.jsxs)(`div`,{className:`crow__line`,children:[(0,V.jsxs)(`div`,{className:`crow__main`,children:[(0,V.jsxs)(`p`,{className:`crow__title`,children:[(0,V.jsx)(`span`,{className:`crow__ref`,children:e.key}),` `,e.title??``]}),(0,V.jsxs)(`p`,{className:`crow__meta`,children:[t&&(0,V.jsx)(C,{icon:(0,V.jsx)(ie,{level:t.level,size:14}),label:`${t.label} severity`}),e.status&&(0,V.jsx)(`span`,{children:e.status}),e.runId&&(0,V.jsx)(`a`,{href:K(e.runId),children:`Found in this run`})]})]}),(0,V.jsx)(`div`,{className:`crow__actions`,children:e.url&&(0,V.jsx)(An,{href:e.url,label:`Open`,name:e.key})})]})},e.key)})})})}var Vn={up:{icon:`passed`,label:`Up`},degraded:{icon:`attention`,label:`Degraded`},down:{icon:`failed`,label:`Down`},unknown:{icon:`none`,label:`Not checked`}};function Hn({block:e}){return(0,V.jsx)(H,{kind:`probes`,title:e.title??`Site status`,count:e.probes.length,noun:`site check`,more:e.more,loading:e.state===`loading`,empty:`This dot has no site checks.`,children:(0,V.jsx)(`ul`,{className:`cblock__rows`,children:e.probes.map(e=>(0,V.jsx)(Un,{probe:e},e.name))})})}function Un({probe:e}){let t=L(),n=z(),r=Vn[e.status??`unknown`];return(0,V.jsxs)(`li`,{className:`crow`,"data-row":e.name,children:[(0,V.jsxs)(`div`,{className:`crow__line`,children:[(0,V.jsxs)(`div`,{className:`crow__main`,children:[(0,V.jsx)(`p`,{className:`crow__title`,children:e.name}),(0,V.jsxs)(`p`,{className:`crow__meta`,children:[(0,V.jsx)(P,{kind:r.icon,label:r.label}),e.httpStatus!==void 0&&(0,V.jsxs)(`span`,{className:`num`,children:[`HTTP `,e.httpStatus]}),e.latencyMs!==void 0&&(0,V.jsx)(`span`,{className:`num`,children:Te(e.latencyMs)}),e.checkedAt&&(0,V.jsxs)(`span`,{children:[`Checked `,(0,V.jsx)(kn,{iso:e.checkedAt})]})]}),e.url&&(0,V.jsx)(`p`,{className:`crow__url`,children:e.url}),e.error&&(0,V.jsx)(`p`,{className:`crow__error`,children:e.error})]}),(0,V.jsx)(`div`,{className:`crow__actions`,children:(0,V.jsx)(M,{size:`sm`,icon:(0,V.jsx)(u,{size:14}),loading:n.busy===`retry`,"aria-label":`Check ${e.name} again`,onClick:()=>void n.run(`retry`,async()=>it(t,`Check the ${e.name} site again`,`Asked the dot to check this site again.`)),children:`Retry`})})]}),(0,V.jsx)(R,{result:n.result})]})}var Wn=3;function Gn({block:e}){let[t,n]=(0,B.useState)(!1),r=t?e.approvals:e.approvals.slice(0,Wn),i=e.approvals.length-r.length;return(0,V.jsxs)(H,{kind:`approvals`,title:e.title??`To review`,count:e.approvals.length,noun:`item`,more:e.more,moreHref:`#/inbox`,moreLabel:`${I(e.more??0,`more item`)} in the Inbox`,loading:e.state===`loading`,empty:`Nothing is waiting for you.`,children:[(0,V.jsx)(`div`,{className:`cblock__stack`,children:r.map(e=>(0,V.jsx)(Ze,{approval:e,variant:`inline`},e.id))}),i>0&&(0,V.jsx)(`p`,{className:`cblock__more`,children:(0,V.jsxs)(`button`,{type:`button`,className:`link-btn`,onClick:()=>n(!0),children:[`Show `,I(i,`more item`)]})})]})}var Kn={flaky_spec:`Flaky test`,env_quirk:`Environment`,convention:`Convention`,decision:`Decision`,note:`Note`};function qn({block:e}){let[t,n]=(0,B.useState)(e.items),[r,i]=(0,B.useState)(e.items);return r!==e.items&&(i(e.items),n(e.items)),(0,V.jsx)(H,{kind:`memory`,title:e.title??`What the dot remembers`,count:t.length,noun:`note`,more:e.more,loading:e.state===`loading`,empty:`The dot remembers nothing yet.`,children:(0,V.jsx)(`ul`,{className:`cblock__rows`,children:t.map(t=>(0,V.jsx)(Jn,{item:t,dotId:t.watchId||e.dotId,onReplace:e=>n(n=>n.map(n=>n.id===t.id?e:n))},t.id))})})}function Jn({item:e,dotId:t,onReplace:n}){let r=L(),i=z(),[a,o]=(0,B.useState)(`view`),[s,l]=(0,B.useState)(e.text),u=(0,B.useRef)(null),d=(0,B.useRef)(null),f=(0,B.useId)(),p=t||r.dotId;function m(){l(e.text),i.setResult(null),o(`edit`),requestAnimationFrame(()=>u.current?.focus())}let h=()=>i.run(`save`,async()=>{let t=s.trim();if(!t)return u.current?.focus(),{tone:`error`,text:`The note is empty. Write something or cancel.`};if(t===e.text)return o(`view`),{tone:`info`,text:`No change.`};if(!p)return{tone:`error`,text:`This note has no dot, so it cannot be saved here. Edit it in the dot settings.`};let r=await _.addMemory(p,t,e.kind);return await _.deleteMemory(e.id).catch(()=>void 0),n(r),ye(`memory`),o(`view`),requestAnimationFrame(()=>d.current?.focus()),{tone:`ok`,text:`Saved.`}}),g=()=>i.run(`delete`,async()=>(await _.deleteMemory(e.id),ye(`memory`),o(`deleted`),{tone:`ok`,text:`Deleted.`})),v=()=>i.run(`undo`,async()=>p?(n(await _.addMemory(p,e.text,e.kind)),ye(`memory`),o(`view`),{tone:`ok`,text:`Restored.`}):{tone:`error`,text:`Cannot restore a note without its dot.`});return a===`deleted`?(0,V.jsxs)(`li`,{className:`crow crow--gone`,"data-row":e.id,children:[(0,V.jsxs)(`div`,{className:`crow__line`,children:[(0,V.jsxs)(`p`,{className:`crow__main crow__gone-text`,children:[`Deleted `,(0,V.jsx)(`q`,{children:e.text})]}),(0,V.jsx)(`div`,{className:`crow__actions`,children:(0,V.jsx)(M,{size:`sm`,loading:i.busy===`undo`,onClick:()=>void v(),children:`Undo`})})]}),(0,V.jsx)(R,{result:i.result?.tone===`error`?i.result:null})]}):(0,V.jsxs)(`li`,{className:`crow`,"data-row":e.id,children:[a===`edit`?(0,V.jsxs)(`div`,{className:`crow__edit`,children:[(0,V.jsx)(`label`,{className:`sr-only`,htmlFor:f,children:`Edit note`}),(0,V.jsx)(c,{id:f,ref:u,value:s,rows:3,onChange:e=>l(e.target.value)}),(0,V.jsxs)(`div`,{className:`crow__actions`,children:[(0,V.jsx)(M,{size:`sm`,variant:`primary`,loading:i.busy===`save`,onClick:()=>void h(),children:`Save`}),(0,V.jsx)(M,{size:`sm`,variant:`ghost`,onClick:()=>{o(`view`),i.setResult(null),requestAnimationFrame(()=>d.current?.focus())},children:`Cancel`})]})]}):(0,V.jsxs)(`div`,{className:`crow__line`,children:[(0,V.jsxs)(`div`,{className:`crow__main`,children:[(0,V.jsx)(`p`,{className:`crow__text`,children:e.text}),(0,V.jsxs)(`p`,{className:`crow__meta`,children:[(0,V.jsx)(C,{icon:(0,V.jsx)(w,{meta:ce[e.kind],size:14}),label:Kn[e.kind]}),(0,V.jsx)(`span`,{children:e.source===`agent`?`Learned by the dot`:`Added by a person`})]})]}),(0,V.jsxs)(`div`,{className:`crow__actions`,children:[(0,V.jsx)(M,{ref:d,size:`sm`,icon:(0,V.jsx)(fe,{size:14}),onClick:m,"aria-label":`Edit note: ${e.text.slice(0,60)}`,children:`Edit`}),(0,V.jsx)(M,{size:`sm`,variant:`ghost`,icon:(0,V.jsx)(ae,{size:14}),loading:i.busy===`delete`,onClick:()=>void g(),"aria-label":`Delete note: ${e.text.slice(0,60)}`,children:`Delete`})]})]}),(0,V.jsx)(R,{result:i.result})]})}var Yn={low:`Low risk`,medium:`Medium risk`,high:`High risk`};function Xn({block:e}){let t=L(),n=z(),r=e.review,[i,a]=(0,B.useState)(!1),o=[{label:`Risks`,items:r.risks},{label:`To test by hand`,items:r.testIdeas},{label:`Open questions`,items:r.openQuestions}],s=()=>n.run(`post`,async()=>{if(r.approvalId){let e=await _.decideApproval(r.approvalId,`approve`);return ye(`approvals`),a(!0),e.status===`executed`?{tone:`ok`,text:`Comment posted on ${r.key}.`}:e.error?{tone:`error`,text:`Approved, but posting failed: ${e.error}. Retry from the Inbox.`,link:{href:`#/inbox`,label:`Open the Inbox`}}:{tone:`ok`,text:`Approved. The comment posts on ${r.key} shortly.`}}return it(t,`Post the ticket review for ${r.key} as a comment`,`Asked for a comment. It waits in the Inbox unless you let the dot post ticket comments on its own.`)});return(0,V.jsx)(H,{kind:`ticket_review`,title:e.title??`Ticket review`,loading:e.state===`loading`,children:(0,V.jsxs)(`div`,{className:`cticket`,children:[(0,V.jsx)(lt,{refText:r.key,dotId:t.dotId,fallback:(0,V.jsxs)(`div`,{className:`crow__line`,children:[(0,V.jsxs)(`p`,{className:`crow__title`,children:[(0,V.jsx)(`span`,{className:`crow__ref`,children:r.key}),` `,r.title??``]}),r.url&&(0,V.jsxs)(`a`,{className:`btn btn--secondary btn--sm`,href:r.url,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Open ${r.key} (opens in a new tab)`,children:[(0,V.jsx)(`span`,{className:`btn__label`,children:`Open`}),(0,V.jsx)(`span`,{className:`btn__icon`,"aria-hidden":`true`,children:(0,V.jsx)(D,{size:14})})]})]})}),(0,V.jsxs)(`div`,{className:`crow__line`,children:[(0,V.jsx)(`div`,{className:`crow__main`,children:r.risk&&(0,V.jsx)(`p`,{className:`crow__meta`,children:(0,V.jsx)(C,{icon:(0,V.jsx)(ie,{level:r.risk,size:14}),label:Yn[r.risk],collapse:`never`})})}),(0,V.jsx)(`div`,{className:`crow__actions`,children:!i&&(0,V.jsx)(M,{size:`sm`,variant:`primary`,loading:n.busy===`post`,onClick:()=>void s(),children:`Post comment`})})]}),o.filter(e=>e.items?.length).map(e=>(0,V.jsxs)(`div`,{className:`cticket__section`,children:[(0,V.jsx)(`h4`,{className:`cticket__label`,children:e.label}),(0,V.jsx)(`ul`,{className:`cticket__list`,children:e.items.map((e,t)=>(0,V.jsx)(`li`,{children:e},t))})]},e.label)),r.runId&&(0,V.jsx)(`p`,{className:`cblock__more`,children:(0,V.jsx)(`a`,{href:`#/runs/${encodeURIComponent(r.runId)}`,children:`Open the full review`})}),(0,V.jsx)(R,{result:n.result})]})})}var Zn={passed:{icon:`passed`,label:`Passed`},failed:{icon:`failed`,label:`Failed`},skipped:{icon:`skipped`,label:`Skipped`}},Qn={draft:{label:`Draft`,hint:`Draft: a person marks it ready on the Test cases page`},ready:{label:`Ready`,hint:`Ready to run`},retired:{label:`Archived`,hint:`Archived: kept for history, not run`}};function $n({block:e}){let t=L(),n=z(),i=e=>new Set(e.filter(e=>!e.result&&!e.tested).map(e=>e.id)),[a,o]=(0,B.useState)(()=>i(e.cases)),[s,c]=(0,B.useState)(e.cases);s!==e.cases&&(c(e.cases),o(i(e.cases)));let l=e=>o(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),u=e.cases.filter(e=>a.has(e.id)),d=()=>n.run(`run`,async()=>{if(!u.length)return{tone:`error`,text:`Tick at least one test case to run.`};let n=u.map(e=>`${e.id} ${e.title}`).join(`; `);return it(t,`Run these test cases${e.runId?` from run ${e.runId}`:``}: ${n}`,`Asked the dot to run ${I(u.length,`test case`)}.`)});return(0,V.jsxs)(H,{kind:`test_cases`,title:e.title??`Test cases`,count:e.cases.length,noun:`test case`,more:e.more,loading:e.state===`loading`,empty:`No test cases.`,children:[(0,V.jsx)(`ul`,{className:`cblock__rows`,children:e.cases.map(t=>{let n=t.result?Zn[t.result]:t.tested?{icon:`passed`,label:`Tested by hand`}:null,i=`${e.id}-${t.id}`;return(0,V.jsx)(`li`,{className:`crow crow--check`,"data-row":t.id,children:(0,V.jsxs)(`label`,{className:`crow__check`,htmlFor:i,children:[(0,V.jsx)(`input`,{id:i,type:`checkbox`,checked:a.has(t.id),onChange:()=>l(t.id)}),(0,V.jsxs)(`span`,{className:`crow__main`,children:[(0,V.jsx)(`span`,{className:`crow__title`,children:t.title}),(0,V.jsxs)(`span`,{className:`crow__meta`,children:[t.status?(0,V.jsx)(r,{source:`case`,refKey:t.id,status:Qn[t.status].hint}):(0,V.jsx)(`span`,{className:`crow__ref num`,children:t.id}),t.status&&(0,V.jsx)(`span`,{className:`crow__chip`,title:Qn[t.status].hint,children:Qn[t.status].label}),t.priority&&(t.priority in te?(0,V.jsx)(C,{icon:(0,V.jsx)(w,{meta:te[t.priority],size:14}),label:t.priority.charAt(0).toUpperCase()+t.priority.slice(1)}):(0,V.jsx)(`span`,{children:t.priority})),n&&(0,V.jsx)(P,{kind:n.icon,label:n.label})]})]})]})},t.id)})}),(0,V.jsxs)(`div`,{className:`cblock__foot`,children:[(0,V.jsx)(`span`,{className:`cblock__foot-note num`,children:a.size?`${I(a.size,`test case`)} ticked`:`None ticked`}),(0,V.jsx)(M,{size:`sm`,variant:`primary`,icon:(0,V.jsx)(m,{size:14}),loading:n.busy===`run`,onClick:()=>void d(),children:a.size?`Run ${a.size}`:`Run`})]}),(0,V.jsx)(R,{result:n.result})]})}var er=10,tr=4;function nr(e){let t=e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/[_-]+/g,` `).trim();return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}function rr(e){return e==null||e===``?`-`:typeof e==`boolean`?e?`Yes`:`No`:typeof e==`number`?e.toLocaleString():String(e)}function ir({block:e,fallback:t}){let[n,r]=(0,B.useState)(!1),i=e.columns?.length?e.columns:Object.keys(e.rows[0]??{}),a=n?e.rows:e.rows.slice(0,er),o=e.rows.length-a.length,s=i.map(t=>e.rows.every(e=>e[t]===null||typeof e[t]==`number`)),c=i.length<=tr&&!s.some(Boolean),l=c?{table:`table`,row:`row`,cell:`cell`,head:`columnheader`}:void 0;return(0,V.jsxs)(H,{kind:`table`,title:e.title??`Details`,count:e.rows.length,noun:`row`,more:e.more,loading:e.state===`loading`,empty:`No rows.`,children:[(0,V.jsx)(`div`,{className:`cblock__scroll${c?` cblock__scroll--wrap`:``}`,tabIndex:0,role:`region`,"aria-label":`${e.title??`Details`} table`,children:(0,V.jsxs)(`table`,{className:`ctable${c?` ctable--wrap`:``}`,role:l?.table,children:[(0,V.jsx)(`thead`,{children:(0,V.jsx)(`tr`,{role:l?.row,children:i.map((e,t)=>(0,V.jsx)(`th`,{scope:`col`,role:l?.head,className:s[t]?`is-num`:void 0,children:nr(e)},e))})}),(0,V.jsx)(`tbody`,{children:a.map((e,t)=>(0,V.jsx)(`tr`,{role:l?.row,children:i.map((t,n)=>(0,V.jsx)(`td`,{role:l?.cell,"data-label":nr(t),className:s[n]?`is-num num`:void 0,children:rr(e[t])},t))},t))})]})}),o>0&&(0,V.jsx)(`p`,{className:`cblock__more`,children:(0,V.jsxs)(`button`,{type:`button`,className:`link-btn`,onClick:()=>r(!0),children:[`Show all `,I(e.rows.length,`row`)]})}),t&&(0,V.jsx)(`p`,{className:`cblock__hint`,children:`Shown as a table because this answer has no matching view yet.`})]})}function ar({block:e}){let t=e.call,n=t.reasons.filter(e=>e.level===`blocker`),r=t.reasons.filter(e=>e.level===`risk`),i=(e,t)=>t.length>0&&(0,V.jsxs)(`div`,{className:`release-chat__group`,children:[(0,V.jsx)(`h4`,{className:`release-chat__label`,children:e}),(0,V.jsx)(`ul`,{className:`release__reasons list-box`,"aria-label":e,children:t.map((e,t)=>(0,V.jsxs)(`li`,{className:`release__reason`,"data-level":e.level,children:[(0,V.jsx)(`span`,{className:`release__reason-icon`,"aria-hidden":`true`,children:(0,V.jsx)(E,{kind:ht[e.level],label:e.level===`blocker`?`Blocks the release`:`A risk`,decorative:!0,size:16})}),(0,V.jsx)(`span`,{className:`release__reason-text`,children:(0,V.jsx)(dt,{text:e.text})}),e.href&&(0,V.jsxs)(`a`,{className:`btn btn--secondary btn--sm release__open`,href:e.href,...mt(e.href)?{target:`_blank`,rel:`noopener noreferrer`}:{},"aria-label":`${e.openLabel??`Open`}: ${e.text}`,children:[(0,V.jsx)(`span`,{className:`btn__label`,children:e.openLabel??`Open`}),(0,V.jsx)(`span`,{className:`release__chevron`,"aria-hidden":`true`,children:(0,V.jsx)(T,{size:16})})]})]},`${e.level}-${t}`))})]});return(0,V.jsxs)(`section`,{className:`cblock cblock--release_call release release-chat`,"data-block":`release_call`,"data-answer":t.answer,"aria-label":`Release call`,children:[(0,V.jsxs)(`header`,{className:`release__head`,children:[(0,V.jsxs)(`p`,{className:`release__answer release__answer--${t.answer}`,children:[(0,V.jsx)(`span`,{className:`release__answer-icon`,"aria-hidden":`true`,children:(0,V.jsx)(E,{kind:gt[t.answer],label:pt[t.answer],decorative:!0,size:20})}),(0,V.jsx)(`strong`,{className:`release__word`,children:pt[t.answer]})]}),t.milestone&&(0,V.jsxs)(`span`,{className:`release-chat__milestone`,children:[`Milestone `,t.milestone]})]}),i(`Why`,n),i(`Also`,r),(0,V.jsxs)(b,{summary:`Details`,children:[(0,V.jsx)(`dl`,{className:`release__counts`,children:ft(t).map(e=>(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`dt`,{children:e.label}),(0,V.jsx)(`dd`,{children:e.n})]},e.label))}),t.reasons.length>0&&(0,V.jsx)(`ul`,{className:`release__sources`,children:t.reasons.map((e,t)=>(0,V.jsxs)(`li`,{children:[e.text,` `,e.memberName&&(0,V.jsxs)(`span`,{className:`release__from`,children:[`From `,e.memberName,`.`]})]},`s-${t}`))}),(0,V.jsx)(`p`,{className:`release__rule`,children:t.rule})]})]})}var or=[`review`,`product`,`test`,`environment`,`flaky`],sr={review:`Found by review`,product:`Looks like a product bug`,test:`Looks like a test problem`,environment:`Looks like the environment`,flaky:`Flaky`},cr={failed:{icon:`failed`,label:`Failed last check`},flaky:{icon:`flaky`,label:`Flaky last check`},passed:{icon:`passed`,label:`Passed last check`}},q=e=>`${e.dotId??``}|${e.id}`,lr=e=>!!(e.rerun||e.flakyMarked||e.defect),ur=e=>`#/runs/${encodeURIComponent(e)}`,dr=e=>String(e).padStart(2,`0`),fr=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function pr(e,t=new Date){let n=new Date(e);if(Number.isNaN(n.getTime()))return e;let r=`${dr(n.getHours())}:${dr(n.getMinutes())}`;return n.toDateString()===t.toDateString()?`${r} today`:`${fr[n.getMonth()]} ${n.getDate()}, ${r}`}function mr(e,t){if(!e.runsChecked)return`No finished test runs or reviews yet.`;let n=e.since?` (since ${pr(e.since,t)})`:``;return`No failed tests and no bugs found in the last ${I(e.runsChecked,`run`)}${n}.`}var hr={critical:`Critical`,high:`High`,medium:`Medium`,low:`Low`};function gr(e,t){let n=Math.max(0,e-t);return[t?I(t,`more bug`):``,n?I(n,`more test`):``].filter(Boolean).join(` and `)||I(e,`more test`)}function _r({block:e}){let[t,n]=(0,B.useState)({}),r=e.rows.map(e=>({...e,...t[q(e)]})),i=r.filter(lr).length,a=(t,r)=>n(n=>{let i={...n};for(let n of e.rows)t(n)&&(i[q(n)]={...i[q(n)],...r});return i}),o=or.map(e=>({cause:e,rows:r.filter(t=>t.cause===e)})).filter(e=>e.rows.length),s=r.length?(0,V.jsx)(vr,{done:i,total:r.length}):void 0;return(0,V.jsx)(H,{kind:`triage`,title:e.title??`Failure triage`,count:r.length,noun:`item`,more:e.more,moreHref:`#/feed`,moreLabel:`${gr(e.more??0,e.moreBugs??0)} in Activity`,loading:e.state===`loading`,empty:mr(e),toolbar:s,children:o.map(t=>(0,V.jsxs)(`section`,{className:`ctriage__group`,"aria-label":`${sr[t.cause]}: ${I(t.rows.length,t.cause===`review`?`bug`:`test`)}`,"data-cause":t.cause,children:[(0,V.jsxs)(`h4`,{className:`ctriage__group-title`,children:[sr[t.cause],` `,(0,V.jsx)(`span`,{className:`ctriage__group-count num`,children:t.rows.length})]}),(0,V.jsx)(`ul`,{className:`cblock__rows`,children:t.rows.map(t=>t.source===`review`?(0,V.jsx)(Sr,{row:t,onDone:(e,t)=>a(e,t)},q(t)):(0,V.jsx)(br,{row:t,dotId:e.dotId,onDone:(e,t)=>a(e,t)},q(t)))})]},t.cause))})}function vr({done:e,total:t}){let n=t?Math.round(e/t*100):0;return(0,V.jsxs)(`div`,{className:`ctriage__progress`,children:[(0,V.jsxs)(`p`,{className:`ctriage__progress-text num`,role:`status`,"aria-live":`polite`,children:[e,` of `,t,` triaged`]}),(0,V.jsx)(`div`,{className:`ctriage__bar`,role:`progressbar`,"aria-label":`Triaged`,"aria-valuemin":0,"aria-valuemax":t,"aria-valuenow":e,children:(0,V.jsx)(`span`,{className:`ctriage__bar-fill`,style:{width:`${n}%`}})})]})}var yr={drafted:`Bug report ready`,filed:`Bug filed`,rejected:`Not filed`};function br({row:e,dotId:t,onDone:n}){let r=L(),i=z(),a=e.dotId??t??r.dotId,o=e.last?cr[e.last]:null,s=e.failedRuns!==void 0&&e.ofRuns?`Failed ${e.failedRuns} of last ${I(e.ofRuns,`run`)}`:null,c=e.test;return(0,V.jsxs)(`li`,{className:`crow`,"data-row":e.id,"data-triaged":lr(e)||void 0,children:[(0,V.jsxs)(`div`,{className:`crow__line`,children:[(0,V.jsxs)(`div`,{className:`crow__main`,children:[(0,V.jsx)(`p`,{className:`crow__title`,children:e.test}),(0,V.jsxs)(`p`,{className:`crow__meta`,children:[o&&(0,V.jsx)(P,{kind:o.icon,label:o.label}),s&&(0,V.jsx)(`span`,{className:`num`,children:s})]}),(0,V.jsx)(xr,{row:e}),(e.file||e.error)&&(0,V.jsxs)(b,{className:`crow__details`,children:[e.file&&(0,V.jsx)(`code`,{className:`crow__branch`,children:e.file}),e.error&&(0,V.jsx)(`p`,{className:`crow__error`,children:e.error})]})]}),(0,V.jsxs)(`div`,{className:`crow__actions`,children:[(0,V.jsx)(M,{size:`sm`,icon:e.rerun?(0,V.jsx)(N,{size:14}):(0,V.jsx)(u,{size:14}),loading:i.busy===`rerun`,disabled:e.rerun,"aria-label":e.rerun?`Checking again: ${c}`:`Check again: ${c}`,onClick:()=>void i.run(`rerun`,async()=>(await _.rerun(e.runId),n(t=>t.runId===e.runId,{rerun:!0}),{tone:`ok`,text:`Checking again. It shows in Activity when it starts.`})),children:e.rerun?`Checking again`:`Check again`}),e.file&&(0,V.jsx)(M,{size:`sm`,icon:e.flakyMarked?(0,V.jsx)(N,{size:14}):void 0,loading:i.busy===`flaky`,disabled:e.flakyMarked,"aria-label":e.flakyMarked?`${c} is marked flaky`:`Mark ${c} flaky`,onClick:()=>void i.run(`flaky`,async()=>a?(await _.addMemory(a,`${e.file} :: ${e.test} (marked flaky in chat)`,`flaky_spec`),n(t=>t.id===e.id&&(t.dotId??a)===a,{flakyMarked:!0}),{tone:`ok`,text:`Saved to the dot memory as flaky.`}):{tone:`error`,text:`Pick a dot first: flaky notes belong to a dot.`}),children:e.flakyMarked?`Marked flaky`:`Mark flaky`}),e.file&&(0,V.jsx)(M,{size:`sm`,icon:e.defect?(0,V.jsx)(N,{size:14}):(0,V.jsx)(O,{size:14}),loading:i.busy===`defect`,disabled:!!e.defect,"aria-label":e.defect?`${yr[e.defect]} for ${c}`:`Write a bug report for ${c}`,onClick:()=>void i.run(`defect`,async()=>{let t=await _.draftDefect(e.runId,{file:e.file,title:e.test});return n(t=>t.id===e.id&&t.runId===e.runId,{defect:t.state,...t.url?{defectUrl:t.url}:{}}),t.state===`filed`?{tone:`ok`,text:`An issue already tracks this failure.`,...t.url?{link:{href:t.url,label:`Open the issue`}}:{}}:t.state===`rejected`?{tone:`info`,text:`You chose not to file this failure, so no bug report was made.`}:{tone:`ok`,text:`Bug report ready. It waits in the Inbox for your OK.`,link:{href:`#/inbox`,label:`Open the Inbox`}}}),children:e.defect?yr[e.defect]:`Write bug report`})]})]}),!i.result&&e.defect===`filed`&&e.defectUrl?(0,V.jsx)(`p`,{className:`ctriage__note`,children:(0,V.jsx)(`a`,{href:e.defectUrl,target:`_blank`,rel:`noopener noreferrer`,children:`Open the filed issue`})}):null,(0,V.jsx)(R,{result:i.result})]})}function xr({row:e}){return(0,V.jsxs)(`p`,{className:`ctriage__refs`,children:[(0,V.jsx)(r,{source:`run`,title:e.runTitle??`Run`,href:ur(e.runId)}),e.pr&&(0,V.jsx)(r,{source:`github-pr`,refKey:`#${e.pr.number}`,title:e.pr.title,href:e.pr.url})]})}function Sr({row:e,onDone:t}){let n=z(),r=e.severity?{level:e.severity,label:hr[e.severity]}:null,i=e.test,a=null;if(e.defect===`filed`&&e.defectUrl)a=(0,V.jsxs)(`a`,{className:`btn btn--secondary btn--sm`,href:e.defectUrl,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Open the bug for ${i} (opens in a new tab)`,children:[(0,V.jsx)(`span`,{className:`btn__icon`,children:(0,V.jsx)(D,{size:14})}),(0,V.jsx)(`span`,{className:`btn__label`,children:`Open the bug`})]});else if(e.defect===`filed`)a=(0,V.jsx)(M,{size:`sm`,icon:(0,V.jsx)(N,{size:14}),disabled:!0,"aria-label":`Bug filed for ${i}`,children:`Bug filed`});else if(e.defect===`drafted`)a=(0,V.jsxs)(`a`,{className:`btn btn--secondary btn--sm`,href:`#/inbox`,"aria-label":`The bug report for ${i} waits in the Inbox`,children:[(0,V.jsx)(`span`,{className:`btn__icon`,children:(0,V.jsx)(ee,{size:14})}),(0,V.jsx)(`span`,{className:`btn__label`,children:`In the Inbox`})]});else if(e.defect===`rejected`)a=(0,V.jsx)(M,{size:`sm`,disabled:!0,"aria-label":`Bug report skipped for ${i}`,children:`Not filed`});else if(e.bugKey){let r=e.bugKey;a=(0,V.jsx)(M,{size:`sm`,icon:(0,V.jsx)(O,{size:14}),loading:n.busy===`defect`,"aria-label":`Write a bug report for ${i}`,onClick:()=>void n.run(`defect`,async()=>{let n=await _.draftDefect(e.runId,{bugKey:r});return t(t=>t.id===e.id&&t.runId===e.runId,{defect:n.state,...n.url&&n.state===`filed`?{defectUrl:n.url}:{}}),n.state===`filed`?{tone:`ok`,text:`An issue already tracks this bug.`}:n.state===`rejected`?{tone:`info`,text:`You chose not to file this bug, so no bug report was made.`}:{tone:`ok`,text:`Bug report ready. It waits in the Inbox for your OK.`}}),children:`Write bug report`})}return(0,V.jsxs)(`li`,{className:`crow`,"data-row":e.id,"data-source":`review`,"data-triaged":lr(e)||void 0,children:[(0,V.jsxs)(`div`,{className:`crow__line`,children:[(0,V.jsxs)(`div`,{className:`crow__main`,children:[(0,V.jsx)(`p`,{className:`crow__title`,children:e.test}),(0,V.jsxs)(`p`,{className:`crow__meta`,children:[r&&(0,V.jsx)(C,{icon:(0,V.jsx)(ie,{level:r.level,size:14}),label:r.label}),e.ref&&(0,V.jsx)(`code`,{className:`crow__branch`,children:e.ref})]}),(0,V.jsx)(xr,{row:e})]}),(0,V.jsx)(`div`,{className:`crow__actions`,children:a})]}),(0,V.jsx)(R,{result:n.result})]})}var Cr=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],wr=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function J(e){return e.toLocaleString(`en-US`,{maximumFractionDigits:1})}function Tr(e){if(e<1e3)return`${Math.round(e)} ms`;let t=e/1e3;if(t<60)return`${J(t)} s`;let n=Math.floor(t/60);return`${n} m ${Math.round(t-n*60)} s`}function Er(e,t=`text`){if(e==null)return`n/a`;if(typeof e==`boolean`)return e?`Yes`:`No`;switch(t){case`number`:return typeof e==`number`?J(e):String(e);case`percent`:return typeof e==`number`?`${J(e)}%`:String(e);case`duration`:return typeof e==`number`?Tr(e):String(e);case`hour`:return typeof e==`number`&&e>=0&&e<24?`${String(Math.floor(e)).padStart(2,`0`)}:00`:String(e);case`weekday`:return typeof e==`number`&&Cr[Math.floor(e)]?Cr[Math.floor(e)]:String(e);case`spec`:return typeof e==`string`?e.replace(/\.(?:spec|test)\.[cm]?[jt]sx?$/,``):String(e);case`day`:{let t=typeof e==`string`?/^(\d{4})-(\d{2})-(\d{2})/.exec(e):null;return t?`${wr[Number(t[2])-1]??t[2]} ${Number(t[3])}`:String(e)}default:return String(e)}}function Dr(e,t){return e.replace(/\{([a-z][A-Za-z0-9_]{0,23})\}/g,(e,n)=>t?.[n]?.text??`n/a`)}function Or(){return typeof Worker>`u`?null:new Worker(new URL(`/assets/view-worker-pyeVAhUT.js`,``+import.meta.url),{type:`module`})}var Y=class extends Error{},kr=0;function Ar(e,t,n){return new Promise((r,i)=>{let a=Or();if(!a)return i(new Y(`This browser cannot compute the view.`));let o=++kr,s=!1,c=e=>{s||(s=!0,clearTimeout(u),t?.removeEventListener(`abort`,l),a.terminate(),e())},l=()=>c(()=>i(new Y(`The view was closed.`))),u=setTimeout(()=>c(()=>i(new Y(`Working out the view took too long, so it was stopped.`))),n);t?.addEventListener(`abort`,l),a.onmessage=e=>{let t=e.data;t&&t.id===o&&c(()=>t.ok?r(t):i(new Y(t.error)))},a.onerror=()=>c(()=>i(new Y(`The view could not be computed in this browser.`))),a.onmessageerror=a.onerror,a.postMessage({...e,id:o})})}async function jr(e,t={}){return(await Ar({type:`compute`,input:e},t.signal,t.timeoutMs??2e3)).output}var Mr={datasets:{},vars:{},errors:{datasets:{},vars:{}}};function Nr(e){return`${Object.entries(e.sources??{}).map(([e,t])=>`${e}:${t.columns.join(`,`)}:${t.rows.length}:${t.more??0}`).join(`;`)}|${JSON.stringify(e.datasets??{})}|${JSON.stringify(e.vars??{})}|${e.tzOffsetMin??0}`}function Pr(e){let t=Object.keys(e.datasets??{}).length>0,{sources:n,datasets:r,vars:i,tzOffsetMin:a}=e,o=(0,B.useMemo)(()=>Nr({sources:n,datasets:r,vars:i,tzOffsetMin:a}),[n,r,i,a]),s=(0,B.useMemo)(()=>({sources:n??{},datasets:r??{},...i?{vars:i}:{},tzOffsetMin:a??0}),[n,r,i,a]),[c,l]=(0,B.useState)(null);return(0,B.useEffect)(()=>{if(!t)return;let e=new AbortController;return jr(s,{signal:e.signal}).then(e=>l({key:o,result:{status:`ready`,out:e}}),t=>{e.signal.aborted||l({key:o,result:{status:`failed`,error:t instanceof Error?t.message:`The view could not be computed.`}})}),()=>e.abort()},[t,o,s]),t?c&&c.key===o?c.result:null:{status:`ready`,out:Mr}}var X=e=>!!e&&nt(e).length>0;function Fr(e){switch(e.type){case`chart`:return!!e.data||X(e.finding);case`table`:return!!e.data;case`stats`:return!!e.tiles?.some(e=>X(e.label)||X(e.value)||X(e.sub));case`text`:return X(e.text);default:return!1}}var Ir=e=>typeof e==`number`&&Number.isFinite(e)?e:null,Lr=(e,t=1)=>Math.round(e*10**t)/10**t,Rr={outcome:Ce,kind:Ee,status:{passed:`Passed`,failed:`Failed`,flaky:`Flaky`,timedOut:`Timed out`,skipped:`Skipped`,running:`Running`,done:`Done`,interrupted:`Interrupted`,cancelled:`Cancelled`}};function zr(e,t){if(typeof t!=`string`)return t;let n=Rr[e];return n&&Object.hasOwn(n,t)?n[t]:t}function Br(e){return e.replace(/(\d) (ms|s|m|h)(?![A-Za-z])/g,`$1\xA0$2`)}function Vr(e,t,n){return e==null?null:typeof e==`number`&&(t===`percent`||t===`number`||t===void 0)?Lr(e):typeof e==`number`&&t===`duration`?Lr(e/1e3,2):typeof e==`boolean`?e:t&&t!==`text`?Er(e,t):zr(n,e)}function Hr(e){let t=e.label??e.field;return e.format===`percent`&&!t.includes(`%`)?`${t} (%)`:e.format===`duration`&&!/\(s\)/.test(t)?`${t} (s)`:t}var Ur=`This part of the view could not be built from the data.`;function Wr(e,t,n){let r=e=>{let t=Object.hasOwn(n.datasets,e)?n.datasets[e]:void 0;if(t)return t;let r=n.errors.datasets[e];return r&&/^There is too much data/.test(r)?r:Ur},i=e=>e===void 0?void 0:Br(Dr(e,n.vars));if(e.type===`stats`&&e.tiles)return{id:t,kind:`stats`,...e.title?{title:i(e.title)}:{},tiles:e.tiles.map(e=>({label:i(e.label),value:i(e.value),...e.sub?{sub:i(e.sub)}:{},...e.tone?{tone:e.tone}:{}}))};if(e.type===`chart`&&e.data&&e.chartType&&e.x&&e.series){let n=r(e.data);if(typeof n==`string`)return n;let a=e=>n.columns.indexOf(e);if(a(e.x)<0||e.series.some(e=>a(e.field)<0))return Ur;let o=n.rows.slice(0,e.limit??31);return{id:t,kind:`chart`,...e.title?{title:e.title}:{},chartType:e.chartType,labels:o.map(t=>Er(e.xFormat?t[a(e.x)]:zr(e.x,t[a(e.x)]),e.xFormat)),series:e.series.map(e=>({name:e.name??e.field,values:o.map(t=>Ir(t[a(e.field)]))})),...e.unit?{unit:e.unit}:{},...e.finding?{finding:i(e.finding)}:{}}}if(e.type===`table`&&e.data){let n=r(e.data);if(typeof n==`string`)return n;let i=e.columns??n.columns.slice(0,6).map(e=>({field:e}));if(i.some(e=>!n.columns.includes(e.field)))return Ur;let a=i.map(Hr),o=n.rows.slice(0,e.limit??50).map(e=>Object.fromEntries(i.map((t,r)=>[a[r],Vr(e[n.columns.indexOf(t.field)],t.format,t.field)])));return{id:t,kind:`table`,...e.title?{title:e.title}:{},columns:a,rows:o,...n.rows.length>o.length?{more:n.rows.length-o.length}:{}}}return`This part has nothing to draw.`}function Gr({label:e=`Loading part of the view`}){return(0,V.jsxs)(`div`,{className:`cview__ph`,role:`status`,"aria-label":e,"data-placeholder":``,children:[(0,V.jsx)(`span`,{className:`skeleton`,style:{width:`38%`,height:12}}),(0,V.jsx)(`span`,{className:`skeleton`,style:{width:`100%`,height:64}})]})}function Z({children:e}){return(0,V.jsx)(`p`,{className:`cblock__hint cview__note`,role:`note`,children:e})}var Kr=class extends B.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?(0,V.jsx)(Z,{children:`This part of the view could not be shown.`}):this.props.children}};function qr({node:e,path:t,ctx:n}){let[r,i]=(0,B.useState)(0),a=(0,B.useId)(),o=e.tabs.length,s=Math.min(r,o-1),c=(e,t)=>{e.preventDefault();let n=(t+o)%o;i(n),document.getElementById(`${a}-tab-${n}`)?.focus()},l=(e,t)=>{e.key===`ArrowRight`?c(e,t+1):e.key===`ArrowLeft`?c(e,t-1):e.key===`Home`?c(e,0):e.key===`End`&&c(e,o-1)};return(0,V.jsxs)(`div`,{className:`cview__tabs`,"data-view-node":`tabs`,children:[(0,V.jsx)(`div`,{className:`cview__tablist`,role:`tablist`,"aria-label":`Parts of the view`,children:e.tabs.map((e,t)=>(0,V.jsx)(`button`,{id:`${a}-tab-${t}`,type:`button`,role:`tab`,className:`cview__tab`,"aria-selected":t===s,"aria-controls":`${a}-panel`,tabIndex:t===s?0:-1,onClick:()=>i(t),onKeyDown:e=>l(e,t),children:e.label},t))}),(0,V.jsx)(`div`,{id:`${a}-panel`,role:`tabpanel`,"aria-labelledby":`${a}-tab-${s}`,className:`cview__panel`,children:e.tabs[s].children.map((e,r)=>(0,V.jsx)(Xr,{node:e,path:`${t}.${s}.${r}`,ctx:n},`${s}-${r}`))})]})}function Jr({node:e,path:t,ctx:n}){let r=n.compute?.status===`ready`?n.compute.out:null,i=(0,B.useMemo)(()=>r?Wr(e,`${n.viewId}-${t}`,r):null,[e,t,r,n.viewId]),a=(0,B.useMemo)(()=>{if(typeof i==`string`||i===null)return i;let e=tt(i);return e.ok?e.block:`This part has no data to show.`},[i]);return n.compute===null?(0,V.jsx)(Gr,{}):n.compute.status===`failed`?(0,V.jsx)(Z,{children:n.compute.error}):a===null?(0,V.jsx)(Gr,{}):typeof a==`string`?(0,V.jsx)(Z,{children:a}):(0,V.jsx)(V.Fragment,{children:n.renderBlock(a)})}function Yr({node:e,ctx:t}){let n=X(e.text);if(n&&t.compute===null)return(0,V.jsx)(Gr,{});let r=n?Br(Dr(e.text,t.compute?.status===`ready`?t.compute.out.vars:void 0)):e.text;return(0,V.jsx)(`p`,{className:`cview__text${e.tone===`muted`?` cview__text--muted`:``}`,"data-view-node":`text`,children:e.href?(0,V.jsx)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,children:r}):r})}function Xr({node:e,path:t,ctx:n}){return(0,V.jsx)(Kr,{children:(0,V.jsx)(Zr,{node:e,path:t,ctx:n})})}function Zr({node:e,path:t,ctx:n}){let r=e=>e.map((e,r)=>(0,V.jsx)(Xr,{node:e,path:`${t}.${r}`,ctx:n},r));switch(e.type){case`column`:return(0,V.jsx)(`div`,{className:`cview__column`,"data-view-node":`column`,children:r(e.children)});case`row`:return(0,V.jsx)(`div`,{className:`cview__row`,"data-view-node":`row`,children:r(e.children)});case`section`:return(0,V.jsxs)(`section`,{className:`cview__section`,"data-view-node":`section`,"aria-label":e.title,children:[(0,V.jsx)(`h4`,{className:`cview__heading`,children:e.title}),r(e.children)]});case`tabs`:return(0,V.jsx)(qr,{node:e,path:t,ctx:n});case`text`:return(0,V.jsx)(Yr,{node:e,ctx:n});default:return`block`in e&&e.block?(0,V.jsx)(V.Fragment,{children:n.renderBlock(e.block)}):Fr(e)?(0,V.jsx)(Jr,{node:e,path:t,ctx:n}):(0,V.jsx)(Z,{children:`This part has nothing to show.`})}}function Qr(e){if(!e)return`UTC`;let t=-e,n=Math.abs(t),r=n%60;return`UTC${t>0?`+`:`-`}${Math.floor(n/60)}${r?`:${String(r).padStart(2,`0`)}`:``}`}function $r(e){return Object.values(e.datasets??{}).some(e=>e.steps?.some(e=>e.op===`derive`&&e.expr.fn===`bucket`))}function ei(e){let t=[],n=Object.values(e.sources??{}).filter(e=>(e.more??0)>0);if(n.length){let e=n.reduce((e,t)=>e+t.rows.length,0),r=e+n.reduce((e,t)=>e+(t.more??0),0);t.push(`Computed from ${J(e)} of ${J(r)} rows, so counts and rates cover only part of the data. Ask again with a shorter window or one branch to count all of it.`)}return $r(e)&&t.push(`Hours and days are in ${Qr(e.tzOffsetMin??0)}, the clock of the server that runs the dot.`),t}var ti=3;function ni({block:e,renderBlock:t}){let n=e.view,r=Pr(n),i=(0,B.useId)(),a=e.state===`loading`,o=n.root.children.length,s=a?Math.min(ti,Math.max(1,(n.total??o+1)-o)):0,c={viewId:e.id,compute:r,renderBlock:t},l=e.title??n.title,u=a?[]:ei(n);return(0,V.jsxs)(`section`,{className:`cview`,"data-block":`view`,"aria-labelledby":l?i:void 0,"aria-label":l?void 0:`Composed view`,"aria-busy":a||void 0,children:[l&&(0,V.jsx)(`h3`,{id:i,className:`cview__title`,children:l}),(0,V.jsxs)(`div`,{className:`cview__column`,children:[n.root.children.map((e,t)=>(0,V.jsx)(Xr,{node:e,path:`${t}`,ctx:c},t)),Array.from({length:s},(e,t)=>(0,V.jsx)(Gr,{label:`Loading the next part of the view`},`ph-${t}`)),u.map(e=>(0,V.jsx)(Z,{children:e},e))]})]})}var ri={runs:Nn,pulls:Ln,approvals:Gn,defects:Bn,probes:Hn,memory:qn,ticket_review:Xn,test_cases:$n,triage:_r,cards:en,table:ir,stats:mn,chart:On,release_call:ar,view:({block:e})=>(0,V.jsx)(ni,{block:e,renderBlock:e=>(0,V.jsx)(oi,{block:e})})};function ii(e){switch(e.kind){case`runs`:return e.runs;case`pulls`:return e.pulls;case`approvals`:return e.approvals.map(e=>({action:e.action.kind,target:e.action.target,title:e.action.title,status:e.status}));case`defects`:return e.defects;case`probes`:return e.probes;case`memory`:return e.items.map(e=>({kind:e.kind,text:e.text}));case`ticket_review`:return e.review;case`test_cases`:return e.cases;case`triage`:return e.rows.map(e=>({test:e.test,cause:e.cause,last:e.last,failed:e.failedRuns,runs:e.ofRuns,file:e.file}));case`cards`:return e.cards.map(e=>({kind:e.kind,ref:e.ref,title:e.title,status:e.kind===`github_pr`?e.state:String(e.status?.name??``)}));case`table`:return e.rows;case`stats`:return e.tiles;case`chart`:return e.labels.map((t,n)=>({Label:t,...Object.fromEntries(e.series.map(e=>[e.name,e.values[n]??null]))}));case`release_call`:return e.call.reasons.map(e=>({level:e.level,reason:e.text}));case`view`:return ut(e.view.root).flatMap(e=>`block`in e&&e.block?[{part:e.type,title:e.block.title??``}]:[])}}var ai=class extends B.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}componentDidUpdate(e){e.block!==this.props.block&&this.state.failed&&this.setState({failed:!1})}render(){if(!this.state.failed)return this.props.children;let{block:e}=this.props,t=e.kind===`table`?null:at(ii(e),{id:e.id,title:e.title});return t?(0,V.jsx)(ir,{block:t,fallback:!0}):(0,V.jsx)(`p`,{className:`cblock__hint`,role:`note`,children:`This part of the answer could not be shown.`})}};function oi({block:e,fallback:t}){let n=ri[e.kind];return(0,V.jsx)(ai,{block:e,children:(0,V.jsx)(n,{block:e,fallback:t})})}var si={running:`running`,done:`passed`,failed:`failed`,stopped:`cancelled`},ci={running:`Working`,done:`Done`,failed:`Failed`,stopped:`Stopped`};function li(e){if(e===void 0)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function ui({line:e}){let[t,n]=(0,B.useState)(!1),[r,i]=(0,B.useState)(!1),a=(0,B.useId)(),o=(0,B.useId)(),{state:s,text:c,calls:l}=e;return(0,V.jsxs)(`div`,{className:`tool-line tool-line--${s}`,"data-tool":l.map(e=>e.part.name).join(` `),children:[(0,V.jsxs)(`button`,{type:`button`,className:`tool-line__head`,"aria-expanded":t,"aria-controls":a,onClick:()=>n(e=>!e),children:[(0,V.jsx)(`span`,{className:`tool-line__icon`,children:(0,V.jsx)(E,{kind:si[s],label:ci[s],size:14,decorative:!0})}),(0,V.jsx)(`span`,{className:`tool-line__text`,title:c,children:c}),(0,V.jsx)(`span`,{className:`tool-line__state narrow-hide`,children:ci[s]}),(0,V.jsx)(`span`,{className:`tool-line__chev`,"aria-hidden":`true`,children:t?(0,V.jsx)(k,{size:14}):(0,V.jsx)(T,{size:14})})]}),t&&(0,V.jsxs)(`div`,{id:a,className:`tool-line__body`,children:[(0,V.jsx)(`ul`,{className:`tool-line__calls`,children:l.map(e=>(0,V.jsxs)(`li`,{className:`tool-line__call`,"data-state":e.state,children:[(0,V.jsx)(`span`,{className:`tool-line__icon`,children:(0,V.jsx)(E,{kind:si[e.state],label:ci[e.state],size:14,decorative:!0})}),(0,V.jsx)(`span`,{className:`tool-line__sentence`,children:e.sentence})]},e.part.id))}),(0,V.jsx)(`button`,{type:`button`,className:`tool-line__toggle`,"aria-expanded":r,"aria-controls":o,onClick:()=>i(e=>!e),children:r?`Hide details`:`Show details`}),r&&(0,V.jsx)(`div`,{id:o,className:`tool-line__raw`,children:l.map(e=>{let t=li(e.part.input);return(0,V.jsxs)(`div`,{className:`tool-line__raw-call`,"data-tool":e.part.name,children:[(0,V.jsx)(`p`,{className:`tool-line__name`,children:e.part.name}),t&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`p`,{className:`tool-line__label`,children:`Input`}),(0,V.jsx)(`pre`,{className:`tool-line__pre`,tabIndex:0,children:t})]}),e.part.result&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`p`,{className:`tool-line__label`,children:`Result`}),(0,V.jsx)(`pre`,{className:`tool-line__pre`,tabIndex:0,children:e.part.result})]})]},e.part.id)})})]})]})}function di(e){let t=e.content.split(`
|
|
2
|
+
`).filter(Boolean),n=[];for(let r of t.slice(1)){let t=/^(You|Dot): (.*)$/.exec(r);t&&n.push({role:t[1]===`You`?`user`:`assistant`,text:t[2],at:e.createdAt})}return{dotId:e.watchId,startedAt:e.createdAt,endedAt:e.createdAt,transcript:n}}function fi(e,t){let n=[];return(e??[]).forEach((e,r)=>{let i=tt(e,`${t}-b${r}`);i.ok&&n.push({kind:`block`,block:{...i.block,state:`ready`},...i.fallback?{fallback:!0}:{}})}),n}function pi(e){let t=e.update;return{type:`message`,id:e.id,role:`assistant`,parts:[...e.content?[{kind:`text`,text:e.content}]:[],...t?.approval?[{kind:`approval`,approval:t.approval}]:[]],createdAt:e.createdAt,status:`done`,...t?{update:{kind:t.kind,level:t.level,severity:t.severity,...t.details?{details:t.details}:{}}}:{}}}function mi(e){return e.map(e=>e.kind===`update`?pi(e):e.kind===`call_receipt`?{type:`receipt`,id:e.id,receipt:e.receipt??di(e),createdAt:e.createdAt}:hi(e))}function hi(e){let t=e.role===`assistant`?a(e.work):void 0,n=(t?.tools??[]).map((t,n)=>({kind:`tool`,id:`${e.id}-t${n}`,name:t.name,...t.summary?{result:t.summary}:{},done:!0,...t.error?{failed:!0}:{}}));return{type:`message`,id:e.id,role:e.role,parts:[...n,...e.content?[{kind:`text`,text:e.content}]:[],...e.role===`assistant`?fi(e.blocks,e.id):[]],createdAt:e.createdAt,status:`done`,...t?{work:t}:{}}}var gi=0,Q=e=>`${e}-${Date.now().toString(36)}-${(gi++).toString(36)}`;function _i(e,t){let n=e.parts.slice(),r=n[n.length-1];switch(t.type){case`delta`:return t.text?(r?.kind===`text`?n[n.length-1]={kind:`text`,text:r.text+t.text}:n.push({kind:`text`,text:t.text}),{...e,parts:n}):e;case`tool`:return n.push({kind:`tool`,id:Q(`tool`),name:t.name||`tool`,input:t.input,done:!1}),{...e,parts:n};case`tool_result`:for(let r=n.length-1;r>=0;r--){let i=n[r];if(i.kind===`tool`&&!i.done&&(!t.name||i.name===t.name))return n[r]={...i,result:t.summary,done:!0,...t.error?{failed:!0}:{}},{...e,parts:n}}return n.push({kind:`tool`,id:Q(`tool`),name:t.name||`tool`,result:t.summary,done:!0,...t.error?{failed:!0}:{}}),{...e,parts:n};case`approval`:{let r=n.findIndex(e=>e.kind===`approval`&&e.approval.id===t.approval.id);return r>=0?n[r]={kind:`approval`,approval:t.approval}:n.push({kind:`approval`,approval:t.approval}),{...e,parts:n}}case`run`:return n.some(e=>e.kind===`run`&&e.runId===t.runId)?e:(n.push({kind:`run`,runId:t.runId}),{...e,parts:n});case`block`:{let r=tt(t.block,`${e.id}-b${n.filter(e=>e.kind===`block`).length}`);if(!r.ok||r.block.kind!==`view`&&vi(n).has(r.block.id))return e;let i={kind:`block`,block:r.block,...r.fallback?{fallback:!0}:{}},a=n.findIndex(e=>e.kind===`block`&&e.block.id===r.block.id);return a>=0?n[a]=i:n.push(i),{...e,parts:r.block.kind===`view`?yi(n,i):n}}case`view_node`:{let r=n.findIndex(e=>e.kind===`block`&&e.block.kind===`view`&&e.block.id===t.id),i=n[r];if(!i||i.kind!==`block`||i.block.kind!==`view`||i.block.state!==`loading`)return e;let{view:a}=i.block,o=rt(t.node,a,{bound:!0,parseBlock:ct});if(!o||t.at>a.root.children.length)return e;let s=a.root.children.slice();s[t.at]=o;let c={...i,block:{...i.block,view:{...a,root:{...a.root,children:s}}}};return n[r]=c,{...e,parts:yi(n,c)}}case`view_drop`:{let r=n.findIndex(e=>e.kind===`block`&&e.block.kind===`view`&&e.block.id===t.id&&e.block.state===`loading`);return r<0?e:(n.splice(r,1),{...e,parts:n})}case`reasoning`:return{...e,reasoning:[...e.reasoning??[],t.text]};case`work`:return{...e,work:t.work};case`done`:{let r=n.filter(e=>e.kind===`text`).map(e=>e.text).join(``);if(t.text&&(t.replace||t.text.length>r.length)){let r=bi(n.filter(e=>e.kind!==`text`));return{...e,parts:[...r,{kind:`text`,text:t.text}],status:`done`}}return{...e,parts:bi(n),status:`done`}}case`error`:return{...e,parts:bi(n),status:`error`,error:t.error}}}function vi(e){let t=new Set;for(let n of e)if(n.kind===`block`&&n.block.kind===`view`)for(let e of Qe(n.block.view))t.add(e.id);return t}function yi(e,t){if(t.kind!==`block`||t.block.kind!==`view`)return e;let n=new Set(Qe(t.block.view).map(e=>e.id));return n.size?e.filter(e=>e===t||!(e.kind===`block`&&e.block.kind!==`view`&&n.has(e.block.id))):e}function bi(e){return e.map(e=>e.kind===`tool`&&!e.done?{...e,done:!0}:e.kind===`block`&&e.block.state===`loading`?{...e,block:{...e.block,state:`ready`}}:e)}function xi(e){return e.parts.filter(e=>e.kind===`text`).map(e=>e.text).join(``)}function Si(e){let t=e=>{let t=e.replace(/_/g,` `).trim();return t.charAt(0).toUpperCase()+t.slice(1)},n=/^mcp__(.+?)__(.+)$/.exec(e);return n?{title:t(n[2]),source:n[1]}:e===`review_pr`?{title:`Review a PR`}:e===`review_ticket`?{title:`Review a ticket`}:e===`get_ticket`?{title:`Read the ticket`}:e===`list_approvals`||e===`pending_approvals`?{title:`To review`}:e===`open_prs`?{title:`Open pull requests`}:e===`runs_in_progress`?{title:`Checks in progress`}:e===`recent_defects`?{title:`Recent defects`}:{title:t(e)}}var Ci={list_runs:`check runs`,get_run:`read the run`,runs_in_progress:`check running jobs`,open_prs:`check open PRs`,get_ticket:`read the ticket`,list_tickets_reviewed:`look up reviewed tickets`,pending_approvals:`check approvals`,list_approvals:`check approvals`,recent_defects:`check recent defects`,list_cases:`check cases`,pass_rate:`check the pass rate`,flaky_by_spec:`check flaky specs`,test_results:`check test results`,compose_view:`build the view`,probe_status:`check probes`,get_memory:`read memory`,rerun_tests:`queue a run`,review_pr:`start the review`,review_ticket:`review the ticket`,add_memory:`save to memory`,propose_report_edit:`propose the edit`},wi={rerun_tests:`Queued a run`,review_pr:`Queued a review`,review_ticket:`Reviewed the ticket`,add_memory:`Saved to memory`,propose_report_edit:`Proposed an edit`},Ti={check:`Checking`,read:`Reading`,"look up":`Looking up`,queue:`Queuing`,start:`Starting`,review:`Reviewing`,save:`Saving`,propose:`Proposing`,run:`Running`},Ei=e=>e.charAt(0).toUpperCase()+e.slice(1),Di=e=>e.charAt(0).toLowerCase()+e.slice(1),$=(e,t,n=`${t}s`)=>`${e} ${e===1?t:n}`;function Oi(e){let t=/^\s*(\d+)/.exec(e);return t?Number(t[1]):void 0}function ki(e){let t=Ci[e];if(t)return t;let{title:n,source:r}=Si(e);return`run ${Di(n)}${r?` via ${r}`:``}`}function Ai(e){for(let[t,n]of Object.entries(Ti))if(e===t||e.startsWith(`${t} `))return`${n}${e.slice(t.length)}`;return Ei(e)}var ji={list_runs:`runs`,get_run:`runs`,runs_in_progress:`runs`,open_prs:`prs`,get_ticket:`tickets`,list_tickets_reviewed:`tickets`,pending_approvals:`approvals`,list_approvals:`approvals`,recent_defects:`defects`,list_cases:`cases`,pass_rate:`tests`,flaky_by_spec:`tests`,test_results:`tests`,probe_status:`probes`,get_memory:`memory`};function Mi(e,t){let n=ji[e];if(!n)return null;let r=Oi(t),i=e=>({family:n,sentence:e,...r===void 0?{}:{count:r}});switch(e){case`list_runs`:return i(r===void 0?`Checked runs`:`Checked ${$(r,`run`)}`);case`get_run`:return{family:n,count:1,sentence:t?`Read run: ${t}`:`Read a run`};case`runs_in_progress`:return{family:n,sentence:t?`Checked runs in progress: ${t}`:`Checked runs in progress`};case`open_prs`:return i(r===void 0?`Checked open PRs`:`Checked ${$(r,`open PR`)}`);case`get_ticket`:return{family:n,count:1,sentence:t?`Read ${t.replace(/^([^:\s]+):\s*/,`$1 `)}`:`Read the ticket`};case`list_tickets_reviewed`:return i(r===void 0?`Looked up reviewed tickets`:`Looked up ${$(r,`reviewed ticket`)}`);case`pending_approvals`:case`list_approvals`:return i(r===0?`Checked approvals, none waiting`:r===void 0?`Checked approvals`:`Checked ${$(r,`approval`)} waiting`);case`recent_defects`:return i(r===void 0?`Checked recent defects`:`Checked recent defects, ${r} found`);case`list_cases`:return i(r===void 0?`Checked cases`:`Checked ${$(r,`case`)}`);case`pass_rate`:return{family:n,sentence:t?`Checked the pass rate: ${t}`:`Checked the pass rate`};case`flaky_by_spec`:return{family:n,sentence:t?`Checked flaky specs: ${t}`:`Checked flaky specs`};case`test_results`:return i(r===void 0?`Checked test results`:`Checked ${$(r,`test result`)}`);case`probe_status`:return/^\d+ probes?$/.test(t)&&r!==void 0?{family:n,count:r,sentence:`Checked ${$(r,`probe`)}`}:{family:n,sentence:t?`Checked probes: ${t}`:`Checked probes`};default:return{family:n,sentence:`Read memory`}}}function Ni(e,t=!1){let n=(e.result??``).trim(),r=ki(e.name),i=Ai(r),a=e.failed?`failed`:e.done?`done`:t?`stopped`:`running`;if(a===`failed`)return{part:e,state:a,running:i,sentence:n?`Couldn't ${r}: ${n}`:`Couldn't ${r}`};if(a===`stopped`)return{part:e,state:a,running:i,sentence:`Stopped ${Di(i)}`};if(a===`running`)return{part:e,state:a,running:i,sentence:i};let o=Mi(e.name,n);if(o)return{part:e,state:a,running:i,sentence:o.sentence,family:o.family,...o.count===void 0?{}:{count:o.count}};let s=wi[e.name];if(s)return{part:e,state:a,running:i,sentence:n||s};let{title:c,source:l}=Si(e.name),u=`Ran ${Di(c)}${l?` via ${l}`:``}`;return{part:e,state:a,running:i,sentence:n?`${u}: ${n}`:u}}function Pi(e){let t=Math.max(0,Math.round(e/1e3));return t===0?`under 1 s`:t<60?`${t} s`:`${Math.floor(t/60)} min${t%60?` ${t%60} s`:``}`}function Fi(e){let t=Math.max(0,Math.floor(e/1e3));return`${Math.floor(t/60)}:${String(t%60).padStart(2,`0`)}`}var Ii=e=>`${e} ${e===1?`thing`:`things`}`;function Li(e,t){return`Working, ${e} ${e===1?`step`:`steps`} so far · ${Fi(t)}`}function Ri(e){let t=e.elapsedMs===void 0?void 0:Pi(e.elapsedMs);return e.steps?`Checked ${Ii(e.steps)}${t?` in ${t}`:``}`:t?`Answered in ${t}`:`Answered`}function zi(e,t){let n=Date.parse(e),[r,i]=(0,B.useState)(()=>Date.now());return(0,B.useEffect)(()=>{if(!t)return;let e=setInterval(()=>i(Date.now()),1e3);return()=>clearInterval(e)},[t]),Number.isNaN(n)?0:Math.max(0,r-n)}function Bi({turn:e,tools:t}){let n=e.status===`streaming`,r=e.reasoning?.length?e.reasoning:e.work?.summary??[],i=t.map(e=>Ni(e,!n)),a=r.length||i.length,o=zi(e.createdAt,n),s=n?o:e.work?.elapsedMs??(e.status===`done`?void 0:o),[c,l]=(0,B.useState)(null),u=c&&c.working===n?c.open:n,d=(0,B.useId)(),f=(0,B.useRef)(null),p=(0,B.useRef)(null),m=(0,B.useRef)(!1);if((0,B.useLayoutEffect)(()=>{let e=m.current;m.current=p.current?.contains(document.activeElement)??!1,e&&!p.current&&f.current?.focus()}),!n&&a===0)return null;let h=i.some(e=>e.state===`running`),g=i.map(e=>({key:e.part.id,state:e.state,text:e.state===`running`?e.running:e.sentence,calls:[e]})),_=r.length?r[r.length-1]:i.length?g[g.length-1].text:``,v=n?Li(a,o):Ri({steps:a,elapsedMs:s}),y=e.work?.tokens;return(0,V.jsxs)(`section`,{className:`reasoning${u?` is-open`:``}${n?` is-working`:``}`,"aria-label":`Steps`,children:[(0,V.jsxs)(`button`,{ref:f,type:`button`,className:`reasoning__head`,"aria-expanded":u,"aria-controls":d,onClick:()=>l({open:!u,working:n}),children:[(0,V.jsx)(`span`,{className:`reasoning__icon`,children:(0,V.jsx)(E,{kind:n?`running`:`passed`,label:n?`Working`:`Done`,size:14,decorative:!0})}),(0,V.jsx)(`span`,{className:`reasoning__title`,title:v,children:v}),(0,V.jsx)(`span`,{className:`reasoning__chev`,"aria-hidden":`true`,children:u?(0,V.jsx)(k,{size:14}):(0,V.jsx)(T,{size:14})})]}),u&&(0,V.jsxs)(`div`,{ref:p,id:d,className:`reasoning__body`,onFocus:()=>m.current=!0,children:[r.length>0&&(0,V.jsx)(`ol`,{className:`reasoning__steps`,children:r.map((e,t)=>{let i=n&&!h&&t===r.length-1;return(0,V.jsxs)(`li`,{className:`reasoning__step`,"data-state":i?`running`:`done`,children:[(0,V.jsx)(`span`,{className:`reasoning__icon`,children:(0,V.jsx)(E,{kind:i?`running`:`passed`,label:i?`Working`:`Done`,size:14,decorative:!0})}),(0,V.jsx)(`span`,{className:`reasoning__text`,children:e})]},t)})}),g.length>0&&(0,V.jsx)(`div`,{className:`reasoning__tools`,children:g.map(e=>(0,V.jsx)(ui,{line:e},e.key))}),n&&a===0&&(0,V.jsx)(`p`,{className:`reasoning__empty`,children:`Working on it`}),y!==void 0&&(0,V.jsxs)(`section`,{className:`reasoning__details`,"aria-label":`Details`,children:[(0,V.jsx)(`h4`,{className:`reasoning__details-title`,children:`Details`}),(0,V.jsxs)(`dl`,{className:`reasoning__facts`,children:[(0,V.jsx)(`dt`,{children:`Tokens`}),(0,V.jsx)(`dd`,{children:y.toLocaleString(`en-US`)})]})]})]}),(0,V.jsx)(`p`,{className:`sr-only`,"aria-live":`polite`,"aria-atomic":`true`,children:n?_?`Step ${a}: ${_}`:``:v})]})}function Vi(e){let t=Math.max(0,Math.round((Date.parse(e.endedAt)-Date.parse(e.startedAt))/1e3));return Number.isFinite(t)?t<60?`${t}\u00a0s`:`${Math.floor(t/60)}\u00a0min ${t%60}\u00a0s`:``}function Hi({receipt:e,dotName:t}){let[n,r]=(0,B.useState)(!1),i=(0,B.useId)(),a=e.transcript.length,o=Vi(e);return(0,V.jsxs)(`div`,{className:`receipt`,children:[(0,V.jsxs)(`button`,{type:`button`,className:`receipt__head`,"aria-expanded":a?n:void 0,"aria-controls":a?i:void 0,onClick:()=>a&&r(e=>!e),children:[(0,V.jsx)(`span`,{className:`receipt__icon`,"aria-hidden":`true`,children:(0,V.jsx)(f,{size:16})}),(0,V.jsxs)(`span`,{className:`receipt__text`,children:[(0,V.jsxs)(`span`,{className:`receipt__title`,children:[`Call`,t?` with ${t}`:``]}),(0,V.jsxs)(`span`,{className:`receipt__meta`,children:[(0,V.jsx)(`time`,{dateTime:e.startedAt,children:ke(e.startedAt)}),o&&(0,V.jsx)(`span`,{children:o}),(0,V.jsx)(`span`,{children:a===1?`1 turn`:`${a} turns`})]})]}),a>0&&(0,V.jsxs)(`span`,{className:`receipt__toggle`,children:[n?`Hide transcript`:`Show transcript`,n?(0,V.jsx)(k,{size:16}):(0,V.jsx)(T,{size:16})]})]}),n&&a>0&&(0,V.jsx)(`ol`,{id:i,className:`receipt__lines`,children:e.transcript.map((e,n)=>(0,V.jsxs)(`li`,{className:`receipt__line receipt__line--${e.role}`,children:[(0,V.jsx)(`span`,{className:`receipt__who`,children:e.role===`user`?`You`:t||`Dot`}),(0,V.jsx)(`span`,{className:`receipt__said`,children:e.text}),e.role===`assistant`&&e.work&&(0,V.jsx)(`span`,{className:`receipt__work`,children:Ri(e.work)})]},n))})]})}function Ui({text:e,className:t}){let n=(0,B.useMemo)(()=>Ye(e),[e]),{ref:r,chips:i}=Xe(n);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`div`,{ref:r,className:[`md`,t??``].filter(Boolean).join(` `),dangerouslySetInnerHTML:{__html:n}}),i]})}var Wi={running:`Running`,done:`Finished`,failed:`Failed`,interrupted:`Interrupted`,cancelled:`Cancelled`},Gi=e=>`chat-run:${e}`,Ki=new Set([`pr_check`,`post_merge`,`rerun`,`nightly_run`]);function qi(e){if(e.status===`running`)return`running`;if(e.status===`cancelled`||e.status===`interrupted`)return`paused`;if(e.status===`failed`)return`outage`;let t=e.report;return t&&t.failed>0?`outage`:t&&t.flaky>0?`attention`:`ok`}var Ji=(e,t,n=`${t}s`)=>`${e} ${e===1?t:n}`;function Yi({runId:e}){let t=Gi(e),n=ve(t,t=>_.getRun(e,t));_e(n=>{n.type===`run`&&n.run.id===e?be(t,e=>({...e??{approvals:[],outbox:[]},...n.run})):n.type===`run_step`&&n.runId===e&&be(t,e=>e&&{...e,steps:[...e.steps,n.step]})},[`run`,`run_step`]);let r=`#/runs/${encodeURIComponent(e)}`;if(!n.data)return(0,V.jsx)(`div`,{className:`run-card`,"aria-busy":n.loading||void 0,children:n.error?(0,V.jsxs)(`div`,{className:`run-card__row`,children:[(0,V.jsx)(`p`,{className:`run-card__error`,role:`alert`,children:`Could not load this test run.`}),(0,V.jsx)(`button`,{type:`button`,className:`run-card__retry`,onClick:()=>void n.reload(),children:`Try again`}),(0,V.jsx)(`a`,{className:`run-card__link`,href:r,children:`Open run`})]}):(0,V.jsxs)(`div`,{className:`run-card__loading`,role:`status`,"aria-label":`Loading test run`,children:[(0,V.jsx)(l,{width:`45%`,height:12}),(0,V.jsx)(l,{width:`80%`,height:10}),(0,V.jsx)(l,{width:`100%`,height:6})]})});let i=n.data,a=qi(i),o=i.report,s=o?o.passed+o.failed+o.flaky+o.skipped:0,c=i.steps[i.steps.length-1],u=i.verdict?.headline??c?.label??(i.status===`running`?`Starting`:`No steps recorded`),d=Ee[i.kind]??i.kind.replace(/_/g,` `);return(0,V.jsxs)(`div`,{className:`run-card run-card--link run-card--${a}`,children:[(0,V.jsxs)(`span`,{className:`run-card__row`,children:[(0,V.jsxs)(`span`,{className:`run-card__who`,children:[(0,V.jsx)(Je,{run:i,state:Se(i).status,className:`run-card__stage`}),(0,V.jsx)(`span`,{className:`run-card__title`,children:Ki.has(i.kind)?`Test run: ${d}`:d})]}),(0,V.jsxs)(`span`,{className:`run-card__status tone--${a}`,children:[(0,V.jsx)(`span`,{className:`run-card__dot`,"aria-hidden":`true`}),Wi[i.status]]})]}),(0,V.jsx)(`span`,{className:`run-card__headline`,children:u}),(0,V.jsx)(`span`,{className:`run-card__bar${i.status===`running`&&!s?` is-indeterminate`:``}`,role:`progressbar`,"aria-label":Ki.has(i.kind)?`Test progress`:`Progress`,"aria-valuemin":0,"aria-valuemax":s||void 0,"aria-valuenow":s?o.passed+o.failed+o.flaky:void 0,"aria-valuetext":s?`${o.passed} passed, ${o.failed} failed of ${s}`:Wi[i.status],children:s>0&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`run-card__seg run-card__seg--ok`,style:{flexGrow:o.passed}}),(0,V.jsx)(`span`,{className:`run-card__seg run-card__seg--attention`,style:{flexGrow:o.flaky}}),(0,V.jsx)(`span`,{className:`run-card__seg run-card__seg--outage`,style:{flexGrow:o.failed}}),(0,V.jsx)(`span`,{className:`run-card__seg run-card__seg--rest`,style:{flexGrow:o.skipped}})]})}),(0,V.jsxs)(`span`,{className:`run-card__row run-card__meta`,children:[(0,V.jsxs)(`span`,{className:`num`,children:[Ji(i.steps.length,`step`),o&&`, ${o.passed} passed, ${o.failed} failed${o.flaky?`, ${o.flaky} flaky`:``}`]}),(0,V.jsxs)(`a`,{className:`run-card__open`,href:r,children:[`Open run `,(0,V.jsx)(T,{size:14})]})]})]})}var Xi=new Set([`review_pr`,`review_ticket`,`design_tests`,`rerun_tests`,`add_memory`]),Zi={ask:()=>!1};function Qi(e){return e?e.kind===`block`&&e.block.kind===`view`?e.block.view.root.children.length*1e3+ +(e.block.state===`loading`):JSON.stringify(e).length:0}var $i=120;function ea(e){let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleTimeString(void 0,{hour:`numeric`,minute:`2-digit`})}function ta({turns:e,dotName:t,avatar:n,onRetry:r,header:i,empty:a,busy:o,actions:s,focusId:c}){let l=(0,B.useRef)(null),u=(0,B.useRef)(null),d=(0,B.useRef)(!0),f=(0,B.useRef)(null),[p,m]=(0,B.useState)(!1),h=e[e.length-1],g=h?`${h.id}:${h.type===`message`?h.parts.length+`:`+Qi(h.parts[h.parts.length-1])+h.status:``}`:``,_=e=>{e.scrollTop=e.scrollHeight,f.current=e.scrollTop};(0,B.useLayoutEffect)(()=>{let e=l.current;e&&d.current&&_(e)},[g,e.length]);let v=(0,B.useRef)(null),y=(0,B.useRef)(void 0),b=[...e].reverse().find(e=>e.type===`message`&&e.role===`user`)?.id;(0,B.useEffect)(()=>{let e=l.current;e&&b&&(v.current===null||b!==y.current)&&(d.current=!0,m(!1),_(e))},[b]);let x=e.length>0;(0,B.useEffect)(()=>{let e=u.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(()=>{let e=l.current;e&&d.current&&_(e)});return t.observe(e),()=>t.disconnect()},[x]);let S=c?e.some(e=>e.id===c):!1;(0,B.useLayoutEffect)(()=>{if(!c||!S||v.current===c)return;let e=Array.from(u.current?.querySelectorAll(`[data-turn-id]`)??[]).find(e=>e.dataset.turnId===c);e&&(v.current=c,y.current=b,d.current=!1,e.scrollIntoView?.({block:`start`}),m(!0))},[c,S,b]);function C(){let e=l.current;if(!e)return;if(f.current!==null&&Math.abs(e.scrollTop-f.current)<=1){f.current=null;return}let t=e.scrollHeight-e.scrollTop-e.clientHeight<$i;d.current=t,m(!t)}return(0,V.jsx)(et,{host:s??Zi,children:(0,V.jsxs)(`div`,{className:`transcript`,children:[(0,V.jsxs)(`div`,{ref:l,className:`transcript__scroll`,onScroll:C,children:[i,e.length===0?a:(0,V.jsx)(`ol`,{ref:u,className:`transcript__list`,role:`log`,"aria-label":`Conversation with ${t}`,"aria-busy":o||void 0,children:e.map(e=>(0,V.jsx)(`li`,{"data-turn-id":e.id,className:`turn turn--${e.type===`receipt`?`receipt`:e.role}${e.id===c?` turn--focus`:``}`,"aria-current":e.id===c?`true`:void 0,children:e.type===`receipt`?(0,V.jsx)(Hi,{receipt:e.receipt,dotName:t}):e.role===`user`?(0,V.jsx)(ia,{turn:e}):(0,V.jsx)(oa,{turn:e,dotName:t,avatar:n,onRetry:r})},e.id))})]}),p&&(0,V.jsxs)(`button`,{type:`button`,className:`transcript__jump`,onClick:()=>{let e=l.current;e&&(d.current=!0,m(!1),e.scrollTo({top:e.scrollHeight,behavior:window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`}))},children:[(0,V.jsx)(k,{size:16}),`Latest`]})]})})}function na(e){return e.kind===`decision`?`Needs you`:e.kind===`morning`?`Morning note`:e.kind===`digest`?`Digest`:e.kind===`prod_down`?`Prod down`:e.kind===`prod_up`?`Prod back up`:e.kind===`blocked`?`Blocked`:e.level===`thread`?`Reply`:e.severity===`critical`||e.severity===`high`?`Urgent`:`Update`}function ra(e){return e.kind===`prod_down`||e.kind===`blocked`||e.severity===`critical`||e.severity===`high`?`urgent`:e.kind===`decision`?`needs`:`calm`}function ia({turn:e}){let t=e.parts.map(e=>e.kind===`text`?e.text:``).join(``),n=L();return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`bubble bubble--user`,children:[(0,V.jsx)(`p`,{className:`bubble__text`,children:t}),(0,V.jsx)(`time`,{className:`bubble__time`,dateTime:e.createdAt,title:ke(e.createdAt),children:ea(e.createdAt)})]}),(0,V.jsx)(ot,{text:t,dotId:n.dotId})]})}function aa(e){return typeof e.input==`object`&&e.input!==null&&e.input.context===!0}function oa({turn:e,dotName:t,avatar:n,onRetry:r}){let i=e.status===`streaming`,a=e.parts.length===0,o=new Set(e.parts.flatMap(e=>e.kind===`block`&&e.block.tool&&!(e.block.kind===`cards`&&Xi.has(e.block.tool))?[e.block.tool]:[])),s=e.parts.filter(e=>e.kind===`tool`&&(e.failed||aa(e)||!o.has(e.name)));return(0,V.jsxs)(`div`,{className:`reply`,"aria-busy":i||void 0,children:[(0,V.jsx)(`span`,{className:`reply__avatar`,"aria-hidden":`true`,children:n}),(0,V.jsxs)(`div`,{className:`reply__body`,children:[(0,V.jsxs)(`p`,{className:`reply__who`,children:[(0,V.jsx)(`span`,{children:t}),e.update&&(0,V.jsx)(`span`,{className:`reply__update reply__update--${ra(e.update)}`,children:na(e.update)}),(0,V.jsx)(`time`,{dateTime:e.createdAt,title:ke(e.createdAt),children:ea(e.createdAt)})]}),!e.update&&(0,V.jsx)(Bi,{turn:e,tools:s}),e.parts.map((n,r)=>{switch(n.kind){case`text`:return(0,V.jsx)(Ui,{text:n.text,className:i&&r===e.parts.length-1?`is-streaming`:void 0},r);case`tool`:return null;case`approval`:return(0,V.jsx)(Ze,{approval:n.approval,dotName:t,variant:`inline`},n.approval.id);case`run`:return(0,V.jsx)(Yi,{runId:n.runId},n.runId);case`block`:return(0,V.jsx)(oi,{block:n.block,fallback:n.fallback},n.block.id)}}),e.update?.details&&(0,V.jsx)(b,{className:`reply__details`,children:(0,V.jsx)(Ui,{text:e.update.details})}),i&&a&&e.update&&(0,V.jsxs)(`p`,{className:`reply__thinking`,role:`status`,children:[(0,V.jsxs)(`span`,{className:`reply__dots`,"aria-hidden":`true`,children:[(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{}),(0,V.jsx)(`span`,{})]}),`Thinking`]}),e.status===`stopped`&&(0,V.jsxs)(`p`,{className:`reply__note`,children:[`Stopped. `,a?`No answer was kept.`:`The answer above is partial.`]}),e.status===`error`&&(0,V.jsxs)(`div`,{className:`reply__error`,role:`alert`,children:[(0,V.jsx)(`p`,{children:e.error||`The dot could not answer.`}),(0,V.jsx)(M,{size:`sm`,icon:(0,V.jsx)(u,{size:14}),onClick:()=>r(e.id),children:`Try again`})]})]})]})}function sa(e,n={}){let r=`chat:${e??`all`}`,i=ve(r,t=>_.listMessages(e,50,t)),[a,o]=(0,B.useState)(null),[s,c]=(0,B.useState)([]),[l,u]=(0,B.useState)(!1),d=(0,B.useRef)(null),f=(0,B.useRef)(n.onReply);(0,B.useEffect)(()=>{f.current=n.onReply});let m=n.reportId;i.data&&a===null&&o(mi(i.data)),(0,B.useEffect)(()=>()=>d.current?.abort(),[]),_e(t=>{if(t.type!==`update`||!t.message||m||t.message.watchId!==(e??`all`))return;let n=pi(t.message);c(e=>e.some(e=>e.id===n.id)?e:[...e,n])},[`update`]);let h=(0,B.useCallback)((e,t)=>{c(n=>n.map(n=>n.type===`message`&&n.id===e?t(n):n))},[]),g=(0,B.useCallback)((n,r)=>{let i=new AbortController;d.current=i,u(!0);let a=r,o=e=>{a=e,h(r.id,()=>e)};p({dotId:e,text:n,...m?{reportId:m}:{}},e=>o(_i(a,e)),i.signal).then(()=>{a.status===`streaming`&&o({...a,status:`done`});let e=xi(a);e&&a.status===`done`&&f.current?.(e)},e=>{if(i.signal.aborted||e instanceof DOMException&&e.name===`AbortError`){o({...a,status:`stopped`});return}if(a.status===`error`)return;let n=e instanceof t?`${e.message} (${e.code})`:e instanceof Error?e.message:`The dot could not answer.`;o({...a,status:`error`,error:n})}).finally(()=>{d.current===i&&(d.current=null),u(!1)})},[e,m,h]),v=(0,B.useCallback)(e=>{let t=e.trim();if(!t||d.current)return;let n=new Date().toISOString(),r={type:`message`,id:Q(`a`),role:`assistant`,parts:[],createdAt:n,status:`streaming`};c(e=>[...e,{type:`message`,id:Q(`u`),role:`user`,parts:[{kind:`text`,text:t}],createdAt:n,status:`done`},r]),g(t,r)},[g]),y=(0,B.useCallback)(e=>{if(d.current)return;let t=s.findIndex(t=>t.id===e),n=t>0?s[t-1]:void 0;if(!n||n.type!==`message`||n.role!==`user`)return;let r=s[t];if(r.type!==`message`)return;let i={...r,parts:[],status:`streaming`,error:void 0};h(e,()=>i),g(xi(n),i)},[s,h,g]),b=(0,B.useCallback)(()=>d.current?.abort(),[]),x=(0,B.useCallback)((e,t)=>{c(n=>[...n,{type:`receipt`,id:t??Q(`call`),receipt:e,createdAt:e.endedAt}])},[]);return{turns:[...a??[],...s.filter(e=>!a?.some(t=>t.id===e.id))],historyLoading:a===null&&!i.error,historyError:a===null?i.error:null,reloadHistory:i.reload,streaming:l,send:v,stop:b,retry:y,addReceipt:x}}function ca({status:e}){if(e.kind===`online`)return null;let t=e.kind===`offline`?`Your Bee is offline — messages will send when it is back`:e.kind===`local`?`Your Bee is running locally — remote access is paused, so replies wait`:e.kind===`unpaired`?`No laptop connected — set one up to chat`:e.kind===`provisioning`?`Your Bee is still setting up`:`No internet`;return(0,V.jsxs)(`p`,{className:`chat__bee chat__bee--${e.kind}`,role:`status`,"data-testid":`chat-bee-strip`,children:[t,e.kind===`unpaired`&&(0,V.jsxs)(V.Fragment,{children:[` · `,(0,V.jsx)(`a`,{href:`#/add-laptop`,children:`Set up a laptop`})]})]})}var la=`chat:speakReplies`,ua=[`What broke since the last merge?`,`Is the site up right now?`,`Run the quick tests again`,`What is waiting for me?`,`Summarize today`],da=[`Which dot needs attention?`,`Anything down right now?`,`What is waiting for me?`,`Summarize today across dots`];function fa({dotId:e,message:t}){let n=xe(),r=e?n.data?.find(t=>t.id===e):void 0;return e&&n.data&&!r?(0,V.jsx)(`div`,{className:`page`,children:(0,V.jsx)(o,{kind:`filtered`,title:`This dot does not exist`,body:`It may have been archived. Ask all dots, or pick another one.`,action:(0,V.jsx)(M,{variant:`primary`,onClick:()=>pe({name:`chat`}),children:`Ask all dots`})})}):(0,V.jsx)(ma,{dotId:e,focusId:t,dot:r,dots:n.data,dotsError:n.error},e??`all`)}function pa(e){try{let t=sessionStorage.getItem(_t);if(!t)return;let n=JSON.parse(t);return n.dotId&&n.dotId!==e?void 0:typeof n.text==`string`&&n.text?n.text:void 0}catch{return}}function ma({dotId:t,focusId:n,dot:r,dots:a,dotsError:c}){let l=le(),[u]=(0,B.useState)(()=>pa(t));(0,B.useEffect)(()=>{if(u)try{sessionStorage.removeItem(_t)}catch{}},[u]);let p=r?.name??(t?`Dot`:`All dots`),m=r?g(r):`pip`;je({title:t?p:`Ask`});let[h,_]=(0,B.useState)(()=>ge(la,!1)===!0),v=Ut(),y=(0,B.useRef)(null),b=(0,B.useRef)(!1),x=(0,B.useCallback)(e=>{h&&v&&!b.current&&(y.current?.(),y.current=Gt(Wt(e)))},[h,v]);(0,B.useEffect)(()=>()=>y.current?.(),[]);let S=sa(t,{onReply:x}),C=Me(),w=Ne(),T=Zt(t,{onReceipt:(e,t)=>S.addReceipt(e,t)});(0,B.useEffect)(()=>{b.current=T.phase===`starting`||T.phase===`live`},[T.phase]);let{phase:E,error:ee,receiptStatus:te,dismiss:D}=T;(0,B.useEffect)(()=>{E===`ended`&&!ee&&te===`saved`&&(D(),l.show({title:`Call saved to the chat`,tone:`success`}))},[E,ee,te,D,l]);function re(e){_(e),he(la,e),e||y.current?.()}function O(){y.current?.(),T.start()}let{send:ie,streaming:ae}=S,k=(0,B.useMemo)(()=>({dotId:t,ask:e=>!ae&&(ie(e),!0)}),[t,ie,ae]),oe=t?ua:da,se=C?S.turns.flatMap(e=>e.type===`message`&&e.role===`user`?[e]:[]).at(-1)?.parts.find(e=>e.kind===`text`)?.text:void 0,ce=Pe(),A=r?.kind===`lead`?ce.byId[r.id]:void 0,j=r?A?Oe(A,r.status):r.status:void 0,N=A?Ae[A.status]:j?de[j]:void 0,ue=(0,V.jsx)(F,{name:m,state:j?e(j):`ok`,size:32,decorative:!0}),fe=T.phase===`starting`||T.phase===`live`;return(0,V.jsx)(`div`,{className:`chat-layout`,children:(0,V.jsxs)(`div`,{className:`chat`,children:[(0,V.jsxs)(`header`,{className:`chat__head`,children:[(0,V.jsxs)(`div`,{className:`chat__who`,children:[(0,V.jsx)(F,{name:m,state:j?e(j):`ok`,size:40,label:r?`${p}, ${N}`:`All dots`}),(0,V.jsxs)(`div`,{className:`chat__who-text`,children:[(0,V.jsx)(`h1`,{className:`chat__name`,children:t?p:`Ask all dots`}),(0,V.jsxs)(`p`,{className:`chat__sub`,children:[r&&j?(0,V.jsx)(ne,{status:j,label:N,showLabel:!0}):t?(0,V.jsx)(`span`,{children:c?`Status unavailable`:`Loading status`}):(0,V.jsx)(`span`,{children:`Questions go to every dot you run`}),r?.pendingApprovals?(0,V.jsxs)(`a`,{href:`#/inbox`,children:[r.pendingApprovals,` to review`]}):null]})]})]}),(0,V.jsx)(`div`,{className:`chat__call-slot`,children:t?(0,V.jsx)(M,{className:`chat__call`,variant:`primary`,icon:(0,V.jsx)(f,{size:16}),onClick:O,loading:T.phase===`starting`,children:fe?`In a call`:`Call`}):(0,V.jsx)(`span`,{className:`chat__call-hint`,children:`Pick one dot to call it`})}),(0,V.jsxs)(`div`,{className:`chat__head-actions`,children:[(0,V.jsxs)(`label`,{className:`chat__scope`,children:[(0,V.jsx)(`span`,{className:`chat__scope-label`,children:`Talking to`}),(0,V.jsx)(i,{value:t??``,onChange:e=>pe({name:`chat`,dotId:e.target.value||void 0}),options:[{value:``,label:`All dots`},...(a??[]).map(e=>({value:e.id,label:e.name}))],children:t&&!r&&(0,V.jsx)(`option`,{value:t,children:p})})]}),v?(0,V.jsx)(d,{checked:h,onChange:re,label:`Read replies aloud`}):(0,V.jsx)(d,{checked:!1,onChange:()=>{},label:`Read replies aloud`,disabled:!0,disabledReason:`This browser cannot speak text.`})]})]}),(0,V.jsx)(St,{dotId:t,dot:r,onCall:t?O:void 0,inCall:fe,callStarting:T.phase===`starting`}),(0,V.jsx)(ta,{turns:S.turns,dotName:t?p:`localdost`,avatar:ue,onRetry:S.retry,busy:S.streaming,actions:k,focusId:n,header:S.historyError?(0,V.jsx)(`div`,{className:`transcript__history-error`,children:(0,V.jsx)(s,{compact:!0,title:`Could not load earlier messages`,error:S.historyError,onRetry:()=>void S.reloadHistory()})}):S.historyLoading?(0,V.jsx)(ha,{}):null,empty:S.historyLoading||S.historyError?null:(0,V.jsx)(o,{kind:`first-run`,art:(0,V.jsx)(F,{name:m,state:`ok`,size:72,decorative:!0}),title:t?`Ask ${p} anything`:`Ask your dots anything`,body:t?`It knows its recent checks, the site, and what waits for you. Pick a suggestion below or type a question.`:`Questions here go to every dot. Pick one dot above to call it or to keep a focused thread.`})}),!S.streaming&&(0,V.jsxs)(`div`,{className:`chat__chips`,role:`group`,"aria-label":`Suggested questions`,children:[oe.map(e=>(0,V.jsx)(`button`,{type:`button`,className:`chip`,onClick:()=>S.send(e),children:e},e)),se&&(0,V.jsx)(`button`,{type:`button`,className:`chip chip--bee`,onClick:()=>pe({name:`workflowNew`,text:se}),"data-testid":`chat-make-workflow`,children:`Make this a workflow`})]}),C&&(0,V.jsx)(ca,{status:w.status}),(0,V.jsx)($t,{onSend:S.send,onStop:S.stop,streaming:S.streaming,placeholder:t?`Message ${p}`:`Message all dots`,autoFocus:!0,initialText:u,disabled:C&&w.status.kind===`phoneOffline`?`No internet · you can send again when the phone is back online`:void 0}),t&&(0,V.jsx)(Bt,{call:T,dotName:p,mascot:m,onCallAgain:O})]})})}function ha(){let[e,t]=(0,B.useState)(!1);return(0,B.useEffect)(()=>{let e=setTimeout(()=>t(!0),1e3);return()=>clearTimeout(e)},[]),(0,V.jsx)(`div`,{className:`history-skeleton`,role:`status`,"aria-label":`Loading messages`,"aria-busy":`true`,children:e&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`history-skeleton__row`,children:[(0,V.jsx)(`span`,{className:`skeleton`,style:{width:32,height:32,borderRadius:999}}),(0,V.jsxs)(`span`,{className:`history-skeleton__lines`,children:[(0,V.jsx)(`span`,{className:`skeleton`,style:{width:`60%`,height:12}}),(0,V.jsx)(`span`,{className:`skeleton`,style:{width:`40%`,height:12}})]})]}),(0,V.jsx)(`div`,{className:`history-skeleton__row history-skeleton__row--user`,children:(0,V.jsx)(`span`,{className:`skeleton`,style:{width:`45%`,height:36,borderRadius:12}})}),(0,V.jsxs)(`div`,{className:`history-skeleton__row`,children:[(0,V.jsx)(`span`,{className:`skeleton`,style:{width:32,height:32,borderRadius:999}}),(0,V.jsxs)(`span`,{className:`history-skeleton__lines`,children:[(0,V.jsx)(`span`,{className:`skeleton`,style:{width:`70%`,height:12}}),(0,V.jsx)(`span`,{className:`skeleton`,style:{width:`55%`,height:12}}),(0,V.jsx)(`span`,{className:`skeleton`,style:{width:`30%`,height:12}})]})]})]})})}export{ua as DOT_CHIPS,fa as default};
|
|
3
|
+
//# sourceMappingURL=Chat-BKDiR0qt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.call{z-index:var(--z-modal);padding:calc(env(safe-area-inset-top) + var(--space-3)) var(--gutter) calc(env(safe-area-inset-bottom) + var(--space-4));background:var(--bg);color:var(--text);overscroll-behavior:contain;flex-direction:column;display:flex;position:fixed;inset:0;overflow-y:auto}.call__top{justify-content:space-between;align-items:center;gap:var(--space-3);flex:none;display:flex}.call__minimize{align-items:center;gap:var(--space-1);min-height:var(--tap);padding:0 var(--space-3) 0 var(--space-2);border-radius:var(--radius-full);background:var(--surface-2);color:var(--text);font-weight:var(--weight-medium);border:0;display:inline-flex}.call__minimize:hover{background:var(--surface-3)}.call__mode{font-size:var(--text-xs);color:var(--text-3)}.call__inner{align-items:center;gap:var(--space-2);width:100%;max-width:560px;padding-top:var(--space-6);text-align:center;flex-direction:column;flex:1;margin:0 auto;display:flex}.call__inner--ended{justify-content:center;padding-top:0}.call__avatar{background:var(--accent-soft);width:152px;height:152px;box-shadow:0 0 0 0 var(--accent-soft);transition:box-shadow var(--dur) var(--ease);border-radius:50%;place-items:center;display:grid}.call__avatar.is-speaking{box-shadow:0 0 0 10px var(--accent-soft)}.call__name{margin-top:var(--space-3);font-size:var(--text-2xl);font-weight:var(--weight-semibold);overflow-wrap:anywhere}.call__status{align-items:center;gap:var(--space-3);color:var(--text-2);display:flex}.call__timer{font-size:var(--text-lg);font-variant-numeric:tabular-nums;color:var(--text)}.call__activity{font-size:var(--text-sm)}.call__notice{font-size:var(--text-sm);color:var(--text-3)}.call__error{max-width:44ch;padding:var(--space-2) var(--space-3);border-radius:var(--radius);background:var(--outage-bg);color:var(--outage-fg);font-size:var(--text-sm)}.call__captions{gap:var(--space-5);width:100%;max-width:560px;margin:var(--space-8) auto 0;text-align:center;flex-direction:column;display:flex}.caption__who{margin-bottom:var(--space-1);font-size:var(--text-xs);font-weight:var(--weight-medium);color:var(--text-3);display:block}.caption__text{font-size:var(--text-md);line-height:var(--leading);overflow-wrap:anywhere;text-wrap:balance;-webkit-line-clamp:4;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.caption--user .caption__text{color:var(--text-2)}.caption--dot .caption__text{font-size:var(--text-xl);font-weight:var(--weight-medium);line-height:var(--leading-tight);color:var(--text)}.call__controls{justify-content:center;gap:var(--space-4);padding-top:var(--space-6);flex:none;display:flex}.call__ctl{align-items:center;gap:var(--space-1);min-width:80px;color:var(--text-2);font-size:var(--text-xs);font-weight:var(--weight-medium);background:0 0;border:0;flex-direction:column;display:flex}.call__ctl-icon{background:var(--surface-2);width:60px;height:60px;color:var(--text);transition:background-color var(--dur-fast) var(--ease);border-radius:50%;place-items:center;display:grid}.call__ctl:hover .call__ctl-icon{background:var(--surface-3)}.call__ctl.is-off .call__ctl-icon{background:var(--text);color:var(--bg)}.call__ctl--hang .call__ctl-icon,.call__ctl--hang:hover .call__ctl-icon{background:var(--outage);color:#fff}.call__ctl--hang .call__ctl-icon svg{transform:rotate(135deg)}.call__ctl:focus-visible{box-shadow:none;outline:none}.call__ctl:focus-visible .call__ctl-icon{box-shadow:var(--focus-ring)}.call__ended-actions{justify-content:center;gap:var(--space-2);margin-top:var(--space-4);flex-wrap:wrap;display:flex}.call-pill{left:var(--gutter);right:var(--gutter);top:calc(var(--header-h) + env(safe-area-inset-top) + var(--space-2));z-index:var(--z-overlay);align-items:stretch;gap:var(--space-1);padding:var(--space-1);border-radius:var(--radius-full);background:var(--text);color:var(--bg);box-shadow:var(--shadow-3);display:flex;position:fixed}.call-pill__open{align-items:center;gap:var(--space-2);min-width:0;min-height:var(--tap);padding:0 var(--space-3) 0 var(--space-1);border-radius:var(--radius-full);color:inherit;text-align:left;background:0 0;border:0;flex:1;display:flex}.call-pill__open:hover{background:color-mix(in srgb, var(--bg) 12%, transparent)}.call-pill__text{flex-direction:column;flex:1;min-width:0;line-height:1.2;display:flex}.call-pill__title{font-size:var(--text-sm);font-weight:var(--weight-semibold);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.call-pill__meta{font-size:var(--text-xs);opacity:.8}.call-pill__action{font-size:var(--text-xs);font-weight:var(--weight-medium);opacity:.85;flex:none}.call-pill__hang{align-items:center;gap:var(--space-1);min-height:var(--tap);padding:0 var(--space-4);border-radius:var(--radius-full);background:var(--outage);color:#fff;font-size:var(--text-sm);font-weight:var(--weight-medium);border:0;flex:none;display:inline-flex}.call-pill__hang svg{transform:rotate(135deg)}@media (min-width:900px){.call-pill{top:var(--space-3);left:auto;right:var(--space-6);width:380px}.call__controls{gap:var(--space-8)}}@media (prefers-reduced-motion:reduce){.call__avatar{transition:none}}.cblock{border:var(--hairline);border-radius:var(--radius-md);background:var(--surface);flex-direction:column;min-width:0;display:flex;overflow:hidden;container-type:inline-size}.cblock__head{align-items:baseline;gap:var(--space-1) var(--space-2);padding:var(--space-2) var(--space-3);border-bottom:var(--hairline);background:var(--surface-2);flex-wrap:wrap;display:flex}.cblock__title{font-size:var(--text-sm);font-weight:var(--weight-semibold);line-height:var(--leading-tight);text-wrap:balance;margin:0}.cblock__count{font-size:var(--text-xs);color:var(--text-3)}.cblock__toolbar{padding:var(--space-2) var(--space-3);border-bottom:var(--hairline)}.cblock__chips{gap:var(--space-1);flex-wrap:wrap;display:flex}.cblock__chip{align-items:center;gap:var(--space-1);min-height:var(--control-sm);padding:0 var(--space-2);border:var(--hairline);border-radius:var(--radius-full);background:var(--surface);color:var(--text-2);font:inherit;font-size:var(--text-xs);cursor:pointer;display:inline-flex}.cblock__chip:hover{background:var(--surface-hover)}.cblock__chip[aria-pressed=true]{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-soft-text);font-weight:var(--weight-medium)}.cblock__chip:focus-visible{box-shadow:var(--focus-ring);outline:none}.cblock__chip-count{color:inherit;opacity:.8}.cblock__rows{margin:0;padding:0;list-style:none}.crow{min-width:0;padding:var(--space-2) var(--space-3);border-top:var(--hairline);flex-direction:column;display:flex}.crow:first-child{border-top:0}.crow__line{gap:var(--space-2);flex-direction:column;min-width:0;display:flex}@container (width>=480px){.crow__line{justify-content:space-between;align-items:flex-start;gap:var(--space-3);flex-direction:row}}.crow__main{gap:var(--space-0-5);flex-direction:column;flex:1;min-width:0;display:flex}.crow__title,.crow__text{font-size:var(--text-md);line-height:var(--leading-tight);overflow-wrap:anywhere;text-wrap:pretty;margin:0}.crow__title{font-weight:var(--weight-medium)}.crow__text{line-height:var(--leading);white-space:pre-wrap}.crow__ref{color:var(--text-3);font-weight:var(--weight-regular);font-family:var(--font-mono);font-size:var(--text-sm)}.crow__chip{padding:0 var(--space-2);border:var(--hairline);border-radius:var(--radius-full);white-space:nowrap;line-height:1.6}.crow__meta{align-items:center;gap:var(--space-0-5) var(--space-3);font-size:var(--text-xs);color:var(--text-3);flex-wrap:wrap;margin:0;display:flex}.crow__meta a{color:var(--accent)}.crow__branch{max-width:100%;padding:0 var(--space-1);border-radius:var(--radius-sm);background:var(--surface-2);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-2);overflow-wrap:anywhere}.crow__note,.crow__url,.crow__error{margin:var(--space-0-5) 0 0;font-size:var(--text-sm);color:var(--text-2);overflow-wrap:anywhere}.crow__note-label{color:var(--text-3)}.crow__url{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-3)}.crow__error{color:var(--outage-fg)}.crow__details{margin-top:var(--space-1)}.crow__details .crow__branch{align-self:flex-start}.crow__actions{gap:var(--space-2);flex-wrap:wrap;flex:none;display:flex}.crow__actions .btn{min-height:var(--tap)}@media (pointer:fine){.crow__actions .btn{min-height:var(--control-sm)}}.crow__edit{gap:var(--space-2);flex-direction:column;display:flex}.crow__edit textarea{font-size:max(16px, var(--text-md))}.crow--gone .crow__gone-text{font-size:var(--text-sm);color:var(--text-3);overflow-wrap:anywhere;margin:0}.crow--check{padding:0}.crow__check{align-items:flex-start;gap:var(--space-3);padding:var(--space-2) var(--space-3);min-height:var(--tap);cursor:pointer;display:flex}.crow__check:hover{background:var(--surface-hover)}.crow__check input{width:18px;height:18px;accent-color:var(--accent);flex:none;margin:1px 0 0}.crow__check input:focus-visible{box-shadow:var(--focus-ring);outline:none}.crow--skeleton .crow__main{gap:var(--space-2);padding:var(--space-1) 0}.cblock__result{font-size:var(--text-sm);color:var(--text-2);margin:0}.cblock__result:not(:empty){margin-top:var(--space-2);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);background:var(--surface-2)}.cblock__result--ok:not(:empty){background:var(--ok-bg);color:var(--ok-fg)}.cblock__result--error:not(:empty){background:var(--outage-bg);color:var(--outage-fg)}.cblock__result a{color:inherit;font-weight:var(--weight-medium)}.cblock>.cblock__result:not(:empty),.cticket>.cblock__result:not(:empty){margin:0 var(--space-3) var(--space-3)}.cblock__empty,.cblock__more,.cblock__hint,.cblock__loading{padding:var(--space-2) var(--space-3);font-size:var(--text-sm);color:var(--text-3);margin:0}.cblock__more,.cblock__loading{border-top:var(--hairline)}.cblock__more a{color:var(--accent)}.cblock__loading{align-items:center;gap:var(--space-2);display:flex}.cblock__hint{font-size:var(--text-xs)}.cblock__foot{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-top:var(--hairline);background:var(--surface-2);display:flex}.cblock__foot-note{font-size:var(--text-sm);color:var(--text-2)}.cblock--approvals{background:0 0;border:0;overflow:visible}.cblock--approvals>.cblock__head{padding:0 0 var(--space-1);background:0 0;border:0}.cblock--approvals>.cblock__more,.cblock--approvals>.cblock__empty{border:0;padding-inline:0}.cblock__stack{border:var(--hairline);border-radius:var(--radius-md);background:var(--surface);flex-direction:column;display:flex;overflow:hidden;container-type:inline-size}.cblock__stack>*+*{border-top:var(--hairline)}.cblock__stack>.approval{border:0;border-radius:0}.cticket{flex-direction:column;display:flex}.cticket>.crow__line{padding:var(--space-2) var(--space-3)}.cticket>.ocard{border:0;border-bottom:var(--hairline);border-radius:0}.cticket__section{padding:var(--space-2) var(--space-3);border-top:var(--hairline)}.cticket__label{margin:0 0 var(--space-1);font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-3);text-transform:uppercase;letter-spacing:.04em}.cticket__list{padding-left:var(--space-5);font-size:var(--text-sm);line-height:var(--leading);color:var(--text);margin:0}.cticket__list li+li{margin-top:var(--space-1)}.cblock__scroll{--scroll-shade:#00000024;overscroll-behavior:contain;background:linear-gradient(90deg, var(--surface) 30%, transparent) left / 40px 100% no-repeat local, linear-gradient(270deg, var(--surface) 30%, transparent) right / 40px 100% no-repeat local, radial-gradient(farthest-side at 0 50%, var(--scroll-shade), transparent) left / 12px 100% no-repeat scroll, radial-gradient(farthest-side at 100% 50%, var(--scroll-shade), transparent) right / 12px 100% no-repeat scroll;background-color:var(--surface);max-height:360px;overflow:auto}:root[data-theme=dark] .cblock__scroll{--scroll-shade:#0009}.cblock__scroll:focus-visible{box-shadow:inset 0 0 0 2px var(--accent-brand);outline:none}.ctable{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%;font-size:var(--text-sm)}.ctable th,.ctable td{padding:var(--space-2) var(--space-3);text-align:left;vertical-align:top;border-top:var(--hairline);overflow-wrap:break-word;max-width:280px}.ctable th{z-index:1;box-shadow:inset 0 -1px 0 var(--border);background:var(--surface);font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-3);white-space:nowrap;border-top:0;position:sticky;top:0}.ctable tbody tr:first-child td{border-top:0}.ctable .is-num{text-align:right}.cblock__scroll--wrap{max-height:none}.ctable--wrap{width:100%;min-width:0}.ctable--wrap th,.ctable--wrap td{max-width:none;font-size:var(--text-md);overflow-wrap:break-word;text-wrap:pretty}.ctable--wrap th{font-size:var(--text-xs)}@container (width<=519px){.ctable--wrap{position:relative}.ctable--wrap,.ctable--wrap tbody,.ctable--wrap tr,.ctable--wrap td{display:block}.ctable--wrap thead{clip-path:inset(50%);width:1px;height:1px;margin:-1px;position:absolute;overflow:hidden}.ctable--wrap tr{padding:var(--space-2) var(--space-3);border-top:var(--hairline)}.ctable--wrap tbody tr:first-child{border-top:0}.ctable--wrap td{border:0;padding:0}.ctable--wrap td:first-child{font-weight:var(--weight-semibold)}.ctable--wrap td+td:before{content:attr(data-label) ": ";color:var(--text-3)}}@media (prefers-reduced-motion:reduce){.cblock__chip{transition:none}}.crow__state{font-weight:var(--weight-medium);color:var(--text-2)}.cstats{background:var(--border);grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:1px;margin:0;display:grid}.cstat{gap:var(--space-0-5);min-width:0;padding:var(--space-3);background:var(--surface);flex-direction:column;display:flex}.cstat__label{font-size:var(--text-xs);color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.cstat__value{font-family:var(--font-mono);font-size:var(--text-2xl);font-weight:var(--weight-semibold);line-height:var(--leading-tight);color:var(--text);text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.cstat--ok .cstat__value{color:var(--ok-fg)}.cstat--attention .cstat__value{color:var(--attention-fg)}.cstat--bad .cstat__value{color:var(--outage-fg)}.cstat__sub{font-size:var(--text-xs);line-height:var(--leading-tight);color:var(--text-2);text-wrap:pretty;margin:0}.cchart__finding{padding:var(--space-3) var(--space-3) var(--space-1);font-size:var(--text-md);line-height:var(--leading);text-wrap:pretty;margin:0}.cchart__finding strong{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-weight:var(--weight-semibold)}.cchart__plot{min-width:0;padding:var(--space-2) var(--space-3) var(--space-2)}.cchart__svg{max-width:100%;display:block;overflow:visible}.cchart__s0{--series:var(--chart-1)}.cchart__s1{--series:var(--chart-2)}.cchart__s2{--series:var(--chart-3)}.cchart__s3{--series:var(--chart-4)}.cchart__s1 .cchart__line{stroke-dasharray:6 3}.cchart__s2 .cchart__line{stroke-dasharray:2 3}.cchart__s3 .cchart__line{stroke-dasharray:8 3 2 3}.cchart__bar{fill:var(--series);stroke:var(--surface);stroke-width:1px}.cchart__line{fill:none;stroke:var(--series);stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.cchart__dot{fill:var(--series);stroke:var(--surface);stroke-width:1.5px}.cchart__grid{stroke:var(--border);stroke-width:1px}.cchart__base{stroke:var(--border-strong);stroke-width:1px}.cchart__tick,.cchart__value{font-family:var(--font-mono);font-size:var(--text-xs);font-variant-numeric:tabular-nums}.cchart__tick{fill:var(--text-3)}.cchart__value{fill:var(--text);paint-order:stroke;stroke:var(--surface);stroke-width:3px;stroke-linejoin:round}.cchart__legend{gap:var(--space-1) var(--space-3);padding:0 var(--space-3) var(--space-2);flex-wrap:wrap;margin:0;list-style:none;display:flex}.cchart__key{align-items:center;gap:var(--space-1);font-size:var(--text-xs);color:var(--text-2);white-space:nowrap;display:inline-flex}.cblock__refs{padding:var(--space-2) var(--space-3) var(--space-3);border-top:var(--hairline)}.cblock__refs-label{margin:0 0 var(--space-1);font-size:var(--text-xs);color:var(--text-3)}.cblock__refs-list{align-items:flex-start;gap:var(--space-1);flex-direction:column;min-width:0;margin:0;padding:0;list-style:none;display:flex}.cblock__refs-list li{min-width:0;max-width:100%}.ctriage__progress{align-items:center;gap:var(--space-3);min-width:0;display:flex}.ctriage__progress-text{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-2);white-space:nowrap;flex:none;margin:0}.ctriage__bar{min-width:0;height:var(--space-1);border-radius:var(--radius-full);background:var(--surface-2);flex:1;position:relative;overflow:hidden}.ctriage__bar-fill{border-radius:inherit;background:var(--accent);transition:width var(--dur) var(--ease);position:absolute;inset:0 auto 0 0}.ctriage__group+.ctriage__group{border-top:var(--hairline)}.ctriage__group-title{align-items:baseline;gap:var(--space-2);padding:var(--space-2) var(--space-3) 0;font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-3);text-transform:uppercase;letter-spacing:.04em;margin:0;display:flex}.ctriage__group-count{font-weight:var(--weight-regular)}.ctriage__group .crow:first-child{border-top:0}.ctriage__refs{gap:var(--space-1);margin:var(--space-0-5) 0 0;flex-wrap:wrap;min-width:0;display:flex}.crow[data-triaged] .crow__title{color:var(--text-2)}.cblock--triage .crow__actions .btn{white-space:nowrap;flex:none}.ctriage__note{margin:var(--space-1) 0 0;font-size:var(--text-sm)}.ctriage__note a{color:var(--accent)}@media (prefers-reduced-motion:reduce){.ctriage__bar-fill{transition:none}}.cview{gap:var(--space-2);flex-direction:column;min-width:0;display:flex;container-type:inline-size}.cview__title{font-size:var(--text-sm);font-weight:var(--weight-semibold);line-height:var(--leading-tight);color:var(--text-2);text-wrap:balance;margin:0}.cview__column,.cview__panel,.cview__section{gap:var(--space-3);flex-direction:column;min-width:0;display:flex}.cview__row{gap:var(--space-3);flex-wrap:wrap;min-width:0;display:flex}.cview__row>*{flex:15rem;min-width:0}.cview__section{gap:var(--space-2)}.cview__heading{font-size:var(--text-sm);font-weight:var(--weight-semibold);line-height:var(--leading-tight);color:var(--text-2);margin:0}.cview__text{font-size:var(--text-md);overflow-wrap:anywhere;margin:0}.cview__text--muted{color:var(--text-3)}.cview__tabs{gap:var(--space-3);flex-direction:column;min-width:0;display:flex}.cview__tablist{gap:var(--space-1);border-bottom:var(--hairline);scrollbar-width:none;display:flex;overflow-x:auto}.cview__tab{appearance:none;min-height:var(--control);padding:0 var(--space-3);color:var(--text-2);font:inherit;font-size:var(--text-sm);font-weight:var(--weight-medium);white-space:nowrap;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;flex:none;margin-bottom:-1px}.cview__tab:hover{color:var(--text)}.cview__tab[aria-selected=true]{border-bottom-color:var(--accent);color:var(--text)}.cview__tab:focus-visible{box-shadow:var(--focus-ring);border-radius:var(--radius-sm);outline:none}@media (pointer:coarse){.cview__tab{min-height:44px}}.cview__ph{gap:var(--space-2);padding:var(--space-3);border:var(--hairline);border-radius:var(--radius-md);background:var(--surface);flex-direction:column;display:flex}.cview__note{padding:var(--space-2) var(--space-3);border:var(--hairline);border-radius:var(--radius-md)}.chat{width:100%;height:100%;min-height:320px;max-width:var(--content-max);flex-direction:column;margin:0 auto;display:flex}.chat__head{align-items:center;gap:var(--space-2) var(--space-3);padding:var(--space-3) var(--gutter);border-bottom:var(--hairline);flex-wrap:wrap;flex:none;display:flex}.chat__who{align-items:center;gap:var(--space-3);flex:200px;min-width:0;display:flex}.chat__who-text{min-width:0}.chat__name{font-size:var(--text-lg);font-weight:var(--weight-semibold);line-height:var(--leading-tight);overflow-wrap:anywhere}.chat__sub{align-items:center;gap:var(--space-1) var(--space-3);font-size:var(--text-sm);color:var(--text-3);flex-wrap:wrap;display:flex}.chat__call-slot{flex:none;align-items:center;display:flex}.chat__head-actions{align-items:center;gap:var(--space-2) var(--space-4);flex-wrap:wrap;flex:100%;min-width:0;display:flex}.chat__scope{align-items:center;gap:var(--space-2);min-width:0;font-size:var(--text-sm);color:var(--text-2);flex:140px;display:flex}.chat__scope .select-wrap{flex:1;min-width:0;max-width:240px}.chat__scope .select{width:100%;min-height:var(--tap);font-size:var(--text-lg)}.chat__call{min-height:var(--tap)}.chat__head .toggle{min-height:var(--tap);align-items:center}.chat__call-hint{max-width:16ch;font-size:var(--text-sm);color:var(--text-3);text-align:right}@media (max-width:599px){.chat__scope-label{clip:rect(0, 0, 0, 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}}@media (min-width:900px){.chat__head{padding:var(--space-4) var(--space-8)}.chat__head-actions{flex:0 auto;order:1}.chat__call-slot{order:2}.chat__scope{flex:none}.chat__scope .select{font-size:var(--text-md)}}@media (min-width:900px) and (pointer:fine){.chat__scope .select,.chat__call,.chat__head .toggle{min-height:var(--control-lg)}}.transcript{--jump-height:36px;--jump-clearance:calc(var(--jump-height) + var(--space-3) + var(--space-4));flex:1;min-height:0;position:relative}.transcript__scroll{overscroll-behavior:contain;height:100%;padding:var(--space-4) var(--gutter);overflow:hidden auto}@media (min-width:900px){.transcript__scroll{padding:var(--space-6) var(--space-8)}}.transcript__list{gap:var(--space-4);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.transcript__jump{left:50%;bottom:var(--space-3);z-index:var(--z-sticky);align-items:center;gap:var(--space-1);min-height:var(--jump-height);padding:0 var(--space-3);border:var(--hairline);border-radius:var(--radius-full);background:var(--surface);color:var(--text);font-size:var(--text-sm);box-shadow:var(--shadow-2);display:inline-flex;position:absolute;transform:translate(-50%)}.transcript__history-error{margin-bottom:var(--space-4)}.turn{min-width:0;display:flex}.turn--user{align-items:flex-end;gap:var(--space-2);flex-direction:column}.turn--receipt{justify-content:center}.turn--focus .reply{background:var(--surface-2);border-radius:var(--radius-lg);box-shadow:0 0 0 var(--space-2) var(--surface-2)}.bubble{max-width:min(80%,560px);padding:var(--space-2) var(--space-3);border-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-sm);background:var(--accent);color:var(--on-accent)}.bubble__text{white-space:pre-wrap;overflow-wrap:anywhere}.bubble__time{font-size:var(--text-xs);text-align:right;opacity:.8;margin-top:2px;display:block}.reply{gap:var(--space-3);width:100%;min-width:0;display:flex}.reply__avatar{flex:none;padding-top:2px}.reply__body{gap:var(--space-2);flex-direction:column;flex:1;min-width:0;max-width:680px;display:flex}.reply__who{align-items:baseline;gap:var(--space-2);font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--text);display:flex}.reply__details{margin-top:var(--space-2)}.reply__update{padding:0 var(--space-2);border-radius:var(--radius);font-size:var(--text-xs);font-weight:var(--weight-medium);white-space:nowrap;background:var(--surface-2);color:var(--text-2);flex:none;align-items:center;display:inline-flex}.reply__update--urgent{background:var(--outage-bg);color:var(--outage-fg)}.reply__update--needs{background:var(--attention-bg);color:var(--attention-fg)}.reply__who time{font-weight:var(--weight-regular);font-size:var(--text-xs);color:var(--text-3)}.reply__thinking{align-items:center;gap:var(--space-2);font-size:var(--text-sm);color:var(--text-3);display:inline-flex}.reply__dots{gap:3px;display:inline-flex}.reply__dots span{background:var(--text-3);border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite chat-blink}.reply__dots span:nth-child(2){animation-delay:.15s}.reply__dots span:nth-child(3){animation-delay:.3s}@keyframes chat-blink{0%,80%,to{opacity:.3}40%{opacity:1}}.reply__note{font-size:var(--text-sm);color:var(--text-3)}.reply__error{align-items:center;gap:var(--space-2) var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius);background:var(--outage-bg);color:var(--outage-fg);font-size:var(--text-sm);flex-wrap:wrap;display:flex}.reply__error p{overflow-wrap:anywhere;flex:200px}.md.is-streaming>:last-child:after{content:"";vertical-align:-2px;background:var(--accent-brand);width:7px;height:1em;margin-left:2px;animation:1s infinite chat-blink;display:inline-block}.reasoning{min-width:0;margin:var(--space-1) 0 var(--space-2);border:1px solid var(--hairline);border-radius:var(--radius-md);background:var(--surface)}.reasoning:not(.is-open){background:0 0;border-color:#0000}.reasoning__head{align-items:center;gap:var(--space-2);width:100%;min-height:32px;padding:0 var(--space-2);border-radius:var(--radius-md);color:var(--text-3);font-size:var(--text-xs);text-align:left;white-space:nowrap;background:0 0;border:0;display:flex}.reasoning:not(.is-open) .reasoning__head{margin-left:calc(var(--space-2) * -1);width:calc(100% + var(--space-2))}.reasoning__head:hover{background:var(--surface-hover);color:var(--text-2)}.reasoning.is-working .reasoning__head{color:var(--text-2)}.reasoning__icon,.reasoning__chev{flex:none;display:inline-flex}.reasoning__title{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;flex:1;min-width:0;overflow:hidden}.reasoning__body{gap:var(--space-1);padding:0 var(--space-2) var(--space-2);border-top:1px solid var(--hairline);padding-top:var(--space-2);flex-direction:column;display:flex}.reasoning__steps{gap:var(--space-1);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.reasoning__step{align-items:flex-start;gap:var(--space-2);font-size:var(--text-xs);color:var(--text-2);display:flex}.reasoning__step .reasoning__icon{padding-top:2px}.reasoning__text{overflow-wrap:anywhere;min-width:0}.reasoning__tools{flex-direction:column;display:flex}.reasoning__tools .tool-line__head{width:100%;margin-left:0;padding:0}.reasoning__details{border-top:1px solid var(--hairline);padding-top:var(--space-2);font-size:var(--text-xs);color:var(--text-3)}.reasoning__details-title{margin:0 0 var(--space-1);font-size:var(--text-xs);color:var(--text-2);font-weight:600}.reasoning__facts{gap:var(--space-2);margin:0;display:flex}.reasoning__facts dd{margin:0}.reasoning__empty{font-size:var(--text-xs);color:var(--text-3);margin:0}@media (prefers-reduced-motion:reduce){.reasoning .status-icon--running{animation:none}}.tool-line{min-width:0;container-type:inline-size}.tool-line__head{align-items:center;gap:var(--space-2);width:100%;min-height:32px;padding:0 var(--space-2);margin-left:calc(var(--space-2) * -1);border-radius:var(--radius);color:var(--text-3);font-size:var(--text-xs);text-align:left;white-space:nowrap;background:0 0;border:0;display:flex}.tool-line__head:hover{background:var(--surface-hover);color:var(--text-2)}.tool-line__icon{flex:none;display:inline-flex}.tool-line__text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.tool-line__state{white-space:nowrap;flex:none}.tool-line--failed .tool-line__head{color:var(--text-2)}.tool-line__chev{flex:none;display:inline-flex}.tool-line__body{align-items:flex-start;gap:var(--space-2);padding:var(--space-1) 0 var(--space-2);flex-direction:column;display:flex}.tool-line__calls{gap:var(--space-1);flex-direction:column;width:100%;margin:0;padding:0;list-style:none;display:flex}.tool-line__call{align-items:flex-start;gap:var(--space-2);font-size:var(--text-xs);color:var(--text-2);display:flex}.tool-line__call .tool-line__icon{padding-top:2px}.tool-line__sentence{overflow-wrap:anywhere;min-width:0}.tool-line__toggle{min-height:28px;padding:0 var(--space-2);border-radius:var(--radius);color:var(--text-3);font-size:var(--text-xs);white-space:nowrap;background:0 0;border:0;text-decoration:underline}.tool-line__toggle:hover{color:var(--text-2)}.tool-line__raw{gap:var(--space-2);flex-direction:column;width:100%;display:flex}.tool-line__name{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-2);margin:0}.tool-line__label{margin-top:var(--space-1);margin-bottom:var(--space-1);font-size:var(--text-xs);font-weight:var(--weight-medium);color:var(--text-3)}.tool-line__pre{max-height:240px;padding:var(--space-2);border-radius:var(--radius);background:var(--surface-2);font-family:var(--font-mono);font-size:var(--text-xs);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;overflow:auto}@media (pointer:coarse){.tool-line__head,.tool-line__toggle{min-height:var(--tap)}}.run-card{gap:var(--space-2);padding:var(--space-3);border:var(--hairline);border-radius:var(--radius-md);background:var(--surface);color:var(--text);flex-direction:column;display:flex}.run-card--link{position:relative}.run-card--link:hover{background:var(--surface-hover)}.run-card__open:after{content:"";position:absolute;inset:0}.run-card__open:hover{text-decoration:none}.run-card__row{justify-content:space-between;align-items:center;gap:var(--space-1) var(--space-3);flex-wrap:wrap;display:flex}.run-card__title{font-size:var(--text-sm);font-weight:var(--weight-semibold)}.run-card__status{font-size:var(--text-xs);font-weight:var(--weight-medium);align-items:center;gap:6px;display:inline-flex}.run-card__dot{background:currentColor;border-radius:50%;width:8px;height:8px}.run-card__status.tone--running{color:var(--running-fg)}.run-card__status.tone--ok{color:var(--ok-fg)}.run-card__status.tone--attention{color:var(--attention-fg)}.run-card__status.tone--outage{color:var(--outage-fg)}.run-card__status.tone--paused{color:var(--paused-fg)}.run-card__headline{font-size:var(--text-sm);color:var(--text-2);overflow-wrap:anywhere}.run-card__bar{border-radius:var(--radius-full);background:var(--surface-3);height:6px;display:flex;overflow:hidden}.run-card__bar.is-indeterminate:before{content:"";border-radius:inherit;background:var(--running);width:35%;animation:run-card-slide 1.4s infinite var(--ease)}@keyframes run-card-slide{0%{transform:translate(-100%)}to{transform:translate(300%)}}.run-card__seg{flex-basis:0}.run-card__seg--ok{background:var(--ok)}.run-card__seg--attention{background:var(--attention)}.run-card__seg--outage{background:var(--outage)}.run-card__seg--rest{background:var(--paused)}.run-card__meta{font-size:var(--text-xs);color:var(--text-3)}.run-card__open{color:var(--accent);font-weight:var(--weight-medium);align-items:center;gap:2px;display:inline-flex}.run-card__loading{gap:var(--space-2);flex-direction:column;display:flex}.run-card__error{font-size:var(--text-sm);color:var(--outage-fg);flex:1}.run-card__retry,.run-card__link{min-height:36px;padding:0 var(--space-2);color:var(--accent);font-size:var(--text-sm);font-weight:var(--weight-medium);background:0 0;border:0;align-items:center;display:inline-flex}.receipt{border:var(--hairline);border-radius:var(--radius-md);background:var(--surface-2);width:100%;max-width:520px}.receipt__head{align-items:center;gap:var(--space-3);width:100%;min-height:var(--tap);padding:var(--space-2) var(--space-3);color:var(--text);text-align:left;background:0 0;border:0;display:flex}.receipt__icon{background:var(--surface);width:32px;height:32px;color:var(--text-2);border-radius:50%;flex:none;place-items:center;display:grid}.receipt__text{flex-direction:column;flex:1;min-width:0;display:flex}.receipt__title{font-size:var(--text-sm);font-weight:var(--weight-semibold);overflow-wrap:anywhere}.receipt__meta{gap:0 var(--space-2);font-size:var(--text-xs);color:var(--text-3);flex-wrap:wrap;display:flex}.receipt__toggle{font-size:var(--text-xs);font-weight:var(--weight-medium);color:var(--accent);flex:none;align-items:center;gap:2px;display:inline-flex}.receipt__lines{gap:var(--space-2);padding:var(--space-2) var(--space-3) var(--space-3);border-top:var(--hairline);flex-direction:column;margin:0;list-style:none;display:flex}.receipt__line{gap:var(--space-2);font-size:var(--text-sm);grid-template-columns:minmax(48px,auto) 1fr;display:grid}.receipt__who{font-weight:var(--weight-medium);color:var(--text-3)}.receipt__said{overflow-wrap:anywhere}.receipt__work{min-width:0;color:var(--text-3);font-size:var(--text-xs);text-overflow:ellipsis;white-space:nowrap;grid-column:2;overflow:hidden}.chat__chips{gap:var(--space-2);padding:var(--space-2) var(--gutter) 0;scrollbar-width:none;flex:none;display:flex;overflow-x:auto;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 24px),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - 24px),#0000)}.chat__chips::-webkit-scrollbar{display:none}.chip{min-height:36px;padding:0 var(--space-3);border:1px solid var(--border-strong);border-radius:var(--radius-full);background:var(--surface);color:var(--text);font-size:var(--text-sm);white-space:nowrap;flex:none}.chip:hover{background:var(--surface-hover);border-color:var(--accent-brand)}@media (pointer:coarse){.chip{min-height:var(--tap)}}@media (min-width:900px){.chat__chips{padding:var(--space-2) var(--space-8) 0;flex-wrap:wrap;overflow-x:visible;-webkit-mask-image:none;mask-image:none}}.composer{padding:var(--space-2) var(--gutter) var(--space-2);flex:none}@media (min-width:900px){.composer{padding:var(--space-2) var(--space-8) 0}}.composer__note{margin-bottom:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius);background:var(--running-bg);color:var(--running-fg);font-size:var(--text-sm)}.composer__note.is-error{background:var(--surface-2);color:var(--text-2)}.composer__row{align-items:flex-end;gap:var(--space-2);padding:var(--space-1);border:1px solid var(--border-strong);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-1);display:flex}.composer__row:focus-within{border-color:var(--accent-brand)}.composer__input{min-width:0;min-height:var(--tap);max-height:40vh;padding:10px var(--space-1);color:var(--text);font:inherit;font-size:var(--text-lg);resize:none;background:0 0;border:0;flex:1;line-height:1.5}.composer__input:focus,.composer__input:focus-visible{box-shadow:none;outline:none}@media (min-width:900px){.composer__input{font-size:var(--text-md)}}.composer__mic,.composer__send{justify-content:center;align-items:center;gap:var(--space-1);min-width:var(--tap);min-height:var(--tap);padding:0 var(--space-2);border-radius:var(--radius-md);color:var(--text-2);font-size:var(--text-sm);font-weight:var(--weight-medium);touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;background:0 0;border:0;flex:none;display:inline-flex}.composer__mic:hover{background:var(--surface-hover);color:var(--text)}.composer__mic.is-listening{background:var(--accent);color:var(--on-accent)}.composer__send{background:var(--accent);color:var(--on-accent);padding:0 var(--space-3)}.composer__send:hover{background:var(--accent-hover)}.composer__send[aria-disabled=true]{background:var(--surface-3);color:var(--text-3)}.composer__send--stop{background:var(--text);color:var(--bg)}.composer__mic-label,.composer__send-label{white-space:nowrap}.composer__hint{margin-top:var(--space-1);font-size:var(--text-xs);color:var(--text-3)}@media (pointer:coarse){.composer__hint{display:none}}@media (prefers-reduced-motion:reduce){.reply__dots span,.md.is-streaming>:last-child:after,.run-card__bar.is-indeterminate:before{animation:none}}.history-skeleton{gap:var(--space-4);flex-direction:column;display:flex}.history-skeleton__row{gap:var(--space-3);display:flex}.history-skeleton__row--user{justify-content:flex-end}.history-skeleton__lines{gap:var(--space-2);flex-direction:column;flex:1;max-width:560px;padding-top:4px;display:flex}.run-card__who{align-items:center;gap:var(--space-1) var(--space-2);flex-wrap:wrap;min-width:0;display:inline-flex}.run-card__stage{flex:none;max-width:100%}.run-card__who .run-card__title{white-space:nowrap}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{J as e,mn as t,pn as n}from"./ui-DcmhYyYp.js";var r=t();function i({open:t,title:i,body:a,confirmLabel:o,onConfirm:s,onCancel:c,busy:l}){return(0,r.jsx)(e,{open:t,onClose:c,title:i,description:a,role:`alertdialog`,size:`sm`,initialFocus:`[data-cancel]`,footer:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n,{variant:`secondary`,"data-cancel":!0,onClick:c,children:`Cancel`}),(0,r.jsx)(n,{variant:`danger`,loading:l,onClick:s,children:o})]})})}export{i as t};
|
|
2
|
+
//# sourceMappingURL=ConfirmDialog-CIMveD-b.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{J as e,Lt as t,N as n,P as r,Vn as i,Wn as a,Y as o,mn as s,pn as c}from"./ui-DcmhYyYp.js";import{D as l,O as u,S as d,_ as f,a as p,b as m,c as h,d as g,f as _,g as v,i as y,l as b,m as x,n as S,o as C,p as w,r as T,s as E,u as D,v as O,x as k}from"./ModelChoices-BxO1zyyr.js";var A=a(i(),1);function j(e,t){try{return!!e&&!!t&&new URL(e).origin===new URL(t).origin}catch{return!1}}function M(e){let t=e.managed===`starting`||e.managed===`running`,n=!!e.foundUrl&&!e.detected&&j(e.foundUrl,e.startUrl);return{start:e.installed&&!t&&!e.detected&&!n,starting:e.managed===`starting`,stop:t,check:!e.detected&&e.managed!==`starting`}}function N(e,t){let n=e.server,r={detected:t&&!!n,locked:!t&&!!n?.needsToken,failedCheck:!t&&!n?.needsToken&&!!n?.unhealthy,installed:!!e.checkout};return n?.url&&(r.foundUrl=n.url),e.startUrl&&(r.startUrl=e.startUrl),e.managed&&(r.managed=e.managed.state),r}var P=s();function F(e,t,n,r,i={}){let{prepare:a,keep:o=[]}=i,[s,c]=(0,A.useState)(n),[l,u]=(0,A.useState)({}),[d,f]=(0,A.useState)(null),[p,m]=(0,A.useState)(!1),[h,g]=(0,A.useState)(!1),v=(e,t=s[e])=>o.includes(e)&&!t.trim()?null:r[e]?.(t)??null,y=()=>{let e={};for(let t of Object.keys(r))e[t]=v(t);return u(e),Object.values(e).every(e=>!e)},b=()=>{let e={...a?a(s):s};for(let t of o)e[t]?.trim()||delete e[t];return e};return{values:s,errors:l,result:d,testing:p,saving:h,set:e=>t=>{c(n=>({...n,[e]:t})),l[e]&&u(n=>({...n,[e]:r[e]?.(t)??null})),f(null)},blur:e=>()=>{s[e]&&u(t=>({...t,[e]:v(e)}))},test:async()=>{if(y()){m(!0);try{f(await _.test(e,{method:t,values:b()}))}catch(e){f({ok:!1,message:w(e)})}finally{m(!1)}}},save:async(n,r)=>{if(y()){g(!0);try{let i=await _.save(e,{method:t,values:b()});n(i,`${r} connected${i.account?` as ${i.account}`:``}.`)}catch(e){f({ok:!1,message:w(e)})}finally{g(!1)}}}}}function I({form:e,connectLabel:t=`Connect`}){return(0,P.jsxs)(`div`,{className:`cx-form__actions`,children:[(0,P.jsx)(g,{result:e.result,pending:e.testing}),(0,P.jsxs)(`div`,{className:`cx-form__buttons`,children:[(0,P.jsx)(c,{variant:`secondary`,onClick:()=>void e.test(),loading:e.testing,disabled:e.saving,children:`Test`}),(0,P.jsx)(c,{variant:`primary`,type:`submit`,loading:e.saving,children:t})]})]})}function L({children:e,onSubmit:t}){let n=(0,A.useRef)(null);return(0,P.jsx)(`form`,{ref:n,className:`cx-form`,noValidate:!0,onSubmit:e=>{e.preventDefault(),t(),requestAnimationFrame(()=>n.current?.querySelector(`[aria-invalid="true"]`)?.focus())},children:e})}function R(){let[e,t]=(0,A.useState)(!1),[n,r]=(0,A.useState)(null);return{pending:e,result:n,setResult:r,run:async e=>{t(!0),r(null);try{await e()}catch(e){r({ok:!1,message:w(e)})}finally{t(!1)}}}}function z({ok:e,children:t}){return(0,P.jsx)(`span`,{className:`cx-found cx-found--${e?`ok`:`no`}`,children:t})}function B({status:e,detected:n,onRedetect:r,detecting:i,onSaved:a}){let o=n?.claudeCli,s=!!o?.found&&o.signedIn,l=n?.codexCli,d=!!l?.found&&l.signedIn,[f,p]=(0,A.useState)(e.method===`anthropic`?`api`:e.method===`codex-cli`?`codex`:`subscription`),m=R(),b=F(`model`,`claude-token`,{oauthToken:``},{oauthToken:u.claudeToken},{keep:e.method===`claude-token`&&e.secretHint?[`oauthToken`]:[]}),x=F(`model`,`anthropic`,{apiKey:``},{apiKey:u.anthropicKey},{keep:e.method===`anthropic`&&e.secretHint?[`apiKey`]:[]}),S=R(),[w,E]=(0,A.useState)(!1);return(0,P.jsxs)(`div`,{className:`cx-flow`,children:[(0,P.jsx)(T,{label:`How localdost reaches a model`,value:f,onChange:p,options:[{value:`subscription`,brand:`claude`,title:`Claude subscription`,help:`Uses your Claude Pro or Max plan. No API billing.`,aside:n?(0,P.jsx)(z,{ok:s,children:s?`Signed-in CLI found`:`No signed-in CLI`}):void 0},{value:`codex`,brand:`openai`,title:`Codex subscription`,help:`Uses your ChatGPT plan through the Codex CLI. No API billing.`,aside:n?(0,P.jsx)(z,{ok:d,children:d?`Signed-in CLI found`:`No signed-in CLI`}):void 0},{value:`api`,brand:`anthropic`,title:`API key`,help:`Pay per use on the Anthropic API. Best for a shared server.`}]}),f===`codex`?(0,P.jsxs)(P.Fragment,{children:[d?(0,P.jsxs)(`div`,{className:`cx-callout cx-callout--ok`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsx)(`strong`,{children:`Codex CLI is signed in.`}),(0,P.jsx)(`span`,{className:`cx-mono`,children:[l?.path,l?.version].filter(Boolean).join(` · `)})]}),(0,P.jsx)(c,{variant:`primary`,loading:m.pending,onClick:()=>void m.run(async()=>{a(await _.save(`model`,{method:`codex-cli`,values:{}}),`Model connected with your Codex subscription.`)}),children:`Use it`})]}):(0,P.jsxs)(`div`,{className:`cx-callout`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsx)(`strong`,{children:l?.found?`Codex CLI found, but it is not signed in.`:`No Codex CLI found on this server.`}),(0,P.jsxs)(`span`,{children:[`Install the Codex CLI and run `,(0,P.jsx)(`code`,{className:`cx-code`,children:`codex login`}),` on this machine, then check again.`]})]}),(0,P.jsx)(c,{variant:`secondary`,icon:(0,P.jsx)(t,{size:14}),loading:i,onClick:r,children:`Check again`})]}),(0,P.jsx)(g,{result:m.result})]}):f===`subscription`?(0,P.jsxs)(P.Fragment,{children:[s?(0,P.jsxs)(`div`,{className:`cx-callout cx-callout--ok`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsxs)(`strong`,{children:[`Claude CLI is signed in`,o?.account?` as ${o.account}`:``,`.`]}),(0,P.jsx)(`span`,{className:`cx-mono`,children:[o?.path,o?.version].filter(Boolean).join(` · `)})]}),(0,P.jsx)(c,{variant:`primary`,loading:S.pending,onClick:()=>void S.run(async()=>{a(await _.save(`model`,{method:`claude-cli`,values:{}}),`Model connected with your Claude subscription.`)}),children:`Use it`})]}):(0,P.jsxs)(`div`,{className:`cx-callout`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsx)(`strong`,{children:o?.found?`Claude CLI found, but it is not signed in.`:`No Claude CLI found on this server.`}),(0,P.jsx)(`span`,{children:`Create a long-lived token with the steps below, or sign in to the CLI on this machine and check again.`})]}),(0,P.jsx)(c,{variant:`secondary`,icon:(0,P.jsx)(t,{size:14}),loading:i,onClick:r,children:`Check again`})]}),(0,P.jsx)(g,{result:S.result}),s&&!w?(0,P.jsx)(`button`,{type:`button`,className:`cx-linkbtn`,onClick:()=>E(!0),children:`Use a token instead`}):(0,P.jsxs)(L,{onSubmit:()=>void b.save(a,`Model`),children:[(0,P.jsxs)(D,{children:[(0,P.jsxs)(`li`,{children:[`On any machine with the Claude CLI, run `,(0,P.jsx)(`code`,{className:`cx-code`,children:`claude setup-token`}),` `,(0,P.jsx)(y,{text:`claude setup-token`})]}),(0,P.jsx)(`li`,{children:`Sign in with your Claude account in the browser it opens.`}),(0,P.jsx)(`li`,{children:`Paste the token it prints. It lasts a year.`})]}),(0,P.jsx)(h,{name:`oauthToken`,label:`Subscription token`,placeholder:`sk-ant-oat01-...`,value:b.values.oauthToken,onChange:b.set(`oauthToken`),onBlur:b.blur(`oauthToken`),error:b.errors.oauthToken,savedHint:e.method===`claude-token`?e.secretHint:void 0}),(0,P.jsx)(I,{form:b})]})]}):(0,P.jsxs)(L,{onSubmit:()=>void x.save(a,`Model`),children:[(0,P.jsx)(h,{name:`apiKey`,label:`Anthropic API key`,placeholder:`sk-ant-api03-...`,value:x.values.apiKey,onChange:x.set(`apiKey`),onBlur:x.blur(`apiKey`),error:x.errors.apiKey,savedHint:e.method===`anthropic`?e.secretHint:void 0,hint:(0,P.jsx)(C,{href:v.anthropicKeys,children:`Create a key`})}),(0,P.jsx)(I,{form:x})]})]})}function ee({status:e,detected:i,onRedetect:a,detecting:o,onSaved:s}){let l=i?.ghCli,d=!!l?.found&&l.signedIn,[f,p]=(0,A.useState)(e.method===`pat`?`pat`:e.method===`app`?`app`:d?`gh-cli`:`app`),m=F(`github`,`pat`,{token:``},{token:u.githubPat},{keep:e.method===`pat`&&e.secretHint?[`token`]:[]}),y=R(),[b,S]=(0,A.useState)(``);return(0,P.jsxs)(`div`,{className:`cx-flow`,children:[(0,P.jsx)(T,{label:`How localdost signs in to GitHub`,value:f,onChange:p,options:[{value:`gh-cli`,title:`GitHub CLI login`,help:`Reuses gh on this server. Fastest on your own machine.`,aside:i?(0,P.jsx)(z,{ok:d,children:d?`Found${l?.account?`: ${l.account}`:``}`:`Not found`}):void 0},{value:`app`,title:`GitHub App`,help:`Created for you in two clicks. Best for a team server.`},{value:`pat`,title:`Personal access token`,help:`Paste a fine-grained token.`}]}),f===`gh-cli`&&(d?(0,P.jsxs)(`div`,{className:`cx-callout cx-callout--ok`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsxs)(`strong`,{children:[`gh is signed in`,l?.account?` as ${l.account}`:``,`.`]}),(0,P.jsx)(`span`,{children:`localdost reads the token from gh each time it starts.`})]}),(0,P.jsx)(c,{variant:`primary`,loading:y.pending,onClick:()=>void y.run(async()=>{let e=await _.save(`github`,{method:`gh-cli`,values:{}});s(e,`GitHub connected${e.account?` as ${e.account}`:``}.`)}),children:`Use GitHub CLI login`})]}):(0,P.jsxs)(`div`,{className:`cx-callout`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsx)(`strong`,{children:l?.found?`gh is installed but not signed in.`:`gh is not installed on this server.`}),(0,P.jsxs)(`span`,{children:[`Run `,(0,P.jsx)(`code`,{className:`cx-code`,children:`gh auth login`}),` on the server, then check again.`]})]}),(0,P.jsx)(c,{variant:`secondary`,icon:(0,P.jsx)(t,{size:14}),loading:o,onClick:a,children:`Check again`})]})),f===`app`&&(0,P.jsxs)(`div`,{className:`cx-form`,children:[(0,P.jsx)(n,{label:`Owner`,hint:`Leave empty to create the app on your personal account, or enter an organization name.`,children:(0,P.jsx)(r,{value:b,onChange:e=>S(e.target.value),placeholder:`Your account`,autoCapitalize:`off`,spellCheck:!1})}),(0,P.jsx)(`p`,{className:`cx-note`,children:`GitHub opens with the permissions filled in. Create the app, install it on your repos, and GitHub sends you back here connected.`}),(0,P.jsx)(`p`,{className:`cx-note`,"data-org-owner":!0,children:`In an organization, an owner has to approve the App before it can read the repos.`}),(0,P.jsx)(`p`,{className:`cx-note`,"data-public-url-note":!0,children:`Set the public URL first. The App gets a webhook only when an https public URL is already set; without it the dot polls.`}),(0,P.jsx)(`div`,{className:`cx-form__buttons`,children:(0,P.jsx)(c,{variant:`primary`,loading:y.pending,onClick:()=>void y.run(async()=>{let e=await _.githubManifest(b.trim()?{org:b.trim()}:{});x(e)}),children:`Create GitHub App`})})]}),f===`pat`&&(0,P.jsxs)(L,{onSubmit:()=>void m.save(s,`GitHub`),children:[(0,P.jsx)(h,{name:`token`,label:`Personal access token`,placeholder:`github_pat_...`,value:m.values.token,onChange:m.set(`token`),onBlur:m.blur(`token`),error:m.errors.token,savedHint:e.method===`pat`?e.secretHint:void 0,hint:(0,P.jsxs)(P.Fragment,{children:[`Needs `,`Contents read, Metadata read, Pull requests read and write, Commit statuses read and write, Issues read and write, Actions read, and Deployments read`,`. In an organization, an owner has to approve a fine-grained token, and SSO has to be authorized for it.`,` `,(0,P.jsx)(C,{href:v.githubTokens,children:`Create a token`})]})}),(0,P.jsx)(I,{form:m})]}),f!==`pat`&&(0,P.jsx)(g,{result:y.result})]})}function te({status:e,onSaved:t}){let n=F(`linear`,`api-key`,{apiKey:``},{apiKey:u.linearKey},{keep:e.secretHint?[`apiKey`]:[]});return(0,P.jsxs)(L,{onSubmit:()=>void n.save(t,`Linear`),children:[(0,P.jsx)(h,{name:`apiKey`,label:`Personal API key`,placeholder:`lin_api_...`,value:n.values.apiKey,onChange:n.set(`apiKey`),onBlur:n.blur(`apiKey`),error:n.errors.apiKey,savedHint:e.secretHint,autoFocus:!0,hint:(0,P.jsxs)(P.Fragment,{children:[`In Linear, open Settings, Security and access, then New API key. `,(0,P.jsx)(C,{href:v.linearKeys,children:`Create a key`})]})}),(0,P.jsx)(I,{form:n})]})}function ne({status:e,onSaved:t}){let i=t=>typeof e.settings?.[t]==`string`?e.settings[t]:``,a=F(`jira`,`api-token`,{baseUrl:i(`baseUrl`),email:i(`email`),apiToken:``},{baseUrl:u.jiraSite,email:u.email,apiToken:u.jiraToken},{prepare:e=>({...e,baseUrl:d(e.baseUrl),email:e.email.trim()}),keep:e.secretHint?[`apiToken`]:[]});return(0,P.jsxs)(L,{onSubmit:()=>void a.save(t,`Jira`),children:[(0,P.jsx)(n,{label:`Site`,error:a.errors.baseUrl,hint:`Your Jira Cloud address.`,children:(0,P.jsx)(r,{type:`url`,inputMode:`url`,autoCapitalize:`off`,spellCheck:!1,placeholder:`acme.atlassian.net`,value:a.values.baseUrl,onChange:e=>a.set(`baseUrl`)(e.target.value),onBlur:a.blur(`baseUrl`),"data-autofocus":!0})}),(0,P.jsx)(n,{label:`Email`,error:a.errors.email,hint:`The Atlassian account the token belongs to.`,children:(0,P.jsx)(r,{type:`email`,autoComplete:`email`,value:a.values.email,onChange:e=>a.set(`email`)(e.target.value),onBlur:a.blur(`email`)})}),(0,P.jsx)(h,{name:`apiToken`,label:`API token`,value:a.values.apiToken,onChange:a.set(`apiToken`),onBlur:a.blur(`apiToken`),error:a.errors.apiToken,savedHint:e.secretHint,hint:(0,P.jsx)(C,{href:v.atlassianTokens,children:`Create a token`})}),(0,P.jsx)(I,{form:a})]})}function V({status:e,onSaved:t}){let n=F(`slack`,`socket`,{botToken:``,appToken:``},{botToken:u.slackBot,appToken:u.slackApp},{keep:e.secretHint?[`botToken`]:[]}),r=l();return(0,P.jsxs)(L,{onSubmit:()=>void n.save(t,`Slack`),children:[(0,P.jsxs)(D,{children:[(0,P.jsxs)(`li`,{children:[(0,P.jsx)(`span`,{children:`Copy the app manifest. It turns on Socket Mode, so Slack needs no public URL.`}),(0,P.jsxs)(`span`,{className:`cx-steps__actions`,children:[(0,P.jsx)(y,{text:r,label:`Copy manifest`}),(0,P.jsx)(c,{size:`sm`,variant:`ghost`,onClick:()=>{let e=URL.createObjectURL(new Blob([r],{type:`application/json`})),t=document.createElement(`a`);t.href=e,t.download=`localdost-slack-manifest.json`,document.body.appendChild(t),t.click(),t.remove(),URL.revokeObjectURL(e)},children:`Download`})]})]}),(0,P.jsx)(`li`,{children:(0,P.jsxs)(`span`,{children:[`Create the app from the manifest and install it to your workspace. `,(0,P.jsx)(C,{href:v.slackNewApp,children:`Open Slack apps`})]})}),(0,P.jsx)(`li`,{children:`In OAuth and Permissions, copy the Bot User OAuth Token.`}),(0,P.jsx)(`li`,{children:`In Basic Information, App-Level Tokens, generate a token with the connections:write scope.`})]}),(0,P.jsx)(h,{name:`botToken`,label:`Bot token`,placeholder:`xoxb-...`,value:n.values.botToken,onChange:n.set(`botToken`),onBlur:n.blur(`botToken`),error:n.errors.botToken,savedHint:e.secretHint}),(0,P.jsx)(h,{name:`appToken`,label:`App-level token`,placeholder:`xapp-...`,value:n.values.appToken,onChange:n.set(`appToken`),onBlur:n.blur(`appToken`),error:n.errors.appToken}),(0,P.jsx)(I,{form:n})]})}function H({status:e,onSaved:t}){let n=F(`voice`,`openai`,{apiKey:``},{apiKey:u.openaiKey},{keep:e.secretHint?[`apiKey`]:[]});return(0,P.jsxs)(L,{onSubmit:()=>void n.save(t,`Voice`),children:[(0,P.jsx)(`p`,{className:`cx-note`,children:`Without a key, calls use the browser's own speech. A key turns on OpenAI Realtime voice. The key stays on the server.`}),(0,P.jsx)(h,{name:`apiKey`,label:`OpenAI API key`,placeholder:`sk-...`,value:n.values.apiKey,onChange:n.set(`apiKey`),onBlur:n.blur(`apiKey`),error:n.errors.apiKey,savedHint:e.secretHint,autoFocus:!0,hint:(0,P.jsx)(C,{href:v.openaiKeys,children:`Create a key`})}),(0,P.jsx)(I,{form:n})]})}function U({status:e,detected:t,onSaved:i}){let[a,o]=(0,A.useState)(e.method===`url`?`url`:`tunnel`),s=F(`publicUrl`,`url`,{url:``},{url:u.publicUrl},{prepare:e=>({url:e.url.trim().replace(/\/+$/,``)})}),l=R(),[d,f]=(0,A.useState)(null),p=t?.cloudflared;return(0,P.jsxs)(`div`,{className:`cx-flow`,children:[(0,P.jsx)(T,{label:`How people reach this app`,value:a,onChange:o,options:[{value:`tunnel`,title:`Quick tunnel`,help:`A free HTTPS address through Cloudflare. It changes on every restart.`,aside:t?(0,P.jsx)(z,{ok:!!p?.found,children:p?.found?`cloudflared found`:`cloudflared missing`}):void 0},{value:`url`,title:`My own address`,help:`A domain, a named tunnel, or Tailscale Funnel.`}]}),a===`tunnel`?(0,P.jsxs)(`div`,{className:`cx-form`,children:[d?(0,P.jsxs)(`div`,{className:`cx-live`,children:[(0,P.jsx)(`span`,{className:`cx-live__label`,children:`Live at`}),(0,P.jsx)(`a`,{className:`cx-live__url cx-mono`,href:d,target:`_blank`,rel:`noreferrer noopener`,children:d}),(0,P.jsx)(`span`,{className:`cx-live__actions`,children:(0,P.jsx)(y,{text:d})})]}):(0,P.jsx)(`p`,{className:`cx-note`,children:`Starting a tunnel puts this server on the internet. Set an access token in Settings first.`}),(0,P.jsx)(g,{result:l.result,pending:l.pending&&!d,pendingText:`Starting the tunnel. This takes a few seconds.`}),(0,P.jsx)(`div`,{className:`cx-form__buttons`,children:!d&&(0,P.jsx)(c,{variant:`primary`,loading:l.pending,onClick:()=>void l.run(async()=>{let t=await _.startTunnel();f(t.url),l.setResult({ok:!0,message:`Tunnel is up. Links in comments and pushes now use it.`}),i({...e,state:`ready`,source:`stored`,method:`tunnel`,account:t.url},`Tunnel started.`)}),children:`Start tunnel`})})]}):(0,P.jsxs)(L,{onSubmit:()=>void s.save(i,`Public URL`),children:[(0,P.jsx)(n,{label:`Address`,error:s.errors.url,hint:`The HTTPS origin people open, for example https://qa.example.com.`,children:(0,P.jsx)(r,{type:`url`,inputMode:`url`,autoCapitalize:`off`,spellCheck:!1,placeholder:`https://`,value:s.values.url,onChange:e=>s.set(`url`)(e.target.value),onBlur:s.blur(`url`)})}),(0,P.jsx)(I,{form:s,connectLabel:`Save`})]})]})}function W({status:e,detected:n,onRedetect:r,detecting:i}){let a=n?.docker,o=a?a.ok:e.state===`ready`;return(0,P.jsxs)(`div`,{className:`cx-flow`,children:[(0,P.jsxs)(`div`,{className:`cx-callout${o?` cx-callout--ok`:``}`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsx)(`strong`,{children:o?`Docker is reachable.`:`Docker is not reachable.`}),(0,P.jsx)(`span`,{children:a?.detail||e.detail})]}),(0,P.jsx)(c,{variant:`secondary`,icon:(0,P.jsx)(t,{size:14}),loading:i,onClick:r,children:`Retry`})]}),(0,P.jsxs)(`p`,{className:`cx-note`,children:[o?`Dots can use the docker runner mode. Each run gets a fresh Playwright container.`:`Runs still work in local or demo mode. Start Docker Desktop or the Docker daemon on this server, then retry.`,` `,!o&&(0,P.jsx)(C,{href:v.dockerInstall,children:`Get Docker`})]})]})}function G({status:e}){return(0,P.jsxs)(`div`,{className:`cx-flow`,children:[(0,P.jsx)(`p`,{className:`cx-note`,children:e.detail}),(0,P.jsxs)(`p`,{className:`cx-note`,children:[`Web push keys are made on first start, so there is nothing to paste. Turn on alerts for this device in `,(0,P.jsx)(`a`,{href:`#/settings`,children:`Settings`}),`. On iPhone, add the app to the Home Screen first.`]})]})}var K={autoComplete:`off`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,"data-1p-ignore":!0,"data-lpignore":`true`,"data-form-type":`other`};function q({status:e,onSaved:t,defaultUrl:i}){let a=t=>{let n=e.fields?.find(e=>e.key===t);return n?.source===`stored`&&n.updatedAt?n.value??``:``},o=F(`aivision`,`server`,{serverUrl:a(`AIVISION_SERVER_URL`)||i||``,token:``,checkout:a(`AIVISION_CHECKOUT`)},{serverUrl:u.aivisionUrl,checkout:u.absolutePath},{prepare:e=>({...e,serverUrl:e.serverUrl.trim().replace(/\/+$/,``),checkout:e.checkout.trim()}),keep:e.secretHint?[`token`]:[]}),[s,l]=(0,A.useState)(!1),d=k(e.secretHint),f=(0,A.useRef)(null),p=()=>{o.save(t,`AI-Vision`),requestAnimationFrame(()=>f.current?.querySelector(`[aria-invalid="true"]`)?.focus())},m=e=>{e.key===`Enter`&&(e.preventDefault(),p())};return(0,P.jsxs)(`div`,{className:`cx-form`,role:`group`,"aria-label":`AI-Vision server`,ref:f,children:[(0,P.jsx)(n,{label:`Server address`,error:o.errors.serverUrl,hint:`Where the AI-Vision server listens, for example http://localhost:5880.`,children:(0,P.jsx)(r,{type:`text`,inputMode:`url`,name:`aivision-address`,...K,placeholder:`http://localhost:5880`,value:o.values.serverUrl,onChange:e=>o.set(`serverUrl`)(e.target.value),onBlur:o.blur(`serverUrl`),onKeyDown:m,"data-autofocus":!0})}),(0,P.jsx)(n,{label:`Access token`,hint:d?(0,P.jsxs)(P.Fragment,{children:[`Saved token ends in `,d.slice(-4),`. Leave this empty to keep it.`]}):`Only when the server asks for sign-in.`,children:(0,P.jsxs)(`div`,{className:`cx-secret`,children:[(0,P.jsx)(r,{type:`text`,name:`aivision-access`,className:[`cx-secret__input`,s?``:`cx-masked`].filter(Boolean).join(` `),...K,placeholder:d?`Saved ${d}`:`Optional`,value:o.values.token,onChange:e=>o.set(`token`)(e.target.value),onKeyDown:m}),(0,P.jsxs)(`button`,{type:`button`,className:`cx-secret__toggle`,onClick:()=>l(e=>!e),"aria-pressed":s,children:[s?`Hide`:`Show`,(0,P.jsx)(`span`,{className:`sr-only`,children:` access token`})]})]})}),(0,P.jsx)(n,{label:`AI-Vision folder`,error:o.errors.checkout,hint:`Optional. Where AI-Vision is installed on this machine. Lets dots use its tools in chat.`,children:(0,P.jsx)(r,{type:`text`,name:`aivision-folder`,...K,placeholder:`/Users/me/code/aivision`,value:o.values.checkout,onChange:e=>o.set(`checkout`)(e.target.value),onBlur:o.blur(`checkout`),onKeyDown:m})}),(0,P.jsxs)(`div`,{className:`cx-form__actions`,children:[(0,P.jsx)(g,{result:o.result,pending:o.testing}),(0,P.jsxs)(`div`,{className:`cx-form__buttons`,children:[(0,P.jsx)(c,{variant:`secondary`,onClick:()=>void o.test(),loading:o.testing,disabled:o.saving,children:`Test`}),(0,P.jsx)(c,{variant:`primary`,onClick:p,loading:o.saving,children:`Connect`})]})]})]})}var J={model:B,github:ee,linear:te,jira:ne,slack:V,voice:H,publicUrl:U,sandbox:W,push:G,aivision:q},Y=e=>e instanceof DOMException&&e.name===`AbortError`;function X(){let e=(0,A.useRef)(0),t=(0,A.useRef)(null),n=(0,A.useRef)(!1),r=(0,A.useRef)(!1);return(0,A.useEffect)(()=>()=>{e.current++,t.current?.abort()},[]),(0,A.useCallback)(async(i,a)=>{if(a===`poll`&&(n.current||r.current))return;t.current?.abort();let o=new AbortController;t.current=o;let s=++e.current,c=a===`action`?n:r;c.current=!0;try{let t=await i(o.signal);return s===e.current?t:void 0}catch(t){if(s!==e.current||Y(t))return;throw t}finally{(a===`poll`||s===e.current)&&(c.current=!1)}},[])}function re(e){let{status:t,onChanged:n}=e,r=t.local??{},i=t.source===`detected`?r.server:void 0,a=!i&&r.server?.needsToken?r.server:void 0,o=!i&&!a&&r.server?.unhealthy?r.server:void 0,s=r.managed,l=M(N(r,t.source===`detected`)),u=l.starting,[d,f]=(0,A.useState)(!1),[p,m]=(0,A.useState)(null),[h,v]=(0,A.useState)(null),y=(0,A.useRef)(u),b=X();(0,A.useEffect)(()=>{if(!u)return;let e=setInterval(()=>{b(e=>_.aivisionDetect(e),`poll`).then(e=>{e&&n(e,``)}).catch(()=>void 0)},2e3);return()=>clearInterval(e)},[u,n,b]),(0,A.useEffect)(()=>{y.current&&!u&&s?.state===`running`&&t.source===`detected`&&r.server&&n(null,`AI-Vision started and connected.`),y.current=u},[u,s?.state,t.source,r.server,n]);let x=async e=>{m(e),v(null);try{let t=await b(t=>e===`start`?_.aivisionStart(t):e===`stop`?_.aivisionStop(t):_.aivisionDetect(t),`action`);if(!t)return;let r=e===`stop`&&t.local?.managed?.state===`failed`;n(t,e===`stop`&&!r?`AI-Vision stopped.`:``),r&&v({ok:!1,message:t.local?.managed?.error??`AI-Vision did not stop.`}),e===`check`&&!t.local?.server&&!t.local?.checkout&&v({ok:!1,message:`Still nothing found on this Mac.`})}catch(e){v({ok:!1,message:w(e)})}finally{m(null)}},S=(e,t=!1)=>(0,P.jsx)(ie,{actions:l,busy:p,startNote:e,primary:t,onAct:e=>void x(e)}),C=r.dots,T=r.checkout?`Or start the copy installed in ${r.checkout}.`:void 0;return(0,P.jsxs)(`div`,{className:`cx-flow`,children:[i?(0,P.jsxs)(`section`,{className:`cx-callout cx-callout--ok cx-callout--stack`,"aria-label":`AI-Vision found`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsx)(`strong`,{children:`localdost found AI-Vision running on this Mac.`}),(0,P.jsx)(`span`,{children:`Runs vision tests that check what a user sees. Nothing to enter.`})]}),(0,P.jsxs)(`dl`,{className:`cx-facts`,children:[i.version&&(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`dt`,{children:`Version`}),(0,P.jsx)(`dd`,{children:i.version})]}),r.checkout&&(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`dt`,{children:`Installed in`}),(0,P.jsx)(`dd`,{className:`cx-mono`,children:r.checkout})]}),C&&C.mcp+C.cases>0&&(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`dt`,{children:`Dots`}),(0,P.jsxs)(`dd`,{children:[Q(C.cases,`dot`),` `,C.cases===1?`runs`:`run`,` vision tests, `,Q(C.mcp,`dot`),` can use its tools in chat`]})]})]}),S()]}):a?(0,P.jsxs)(`section`,{className:`cx-callout cx-callout--stack`,"aria-label":`AI-Vision asks for sign-in`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsx)(`strong`,{children:`localdost found AI-Vision on this Mac, but it asks for sign-in.`}),(0,P.jsx)(`span`,{children:`Add its access token below to connect.`}),(0,P.jsx)(`span`,{className:`cx-mono`,children:a.url})]}),S(T)]}):o?(0,P.jsxs)(`section`,{className:`cx-callout cx-callout--stack`,"aria-label":`AI-Vision reports a failed check`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsx)(`strong`,{children:`localdost found AI-Vision on this Mac, but it reports a failed check.`}),(0,P.jsxs)(`span`,{children:[o.failedChecks?.length?`Failed: ${o.failedChecks.join(`, `)}.`:`Its health check says it is not ready.`,` localdost connects once it passes.`]}),(0,P.jsx)(`span`,{className:`cx-mono`,children:o.url})]}),S(T),r.logTail&&r.logTail.length>0&&(0,P.jsxs)(`details`,{className:`cx-log`,children:[(0,P.jsx)(`summary`,{children:`Last lines from AI-Vision`}),(0,P.jsx)(`pre`,{children:r.logTail.join(`
|
|
2
|
+
`)})]})]}):r.checkout?(0,P.jsxs)(`section`,{className:`cx-callout cx-callout--stack`,"aria-label":`AI-Vision is not running`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsx)(`strong`,{children:u?`Starting AI-Vision...`:s?.state===`running`?`localdost started AI-Vision, but it does not answer yet.`:`AI-Vision is installed on this Mac, but not running.`}),(0,P.jsx)(`span`,{className:`cx-mono`,children:r.checkout})]}),S(l.start?`localdost starts it, connects when it answers, and stops it on exit.`:void 0,!0),s?.state===`failed`&&r.logTail&&r.logTail.length>0&&(0,P.jsxs)(`details`,{className:`cx-log`,children:[(0,P.jsx)(`summary`,{children:`Last lines from AI-Vision`}),(0,P.jsx)(`pre`,{children:r.logTail.join(`
|
|
3
|
+
`)})]})]}):(0,P.jsxs)(`section`,{className:`cx-callout cx-callout--stack`,"aria-label":`AI-Vision not found`,children:[(0,P.jsxs)(`div`,{className:`cx-callout__text`,children:[(0,P.jsx)(`strong`,{children:`localdost did not find AI-Vision on this Mac.`}),(0,P.jsx)(`span`,{children:`Start the AI-Vision server and check again, or enter the address of a server below.`})]}),S()]}),(0,P.jsx)(g,{result:h??(s?.state===`failed`&&!u?{ok:!1,message:s.error??`AI-Vision did not start.`}:null)}),(i||r.checkout)&&!a?d?(0,P.jsxs)(`section`,{className:`cx-section`,"aria-label":`Different server`,children:[(0,P.jsxs)(`div`,{className:`cx-section__head`,children:[(0,P.jsx)(`h3`,{className:`cx-section__title`,children:`Use a different server`}),(0,P.jsx)(c,{size:`sm`,variant:`ghost`,onClick:()=>f(!1),children:`Cancel`})]}),(0,P.jsx)(q,{...e})]}):(0,P.jsx)(`button`,{type:`button`,className:`cx-linkbtn`,onClick:()=>f(!0),children:`Use a different server`}):(0,P.jsx)(q,{...e,defaultUrl:a?.url},a?.url??`none`)]})}function ie({actions:e,busy:n,startNote:r,primary:i,onAct:a}){let o=e.start||e.starting;return(0,P.jsxs)(P.Fragment,{children:[(o||e.check)&&(0,P.jsxs)(`div`,{className:`cx-callout__row`,children:[o&&(0,P.jsx)(c,{variant:i?`primary`:`secondary`,loading:n===`start`||e.starting,onClick:()=>a(`start`),children:`Start AI-Vision`}),e.check&&(0,P.jsx)(c,{variant:`secondary`,icon:(0,P.jsx)(t,{size:14}),loading:n===`check`,onClick:()=>a(`check`),children:`Check again`}),e.start&&r&&(0,P.jsx)(`span`,{className:`cx-note`,children:r})]}),e.stop&&(0,P.jsx)(Z,{busy:n===`stop`,onStop:()=>a(`stop`)})]})}function Z({busy:e,onStop:t}){return(0,P.jsxs)(`div`,{className:`cx-callout__row`,children:[(0,P.jsx)(`span`,{className:`cx-note`,children:`Started by localdost. It stops when localdost stops.`}),(0,P.jsx)(c,{size:`sm`,variant:`secondary`,loading:e,onClick:t,children:`Stop AI-Vision`})]})}function ae({managed:e,onChanged:t}){let[n,r]=(0,A.useState)(!1),[i,a]=(0,A.useState)(null),o=async()=>{r(!0),a(null);try{let e=await _.aivisionStop();t(e,e.local?.managed?.state===`failed`?``:`AI-Vision stopped.`)}catch(e){a({ok:!1,message:w(e)})}finally{r(!1)}};return(0,P.jsxs)(`section`,{className:`cx-callout cx-callout--stack`,"aria-label":`AI-Vision started by localdost`,children:[(e.state===`running`||e.state===`starting`)&&(0,P.jsx)(Z,{busy:n,onStop:()=>void o()}),(0,P.jsx)(g,{result:i??(e.state===`failed`?{ok:!1,message:e.error??`AI-Vision stopped.`}:null)})]})}function Q(e,t){return`${e} ${t}${e===1?``:`s`}`}function oe(e){let{status:t,open:n,onClose:r}=e;if(!t)return null;let i=O(t),a=i===`connected`||i===`env`||f.has(t.key)?t.label:`Connect ${t.label}`;return(0,P.jsx)(o,{side:`right`,open:n,onClose:r,title:a,className:`cx-sheet`,description:`${t.label} connection`,hideDescription:!0,children:n&&(0,P.jsx)(se,{...e,status:t},t.key)})}function se({status:e,detected:t,detecting:n,onRedetect:r,onChanged:i}){let[a,o]=(0,A.useState)(!1),s=O(e),l=s===`connected`||s===`env`,u=e.source===`env`,d=J[e.key],p=e.key===`aivision`&&!u&&e.source!==`stored`,h={status:e,detected:t,detecting:n,onRedetect:r,onSaved:(e,t)=>{o(!1);let n=e.warnings?.filter(Boolean)??[];n.length?i(e,`Saved, but ${n.join(` `)}`,`error`):i(e,t)}};return(0,P.jsxs)(`div`,{className:`cx-sheet__body`,children:[(0,P.jsx)(ce,{status:e,onChanged:i}),u&&(0,P.jsx)(le,{status:e}),l&&(0,P.jsx)(ue,{status:e,onChanged:i}),l&&e.key===`github`&&(0,P.jsx)(de,{status:e}),e.key===`model`&&(0,P.jsx)(S,{onSwitched:(e,t)=>i(e,t)}),p&&(0,P.jsx)(re,{...h,onChanged:i}),e.key===`aivision`&&!p&&e.local?.managed&&e.local.managed.state!==`stopped`&&(0,P.jsx)(ae,{managed:e.local.managed,onChanged:i}),!p&&(f.has(e.key)||!l&&!u)&&(0,P.jsx)(d,{...h}),!p&&l&&!u&&!f.has(e.key)&&(0,P.jsx)(`section`,{className:`cx-section`,"aria-label":`Change connection`,children:a?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`div`,{className:`cx-section__head`,children:[(0,P.jsx)(`h3`,{className:`cx-section__title`,children:`Change connection`}),(0,P.jsx)(c,{size:`sm`,variant:`ghost`,onClick:()=>o(!1),children:`Cancel`})]}),(0,P.jsx)(d,{...h})]}):(0,P.jsx)(c,{variant:`secondary`,onClick:()=>o(!0),children:`Change connection`})}),(e.source===`stored`||e.hasSaved&&!u)&&(0,P.jsx)(fe,{status:e,onChanged:i}),(0,P.jsx)(`footer`,{className:`cx-sheet__foot`,children:(0,P.jsxs)(`a`,{className:`cx-linkbtn`,href:m(e),children:[`Read the `,e.label,` guide`]})})]})}function ce({status:e,onChanged:t}){let n=O(e),[r,i]=(0,A.useState)(null),[a,o]=(0,A.useState)(!1),[s,l]=(0,A.useState)(!1),u=n===`connected`||n===`env`||n===`error`&&e.key!==`sandbox`,d=e.key===`publicUrl`&&!!e.account&&/^https?:/i.test(e.account);return(0,P.jsxs)(`section`,{className:`cx-summary`,"aria-label":`Status`,children:[(0,P.jsxs)(`div`,{className:`cx-summary__head`,children:[(0,P.jsx)(E,{provider:e.key,method:e.method,size:`lg`}),(0,P.jsxs)(`div`,{className:`cx-summary__text`,children:[(0,P.jsx)(b,{state:n}),f.has(e.key)||n===`error`&&!e.account?null:e.account?(0,P.jsx)(`span`,{className:[`cx-summary__account`,d?`cx-mono`:``].filter(Boolean).join(` `),children:e.account}):e.detail&&e.detail.trim().toLowerCase()!==`not connected`?(0,P.jsx)(`span`,{className:`cx-summary__detail`,children:e.detail}):null]})]}),n===`error`&&e.detail&&(0,P.jsx)(`p`,{className:`cx-summary__error`,role:`alert`,children:e.detail}),(e.secretHint||e.checkedAt)&&(0,P.jsxs)(`dl`,{className:`cx-facts`,children:[e.secretHint&&(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`dt`,{children:`Saved secret`}),(0,P.jsx)(`dd`,{className:`cx-mono`,children:k(e.secretHint)})]}),e.checkedAt&&(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`dt`,{children:`Last test`}),(0,P.jsx)(`dd`,{children:pe(e.checkedAt)})]})]}),(u||d)&&(0,P.jsxs)(`div`,{className:`cx-summary__actions`,children:[u&&(0,P.jsx)(c,{variant:`secondary`,loading:a,onClick:async()=>{o(!0);try{i(await _.test(e.key))}catch(e){i({ok:!1,message:w(e)})}finally{o(!1)}},children:`Test`}),d&&(0,P.jsx)(y,{text:e.account,label:`Copy URL`,size:`md`}),d&&e.method===`tunnel`&&e.source!==`env`&&(0,P.jsx)(c,{variant:`secondary`,loading:s,onClick:async()=>{l(!0);try{await _.stopTunnel(),t(null,`Tunnel stopped.`)}catch(e){i({ok:!1,message:w(e)})}finally{l(!1)}},children:`Stop tunnel`})]}),(0,P.jsx)(g,{result:r,pending:a})]})}function le({status:e}){let t=e.envVars??[];return(0,P.jsxs)(`section`,{className:`cx-env`,"aria-label":`Set by environment`,children:[(0,P.jsxs)(`p`,{children:[(0,P.jsx)(`strong`,{children:`Set by environment.`}),` Environment variables win over anything saved here, so this connection is read-only in the app. To manage it here, remove the `,t.length===1?`variable`:`variables`,` and restart the server.`]}),t.length>0&&(0,P.jsx)(`ul`,{className:`cx-env__vars`,children:t.map(e=>(0,P.jsx)(`li`,{children:(0,P.jsx)(`code`,{className:`cx-code`,children:e})},e))})]})}function ue({status:e,onChanged:t}){let n=e.settings??{},r=e=>typeof n[e]==`string`?n[e]:``,[i,a]=(0,A.useState)({}),[o,s]=(0,A.useState)(!1),[l,u]=(0,A.useState)(null),d=e=>{let t=e in i?i[e]:n[e];return Array.isArray(t)?t:t?[t]:[]},f=Object.keys(i).length>0,m=(e,t,n=!1,r={})=>a(i=>({...i,[e]:n?t:t[0]??``,...r})),h;switch(e.key){case`github`:h=(0,P.jsx)(p,{provider:`github`,kind:`repos`,label:`Repositories`,multiple:!0,value:d(`repos`),onChange:e=>m(`repos`,e,!0),empty:`No repositories are visible to this connection. Install the app on a repo, or give the token access.`});break;case`linear`:{let e=d(`teamId`)[0]??r(`teamId`);h=(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(p,{provider:`linear`,kind:`teams`,label:`Team`,value:d(`teamId`),onChange:(e,t)=>m(`teamId`,e,!1,{teamName:t[0]?.label??``,projectId:``}),empty:`This key sees no teams.`}),e&&(0,P.jsx)(p,{provider:`linear`,kind:`projects`,parent:e,label:`Project (optional)`,value:d(`projectId`),onChange:e=>m(`projectId`,e),empty:`This team has no projects.`})]});break}case`jira`:h=(0,P.jsx)(p,{provider:`jira`,kind:`projects`,label:`Project`,value:d(`projectKey`),onChange:e=>m(`projectKey`,e),empty:`This account sees no projects.`});break;case`slack`:h=(0,P.jsx)(p,{provider:`slack`,kind:`channels`,label:`Notices channel`,value:d(`channel`),onChange:e=>m(`channel`,e),empty:`The bot sees no channels. Invite it with /invite in a channel, then retry.`});break;default:return null}return(0,P.jsxs)(`section`,{className:`cx-section`,"aria-label":`Choices`,children:[h,l&&(0,P.jsx)(`p`,{className:`field__error`,role:`alert`,children:l}),f&&(0,P.jsxs)(`div`,{className:`cx-form__buttons`,children:[(0,P.jsx)(c,{variant:`ghost`,onClick:()=>a({}),disabled:o,children:`Discard`}),(0,P.jsx)(c,{variant:`primary`,loading:o,onClick:async()=>{s(!0),u(null);try{let n=await _.saveSettings(e.key,i);a({}),t(n,`${e.label} choices saved.`)}catch(e){u(w(e))}finally{s(!1)}},children:`Save choices`})]})]})}function de({status:e}){let t=Array.isArray(e.settings?.repos)?e.settings.repos.slice(0,3):[];return(0,P.jsxs)(`section`,{className:`cx-section`,"aria-label":`Create a dot`,children:[(0,P.jsx)(`h3`,{className:`cx-section__title`,children:`Next: create a dot`}),(0,P.jsx)(`p`,{className:`cx-section__hint`,children:`A dot takes its test command, setup steps, and tracker from the repo and this page.`}),(0,P.jsx)(`div`,{className:`cx-dotlinks`,children:t.length?t.map(e=>(0,P.jsx)(`a`,{className:`btn btn--secondary btn--md`,href:`#/dots?new=1&repo=${encodeURIComponent(e)}`,children:(0,P.jsxs)(`span`,{className:`btn__label`,children:[`Create a dot for `,e]})},e)):(0,P.jsx)(`a`,{className:`btn btn--primary btn--md`,href:`#/dots?new=1`,children:(0,P.jsx)(`span`,{className:`btn__label`,children:`Create a dot for a repo`})})})]})}function fe({status:e,onChanged:t}){let[n,r]=(0,A.useState)(!1);return(0,P.jsxs)(`section`,{className:`cx-danger`,"aria-label":`Disconnect`,children:[(0,P.jsxs)(`div`,{className:`cx-danger__text`,children:[(0,P.jsxs)(`strong`,{children:[`Disconnect `,e.label]}),(0,P.jsxs)(`span`,{children:[`Deletes the saved credentials from this server. Features that need `,e.label,` go back to demo mode or turn off.`]})]}),(0,P.jsx)(c,{variant:`danger`,onClick:()=>r(!0),children:`Disconnect`}),(0,P.jsx)($,{status:e,open:n,onCancel:()=>r(!1),onDone:n=>t(n,`${e.label} disconnected.`)})]})}function $({status:t,open:n,onCancel:r,onDone:i}){let[a,o]=(0,A.useState)(!1),[s,l]=(0,A.useState)(null);return(0,P.jsx)(e,{open:n,onClose:()=>{l(null),r()},role:`alertdialog`,size:`sm`,title:`Disconnect ${t.label}?`,description:`The saved credentials are deleted from this server. You can connect again at any time.`,initialFocus:`[data-cancel]`,footer:(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(c,{variant:`secondary`,"data-cancel":!0,onClick:r,children:`Cancel`}),(0,P.jsx)(c,{variant:`danger`,loading:a,onClick:async()=>{o(!0),l(null);try{let e=await _.disconnect(t.key);r(),i(e)}catch(e){l(w(e))}finally{o(!1)}},children:`Disconnect`})]}),children:s&&(0,P.jsx)(`p`,{className:`field__error`,role:`alert`,children:s})})}function pe(e){let t=Date.parse(e);return Number.isNaN(t)?e:new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`}).format(t)}export{$ as n,oe as t};
|
|
4
|
+
//# sourceMappingURL=ConnectSheet-Cm5vbZdR.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{B as e,Cn as t,F as n,G as r,H as i,L as a,Mn as o,Vn as s,Wn as c,mn as l,q as u}from"./ui-DcmhYyYp.js";import{r as d}from"./router-W6nZsQ33.js";import{i as f}from"./store-IqrqHuFR.js";import{a as p,o as m,r as h,s as g,t as _}from"./useRefChips-CbafNx59.js";var v=c(s(),1),y=`doc-`;function b(e){return e.trim().toLowerCase().replace(/<[^>]*>/g,``).replace(/[^\p{L}\p{M}\p{N}\s_-]/gu,``).replace(/\s/g,`-`)}function x(e,t){return`#/docs/${encodeURIComponent(e)}${t?`#${encodeURIComponent(t)}`:``}`}function S(e){return e===`readme`?``:`docs/`}function C(e){let t=[];for(let n of e.split(`/`))if(n&&n!==`.`){if(n===`..`){if(!t.length)return null;t.pop()}else t.push(n)}return t.join(`/`)}function w(e){if(/^readme\.md$/i.test(e))return`readme`;let t=/^docs\/([A-Za-z0-9-]+)\.md$/.exec(e);return t?t[1].toLowerCase():null}function T(e,t){let n=p(e);if(!n)return{kind:`text`};if(/^(https?:|mailto:)/i.test(n))return{kind:`external`,href:n};if(n.startsWith(`#/`))return{kind:`route`,href:n};if(n.startsWith(`#`))return n.length>1?{kind:`route`,href:x(t,n.slice(1))}:{kind:`text`};if(n.startsWith(`/`))return{kind:`text`};let r=n.indexOf(`#`),i=r<0?n:n.slice(0,r),a=r<0?void 0:n.slice(r+1)||void 0,o=C(S(t)+i.split(`?`)[0]),s=o===null?null:w(o);return s?{kind:`route`,href:x(s,a)}:{kind:`text`}}var E=/^\s*(?:(?:<\/?[a-z][a-z0-9-]*(?:\s[^<>]*)?>|<!--[\s\S]*?-->)\s*)+$/i;function D(e,t){let n=new Map,r=[],i=new m({gfm:!0,async:!1,renderer:{html({text:e,block:t}){return t&&E.test(e)?``:h(e)},heading({tokens:e,depth:i}){let a=this.parser.parseInline(e),o=this.parser.parseInline(e,new g),s=b(o)||`section`,c=n.get(s)??0;n.set(s,c+1);let l=c?`${s}-${c}`:s;r.push({id:l,text:o.replace(/<[^>]*>/g,``).trim(),depth:i});let u=h(x(t,l));return`<h${i} id="${y}${h(l)}" class="doc-h" tabindex="-1"><span class="doc-h__text">${a}</span><a class="doc-h__anchor" href="${u}" aria-label="Link to this section">#</a></h${i}>\n`},link({href:e,title:n,tokens:r}){let i=this.parser.parseInline(r),a=T(e,t);if(a.kind===`text`)return`<span class="doc-link-text">${i}</span>`;let o=n?` title="${h(n)}"`:``;return a.kind===`route`?`<a href="${h(a.href)}"${o}>${i}</a>`:`<a href="${h(a.href)}"${o} target="_blank" rel="noopener noreferrer">${i}<span class="sr-only"> (opens in a new tab)</span></a>`},image({text:e}){return h(e)},code({text:e,lang:t}){let n=(t??``).trim().split(/\s+/)[0];return`<div class="doc-code"><div class="doc-code__bar">${n?`<span class="doc-code__lang">${h(n)}</span>`:``}<button type="button" class="doc-code__copy" data-copy>Copy</button></div><pre><code${n?` class="language-${h(n)}"`:``}>${h(e)}</code></pre></div>\n`}}}),a;try{a=i.parse(e)}catch{a=`<pre>${h(e)}</pre>`}return{html:a,headings:r}}var O=l();function k(e){let t=document.getElementById(`doc-`+e)??document.getElementById(`doc-`+b(e));return t?(t.scrollIntoView?.({block:`start`}),t.focus({preventScroll:!0}),!0):!1}async function A(e){try{return await navigator.clipboard.writeText(e),!0}catch{let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n;try{n=document.execCommand(`copy`)}catch{n=!1}return t.remove(),n}}function j({html:e,anchor:t}){let n=u(),r=(0,v.useRef)(new Map);(0,v.useEffect)(()=>{if(!t)return;let e=requestAnimationFrame(()=>{k(t)});return()=>cancelAnimationFrame(e)},[e,t]),(0,v.useEffect)(()=>{let e=r.current;return()=>{for(let t of e.values())clearTimeout(t)}},[]);let i=(0,v.useCallback)(e=>{let t=e.target,i=t.closest(`[data-copy]`);if(i){A(i.closest(`.doc-code`)?.querySelector(`code`)?.textContent??``).then(e=>{if(!e){n.show({tone:`error`,title:`Could not copy`,body:`Select the text and copy it by hand.`});return}i.textContent=`Copied`;let t=r.current.get(i);t&&clearTimeout(t),r.current.set(i,window.setTimeout(()=>{i.textContent=`Copy`,r.current.delete(i)},1500))});return}let a=t.closest(`a[href^="#/docs/"]`);if(a&&a.getAttribute(`href`)===location.hash){let t=location.hash.indexOf(`#`,1),n=t>0?location.hash.slice(t+1):``;try{n=decodeURIComponent(n)}catch{}n&&k(n)&&e.preventDefault()}},[n]),{ref:a,chips:o}=_(e);return(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`article`,{ref:a,className:`md doc-md`,onClick:i,dangerouslySetInnerHTML:{__html:e}}),o]})}var M=[{key:`guide`,label:`Guides`},{key:`reference`,label:`Reference`}];function N(){let t=e(1e3);return(0,O.jsx)(`div`,{className:`docs-nav__skeleton`,role:`status`,"aria-label":`Loading docs`,"aria-busy":`true`,children:t&&Array.from({length:8},(e,t)=>(0,O.jsx)(a,{width:`${50+t*17%40}%`,height:12},t))})}function P({docs:e,loading:t,failed:n,current:r,headings:i,anchor:a}){let o=i.filter(e=>e.depth===2);return(0,O.jsxs)(`nav`,{className:`docs-nav`,"aria-label":`Docs`,children:[t&&!e?(0,O.jsx)(N,{}):null,n&&!e?(0,O.jsx)(`p`,{className:`docs-nav__note`,children:`Could not load the list of docs.`}):null,e&&M.map(t=>{let n=e.filter(e=>e.group===t.key);return n.length?(0,O.jsxs)(`div`,{className:`docs-nav__group`,children:[(0,O.jsx)(`h2`,{className:`docs-nav__heading`,children:t.label}),(0,O.jsx)(`ul`,{className:`docs-nav__list`,children:n.map(e=>{let t=e.name===r;return(0,O.jsxs)(`li`,{children:[(0,O.jsx)(`a`,{className:`docs-nav__link`,href:x(e.name),"aria-current":t?`page`:void 0,children:e.title}),t&&o.length>1&&(0,O.jsx)(`ul`,{className:`docs-nav__sections`,"aria-label":`Sections of ${e.title}`,children:o.map(t=>(0,O.jsx)(`li`,{children:(0,O.jsx)(`a`,{className:`docs-nav__section`,href:x(e.name,t.id),"aria-current":a===t.id?`location`:void 0,children:t.text})},t.id))})]},e.name)})})]},t.key):null})]})}function F({docs:e,current:t,headings:r,anchor:i}){let a=r.filter(e=>e.depth===2),o=e??[],s=o.some(e=>e.name===t);return(0,O.jsxs)(`div`,{className:`docs-picker`,children:[(0,O.jsxs)(`label`,{className:`docs-picker__field`,children:[(0,O.jsx)(`span`,{className:`docs-picker__label`,children:`Doc`}),(0,O.jsxs)(n,{value:t,onChange:e=>d(x(e.target.value)),children:[!s&&(0,O.jsx)(`option`,{value:t,children:t}),M.map(e=>{let t=o.filter(t=>t.group===e.key);return t.length?(0,O.jsx)(`optgroup`,{label:e.label,children:t.map(e=>(0,O.jsx)(`option`,{value:e.name,children:e.title},e.name))},e.key):null})]})]}),a.length>1&&(0,O.jsxs)(`label`,{className:`docs-picker__field`,children:[(0,O.jsx)(`span`,{className:`docs-picker__label`,children:`Section`}),(0,O.jsxs)(n,{value:a.some(e=>e.id===i)?i:``,onChange:e=>d(x(t,e.target.value||void 0)),children:[(0,O.jsx)(`option`,{value:``,children:`Top of page`}),a.map(e=>(0,O.jsx)(`option`,{value:e.id,children:e.text},e.id))]})]})]})}var I=`setup`;function L(){return f(`docs:list`,e=>o(`/docs`,{signal:e}))}function R(e){return f(`docs:${e}`,t=>o(`/docs/${encodeURIComponent(e)}`,{signal:t}))}function z(){let t=e(1e3);return(0,O.jsx)(`div`,{className:`docs-skeleton`,role:`status`,"aria-label":`Loading doc`,"aria-busy":`true`,children:t&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(a,{width:`40%`,height:24}),Array.from({length:3},(e,t)=>(0,O.jsxs)(`div`,{className:`docs-skeleton__block`,children:[(0,O.jsx)(a,{width:`30%`,height:16}),(0,O.jsx)(a,{width:`96%`,height:10}),(0,O.jsx)(a,{width:`88%`,height:10}),(0,O.jsx)(a,{width:`${50+t*12}%`,height:10})]},t))]})})}function B({doc:e,anchor:n}){let a=(e??`setup`).toLowerCase().replace(/\.md$/,``),o=L(),s=R(a),c=(0,v.useMemo)(()=>s.data?D(s.data.markdown,s.data.name):null,[s.data]),l=c?.headings??[],u=o.data?.docs,d=s.error instanceof t&&s.error.status===404;return(0,O.jsxs)(`div`,{className:`page docs-page`,children:[(0,O.jsx)(`h1`,{className:`sr-only`,children:`Docs`}),(0,O.jsxs)(`div`,{className:`docs-layout`,children:[(0,O.jsx)(P,{docs:u,loading:o.loading,failed:!!o.error,current:a,headings:l,anchor:n}),(0,O.jsxs)(`div`,{className:`docs-main`,children:[(0,O.jsx)(F,{docs:u,current:a,headings:l,anchor:n}),c?(0,O.jsxs)(O.Fragment,{children:[s.error?(0,O.jsx)(i,{compact:!0,title:`Could not refresh this doc. Showing the last copy.`,error:s.error,onRetry:()=>void s.reload()}):null,(0,O.jsx)(j,{html:c.html,anchor:n})]}):d?(0,O.jsx)(r,{kind:`filtered`,title:`This doc does not exist`,body:`There is no doc named "${a}" in this install.`,action:(0,O.jsx)(`a`,{href:x(I),children:`Open the Setup guide`})}):s.loading?(0,O.jsx)(z,{}):(0,O.jsx)(i,{title:`Could not load this doc`,error:s.error,onRetry:()=>void s.reload()})]})]})]})}export{B as default};
|
|
2
|
+
//# sourceMappingURL=Docs-HKGuY0WE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.docs-page{max-width:1120px}.docs-layout{display:block}.docs-main{min-width:0}.docs-nav{display:none}.docs-picker{gap:var(--space-3);margin-bottom:var(--space-5);grid-template-columns:repeat(auto-fit,minmax(160px,1fr));display:grid}.docs-picker__field{gap:var(--space-1);flex-direction:column;min-width:0;display:flex}.docs-picker__label{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-2)}@media (min-width:900px){.docs-layout{gap:var(--space-8);grid-template-columns:220px minmax(0,1fr);align-items:start;display:grid}.docs-picker{display:none}.docs-nav{top:var(--space-6);max-height:calc(100dvh - var(--space-12));overscroll-behavior:contain;padding-right:var(--space-2);display:block;position:sticky;overflow-y:auto}}.docs-nav__group+.docs-nav__group{margin-top:var(--space-5)}.docs-nav__heading{margin-bottom:var(--space-1);padding:0 var(--space-2);font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-3);text-transform:uppercase;letter-spacing:.04em}.docs-nav__list,.docs-nav__sections{margin:0;padding:0;list-style:none}.docs-nav__link,.docs-nav__section{padding:var(--space-1) var(--space-2);border-radius:var(--radius);color:var(--text-2);font-size:var(--text-md);line-height:var(--leading-tight);text-wrap:balance;display:block}.docs-nav__link{min-height:var(--control);padding-top:7px;padding-bottom:7px}.docs-nav__link:hover,.docs-nav__section:hover{background:var(--surface-hover);color:var(--text);text-decoration:none}.docs-nav__link[aria-current=page]{background:var(--surface-selected);color:var(--text);font-weight:var(--weight-medium)}.docs-nav__sections{margin:var(--space-1) 0 var(--space-2) var(--space-3);padding-left:var(--space-2);border-left:var(--hairline)}.docs-nav__section{font-size:var(--text-sm);color:var(--text-3)}.docs-nav__section[aria-current=location]{color:var(--accent);font-weight:var(--weight-medium)}.docs-nav__note{padding:0 var(--space-2);font-size:var(--text-sm);color:var(--text-3)}.docs-nav__skeleton{gap:var(--space-3);padding:var(--space-2);flex-direction:column;display:flex}.docs-skeleton{gap:var(--space-6);flex-direction:column;display:flex}.docs-skeleton__block{gap:var(--space-2);flex-direction:column;display:flex}.doc-md{max-width:76ch;font-size:var(--text-md)}.doc-md>*+*{margin-top:var(--space-3)}.doc-md h1,.doc-md h2,.doc-md h3,.doc-md h4{line-height:var(--leading-tight);text-wrap:balance;scroll-margin-top:var(--space-4)}.doc-md h1{font-size:var(--text-2xl)}.doc-md h2{margin-top:var(--space-8);padding-top:var(--space-4);border-top:var(--hairline);font-size:var(--text-xl)}.doc-md h3{margin-top:var(--space-6);font-size:var(--text-lg)}.doc-md h4{margin-top:var(--space-5)}.doc-md>h1:first-child,.doc-md>h2:first-child{border-top:0;margin-top:0;padding-top:0}.doc-md .doc-h:focus{outline:none}.doc-md .doc-h:focus-visible{border-radius:var(--radius-sm);box-shadow:var(--focus-ring)}.doc-h__anchor{margin-left:var(--space-2);padding:0 var(--space-1);color:var(--text-3);font-weight:var(--weight-regular);opacity:0;text-decoration:none;display:inline-block}.doc-md .doc-h__anchor{color:var(--text-3);text-decoration:none}.doc-h:hover .doc-h__anchor,.doc-h__anchor:focus-visible{opacity:1}@media (hover:none){.doc-h__anchor{opacity:.6}}.doc-code{border:var(--hairline);border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden}.doc-code__bar{justify-content:space-between;align-items:center;gap:var(--space-2);min-height:var(--control);padding:0 var(--space-1) 0 var(--space-3);border-bottom:var(--hairline);display:flex}.doc-code__lang{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-3);-webkit-user-select:none;user-select:none}.doc-code__copy{min-height:var(--control-sm);padding:0 var(--space-2);border-radius:var(--radius-sm);color:var(--text-2);font-size:var(--text-sm);font-weight:var(--weight-medium);cursor:pointer;background:0 0;border:0;margin-left:auto}.doc-code__copy:hover{background:var(--surface-3);color:var(--text)}.doc-code__copy:focus-visible{box-shadow:var(--focus-ring);outline:none}.doc-md .doc-code pre{font-size:var(--text-sm);line-height:var(--leading);background:0 0;border-radius:0;margin:0}.doc-md table{font-size:var(--text-sm)}.doc-md th{background:var(--surface-2);font-weight:var(--weight-semibold)}.doc-md td code,.doc-md th code{white-space:nowrap}.doc-md hr{border:0;border-top:var(--hairline)}.doc-md th,.doc-md td{overflow-wrap:normal;vertical-align:top}.doc-md td:last-child{min-width:18ch}
|