@humwick/server 0.0.0-stage → 0.130.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/CLA.md +66 -0
- package/CONTRIBUTING.md +144 -0
- package/LICENSE +167 -0
- package/README.md +511 -2
- package/SECURITY.md +67 -0
- package/THIRD_PARTY_NOTICES.md +144 -0
- package/bundled/prompts/README.md +10 -0
- package/bundled/prompts/context.advisory.compact.md +1 -0
- package/bundled/prompts/context.advisory.warn.md +1 -0
- package/bundled/prompts/continuation.envelope.md +18 -0
- package/bundled/prompts/manifest.json +838 -0
- package/bundled/prompts/memory.capture.boundary.post.md +1 -0
- package/bundled/prompts/memory.capture.boundary.pre.md +1 -0
- package/bundled/prompts/memory.charter.md +3 -0
- package/bundled/prompts/memory.native-off.md +0 -0
- package/bundled/prompts/notify.agent.exited.md +1 -0
- package/bundled/prompts/notify.agent.never-ready.md +1 -0
- package/bundled/prompts/notify.agent.ready.md +1 -0
- package/bundled/prompts/notify.automation.budget-warning.md +1 -0
- package/bundled/prompts/notify.land.failure.md +1 -0
- package/bundled/prompts/notify.land.steward-taken.coordinator.md +1 -0
- package/bundled/prompts/notify.land.steward-taken.md +1 -0
- package/bundled/prompts/notify.land.success.md +1 -0
- package/bundled/prompts/notify.routing.policy-changed.md +2 -0
- package/bundled/prompts/notify.spawn.failed.md +1 -0
- package/bundled/prompts/notify.spawn.queued.md +1 -0
- package/bundled/prompts/notify.spawn.recovered.md +1 -0
- package/bundled/prompts/notify.spawn.unconfirmed.md +1 -0
- package/bundled/prompts/profile.coordinator.charter.md +17 -0
- package/bundled/prompts/profile.debugger.system.md +12 -0
- package/bundled/prompts/profile.device-qa.system.md +10 -0
- package/bundled/prompts/profile.image-gen.append.0.md +2 -0
- package/bundled/prompts/profile.image-gen.system.md +4 -0
- package/bundled/prompts/profile.ops-assistant.brief.md +4 -0
- package/bundled/prompts/profile.probe.system.md +5 -0
- package/bundled/prompts/profile.qa.system.md +10 -0
- package/bundled/prompts/profile.sec-ops.system.md +14 -0
- package/bundled/prompts/profile.social-media.system.md +7 -0
- package/bundled/prompts/profile.software-design.system.md +26 -0
- package/bundled/prompts/profile.sub-coordinator.charter.md +2 -0
- package/bundled/prompts/profile.worker-gui.system.md +7 -0
- package/bundled/prompts/profile.worker.system.md +2 -0
- package/bundled/prompts/relay.agent-core.delivery.md +13 -0
- package/bundled/prompts/relay.agent-core.engineering.md +13 -0
- package/bundled/prompts/relay.agent-core.md +22 -0
- package/bundled/prompts/relay.context.claude.md +1 -0
- package/bundled/prompts/relay.context.claude.readonly.md +3 -0
- package/bundled/prompts/relay.context.codex.md +1 -0
- package/bundled/prompts/relay.context.opencode.md +1 -0
- package/bundled/prompts/relay.manual.claude.md +8 -0
- package/bundled/prompts/relay.search.fff.md +1 -0
- package/bundled/prompts/relay.temp-dir.md +1 -0
- package/bundled/prompts/relay.web.brave.md +1 -0
- package/bundled/prompts/relay.web.fetch.md +1 -0
- package/bundled/prompts/skill.device-lane.md +20 -0
- package/bundled/prompts/skill.security-code-review.md +10 -0
- package/bundled/prompts/skill.security-hardening.md +10 -0
- package/bundled/prompts/skill.security-host-audit.md +11 -0
- package/bundled/prompts/spawn.primer.md +6 -0
- package/bundled/prompts/spawn.reportup.child.md +3 -0
- package/bundled/prompts/spawn.reportup.coordinator.md +2 -0
- package/bundled/prompts/spawn.reportup.workflow-step.md +4 -0
- package/bundled/prompts/spawn.validation.delivery.md +1 -0
- package/bundled/prompts/spawn.validation.iterate.generic.md +1 -0
- package/bundled/prompts/spawn.validation.iterate.imperative.md +1 -0
- package/bundled/prompts/spawn.validation.landgates.header.md +1 -0
- package/bundled/prompts/steward.merge-stall.md +1 -0
- package/bundled/prompts/steward.prompt.md +20 -0
- package/bundled/prompts/steward.wake.md +1 -0
- package/bundled/prompts/task.claim.instruction.md +1 -0
- package/bundled/prompts/task.hydration.md +23 -0
- package/bundled/prompts/user.response.brief.md +1 -0
- package/bundled/prompts/user.response.normal.md +1 -0
- package/bundled/prompts/user.style.neutral.md +1 -0
- package/bundled/prompts/user.style.warm.md +1 -0
- package/bundled/prompts/workspace.deps.command.md +1 -0
- package/bundled/prompts/workspace.deps.none.md +1 -0
- package/bundled/prompts/workspace.deps.symlink.md +1 -0
- package/bundled/prompts/workspace.lifecycle.md +4 -0
- package/bundled/prompts/workspace.mcp.instructions.md +7 -0
- package/bundled/prompts/workspace.phase.abandoned.headline.md +1 -0
- package/bundled/prompts/workspace.phase.abandoned.hint.md +1 -0
- package/bundled/prompts/workspace.phase.active.headline.md +1 -0
- package/bundled/prompts/workspace.phase.active.hint.md +1 -0
- package/bundled/prompts/workspace.phase.conflict.headline.md +1 -0
- package/bundled/prompts/workspace.phase.conflict.hint.md +1 -0
- package/bundled/prompts/workspace.phase.merge-planned.headline.md +1 -0
- package/bundled/prompts/workspace.phase.merge-planned.hint.md +1 -0
- package/bundled/prompts/workspace.phase.merged.headline.md +1 -0
- package/bundled/prompts/workspace.phase.merged.hint.md +1 -0
- package/bundled/prompts/workspace.phase.ready.headline.md +1 -0
- package/bundled/prompts/workspace.phase.ready.hint.md +1 -0
- package/bundled/prompts/workspace.ready.contract.md +6 -0
- package/bundled/prompts/workspace.symlinks.md +1 -0
- package/bundled/roles/builder.md +18 -0
- package/bundled/roles/design-reviewer.md +13 -0
- package/bundled/roles/designer.md +11 -0
- package/bundled/roles/plan-auditor.md +29 -0
- package/bundled/roles/reviewer.md +36 -0
- package/bundled/roles/slice-qa.md +13 -0
- package/bundled/roles/verifier.md +13 -0
- package/bundled/skills/agent-browser/SKILL.md +72 -0
- package/bundled/skills/test-audit/SKILL.md +75 -0
- package/bundled/workflows/build-review.yaml +8 -0
- package/bundled/workflows/design-review.yaml +60 -0
- package/bundled/workflows/plan-conformance.yaml +5 -0
- package/bundled/workflows/slice-proof.yaml +85 -0
- package/bundled/workflows/verify-deployed.yaml +140 -0
- package/docs/guides/sub-coordinators.md +114 -0
- package/docs/guides/tools-administration.md +84 -0
- package/docs/guides/tools-agents.md +137 -0
- package/docs/guides/tools-coordination.md +228 -0
- package/docs/guides/tools-execution.md +48 -0
- package/docs/guides/tools-issues.md +69 -0
- package/docs/guides/tools-memory.md +150 -0
- package/docs/guides/tools-messages.md +192 -0
- package/docs/guides/tools-operations.md +133 -0
- package/docs/guides/tools-tasks.md +235 -0
- package/docs/guides/workflows.md +324 -0
- package/docs/license-faq.md +37 -0
- package/docs/openapi.json +18531 -0
- package/examples/integrations/github-issue.ts +48 -0
- package/examples/integrations/ops-alert.sh +27 -0
- package/examples/integrations/prometheus-alertmanager.ts +55 -0
- package/examples/integrations/support-ticket.sh +28 -0
- package/node_modules/@humwick/kernel/LICENSE +167 -0
- package/node_modules/@humwick/kernel/async-entity-persistence.ts +344 -0
- package/node_modules/@humwick/kernel/async-event-log.ts +107 -0
- package/node_modules/@humwick/kernel/automations.pilot.ts +147 -0
- package/node_modules/@humwick/kernel/config.ts +111 -0
- package/node_modules/@humwick/kernel/contract.ts +572 -0
- package/node_modules/@humwick/kernel/control-authz.ts +281 -0
- package/node_modules/@humwick/kernel/control.ts +645 -0
- package/node_modules/@humwick/kernel/effects.ts +493 -0
- package/node_modules/@humwick/kernel/event-log.ts +319 -0
- package/node_modules/@humwick/kernel/http-transport.ts +384 -0
- package/node_modules/@humwick/kernel/identity-grammar.ts +20 -0
- package/node_modules/@humwick/kernel/identity.ts +248 -0
- package/node_modules/@humwick/kernel/index.ts +28 -0
- package/node_modules/@humwick/kernel/kernel-persistence.ts +181 -0
- package/node_modules/@humwick/kernel/landing-incident.ts +306 -0
- package/node_modules/@humwick/kernel/landing.ts +953 -0
- package/node_modules/@humwick/kernel/manifest-validation.ts +460 -0
- package/node_modules/@humwick/kernel/mcp-transport.ts +109 -0
- package/node_modules/@humwick/kernel/message-authority-chaos-worker.ts +200 -0
- package/node_modules/@humwick/kernel/message-authority.ts +281 -0
- package/node_modules/@humwick/kernel/module-host.ts +722 -0
- package/node_modules/@humwick/kernel/openapi-init.ts +14 -0
- package/node_modules/@humwick/kernel/package.json +39 -0
- package/node_modules/@humwick/kernel/persistence-schema.ts +248 -0
- package/node_modules/@humwick/kernel/persistence.ts +510 -0
- package/node_modules/@humwick/kernel/registry.ts +60 -0
- package/node_modules/@humwick/kernel/sqlite-kernel-persistence.ts +499 -0
- package/node_modules/@humwick/kernel/sqlite-module-host.ts +87 -0
- package/node_modules/@humwick/kernel/timers-chaos-worker.ts +186 -0
- package/node_modules/@humwick/kernel/timers.pilot.ts +1411 -0
- package/node_modules/@humwick/kernel/workflow-activation.ts +25 -0
- package/node_modules/@humwick/kernel/workflow-backstop.ts +40 -0
- package/node_modules/@humwick/kernel/workflow-cancel-tree.ts +20 -0
- package/node_modules/@humwick/kernel/workflow-chaos-worker.ts +213 -0
- package/node_modules/@humwick/kernel/workflow-composition.ts +231 -0
- package/node_modules/@humwick/kernel/workflow-container.ts +72 -0
- package/node_modules/@humwick/kernel/workflow-control.test-fixture.ts +42 -0
- package/node_modules/@humwick/kernel/workflow-control.ts +178 -0
- package/node_modules/@humwick/kernel/workflow-definition.ts +507 -0
- package/node_modules/@humwick/kernel/workflow-dispatch.ts +60 -0
- package/node_modules/@humwick/kernel/workflow-foreach.ts +167 -0
- package/node_modules/@humwick/kernel/workflow-journal-codec.ts +339 -0
- package/node_modules/@humwick/kernel/workflow-journal.ts +922 -0
- package/node_modules/@humwick/kernel/workflow-lane.ts +48 -0
- package/node_modules/@humwick/kernel/workflow-lease-owner.ts +60 -0
- package/node_modules/@humwick/kernel/workflow-recovery.test-fixture.ts +19 -0
- package/node_modules/@humwick/kernel/workflow-runtime.ts +938 -0
- package/node_modules/@humwick/kernel/workflow-script.ts +11 -0
- package/node_modules/@humwick/kernel/workflow-state.ts +299 -0
- package/node_modules/@humwick/kernel/workflow-step-commit.ts +195 -0
- package/node_modules/@humwick/kernel/workflow-transitions.ts +317 -0
- package/node_modules/@humwick/kernel/workflow-values.ts +153 -0
- package/node_modules/@humwick/kernel/workflow.pilot.ts +376 -0
- package/node_modules/@humwick/offload/LICENSE +167 -0
- package/node_modules/@humwick/offload/README.md +57 -0
- package/node_modules/@humwick/offload/dist/async-runner.d.ts +18 -0
- package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/async-runner.js +158 -0
- package/node_modules/@humwick/offload/dist/async-runner.js.map +1 -0
- package/node_modules/@humwick/offload/dist/envelope.d.ts +25 -0
- package/node_modules/@humwick/offload/dist/envelope.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/envelope.js +80 -0
- package/node_modules/@humwick/offload/dist/envelope.js.map +1 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +10 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +59 -0
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +1 -0
- package/node_modules/@humwick/offload/dist/index.d.ts +5 -0
- package/node_modules/@humwick/offload/dist/index.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/index.js +5 -0
- package/node_modules/@humwick/offload/dist/index.js.map +1 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +62 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.js +295 -0
- package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +1 -0
- package/node_modules/@humwick/offload/dist/types.d.ts +111 -0
- package/node_modules/@humwick/offload/dist/types.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/types.js +176 -0
- package/node_modules/@humwick/offload/dist/types.js.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts +23 -0
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-pool.js +435 -0
- package/node_modules/@humwick/offload/dist/worker-pool.js.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +2 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.js +27 -0
- package/node_modules/@humwick/offload/dist/worker-runtime.js.map +1 -0
- package/node_modules/@humwick/offload/dist/worker.d.ts +5 -0
- package/node_modules/@humwick/offload/dist/worker.d.ts.map +1 -0
- package/node_modules/@humwick/offload/dist/worker.js +1 -0
- package/node_modules/@humwick/offload/dist/worker.js.map +1 -0
- package/node_modules/@humwick/offload/package.json +42 -0
- package/node_modules/@humwick/offload/src/async-runner.ts +170 -0
- package/node_modules/@humwick/offload/src/envelope.ts +92 -0
- package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +49 -0
- package/node_modules/@humwick/offload/src/index.ts +4 -0
- package/node_modules/@humwick/offload/src/subprocess-runner.ts +334 -0
- package/node_modules/@humwick/offload/src/types.ts +235 -0
- package/node_modules/@humwick/offload/src/worker-pool.ts +463 -0
- package/node_modules/@humwick/offload/src/worker-runtime.ts +32 -0
- package/node_modules/@humwick/offload/src/worker.ts +5 -0
- package/package.json +229 -4
- package/public/assets/MessageBubble-BWpoBjl4.js +4 -0
- package/public/assets/PlanGraphPanel-C0auck3n.js +2 -0
- package/public/assets/TraceView-DBnOx7AQ.js +5 -0
- package/public/assets/VaultDecisionCard-0kp2oNBC.js +2 -0
- package/public/assets/activity-TMzFOdh2.js +2 -0
- package/public/assets/activity-yLztXEBt.js +2 -0
- package/public/assets/agent-lineage-BbJDR1dW.js +2 -0
- package/public/assets/agent-liveness-DyqxfB-t.js +2 -0
- package/public/assets/agent-name-CTZBrSD9.js +2 -0
- package/public/assets/agent-profiles-BpI_jTxq.js +2 -0
- package/public/assets/agent-project-badge-9TqzUUYE.js +2 -0
- package/public/assets/agent-tools-D4n40pn8.js +2 -0
- package/public/assets/agent-type-icon-D6FUarOf.js +2 -0
- package/public/assets/agents-BYDslkJc.js +2 -0
- package/public/assets/analytics-B-XSbEMC.js +910 -0
- package/public/assets/andromeeda-vGVdxbeo.js +2 -0
- package/public/assets/angular-html-BVBpGdXr.js +2 -0
- package/public/assets/angular-ts-BfdufMKP.js +2 -0
- package/public/assets/api-CIIVBtAV.js +10 -0
- package/public/assets/archive-CIuPSvmx.js +2 -0
- package/public/assets/arrow-right-vFsRqG8V.js +2 -0
- package/public/assets/arrow-up-a-z-CKC2RCjD.js +2 -0
- package/public/assets/artifact-viewer-DdWIfV6M.js +2 -0
- package/public/assets/artifacts-DPN1q4pA.js +2 -0
- package/public/assets/artifacts-oBOqks-2.js +2 -0
- package/public/assets/astro-JKRPP03v.js +2 -0
- package/public/assets/aurora-x-CDeNXAV0.js +2 -0
- package/public/assets/automation-4KcRFXEu.js +2 -0
- package/public/assets/ayu-dark-DluEY0Gj.js +2 -0
- package/public/assets/ayu-light-C3h-C4tm.js +2 -0
- package/public/assets/ayu-mirage-Bqwy1Gya.js +2 -0
- package/public/assets/backlog-Cw9xPTCF.js +2 -0
- package/public/assets/badge-DqJRtj_p.js +2 -0
- package/public/assets/bell-_Yzbxxrt.js +2 -0
- package/public/assets/blade-DA8yMPsw.js +2 -0
- package/public/assets/bot-B0NpDNhr.js +2 -0
- package/public/assets/boxes-Cv7Wq3h4.js +2 -0
- package/public/assets/braces-BOks9SsY.js +2 -0
- package/public/assets/brain-CagXMEKE.js +2 -0
- package/public/assets/brain-circuit-CpQeSmp3.js +2 -0
- package/public/assets/bundle-web-ifbJd0t-.js +14 -0
- package/public/assets/busy-health-CTu32MZt.js +2 -0
- package/public/assets/button-Do6Z3vvn.js +2 -0
- package/public/assets/c-Wt1voDr2.js +2 -0
- package/public/assets/calendar-QJjoZ1JU.js +2 -0
- package/public/assets/calendar-clock-CDG_KBhx.js +2 -0
- package/public/assets/card-C4QJ4hCW.js +2 -0
- package/public/assets/catppuccin-frappe-3VR1Za6u.js +2 -0
- package/public/assets/catppuccin-latte-DwIHMF0Q.js +2 -0
- package/public/assets/catppuccin-macchiato-DYnBP6_5.js +2 -0
- package/public/assets/catppuccin-mocha-DYhrFGRu.js +2 -0
- package/public/assets/channels-BiXzg1G9.js +2 -0
- package/public/assets/chart-column-S02ZGfTR.js +2 -0
- package/public/assets/chat-Ctk2qwvA.js +6 -0
- package/public/assets/check-B3M9Ug1P.js +2 -0
- package/public/assets/chevron-down-BoG3JCZn.js +2 -0
- package/public/assets/chevron-right-iljytE0x.js +2 -0
- package/public/assets/chevron-up-Bv3yC5ma.js +2 -0
- package/public/assets/circle-UESLMi2-.js +2 -0
- package/public/assets/circle-alert-CryagaZd.js +2 -0
- package/public/assets/circle-arrow-up-B432r0Kk.js +2 -0
- package/public/assets/circle-check-CkUkN96J.js +2 -0
- package/public/assets/circle-x-CZ0erS7Q.js +2 -0
- package/public/assets/clipboard-list-W2YeUsxT.js +2 -0
- package/public/assets/clock-3-BH47318N.js +2 -0
- package/public/assets/clock-BWPPBh1_.js +2 -0
- package/public/assets/code-preview-Bm1wWqAp.js +3 -0
- package/public/assets/coffee-CThvmt4R.js +2 -0
- package/public/assets/connectors-C36ax4Vw.js +2 -0
- package/public/assets/copy-DFxhHRtV.js +2 -0
- package/public/assets/copy-button-CjOj4HEf.js +2 -0
- package/public/assets/cosmos-Dn8XrlnS.css +1 -0
- package/public/assets/cosmos-Jj9LK2Wf.js +3993 -0
- package/public/assets/cpp-C5WNSHb9.js +2 -0
- package/public/assets/cpu-Dndy84IU.js +2 -0
- package/public/assets/crate-agent-H6S7-B9T.js +2 -0
- package/public/assets/css-DJp_X0uY.js +2 -0
- package/public/assets/csv-Dx-8-gkx.js +2 -0
- package/public/assets/dark-plus-Cs2F2srj.js +2 -0
- package/public/assets/dependency-graph-Cd1E23wa.js +2 -0
- package/public/assets/deploys-Bwfq146q.js +2 -0
- package/public/assets/dialog-uuJ9_geR.js +6 -0
- package/public/assets/display-CfO7rTuF.js +3 -0
- package/public/assets/dist-B2h2GeWt.js +2 -0
- package/public/assets/dist-BeVYU67E.js +2 -0
- package/public/assets/dist-Bmm-RKub.js +2 -0
- package/public/assets/dist-C1xmD7qJ.js +2 -0
- package/public/assets/dist-C2J943E6.js +2 -0
- package/public/assets/dist-C6lpJDoA.js +2 -0
- package/public/assets/dist-CoWL6B0c.js +2 -0
- package/public/assets/dist-D93SmTNC.js +2 -0
- package/public/assets/dist-Da7HrHNA.js +2 -0
- package/public/assets/dist-DeW2Y1R5.js +2 -0
- package/public/assets/dist-DwBdqQ6H.js +2 -0
- package/public/assets/dist-Dz182zaW.js +2 -0
- package/public/assets/dist-H3DLHJ0C.js +2 -0
- package/public/assets/dist-RrY9C4SI.js +2 -0
- package/public/assets/download-KgtpDbt5.js +2 -0
- package/public/assets/dracula-BHWKrbxM.js +2 -0
- package/public/assets/dracula-soft-5eyTD99u.js +2 -0
- package/public/assets/dropdown-menu-BXiNephE.js +2 -0
- package/public/assets/es2015-DMmZ8vbD.js +42 -0
- package/public/assets/esm-ZSuD7QuY.js +2 -0
- package/public/assets/everforest-dark-sB-x3p7T.js +2 -0
- package/public/assets/everforest-light-Df2xbC6M.js +2 -0
- package/public/assets/external-link-BRfu-fHG.js +2 -0
- package/public/assets/eye-BAP6fHrX.js +2 -0
- package/public/assets/file-code-corner-CXhIR1vB.js +2 -0
- package/public/assets/file-pen-Crunre5f.js +2 -0
- package/public/assets/file-text-CKuoMR2U.js +2 -0
- package/public/assets/files-DhhZI2Ih.js +3 -0
- package/public/assets/flag-CnEG9PH-.js +2 -0
- package/public/assets/flame-CxBuz46L.js +2 -0
- package/public/assets/fleet-B_rFEbnL.js +2 -0
- package/public/assets/fleet-metrics-BkHP-P3R.js +2 -0
- package/public/assets/folder-git-2-CJOmTT06.js +2 -0
- package/public/assets/folder-open-CBUCMSlu.js +2 -0
- package/public/assets/folder-tree-BG3Y9nqH.js +2 -0
- package/public/assets/formatted-body-Cm1RrzmN.js +3 -0
- package/public/assets/formatted-body-impl-DQiOuOD1.js +3 -0
- package/public/assets/gauge-BIODY-BQ.js +2 -0
- package/public/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
- package/public/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
- package/public/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
- package/public/assets/git-branch-yxhV0m8E.js +2 -0
- package/public/assets/git-commit-horizontal-DS1pJ_SS.js +2 -0
- package/public/assets/git-merge-C7eIG425.js +2 -0
- package/public/assets/github-dark-C-LZuMrd.js +2 -0
- package/public/assets/github-dark-default-DXG-b-1a.js +2 -0
- package/public/assets/github-dark-dimmed-Bx1FflLF.js +2 -0
- package/public/assets/github-dark-high-contrast-B_tTalzw.js +2 -0
- package/public/assets/github-light-EUqPIrTm.js +2 -0
- package/public/assets/github-light-default-BXViO-2h.js +2 -0
- package/public/assets/github-light-high-contrast-B68TUdTA.js +2 -0
- package/public/assets/globe-Cl5fXtqs.js +2 -0
- package/public/assets/glsl-Dv5r7kPw.js +2 -0
- package/public/assets/graphql-CcFwQwm0.js +2 -0
- package/public/assets/gruvbox-dark-hard-C820rvS2.js +2 -0
- package/public/assets/gruvbox-dark-medium-BPjhmG05.js +2 -0
- package/public/assets/gruvbox-dark-soft-MrdJrrXF.js +2 -0
- package/public/assets/gruvbox-light-hard-BC_s9l72.js +2 -0
- package/public/assets/gruvbox-light-medium-BAWPOn9u.js +2 -0
- package/public/assets/gruvbox-light-soft-BSMLrYjP.js +2 -0
- package/public/assets/haml-Bg4I2hiD.js +2 -0
- package/public/assets/handlebars-DnwbnL5R.js +2 -0
- package/public/assets/hash-CbtKih3g.js +2 -0
- package/public/assets/horizon-CE9ld1lL.js +2 -0
- package/public/assets/horizon-bright-DSNQnXHK.js +2 -0
- package/public/assets/host-mTgRw7xh.js +2 -0
- package/public/assets/host-providers-dialog-CHqwXTov.js +2 -0
- package/public/assets/hourglass-txu4ax6n.js +2 -0
- package/public/assets/houston-CsvMBhTu.js +2 -0
- package/public/assets/html-C8UlPnhE.js +2 -0
- package/public/assets/html-derivative-CY6NRz-J.js +2 -0
- package/public/assets/http-CoW620Fi.js +2 -0
- package/public/assets/humwick-lockup-on-dark-Ds44Y7BK.svg +19 -0
- package/public/assets/humwick-lockup-on-light-ClALZAHt.svg +19 -0
- package/public/assets/hurl-CSSETujw.js +2 -0
- package/public/assets/imba-DsUTQ-LC.js +2 -0
- package/public/assets/inbox-Dfwk3Gt8.js +2 -0
- package/public/assets/index-B7ZerHLY.css +2 -0
- package/public/assets/index-BU3uWo2t.js +15 -0
- package/public/assets/input-CsTB6jIx.js +2 -0
- package/public/assets/insights-fH1EL-qZ.js +2 -0
- package/public/assets/integrations-C5Oix6ng.js +2 -0
- package/public/assets/issue-ref-chip-ODyondIa.js +3 -0
- package/public/assets/java-CGc3VwQr.js +2 -0
- package/public/assets/javascript-CUt1pgmJ.js +2 -0
- package/public/assets/jinja-CD-Z-FLd.js +2 -0
- package/public/assets/jison-imPNup1l.js +2 -0
- package/public/assets/json-qhed-kSA.js +2 -0
- package/public/assets/json5-BR5RXkoi.js +2 -0
- package/public/assets/jsonc-CYpm1nAK.js +2 -0
- package/public/assets/jsonl-CmCQp5Yx.js +2 -0
- package/public/assets/jsx-CY6oMTks.js +2 -0
- package/public/assets/julia-CjffhBEM.js +2 -0
- package/public/assets/kanagawa-dragon-CXtmUGW6.js +2 -0
- package/public/assets/kanagawa-lotus-BN08jTvb.js +2 -0
- package/public/assets/kanagawa-wave-CTweb8Dz.js +2 -0
- package/public/assets/kernel-Bqr0CZGv.js +2 -0
- package/public/assets/key-round-CcSxl5qr.js +2 -0
- package/public/assets/keyboard-DcmEulph.js +2 -0
- package/public/assets/label-BPBzm9FJ.js +2 -0
- package/public/assets/laserwave-C_8bwKvT.js +2 -0
- package/public/assets/layers-DEfClY-v.js +2 -0
- package/public/assets/legacy-storage-carry-C-tBSxRA.js +2 -0
- package/public/assets/less-DVTAwKKz.js +2 -0
- package/public/assets/lib-D7DTGM1F.js +2 -0
- package/public/assets/lib-G-25QXXf.js +30 -0
- package/public/assets/light-plus-DVQuIRkW.js +2 -0
- package/public/assets/lightbulb-RDhZ4p-D.js +2 -0
- package/public/assets/link-2-off-DfRF9Hwb.js +2 -0
- package/public/assets/link-6RR7Hy3-.js +2 -0
- package/public/assets/list-checks-CwnS3hly.js +2 -0
- package/public/assets/list-ordered-D8nCM7rT.js +2 -0
- package/public/assets/list-todo-9qT0fgxZ.js +2 -0
- package/public/assets/loader-circle-BfPd4kOD.js +2 -0
- package/public/assets/lock-BW8MPKw_.js +2 -0
- package/public/assets/log-viewer-Cvfy6PW7.js +4 -0
- package/public/assets/mail-DyaDmwfY.js +2 -0
- package/public/assets/maintenance-D8CDH5wZ.js +2 -0
- package/public/assets/managed-agents-egllbpij.js +4 -0
- package/public/assets/markdown-BYOwaDjH.js +2 -0
- package/public/assets/markdown-preview-CYSFgVgK.js +3 -0
- package/public/assets/markdown-preview-impl-BteVIjX4.js +2 -0
- package/public/assets/marko-DvhNOisQ.js +2 -0
- package/public/assets/material-theme-Bm3Qr25_.js +2 -0
- package/public/assets/material-theme-darker-2IIEA8gg.js +2 -0
- package/public/assets/material-theme-lighter-uhdI0v04.js +2 -0
- package/public/assets/material-theme-ocean-CHQ94UKr.js +2 -0
- package/public/assets/material-theme-palenight-B5W6OYN7.js +2 -0
- package/public/assets/mdc-CazklSAj.js +2 -0
- package/public/assets/mdx-DQZ5AkYe.js +2 -0
- package/public/assets/memory-C8WmXsyr.js +2 -0
- package/public/assets/message-circle-wjztgHBe.js +2 -0
- package/public/assets/message-square-C-1G8dMM.js +2 -0
- package/public/assets/message-square-reply-B9Z4cbQx.js +2 -0
- package/public/assets/messages-BzQdqlO6.js +2 -0
- package/public/assets/messages-square-DVM1ZtcI.js +2 -0
- package/public/assets/min-dark-BSWPekZh.js +2 -0
- package/public/assets/min-light-DDpmG2fV.js +2 -0
- package/public/assets/minimize-2-BkK6XoMP.js +2 -0
- package/public/assets/monokai-CdkpiU2Y.js +2 -0
- package/public/assets/night-owl-DhmEMT88.js +2 -0
- package/public/assets/night-owl-light-eJ-hLW7d.js +2 -0
- package/public/assets/nord-Cb4Vim4T.js +2 -0
- package/public/assets/octagon-x-B5lnUY-8.js +2 -0
- package/public/assets/one-dark-pro-CLwyXe_n.js +2 -0
- package/public/assets/one-light-D7Lr4KcI.js +2 -0
- package/public/assets/orchestrators-B1HxzkNw.js +2 -0
- package/public/assets/overview-DCUnI4Z7.js +2 -0
- package/public/assets/package-open-ckPgcjpv.js +2 -0
- package/public/assets/package-plus-C1AKMjsl.js +2 -0
- package/public/assets/pairs-ftCd2XcD.js +2 -0
- package/public/assets/paperclip-CNpKZKum.js +2 -0
- package/public/assets/pause-DttnHD4c.js +2 -0
- package/public/assets/pencil-B1Hf2V_J.js +2 -0
- package/public/assets/php-CBqsN0ai.js +2 -0
- package/public/assets/pin-DcsKeXxr.js +2 -0
- package/public/assets/plastic-DQwYfKfQ.js +2 -0
- package/public/assets/play-BbT8m7A0.js +2 -0
- package/public/assets/plug-vIyO9_P8.js +2 -0
- package/public/assets/plug-zap-V0wMDJ-G.js +2 -0
- package/public/assets/plus-D5Ek4e2S.js +2 -0
- package/public/assets/poimandres-DRFjx7u4.js +2 -0
- package/public/assets/popover-8w1TWKMG.js +2 -0
- package/public/assets/postcss-BXeXVLqQ.js +2 -0
- package/public/assets/power-6tZOhYPg.js +2 -0
- package/public/assets/preload-helper-HclGiUj8.js +1 -0
- package/public/assets/profile-icon-B2zH8DMH.js +2 -0
- package/public/assets/projects-B_lmcqfO.js +2 -0
- package/public/assets/prompt-settings-Bftq9czX.js +2 -0
- package/public/assets/provider-brand-icon-_67JR7Zh.js +2 -0
- package/public/assets/provider-display-DbLWpP3j.js +2 -0
- package/public/assets/pug-C5hz5LQ7.js +2 -0
- package/public/assets/python-gzcpVVnB.js +2 -0
- package/public/assets/r-Dzep-lPg.js +2 -0
- package/public/assets/radio-Bn0_qc0G.js +2 -0
- package/public/assets/react-dom-DSFxiC7T.js +2 -0
- package/public/assets/red-CJ3rzSJv.js +2 -0
- package/public/assets/refresh-cw-CfpvQcUn.js +2 -0
- package/public/assets/regexp-Omp9DhTb.js +2 -0
- package/public/assets/registry-DWCU5c8q.js +4 -0
- package/public/assets/repeat-hl4p_Klo.js +2 -0
- package/public/assets/rocket-BmO1qSu-.js +2 -0
- package/public/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/public/assets/rose-pine-BthvhNj6.js +2 -0
- package/public/assets/rose-pine-dawn-Dg85fqjY.js +2 -0
- package/public/assets/rose-pine-moon-hon4tzzS.js +2 -0
- package/public/assets/rotate-ccw-CtD77qkX.js +2 -0
- package/public/assets/rotate-cw-FPtkDewA.js +2 -0
- package/public/assets/run-card-CO_bguQf.js +2 -0
- package/public/assets/sass-DXrisJhu.js +2 -0
- package/public/assets/save-B_PGqSm4.js +2 -0
- package/public/assets/scroll-area-CIN4KQse.js +2 -0
- package/public/assets/scss-DdSxiZKl.js +2 -0
- package/public/assets/search-DjzbnTbf.js +2 -0
- package/public/assets/secrets-C7GIUATz.js +2 -0
- package/public/assets/security-BUFau5-N.js +3 -0
- package/public/assets/select-DTQMP4Dk.js +2 -0
- package/public/assets/separator-t1cLZErD.js +2 -0
- package/public/assets/server-CZIRjFyY.js +2 -0
- package/public/assets/service-access-settings-C3aujqTG.js +2 -0
- package/public/assets/settings-C6sZ9eBa.js +6 -0
- package/public/assets/shellscript-CLZ0U2zV.js +2 -0
- package/public/assets/shield-CtXNUA0i.js +2 -0
- package/public/assets/shield-alert-B9jCWcKW.js +2 -0
- package/public/assets/shipping-Bu8p1gEw.js +2 -0
- package/public/assets/shipping-stats-BiMTsA4A.js +2 -0
- package/public/assets/slack-dark-DnToyrRv.js +2 -0
- package/public/assets/slack-ochin-B2OO5cIa.js +2 -0
- package/public/assets/smile-plus-q6EQBXHZ.js +2 -0
- package/public/assets/snazzy-light-4G7pJPwS.js +2 -0
- package/public/assets/solarized-dark-DV17i1UV.js +2 -0
- package/public/assets/solarized-light-DSh2HLQt.js +2 -0
- package/public/assets/sparkles-CzwR10ZU.js +2 -0
- package/public/assets/sql-DNssxck8.js +2 -0
- package/public/assets/square-Bqly37YM.js +2 -0
- package/public/assets/stats-V9Z-GxUd.js +2 -0
- package/public/assets/status-dot-CVv0iGHL.js +2 -0
- package/public/assets/stethoscope-SCBrnQQ8.js +2 -0
- package/public/assets/store-BvtFdlGX.js +9 -0
- package/public/assets/stylus-B6D30XZt.js +2 -0
- package/public/assets/svelte-DOdLCIlh.js +2 -0
- package/public/assets/switch-DuCA7mrB.js +2 -0
- package/public/assets/synthwave-84-nFMaYfgc.js +2 -0
- package/public/assets/tabs-jZgNvNHr.js +2 -0
- package/public/assets/task-chip-CYj0mpoL.js +2 -0
- package/public/assets/tasks-BIyeAaPC.js +2 -0
- package/public/assets/tasks-CXU75HRF.js +11 -0
- package/public/assets/teams-BPf976zb.js +2 -0
- package/public/assets/terminal-Bl2u7KxT.js +2 -0
- package/public/assets/terminal-viewer-DE9BOe-8.js +3 -0
- package/public/assets/terminal-viewer-impl-BrP-ENHg.css +1 -0
- package/public/assets/terminal-viewer-impl-D04pjmGh.js +143 -0
- package/public/assets/textarea-hs6Mpyfl.js +2 -0
- package/public/assets/themes-G5j9m1Ji.js +2 -0
- package/public/assets/tokyo-night-oM2G3aXe.js +2 -0
- package/public/assets/trash-2-FbcSq927.js +2 -0
- package/public/assets/triangle-alert-BBNhfgMi.js +2 -0
- package/public/assets/ts-tags-Ca73dJJY.js +2 -0
- package/public/assets/tsx-5Eka4NBX.js +2 -0
- package/public/assets/typescript-DOu2WMV5.js +2 -0
- package/public/assets/use-agent-terminal-B1yR456R.js +2 -0
- package/public/assets/use-decisions-D-S4tpDf.js +2 -0
- package/public/assets/use-project-list-B-T2Bnnn.js +2 -0
- package/public/assets/use-selectors-CnrAk2YP.js +6 -0
- package/public/assets/user-avatar-nBFIcR4M.js +2 -0
- package/public/assets/user-cog-CKcouW1J.js +2 -0
- package/public/assets/user-plus-D9749q73.js +2 -0
- package/public/assets/users-C7B3u9jv.js +2 -0
- package/public/assets/versioned-prompt-editor-Diu8BIaM.js +8 -0
- package/public/assets/vesper-DdrHHSXu.js +2 -0
- package/public/assets/vitesse-black-fwtXNY1n.js +2 -0
- package/public/assets/vitesse-dark-BZCL-v6S.js +2 -0
- package/public/assets/vitesse-light-VbXTXTou.js +2 -0
- package/public/assets/volume-2-XrcRKD9Z.js +2 -0
- package/public/assets/vue-Bfx0ffIq.js +2 -0
- package/public/assets/vue-html-BeluIYX0.js +2 -0
- package/public/assets/vue-vine-DGUAbOCX.js +2 -0
- package/public/assets/warehouse-BanzOanY.js +2 -0
- package/public/assets/wasm-BnjxR4X6.js +2 -0
- package/public/assets/wasm-ByWQv1Qj.js +2 -0
- package/public/assets/waypoints-CIzINtLT.js +2 -0
- package/public/assets/wgsl-BsKzXJz4.js +2 -0
- package/public/assets/wit-DdvCle-K.js +2 -0
- package/public/assets/work-queue-TCjJxeT-.js +2 -0
- package/public/assets/workflow-marker-Cf3Hf2fN.js +2 -0
- package/public/assets/workflows-CXQX20Qj.js +6 -0
- package/public/assets/workspaces-qSYzKYMA.js +3 -0
- package/public/assets/wrench-C7-4CgnY.js +2 -0
- package/public/assets/x-Bge17hWJ.js +2 -0
- package/public/assets/xml-DIqSwXR3.js +2 -0
- package/public/assets/yaml-rwi0_p6S.js +2 -0
- package/public/assets/zap-DGuDTw4w.js +2 -0
- package/public/assets/zoom-in-Bs8Qv8VL.js +2 -0
- package/public/assets/zoomable-image-B3Og53nj.js +2 -0
- package/public/cosmos/audio/README.md +50 -0
- package/public/cosmos/audio/alert.mp3 +0 -0
- package/public/cosmos/audio/ambient-bed.mp3 +0 -0
- package/public/cosmos/audio/comet.mp3 +0 -0
- package/public/cosmos/audio/cross-galaxy.mp3 +0 -0
- package/public/cosmos/audio/deploy.mp3 +0 -0
- package/public/cosmos/audio/galaxy-dissipate.mp3 +0 -0
- package/public/cosmos/audio/galaxy-form.mp3 +0 -0
- package/public/cosmos/audio/land.mp3 +0 -0
- package/public/cosmos/audio/reap.mp3 +0 -0
- package/public/cosmos/audio/spawn.mp3 +0 -0
- package/public/cosmos.html +34 -0
- package/public/favicon.ico +0 -0
- package/public/favicon.svg +10 -0
- package/public/icons/apple-touch-icon.png +0 -0
- package/public/icons/humwick-192.png +0 -0
- package/public/icons/humwick-512.png +0 -0
- package/public/icons/humwick.svg +19 -0
- package/public/index.html +188 -0
- package/public/manifest.webmanifest +45 -0
- package/public/sw.js +160 -0
- package/recipes/code-review.yaml +26 -0
- package/recipes/debug.yaml +20 -0
- package/recipes/feature.yaml +26 -0
- package/recipes/refactor.yaml +20 -0
- package/recipes/test.yaml +20 -0
- package/runner/LICENSE +167 -0
- package/runner/agent-bin/agent-relay-browser +10 -0
- package/runner/agent-bin/humwick +10 -0
- package/runner/hooks/fff-search-redirect/fff-search-redirect.cjs +161 -0
- package/runner/hooks/fff-search-redirect/hooks.json +13 -0
- package/runner/hooks/rg-r-guard/hooks.json +18 -0
- package/runner/hooks/rg-r-guard/rg-r-guard.cjs +144 -0
- package/runner/hooks/web-tools-redirect/hooks.json +13 -0
- package/runner/hooks/web-tools-redirect/web-tools-redirect.cjs +84 -0
- package/runner/plugins/browser/skills/playwright-cli/SKILL.md +53 -0
- package/runner/plugins/claude/.claude-plugin/plugin.json +8 -0
- package/runner/plugins/claude/claude-statusline-probe.cjs +144 -0
- package/runner/plugins/claude/hooks/gate-run-guard.provisioned.mjs +914 -0
- package/runner/plugins/claude/hooks/gate-run-guard.sh +9 -0
- package/runner/plugins/claude/hooks/gate-run-guard.ts +237 -0
- package/runner/plugins/claude/hooks/hooks.json +158 -0
- package/runner/plugins/claude/hooks/kill-guard.provisioned.mjs +7027 -0
- package/runner/plugins/claude/hooks/kill-guard.sh +341 -0
- package/runner/plugins/claude/hooks/kill-guard.ts +337 -0
- package/runner/plugins/claude/hooks/permission-request.sh +22 -0
- package/runner/plugins/claude/hooks/post-compact.sh +10 -0
- package/runner/plugins/claude/hooks/post-tool-use.sh +8 -0
- package/runner/plugins/claude/hooks/pre-compact.sh +12 -0
- package/runner/plugins/claude/hooks/read-only-bash-guard.sh +587 -0
- package/runner/plugins/claude/hooks/relay-status.sh +373 -0
- package/runner/plugins/claude/hooks/session-end.sh +26 -0
- package/runner/plugins/claude/hooks/session-start.sh +31 -0
- package/runner/plugins/claude/hooks/shell-trust.ts +28 -0
- package/runner/plugins/claude/hooks/stop-failure.sh +47 -0
- package/runner/plugins/claude/hooks/stop.sh +48 -0
- package/runner/plugins/claude/hooks/subagent-guard.cjs +26 -0
- package/runner/plugins/claude/hooks/subagent-skill-policy.cjs +160 -0
- package/runner/plugins/claude/hooks/subagent-start.sh +13 -0
- package/runner/plugins/claude/hooks/subagent-stop.sh +19 -0
- package/runner/plugins/claude/hooks/user-prompt-submit.sh +18 -0
- package/runner/plugins/claude/hooks/wait-loop-guard.ts +120 -0
- package/runner/plugins/claude/monitors/monitors.json +7 -0
- package/runner/plugins/claude/monitors/relay-monitor.provisioned.mjs +786 -0
- package/runner/plugins/claude/monitors/relay-monitor.ts +58 -0
- package/runner/plugins/claude/skills/disconnect/SKILL.md +16 -0
- package/runner/plugins/claude/skills/label/SKILL.md +23 -0
- package/runner/plugins/claude/skills/message/SKILL.md +40 -0
- package/runner/plugins/claude/skills/pair/SKILL.md +30 -0
- package/runner/plugins/claude/skills/react/SKILL.md +18 -0
- package/runner/plugins/claude/skills/read-message/SKILL.md +24 -0
- package/runner/plugins/claude/skills/reply/SKILL.md +44 -0
- package/runner/plugins/claude/skills/send-claimable/SKILL.md +39 -0
- package/runner/plugins/claude/skills/slice-first/SKILL.md +32 -0
- package/runner/plugins/claude/skills/slice-first/references/plan-recipe.md +46 -0
- package/runner/plugins/claude/skills/status/SKILL.md +16 -0
- package/runner/plugins/claude/skills/tags/SKILL.md +25 -0
- package/runner/plugins/claude/skills/task/SKILL.md +28 -0
- package/runner/plugins/claude-output-style/.claude-plugin/plugin.json +5 -0
- package/runner/plugins/claude-output-style/output-styles/agent-relay.md +5 -0
- package/runner/plugins/codex/skills/disconnect/SKILL.md +15 -0
- package/runner/plugins/codex/skills/guide/SKILL.md +15 -0
- package/runner/plugins/codex/skills/label/SKILL.md +22 -0
- package/runner/plugins/codex/skills/message/SKILL.md +40 -0
- package/runner/plugins/codex/skills/pair/SKILL.md +29 -0
- package/runner/plugins/codex/skills/react/SKILL.md +17 -0
- package/runner/plugins/codex/skills/read-message/SKILL.md +23 -0
- package/runner/plugins/codex/skills/reply/SKILL.md +44 -0
- package/runner/plugins/codex/skills/send-claimable/SKILL.md +39 -0
- package/runner/plugins/codex/skills/slice-first/SKILL.md +32 -0
- package/runner/plugins/codex/skills/slice-first/references/plan-recipe.md +46 -0
- package/runner/plugins/codex/skills/status/SKILL.md +15 -0
- package/runner/plugins/codex/skills/tags/SKILL.md +24 -0
- package/runner/plugins/codex/skills/task/SKILL.md +28 -0
- package/runner/src/adapter.ts +1061 -0
- package/runner/src/adapters/__fixtures__/codex-app-server.ts +47 -0
- package/runner/src/adapters/claude-api.ts +243 -0
- package/runner/src/adapters/claude-context-command.ts +16 -0
- package/runner/src/adapters/claude-credentials.ts +22 -0
- package/runner/src/adapters/claude-delivery-lanes.ts +28 -0
- package/runner/src/adapters/claude-delivery.ts +166 -0
- package/runner/src/adapters/claude-effort.ts +94 -0
- package/runner/src/adapters/claude-exit.ts +290 -0
- package/runner/src/adapters/claude-headless-mirror.ts +88 -0
- package/runner/src/adapters/claude-headless-refusal.ts +51 -0
- package/runner/src/adapters/claude-headless.ts +617 -0
- package/runner/src/adapters/claude-monitor-delivery-plan.ts +317 -0
- package/runner/src/adapters/claude-permission.ts +243 -0
- package/runner/src/adapters/claude-prompt-gates.ts +269 -0
- package/runner/src/adapters/claude-prompt-hook.ts +145 -0
- package/runner/src/adapters/claude-session-capture.ts +293 -0
- package/runner/src/adapters/claude-session-probe.ts +414 -0
- package/runner/src/adapters/claude-shutdown.ts +190 -0
- package/runner/src/adapters/claude-status-detectors.ts +426 -0
- package/runner/src/adapters/claude-subagents.ts +93 -0
- package/runner/src/adapters/claude-submit-confirmation.ts +287 -0
- package/runner/src/adapters/claude-tmux.ts +548 -0
- package/runner/src/adapters/claude-token-usage-capture.ts +253 -0
- package/runner/src/adapters/claude-tool-policy.ts +165 -0
- package/runner/src/adapters/claude-transcript-tail.ts +193 -0
- package/runner/src/adapters/claude-transcript.ts +812 -0
- package/runner/src/adapters/claude.ts +1097 -0
- package/runner/src/adapters/codex-agent-message-capture.ts +189 -0
- package/runner/src/adapters/codex-app-server.ts +70 -0
- package/runner/src/adapters/codex-client.ts +362 -0
- package/runner/src/adapters/codex-effective-config.ts +87 -0
- package/runner/src/adapters/codex-launch-config.ts +153 -0
- package/runner/src/adapters/codex-rollout-context.ts +272 -0
- package/runner/src/adapters/codex-skill-discovery.ts +18 -0
- package/runner/src/adapters/codex-token-usage-capture.ts +163 -0
- package/runner/src/adapters/codex-tool-output.ts +53 -0
- package/runner/src/adapters/codex-turn-outcome.ts +27 -0
- package/runner/src/adapters/codex-version.ts +64 -0
- package/runner/src/adapters/codex.ts +1442 -0
- package/runner/src/adapters/incremental-file.ts +110 -0
- package/runner/src/adapters/opencode-api.ts +71 -0
- package/runner/src/adapters/opencode-context.ts +277 -0
- package/runner/src/adapters/opencode-model-registry.ts +126 -0
- package/runner/src/adapters/opencode-provider.ts +169 -0
- package/runner/src/adapters/opencode-server-retry.ts +50 -0
- package/runner/src/adapters/opencode-soft-steer.ts +302 -0
- package/runner/src/adapters/opencode-spawn.ts +145 -0
- package/runner/src/adapters/opencode-subscribe.ts +62 -0
- package/runner/src/adapters/opencode-token-usage-capture.ts +187 -0
- package/runner/src/adapters/opencode-tool-events.ts +302 -0
- package/runner/src/adapters/opencode-tools-config.ts +17 -0
- package/runner/src/adapters/opencode.ts +2264 -0
- package/runner/src/adapters/project-shell.ts +80 -0
- package/runner/src/adapters/provider-launch-config.ts +21 -0
- package/runner/src/adapters/provider-quota-harvest.ts +127 -0
- package/runner/src/adapters/service-access.ts +153 -0
- package/runner/src/adapters/tmux-offload.ts +207 -0
- package/runner/src/adapters/tool-summary.ts +214 -0
- package/runner/src/agent-redact.ts +75 -0
- package/runner/src/agent-runner/commands/dispatch.ts +185 -0
- package/runner/src/agent-runner/commands/lifecycle.ts +84 -0
- package/runner/src/agent-runner/commands/prompt.ts +284 -0
- package/runner/src/agent-runner/credentials.ts +208 -0
- package/runner/src/agent-runner/http-liveness.ts +85 -0
- package/runner/src/agent-runner/lifecycle-milestones.ts +207 -0
- package/runner/src/agent-runner/lifecycle-phase.ts +80 -0
- package/runner/src/agent-runner/registration.ts +163 -0
- package/runner/src/agent-runner/runner-context.ts +158 -0
- package/runner/src/agent-runner/session-mirror.ts +278 -0
- package/runner/src/agent-runner/task-claims.ts +116 -0
- package/runner/src/agent-runner/token-usage-coverage.ts +54 -0
- package/runner/src/agent-runner/turn-report.ts +269 -0
- package/runner/src/api-budget-accounting.ts +91 -0
- package/runner/src/area-memory.ts +255 -0
- package/runner/src/artifact-path-materialize.ts +52 -0
- package/runner/src/async-guard.ts +35 -0
- package/runner/src/attachment-cache-sweep.ts +31 -0
- package/runner/src/attachment-cache.ts +195 -0
- package/runner/src/background-script-reconcile.ts +106 -0
- package/runner/src/bounded-log.ts +59 -0
- package/runner/src/bounded-spawn-sync.ts +18 -0
- package/runner/src/busy-reconciler.ts +282 -0
- package/runner/src/claim-tracker.ts +140 -0
- package/runner/src/claude-settings.ts +167 -0
- package/runner/src/claude-workspace-trust.ts +289 -0
- package/runner/src/config.ts +547 -0
- package/runner/src/context-boundary.ts +101 -0
- package/runner/src/context-command.ts +151 -0
- package/runner/src/context-probe-state.ts +6 -0
- package/runner/src/continuation-archive.ts +179 -0
- package/runner/src/control-server.ts +730 -0
- package/runner/src/delivery-policy.ts +9 -0
- package/runner/src/delivery-result.ts +24 -0
- package/runner/src/effort-command.ts +125 -0
- package/runner/src/empty-turn.ts +816 -0
- package/runner/src/free-port.ts +25 -0
- package/runner/src/fs-offload.ts +26 -0
- package/runner/src/gate-run-config.ts +35 -0
- package/runner/src/gate-run-lease-probe.ts +38 -0
- package/runner/src/host-asset-plan.ts +450 -0
- package/runner/src/host-claude-config-worker.ts +34 -0
- package/runner/src/host-sources.ts +40 -0
- package/runner/src/inbox-carrier.ts +7 -0
- package/runner/src/index.ts +386 -0
- package/runner/src/launch-assembly.ts +955 -0
- package/runner/src/liveness.ts +105 -0
- package/runner/src/logger.ts +108 -0
- package/runner/src/mcp-outbox.ts +204 -0
- package/runner/src/mcp-preflight.ts +86 -0
- package/runner/src/mcp-source-selection.ts +54 -0
- package/runner/src/mcp-tool-deferral.ts +35 -0
- package/runner/src/mcp-vault-env.ts +25 -0
- package/runner/src/message-body-config/config.ts +16 -0
- package/runner/src/message-body-config.ts +1 -0
- package/runner/src/mid-turn-delivery.ts +43 -0
- package/runner/src/native-memory-lever.ts +329 -0
- package/runner/src/native-self-resume.ts +244 -0
- package/runner/src/outbox.ts +453 -0
- package/runner/src/park-post.ts +17 -0
- package/runner/src/pending-permission-store.ts +148 -0
- package/runner/src/process-meta.ts +9 -0
- package/runner/src/profile-home.ts +419 -0
- package/runner/src/profile-projection.ts +411 -0
- package/runner/src/project-hooks.ts +65 -0
- package/runner/src/project-instructions.ts +119 -0
- package/runner/src/provider-double.ts +59 -0
- package/runner/src/provider-hold.ts +228 -0
- package/runner/src/provider-home-marker.ts +3 -0
- package/runner/src/provider-home-tombstone.ts +4 -0
- package/runner/src/provider-input-queue.ts +134 -0
- package/runner/src/provider-integration.ts +93 -0
- package/runner/src/provider-processes.ts +17 -0
- package/runner/src/provider-submit-failure.ts +15 -0
- package/runner/src/providers.ts +35 -0
- package/runner/src/provisioning.ts +703 -0
- package/runner/src/question-decision.ts +18 -0
- package/runner/src/quota.ts +22 -0
- package/runner/src/rate-limit.ts +351 -0
- package/runner/src/refused-prompt-store.ts +36 -0
- package/runner/src/relay-injection-events.ts +161 -0
- package/runner/src/relay-instructions.ts +107 -0
- package/runner/src/relay-mcp-proxy.long-turn-e2e.ts +183 -0
- package/runner/src/relay-mcp-proxy.ts +704 -0
- package/runner/src/relay-mcp.ts +583 -0
- package/runner/src/reply-obligation-cache.ts +211 -0
- package/runner/src/response-capture-report.ts +111 -0
- package/runner/src/response-routing.ts +6 -0
- package/runner/src/runner-core.ts +2955 -0
- package/runner/src/runner-exit.ts +12 -0
- package/runner/src/runner-helpers.ts +582 -0
- package/runner/src/runner-insights.ts +105 -0
- package/runner/src/runner-mcp-proxy.ts +46 -0
- package/runner/src/runner-spawn-config.ts +68 -0
- package/runner/src/runner-stale-scratch-sweep.ts +21 -0
- package/runner/src/runner.ts +9 -0
- package/runner/src/runtime-token-file.ts +45 -0
- package/runner/src/runtime-token-remint.ts +56 -0
- package/runner/src/service-access.ts +88 -0
- package/runner/src/session-destroy.ts +27 -0
- package/runner/src/session-insights.ts +118 -0
- package/runner/src/session-scratch.ts +296 -0
- package/runner/src/spawn-input.ts +147 -0
- package/runner/src/startup-config-fetch.ts +48 -0
- package/runner/src/subreaper.ts +113 -0
- package/runner/src/template-resolver.ts +29 -0
- package/runner/src/test-run-dedup.ts +435 -0
- package/runner/src/transcript-context.ts +99 -0
- package/runner/src/transport-errors.ts +48 -0
- package/runner/src/turn-opener.ts +55 -0
- package/runner/src/turn-reconcile-event.ts +88 -0
- package/runner/src/vault-proxy-hop.ts +99 -0
- package/runner/src/version.ts +44 -0
- package/runner/src/web-tool-call-proxy.ts +128 -0
- package/runner/src/web-tools.ts +59 -0
- package/runner/test-support/codex-web-config-proof.ts +149 -0
- package/runner/test-support/effective-launch.ts +189 -0
- package/runner/test-support/native-context-sources.ts +77 -0
- package/runner/test-support/provisioning-context.ts +55 -0
- package/runner/test-support/recorder-double.ts +130 -0
- package/runner/test-support/recording-provider.ts +242 -0
- package/runner/test-support/runner-harness.ts +249 -0
- package/runner/test-support/service-access-fixture.ts +12 -0
- package/scripts/agent-vault/bootstrap.py +87 -0
- package/scripts/agent-vault/install.py +200 -0
- package/scripts/agent-vault/install_refresh.py +98 -0
- package/scripts/agent-vault/refresh.py +116 -0
- package/scripts/agent-vault/refresh_provision.py +109 -0
- package/scripts/agent-vault/refresh_store.py +54 -0
- package/scripts/agent-vault/runtime.py +253 -0
- package/scripts/agent-vault/sec-ops-activation.json +23 -0
- package/scripts/artifact-checkout-gc.ts +51 -0
- package/scripts/cd-config.ts +237 -0
- package/scripts/cd-deploy-debounce.ts +94 -0
- package/scripts/cd-deploy-worktree-gc.ts +235 -0
- package/scripts/cd-fleet-membership.ts +48 -0
- package/scripts/cd-host-epochs.ts +101 -0
- package/scripts/cd-hub-wake.ts +40 -0
- package/scripts/cd-land-boundary.ts +49 -0
- package/scripts/cd-watcher.ts +985 -0
- package/scripts/dashboard-build-marker.ts +71 -0
- package/scripts/fleet-sha-coverage.ts +66 -0
- package/scripts/gate-run-lease.ts +329 -0
- package/scripts/gate-slot +9 -0
- package/scripts/gate-slot-fleet-health.ts +60 -0
- package/scripts/gate.sh +6 -0
- package/scripts/install-bin-shim.cjs +149 -0
- package/scripts/orchestrator-spawn-smoke.ts +398 -0
- package/scripts/provisioning-matrix.ts +72 -0
- package/scripts/release-cd-stamp.ts +146 -0
- package/scripts/release-health.ts +133 -0
- package/scripts/release-report.ts +102 -0
- package/scripts/release-upgrade.ts +1296 -0
- package/scripts/steward-policy-cleanup.ts +73 -0
- package/scripts/wait-for-deploy.ts +43 -0
- package/src/agent-authz.ts +219 -0
- package/src/agent-branch-state.ts +45 -0
- package/src/agent-busy-health.ts +158 -0
- package/src/agent-card-projection.ts +86 -0
- package/src/agent-channel-binding.ts +49 -0
- package/src/agent-command-activity.ts +39 -0
- package/src/agent-core.ts +29 -0
- package/src/agent-death-diagnosis.ts +314 -0
- package/src/agent-drive-arbiter.ts +112 -0
- package/src/agent-exit-alarm.ts +10 -0
- package/src/agent-exit-cleanup-async.ts +69 -0
- package/src/agent-exit-cleanup.ts +99 -0
- package/src/agent-exit-report.ts +28 -0
- package/src/agent-issue-repo.ts +53 -0
- package/src/agent-launch-shape-redaction.ts +72 -0
- package/src/agent-lifecycle-events.ts +428 -0
- package/src/agent-principal.ts +14 -0
- package/src/agent-profile-catalog.ts +188 -0
- package/src/agent-ref.ts +340 -0
- package/src/agent-spawn.ts +45 -0
- package/src/agent-status-events.ts +41 -0
- package/src/agent-system-tags.ts +38 -0
- package/src/artifact-media.ts +34 -0
- package/src/artifact-storage.ts +245 -0
- package/src/artifact-text.ts +31 -0
- package/src/async-deadline.ts +59 -0
- package/src/auth/admin-routes.ts +36 -0
- package/src/auth/index.ts +23 -0
- package/src/auth/login-rate-limiter.ts +153 -0
- package/src/auth/password.ts +142 -0
- package/src/auth/provider.ts +60 -0
- package/src/auth/role-scopes.ts +15 -0
- package/src/auth/session-cookie.ts +35 -0
- package/src/auth/session-refresh.ts +61 -0
- package/src/auth/session.test-fixture.ts +10 -0
- package/src/auth/session.ts +107 -0
- package/src/authority-audit.ts +56 -0
- package/src/authz-meta-keys.ts +64 -0
- package/src/auto-spawn-dispatch.ts +154 -0
- package/src/automations/constants.ts +14 -0
- package/src/automations/cron.ts +129 -0
- package/src/automations/crud.ts +129 -0
- package/src/automations/dispatch.ts +299 -0
- package/src/automations/index.ts +5 -0
- package/src/automations/precheck.ts +124 -0
- package/src/automations/reconcile.ts +314 -0
- package/src/automations/storage.ts +200 -0
- package/src/automations/types.ts +16 -0
- package/src/automations/validation.ts +216 -0
- package/src/automations.ts +1 -0
- package/src/branch-landed.ts +761 -0
- package/src/browser-authz.ts +18 -0
- package/src/browser-config.ts +31 -0
- package/src/bundled-workflows.ts +48 -0
- package/src/bus-outbox-async.ts +16 -0
- package/src/bus-outbox.ts +265 -0
- package/src/bus-resume-commands.ts +18 -0
- package/src/bus.ts +792 -0
- package/src/canonical-repo-root.ts +131 -0
- package/src/cd-deploy-notify.ts +59 -0
- package/src/cd-host-deferrals.ts +23 -0
- package/src/cd-host-lag-notify.ts +36 -0
- package/src/cd-repository.ts +49 -0
- package/src/channel-output-control.ts +43 -0
- package/src/channel-output-validation.ts +11 -0
- package/src/channel-policy-health.ts +20 -0
- package/src/channel-target.ts +40 -0
- package/src/channels-host-service.ts +219 -0
- package/src/ci/bun-test-log.ts +41 -0
- package/src/ci/failed-test-files.ts +52 -0
- package/src/ci/gate-history.ts +66 -0
- package/src/ci/github-actions.ts +145 -0
- package/src/ci/incidents.ts +175 -0
- package/src/ci/index.ts +6 -0
- package/src/ci/job-verdict.ts +27 -0
- package/src/ci/land-boundary-ci.ts +104 -0
- package/src/ci/monitor.ts +528 -0
- package/src/ci/not-triggered.ts +116 -0
- package/src/ci/notifications.ts +234 -0
- package/src/ci/provider.ts +87 -0
- package/src/ci/root-missing.ts +35 -0
- package/src/ci/transition-notify.ts +279 -0
- package/src/ci-monitor.ts +7 -0
- package/src/claude-api-budget-async.ts +11 -0
- package/src/claude-api-budget-config.ts +23 -0
- package/src/claude-api-expiry.ts +70 -0
- package/src/claude-api-overflow.ts +146 -0
- package/src/claude-app/config.ts +13 -0
- package/src/claude-app/oauth-http.ts +127 -0
- package/src/claude-app/oauth-provider.ts +136 -0
- package/src/claude-app/passphrase.ts +14 -0
- package/src/claude-app-auth.ts +65 -0
- package/src/claude-app-gateway.ts +68 -0
- package/src/cli/_shared.ts +136 -0
- package/src/cli/agent-detect.ts +175 -0
- package/src/cli/agent-guide.ts +152 -0
- package/src/cli/agent-keep.ts +37 -0
- package/src/cli/agent-meta.ts +111 -0
- package/src/cli/artifact.ts +154 -0
- package/src/cli/browser.ts +56 -0
- package/src/cli/channel-output.ts +17 -0
- package/src/cli/channels-host.ts +13 -0
- package/src/cli/channels.ts +16 -0
- package/src/cli/claude-api-budget.ts +41 -0
- package/src/cli/context-probe.ts +90 -0
- package/src/cli/credentials.ts +1 -0
- package/src/cli/daemon.ts +125 -0
- package/src/cli/dev.ts +185 -0
- package/src/cli/ephemeral.ts +159 -0
- package/src/cli/hosts.ts +41 -0
- package/src/cli/index.ts +442 -0
- package/src/cli/introspect.ts +74 -0
- package/src/cli/maintenance.ts +24 -0
- package/src/cli/merges.ts +78 -0
- package/src/cli/message.ts +229 -0
- package/src/cli/orchestrator.ts +384 -0
- package/src/cli/pair.ts +135 -0
- package/src/cli/profile.ts +35 -0
- package/src/cli/project.ts +52 -0
- package/src/cli/prompts.ts +23 -0
- package/src/cli/provider-enablement.ts +42 -0
- package/src/cli/provider.ts +230 -0
- package/src/cli/recipe.ts +110 -0
- package/src/cli/reply.ts +130 -0
- package/src/cli/roles.ts +60 -0
- package/src/cli/routing-policy.ts +20 -0
- package/src/cli/run.ts +96 -0
- package/src/cli/secrets-backup.ts +85 -0
- package/src/cli/secrets.ts +55 -0
- package/src/cli/service-access.ts +23 -0
- package/src/cli/setup.ts +57 -0
- package/src/cli/shutdown.ts +16 -0
- package/src/cli/spawn.ts +31 -0
- package/src/cli/state.ts +73 -0
- package/src/cli/steward.ts +58 -0
- package/src/cli/task.ts +151 -0
- package/src/cli/team.ts +18 -0
- package/src/cli/timers.ts +53 -0
- package/src/cli/token.ts +72 -0
- package/src/cli/upgrade.ts +200 -0
- package/src/cli/web-tool-calls.ts +17 -0
- package/src/cli/workflow.ts +46 -0
- package/src/cli/workspace.ts +544 -0
- package/src/cli.ts +4 -0
- package/src/codex-reset-consume.ts +274 -0
- package/src/codex-wham-quota.ts +177 -0
- package/src/command-events.ts +69 -0
- package/src/command-secrets.ts +198 -0
- package/src/command-ttl.ts +63 -0
- package/src/commands-db.ts +1200 -0
- package/src/commands-landing-async.ts +166 -0
- package/src/commands-write.ts +168 -0
- package/src/comment-blocks.ts +84 -0
- package/src/compaction-watch.ts +259 -0
- package/src/config-model-selection.ts +14 -0
- package/src/config-store-write.ts +39 -0
- package/src/config-store.ts +1253 -0
- package/src/config.ts +939 -0
- package/src/connector-boot-health.ts +27 -0
- package/src/connector-paths.ts +47 -0
- package/src/connectors.ts +547 -0
- package/src/content-security.ts +12 -0
- package/src/context-advisory.ts +279 -0
- package/src/context-block-rendered-at.ts +33 -0
- package/src/context-injection-channel.ts +49 -0
- package/src/context-router.ts +121 -0
- package/src/context-threshold-config.ts +52 -0
- package/src/continuation-replay-edge.ts +30 -0
- package/src/continuity-working-state.ts +107 -0
- package/src/contracts.ts +109 -0
- package/src/coordinator-authority.ts +100 -0
- package/src/coordinator-digest-config.ts +20 -0
- package/src/cosmos-events.ts +164 -0
- package/src/daemon.ts +570 -0
- package/src/dashboard-notifications.ts +169 -0
- package/src/dashboard-presence.ts +86 -0
- package/src/db/activity-async.ts +58 -0
- package/src/db/activity-read-ops.ts +42 -0
- package/src/db/activity-write-ops.ts +44 -0
- package/src/db/activity.ts +454 -0
- package/src/db/agent-card-read.ts +98 -0
- package/src/db/agent-effort-state.ts +146 -0
- package/src/db/agent-exit-cleanup.ts +94 -0
- package/src/db/agent-exit-report.ts +33 -0
- package/src/db/agent-gate-runs-write-ops.ts +7 -0
- package/src/db/agent-gate-runs.ts +96 -0
- package/src/db/agent-identity-archive.test-fixture.ts +12 -0
- package/src/db/agent-identity-archive.ts +75 -0
- package/src/db/agent-keep.ts +21 -0
- package/src/db/agent-lifecycle-write-ops.ts +93 -0
- package/src/db/agent-meta.ts +74 -0
- package/src/db/agent-outstanding-work.ts +154 -0
- package/src/db/agent-ownership-async.ts +45 -0
- package/src/db/agent-ownership-read-ops.ts +12 -0
- package/src/db/agent-ownership-write-ops.ts +54 -0
- package/src/db/agent-ownership.ts +200 -0
- package/src/db/agent-predicates.ts +64 -0
- package/src/db/agent-read.ts +39 -0
- package/src/db/agent-search-async.ts +21 -0
- package/src/db/agent-search-read-ops.ts +8 -0
- package/src/db/agent-search.ts +162 -0
- package/src/db/agent-shutdown-in-flight.ts +21 -0
- package/src/db/agents-async.ts +337 -0
- package/src/db/agents-prune-write-op.ts +37 -0
- package/src/db/agents-read-ops.ts +33 -0
- package/src/db/agents-write-ops.ts +188 -0
- package/src/db/agents.ts +1284 -0
- package/src/db/api-budget-schema.ts +144 -0
- package/src/db/api-budget-usage-migration.ts +31 -0
- package/src/db/api-budget-usage.ts +40 -0
- package/src/db/artifact-browse.ts +145 -0
- package/src/db/artifact-retention.ts +115 -0
- package/src/db/artifacts-async.ts +81 -0
- package/src/db/artifacts-read-ops.ts +24 -0
- package/src/db/artifacts-write-ops.ts +51 -0
- package/src/db/artifacts.ts +307 -0
- package/src/db/auth-identities.ts +128 -0
- package/src/db/backlog.ts +172 -0
- package/src/db/blackboard.ts +171 -0
- package/src/db/broadcast-scope.ts +63 -0
- package/src/db/broker-memory-migration.ts +71 -0
- package/src/db/browser-sessions.ts +89 -0
- package/src/db/budget-lineage.ts +26 -0
- package/src/db/bus-outbox-read-ops.ts +29 -0
- package/src/db/bus-outbox-write-ops.ts +58 -0
- package/src/db/bus-prune-async.ts +16 -0
- package/src/db/busy-regression.worker.ts +48 -0
- package/src/db/caller-lifecycle.ts +24 -0
- package/src/db/carry-pending-marker.ts +129 -0
- package/src/db/carry-pending.ts +145 -0
- package/src/db/channel-binding-delete.ts +15 -0
- package/src/db/channel-egress-allowlist.ts +200 -0
- package/src/db/channel-identity.ts +38 -0
- package/src/db/channel-runtime.ts +19 -0
- package/src/db/channels-async.ts +55 -0
- package/src/db/channels-read-ops.ts +13 -0
- package/src/db/channels-session-fence.ts +18 -0
- package/src/db/channels-write-ops.ts +46 -0
- package/src/db/channels.ts +654 -0
- package/src/db/checkout-refresh.ts +36 -0
- package/src/db/ci-gate-runs.ts +92 -0
- package/src/db/ci-incidents-async.ts +76 -0
- package/src/db/ci-incidents-read-ops.ts +15 -0
- package/src/db/ci-incidents-write-ops.ts +57 -0
- package/src/db/ci-incidents.ts +667 -0
- package/src/db/ci-sha-observations-schema.ts +33 -0
- package/src/db/claim-sql.ts +44 -0
- package/src/db/claude-api-budget-ops.ts +15 -0
- package/src/db/claude-api-budget-reconcile.ts +39 -0
- package/src/db/claude-api-budget.ts +198 -0
- package/src/db/claude-app-oauth.ts +74 -0
- package/src/db/claude-catalog-reconcile.ts +27 -0
- package/src/db/codex-reset-consumes-async.ts +9 -0
- package/src/db/codex-reset-consumes-read-ops.ts +5 -0
- package/src/db/codex-reset-consumes-write-ops.ts +22 -0
- package/src/db/codex-reset-consumes.ts +122 -0
- package/src/db/command-agent-profiles.ts +58 -0
- package/src/db/command-row.ts +88 -0
- package/src/db/command-terminal-status.ts +33 -0
- package/src/db/command-vault-pruning.ts +30 -0
- package/src/db/commands-cancel-write.ts +45 -0
- package/src/db/commands-claim-admission.ts +144 -0
- package/src/db/commands-effort-read.ts +58 -0
- package/src/db/commands-host-land-admission.ts +106 -0
- package/src/db/commands-kernel-landing.ts +268 -0
- package/src/db/commands-land-occupancy.ts +40 -0
- package/src/db/commands-land-wait.ts +38 -0
- package/src/db/commands-landing-completeness.ts +66 -0
- package/src/db/commands-landing-tuples.ts +22 -0
- package/src/db/commands-landing.ts +1046 -0
- package/src/db/commands-leaseless-sweep.ts +72 -0
- package/src/db/commands-list-query.ts +47 -0
- package/src/db/commands-planner-stats.test-fixture.ts +97 -0
- package/src/db/commands-read-ops.ts +49 -0
- package/src/db/commands-scheduler-recovery.ts +71 -0
- package/src/db/commands-spawn-read.ts +33 -0
- package/src/db/commands-write-ops.ts +307 -0
- package/src/db/config-store-write-ops.ts +60 -0
- package/src/db/connection-instrumentation.ts +76 -0
- package/src/db/connection.ts +532 -0
- package/src/db/context-reset-carry.ts +144 -0
- package/src/db/continuation-archive-purge.ts +48 -0
- package/src/db/continuation-archive-search.ts +249 -0
- package/src/db/continuation-archives-async.ts +59 -0
- package/src/db/continuation-archives-read-ops.ts +10 -0
- package/src/db/continuation-archives-write-ops.ts +17 -0
- package/src/db/continuation-archives.ts +158 -0
- package/src/db/continuations.ts +201 -0
- package/src/db/coordinator-delivery.ts +10 -0
- package/src/db/coordinator-digest-async.ts +13 -0
- package/src/db/coordinator-digest-flush.ts +6 -0
- package/src/db/coordinator-digest.ts +145 -0
- package/src/db/coordinator-seat.ts +130 -0
- package/src/db/crash-reports.ts +115 -0
- package/src/db/db-error-registry.ts +290 -0
- package/src/db/db-reader-worker.ts +91 -0
- package/src/db/db-writer-worker.ts +66 -0
- package/src/db/deferred-lineage-report-queries.ts +28 -0
- package/src/db/deferred-lineage-reports.ts +44 -0
- package/src/db/delivery-async.ts +102 -0
- package/src/db/delivery-expiration-health.ts +97 -0
- package/src/db/delivery-expiration.ts +52 -0
- package/src/db/delivery-quality-async.ts +23 -0
- package/src/db/delivery-quality.ts +116 -0
- package/src/db/delivery-read-ops.ts +26 -0
- package/src/db/delivery-report-echo.ts +53 -0
- package/src/db/delivery-write-ops.ts +77 -0
- package/src/db/delivery.ts +545 -0
- package/src/db/deploy-events-async.ts +66 -0
- package/src/db/deploy-events-read-ops.ts +25 -0
- package/src/db/deploy-events-write-ops.ts +81 -0
- package/src/db/deploy-events.ts +554 -0
- package/src/db/deploy-task-completion.ts +48 -0
- package/src/db/drive-leases.ts +165 -0
- package/src/db/durable-payloads.ts +92 -0
- package/src/db/fixtures/writer-shutdown.ts +28 -0
- package/src/db/fts-query.ts +8 -0
- package/src/db/gate-policy.ts +27 -0
- package/src/db/gate-runs.ts +181 -0
- package/src/db/gateway.ts +513 -0
- package/src/db/generation-launch.ts +82 -0
- package/src/db/guides-search.ts +18 -0
- package/src/db/history-delivery-settle.ts +57 -0
- package/src/db/hosts-async.ts +150 -0
- package/src/db/hosts-backfill.ts +91 -0
- package/src/db/hosts-read-ops.ts +21 -0
- package/src/db/hosts-registration.ts +452 -0
- package/src/db/hosts-views.ts +259 -0
- package/src/db/hosts-write-ops.ts +108 -0
- package/src/db/hosts.ts +251 -0
- package/src/db/human-address.ts +6 -0
- package/src/db/idle-digest.ts +54 -0
- package/src/db/idle-self-care.ts +100 -0
- package/src/db/inbox-async.ts +29 -0
- package/src/db/inbox-read-ops.ts +8 -0
- package/src/db/inbox-write-ops.ts +29 -0
- package/src/db/inbox.ts +197 -0
- package/src/db/index.ts +147 -0
- package/src/db/injection-attempts.ts +41 -0
- package/src/db/insights-read-ops.ts +12 -0
- package/src/db/insights-write-ops.ts +16 -0
- package/src/db/integrations.ts +297 -0
- package/src/db/issue-associations.ts +136 -0
- package/src/db/issue-lifecycle.ts +199 -0
- package/src/db/issue-refs.ts +312 -0
- package/src/db/kernel-event-log-schema.ts +14 -0
- package/src/db/kernel-landing-admission.ts +15 -0
- package/src/db/kernel-landing-command-authority.ts +222 -0
- package/src/db/kernel-persistence-async.ts +48 -0
- package/src/db/kernel-persistence-read-ops.ts +24 -0
- package/src/db/kernel-persistence-write-ops.ts +43 -0
- package/src/db/land-boundaries.ts +138 -0
- package/src/db/land-executing.ts +147 -0
- package/src/db/land-gate-attestations.ts +161 -0
- package/src/db/land-incident-eligibility.ts +44 -0
- package/src/db/land-queue-trace.ts +28 -0
- package/src/db/land-stack.ts +80 -0
- package/src/db/land-telemetry-schema.ts +50 -0
- package/src/db/land-telemetry-write-ops.ts +16 -0
- package/src/db/land-telemetry.ts +114 -0
- package/src/db/land-withdrawal-state.ts +26 -0
- package/src/db/landed-merge-evidence.ts +72 -0
- package/src/db/landed-task-attribution.ts +23 -0
- package/src/db/landing-audit.ts +18 -0
- package/src/db/landing-controllers.ts +67 -0
- package/src/db/landing-ingress-async.ts +102 -0
- package/src/db/landing-ingress-read-ops.ts +8 -0
- package/src/db/landing-ingress-write-ops.ts +42 -0
- package/src/db/landing-ingress.ts +380 -0
- package/src/db/landing-read-ops.ts +18 -0
- package/src/db/landing-receipts.ts +206 -0
- package/src/db/landing-schema.ts +479 -0
- package/src/db/launch-facts.ts +60 -0
- package/src/db/legacy-landing-publication.ts +103 -0
- package/src/db/legacy-message-backfill.ts +90 -0
- package/src/db/lifecycle-seq.ts +127 -0
- package/src/db/lifecycle-write-window.ts +216 -0
- package/src/db/lineage-pair-dedupe-sql.ts +80 -0
- package/src/db/lineage-startup-captures.ts +43 -0
- package/src/db/long-running-work-async.ts +12 -0
- package/src/db/long-running-work-write-ops.ts +8 -0
- package/src/db/long-running-work.ts +78 -0
- package/src/db/macos-privacy.ts +72 -0
- package/src/db/main-connection-writes.ts +44 -0
- package/src/db/main-thread-state.ts +38 -0
- package/src/db/maintenance-health.ts +560 -0
- package/src/db/maintenance-indexes.ts +37 -0
- package/src/db/maintenance-job-runs-async.ts +15 -0
- package/src/db/maintenance-job-runs.ts +62 -0
- package/src/db/maintenance-job-write-ops.ts +10 -0
- package/src/db/maintenance-pauses.ts +224 -0
- package/src/db/maintenance-worker.ts +111 -0
- package/src/db/mappers.ts +422 -0
- package/src/db/memory-preamble-read.ts +13 -0
- package/src/db/memory-resolve.ts +209 -0
- package/src/db/memory-retirement-plan.ts +31 -0
- package/src/db/memory-retirement.ts +15 -0
- package/src/db/merge-drain-async.ts +8 -0
- package/src/db/merge-lease.ts +225 -0
- package/src/db/message-claims.ts +16 -0
- package/src/db/message-queries.ts +16 -0
- package/src/db/message-read-mark.ts +32 -0
- package/src/db/message-reads-async.ts +46 -0
- package/src/db/message-reads-read-ops.ts +35 -0
- package/src/db/message-reads-write-ops.ts +27 -0
- package/src/db/message-reads.ts +553 -0
- package/src/db/message-send-suppression.ts +58 -0
- package/src/db/message-send.ts +76 -0
- package/src/db/message-thread.ts +15 -0
- package/src/db/message-write-ops.ts +100 -0
- package/src/db/messages-async.ts +31 -0
- package/src/db/messages-read-ops.ts +14 -0
- package/src/db/messages.ts +1201 -0
- package/src/db/migration-marker.ts +13 -0
- package/src/db/migrations.ts +1761 -0
- package/src/db/notification-subscriptions.ts +282 -0
- package/src/db/on-loop-write-transaction.ts +34 -0
- package/src/db/operator-actions-schema.ts +10 -0
- package/src/db/operator-decisions.ts +180 -0
- package/src/db/orchestrators-async.ts +61 -0
- package/src/db/orchestrators-read-ops.ts +7 -0
- package/src/db/orchestrators-write-ops.ts +58 -0
- package/src/db/orchestrators.ts +497 -0
- package/src/db/outbox-codec.ts +16 -0
- package/src/db/pair-maintenance.ts +9 -0
- package/src/db/pairs-async.ts +10 -0
- package/src/db/pairs-write-ops.ts +8 -0
- package/src/db/pairs.ts +264 -0
- package/src/db/pending-relay-runs.ts +73 -0
- package/src/db/plan-blurb-migration.ts +158 -0
- package/src/db/plan-ci-blocks.ts +28 -0
- package/src/db/plan-completion.ts +55 -0
- package/src/db/plan-conformance.ts +104 -0
- package/src/db/plan-dispatch-schema.ts +17 -0
- package/src/db/plan-dispatch-store.ts +112 -0
- package/src/db/plan-external.ts +79 -0
- package/src/db/plan-graph-async.ts +23 -0
- package/src/db/plan-graph-read-ops.ts +16 -0
- package/src/db/plan-graph-write-ops.ts +37 -0
- package/src/db/plan-graph.ts +403 -0
- package/src/db/plan-import-schema.ts +19 -0
- package/src/db/plan-import.ts +211 -0
- package/src/db/plan-task-create.ts +44 -0
- package/src/db/planner-stats.ts +123 -0
- package/src/db/plans-async.ts +22 -0
- package/src/db/plans-read-ops.ts +11 -0
- package/src/db/plans-write-ops.ts +9 -0
- package/src/db/plans.ts +385 -0
- package/src/db/policy-runtime.ts +14 -0
- package/src/db/presence-buffer.ts +111 -0
- package/src/db/presence-loop.ts +58 -0
- package/src/db/presence-write-ops.ts +28 -0
- package/src/db/presence-write.ts +38 -0
- package/src/db/profile-artifact-backfill-migration.ts +32 -0
- package/src/db/profile-host-sources-migration.ts +150 -0
- package/src/db/profile-legacy-project-instructions-migration.ts +41 -0
- package/src/db/profile-name-case-migration.ts +46 -0
- package/src/db/profile-override-migration.ts +200 -0
- package/src/db/profile-project-ack-migration.ts +55 -0
- package/src/db/profile-slim-migration.ts +125 -0
- package/src/db/profile-slim-plan.ts +190 -0
- package/src/db/project-entries-async.ts +18 -0
- package/src/db/project-entries-read-ops.ts +28 -0
- package/src/db/project-entries.ts +514 -0
- package/src/db/project-entry-search.ts +63 -0
- package/src/db/project-identity.ts +16 -0
- package/src/db/project-journal.ts +256 -0
- package/src/db/project-lifecycle.ts +80 -0
- package/src/db/project-memory-group-migration.ts +76 -0
- package/src/db/project-phantom-merge.ts +228 -0
- package/src/db/project-root-schema.ts +30 -0
- package/src/db/project-trust-approvals.ts +98 -0
- package/src/db/projects-async.ts +50 -0
- package/src/db/projects-read-ops.ts +59 -0
- package/src/db/projects-write-ops.ts +74 -0
- package/src/db/projects.ts +629 -0
- package/src/db/prompt-templates-schema.ts +23 -0
- package/src/db/prompt-templates.ts +138 -0
- package/src/db/prompt-version-migration.ts +115 -0
- package/src/db/prompt-versions-ops.ts +17 -0
- package/src/db/prompt-versions.ts +167 -0
- package/src/db/provider-catalog-async.ts +31 -0
- package/src/db/provider-catalog-read-ops.ts +8 -0
- package/src/db/provider-catalog-write-ops.ts +16 -0
- package/src/db/provider-config-history.ts +49 -0
- package/src/db/provider-config-secrets.ts +117 -0
- package/src/db/provider-flap-messages-async.ts +6 -0
- package/src/db/provider-flap-messages-write-ops.ts +13 -0
- package/src/db/provider-flap-messages.ts +19 -0
- package/src/db/provider-quota-advisory-types.ts +39 -0
- package/src/db/provider-quota-burn.ts +322 -0
- package/src/db/provider-quota-effect-occurrences.ts +13 -0
- package/src/db/provider-quota-lease-write-ops.ts +24 -0
- package/src/db/provider-quota-leases-async.ts +35 -0
- package/src/db/provider-quota-leases.ts +174 -0
- package/src/db/provider-quota-matrix-cache.ts +85 -0
- package/src/db/provider-quota-matrix-fetch.ts +85 -0
- package/src/db/provider-quota-merge.ts +90 -0
- package/src/db/provider-quota-notification-write.ts +98 -0
- package/src/db/provider-quota-prune.ts +35 -0
- package/src/db/provider-quota-read-async.ts +77 -0
- package/src/db/provider-quota-read-ops.ts +56 -0
- package/src/db/provider-quota-recipients.ts +38 -0
- package/src/db/provider-quota-state.ts +139 -0
- package/src/db/provider-quota-visibility.ts +22 -0
- package/src/db/provider-quota-write-ops.ts +71 -0
- package/src/db/provider-quotas.ts +726 -0
- package/src/db/provider-secret-scrub.ts +64 -0
- package/src/db/provisioning-assets-migration.ts +85 -0
- package/src/db/provisioning-async.ts +116 -0
- package/src/db/provisioning-callmux.ts +184 -0
- package/src/db/provisioning-github-api.ts +16 -0
- package/src/db/provisioning-github-import-target.ts +29 -0
- package/src/db/provisioning-mcp-validation.ts +103 -0
- package/src/db/provisioning-read-ops.ts +23 -0
- package/src/db/provisioning-registry.ts +1122 -0
- package/src/db/provisioning-resolve.ts +321 -0
- package/src/db/provisioning-write-ops.ts +44 -0
- package/src/db/qa-skill-seed.ts +27 -0
- package/src/db/quota-lease-busy.worker.ts +62 -0
- package/src/db/read-op-marshaling-fixtures.ts +724 -0
- package/src/db/read-ops.ts +266 -0
- package/src/db/reader-pool.ts +252 -0
- package/src/db/recipe-read-ops.ts +15 -0
- package/src/db/recipe-write-ops.ts +68 -0
- package/src/db/reply-obligations.ts +265 -0
- package/src/db/report-suppression.ts +126 -0
- package/src/db/restart-epoch-admin-async.ts +14 -0
- package/src/db/restart-epoch-admin.ts +67 -0
- package/src/db/restart-epoch-admission.ts +114 -0
- package/src/db/restart-epoch-async.ts +80 -0
- package/src/db/restart-epoch-begin.ts +177 -0
- package/src/db/restart-epoch-read-ops.ts +40 -0
- package/src/db/restart-epoch-release.ts +248 -0
- package/src/db/restart-epoch-write-ops.ts +117 -0
- package/src/db/restart-epoch.test-fixture.ts +37 -0
- package/src/db/restart-epoch.ts +623 -0
- package/src/db/restart-sensitive.ts +81 -0
- package/src/db/retention.ts +423 -0
- package/src/db/review-ref-cleanups.ts +306 -0
- package/src/db/routing-policy.ts +64 -0
- package/src/db/scheduled-timer-projection.ts +123 -0
- package/src/db/scheduled-timer-quota-chaos-worker.ts +84 -0
- package/src/db/scheduled-timers.ts +521 -0
- package/src/db/schema.ts +1472 -0
- package/src/db/scoped-message-reads.ts +31 -0
- package/src/db/secrets-broker-async.ts +31 -0
- package/src/db/secrets-broker-read-ops.ts +8 -0
- package/src/db/secrets-broker-write-ops.ts +23 -0
- package/src/db/secrets-broker.ts +221 -0
- package/src/db/secrets-vault-import.ts +37 -0
- package/src/db/secrets-vault-key-lifecycle.ts +64 -0
- package/src/db/secrets-vault-metadata.ts +37 -0
- package/src/db/secrets-vault-migration.ts +53 -0
- package/src/db/secrets-vault-write.ts +97 -0
- package/src/db/secrets-vault.ts +69 -0
- package/src/db/self-effort-permissions.ts +50 -0
- package/src/db/service-access-read-ops.ts +10 -0
- package/src/db/services-async.ts +29 -0
- package/src/db/services-read-ops.ts +134 -0
- package/src/db/services-write-ops.ts +74 -0
- package/src/db/shared.ts +7 -0
- package/src/db/shipping-board-async.ts +6 -0
- package/src/db/shipping-board.ts +319 -0
- package/src/db/shipping-stats-async.ts +24 -0
- package/src/db/shipping-stats-histogram.ts +45 -0
- package/src/db/shipping-stats-schema.ts +8 -0
- package/src/db/shipping-stats.ts +265 -0
- package/src/db/snapshot-ledger-prune.ts +53 -0
- package/src/db/spawn-budget.ts +145 -0
- package/src/db/spawn-command-busy.worker.ts +71 -0
- package/src/db/spawn-delegation-state.ts +124 -0
- package/src/db/spawn-delegation.ts +114 -0
- package/src/db/spawn-host-cap.ts +29 -0
- package/src/db/spawn-in-flight-count.ts +37 -0
- package/src/db/spawn-in-flight.ts +15 -0
- package/src/db/spawn-process-evidence.ts +68 -0
- package/src/db/spawn-project-target.ts +57 -0
- package/src/db/spawn-registration-confirmed-backfill.ts +71 -0
- package/src/db/spawn-request-id-migration.ts +36 -0
- package/src/db/spawn-request-id.ts +35 -0
- package/src/db/spawn-request-reuse.ts +28 -0
- package/src/db/spawn-tree-cleanup.ts +92 -0
- package/src/db/spawn-tree.ts +29 -0
- package/src/db/sql-audit-indexes.ts +77 -0
- package/src/db/stalled-message-delivery.ts +52 -0
- package/src/db/startup-write-lock.ts +36 -0
- package/src/db/stats-async.ts +235 -0
- package/src/db/stats-health-read-model.ts +225 -0
- package/src/db/stats-read-ops.ts +25 -0
- package/src/db/stats.ts +633 -0
- package/src/db/target-host.ts +25 -0
- package/src/db/task-async.ts +165 -0
- package/src/db/task-comment-through-async.ts +14 -0
- package/src/db/task-comment-through-read-ops.ts +4 -0
- package/src/db/task-comment-through-write-ops.ts +7 -0
- package/src/db/task-comment-through.ts +123 -0
- package/src/db/task-core.ts +44 -0
- package/src/db/task-deliverables-async.ts +60 -0
- package/src/db/task-deliverables-read-ops.ts +4 -0
- package/src/db/task-deliverables-write-ops.ts +37 -0
- package/src/db/task-deliverables.ts +387 -0
- package/src/db/task-dependency-cycle.worker.ts +43 -0
- package/src/db/task-detail-projection.ts +91 -0
- package/src/db/task-entity-async.ts +252 -0
- package/src/db/task-entity-read-ops.ts +51 -0
- package/src/db/task-entity-write-ops.ts +197 -0
- package/src/db/task-entity.ts +1143 -0
- package/src/db/task-execution.ts +20 -0
- package/src/db/task-issue-relation.ts +23 -0
- package/src/db/task-issue-source.ts +46 -0
- package/src/db/task-land-withdraw-async.ts +10 -0
- package/src/db/task-land-withdraw-read-ops.ts +13 -0
- package/src/db/task-land-withdraw-read.ts +47 -0
- package/src/db/task-land-withdraw-write-ops.ts +31 -0
- package/src/db/task-land-withdraw.ts +423 -0
- package/src/db/task-list.ts +113 -0
- package/src/db/task-maintenance.ts +25 -0
- package/src/db/task-memory-async.ts +19 -0
- package/src/db/task-memory-read-ops.ts +9 -0
- package/src/db/task-memory-write-ops.ts +23 -0
- package/src/db/task-memory.ts +170 -0
- package/src/db/task-owner.ts +126 -0
- package/src/db/task-read-ops.ts +44 -0
- package/src/db/task-review-hold-async.ts +20 -0
- package/src/db/task-review-hold-delivery.ts +58 -0
- package/src/db/task-review-hold-write-ops.ts +26 -0
- package/src/db/task-review-hold.ts +615 -0
- package/src/db/task-state-reconcile-async.ts +12 -0
- package/src/db/task-state-reconcile.ts +163 -0
- package/src/db/task-validation.ts +71 -0
- package/src/db/task-write-ops.ts +145 -0
- package/src/db/tasks.ts +528 -0
- package/src/db/team-epics.ts +37 -0
- package/src/db/team-idle.ts +35 -0
- package/src/db/team-project.ts +69 -0
- package/src/db/team-spawn-delegation-read.ts +36 -0
- package/src/db/team-spawn-delegation.ts +49 -0
- package/src/db/teams-async.ts +58 -0
- package/src/db/teams-read-ops.ts +27 -0
- package/src/db/teams-write-ops.ts +17 -0
- package/src/db/teams.ts +504 -0
- package/src/db/terminal-events.ts +113 -0
- package/src/db/timer-async.ts +523 -0
- package/src/db/timer-cutover-core.ts +545 -0
- package/src/db/timer-cutover-report-read-ops.ts +211 -0
- package/src/db/timer-cutover-write-ops.ts +282 -0
- package/src/db/timer-ingress-payload.ts +160 -0
- package/src/db/timer-ingress-read-ops.ts +39 -0
- package/src/db/timer-ingress-request-keys.ts +282 -0
- package/src/db/timer-ingress-write-ops.ts +154 -0
- package/src/db/timer-ingress.ts +515 -0
- package/src/db/timer-message-cutover.ts +322 -0
- package/src/db/timer-message-fire-deadletter.ts +136 -0
- package/src/db/timer-message-fire.ts +209 -0
- package/src/db/timer-message-flip-chaos-worker.ts +89 -0
- package/src/db/timer-message-flip-consistency.ts +147 -0
- package/src/db/timer-message-flip.ts +676 -0
- package/src/db/timer-message-participant.ts +138 -0
- package/src/db/timer-migrate-input.ts +92 -0
- package/src/db/timer-operator-async.ts +177 -0
- package/src/db/timer-operator-read-ops.ts +21 -0
- package/src/db/timer-operator-stage10.ts +119 -0
- package/src/db/timer-operator-write-ops.ts +116 -0
- package/src/db/timer-operator.ts +393 -0
- package/src/db/timer-read-ops.ts +147 -0
- package/src/db/timer-transfer-errors.ts +10 -0
- package/src/db/timer-transfer-write-ops.ts +43 -0
- package/src/db/timer-verifier-schema.ts +29 -0
- package/src/db/timer-verifier.ts +379 -0
- package/src/db/timer-write-ops.ts +291 -0
- package/src/db/token-db-write-ops.ts +96 -0
- package/src/db/token-standing.ts +84 -0
- package/src/db/token-usage-read-ops.ts +8 -0
- package/src/db/token-usage-write-ops.ts +35 -0
- package/src/db/token-usage.ts +338 -0
- package/src/db/tool-groups-empty-migration.ts +59 -0
- package/src/db/urgent-intake.ts +30 -0
- package/src/db/user-invites.ts +107 -0
- package/src/db/user-settings-read-ops.ts +19 -0
- package/src/db/user-settings-write-ops.ts +43 -0
- package/src/db/users.ts +173 -0
- package/src/db/vault-backup.ts +59 -0
- package/src/db/vault-expiry.ts +71 -0
- package/src/db/vault-health.ts +99 -0
- package/src/db/vault-token-launch.ts +77 -0
- package/src/db/vault-token-ops.ts +14 -0
- package/src/db/vault-tokens.ts +101 -0
- package/src/db/viewer-scope.ts +117 -0
- package/src/db/wal-checkpointer-worker.ts +48 -0
- package/src/db/wal-checkpointer.ts +107 -0
- package/src/db/wal-index.ts +53 -0
- package/src/db/wal-live-log.ts +68 -0
- package/src/db/wal-reclaim-async.ts +45 -0
- package/src/db/wal-reclaim.ts +140 -0
- package/src/db/web-tool-call-ops.ts +15 -0
- package/src/db/web-tool-calls.ts +87 -0
- package/src/db/withdraw-land-error.ts +18 -0
- package/src/db/work-evidence.ts +43 -0
- package/src/db/workflow-budget.ts +44 -0
- package/src/db/workflow-contact.ts +173 -0
- package/src/db/workflow-execution.ts +10 -0
- package/src/db/workflow-journal-async.ts +64 -0
- package/src/db/workflow-journal-prune.ts +71 -0
- package/src/db/workflow-journal-read-ops.ts +21 -0
- package/src/db/workflow-journal-schema.ts +9 -0
- package/src/db/workflow-journal-write-ops.ts +33 -0
- package/src/db/workflow-journal.ts +324 -0
- package/src/db/workflow-spawn-quota.ts +57 -0
- package/src/db/workflow-stats-read-ops.ts +177 -0
- package/src/db/workflow-step-tasks.ts +74 -0
- package/src/db/workflow-task-read-ops.ts +187 -0
- package/src/db/workspace-land-state.ts +65 -0
- package/src/db/workspace-merge-hold.ts +28 -0
- package/src/db/workspace-persistence.ts +77 -0
- package/src/db/workspace-rekey-write-ops.ts +11 -0
- package/src/db/workspace-rekey.ts +148 -0
- package/src/db/workspace-steward-cancel.ts +85 -0
- package/src/db/workspace-steward-fence.ts +30 -0
- package/src/db/workspace-write-ops.ts +26 -0
- package/src/db/workspace-writes-async.ts +46 -0
- package/src/db/workspace-writes.ts +196 -0
- package/src/db/workspaces.ts +617 -0
- package/src/db/write-ops.ts +602 -0
- package/src/db/writer-drain.ts +27 -0
- package/src/db/writer-fault-seam.ts +104 -0
- package/src/db/writer-gateway.ts +843 -0
- package/src/db/writer-ledger.ts +56 -0
- package/src/db.ts +4 -0
- package/src/deploy-executor.ts +139 -0
- package/src/dev.ts +541 -0
- package/src/dispatch-availability.ts +55 -0
- package/src/dispatch-match.ts +21 -0
- package/src/ephemeral/host-landing-slots-proof-worker.ts +45 -0
- package/src/ephemeral/index.ts +58 -0
- package/src/ephemeral/instance.ts +832 -0
- package/src/ephemeral/landing-ingress-proof-worker.ts +30 -0
- package/src/ephemeral/ports.ts +40 -0
- package/src/ephemeral/profile.ts +323 -0
- package/src/ephemeral/rehearsal-stamps.ts +149 -0
- package/src/ephemeral/rehearsal.ts +213 -0
- package/src/ephemeral/snapshot-kernel.ts +41 -0
- package/src/ephemeral/snapshot.ts +753 -0
- package/src/ephemeral/sweep.ts +40 -0
- package/src/event-loop-lag.ts +584 -0
- package/src/event-loop-yield.ts +27 -0
- package/src/events.ts +140 -0
- package/src/execution-mode.ts +63 -0
- package/src/fleet-convergence.ts +123 -0
- package/src/gate-resolver.ts +151 -0
- package/src/gate-run-capture.ts +71 -0
- package/src/git-sha.ts +58 -0
- package/src/guides.ts +73 -0
- package/src/host/capacity.ts +79 -0
- package/src/host/gate-capacity-alert.ts +90 -0
- package/src/host/identity.ts +128 -0
- package/src/host/presentation.ts +234 -0
- package/src/host/pressure-details.ts +89 -0
- package/src/host/pressure.ts +216 -0
- package/src/host/state.ts +132 -0
- package/src/host/utilization-buffer.ts +71 -0
- package/src/host-awareness.ts +57 -0
- package/src/host-identity.ts +39 -0
- package/src/host-provider-enablement.ts +75 -0
- package/src/host-provider-store.ts +102 -0
- package/src/host-tools.ts +39 -0
- package/src/http-body.ts +49 -0
- package/src/http-compression.ts +16 -0
- package/src/hub-metrics-report.ts +67 -0
- package/src/hub-metrics.ts +166 -0
- package/src/idle-digest-config.ts +40 -0
- package/src/idle-self-care.ts +58 -0
- package/src/index.ts +35 -0
- package/src/injection-sweep-pacing.ts +24 -0
- package/src/insights-async.ts +16 -0
- package/src/insights-db.ts +188 -0
- package/src/internal-spawn-model.ts +18 -0
- package/src/invite-link.ts +11 -0
- package/src/issue-tracker/adapter.ts +58 -0
- package/src/issue-tracker/github.ts +342 -0
- package/src/issue-tracker/index.ts +12 -0
- package/src/issue-tracker/registry.ts +26 -0
- package/src/journal-preamble.ts +350 -0
- package/src/kernel-correlation.ts +28 -0
- package/src/land-authorization.ts +73 -0
- package/src/land-block.ts +59 -0
- package/src/land-failure-event-key.ts +8 -0
- package/src/land-gate-failure-routing.ts +69 -0
- package/src/land-gate-notifications.ts +173 -0
- package/src/land-gate-queue-progress.ts +54 -0
- package/src/land-gates-source.ts +126 -0
- package/src/land-gates.ts +29 -0
- package/src/land-lifecycle-drives.ts +15 -0
- package/src/land-settle-dispatch.ts +134 -0
- package/src/land-stack-depth.ts +11 -0
- package/src/land-telemetry.ts +40 -0
- package/src/landing-base-ref.ts +3 -0
- package/src/landing-host-safety.ts +38 -0
- package/src/landing-lane-key.ts +74 -0
- package/src/launch-mode-support.ts +11 -0
- package/src/launch-mode.ts +58 -0
- package/src/legacy-landing.test-fixture.ts +56 -0
- package/src/lifecycle-context-pressure.ts +134 -0
- package/src/lifecycle-manager.ts +831 -0
- package/src/lifecycle-signal-registry.ts +87 -0
- package/src/live-runs-section.ts +38 -0
- package/src/loop-block-attribution.ts +442 -0
- package/src/loop-block-regression-alarm.ts +156 -0
- package/src/loop-task-stamps.ts +62 -0
- package/src/main-thread-clock.ts +95 -0
- package/src/maintenance/agent-identity-archive-job.ts +15 -0
- package/src/maintenance/artifact-checkout-gc-job.ts +14 -0
- package/src/maintenance/artifact-checkout-gc.ts +33 -0
- package/src/maintenance/artifact-sweep.ts +23 -0
- package/src/maintenance/breaker.ts +200 -0
- package/src/maintenance/cd-watcher.ts +176 -0
- package/src/maintenance/checkout-refresh.ts +83 -0
- package/src/maintenance/ci-monitor.ts +14 -0
- package/src/maintenance/claude-api-budget-job.ts +16 -0
- package/src/maintenance/constants.ts +134 -0
- package/src/maintenance/continuation-archive-search-job.ts +27 -0
- package/src/maintenance/critical-job-watchdog.ts +252 -0
- package/src/maintenance/db-planner-stats-job.ts +19 -0
- package/src/maintenance/db-wal-reclaim-job.ts +82 -0
- package/src/maintenance/events.ts +28 -0
- package/src/maintenance/gate-capacity-sample-job.ts +16 -0
- package/src/maintenance/index.ts +10 -0
- package/src/maintenance/jobs.ts +857 -0
- package/src/maintenance/long-running-work.ts +41 -0
- package/src/maintenance/orphaned-sessions.ts +126 -0
- package/src/maintenance/pauses.ts +174 -0
- package/src/maintenance/provider-secret-scrub-job.ts +16 -0
- package/src/maintenance/queued-message-expiration.ts +23 -0
- package/src/maintenance/red-main-controller-job.ts +22 -0
- package/src/maintenance/reply-obligation-parity-job.ts +27 -0
- package/src/maintenance/restart-epoch-hold-health.ts +62 -0
- package/src/maintenance/run-registry.ts +194 -0
- package/src/maintenance/scheduler.ts +778 -0
- package/src/maintenance/service-access-job.ts +31 -0
- package/src/maintenance/shipping-stats-rollup-job.ts +23 -0
- package/src/maintenance/snapshot-ledger-prune-job.ts +17 -0
- package/src/maintenance/stalled-delivery-pager.ts +125 -0
- package/src/maintenance/steward-handback.ts +11 -0
- package/src/maintenance/task-state-reconcile-job.ts +22 -0
- package/src/maintenance/teams.ts +426 -0
- package/src/maintenance/types.ts +124 -0
- package/src/maintenance/vault-backup-job.ts +34 -0
- package/src/maintenance/vault-expiry-job.ts +29 -0
- package/src/maintenance/web-tool-call-prune-job.ts +13 -0
- package/src/maintenance/workflow-backstop-job.ts +12 -0
- package/src/maintenance/workflow-journal-prune-job.ts +29 -0
- package/src/maintenance/workspaces.ts +784 -0
- package/src/maintenance.ts +1 -0
- package/src/managed-policy-escalation.ts +123 -0
- package/src/managed-policy.ts +236 -0
- package/src/managed-provider-gate.ts +27 -0
- package/src/managed-spawn-reservation.ts +23 -0
- package/src/markdown-frontmatter.ts +14 -0
- package/src/mcp/activity-output.ts +57 -0
- package/src/mcp/artifact-upload.ts +53 -0
- package/src/mcp/context-output.ts +73 -0
- package/src/mcp/dispatch-shape-schema.ts +13 -0
- package/src/mcp/guides.ts +33 -0
- package/src/mcp/http.ts +27 -0
- package/src/mcp/identity-projection.ts +121 -0
- package/src/mcp/identity.ts +235 -0
- package/src/mcp/index.ts +355 -0
- package/src/mcp/issue-selector-schema.ts +12 -0
- package/src/mcp/message-read.ts +87 -0
- package/src/mcp/output-descriptions.ts +72 -0
- package/src/mcp/output-levels.ts +71 -0
- package/src/mcp/output-projection.ts +88 -0
- package/src/mcp/plan-presentation.ts +166 -0
- package/src/mcp/presentation-values.ts +11 -0
- package/src/mcp/presentation.ts +653 -0
- package/src/mcp/project-entry-search-schema.ts +7 -0
- package/src/mcp/prompts.ts +36 -0
- package/src/mcp/runtime-output.ts +84 -0
- package/src/mcp/schema-budget.ts +28 -0
- package/src/mcp/self-care-visibility.ts +23 -0
- package/src/mcp/service-access.ts +18 -0
- package/src/mcp/spawn-targets-matrix.ts +68 -0
- package/src/mcp/spawn-targets.test-fixture.ts +21 -0
- package/src/mcp/task-validation-presentation.ts +19 -0
- package/src/mcp/tool-generation.ts +8 -0
- package/src/mcp/tool-groups.ts +136 -0
- package/src/mcp/tools-artifacts.ts +82 -0
- package/src/mcp/tools-messaging.ts +541 -0
- package/src/mcp/tools-permission.ts +88 -0
- package/src/mcp/tools-run.ts +73 -0
- package/src/mcp/tools-scheduler.ts +156 -0
- package/src/mcp/tools-spawn.ts +418 -0
- package/src/mcp/tools-web-tool-calls.ts +28 -0
- package/src/mcp/tools-workspace.ts +260 -0
- package/src/mcp/types.ts +68 -0
- package/src/mcp/validation.ts +66 -0
- package/src/mcp-agent-action.ts +96 -0
- package/src/mcp-agent-keep.ts +37 -0
- package/src/mcp-backlog-tools.ts +137 -0
- package/src/mcp-blackboard-tools.ts +131 -0
- package/src/mcp-channel-binding-tools.ts +27 -0
- package/src/mcp-claude-api-budget.ts +35 -0
- package/src/mcp-codex-reset.ts +43 -0
- package/src/mcp-decision-tools.ts +96 -0
- package/src/mcp-dispatch-tools.ts +142 -0
- package/src/mcp-egress-tools.ts +168 -0
- package/src/mcp-errors.ts +7 -0
- package/src/mcp-host-tools.ts +61 -0
- package/src/mcp-interrupt-agent.ts +47 -0
- package/src/mcp-issue-activity-tools.ts +114 -0
- package/src/mcp-issue-association-tools.ts +103 -0
- package/src/mcp-issue-lifecycle-tools.ts +49 -0
- package/src/mcp-issue-ref-tools.ts +214 -0
- package/src/mcp-maintenance-tools.ts +113 -0
- package/src/mcp-merge-tools.ts +66 -0
- package/src/mcp-notification-subscription-tools.ts +297 -0
- package/src/mcp-output-levels.test-fixture.ts +95 -0
- package/src/mcp-plan-tools.ts +347 -0
- package/src/mcp-profile-trust-tools.ts +47 -0
- package/src/mcp-project-journal-tools.ts +160 -0
- package/src/mcp-project-tools.ts +420 -0
- package/src/mcp-provider-catalog.ts +9 -0
- package/src/mcp-release-tools.ts +33 -0
- package/src/mcp-routing-policy-tools.ts +35 -0
- package/src/mcp-secrets-tools.ts +87 -0
- package/src/mcp-task-deliver-tools.ts +166 -0
- package/src/mcp-task-land-withdraw-tools.ts +49 -0
- package/src/mcp-task-memory-tools.ts +119 -0
- package/src/mcp-task-review-hold-tools.ts +57 -0
- package/src/mcp-task-tools.ts +342 -0
- package/src/mcp-task-validation-tools.ts +30 -0
- package/src/mcp-task-weave-tools.ts +63 -0
- package/src/mcp-team-template-tools.ts +141 -0
- package/src/mcp-team-tools.ts +197 -0
- package/src/mcp-tool-allowlist.ts +88 -0
- package/src/mcp-workflow-tools.ts +158 -0
- package/src/mcp.ts +1 -0
- package/src/memory-admission-rank.ts +55 -0
- package/src/memory-area-injection.ts +216 -0
- package/src/memory-boundary-capture.ts +206 -0
- package/src/memory-entry-safety.ts +28 -0
- package/src/memory-inject-filter.ts +190 -0
- package/src/memory-injection.ts +954 -0
- package/src/memory-preamble-admission.ts +158 -0
- package/src/memory-preamble-async.ts +13 -0
- package/src/memory-preamble.ts +1142 -0
- package/src/memory-retirement.ts +11 -0
- package/src/memory-seam.ts +273 -0
- package/src/memory-tokens.ts +91 -0
- package/src/merge-drain.ts +101 -0
- package/src/merge-pause-maintenance.ts +19 -0
- package/src/message-visibility.ts +50 -0
- package/src/messaging-policy.ts +94 -0
- package/src/native-memory.ts +59 -0
- package/src/notification-prefs.ts +25 -0
- package/src/notification-role-policy.ts +14 -0
- package/src/notification-router.ts +329 -0
- package/src/notification-rules.ts +390 -0
- package/src/notification-settings-store.ts +47 -0
- package/src/notification-settings.ts +166 -0
- package/src/notification-subscription-rules.ts +11 -0
- package/src/notification-types.ts +312 -0
- package/src/notify.ts +55 -0
- package/src/observed-reset-boundary.ts +23 -0
- package/src/observed-reset-refresh.ts +21 -0
- package/src/operator-alarm.ts +41 -0
- package/src/operator-decisions-section.ts +29 -0
- package/src/orchestrator-lookup.ts +29 -0
- package/src/orchestrator-self-report-authz.ts +34 -0
- package/src/package-pack.ts +249 -0
- package/src/post-bind-startup.ts +58 -0
- package/src/process-guard.ts +31 -0
- package/src/profile-cells.ts +305 -0
- package/src/profile-effective-survey.ts +121 -0
- package/src/profile-host-sources.ts +73 -0
- package/src/profile-instruction-blocks.ts +11 -0
- package/src/profile-project-validation.ts +23 -0
- package/src/profile-provider-options.ts +59 -0
- package/src/profile-role-templates.ts +26 -0
- package/src/profile-workflow-policy.ts +14 -0
- package/src/project-claudemd-sweep.ts +176 -0
- package/src/project-file-source.ts +54 -0
- package/src/project-ingest.ts +195 -0
- package/src/project-instructions.ts +700 -0
- package/src/project-mcp.ts +18 -0
- package/src/project-role-assets.ts +109 -0
- package/src/project-roles-validate.ts +53 -0
- package/src/project-roles.ts +364 -0
- package/src/project-settings.ts +5 -0
- package/src/project-skills.ts +5 -0
- package/src/project-toolchain.ts +58 -0
- package/src/project-trust-fingerprint.ts +174 -0
- package/src/project-trust.ts +262 -0
- package/src/project-workflows.ts +185 -0
- package/src/prompt-resolver.ts +697 -0
- package/src/prompt-template-fallback.ts +15 -0
- package/src/prompt-version-errors.ts +13 -0
- package/src/provider-catalog-store.ts +393 -0
- package/src/provider-config-store.ts +308 -0
- package/src/provider-enablement.ts +36 -0
- package/src/provider-home-gc.ts +58 -0
- package/src/provider-model-seed.ts +18 -0
- package/src/provider-quota-async.ts +152 -0
- package/src/provider-quota-config-store.ts +60 -0
- package/src/provider-secrets.test-fixture.ts +34 -0
- package/src/provider-state.ts +93 -0
- package/src/provider-timeline-event.ts +76 -0
- package/src/quota-advisory.ts +359 -0
- package/src/quota-band-delivery.ts +13 -0
- package/src/quota-band-projection.ts +149 -0
- package/src/quota-band-transition.ts +316 -0
- package/src/quota-pacing.ts +46 -0
- package/src/quota-threshold-config.ts +46 -0
- package/src/quota.ts +61 -0
- package/src/ratchet-files.ts +202 -0
- package/src/recipe-async.ts +50 -0
- package/src/recipe-db.ts +260 -0
- package/src/recipe-loader.ts +132 -0
- package/src/recipe-runner.ts +259 -0
- package/src/recipe-validator.ts +107 -0
- package/src/relay-event-drain.ts +39 -0
- package/src/relay-host-locality.ts +20 -0
- package/src/relay-run-lease.ts +17 -0
- package/src/repo-config-source.ts +209 -0
- package/src/report-verbosity.ts +5 -0
- package/src/restart-epoch-deploy-hold.ts +221 -0
- package/src/retention-config-store.ts +32 -0
- package/src/retention-config.ts +70 -0
- package/src/reviewer-pipeline.ts +238 -0
- package/src/routes/_route.ts +70 -0
- package/src/routes/_shared.ts +513 -0
- package/src/routes/activity.ts +70 -0
- package/src/routes/agent-effort.ts +69 -0
- package/src/routes/agent-keep.ts +27 -0
- package/src/routes/agent-profiles.ts +169 -0
- package/src/routes/agent-reporting.ts +19 -0
- package/src/routes/agent-self-effort.ts +51 -0
- package/src/routes/agent-sessions.ts +650 -0
- package/src/routes/agent-sharing.ts +23 -0
- package/src/routes/agents-spawn.ts +258 -0
- package/src/routes/agents.ts +452 -0
- package/src/routes/artifacts.ts +340 -0
- package/src/routes/auth.ts +123 -0
- package/src/routes/authority-audit.ts +14 -0
- package/src/routes/automations.ts +83 -0
- package/src/routes/backlog.ts +112 -0
- package/src/routes/blackboard.ts +54 -0
- package/src/routes/browser.ts +73 -0
- package/src/routes/channel-binding-delete.ts +21 -0
- package/src/routes/channel-output.ts +17 -0
- package/src/routes/claude-api-budget.ts +65 -0
- package/src/routes/commands-listing.ts +50 -0
- package/src/routes/commands.ts +586 -0
- package/src/routes/config.ts +75 -0
- package/src/routes/connectors.ts +108 -0
- package/src/routes/context-resets.ts +35 -0
- package/src/routes/continuation-archives.ts +37 -0
- package/src/routes/coordinator-teams.ts +14 -0
- package/src/routes/decisions.ts +82 -0
- package/src/routes/deploys.ts +15 -0
- package/src/routes/fleet-convergence.ts +5 -0
- package/src/routes/guides.ts +13 -0
- package/src/routes/host-providers.ts +73 -0
- package/src/routes/host-resource-control.ts +48 -0
- package/src/routes/host-secret-files.ts +38 -0
- package/src/routes/hosts.ts +240 -0
- package/src/routes/inbox.ts +151 -0
- package/src/routes/index.ts +614 -0
- package/src/routes/insights.ts +86 -0
- package/src/routes/integrations.ts +636 -0
- package/src/routes/issue-activity.ts +78 -0
- package/src/routes/issue-associations.ts +76 -0
- package/src/routes/issue-lifecycle.ts +34 -0
- package/src/routes/issue-refs.ts +163 -0
- package/src/routes/kernel-timers-operator.ts +57 -0
- package/src/routes/memory.ts +25 -0
- package/src/routes/merges.ts +109 -0
- package/src/routes/message-viewer.ts +4 -0
- package/src/routes/messages.ts +621 -0
- package/src/routes/notifications.ts +36 -0
- package/src/routes/orchestrator-bootstrap.ts +101 -0
- package/src/routes/orchestrator-host-registration.ts +125 -0
- package/src/routes/orchestrator-host-utilization.ts +255 -0
- package/src/routes/orchestrator-proxy.ts +174 -0
- package/src/routes/orchestrator.ts +699 -0
- package/src/routes/pairs.ts +214 -0
- package/src/routes/plans.ts +98 -0
- package/src/routes/project-onboarding.ts +56 -0
- package/src/routes/project-trust.ts +73 -0
- package/src/routes/projects.ts +296 -0
- package/src/routes/prompt-templates.ts +106 -0
- package/src/routes/provider-config.ts +233 -0
- package/src/routes/provider-quota-config.ts +48 -0
- package/src/routes/provider-quotas.ts +312 -0
- package/src/routes/provisioning-registry.ts +192 -0
- package/src/routes/recipes.ts +129 -0
- package/src/routes/restart-epochs.ts +98 -0
- package/src/routes/routing-policy.ts +30 -0
- package/src/routes/run-command.ts +25 -0
- package/src/routes/secrets-backup.ts +53 -0
- package/src/routes/secrets-import.ts +32 -0
- package/src/routes/secrets-page.ts +98 -0
- package/src/routes/secrets-vault.ts +121 -0
- package/src/routes/secrets.ts +165 -0
- package/src/routes/service-access.ts +57 -0
- package/src/routes/settings.ts +191 -0
- package/src/routes/shipping.ts +56 -0
- package/src/routes/spawn-policy.ts +299 -0
- package/src/routes/spec.ts +58 -0
- package/src/routes/sse.ts +18 -0
- package/src/routes/stats.ts +159 -0
- package/src/routes/steward.ts +49 -0
- package/src/routes/task-graph.ts +30 -0
- package/src/routes/task-http.ts +27 -0
- package/src/routes/task-issues.ts +81 -0
- package/src/routes/task-reads.ts +139 -0
- package/src/routes/task-validation.ts +22 -0
- package/src/routes/tasks.ts +553 -0
- package/src/routes/team-templates.ts +65 -0
- package/src/routes/teams-config.ts +15 -0
- package/src/routes/teams.ts +141 -0
- package/src/routes/token-usage.ts +167 -0
- package/src/routes/tokens.ts +393 -0
- package/src/routes/users.ts +248 -0
- package/src/routes/viewer-read.ts +27 -0
- package/src/routes/web-tool-calls.ts +38 -0
- package/src/routes/workflows.ts +142 -0
- package/src/routes/workspaces.ts +642 -0
- package/src/routes.ts +3 -0
- package/src/routing-eligibility.ts +42 -0
- package/src/routing-model-aliases.ts +21 -0
- package/src/routing-policy-normalize.ts +412 -0
- package/src/routing-policy-push.ts +154 -0
- package/src/routing-policy-service.ts +19 -0
- package/src/routing-policy-store.ts +16 -0
- package/src/routing-preferences.ts +82 -0
- package/src/routing-step-defaults.ts +31 -0
- package/src/runtime-grant.ts +164 -0
- package/src/runtime-prefix.ts +8 -0
- package/src/runtime-tokens.ts +404 -0
- package/src/search-query.ts +10 -0
- package/src/secret-keys.ts +24 -0
- package/src/secrets-broker/config.ts +53 -0
- package/src/secrets-broker/error.ts +8 -0
- package/src/secrets-broker/infisical.ts +259 -0
- package/src/secrets-broker/reader-infisical.ts +41 -0
- package/src/secrets-broker/reader.ts +101 -0
- package/src/secrets-broker/service.ts +242 -0
- package/src/secrets-broker/tool-credentials.ts +9 -0
- package/src/secrets-vault/backend-conformance.ts +26 -0
- package/src/secrets-vault/backend.ts +102 -0
- package/src/secrets-vault/backup.ts +103 -0
- package/src/secrets-vault/config.ts +7 -0
- package/src/secrets-vault/expiry.ts +10 -0
- package/src/secrets-vault/identity.ts +27 -0
- package/src/secrets-vault/import.ts +90 -0
- package/src/secrets-vault/key-files.ts +91 -0
- package/src/secrets-vault/keys.ts +79 -0
- package/src/secrets-vault/metadata.ts +51 -0
- package/src/secrets-vault/provider-env.ts +25 -0
- package/src/secrets-vault/resolve.ts +101 -0
- package/src/secrets-vault/restore.ts +57 -0
- package/src/secrets-vault/scope.ts +25 -0
- package/src/secrets-vault/service.ts +192 -0
- package/src/secrets-vault/shared.ts +10 -0
- package/src/security.ts +772 -0
- package/src/self-effort-rule.ts +36 -0
- package/src/self-resume-carry.ts +131 -0
- package/src/self-resume-command.ts +24 -0
- package/src/self-resume-config.ts +54 -0
- package/src/self-resume-identity.ts +40 -0
- package/src/self-resume-supersede.ts +19 -0
- package/src/self-resume.ts +884 -0
- package/src/server-background.ts +24 -0
- package/src/server.ts +726 -0
- package/src/service-access/config.ts +3 -0
- package/src/service-access/health.ts +151 -0
- package/src/service-access/host-health.ts +62 -0
- package/src/service-access/host.ts +63 -0
- package/src/service-access/operations.ts +21 -0
- package/src/service-access/policy.ts +30 -0
- package/src/service-access/probe.ts +62 -0
- package/src/service-access/request-logs.ts +93 -0
- package/src/service-access/scope.ts +7 -0
- package/src/service-access/service.ts +185 -0
- package/src/service-access/tokens.ts +174 -0
- package/src/service-access/validation.ts +75 -0
- package/src/service-access/vault.ts +59 -0
- package/src/services/agent-action.ts +238 -0
- package/src/services/agent-control-host.ts +74 -0
- package/src/services/agent-effort.ts +60 -0
- package/src/services/agent-hang-watchdog-job.ts +513 -0
- package/src/services/agent-hang-watchdog-wiring.ts +487 -0
- package/src/services/agent-hang-watchdog.ts +395 -0
- package/src/services/agent-keep.ts +72 -0
- package/src/services/agent-message-fanout.ts +91 -0
- package/src/services/agent-outstanding-work.ts +66 -0
- package/src/services/agent-reporting.ts +27 -0
- package/src/services/artifact-access.ts +39 -0
- package/src/services/artifact-multipart.ts +70 -0
- package/src/services/artifact-path-host.ts +55 -0
- package/src/services/artifact-read.ts +88 -0
- package/src/services/artifact-write.ts +25 -0
- package/src/services/auth-context.ts +117 -0
- package/src/services/automatic-disposal.ts +33 -0
- package/src/services/backlog.ts +149 -0
- package/src/services/browser-inventory.ts +52 -0
- package/src/services/browser-session-state.ts +41 -0
- package/src/services/browser-session.ts +167 -0
- package/src/services/bus-command-update.ts +84 -0
- package/src/services/bus-expiration-death.ts +57 -0
- package/src/services/canonical-root.ts +284 -0
- package/src/services/captured-delivery-gate.ts +12 -0
- package/src/services/carry-pending.ts +5 -0
- package/src/services/channel-binding-delete.ts +20 -0
- package/src/services/channel-suppression-receipt.ts +28 -0
- package/src/services/checkout-refresh-state.ts +18 -0
- package/src/services/checkout-refresh.test-fixture.ts +12 -0
- package/src/services/child-work-evidence.ts +77 -0
- package/src/services/claude-app.ts +91 -0
- package/src/services/command-claim-rejection.ts +23 -0
- package/src/services/command-host.ts +42 -0
- package/src/services/coordinator-digest.ts +30 -0
- package/src/services/decision-audience.ts +26 -0
- package/src/services/delivery-gate-policy.ts +98 -0
- package/src/services/delivery-tip.test-fixture.ts +25 -0
- package/src/services/diff-gate.ts +110 -0
- package/src/services/dispatch-command.ts +388 -0
- package/src/services/effective-launch-driver.ts +240 -0
- package/src/services/effective-launch-harness.ts +257 -0
- package/src/services/errors.ts +31 -0
- package/src/services/git-process.ts +176 -0
- package/src/services/git-remote.ts +100 -0
- package/src/services/harness-subagents.ts +12 -0
- package/src/services/host-changed-paths.test-fixture.ts +134 -0
- package/src/services/host-landing-placement.ts +65 -0
- package/src/services/host-project-readiness.ts +49 -0
- package/src/services/host-providers.ts +114 -0
- package/src/services/host-utilization.ts +70 -0
- package/src/services/idle-agent-digest.ts +318 -0
- package/src/services/idle-epics.ts +105 -0
- package/src/services/idle-self-care.ts +47 -0
- package/src/services/interrupt-agent.ts +146 -0
- package/src/services/isolated-workspace-placement.ts +258 -0
- package/src/services/issue-activity.ts +23 -0
- package/src/services/issue-associations.ts +72 -0
- package/src/services/issue-completion-drain.ts +24 -0
- package/src/services/issue-completion.ts +24 -0
- package/src/services/issue-lifecycle-comments.ts +12 -0
- package/src/services/issue-lifecycle.ts +620 -0
- package/src/services/issue-refs.ts +65 -0
- package/src/services/kernel-command-bridge.ts +219 -0
- package/src/services/kernel-control-host.ts +78 -0
- package/src/services/kernel-control-http.ts +119 -0
- package/src/services/kernel-control-mcp.ts +193 -0
- package/src/services/kernel-landing-command.ts +28 -0
- package/src/services/kernel-landing-ingress.ts +65 -0
- package/src/services/kernel-timers-authoritative-ingress.ts +48 -0
- package/src/services/kernel-timers-authz.ts +229 -0
- package/src/services/kernel-timers-command.ts +182 -0
- package/src/services/kernel-timers-cutover-chaos-worker.ts +211 -0
- package/src/services/kernel-timers-cutover.ts +39 -0
- package/src/services/kernel-timers-ingress-apply.ts +39 -0
- package/src/services/kernel-timers-ingress-chaos-worker.ts +312 -0
- package/src/services/kernel-timers-ingress.ts +702 -0
- package/src/services/kernel-timers-message-authority-chaos-worker.ts +97 -0
- package/src/services/kernel-timers-migrate.ts +158 -0
- package/src/services/kernel-timers-operator-chaos-worker.ts +259 -0
- package/src/services/kernel-timers-operator-preflight.ts +18 -0
- package/src/services/kernel-timers-operator.ts +424 -0
- package/src/services/kernel-timers-outbox.ts +138 -0
- package/src/services/kernel-timers-request-key-migration-chaos-worker.ts +80 -0
- package/src/services/kernel-timers-stage10-operator.ts +210 -0
- package/src/services/kernel-timers-stage10.ts +85 -0
- package/src/services/kernel-timers-stage9.ts +57 -0
- package/src/services/kernel-timers-transfer-chaos-worker.ts +118 -0
- package/src/services/kernel-timers-transfer.ts +525 -0
- package/src/services/kernel-timers-verifier.ts +39 -0
- package/src/services/kernel-timers.ts +247 -0
- package/src/services/land-boundary-settle.ts +32 -0
- package/src/services/land-gate-placement.ts +60 -0
- package/src/services/land-issue-relations.ts +46 -0
- package/src/services/land-restart-retry.ts +77 -0
- package/src/services/landed-ancestry.ts +417 -0
- package/src/services/landed-task-attribution.ts +14 -0
- package/src/services/landing-terminal-report.ts +119 -0
- package/src/services/legacy-landing-backfill.ts +159 -0
- package/src/services/legacy-landing-host.ts +291 -0
- package/src/services/legacy-landing-publication.ts +35 -0
- package/src/services/legacy-landing-recovery.ts +111 -0
- package/src/services/macos-privacy.ts +34 -0
- package/src/services/managed-running.ts +189 -0
- package/src/services/memory-areas.ts +172 -0
- package/src/services/memory-identity.ts +162 -0
- package/src/services/merge-pause.ts +37 -0
- package/src/services/message-delivery-actions.ts +11 -0
- package/src/services/operator-decisions.ts +260 -0
- package/src/services/orchestrator-landing-recovery.ts +55 -0
- package/src/services/orchestrator-registration-recovery.ts +12 -0
- package/src/services/orchestrator-upgrade.ts +83 -0
- package/src/services/parity-harness.ts +141 -0
- package/src/services/permission-decision.ts +129 -0
- package/src/services/plan-ci-recovery.ts +76 -0
- package/src/services/plan-conformance.ts +105 -0
- package/src/services/plan-dispatch-policy.ts +79 -0
- package/src/services/plan-dispatch.ts +372 -0
- package/src/services/plan-external-view.ts +7 -0
- package/src/services/plan-frontier.ts +34 -0
- package/src/services/plan-graph.ts +703 -0
- package/src/services/plan-import.ts +66 -0
- package/src/services/plan-live-bindings.ts +139 -0
- package/src/services/plan-task-create.ts +80 -0
- package/src/services/plan-terminal-refs.ts +83 -0
- package/src/services/plan-wake-digest.ts +88 -0
- package/src/services/plan-wake-policy.ts +12 -0
- package/src/services/profile-trust.ts +54 -0
- package/src/services/project-checkout-binding.ts +65 -0
- package/src/services/project-checkout-enrollment.ts +27 -0
- package/src/services/project-cwd.ts +41 -0
- package/src/services/project-onboarding.ts +165 -0
- package/src/services/project-repo-create.ts +27 -0
- package/src/services/project-role.test-fixture.ts +74 -0
- package/src/services/project.ts +191 -0
- package/src/services/prompt-templates.ts +46 -0
- package/src/services/prompt-version-writer.ts +42 -0
- package/src/services/provider-catalog.ts +7 -0
- package/src/services/provider-hold-flap.ts +130 -0
- package/src/services/provider-hold-nudge.ts +191 -0
- package/src/services/provider-hold-record.ts +137 -0
- package/src/services/provider-state-audit.ts +214 -0
- package/src/services/provisioning-harness/analyze.ts +285 -0
- package/src/services/provisioning-harness/budget-baseline.json +391 -0
- package/src/services/provisioning-harness/capture.ts +197 -0
- package/src/services/provisioning-harness/config.ts +55 -0
- package/src/services/provisioning-harness/context-sources.ts +85 -0
- package/src/services/provisioning-harness/driver.ts +156 -0
- package/src/services/provisioning-harness/expect.ts +81 -0
- package/src/services/provisioning-harness/fixture-matrix.ts +38 -0
- package/src/services/provisioning-harness/fixtures/project/.agent-relay/land-gates.json +1 -0
- package/src/services/provisioning-harness/fixtures/project/.claude/skills/harness-skill/SKILL.md +6 -0
- package/src/services/provisioning-harness/fixtures/project/.mcp.json +1 -0
- package/src/services/provisioning-harness/fixtures/project/AGENTS.md +1 -0
- package/src/services/provisioning-harness/fixtures/project/CLAUDE.md +1 -0
- package/src/services/provisioning-harness/fixtures/project/mcp-server.ts +33 -0
- package/src/services/provisioning-harness/fixtures/provider-home/AGENTS.md +1 -0
- package/src/services/provisioning-harness/fixtures/provider-home/CLAUDE.md +1 -0
- package/src/services/provisioning-harness/host-fixtures.ts +25 -0
- package/src/services/provisioning-harness/index.ts +4 -0
- package/src/services/provisioning-harness/inventory-types.ts +8 -0
- package/src/services/provisioning-harness/inventory.ts +33 -0
- package/src/services/provisioning-harness/lifecycle.ts +193 -0
- package/src/services/provisioning-harness/live.ts +61 -0
- package/src/services/provisioning-harness/manifests.ts +118 -0
- package/src/services/provisioning-harness/prepare.ts +113 -0
- package/src/services/provisioning-harness/redundancy-report.ts +32 -0
- package/src/services/provisioning-harness/redundancy.ts +137 -0
- package/src/services/provisioning-harness/report.ts +129 -0
- package/src/services/provisioning-harness/types.ts +174 -0
- package/src/services/provisioning-registry.ts +15 -0
- package/src/services/rate-limit-resume.ts +220 -0
- package/src/services/reap-verdict.ts +52 -0
- package/src/services/red-main-auto-revert.ts +103 -0
- package/src/services/red-main-controller-deps.ts +80 -0
- package/src/services/red-main-controller.ts +262 -0
- package/src/services/red-main-incident.ts +44 -0
- package/src/services/red-main-quarantine.ts +92 -0
- package/src/services/register-agent.ts +447 -0
- package/src/services/release-readiness.ts +219 -0
- package/src/services/reported-exit-death.ts +29 -0
- package/src/services/response-report-admission.ts +17 -0
- package/src/services/restart-epoch-driver.ts +290 -0
- package/src/services/restart-epoch-reconciler.ts +326 -0
- package/src/services/restart-epoch-stale-command-recovery.ts +133 -0
- package/src/services/restart-instructions.ts +86 -0
- package/src/services/restart-project-role.ts +74 -0
- package/src/services/restart-secret-refs.ts +14 -0
- package/src/services/restart-spawn.ts +510 -0
- package/src/services/review-publish.ts +76 -0
- package/src/services/review-ref-reconcile.ts +337 -0
- package/src/services/run-command-input.ts +22 -0
- package/src/services/run-command.ts +510 -0
- package/src/services/run-completion-message.ts +70 -0
- package/src/services/run-log.ts +212 -0
- package/src/services/run-queue.ts +63 -0
- package/src/services/scheduler-command-cancel.ts +49 -0
- package/src/services/scheduler-command.ts +590 -0
- package/src/services/scheduler-create.ts +25 -0
- package/src/services/scheduler-plan.ts +202 -0
- package/src/services/scheduler-recovery.ts +31 -0
- package/src/services/scheduler.ts +406 -0
- package/src/services/self-care-state.ts +10 -0
- package/src/services/self-effort-grant.ts +93 -0
- package/src/services/self-effort.ts +152 -0
- package/src/services/send-message.ts +548 -0
- package/src/services/server-credentials.ts +53 -0
- package/src/services/shipping-board.ts +111 -0
- package/src/services/shipping-project-config.ts +86 -0
- package/src/services/shipping-stats.ts +86 -0
- package/src/services/shutdown-agent.ts +463 -0
- package/src/services/shutdown-watchdog.ts +119 -0
- package/src/services/spawn-agent.ts +967 -0
- package/src/services/spawn-approval.ts +26 -0
- package/src/services/spawn-brief.ts +39 -0
- package/src/services/spawn-chain-inspector.ts +286 -0
- package/src/services/spawn-cwd-placement.ts +250 -0
- package/src/services/spawn-identity.ts +127 -0
- package/src/services/spawn-instruction-inputs.ts +114 -0
- package/src/services/spawn-issue-activity.ts +102 -0
- package/src/services/spawn-launch-decision.ts +32 -0
- package/src/services/spawn-launch.ts +116 -0
- package/src/services/spawn-loss-escalation.ts +253 -0
- package/src/services/spawn-placement.test-fixture.ts +30 -0
- package/src/services/spawn-project-role.ts +133 -0
- package/src/services/spawn-registration-watchdog.ts +352 -0
- package/src/services/spawn-replay.ts +61 -0
- package/src/services/spawn-repo-probe.ts +118 -0
- package/src/services/spawn-tree-cleanup.ts +37 -0
- package/src/services/spawn-warnings.ts +13 -0
- package/src/services/steward-reaper.ts +244 -0
- package/src/services/task-context-hydration.ts +413 -0
- package/src/services/task-delivery-close.ts +26 -0
- package/src/services/task-delivery-event.ts +11 -0
- package/src/services/task-delivery-land-policy.ts +35 -0
- package/src/services/task-delivery-summary.ts +38 -0
- package/src/services/task-delivery.ts +762 -0
- package/src/services/task-dependency-graph.ts +116 -0
- package/src/services/task-dispatch.ts +178 -0
- package/src/services/task-done-when.ts +45 -0
- package/src/services/task-entity.ts +758 -0
- package/src/services/task-from-issue.ts +80 -0
- package/src/services/task-issue-digest.ts +45 -0
- package/src/services/task-issue-link.ts +158 -0
- package/src/services/task-issue-weave.ts +570 -0
- package/src/services/task-land-withdraw.ts +462 -0
- package/src/services/task-lifecycle.ts +668 -0
- package/src/services/task-nothing-to-land.ts +37 -0
- package/src/services/task-plan-view.ts +172 -0
- package/src/services/task-review-hold.ts +244 -0
- package/src/services/task-semantic-events.ts +396 -0
- package/src/services/task-stage-wake.ts +15 -0
- package/src/services/task-state-reconcile.ts +169 -0
- package/src/services/task-validation.ts +42 -0
- package/src/services/team-claim-race.worker.ts +72 -0
- package/src/services/team-spawn-delegation.ts +30 -0
- package/src/services/team-templates.ts +172 -0
- package/src/services/team.ts +320 -0
- package/src/services/terminal-provider-exit.ts +57 -0
- package/src/services/timer-message-fire-chaos-worker.ts +29 -0
- package/src/services/timer-message-fire-outbox.ts +184 -0
- package/src/services/transient-agent-reaper.ts +412 -0
- package/src/services/turn-reconcile-audit.ts +236 -0
- package/src/services/user-onboarding.ts +98 -0
- package/src/services/user-profile.ts +57 -0
- package/src/services/web-search.ts +83 -0
- package/src/services/web-tool-calls.ts +65 -0
- package/src/services/withdraw-steward.ts +57 -0
- package/src/services/work-finality.ts +34 -0
- package/src/services/workflow-agent-obligation.ts +35 -0
- package/src/services/workflow-auto-start.ts +126 -0
- package/src/services/workflow-backstop.ts +38 -0
- package/src/services/workflow-budget.test-fixture.ts +10 -0
- package/src/services/workflow-caller.ts +32 -0
- package/src/services/workflow-catalog.ts +43 -0
- package/src/services/workflow-child-proof-worker.ts +76 -0
- package/src/services/workflow-child.test-fixture.ts +51 -0
- package/src/services/workflow-ci-main.ts +93 -0
- package/src/services/workflow-control-proof-worker.ts +149 -0
- package/src/services/workflow-coordinator-decision-proof-worker.ts +123 -0
- package/src/services/workflow-coordinator.ts +8 -0
- package/src/services/workflow-decision-answer.ts +18 -0
- package/src/services/workflow-decision-proof-worker.ts +92 -0
- package/src/services/workflow-decision.test-fixture.ts +58 -0
- package/src/services/workflow-decisions.ts +107 -0
- package/src/services/workflow-deferred-cleanup.ts +40 -0
- package/src/services/workflow-dispatch-result.ts +20 -0
- package/src/services/workflow-effect-driver.ts +165 -0
- package/src/services/workflow-effects.ts +544 -0
- package/src/services/workflow-foreach-proof-worker.ts +209 -0
- package/src/services/workflow-land-notice.ts +18 -0
- package/src/services/workflow-land.ts +105 -0
- package/src/services/workflow-notice.ts +32 -0
- package/src/services/workflow-overdue-notice.ts +19 -0
- package/src/services/workflow-pins.ts +162 -0
- package/src/services/workflow-reconcile.ts +210 -0
- package/src/services/workflow-resume-pins.ts +30 -0
- package/src/services/workflow-run-chaos-worker.ts +67 -0
- package/src/services/workflow-run-view.ts +71 -0
- package/src/services/workflow-run.test-fixture.ts +165 -0
- package/src/services/workflow-runs.ts +370 -0
- package/src/services/workflow-scripts.ts +100 -0
- package/src/services/workflow-slice-proof.ts +14 -0
- package/src/services/workflow-stats.ts +208 -0
- package/src/services/workflow-supervisor-state.ts +117 -0
- package/src/services/workflow-supervisor.ts +122 -0
- package/src/services/workflow-verification.ts +68 -0
- package/src/services/workspace-recovery.ts +168 -0
- package/src/services/workspace-task-binding.ts +22 -0
- package/src/settings/modules.ts +149 -0
- package/src/settings/registry.ts +629 -0
- package/src/settings/user-settings.ts +81 -0
- package/src/setup.ts +199 -0
- package/src/shared-mcp.ts +87 -0
- package/src/shutdown.ts +33 -0
- package/src/spawn-admission.ts +48 -0
- package/src/spawn-budget.ts +18 -0
- package/src/spawn-command.ts +373 -0
- package/src/spawn-env.ts +27 -0
- package/src/spawn-intent.ts +17 -0
- package/src/spawn-lease.ts +41 -0
- package/src/spawn-models.ts +22 -0
- package/src/spawn-placement.ts +348 -0
- package/src/spawn-profile-errors.ts +9 -0
- package/src/spawn-quota.ts +15 -0
- package/src/spawn-targets.ts +679 -0
- package/src/sse-agent-status.ts +35 -0
- package/src/sse-outbox-cursor.ts +28 -0
- package/src/sse-visibility.ts +36 -0
- package/src/sse.ts +684 -0
- package/src/startup-context-injection.ts +518 -0
- package/src/startup-timing.ts +30 -0
- package/src/state-adoption/artifacts.ts +27 -0
- package/src/state-adoption/cd-cutover.ts +125 -0
- package/src/state-adoption/files.ts +31 -0
- package/src/state-adoption/index.ts +166 -0
- package/src/state-adoption/linux-plan.ts +67 -0
- package/src/state-adoption/linux.ts +104 -0
- package/src/state-adoption/macos-plan.ts +58 -0
- package/src/state-adoption/macos.ts +112 -0
- package/src/steward-claim-release.ts +38 -0
- package/src/steward-handoff.ts +28 -0
- package/src/steward-identity.ts +54 -0
- package/src/steward-policy-cleanup.ts +222 -0
- package/src/steward-policy-model-reconcile.ts +33 -0
- package/src/steward-policy-name.ts +13 -0
- package/src/steward-provenance.ts +59 -0
- package/src/steward-queue.ts +85 -0
- package/src/steward-slot-recovery.ts +34 -0
- package/src/steward-spawn-guard.ts +344 -0
- package/src/steward.test-fixture.ts +11 -0
- package/src/steward.ts +199 -0
- package/src/stream-proxy.ts +84 -0
- package/src/task-authz.ts +40 -0
- package/src/task-completion.ts +39 -0
- package/src/task-dispatch-live.ts +70 -0
- package/src/task-dispatcher-ranking.ts +136 -0
- package/src/task-dispatcher.ts +841 -0
- package/src/task-owner-notices.ts +35 -0
- package/src/task-owner.ts +63 -0
- package/src/task-plan-status.ts +21 -0
- package/src/task-verification.ts +35 -0
- package/src/team-idle-tracker.ts +39 -0
- package/src/team-template-config.ts +100 -0
- package/src/teams-config-store.ts +22 -0
- package/src/terminal-authz.ts +49 -0
- package/src/token-db-write.ts +44 -0
- package/src/token-db.ts +487 -0
- package/src/token-usage-async.ts +40 -0
- package/src/transport-subscriptions.ts +57 -0
- package/src/types.ts +1 -0
- package/src/upgrade-install-verify.ts +179 -0
- package/src/upgrade-local-id.ts +3 -0
- package/src/upgrade-services.ts +125 -0
- package/src/upgrade.ts +1006 -0
- package/src/user-awaiting-reply.ts +42 -0
- package/src/user-path.ts +246 -0
- package/src/user-settings-async.ts +33 -0
- package/src/user-settings-store.ts +106 -0
- package/src/user-style.ts +83 -0
- package/src/utils.ts +42 -0
- package/src/validation.ts +324 -0
- package/src/vault-backup-config.ts +28 -0
- package/src/vault-expiry-config.ts +12 -0
- package/src/versioned-prompts.ts +57 -0
- package/src/workflow-capabilities.ts +10 -0
- package/src/workflow-prompt-templates.ts +20 -0
- package/src/workspace-action-audit.ts +42 -0
- package/src/workspace-actions.ts +689 -0
- package/src/workspace-auto-merge.ts +1055 -0
- package/src/workspace-changed-paths-client.ts +97 -0
- package/src/workspace-claim.ts +45 -0
- package/src/workspace-cleanup-settle.ts +51 -0
- package/src/workspace-cleanup-stale.ts +231 -0
- package/src/workspace-command-settle.ts +589 -0
- package/src/workspace-config.ts +7 -0
- package/src/workspace-conflict-resolver.ts +182 -0
- package/src/workspace-dead-owner-recovery.ts +19 -0
- package/src/workspace-delivery-tip.ts +51 -0
- package/src/workspace-escalation.ts +107 -0
- package/src/workspace-git-state-client.ts +42 -0
- package/src/workspace-host-client.ts +86 -0
- package/src/workspace-host-target.ts +5 -0
- package/src/workspace-host.ts +61 -0
- package/src/workspace-human-escalation.ts +70 -0
- package/src/workspace-land-gate-watchdog.ts +76 -0
- package/src/workspace-land-gate.ts +99 -0
- package/src/workspace-land-result.ts +12 -0
- package/src/workspace-land-retry.ts +82 -0
- package/src/workspace-land-stopped.ts +57 -0
- package/src/workspace-merge-dispatch.ts +27 -0
- package/src/workspace-merge-progress.ts +369 -0
- package/src/workspace-merge-retry-policy.ts +59 -0
- package/src/workspace-merge.ts +614 -0
- package/src/workspace-nothing-to-land-notice.ts +27 -0
- package/src/workspace-orphans.ts +927 -0
- package/src/workspace-phase.ts +507 -0
- package/src/workspace-pr-completion.ts +285 -0
- package/src/workspace-probe.ts +212 -0
- package/src/workspace-recorded-land.ts +47 -0
- package/src/workspace-recovery-authz.ts +88 -0
- package/src/workspace-rekey.ts +106 -0
- package/src/workspace-steward-authority.ts +16 -0
- package/src/workspace-steward-failure.ts +42 -0
- package/src/workspace-steward-wake.ts +150 -0
- package/src/workspace-steward-watchdog.ts +240 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e}from"./dist-DeW2Y1R5.js";var t=e(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]);export{t};
|
|
2
|
+
//# sourceMappingURL=server-CZIRjFyY.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{n as t,o as n,p as r,u as i}from"./dist-DeW2Y1R5.js";import{et as a,h as o,v as s}from"./display-CfO7rTuF.js";import{t as c}from"./api-CIIVBtAV.js";import{t as l}from"./button-Do6Z3vvn.js";import{t as u}from"./textarea-hs6Mpyfl.js";var d=t(`camera`,[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]),f=t(`earth`,[[`path`,{d:`M21.54 15H17a2 2 0 0 0-2 2v4.54`,key:`1djwo0`}],[`path`,{d:`M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17`,key:`1tzkfa`}],[`path`,{d:`M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05`,key:`14pb5j`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),p=t(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),m=t(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),h=t(`monitor-cog`,[[`path`,{d:`M12 17v4`,key:`1riwvh`}],[`path`,{d:`m14.305 7.53.923-.382`,key:`1mlnsw`}],[`path`,{d:`m15.228 4.852-.923-.383`,key:`82mpwg`}],[`path`,{d:`m16.852 3.228-.383-.924`,key:`ln4sir`}],[`path`,{d:`m16.852 8.772-.383.923`,key:`1dejw0`}],[`path`,{d:`m19.148 3.228.383-.924`,key:`192kgf`}],[`path`,{d:`m19.53 9.696-.382-.924`,key:`fiavlr`}],[`path`,{d:`m20.772 4.852.924-.383`,key:`1j8mgp`}],[`path`,{d:`m20.772 7.148.924.383`,key:`zix9be`}],[`path`,{d:`M22 13v2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7`,key:`1tnzv8`}],[`path`,{d:`M8 21h8`,key:`1ev6f3`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}]]),g=t(`power-off`,[[`path`,{d:`M18.36 6.64A9 9 0 0 1 20.77 15`,key:`dxknvb`}],[`path`,{d:`M6.16 6.16a9 9 0 1 0 12.68 12.68`,key:`1x7qb5`}],[`path`,{d:`M12 2v4`,key:`3427ic`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),_=t(`server-cog`,[[`path`,{d:`m10.852 14.772-.383.923`,key:`11vil6`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`,key:`1v3clb`}],[`path`,{d:`m13.148 9.228.383-.923`,key:`t2zzyc`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`,key:`1bxfiv`}],[`path`,{d:`m14.772 10.852.923-.383`,key:`k9m8cz`}],[`path`,{d:`m14.772 13.148.923.383`,key:`1xvhww`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`,key:`tn8das`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`,key:`1g2pve`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`m9.228 10.852-.923-.383`,key:`1wtb30`}],[`path`,{d:`m9.228 13.148-.923.383`,key:`1a830x`}]]),v=t(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),y=e(r(),1),b=i(),x={healthy:`bg-tone-success/10 text-tone-success-fg`,degraded:`bg-tone-warning/10 text-tone-warning-fg`,unknown:`bg-tone-neutral/10 text-tone-neutral-fg`,down:`bg-tone-danger/10 text-tone-danger-fg`},S={healthy:`Healthy`,degraded:`Degraded`,unknown:`Unknown`,down:`Down`},C=[`healthy`,`degraded`,`unknown`,`down`],w=e=>e.reduce((e,t)=>C.indexOf(t)>C.indexOf(e)?t:e,`healthy`),T={not_configured:`No service catalog is configured`,host_unconfigured:`No broker host is set in the catalog (broker.orchestratorId)`,host_unobserved:`Broker host has not reported yet`,host_stale:`Broker host report is out of date`,host_probe_failed:`Broker host health could not be read`,native_down:`Agent Vault service is not running`,watchdog_down:`Freshness watchdog is not running`,ingress_closed:`Proxy ingress is closed`,refresh_missing:`No upstream credential refresh state on the host`,refresh_invalid:`Upstream credential refresh state is unreadable`,refresh_failed:`Upstream credential refresh failed`,refresh_in_progress:`Upstream credential refresh in progress`,credential_expired:`Upstream credential has expired`,vault_unobserved:`Vault has not been checked yet`,vault_stale:`Vault check is out of date`,vault_unreachable:`Vault control API is unreachable`,sync_unknown:`Vault reports no sync state`,sync_failed:`Last credential sync failed`,sync_stale:`No credential sync in the last 15 minutes`,logs_failed:`Request log collection failed`,logs_lagging:`Request log collection is behind`,logs_backlog:`More request logs are waiting to be collected`};function E({state:e}){return(0,b.jsx)(`span`,{className:n(`rounded px-1.5 py-0.5 text-xs font-medium`,x[e]),children:S[e]})}function D({reasons:e}){return e.length?(0,b.jsx)(`ul`,{className:`list-disc pl-5 text-xs`,children:e.map(e=>(0,b.jsx)(`li`,{children:T[e]??e},e))}):null}function O({now:e,at:t,empty:n=`Never`}){return t?(0,b.jsx)(`time`,{dateTime:new Date(t).toISOString(),title:s(t),children:t>e?`in ${o(t,e)}`:a(e,t)}):(0,b.jsx)(b.Fragment,{children:n})}async function k(e){try{return{value:await e}}catch(e){return{error:e.message}}}async function A(e){let t=new URLSearchParams({limit:`50`,...e?{profile:e}:{}}),[n,r]=await Promise.all([k(c(`GET`,`/service-access/health`)),k(c(`GET`,`/service-access/logs?${t}`))]);return{health:n,logs:r}}function j({profile:e}){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(``),[u,d]=(0,y.useState)(!1);function f(e){n(e.health),`value`in e.logs?(i(e.logs.value),o(``)):(i(null),o(e.logs.error))}(0,y.useEffect)(()=>{let t=!0;return A(e).then(e=>{t&&f(e)}),()=>{t=!1}},[e]);async function p(){d(!0);try{f(await A(e))}finally{d(!1)}}async function m(){if(r?.next){d(!0);try{let t=await c(`GET`,`/service-access/logs?${new URLSearchParams({limit:`50`,before:r.next,...e?{profile:e}:{}})}`);i({logs:[...r.logs,...t.logs],...t.next?{next:t.next}:{}}),o(``)}catch(e){o(e.message)}finally{d(!1)}}}let h=t&&`value`in t?t.value:null,g=t&&`error`in t?t.error:``,_=h?.evaluatedAt??0,v=h?.vaults.filter(t=>!e||t.profile===e)??[],x=h?.host,S=g?`unknown`:e&&h?w([v[0]?.state??`unknown`,x?.state??`unknown`]):h?.state;return(0,b.jsxs)(`section`,{"aria-label":`Service access health`,className:`space-y-3`,children:[(0,b.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,b.jsx)(`h3`,{className:`font-semibold`,children:e?`Vault health`:`Health`}),S&&(0,b.jsx)(E,{state:S}),h&&(0,b.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`Checked `,s(_)]}),(0,b.jsx)(l,{size:`sm`,variant:`outline`,disabled:u,onClick:p,children:`Refresh`})]}),g&&(0,b.jsxs)(`p`,{role:`alert`,className:`text-sm`,children:[`Health unavailable: `,g]}),h&&!e&&(0,b.jsx)(D,{reasons:h.reasons}),x&&(0,b.jsxs)(`div`,{"aria-label":`Broker host`,className:`rounded border p-2 text-sm space-y-1`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(`strong`,{children:[`Broker host `,x.orchestratorId]}),(0,b.jsx)(E,{state:x.state})]}),x.units?(0,b.jsxs)(`dl`,{className:`grid grid-cols-[max-content_1fr] gap-x-3 text-xs`,children:[(0,b.jsx)(`dt`,{children:`Proxy ingress`}),(0,b.jsx)(`dd`,{children:x.units.ingress===`active`?`Open`:`Closed (${x.units.ingress})`}),(0,b.jsx)(`dt`,{children:`Agent Vault`}),(0,b.jsx)(`dd`,{children:x.units.native}),(0,b.jsx)(`dt`,{children:`Watchdog`}),(0,b.jsx)(`dd`,{children:x.units.watchdog}),(0,b.jsx)(`dt`,{children:`Credential refresh`}),(0,b.jsxs)(`dd`,{children:[x.refresh?.status??`unknown`,x.refresh?.phase?` (${x.refresh.phase})`:``,x.refresh?.lastSuccessAt?(0,b.jsxs)(b.Fragment,{children:[`, last success `,(0,b.jsx)(O,{now:_,at:x.refresh.lastSuccessAt})]}):null]}),(0,b.jsx)(`dt`,{children:`Upstream credential expiry`}),(0,b.jsx)(`dd`,{children:(0,b.jsx)(O,{now:_,at:x.refresh?.credentialExpiresAt,empty:`Unknown`})}),(0,b.jsx)(`dt`,{children:`Host checked`}),(0,b.jsx)(`dd`,{children:(0,b.jsx)(O,{now:_,at:x.checkedAt||void 0})})]}):(0,b.jsxs)(`p`,{className:`text-xs`,children:[`Host checked `,(0,b.jsx)(O,{now:_,at:x.checkedAt||void 0}),x.error?` · ${x.error}`:``]}),e&&(0,b.jsx)(D,{reasons:x.reasons})]}),v.map(e=>(0,b.jsxs)(`div`,{"aria-label":`Vault ${e.profile}`,className:`rounded border p-2 text-sm space-y-1`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(`strong`,{children:e.profile}),(0,b.jsx)(E,{state:e.state}),(0,b.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.vault})]}),(0,b.jsxs)(`dl`,{className:`grid grid-cols-[max-content_1fr] gap-x-3 text-xs`,children:[(0,b.jsx)(`dt`,{children:`Credential sync`}),(0,b.jsx)(`dd`,{children:e.error?`Unreachable (${e.error})`:e.sync?(0,b.jsxs)(b.Fragment,{children:[e.sync.failed?`failed`:e.sync.status,`, `,(0,b.jsx)(O,{now:_,at:e.sync.syncedAt})]}):`Unknown`}),(0,b.jsx)(`dt`,{children:`Request logs`}),(0,b.jsxs)(`dd`,{children:[e.logs.stored,` stored, collected `,(0,b.jsx)(O,{now:_,at:e.logs.collectedAt}),e.logs.backlog?`, backlog pending`:``,e.logs.evicted?`, ${e.logs.evicted} removed by the storage cap`:``,e.logs.error?` · ${e.logs.error}`:``]}),(0,b.jsx)(`dt`,{children:`Vault checked`}),(0,b.jsx)(`dd`,{children:(0,b.jsx)(O,{now:_,at:e.checkedAt})})]}),(0,b.jsx)(D,{reasons:e.reasons})]},e.vault)),h&&e&&!v.length&&(0,b.jsx)(`p`,{className:`text-sm`,children:`No vault for this profile yet. Save the profile and reconcile.`}),(r||a)&&(0,b.jsxs)(`section`,{"aria-label":`Unattributed request logs`,className:`space-y-1`,children:[(0,b.jsx)(`h4`,{className:`text-sm font-semibold`,children:`Request logs (unattributed)`}),a&&(0,b.jsxs)(`p`,{role:`alert`,className:`text-xs`,children:[`Request logs unavailable: `,a]}),(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Logged per vault and profile. A request is not linked to the agent that made it. Paths omit query strings and credential-like parts.`}),r?.logs.length?(0,b.jsx)(`div`,{className:`overflow-x-auto`,children:(0,b.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,b.jsx)(`thead`,{children:(0,b.jsxs)(`tr`,{className:`text-left`,children:[(0,b.jsx)(`th`,{className:`pr-2`,children:`Time`}),!e&&(0,b.jsx)(`th`,{className:`pr-2`,children:`Profile`}),(0,b.jsx)(`th`,{className:`pr-2`,children:`Request`}),(0,b.jsx)(`th`,{className:`pr-2`,children:`Service`}),(0,b.jsx)(`th`,{className:`pr-2`,children:`Status`}),(0,b.jsx)(`th`,{className:`pr-2`,children:`Latency`}),(0,b.jsx)(`th`,{children:`Attribution`})]})}),(0,b.jsx)(`tbody`,{children:r.logs.map(t=>(0,b.jsxs)(`tr`,{className:`border-t align-top`,children:[(0,b.jsx)(`td`,{className:`pr-2 whitespace-nowrap`,children:(0,b.jsx)(`time`,{dateTime:new Date(t.at).toISOString(),children:s(t.at)})}),!e&&(0,b.jsx)(`td`,{className:`pr-2`,children:t.profile}),(0,b.jsxs)(`td`,{className:`pr-2 break-all`,children:[t.method,` `,t.host,t.path]}),(0,b.jsx)(`td`,{className:`pr-2`,children:t.service??`Unmatched`}),(0,b.jsxs)(`td`,{className:`pr-2`,children:[t.status||`—`,t.errorCode?` ${t.errorCode}`:``]}),(0,b.jsxs)(`td`,{className:`pr-2`,children:[t.latencyMs,` ms`]}),(0,b.jsx)(`td`,{children:`Unattributed`})]},`${t.vault}:${t.id}`))})]})}):r&&(0,b.jsx)(`p`,{className:`text-xs`,children:`No requests logged.`}),r?.next&&(0,b.jsx)(l,{size:`sm`,variant:`outline`,disabled:u,onClick:m,children:`Load older`})]})]})}var M={catalog:{broker:{controlUrl:``,proxyUrl:``,caFingerprint:``,projectId:``},services:[]},profiles:{}};function N({states:e,profile:t}){return(0,b.jsx)(`div`,{className:`space-y-2`,children:e.filter(e=>!t||e.profile===t).map(e=>(0,b.jsxs)(`div`,{className:`rounded border p-2 text-sm`,children:[(0,b.jsx)(`strong`,{children:e.profile}),`: `,e.services.join(`, `)||`No services`,` — `,e.status,(0,b.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`Vault: `,e.vault]}),(0,b.jsxs)(`div`,{className:`break-all text-xs`,children:[`Desired: `,e.desiredRevision]}),(0,b.jsxs)(`div`,{className:`break-all text-xs`,children:[`Applied: `,e.appliedRevision??`None`]}),e.error&&(0,b.jsxs)(`div`,{role:`alert`,children:[e.error.code,`: `,e.error.message]})]},e.profile))})}function P(){let[e,t]=(0,y.useState)(null),[n,r]=(0,y.useState)(``),[i,a]=(0,y.useState)(`{"service":"fixture","profile":"sec-ops","ungrantedProfile":"worker","negativePath":"/missing-rule"}`),[o,s]=(0,y.useState)(``),[d,f]=(0,y.useState)(``),[p,m]=(0,y.useState)(!1);async function h(){let e=await c(`GET`,`/service-access`);t(e),r(JSON.stringify(e.catalog?{catalog:e.catalog,profiles:Object.fromEntries(e.profiles.map(e=>[e.profile,{services:e.services,...e.vaultOverride?{vault:e.vaultOverride}:{}}]))}:M,null,2))}(0,y.useEffect)(()=>{h().catch(e=>s(e.message))},[]);async function g(e){m(!0),s(``),f(``);try{await c(`POST`,`/service-access/${e}`,e===`apply`?JSON.parse(n):e===`test`?JSON.parse(i):{}),f(e===`test`?`Probe passed: positive, missing rule and ungranted profile`:`Service access applied`),await h()}catch(e){s(e.message);try{t(await c(`GET`,`/service-access`))}catch{}}finally{m(!1)}}return(0,b.jsxs)(`section`,{className:`space-y-3`,children:[(0,b.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Service access`}),(0,b.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Profile services use Agent Vault. Enter Infisical key references and dummy variables only. Broker environment and secretPath select the existing store; profile vault adopts an existing native vault. Set broker orchestratorId to apply the same binding to its refresh job and watchdog and to show their health.`}),(0,b.jsxs)(`label`,{className:`block text-sm`,children:[`Catalog and profile mappings (JSON)`,(0,b.jsx)(u,{"aria-label":`Catalog and profile mappings (JSON)`,rows:16,value:n,onChange:e=>r(e.target.value)})]}),(0,b.jsxs)(`div`,{className:`flex gap-2`,children:[(0,b.jsx)(l,{disabled:p||!e,onClick:()=>g(`apply`),children:`Save and apply`}),(0,b.jsx)(l,{variant:`outline`,disabled:p||!e?.catalog,onClick:()=>g(`reconcile`),children:`Reconcile`}),(0,b.jsx)(l,{variant:`outline`,disabled:p,onClick:()=>{s(``),h().catch(e=>s(e.message))},children:`Reload`})]}),o&&(0,b.jsx)(`p`,{role:`alert`,children:o}),d&&(0,b.jsx)(`p`,{role:`status`,children:d}),e&&(0,b.jsx)(N,{states:e.profiles}),e?.catalog&&(0,b.jsx)(j,{}),!!e?.cleanup?.length&&(0,b.jsxs)(`section`,{"aria-label":`Removed profile cleanup`,className:`space-y-2`,children:[(0,b.jsx)(`h3`,{className:`font-semibold`,children:`Removed profile cleanup`}),(0,b.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`These profiles were removed. Their vault cleanup stays visible here and is excluded from editable mappings.`}),(0,b.jsx)(N,{states:e.cleanup})]}),(0,b.jsxs)(`label`,{className:`block text-sm`,children:[`Fixture probe (JSON)`,(0,b.jsx)(u,{"aria-label":`Fixture probe (JSON)`,value:i,onChange:e=>a(e.target.value)})]}),(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Uses safe GETs against your fixture/test service: granted path, missing rule, ungranted profile. The service must reject dummy auth with 401 or 403.`}),(0,b.jsx)(l,{variant:`outline`,disabled:p||!e?.catalog,onClick:()=>g(`test`),children:`Test fixture`})]})}function F({profile:e,onChange:t,readOnly:n}){let[r,i]=(0,y.useState)(null),[a,o]=(0,y.useState)(``);(0,y.useEffect)(()=>{let e=!0;return c(`GET`,`/service-access`).then(t=>{e&&i(t)}).catch(t=>{e&&o(t.message)}),()=>{e=!1}},[]);let s=e.serviceAccess?.services??[];return(0,b.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,b.jsx)(`p`,{children:`Standing access through this profile. Save the profile, then reconcile in Settings → Service access.`}),(0,b.jsxs)(`label`,{className:`block`,children:[`Native vault (optional)`,(0,b.jsx)(`input`,{"aria-label":`Native vault (optional)`,className:`ml-2 rounded border bg-background p-1`,disabled:n,value:e.serviceAccess?.vault??``,placeholder:`Derived from profile name`,onChange:e=>t({services:s,...e.target.value?{vault:e.target.value}:{}})})]}),r?.catalog?.services.map(r=>(0,b.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(`input`,{type:`checkbox`,disabled:n,checked:s.includes(r.name),onChange:n=>t({...e.serviceAccess,services:n.target.checked?[...s,r.name]:s.filter(e=>e!==r.name)})}),r.name,` (`,r.host,r.path,`)`]},r.name)),!r?.catalog&&(0,b.jsx)(`p`,{children:`No catalog configured. Open Settings → Service access.`}),s.filter(e=>!r?.catalog?.services.some(t=>t.name===e)).map(e=>(0,b.jsxs)(`p`,{children:[`Unknown service: `,e]},e)),a&&(0,b.jsx)(`p`,{role:`alert`,children:a}),r&&(0,b.jsx)(N,{states:r.profiles,profile:e.name}),r?.catalog&&r.profiles.some(t=>t.profile===e.name)&&(0,b.jsx)(j,{profile:e.name})]})}export{g as a,p as c,_ as i,f as l,P as n,h as o,v as r,m as s,F as t,d as u};
|
|
2
|
+
//# sourceMappingURL=service-access-settings-C3aujqTG.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{o as t,p as n,u as r}from"./dist-DeW2Y1R5.js";import{Ct as i,Et as a,Ot as o,t as s}from"./store-BvtFdlGX.js";import{N as c,a as l,r as u,s as d,t as f,u as p,v as m}from"./provider-display-DbLWpP3j.js";import{a as h,n as g}from"./tasks-BIyeAaPC.js";import{o as _,s as v,t as y}from"./api-CIIVBtAV.js";import{t as b}from"./themes-G5j9m1Ji.js";import{a as x,i as S,n as C,o as w,r as T,s as E,t as ee}from"./dialog-uuJ9_geR.js";import{c as D,n as te,o as ne,r as re,s as ie,t as ae}from"./dropdown-menu-BXiNephE.js";import{t as O}from"./label-BPBzm9FJ.js";import{a as k,i as A,n as j,r as M,t as N}from"./select-DTQMP4Dk.js";import{t as P}from"./switch-DuCA7mrB.js";import{a as oe,c as se,i as ce,l as le,n as ue,o as de,r as fe,s as pe,u as me}from"./service-access-settings-C3aujqTG.js";import{t as he}from"./chevron-down-BoG3JCZn.js";import{t as ge}from"./chevron-right-iljytE0x.js";import{t as F}from"./circle-alert-CryagaZd.js";import{t as _e}from"./circle-check-CkUkN96J.js";import{t as ve}from"./eye-BAP6fHrX.js";import{t as ye}from"./gauge-BIODY-BQ.js";import{t as be}from"./key-round-CcSxl5qr.js";import{t as I}from"./loader-circle-BfPd4kOD.js";import{t as xe}from"./pencil-B1Hf2V_J.js";import{t as Se}from"./plus-D5Ek4e2S.js";import{t as Ce}from"./power-6tZOhYPg.js";import{t as we}from"./refresh-cw-CfpvQcUn.js";import{r as Te}from"./workflow-marker-Cf3Hf2fN.js";import{t as L}from"./save-B_PGqSm4.js";import{t as Ee}from"./trash-2-FbcSq927.js";import{t as De}from"./user-plus-D9749q73.js";import{t as Oe}from"./volume-2-XrcRKD9Z.js";import{t as R}from"./button-Do6Z3vvn.js";import{t as z}from"./badge-DqJRtj_p.js";import{t as ke}from"./copy-button-CjOj4HEf.js";import{t as B}from"./input-CsTB6jIx.js";import{t as V}from"./textarea-hs6Mpyfl.js";import{i as H,n as U,o as W,r as G,s as K,t as q}from"./card-C4QJ4hCW.js";import{t as Ae}from"./user-avatar-nBFIcR4M.js";var je={"admin:*":`system:admin`,"system:write":`system:admin`,"agents:read":`agent:read`,"agents:write":`agent:write`,"messages:read":`message:read`,"messages:write":`message:send`,"tasks:read":`task:read`,"tasks:write":`task:write`,"commands:read":`command:read`,"commands:write":`command:write`,"channels:read":`channel:read`,"channels:write":`channel:write`,"integrations:read":`integration:read`,"integrations:write":`integration:write`,"connectors:read":`integration:read`,"connectors:write":`integration:write`,"events:create":`integration:write`,"tasks:create":`task:write`};function Me(e){return je[e]??e}function Ne(e,t){let n=Me(t),r=Pe(n);if(!r)return!1;if(e?.includes(`*`))return!0;for(let t of e??[]){let e=Me(t),i=Pe(e);if(i&&(e===`system:admin`||e===n||e===`${r.category}:*`||r.category===`settings`&&r.action&&r.namespace&&i.category===`settings`&&i.action===r.action&&i.namespace===void 0))return!0}return!1}function Pe(e){if(e===`*`)return{category:`*`};let t=e.split(`:`);if(t.some(e=>!e))return null;if(t.length===2){let[e,n]=t;return{category:e,action:n}}if(t.length===3){let[e,n,r]=t;return e!==`settings`||n!==`read`&&n!==`write`||r===`*`?null:{category:e,action:n,namespace:r}}return null}var J=e(n(),1);function Fe(e){return`${e.namespace}/${e.key}`}function Ie(e){return`/settings/${encodeURIComponent(e.namespace)}/${encodeURIComponent(e.key)}`}function Le(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||`settings`}function Re(e){let t=new Map;for(let n of e.filter(e=>e.readable)){let e=n.display?.group?.trim()||n.namespace;t.set(e,[...t.get(e)??[],n])}return[...t.entries()].map(([e,t])=>({group:e,slug:Le(e),settings:t.sort(ze)})).sort((e,t)=>Be(e.settings)-Be(t.settings)||e.group.localeCompare(t.group))}function ze(e,t){return(e.display?.order??2**53-1)-(t.display?.order??2**53-1)||e.display?.label?.localeCompare(t.display?.label??``)||Fe(e).localeCompare(Fe(t))}function Be(e){return Math.min(...e.map(e=>e.display?.order??2**53-1))}function Ve(e){return Array.isArray(e.type)?e.type.find(e=>e!==`null`):e.type}function He(e,t,n){if(!t.length)return n;let[r,...i]=t;if(r===void 0)return n;if(typeof r==`number`){let t=Array.isArray(e)?[...e]:[];return t[r]=He(t[r],i,n),t}let a=c(e)?{...e}:{},o=He(a[r],i,n);return o===void 0?delete a[r]:a[r]=o,a}function Ue(e){if(e.default!==void 0)return e.default;if(e.const!==void 0)return e.const;if(e.enum?.length)return e.enum[0];switch(Ve(e)){case`boolean`:return!1;case`integer`:case`number`:return 0;case`array`:return[];case`object`:return{};case`string`:return``;default:return}}function We(e){return e.split(/\r?\n|,/).map(e=>e.trim()).filter(Boolean)}function Ge(e){return Array.isArray(e)?e.map(e=>String(e)).join(`
|
|
2
|
+
`):``}function Ke(e){return c(e)?Object.entries(e).map(([e,t])=>`${e}=${String(t??``)}`).join(`
|
|
3
|
+
`):``}function qe(e){return Object.fromEntries(e.split(/\r?\n/).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.indexOf(`=`);return t>=0?[e.slice(0,t).trim(),e.slice(t+1)]:[e,``]}))}var Y=r(),Je=`__unset__`;function Ye(e){return e===`server-runtime`?`Server runtime`:e===`bootstrap`?`Bootstrap`:`Browser`}function Xe(e){return e===`server-runtime`?`Stored by Relay and mutable while the server is running.`:e===`bootstrap`?`Read from startup configuration; restart or host config changes are required.`:`Stored only in this browser profile.`}function Ze(e){return e===`browser`?(0,Y.jsx)(de,{className:`size-3.5`}):(0,Y.jsx)(ce,{className:`size-3.5`})}function X(e){return e.details??[]}function Qe({group:e,settings:t,onSaved:n}){let r=[...new Set(t.map(e=>e.tier))];return(0,Y.jsxs)(`section`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,Y.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:r.map(e=>(0,Y.jsxs)(z,{variant:`outline`,className:`gap-1`,title:Xe(e),children:[Ze(e),Ye(e)]},e))})]}),t.length===0?(0,Y.jsx)(q,{size:`sm`,children:(0,Y.jsx)(G,{className:`text-sm text-muted-foreground`,children:`No settings in this group.`})}):(0,Y.jsx)(`div`,{className:`space-y-3`,children:t.map(e=>(0,Y.jsx)($e,{setting:e,onSaved:n},Fe(e)))})]})}function $e({setting:e,onSaved:t}){let[n,r]=(0,J.useState)(()=>e.value??e.defaults??Ue(e.schema)),[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)(``),[c,l]=(0,J.useState)([]),u=e.writable&&e.tier===`server-runtime`;function d(e,t){r(n=>He(n,e,t)),l([]),s(``)}async function f(){if(u){a(!0),l([]),s(``);try{let i=await y(`PUT`,Ie(e),{value:n,updatedBy:`dashboard`});r(i.value),t(i),s(`Saved`)}catch(e){let t=X(e);l(t.length?t:[e.message])}finally{a(!1)}}}return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsxs)(K,{className:`flex flex-wrap items-center gap-2 text-sm`,children:[e.display.label,(0,Y.jsxs)(z,{variant:`outline`,className:`gap-1`,title:Xe(e.tier),children:[Ze(e.tier),Ye(e.tier)]}),!e.writable&&(0,Y.jsx)(z,{variant:`secondary`,children:`Read only`})]}),e.display.description&&(0,Y.jsx)(H,{children:e.display.description}),(0,Y.jsx)(U,{children:(0,Y.jsxs)(R,{size:`sm`,onClick:f,disabled:!u||i,children:[(0,Y.jsx)(L,{className:`size-4`}),i?`Saving`:`Save`]})})]}),(0,Y.jsxs)(G,{className:`space-y-3`,children:[(0,Y.jsx)(tt,{schema:e.schema,value:n,path:[],label:e.display.label,required:!0,disabled:!u||i,onChange:d}),(0,Y.jsxs)(`p`,{className:`flex flex-wrap items-center gap-x-2 text-[11px] text-muted-foreground`,children:[(0,Y.jsxs)(`code`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono`,children:[e.namespace,`/`,e.key]}),(0,Y.jsxs)(`span`,{children:[`read `,(0,Y.jsx)(`span`,{className:`text-foreground/70`,children:e.scope.read})]}),(0,Y.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,Y.jsxs)(`span`,{children:[`write `,(0,Y.jsx)(`span`,{className:`text-foreground/70`,children:e.scope.write})]})]}),(0,Y.jsx)(et,{errors:c,status:o})]})]})}function et({errors:e,status:t}){return(0,Y.jsxs)(Y.Fragment,{children:[e.length>0&&(0,Y.jsxs)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,Y.jsxs)(`div`,{className:`mb-1 flex items-center gap-2 font-medium`,children:[(0,Y.jsx)(F,{className:`size-4`}),`Save failed`]}),(0,Y.jsx)(`ul`,{className:`list-disc space-y-1 pl-5`,children:e.map(e=>(0,Y.jsx)(`li`,{children:e},e))})]}),t&&(0,Y.jsxs)(`p`,{className:`flex items-center gap-1 text-sm text-tone-success-fg`,children:[(0,Y.jsx)(_e,{className:`size-4`}),t]})]})}function tt(e){let{schema:t,value:n,path:r,label:i,required:a,disabled:o,onChange:s}=e,l=Ve(t);if(t.enum?.length){let e=n==null||n===``?Je:String(n);return(0,Y.jsx)(Z,{label:i,description:t.description,children:(0,Y.jsxs)(N,{value:e,onValueChange:e=>s(r,e===`__unset__`?void 0:e),disabled:o,children:[(0,Y.jsx)(A,{"aria-label":i,children:(0,Y.jsx)(k,{})}),(0,Y.jsxs)(j,{children:[!a&&(0,Y.jsx)(M,{value:`__unset__`,children:`Not set`}),t.enum.map(e=>(0,Y.jsx)(M,{value:String(e),children:String(e)},String(e)))]})]})})}if(l===`boolean`)return(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:i}),t.description&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.description})]}),(0,Y.jsx)(P,{"aria-label":i,checked:!!n,onCheckedChange:e=>s(r,e),disabled:o})]});if(l===`integer`||l===`number`)return(0,Y.jsx)(Z,{label:i,description:t.description,children:(0,Y.jsx)(B,{"aria-label":i,type:`number`,min:typeof t.minimum==`number`?t.minimum:void 0,max:typeof t.maximum==`number`?t.maximum:void 0,step:l===`integer`?1:`any`,value:typeof n==`number`?n:``,disabled:o,onChange:e=>s(r,e.target.value===``&&!a?void 0:Number(e.target.value))})});if(l===`array`)return(0,Y.jsx)(Z,{label:i,description:t.description??`One item per line.`,children:(0,Y.jsx)(V,{"aria-label":i,rows:Math.min(8,Math.max(3,Array.isArray(n)?n.length+1:3)),value:Ge(n),disabled:o,onChange:e=>s(r,We(e.target.value))})});if(l===`object`){let e=t.properties??{},a=new Set(t.required??[]);return Object.keys(e).length===0&&t.additionalProperties?(0,Y.jsx)(Z,{label:i,description:t.description??`KEY=value, one entry per line.`,children:(0,Y.jsx)(V,{"aria-label":i,rows:5,value:Ke(n),disabled:o,onChange:e=>s(r,qe(e.target.value))})}):(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[r.length>0&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:i}),t.description&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.description})]}),(0,Y.jsx)(`div`,{className:`grid gap-3 md:grid-cols-2`,children:Object.entries(e).map(([e,t])=>{let i=c(n)?n[e]:void 0;return(0,Y.jsx)(tt,{schema:t,value:i===void 0&&a.has(e)?Ue(t):i,path:[...r,e],label:t.title||nt(e),required:a.has(e),disabled:o,onChange:s},e)})})]})}return(0,Y.jsx)(Z,{label:i,description:t.description,children:(0,Y.jsx)(B,{"aria-label":i,value:typeof n==`string`?n:n==null?``:String(n),disabled:o,onChange:e=>s(r,e.target.value===``&&!a?void 0:e.target.value)})})}function Z({label:e,description:t,children:n}){return(0,Y.jsxs)(`label`,{className:`block space-y-1.5 text-sm`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:e}),n,t&&(0,Y.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:t})]})}function nt(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/[-_]+/g,` `).replace(/^\w/,e=>e.toUpperCase())}function rt(){let e=s(e=>e.theme),t=s(e=>e.set);return(0,Y.jsxs)(`section`,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-base font-semibold`,children:`Browser preferences`}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`These are stored in local dashboard state, not in Relay server config.`})]}),(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsx)(K,{className:`text-sm`,children:`Dashboard display`}),(0,Y.jsx)(H,{className:`text-xs`,children:`Browser tier · persisted in this browser profile.`}),(0,Y.jsx)(U,{children:(0,Y.jsxs)(z,{variant:`outline`,className:`gap-1`,children:[(0,Y.jsx)(de,{className:`size-3.5`}),`Browser`]})})]}),(0,Y.jsx)(G,{className:`grid gap-3 md:grid-cols-2`,children:(0,Y.jsx)(Z,{label:`Theme`,children:(0,Y.jsxs)(N,{value:e,onValueChange:e=>t({theme:e}),children:[(0,Y.jsx)(A,{children:(0,Y.jsx)(k,{})}),(0,Y.jsx)(j,{children:b.map(e=>(0,Y.jsx)(M,{value:e.id,children:e.label},e.id))})]})})})]}),(0,Y.jsx)(it,{})]})}function it(){let e=s(e=>e.voiceTtsEnabled),t=s(e=>e.setVoiceTtsEnabled),n=s(e=>e.voiceTtsMode),r=s(e=>e.setVoiceTtsMode),i=s(e=>e.voiceTtsKokoroVoice),c=s(e=>e.setVoiceTtsKokoroVoice),l=s(e=>e.voiceTtsBrowserVoice),u=s(e=>e.setVoiceTtsBrowserVoice),d=s(e=>e.voiceInputMode),f=s(e=>e.setVoiceInputMode),[p,m]=(0,J.useState)(()=>o());(0,J.useEffect)(()=>{if(typeof window>`u`||!(`speechSynthesis`in window))return;let e=()=>m(o());return e(),window.speechSynthesis.addEventListener?.(`voiceschanged`,e),()=>window.speechSynthesis.removeEventListener?.(`voiceschanged`,e)},[]);let h=a.some(e=>e.id===i)?a:[...a,{id:i,label:i}];return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsxs)(K,{className:`flex items-center gap-2 text-sm`,children:[(0,Y.jsx)(Oe,{className:`size-4`}),`Voice`]}),(0,Y.jsx)(H,{className:`text-xs`,children:`Browser tier TTS and push-to-talk behavior.`}),(0,Y.jsx)(U,{children:(0,Y.jsx)(P,{checked:e,onCheckedChange:t})})]}),(0,Y.jsxs)(G,{className:`grid gap-3 md:grid-cols-2`,children:[(0,Y.jsx)(Z,{label:`Speech engine`,children:(0,Y.jsxs)(N,{value:n,onValueChange:e=>r(e),children:[(0,Y.jsx)(A,{children:(0,Y.jsx)(k,{})}),(0,Y.jsxs)(j,{children:[(0,Y.jsx)(M,{value:`kokoro`,children:`Kokoro (server, fallback to browser)`}),(0,Y.jsx)(M,{value:`browser`,children:`Browser Web Speech API`})]})]})}),(0,Y.jsx)(Z,{label:`Kokoro voice`,children:(0,Y.jsxs)(N,{value:i,onValueChange:c,children:[(0,Y.jsx)(A,{children:(0,Y.jsx)(k,{})}),(0,Y.jsx)(j,{children:h.map(e=>(0,Y.jsx)(M,{value:e.id,children:e.label},e.id))})]})}),(0,Y.jsx)(Z,{label:`Browser voice`,children:(0,Y.jsxs)(N,{value:l||`__unset__`,onValueChange:e=>u(e===`__unset__`?``:e),children:[(0,Y.jsx)(A,{children:(0,Y.jsx)(k,{})}),(0,Y.jsxs)(j,{children:[(0,Y.jsx)(M,{value:Je,children:`System default`}),p.map(e=>(0,Y.jsx)(M,{value:e.uri,children:e.label},e.uri))]})]})}),(0,Y.jsx)(Z,{label:`Push-to-talk input`,children:(0,Y.jsxs)(N,{value:d,onValueChange:e=>f(e),children:[(0,Y.jsx)(A,{children:(0,Y.jsx)(k,{})}),(0,Y.jsxs)(j,{children:[(0,Y.jsx)(M,{value:`compose`,children:`Fill message box`}),(0,Y.jsx)(M,{value:`autosend`,children:`Send immediately`})]})]})})]})]})}var at=[{value:``,label:`Until re-enabled`},{value:`1h`,label:`1 hour`,ms:60*6e4},{value:`1d`,label:`1 day`,ms:1440*6e4},{value:`7d`,label:`7 days`,ms:10080*6e4},{value:`30d`,label:`30 days`,ms:720*60*6e4}];function ot({entry:e,canWrite:t,onChanged:n,onError:r}){let[i,a]=(0,J.useState)(``),[o,s]=(0,J.useState)(``),[c,l]=(0,J.useState)(!1),u=e.disabled,d=u?.source===`operator`;async function f(c){if(t){l(!0);try{let t=at.find(e=>e.value===o)?.ms;await y(`PUT`,`/providers/${encodeURIComponent(e.provider)}/enablement`,{enabled:c,...!c&&t?{disabledUntil:Date.now()+t}:{},...!c&&i.trim()?{reason:i.trim()}:{},updatedBy:`dashboard`}),a(``),s(``),await n(`${e.provider} ${c?`enabled`:`disabled`}`)}catch(e){r(e)}finally{l(!1)}}}return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsxs)(K,{className:`text-sm`,children:[`Provider `,e.label||e.provider]}),(0,Y.jsx)(U,{children:u?(0,Y.jsxs)(z,{variant:`destructive`,className:`gap-1`,children:[(0,Y.jsx)(oe,{className:`size-3.5`}),`Disabled`]}):(0,Y.jsxs)(z,{variant:`outline`,className:`gap-1`,children:[(0,Y.jsx)(Ce,{className:`size-3.5`}),`Enabled`]})})]}),(0,Y.jsxs)(G,{className:`space-y-3 text-sm`,children:[u?.source===`all-models-disabled`&&(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`All models are disabled, so the provider is disabled too. Enable a model below to bring it back.`}),d&&(0,Y.jsxs)(`p`,{className:`text-muted-foreground`,children:[`Disabled by the operator`,u.disabledUntil?` until ${new Date(u.disabledUntil).toLocaleString()}`:``,u.reason?` — ${u.reason}`:``,`.`,` `,`No new spawns, routing, quota polling or quota alerts. Running agents keep running.`]}),d?(0,Y.jsx)(R,{size:`sm`,disabled:!t||c,onClick:()=>void f(!0),children:`Enable provider`}):(0,Y.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-[1fr_auto_auto] md:items-end`,children:[(0,Y.jsx)(Z,{label:`Reason (optional)`,children:(0,Y.jsx)(B,{value:i,disabled:!t||c,placeholder:`e.g. subscription ended`,onChange:e=>a(e.target.value)})}),(0,Y.jsx)(Z,{label:`Disable for`,children:(0,Y.jsx)(`select`,{className:`h-9 w-full rounded-md border border-input bg-background px-3 text-sm`,value:o,disabled:!t||c,onChange:e=>s(e.target.value),children:at.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:e.label},e.value))})}),(0,Y.jsx)(R,{size:`sm`,variant:`destructive`,disabled:!t||c,onClick:()=>void f(!1),children:`Disable provider`})]})]})]})}function st({catalog:e,error:t,canWrite:n,onCatalog:r}){let i=e[0]?.provider??``,[a,o]=(0,J.useState)(i),[s,c]=(0,J.useState)(()=>ct(i)),[l,u]=(0,J.useState)(``),[d,f]=(0,J.useState)([]),p=e.some(e=>e.provider===a)?a:i,m=e.find(e=>e.provider===p)??e[0],h=e.map(e=>e.provider);function g(e){c(t=>({...t,...e})),f([]),u(``)}function _(e){o(e),c(ct(e)),f([]),u(``)}async function v(){r((await y(`GET`,`/providers`)).catalog)}async function b(){if(n){f([]),u(``);try{await y(`PUT`,`/providers/${encodeURIComponent(s.provider)}/models/${encodeURIComponent(s.alias)}`,{label:s.label,providerModel:s.providerModel,efforts:We(s.efforts),defaultEffort:s.defaultEffort.trim()||void 0,limits:ut(s),capabilities:s.capabilities,contextThreshold:ft(s),disabled:s.disabled,updatedBy:`dashboard`}),await v(),u(`${s.alias} saved`),c(ct(s.provider))}catch(e){let t=X(e);f(t.length?t:[e.message])}}}async function x(e,t){if(n){f([]),u(``);try{await y(`PATCH`,`/providers/${encodeURIComponent(p)}/models/${encodeURIComponent(e.alias)}`,{disabled:t,updatedBy:`dashboard`}),await v(),u(`${e.alias} ${t?`disabled`:`enabled`}`)}catch(e){let t=X(e);f(t.length?t:[e.message])}}}async function S(e){if(n){f([]),u(``);try{await y(`PUT`,`/providers/${encodeURIComponent(p)}/default-model`,{alias:e.alias,updatedBy:`dashboard`}),await v(),u(`${e.alias} is now the default`)}catch(e){let t=X(e);f(t.length?t:[e.message])}}}async function C(e){if(n){f([]),u(``);try{await y(`DELETE`,`/providers/${encodeURIComponent(p)}/models/${encodeURIComponent(e.alias)}`),await v(),u(`${e.alias} removed`)}catch(e){let t=X(e);f(t.length?t:[e.message])}}}function w(e){c({provider:p,alias:e.alias,label:e.label,providerModel:e.providerModel,efforts:e.efforts.join(`, `),defaultEffort:e.defaultEffort??``,contextWindowTokens:e.limits?.contextWindowTokens?.value?.toString()??``,maxOutputTokens:e.limits?.maxOutputTokens?.value?.toString()??``,selfCompactUtilization:e.contextThreshold?.selfCompactUtilization?.toString()??``,warnUtilization:e.contextThreshold?.warnUtilization?.toString()??``,hardBackstopUtilization:e.contextThreshold?.hardBackstopUtilization?.toString()??``,disabled:!!e.disabled,capabilities:e.capabilities}),f([]),u(``)}return t?(0,Y.jsx)(q,{size:`sm`,children:(0,Y.jsxs)(G,{className:`text-sm text-muted-foreground`,children:[(0,Y.jsxs)(`div`,{className:`mb-1 flex items-center gap-2 font-medium text-foreground`,children:[(0,Y.jsx)(ie,{className:`size-4`}),`Model catalog`]}),t]})}):(0,Y.jsxs)(`section`,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-base font-semibold`,children:`Model catalog`}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Switch a whole provider off or on, add override models, disable unavailable models, or remove custom entries from the provider catalog.`})]}),!n&&(0,Y.jsx)(z,{variant:`secondary`,children:`Read only: needs settings:write:provider`})]}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:h.map(t=>(0,Y.jsxs)(R,{variant:t===p?`default`:`outline`,size:`sm`,onClick:()=>_(t),children:[t,e.find(e=>e.provider===t)?.disabled?` (off)`:``]},t))}),m&&(0,Y.jsx)(ot,{entry:m,canWrite:n,onChanged:async e=>{await v(),f([]),u(e)},onError:e=>{let t=X(e);f(t.length?t:[e.message])}}),(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsx)(K,{className:`text-sm`,children:`Add or edit model`}),(0,Y.jsx)(U,{children:(0,Y.jsxs)(z,{variant:`outline`,className:`gap-1`,children:[(0,Y.jsx)(ce,{className:`size-3.5`}),`Server runtime`]})})]}),(0,Y.jsxs)(G,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2`,children:[(0,Y.jsx)(Z,{label:`Alias`,children:(0,Y.jsx)(B,{value:s.alias,disabled:!n,placeholder:`nightly`,onChange:e=>g({alias:e.target.value.trim()})})}),(0,Y.jsx)(Z,{label:`Label`,children:(0,Y.jsx)(B,{value:s.label,disabled:!n,placeholder:`Nightly Codex`,onChange:e=>g({label:e.target.value})})}),(0,Y.jsx)(Z,{label:`Provider model`,children:(0,Y.jsx)(B,{value:s.providerModel,disabled:!n,placeholder:`codex-nightly`,onChange:e=>g({providerModel:e.target.value})})}),(0,Y.jsx)(Z,{label:`Efforts`,children:(0,Y.jsx)(B,{value:s.efforts,disabled:!n,placeholder:`low, medium, high`,onChange:e=>g({efforts:e.target.value})})}),(0,Y.jsx)(Z,{label:`Default effort`,children:(0,Y.jsx)(B,{value:s.defaultEffort,disabled:!n,placeholder:`medium`,onChange:e=>g({defaultEffort:e.target.value})})}),(0,Y.jsx)(Z,{label:`Context window tokens`,children:(0,Y.jsx)(B,{value:s.contextWindowTokens,disabled:!n,placeholder:`e.g. 256000 (OpenRouter: context_length)`,inputMode:`numeric`,onChange:e=>g({contextWindowTokens:e.target.value})})}),(0,Y.jsx)(Z,{label:`Max output tokens`,children:(0,Y.jsx)(B,{value:s.maxOutputTokens,disabled:!n,placeholder:`e.g. 32000`,inputMode:`numeric`,onChange:e=>g({maxOutputTokens:e.target.value})})}),(0,Y.jsx)(Z,{label:`Self compact utilization`,children:(0,Y.jsx)(B,{value:s.selfCompactUtilization,disabled:!n,placeholder:`0.80`,inputMode:`decimal`,onChange:e=>g({selfCompactUtilization:e.target.value})})}),(0,Y.jsx)(Z,{label:`Warn utilization`,children:(0,Y.jsx)(B,{value:s.warnUtilization,disabled:!n,placeholder:`default: self - 0.10`,inputMode:`decimal`,onChange:e=>g({warnUtilization:e.target.value})})}),(0,Y.jsx)(Z,{label:`Hard backstop utilization`,children:(0,Y.jsx)(B,{value:s.hardBackstopUtilization,disabled:!n,placeholder:`0.90`,inputMode:`decimal`,onChange:e=>g({hardBackstopUtilization:e.target.value})})}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`Disabled`}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Keep visible but unavailable for new launches.`})]}),(0,Y.jsx)(P,{checked:s.disabled,disabled:!n,onCheckedChange:e=>g({disabled:e})})]})]}),lt(m,s.providerModel)&&(0,Y.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Qualified runtime name: `,(0,Y.jsx)(`code`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono`,children:lt(m,s.providerModel)})]}),(0,Y.jsxs)(R,{onClick:b,disabled:!n||!s.alias||!s.label||!s.providerModel,children:[(0,Y.jsx)(Se,{className:`size-4`}),`Save model`]})]})]}),(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[m&&m.models.length===0&&(0,Y.jsx)(q,{size:`sm`,children:(0,Y.jsx)(G,{className:`text-sm text-muted-foreground`,children:`No models in this provider catalog yet.`})}),m?.models.map(e=>(0,Y.jsx)(q,{size:`sm`,children:(0,Y.jsxs)(G,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label}),(0,Y.jsx)(`code`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono text-xs`,children:e.alias}),e.disabled&&(0,Y.jsx)(z,{variant:`secondary`,children:`Disabled`}),e.alias===m.defaultModel&&(0,Y.jsx)(z,{variant:`secondary`,children:`Default`})]}),(0,Y.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[e.providerModel,e.efforts.length>0?` · efforts ${e.efforts.join(`, `)}`:` · no effort levels`,e.defaultEffort?` · default ${e.defaultEffort}`:``,` · context ${mt(e)}`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[e.alias!==m.defaultModel&&(0,Y.jsx)(R,{variant:`outline`,size:`sm`,disabled:!n||!!(e.disabled||e.unavailable),onClick:()=>void S(e),children:`Set default`}),(0,Y.jsxs)(R,{variant:`outline`,size:`sm`,onClick:()=>w(e),children:[(0,Y.jsx)(xe,{className:`size-4`}),`Edit`]}),(0,Y.jsxs)(R,{variant:`outline`,size:`sm`,disabled:!n,onClick:()=>void x(e,!e.disabled),children:[e.disabled?(0,Y.jsx)(ve,{className:`size-4`}):(0,Y.jsx)(se,{className:`size-4`}),e.disabled?`Enable`:`Disable`]}),(0,Y.jsxs)(R,{variant:`outline`,size:`sm`,disabled:!n,onClick:()=>void C(e),children:[(0,Y.jsx)(Ee,{className:`size-4`}),`Remove`]})]})]})},e.alias))]}),d.length>0&&(0,Y.jsx)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:(0,Y.jsx)(`ul`,{className:`list-disc space-y-1 pl-5`,children:d.map(e=>(0,Y.jsx)(`li`,{children:e},e))})}),l&&(0,Y.jsxs)(`p`,{className:`flex items-center gap-1 text-sm text-tone-success-fg`,children:[(0,Y.jsx)(_e,{className:`size-4`}),l]})]})}function ct(e){return{provider:e,alias:``,label:``,providerModel:``,efforts:``,defaultEffort:``,contextWindowTokens:``,maxOutputTokens:``,selfCompactUtilization:``,warnUtilization:``,hardBackstopUtilization:``,disabled:!1}}function lt(e,t){return p(e,t)}function ut(e){let t=dt(e.contextWindowTokens,`Context window tokens`),n=dt(e.maxOutputTokens,`Max output tokens`);if(!(!t&&!n))return{...t?{contextWindowTokens:t}:{},...n?{maxOutputTokens:n}:{}}}function dt(e,t){let n=e.trim();if(!n)return;let r=Number(n);if(!Number.isSafeInteger(r)||r<=0)throw Error(`${t} must be a positive integer`);return{value:r,source:`override`,confidence:`declared`}}function ft(e){let t=pt(e.selfCompactUtilization,`Self compact utilization`),n=pt(e.warnUtilization,`Warn utilization`),r=pt(e.hardBackstopUtilization,`Hard backstop utilization`);if(!(t===void 0&&n===void 0&&r===void 0)){if(t===void 0)throw Error(`Self compact utilization is required when setting context thresholds`);return{selfCompactUtilization:t,...n===void 0?{}:{warnUtilization:n},...r===void 0?{}:{hardBackstopUtilization:r}}}}function pt(e,t){let n=e.trim();if(!n)return;let r=Number(n);if(!Number.isFinite(r))throw Error(`${t} must be a number`);return r}function mt(e){if(e.contextThreshold)return`self ${ht(e.contextThreshold.selfCompactUtilization)}, warn ${ht(e.contextThreshold.warnUtilization??Math.max(0,e.contextThreshold.selfCompactUtilization-.1))}`;let t=d(e.limits?.contextWindowTokens?.value);return`derived self ${ht(t.selfCompactUtilization)}, warn ${ht(t.warnUtilization)}`}function ht(e){return`${Math.round(e*100)}%`}var gt=e=>e===void 0?`inherit`:e?`on`:`off`,_t=e=>e===`inherit`?void 0:e===`on`,vt=e=>({...e.defaults,...e.value,teams:{...e.value?.teams}});function yt({setting:e,teams:t,onSaved:n}){let[r,i]=(0,J.useState)(()=>vt(e)),[a,o]=(0,J.useState)(!1),[s,c]=(0,J.useState)(``),[l,u]=(0,J.useState)([]),d=e.writable&&e.tier===`server-runtime`,f=!d||a;function p(e){i(t=>({...t,...e})),u([]),c(``)}function m(e,t){let n={...r.teams[e],...t},{[e]:i,...a}=r.teams;p({teams:Object.values(n).some(e=>e!==void 0)?{...a,[e]:n}:a})}async function h(){if(d){o(!0),u([]),c(``);try{let e=await y(`PUT`,`/settings/idle-digest/default`,{value:r,updatedBy:`dashboard`});i(vt(e)),n(e),c(`Saved`)}catch(e){let t=X(e);u(t.length?t:[e.message])}finally{o(!1)}}}let g=new Map;for(let e of t)e.status===`active`&&g.set(e.id,e.title||e.id);for(let e of Object.keys(r.teams))g.has(e)||g.set(e,e);return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsxs)(K,{className:`flex flex-wrap items-center gap-2 text-sm`,children:[`Idle-agent digest`,(0,Y.jsxs)(z,{variant:`outline`,className:`gap-1`,children:[(0,Y.jsx)(ce,{className:`size-3.5`}),`Server runtime`]}),!d&&(0,Y.jsx)(z,{variant:`secondary`,children:`Read only`})]}),(0,Y.jsx)(H,{children:`One digest per coordinator per window listing idle children; provably safe ones can be stopped automatically.`}),(0,Y.jsx)(U,{children:(0,Y.jsxs)(R,{size:`sm`,onClick:()=>void h(),disabled:f,children:[(0,Y.jsx)(L,{className:`size-4`}),a?`Saving`:`Save`]})})]}),(0,Y.jsxs)(G,{className:`space-y-4`,children:[(0,Y.jsx)(xt,{label:`Send idle-agent digests to coordinators`,checked:r.enabled,disabled:f,onChange:e=>p({enabled:e})}),(0,Y.jsx)(Z,{label:`Digest window (hours)`,description:`Default for every team (0.25–168). The server validates the range.`,children:(0,Y.jsx)(B,{"aria-label":`Digest window (hours)`,type:`number`,step:`any`,min:.25,max:168,value:r.windowHours,disabled:f,onChange:e=>p({windowHours:Number(e.target.value)})})}),(0,Y.jsx)(xt,{label:`Stop provably safe idle children automatically`,checked:r.autoReapSafe,disabled:f,onChange:e=>p({autoReapSafe:e})}),(0,Y.jsxs)(`div`,{className:`space-y-3 rounded-md border bg-muted/20 p-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`Per-team overrides`}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Leave a window empty or a switch on “Inherit” to follow the defaults above. A team switched on here is digested even while the global switch is off.`})]}),g.size===0&&(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No active teams.`}),[...g].map(([e,t])=>{let n=r.teams[e];return(0,Y.jsxs)(`div`,{className:`grid items-end gap-3 md:grid-cols-[minmax(0,1fr)_140px_160px_160px]`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`truncate text-sm font-medium`,children:t}),t!==e&&(0,Y.jsx)(`code`,{className:`block truncate text-[11px] text-muted-foreground`,children:e})]}),(0,Y.jsx)(Z,{label:`Window (hours)`,children:(0,Y.jsx)(B,{"aria-label":`${t} digest window (hours)`,type:`number`,step:`any`,min:.25,max:168,placeholder:String(r.windowHours),value:n?.windowHours??``,disabled:f,onChange:t=>m(e,{windowHours:t.target.value===``?void 0:Number(t.target.value)})})}),(0,Y.jsx)(bt,{label:`Digest`,ariaLabel:`${t} digest`,value:n?.enabled,inherited:r.enabled,disabled:f,onChange:t=>m(e,{enabled:t})}),(0,Y.jsx)(bt,{label:`Auto-reap`,ariaLabel:`${t} auto-reap`,value:n?.autoReapSafe,inherited:r.autoReapSafe,disabled:f,onChange:t=>m(e,{autoReapSafe:t})})]},e)})]}),(0,Y.jsx)(et,{errors:l,status:s})]})]})}function bt({label:e,ariaLabel:t,value:n,inherited:r,disabled:i,onChange:a}){return(0,Y.jsx)(Z,{label:e,children:(0,Y.jsxs)(`select`,{"aria-label":t,className:`h-8 w-full rounded-lg border border-input bg-transparent px-2.5 text-sm`,value:gt(n),disabled:i,onChange:e=>a(_t(e.target.value)),children:[(0,Y.jsxs)(`option`,{value:`inherit`,children:[`Inherit (`,r?`on`:`off`,`)`]}),(0,Y.jsx)(`option`,{value:`on`,children:`On`}),(0,Y.jsx)(`option`,{value:`off`,children:`Off`})]})})}function xt({label:e,checked:t,disabled:n,onChange:r}){return(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:e}),(0,Y.jsx)(P,{"aria-label":e,checked:t,disabled:n,onCheckedChange:r})]})}var St=`unset`;function Ct(e){let t=e=>e?.trim()||void 0,n={communicationStyle:e.communicationStyle,responseStyle:e.responseStyle};e.communicationStyle===`custom`&&(n.communicationCustom=t(e.communicationCustom)),e.responseStyle===`custom`&&(n.responseCustom=t(e.responseCustom));for(let r of[`about`,`locale`,`timeZone`]){let i=t(e[r]);i&&(n[r]=i)}return e.dateFormat&&(n.dateFormat=e.dateFormat),Object.fromEntries(Object.entries(n).filter(([,e])=>e!==void 0))}function wt({title:e,hint:t,children:n}){return(0,Y.jsxs)(`section`,{className:`space-y-2 border-b border-border pb-4 last:border-b-0 last:pb-0`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h3`,{className:`text-sm font-medium`,children:e}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t})]}),n]})}function Tt({setting:e,onSaved:t}){let[n,r]=(0,J.useState)(e.value),[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)(``),[c,l]=(0,J.useState)(!1),u=e=>{r(t=>({...t,...e})),l(!1)},d=n.communicationStyle===`custom`&&!n.communicationCustom?.trim()||n.responseStyle===`custom`&&!n.responseCustom?.trim();async function f(){a(!0),s(``);try{let e=await y(`PUT`,`/settings/agent-prefs/default`,{value:Ct(n),updatedBy:`dashboard`});r(e.value),l(!0),t(e)}catch(e){s(e.message)}finally{a(!1)}}return(0,Y.jsx)(q,{size:`sm`,"data-testid":`agent-prefs`,children:(0,Y.jsxs)(G,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-sm font-semibold`,children:`How agents talk to you`}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Agents you own use these from their next start or context reset.`})]}),(0,Y.jsxs)(wt,{title:`Communication style`,hint:`The tone agents use with you.`,children:[(0,Y.jsxs)(N,{value:n.communicationStyle,onValueChange:e=>u({communicationStyle:e}),children:[(0,Y.jsx)(A,{className:`w-full sm:w-64`,"aria-label":`Communication style`,children:(0,Y.jsx)(k,{})}),(0,Y.jsxs)(j,{children:[(0,Y.jsx)(M,{value:`neutral`,children:`Neutral`}),(0,Y.jsx)(M,{value:`warm`,children:`Warm and friendly`}),(0,Y.jsx)(M,{value:`custom`,children:`Custom`})]})]}),n.communicationStyle===`custom`&&(0,Y.jsx)(V,{"aria-label":`Custom communication style`,maxLength:300,rows:2,placeholder:`For example: direct, a little dry humor`,value:n.communicationCustom??``,onChange:e=>u({communicationCustom:e.target.value})})]}),(0,Y.jsxs)(wt,{title:`Response style`,hint:`How long and detailed replies are.`,children:[(0,Y.jsxs)(N,{value:n.responseStyle,onValueChange:e=>u({responseStyle:e}),children:[(0,Y.jsx)(A,{className:`w-full sm:w-64`,"aria-label":`Response style`,children:(0,Y.jsx)(k,{})}),(0,Y.jsxs)(j,{children:[(0,Y.jsx)(M,{value:`normal`,children:`Normal`}),(0,Y.jsx)(M,{value:`brief`,children:`Brief`}),(0,Y.jsx)(M,{value:`custom`,children:`Custom`})]})]}),n.responseStyle===`custom`&&(0,Y.jsx)(V,{"aria-label":`Custom response style`,maxLength:300,rows:2,placeholder:`For example: bullet points, numbers first`,value:n.responseCustom??``,onChange:e=>u({responseCustom:e.target.value})})]}),(0,Y.jsx)(wt,{title:`About you`,hint:`What you want agents to know about you. Optional.`,children:(0,Y.jsx)(V,{"aria-label":`About you`,maxLength:600,rows:3,value:n.about??``,onChange:e=>u({about:e.target.value})})}),(0,Y.jsx)(wt,{title:`Language and time`,hint:`Optional. Leave empty to let agents decide.`,children:(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(O,{htmlFor:`agent-prefs-locale`,children:`Locale`}),(0,Y.jsx)(B,{id:`agent-prefs-locale`,placeholder:`en-GB`,maxLength:35,value:n.locale??``,onChange:e=>u({locale:e.target.value})})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(O,{htmlFor:`agent-prefs-time-zone`,children:`Time zone`}),(0,Y.jsx)(B,{id:`agent-prefs-time-zone`,placeholder:`Europe/Stockholm`,maxLength:64,value:n.timeZone??``,onChange:e=>u({timeZone:e.target.value})})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(O,{children:`Date format`}),(0,Y.jsxs)(N,{value:n.dateFormat??St,onValueChange:e=>u({dateFormat:e===St?void 0:e}),children:[(0,Y.jsx)(A,{className:`w-full`,"aria-label":`Date format`,children:(0,Y.jsx)(k,{})}),(0,Y.jsxs)(j,{children:[(0,Y.jsx)(M,{value:St,children:`Not set`}),(0,Y.jsx)(M,{value:`iso`,children:`ISO (2026-11-07)`}),(0,Y.jsx)(M,{value:`locale`,children:`My locale`})]})]})]})]})}),o&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2 text-xs text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-3.5`}),(0,Y.jsx)(`span`,{children:o})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Y.jsxs)(R,{size:`sm`,onClick:()=>void f(),disabled:i||d||!e.writable,children:[(0,Y.jsx)(L,{className:`size-4`}),i?`Saving…`:`Save preferences`]}),d&&(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Describe your custom style first.`}),c&&(0,Y.jsx)(`span`,{role:`status`,className:`text-xs text-muted-foreground`,children:`Saved`})]})]})})}var Et={decisions:{label:`Decisions`,important:`Important: only time-critical ones.`},actions:{label:`Actions`,important:`Important: only time-critical ones.`},escalations:{label:`Escalations`,important:`Important: stuck, blocked or failed agents, not passing heads-ups.`},finalReports:{label:`Final reports`,important:`Important: only replies that wait on your answer.`},failures:{label:`Failures`,important:`Important: errors and messages that gave up, not retries.`}};function Dt({setting:e,onSaved:t}){let[n,r]=(0,J.useState)(e.value),[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)(``),[c,l]=(0,J.useState)(!1);async function u(){a(!0),s(``);try{let e=await y(`PUT`,`/settings/notification-prefs/default`,{value:n,updatedBy:`dashboard`});r(e.value),l(!0),t(e)}catch(e){s(e.message)}finally{a(!1)}}return(0,Y.jsx)(q,{size:`sm`,"data-testid":`notification-prefs`,children:(0,Y.jsxs)(G,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-sm font-semibold`,children:`What notifies you`}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Which events notify you in the dashboard. Other people keep their own settings.`})]}),(0,Y.jsx)(`div`,{className:`divide-y divide-border`,children:m.map(e=>(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2 py-2 first:pt-0 last:pb-0`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:Et[e].label}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:Et[e].important})]}),(0,Y.jsxs)(N,{value:n[e],onValueChange:t=>{r(n=>({...n,[e]:t})),l(!1)},children:[(0,Y.jsx)(A,{className:`w-full sm:w-40`,"aria-label":Et[e].label,children:(0,Y.jsx)(k,{})}),(0,Y.jsxs)(j,{children:[(0,Y.jsx)(M,{value:`all`,children:`All`}),(0,Y.jsx)(M,{value:`important`,children:`Important only`}),(0,Y.jsx)(M,{value:`none`,children:`None`})]})]})]},e))}),o&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2 text-xs text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-3.5`}),(0,Y.jsx)(`span`,{children:o})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Y.jsxs)(R,{size:`sm`,onClick:()=>void u(),disabled:i||!e.writable,children:[(0,Y.jsx)(L,{className:`size-4`}),i?`Saving…`:`Save notifications`]}),c&&(0,Y.jsx)(`span`,{role:`status`,className:`text-xs text-muted-foreground`,children:`Saved`})]})]})})}function Ot(){let[e,t]=(0,J.useState)([]),[n,r]=(0,J.useState)(``),[i,a]=(0,J.useState)(!1);async function o(){try{t(await y(`GET`,`/users/authority-denials`)),r(``),a(!0)}catch(e){r(e.message)}}return(0,Y.jsxs)(`section`,{className:`space-y-2`,"aria-label":`Authority denials`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsx)(`h3`,{className:`text-sm font-semibold`,children:`Authority denials`}),(0,Y.jsx)(R,{size:`sm`,variant:`outline`,onClick:()=>void o(),children:i?`Refresh denials`:`Load denials`})]}),n&&(0,Y.jsx)(`p`,{role:`alert`,children:n}),i&&e.length===0&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No authority denials recorded.`}),(0,Y.jsx)(`ul`,{className:`max-h-80 space-y-2 overflow-auto text-xs`,children:e.map(e=>{let{actor:t,target:n,action:r,reason:i}=e.metadata;return(0,Y.jsxs)(`li`,{className:`rounded border border-border p-2 break-words`,children:[(0,Y.jsx)(`time`,{children:new Date(e.createdAt).toLocaleString()}),(0,Y.jsxs)(`div`,{children:[t.kind,`: `,t.id,` · `,r,` · `,n]}),(0,Y.jsx)(`p`,{children:i})]},e.id)})})]})}function kt(){let e=s(e=>e.sessionUser===null),t=s(e=>e.signIn),[n,r]=(0,J.useState)(null),[i,a]=(0,J.useState)(``),[o,c]=(0,J.useState)(``),[l,u]=(0,J.useState)(!1),[d,f]=(0,J.useState)(!1),[p,m]=(0,J.useState)(``);if((0,J.useEffect)(()=>{if(!e)return;let t=!0;return y(`GET`,`/users/me`).then(e=>{t&&r(e)}).catch(()=>void 0),()=>{t=!1}},[e]),!e||!n||n.hasPassword&&!l)return null;async function h(e){f(!0),m(``);try{await e()}catch(e){m(e.message)}finally{f(!1)}}function g(e){e.preventDefault(),h(async()=>{if(i!==o)throw Error(`The passwords do not match.`);await y(`PUT`,`/users/me/password`,{password:i}),u(!0)})}return(0,Y.jsx)(q,{size:`sm`,"data-testid":`set-password`,children:(0,Y.jsxs)(G,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(be,{className:`mt-0.5 size-4 text-muted-foreground`}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-sm font-semibold`,children:l?`Password set`:`Set your password`}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l?(0,Y.jsxs)(Y.Fragment,{children:[`You can now sign in as `,(0,Y.jsx)(`span`,{className:`font-mono`,children:n.handle}),` with your password. Signing in replaces the admin token in this browser.`]}):(0,Y.jsxs)(Y.Fragment,{children:[`You are using the admin token. Set a password to sign in as `,(0,Y.jsx)(`span`,{className:`font-mono`,children:n.handle}),` instead.`]})})]})]}),l?(0,Y.jsx)(R,{size:`sm`,disabled:d,onClick:()=>void h(()=>t(n.handle,i)),children:`Sign in with password`}):(0,Y.jsxs)(`form`,{className:`flex flex-wrap items-end gap-2`,onSubmit:g,children:[(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(O,{htmlFor:`admin-password`,children:`New password`}),(0,Y.jsx)(B,{id:`admin-password`,type:`password`,autoComplete:`new-password`,className:`w-48`,value:i,onChange:e=>a(e.target.value),required:!0,minLength:10})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(O,{htmlFor:`admin-password-confirm`,children:`Repeat password`}),(0,Y.jsx)(B,{id:`admin-password-confirm`,type:`password`,autoComplete:`new-password`,className:`w-48`,value:o,onChange:e=>c(e.target.value),required:!0})]}),(0,Y.jsx)(R,{type:`submit`,size:`sm`,disabled:d,children:`Set password`})]}),p&&(0,Y.jsx)(`p`,{role:`alert`,className:`text-xs text-destructive`,children:p})]})})}var At={admin:`Admin`,operator:`Member`,viewer:`Viewer`},jt=Object.keys(At);function Mt({value:e,onChange:t,label:n,disabled:r}){return(0,Y.jsxs)(N,{value:e,onValueChange:e=>t(e),disabled:r,children:[(0,Y.jsx)(A,{className:`w-32`,"aria-label":n,children:(0,Y.jsx)(k,{})}),(0,Y.jsx)(j,{children:jt.map(e=>(0,Y.jsx)(M,{value:e,children:At[e]},e))})]})}function Nt({onError:e}){let[t,n]=(0,J.useState)(`operator`),[r,i]=(0,J.useState)(``),[a,o]=(0,J.useState)(!1),[s,c]=(0,J.useState)(null);async function l(){o(!0),e(``);try{let e=await y(`POST`,`/users/invites`,{role:t,...r.trim()?{displayName:r.trim()}:{}});c({link:new URL(e.path.replace(/^\//,``),v()).href,expiresAt:e.invite.expiresAt}),i(``)}catch(t){e(t.message)}finally{o(!1)}}return(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-end gap-2`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(O,{htmlFor:`invite-name`,children:`Name`}),(0,Y.jsx)(B,{id:`invite-name`,className:`w-48`,placeholder:`Optional`,value:r,onChange:e=>i(e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(O,{children:`Role`}),(0,Y.jsx)(Mt,{value:t,onChange:n,label:`Invite role`})]}),(0,Y.jsxs)(R,{size:`sm`,onClick:()=>void l(),disabled:a,children:[(0,Y.jsx)(De,{className:`size-4`}),`Create invite link`]})]}),s&&(0,Y.jsxs)(`div`,{className:`rounded-md border border-border bg-muted/40 p-3 text-xs`,"data-testid":`invite-link`,children:[(0,Y.jsxs)(`p`,{className:`mb-2 text-muted-foreground`,children:[`Send this link yourself. It works once and expires on `,new Date(s.expiresAt).toLocaleDateString(),`.`]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`code`,{className:`min-w-0 flex-1 truncate font-mono`,children:s.link}),(0,Y.jsx)(ke,{value:s.link,label:`Copy invite link`,size:`xs`,variant:`outline`,showText:!0})]})]})]})}function Q(e){return e.displayName||e.handle}function Pt({from:e,users:t,onClose:n,onHandOver:r}){let[i,a]=(0,J.useState)(``),[o,s]=(0,J.useState)(!1),c=t.filter(t=>t.id!==e?.id&&t.status===`active`),l=c.find(e=>e.id===i);async function u(){if(!(!e||!l)){s(!0);try{await r(e,l)}finally{s(!1)}a(``)}}return(0,Y.jsx)(ee,{open:e!==null,onOpenChange:e=>{e||(a(``),n())},children:(0,Y.jsxs)(T,{className:`max-w-md`,children:[(0,Y.jsxs)(w,{children:[(0,Y.jsxs)(E,{className:`text-sm`,children:[`Hand over `,e?Q(e):``,`'s agents`]}),(0,Y.jsxs)(S,{children:[`Every agent `,e?Q(e):``,` owns moves to the person you pick. They become its principal and can restart or stop it.`]})]}),(0,Y.jsxs)(C,{children:[(0,Y.jsx)(O,{htmlFor:`handover-target`,className:`mb-1.5`,children:`New owner`}),(0,Y.jsxs)(N,{value:i,onValueChange:a,children:[(0,Y.jsx)(A,{id:`handover-target`,className:`w-full`,"aria-label":`New owner`,children:(0,Y.jsx)(k,{placeholder:`Pick a person`})}),(0,Y.jsx)(j,{children:c.map(e=>(0,Y.jsxs)(M,{value:e.id,children:[Q(e),` (`,e.handle,`)`]},e.id))})]})]}),(0,Y.jsx)(x,{children:(0,Y.jsx)(R,{size:`sm`,disabled:!l||o,onClick:()=>void u(),children:`Hand over`})})]})})}function Ft(){let e=s(e=>e.users),t=s(e=>e.agents),n=s(e=>e.fetchUsers),r=s(e=>e.fetchAgents),i=s(e=>e.sessionUser?.id??`default`),[a,o]=(0,J.useState)(``),[c,l]=(0,J.useState)(``),[u,d]=(0,J.useState)(``),[f,p]=(0,J.useState)(null),m=(0,J.useMemo)(()=>{let e=new Map;for(let n of t)n.principalUserId&&e.set(n.principalUserId,(e.get(n.principalUserId)??0)+1);return e},[t]);(0,J.useEffect)(()=>{n()},[n]);async function h(e,t){d(e.id),o(``),l(``);try{let e=await t();e&&l(e)}catch(e){o(e.message)}finally{d(``)}}let g=(e,t)=>h(e,async()=>{await y(`PATCH`,`/users/${encodeURIComponent(e.id)}`,t),await n()}),_=e=>h(e,async()=>{let{revoked:t}=await y(`DELETE`,`/users/${encodeURIComponent(e.id)}/sessions`);return`${Q(e)} is signed out everywhere (${t} ${t===1?`token`:`tokens`} revoked).`});return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(kt,{}),(0,Y.jsx)(q,{size:`sm`,"data-testid":`users-admin`,children:(0,Y.jsxs)(G,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-sm font-semibold`,children:`People`}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Invite people and manage their access. Changing a role or suspending someone signs them out.`})]}),(0,Y.jsx)(Nt,{onError:o}),a&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2 text-xs text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-3.5`}),(0,Y.jsx)(`span`,{children:a})]}),c&&(0,Y.jsx)(`p`,{role:`status`,className:`text-xs text-muted-foreground`,children:c}),(0,Y.jsx)(`ul`,{className:`divide-y divide-border rounded-md border border-border`,children:e.map(e=>{let t=e.id===i,n=e.status!==`active`,r=u===e.id,a=m.get(e.id)??0;return(0,Y.jsxs)(`li`,{className:`flex flex-wrap items-center gap-3 px-3 py-2`,"data-testid":`user-row-${e.handle}`,children:[(0,Y.jsx)(Ae,{user:e,distinct:!0,className:`size-7`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`truncate text-sm font-medium`,children:[Q(e),t&&(0,Y.jsx)(`span`,{className:`ml-1 text-xs text-muted-foreground`,children:`(you)`})]}),(0,Y.jsxs)(`div`,{className:`truncate text-xs text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`font-mono`,children:e.handle}),a>0&&(0,Y.jsxs)(`span`,{children:[` · `,a,` `,a===1?`agent`:`agents`]})]})]}),n&&(0,Y.jsx)(z,{variant:`outline`,className:`text-tone-warning-fg`,children:`Suspended`}),(0,Y.jsx)(Mt,{value:e.role,onChange:t=>void g(e,{role:t}),label:`Role for ${e.handle}`,disabled:t||r}),(0,Y.jsx)(R,{size:`sm`,variant:`outline`,disabled:t||r,onClick:()=>void g(e,{status:n?`active`:`suspended`}),children:n?`Reactivate`:`Suspend`}),(0,Y.jsxs)(ae,{children:[(0,Y.jsx)(ne,{asChild:!0,children:(0,Y.jsx)(R,{size:`sm`,variant:`ghost`,className:`px-2`,disabled:r,"aria-label":`More actions for ${e.handle}`,children:(0,Y.jsx)(D,{className:`size-4`})})}),(0,Y.jsxs)(te,{align:`end`,children:[(0,Y.jsx)(re,{disabled:t,onSelect:()=>void _(e),children:`Sign out everywhere`}),(0,Y.jsx)(re,{onSelect:()=>p(e),children:`Hand over agents…`})]})]})]},e.id)})}),(0,Y.jsx)(Ot,{})]})}),(0,Y.jsx)(Pt,{from:f,users:e,onClose:()=>p(null),onHandOver:(e,t)=>h(e,async()=>{let{agentIds:n}=await y(`POST`,`/users/${encodeURIComponent(e.id)}/handover`,{toUserId:t.id});return p(null),await r(),`${n.length} ${n.length===1?`agent`:`agents`} moved from ${Q(e)} to ${Q(t)}.`})})]})}var It=5,Lt=15;function Rt(e){return Math.round(e/6e4)}function zt(e){return`${Rt(e)} min`}function Bt({canWrite:e}){let[t,n]=(0,J.useState)(null),[r,i]=(0,J.useState)(``),[a,o]=(0,J.useState)(``),[c,d]=(0,J.useState)(null);(0,J.useEffect)(()=>{let e=!1;return(async()=>{try{let t=await y(`GET`,`/providers/quota-config?stored=1`);e||n(t)}catch(t){e||i(t.message)}})(),()=>{e=!0}},[]);async function f(e,t){n(n=>({...n??{},[e]:t})),o(``),d(e);try{let r=await y(`PUT`,`/providers/${e}/quota-config`,t);n(t=>({...t??{},[e]:r}))}catch(t){o(`${u(e)}: ${t.message}`)}finally{d(null)}}let p=t?Object.keys(t).sort():[],m=s(e=>e.providerCatalog);return(0,Y.jsxs)(`section`,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-base font-semibold`,children:`Quota`}),(0,Y.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Per-provider quota collection and display. `,(0,Y.jsx)(`strong`,{children:`Enabled`}),` governs collection (disabled stops polling — no API calls);`,(0,Y.jsx)(`strong`,{children:` Show in widget`}),` governs display only.`]})]}),r&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-4`}),(0,Y.jsx)(`span`,{children:r})]}),a&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-4`}),(0,Y.jsx)(`span`,{children:a})]}),!t&&!r&&(0,Y.jsx)(q,{size:`sm`,children:(0,Y.jsxs)(G,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,Y.jsx)(I,{className:`size-4 animate-spin`}),`Loading quota config…`]})}),p.map(r=>{let i=t[r],a=!e||c===r;return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsxs)(K,{className:`flex items-center gap-2 text-sm`,children:[(0,Y.jsx)(ye,{className:`size-4`}),u(r),c===r&&(0,Y.jsx)(I,{className:`size-3 animate-spin text-muted-foreground`})]}),(0,Y.jsxs)(H,{className:`text-xs`,children:[i.enabled?`Polled every ${zt(i.pollIntervalMs)}`:`Collection disabled`,i.enabled&&!i.showInWidget?` · hidden from widget`:``,m.find(e=>e.provider===r)?.disabled?` · provider disabled: not polled or shown`:``]})]}),(0,Y.jsxs)(G,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`Enabled`}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Collect quota for this provider. Off stops all polling (no API calls, no token spend).`})]}),(0,Y.jsx)(P,{checked:i.enabled,disabled:a,onCheckedChange:e=>void f(r,{...i,enabled:e})})]}),(0,Y.jsxs)(`div`,{className:`rounded-md border bg-muted/20 p-3 space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`Polling interval`}),(0,Y.jsx)(z,{variant:`outline`,className:`tabular-nums`,children:zt(i.pollIntervalMs)})]}),(0,Y.jsx)(`input`,{type:`range`,min:It,max:Lt,step:1,value:Rt(i.pollIntervalMs),disabled:a||!i.enabled,onChange:e=>{let t=Number(e.target.value)*6e4;n(e=>({...e??{},[r]:{...i,pollIntervalMs:t}}))},onPointerUp:e=>void f(r,{...i,pollIntervalMs:Number(e.target.value)*6e4}),onKeyUp:e=>void f(r,{...i,pollIntervalMs:Number(e.target.value)*6e4}),className:`w-full accent-primary disabled:opacity-50`}),(0,Y.jsxs)(`div`,{className:`flex justify-between text-[10px] text-muted-foreground`,children:[(0,Y.jsxs)(`span`,{children:[It,` min`]}),(0,Y.jsxs)(`span`,{children:[Lt,` min`]})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`Show in quota widget`}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Display only. Off hides this provider from the dashboard widget; collection continues if enabled.`})]}),(0,Y.jsx)(P,{checked:i.showInWidget,disabled:a,onCheckedChange:e=>void f(r,{...i,showInWidget:e})})]}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`Burn-rate sparkline`}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Show a mini utilization chart per window in the expanded widget.`})]}),(0,Y.jsx)(P,{checked:i.sparklineEnabled??!0,disabled:a,onCheckedChange:e=>void f(r,{...i,sparklineEnabled:e})})]}),(0,Y.jsxs)(`div`,{className:`rounded-md border bg-muted/20 p-3 space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`Sparkline range`}),(0,Y.jsxs)(z,{variant:`outline`,className:`tabular-nums`,children:[i.sparklineRangeHours??8,`h`]})]}),(0,Y.jsx)(`input`,{type:`range`,min:1,max:8,step:1,value:i.sparklineRangeHours??8,disabled:a||!(i.sparklineEnabled??!0),onChange:e=>{let t=Number(e.target.value);n(e=>({...e??{},[r]:{...i,sparklineRangeHours:t}}))},onPointerUp:e=>void f(r,{...i,sparklineRangeHours:Number(e.target.value)}),onKeyUp:e=>void f(r,{...i,sparklineRangeHours:Number(e.target.value)}),className:`w-full accent-primary disabled:opacity-50`}),(0,Y.jsxs)(`div`,{className:`flex justify-between text-[10px] text-muted-foreground`,children:[(0,Y.jsx)(`span`,{children:`1h`}),(0,Y.jsx)(`span`,{children:`8h`})]})]}),l(r)&&(0,Y.jsxs)(`div`,{className:`rounded-md border bg-muted/20 p-3 space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`Auto-fire banked reset`}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Automatically consume a scarce banked reset when 7d usage nears exhaustion. Off by default.`})]}),(0,Y.jsx)(P,{checked:i.autoFireResetEnabled??!1,disabled:a,onCheckedChange:e=>void f(r,{...i,autoFireResetEnabled:e})})]}),(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`Trigger threshold`}),(0,Y.jsxs)(z,{variant:`outline`,className:`tabular-nums`,children:[Math.round((i.autoFireResetThreshold??.99)*100),`%`]})]}),(0,Y.jsx)(`input`,{type:`range`,min:90,max:100,step:1,value:Math.round((i.autoFireResetThreshold??.99)*100),disabled:a||!(i.autoFireResetEnabled??!1),onChange:e=>{let t=Number(e.target.value)/100;n(e=>({...e??{},[r]:{...i,autoFireResetThreshold:t}}))},onPointerUp:e=>void f(r,{...i,autoFireResetThreshold:Number(e.target.value)/100}),onKeyUp:e=>void f(r,{...i,autoFireResetThreshold:Number(e.target.value)/100}),className:`w-full accent-primary disabled:opacity-50`}),(0,Y.jsxs)(`div`,{className:`flex justify-between text-[10px] text-muted-foreground`,children:[(0,Y.jsx)(`span`,{children:`90%`}),(0,Y.jsx)(`span`,{children:`100%`})]})]})]})]})]},r)})]})}function Vt(e,t){return y(`PUT`,`/routing-policy`,e,{headers:{"If-Match":`"${t}"`}})}function Ht({message:e}){return(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-4 shrink-0`}),(0,Y.jsx)(`span`,{children:e})]})}var Ut=f(),Wt={cautionAt:.15,avoidLargeAt:.5,hardAvoidAt:1},Gt=3,Kt=.99,qt=.5;function Jt(e,t){return((e??t)*100).toFixed(0)}function Yt(e){let t=e.trim();if(!t)return null;let n=Number(t);return!Number.isFinite(n)||n<0||n>100?null:n/100}function Xt(e){return String(Number(e.toFixed(2)))}function Zt(e,t){return String(e??t)}function Qt(e){let t=e.trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)&&n>=0?n:null}function $t(e,t){return e.trim()?Yt(e):t}function en({policy:e,revision:t,canWrite:n,onPolicy:r}){let i=e.quotaBands,a=e.providerQuota??{},[o,s]=(0,J.useState)(Zt(i?.cautionAt,Wt.cautionAt)),[c,l]=(0,J.useState)(Zt(i?.avoidLargeAt,Wt.avoidLargeAt)),[d,f]=(0,J.useState)(Zt(i?.hardAvoidAt,Wt.hardAvoidAt)),[p,m]=(0,J.useState)(()=>{let e={};for(let t of Ut){let n=a[t]??{};e[t]={backstop:Jt(n.hardBackstopUtilization,Kt),floor:Jt(n.burnPenaltyUtilizationFloor,qt)}}return e}),[h,g]=(0,J.useState)(!1),[_,v]=(0,J.useState)(``),[y,b]=(0,J.useState)(!1),[x,S]=(0,J.useState)(``);async function C(){let n=Qt(o),i=Qt(c),a=Qt(d);if(n===null){S(`Caution cutoff must be a burn-penalty value of 0 or more.`);return}if(i===null){S(`Avoid-large cutoff must be a burn-penalty value of 0 or more.`);return}if(a===null){S(`Hard-avoid cutoff must be a burn-penalty value of 0 or more.`);return}if(n>=i){S(`Caution must be less than avoid-large.`);return}if(i>=a){S(`Avoid-large must be less than hard-avoid.`);return}let s={};for(let e of Ut){let t=p[e],n=$t(t.backstop,Kt),r=Yt(t.floor);if(n===null){S(`${u(e)}: hard-backstop must be 0–100%.`);return}if(r===null){S(`${u(e)}: burn-penalty floor must be 0–100%.`);return}s[e]={hardBackstopUtilization:n,burnPenaltyUtilizationFloor:r}}S(``),g(!0),v(``),b(!1);try{r(await Vt({...e,quotaBands:{cautionAt:n,avoidLargeAt:i,hardAvoidAt:a},providerQuota:s},t)),b(!0),setTimeout(()=>b(!1),2e3)}catch(e){v(e.message)}finally{g(!1)}}function w(e,t){m(n=>({...n,[e]:{...n[e],...t}})),S(``),b(!1)}function T(){S(``),b(!1)}return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsx)(K,{className:`text-sm`,children:`Quota thresholds`}),(0,Y.jsx)(H,{className:`text-xs`,children:`Band cutoffs act on the burn penalty (0–3): how early a provider would hit its limit at the current pace, times the window weight (3 for the 7-day window). They are not utilization percentages, so a band can fire well below the utilization shown. The hard backstop below is the real utilization gate.`})]}),(0,Y.jsxs)(G,{className:`space-y-4`,children:[(_||x)&&(0,Y.jsx)(Ht,{message:_||x}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`div`,{className:`mb-2 text-xs font-medium text-muted-foreground uppercase tracking-wide`,children:[`Band cutoffs (burn penalty, 0–`,Gt,`)`]}),(0,Y.jsx)(rn,{caution:Number(o),avoidLarge:Number(c),hardAvoid:Number(d)}),(0,Y.jsxs)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-3`,children:[(0,Y.jsx)(an,{label:`Caution at`,hint:`Default: ${Wt.cautionAt}`,value:o,disabled:!n||h,onChange:e=>{s(e),T()}}),(0,Y.jsx)(an,{label:`Avoid-large at`,hint:`Default: ${Wt.avoidLargeAt}`,value:c,disabled:!n||h,onChange:e=>{l(e),T()}}),(0,Y.jsx)(an,{label:`Hard-avoid at`,hint:`Default: ${Wt.hardAvoidAt}`,value:d,disabled:!n||h,onChange:e=>{f(e),T()}})]})]}),Ut.map(e=>{let t=p[e];return(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`div`,{className:`mb-2 text-xs font-medium text-muted-foreground uppercase tracking-wide`,children:[u(e),` overrides`]}),(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsx)(on,{label:`Hard-backstop utilization`,hint:`0 = disable backstop (never block on this quota); blank uses the ${(Kt*100).toFixed(0)}% default.`,value:t.backstop,disabled:!n||h,onChange:t=>w(e,{backstop:t})}),(0,Y.jsx)(on,{label:`Burn-penalty floor`,hint:`Penalties suppressed below this. Default: ${(qt*100).toFixed(0)}%`,value:t.floor,disabled:!n||h,onChange:t=>w(e,{floor:t})})]})]},e)}),n&&(0,Y.jsxs)(R,{size:`sm`,onClick:()=>void C(),disabled:h,children:[h?(0,Y.jsx)(I,{className:`size-4 animate-spin`}):(0,Y.jsx)(L,{className:`size-4`}),y?`Saved`:`Save thresholds`]})]})]})}var tn=.9;function nn({policy:e,revision:t,canWrite:n,onPolicy:r}){let[i,a]=(0,J.useState)(e.apiOverflow?.enabled??!1),[o,s]=(0,J.useState)(Jt(e.apiOverflow?.weeklyUtilizationAt,tn)),[c,l]=(0,J.useState)(!1),[u,d]=(0,J.useState)(``),[f,p]=(0,J.useState)(!1);async function m(){let n=$t(o,tn);if(n===null||n===0){d(`Weekly threshold must be 1–100%.`);return}l(!0),d(``),p(!1);try{r(await Vt({...e,apiOverflow:{enabled:i,weeklyUtilizationAt:n}},t)),p(!0),setTimeout(()=>p(!1),2e3)}catch(e){d(e.message)}finally{l(!1)}}return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsx)(K,{className:`text-sm`,children:`Claude API overflow`}),(0,Y.jsx)(H,{className:`text-xs`,children:`Spends API credits instead of waiting for the weekly reset. Applies only to unpinned Claude work when every Claude subscription is near its weekly limit, a ready host offers Claude API, and the monthly budget has room.`})]}),(0,Y.jsxs)(G,{className:`space-y-3`,children:[u&&(0,Y.jsx)(Ht,{message:u}),(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,Y.jsx)(P,{checked:i,disabled:!n||c,size:`sm`,"aria-label":`Enable Claude API overflow`,onCheckedChange:e=>{a(e),d(``),p(!1)}}),`Route to Claude API when subscriptions run low`]}),(0,Y.jsx)(`div`,{className:`max-w-xs`,children:(0,Y.jsx)(on,{label:`Weekly near-limit threshold`,hint:`Default: ${(tn*100).toFixed(0)}%`,value:o,disabled:!n||c,onChange:e=>{s(e),d(``),p(!1)}})}),n&&(0,Y.jsxs)(R,{size:`sm`,onClick:()=>void m(),disabled:c,children:[c?(0,Y.jsx)(I,{className:`size-4 animate-spin`}):(0,Y.jsx)(L,{className:`size-4`}),f?`Saved`:`Save overflow`]})]})]})}function rn({caution:e,avoidLarge:n,hardAvoid:r}){let i=e=>Math.max(0,Math.min(Gt,Number.isFinite(e)?e:0)),a=i(e),o=Math.max(a,i(n)),s=Math.max(o,i(r)),c=Xt,l=(e,t)=>`${(t-e)/Gt*100}%`,u=[{key:`normal`,label:`normal`,color:`bg-tone-success`,from:0,to:a,range:`0–${c(a)}`},{key:`caution`,label:`caution`,color:`bg-tone-warning`,from:a,to:o,range:`${c(a)}–${c(o)}`},{key:`avoid-large`,label:`avoid large`,color:`bg-tone-orange`,from:o,to:s,range:`${c(o)}–${c(s)}`},{key:`hard-avoid`,label:`hard avoid`,color:`bg-tone-danger`,from:s,to:Gt,range:`≥ ${c(s)}`}];return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(`div`,{className:`flex h-2.5 overflow-hidden rounded-full bg-muted`,role:`img`,"aria-label":`Quota burn-penalty bands from 0 to ${Gt}`,children:u.map(e=>(0,Y.jsx)(`div`,{className:t(e.color,`transition-[width] duration-300`),style:{width:l(e.from,e.to)},title:`${e.label} · penalty ${e.range}`},e.key))}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1 text-[10px] text-muted-foreground`,children:u.map(e=>(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:t(`size-2 shrink-0 rounded-full`,e.color)}),e.label,` `,(0,Y.jsx)(`span`,{className:`tabular-nums text-foreground/70`,children:e.range})]},e.key))})]})}function an({label:e,hint:t,value:n,disabled:r,onChange:i}){return(0,Y.jsxs)(`label`,{className:`space-y-1`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground`,children:e}),(0,Y.jsx)(B,{value:n,onChange:e=>i(e.target.value),disabled:r,inputMode:`decimal`,className:`h-8 text-xs tabular-nums`}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:t})]})}function on({label:e,hint:t,value:n,disabled:r,onChange:i}){return(0,Y.jsxs)(`label`,{className:`space-y-1`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground`,children:e}),(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(B,{value:n,onChange:e=>i(e.target.value),disabled:r,className:`h-8 pr-6 text-xs tabular-nums`}),(0,Y.jsx)(`span`,{className:`pointer-events-none absolute inset-y-0 right-2.5 flex items-center text-xs text-muted-foreground`,children:`%`})]}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:t})]})}function sn(){let[e,n]=(0,J.useState)(null),[r,i]=(0,J.useState)(!1),[a,o]=(0,J.useState)(``),[s,c]=(0,J.useState)(!1),[l,u]=(0,J.useState)(!1);async function d(e=!1){if(!(l&&!e)){i(!0),o(``);try{let[e,t]=await Promise.all([y(`GET`,`/routing-policy`),y(`GET`,`/agent-profiles/coordinator`).catch(()=>null)]);n({policy:e.policy,profile:t}),u(!0)}catch(e){o(e.message)}finally{i(!1)}}}let f=()=>d(!0);function p(){let e=!s;c(e),e&&!l&&d()}return(0,Y.jsx)(q,{size:`sm`,children:(0,Y.jsxs)(G,{className:`space-y-3`,children:[(0,Y.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-2 text-left`,onClick:p,children:[(0,Y.jsx)(ve,{className:`size-4 text-muted-foreground`}),(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-semibold`,children:`What your coordinator knows`}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Active routing policy + coordinator profile instructions (read-only)`})]}),s?(0,Y.jsx)(he,{className:`size-4 shrink-0 text-muted-foreground`}):(0,Y.jsx)(ge,{className:`size-4 shrink-0 text-muted-foreground`})]}),s&&(0,Y.jsxs)(`div`,{className:`space-y-4 pt-1`,children:[(0,Y.jsx)(`div`,{className:`flex justify-end`,children:(0,Y.jsxs)(R,{variant:`outline`,size:`sm`,onClick:()=>void f(),disabled:r,children:[(0,Y.jsx)(we,{className:t(`size-3.5`,r&&`animate-spin`)}),`Refresh`]})}),a&&(0,Y.jsx)(Ht,{message:a}),r&&!e&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground py-2`,children:[(0,Y.jsx)(I,{className:`size-3.5 animate-spin`}),`Loading…`]}),e&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(cn,{policy:e.policy}),e.profile?(0,Y.jsx)(un,{profile:e.profile}):(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic`,children:`Coordinator profile not found.`})]})]})]})})}function cn({policy:e}){let n=e.quotaBands,r=e.providerQuota??{};return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-semibold text-muted-foreground uppercase tracking-wide`,children:`Active routing policy`}),e.rules.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic`,children:`No routing preferences — dispatch policy and quota bands decide.`}):(0,Y.jsxs)(`div`,{className:`overflow-hidden rounded-md border border-border text-xs`,children:[(0,Y.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_minmax(0,1fr)] gap-px bg-border text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:[(0,Y.jsx)(`div`,{className:`bg-muted/40 px-2 py-1.5`,children:`Match`}),(0,Y.jsx)(`div`,{className:`bg-muted/40 px-2 py-1.5`,children:`Preference`}),(0,Y.jsx)(`div`,{className:`bg-muted/40 px-2 py-1.5`,children:`Status`})]}),e.rules.map(e=>(0,Y.jsxs)(`div`,{className:t(`grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_minmax(0,1fr)] gap-px bg-border`,e.enabled===!1&&`opacity-50`),children:[(0,Y.jsxs)(`div`,{className:`bg-card px-2 py-1.5`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:e.label??e.id}),(0,Y.jsx)(`div`,{className:`font-mono`,children:Object.entries(e.match).map(([e,t])=>`${e}=${Array.isArray(t)?t.join(`|`):t}`).join(`, `)||`all work`})]}),(0,Y.jsxs)(`div`,{className:`bg-card px-2 py-1.5`,children:[e.prefer?.length?(0,Y.jsxs)(`div`,{children:[`prefer `,e.prefer.join(`, `)]}):null,e.avoid?.length?(0,Y.jsxs)(`div`,{className:`text-muted-foreground`,children:[`avoid `,e.avoid.join(`, `)]}):null]}),(0,Y.jsx)(`div`,{className:`bg-card px-2 py-1.5`,children:e.enabled===!1?(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`disabled`}):(0,Y.jsx)(`span`,{className:`text-tone-success-fg`,children:`active`})})]},e.id))]}),(n||Object.keys(r).length>0)&&(0,Y.jsxs)(`div`,{className:`rounded-md border border-border bg-muted/10 px-3 py-2 text-xs space-y-1`,children:[n&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-0.5`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`burn penalty:`}),n.cautionAt!==void 0&&(0,Y.jsxs)(`span`,{children:[`caution ≥ `,Xt(n.cautionAt)]}),n.avoidLargeAt!==void 0&&(0,Y.jsxs)(`span`,{children:[`avoid-large ≥ `,Xt(n.avoidLargeAt)]}),n.hardAvoidAt!==void 0&&(0,Y.jsxs)(`span`,{children:[`hard-avoid ≥ `,Xt(n.hardAvoidAt)]})]}),Object.entries(r).map(([e,t])=>(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-0.5 text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-foreground`,children:u(e)}),t?.hardBackstopUtilization!==void 0&&(0,Y.jsxs)(`span`,{children:[`backstop: `,(t.hardBackstopUtilization*100).toFixed(0),`%`]}),t?.burnPenaltyUtilizationFloor!==void 0&&(0,Y.jsxs)(`span`,{children:[`floor: `,(t.burnPenaltyUtilizationFloor*100).toFixed(0),`%`]})]},e))]})]})}function ln({text:e,index:t}){return(0,Y.jsxs)(`div`,{className:`relative max-h-72 overflow-y-auto rounded-md border border-border bg-muted/20`,children:[t!==void 0&&(0,Y.jsxs)(`span`,{className:`sticky top-0 float-right m-1.5 rounded bg-muted px-1.5 py-0.5 text-[9px] font-medium tabular-nums text-muted-foreground`,children:[`#`,t]}),(0,Y.jsx)(`pre`,{className:`whitespace-pre-wrap break-words px-3 py-2.5 font-sans text-[11px] leading-relaxed text-foreground/90`,children:e})]})}function un({profile:e}){return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`text-xs font-semibold text-muted-foreground uppercase tracking-wide`,children:[`Coordinator profile instructions`,(0,Y.jsx)(z,{variant:`secondary`,className:`ml-2 text-[10px]`,children:e.name}),e.builtIn&&(0,Y.jsx)(z,{variant:`outline`,className:`ml-1 text-[10px]`,children:`built-in`})]}),e.description&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2 text-[10px]`,children:[(0,Y.jsxs)(z,{variant:`outline`,children:[`base: `,e.base]}),(0,Y.jsxs)(z,{variant:`outline`,children:[`repo: `,e.instructions.repoInstructions]}),(0,Y.jsxs)(z,{variant:`outline`,children:[`global: `,e.instructions.globalInstructions]}),e.provider&&(0,Y.jsxs)(z,{variant:`outline`,children:[`provider: `,e.provider]})]}),e.instructions.system&&(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:`System prompt`}),(0,Y.jsx)(ln,{text:e.instructions.system})]}),e.instructions.append.length>0&&(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:[`Appended instructions (`,e.instructions.append.length,`)`]}),e.instructions.append.map((e,t)=>(0,Y.jsx)(ln,{text:e,index:t+1},t))]}),e.instructions.append.length===0&&!e.instructions.system&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic`,children:`No instruction blocks defined.`})]})}function dn({policy:e,revision:t,canWrite:n,onPolicy:r}){let[i,a]=(0,J.useState)(e.apiExpiry?.enabled??!1),[o,s]=(0,J.useState)(e.subscriptionExpiry?.enabled??!1),[c,l]=(0,J.useState)(String((e.apiExpiry?.leadTimeMs??6048e5)/36e5)),[u,d]=(0,J.useState)(String((e.subscriptionExpiry?.leadTimeMs??1728e5)/36e5)),[f,p]=(0,J.useState)(!1),[m,h]=(0,J.useState)(``);async function g(){let n=Number(c),a=Number(u);if(!Number.isFinite(n)||n<=0||n>744||!Number.isFinite(a)||a<=0||a>168){h(`API lead must be 0–744 hours and subscription lead 0–168 hours, both greater than zero.`);return}p(!0),h(``);try{r(await Vt({...e,apiExpiry:{enabled:i,leadTimeMs:n*36e5},subscriptionExpiry:{enabled:o,leadTimeMs:a*36e5}},t)),h(`Saved`)}catch(e){h(e.message)}finally{p(!1)}}return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsx)(K,{className:`text-sm`,children:`Use expiring quota`}),(0,Y.jsx)(H,{className:`text-xs`,children:`Use subscription quota before its weekly reset. Pace unused API credits toward monthly expiry only when subscriptions cannot take the work. Pins and the hard dollar budget still win.`})]}),(0,Y.jsxs)(G,{className:`space-y-3`,children:[(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,Y.jsx)(P,{"aria-label":`Enable subscription expiry routing`,checked:o,disabled:!n||f,onCheckedChange:s}),`Prefer subscription quota approaching reset`]}),(0,Y.jsxs)(`label`,{className:`block text-xs`,children:[`Subscription lead (hours)`,(0,Y.jsx)(B,{"aria-label":`Subscription lead (hours)`,type:`number`,min:`0`,max:`168`,value:u,disabled:!n||f,onChange:e=>d(e.target.value)})]}),(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,Y.jsx)(P,{"aria-label":`Enable API credit expiry routing`,checked:i,disabled:!n||f,onCheckedChange:a}),`Spend unused monthly API credits gradually`]}),(0,Y.jsxs)(`label`,{className:`block text-xs`,children:[`API credit lead (hours)`,(0,Y.jsx)(B,{"aria-label":`API credit lead (hours)`,type:`number`,min:`0`,max:`744`,value:c,disabled:!n||f,onChange:e=>l(e.target.value)})]}),m&&(0,Y.jsx)(`p`,{role:`status`,className:`text-xs`,children:m}),n&&(0,Y.jsx)(R,{size:`sm`,disabled:f,onClick:()=>void g(),children:f?`Saving…`:`Save expiry routing`})]})]})}var fn=1e6,pn=e=>String(e/fn),mn=e=>new Date(e).toISOString().slice(0,16),hn=e=>new Date(e).toISOString().slice(0,10);function gn({canWrite:e,budgetId:t=`claude-api`}){let n=t===`openai-api`,r=n?`/api-budgets/${t}`:`/claude-api-budget`,i=n?`platform.openai.com`:`platform.claude.com`,[a,o]=(0,J.useState)(null),[s,c]=(0,J.useState)(!0),[l,u]=(0,J.useState)(n?`100`:`200`),[d,f]=(0,J.useState)(`0`),[p,m]=(0,J.useState)(``),[h,g]=(0,J.useState)(``),[_,v]=(0,J.useState)(!1),[b,x]=(0,J.useState)(``);function S(e){o(e),!(!e.baselineKnown||e.startsAt===void 0||e.endsAt===void 0)&&(c(e.enabled),u(pn(e.ceilingMicroUsd??200*fn)),f(pn(e.baselineMicroUsd??0)),m(n?mn(e.startsAt):hn(e.startsAt)),g(mn(e.endsAt)))}(0,J.useEffect)(()=>{let e=!0;return y(`GET`,`${r}/summary`).then(t=>{e&&S(t)}).catch(t=>{e&&x(t.message)}),()=>{e=!1}},[r]);async function C(){let e=Math.round(Number(l)*fn),t=Math.round(Number(d)*fn),i=Date.parse(n?`${p}:00Z`:`${p}T00:00:00Z`),o=Date.parse(`${h}:00Z`);if(!a||!Number.isFinite(e)||e<=0||!Number.isFinite(t)||t<0||!Number.isFinite(i)||!Number.isFinite(o)){x(`Enter an amount, spent so far, grant date and expiry.`);return}v(!0),x(``);try{S(await y(`POST`,r,{month:a.month,enabled:s,baselineMicroUsd:t,ceilingMicroUsd:e,grantedAt:i,endsAt:o,...a.marginMicroUsd===void 0?{}:{marginMicroUsd:a.marginMicroUsd},...a.allowanceMicroUsd===void 0?{}:{allowanceMicroUsd:a.allowanceMicroUsd}})),x(`Saved`)}catch(e){x(e.message)}finally{v(!1)}}let w=!e||_||!a;return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsx)(K,{className:`text-sm`,children:n?`OpenAI API credit grant`:`Claude API credit grant`}),(0,Y.jsxs)(H,{className:`text-xs`,children:[`The budget window and expiry pacing follow this grant, not the calendar month. Changing the grant date starts a fresh ledger with Already spent as its baseline. Copy the verified amount and expiry from `,i,`. Without a grant the window is the UTC calendar month. After expiry new input waits for a configured window. Active work drains.`]})]}),(0,Y.jsxs)(G,{className:`space-y-3`,children:[(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,Y.jsx)(P,{"aria-label":`Enable ${t} budget`,checked:s,disabled:w,onCheckedChange:c}),`Allow `,t,` spend within this grant`]}),(0,Y.jsxs)(`label`,{className:`block text-xs`,children:[`Grant amount (USD)`,(0,Y.jsx)(B,{"aria-label":`Grant amount (USD)`,type:`number`,min:`0`,step:`0.01`,value:l,disabled:w,onChange:e=>u(e.target.value)})]}),(0,Y.jsxs)(`label`,{className:`block text-xs`,children:[`Already spent (USD)`,(0,Y.jsx)(B,{"aria-label":`Already spent (USD)`,type:`number`,min:`0`,step:`0.01`,value:d,disabled:w,onChange:e=>f(e.target.value)})]}),(0,Y.jsxs)(`label`,{className:`block text-xs`,children:[n?`Granted (UTC)`:`Granted (UTC date)`,(0,Y.jsx)(B,{"aria-label":n?`Granted (UTC)`:`Granted (UTC date)`,type:n?`datetime-local`:`date`,value:p,disabled:w,onChange:e=>m(e.target.value)})]}),(0,Y.jsxs)(`label`,{className:`block text-xs`,children:[`Expires (UTC)`,(0,Y.jsx)(B,{"aria-label":`Expires (UTC)`,type:`datetime-local`,value:h,disabled:w,onChange:e=>g(e.target.value)})]}),b&&(0,Y.jsx)(`p`,{role:`status`,className:`text-xs`,children:b}),e&&(0,Y.jsx)(R,{size:`sm`,disabled:w,onClick:()=>void C(),children:_?`Saving…`:`Save credit grant`})]})]})}var _n=f(),$=`*`,vn=`keep`,yn=`Prefer this provider over quota bands until the expiry. Blocked, exhausted or unavailable providers are still excluded.`;function bn(){return{id:``,label:``,type:$,complexity:$,prefer:[],avoid:[],require:[],expires:``,enabled:!0}}function xn(e){return Array.isArray(e)?vn:e??$}var Sn=e=>String(e).padStart(2,`0`);function Cn(e){if(e===void 0)return``;let t=new Date(e);return`${t.getFullYear()}-${Sn(t.getMonth()+1)}-${Sn(t.getDate())}T${Sn(t.getHours())}:${Sn(t.getMinutes())}`}function wn(e){return{id:e.id,label:e.label??``,type:xn(e.match.type),complexity:xn(e.match.complexity),prefer:e.prefer??[],avoid:e.avoid??[],require:e.require??[],expires:Cn(e.expiresAt),enabled:e.enabled!==!1}}function Tn(e){return`${e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,60)||`rule`}-${Math.random().toString(36).slice(2,8)}`}function En(e,t){let n={...t?.match??{}};e.type!==vn&&(delete n.type,e.type!==$&&(n.type=e.type)),e.complexity!==vn&&(delete n.complexity,e.complexity!==$&&(n.complexity=e.complexity));let r=e.expires===Cn(t?.expiresAt)?t?.expiresAt:e.expires?new Date(e.expires).getTime():void 0;return{id:e.id||Tn(e.label),...e.label.trim()?{label:e.label.trim()}:{},match:n,...e.prefer.length?{prefer:e.prefer}:{},...e.avoid.length?{avoid:e.avoid}:{},...e.require.length?{require:e.require}:{},...r!==void 0&&Number.isFinite(r)?{expiresAt:r}:{},enabled:e.enabled}}var Dn={label:`Label`,type:`Work type`,complexity:`Complexity`,prefer:`Prefer`,avoid:`Avoid`,require:`Require`,expires:`Expiry`,enabled:`Enabled`},On=Object.keys(Dn),kn=(e,t)=>JSON.stringify(e)===JSON.stringify(t);function An(e,t,n,r={}){let i=wn(e),a=wn(t),o={...a},s=[];for(let e of On){let t=!kn(n[e],i[e]),c=!kn(a[e],i[e]);!t||kn(n[e],a[e])||(!c||r[e]===`mine`?o[e]=n[e]:r[e]!==`theirs`&&s.push({key:e,mine:n[e],theirs:a[e]}))}return{form:o,conflicts:s}}function jn(e){return!e.prefer.length&&!e.avoid.length&&!e.require.length?`Prefer, avoid or require at least one provider.`:e.expires&&!Number.isFinite(new Date(e.expires).getTime())?`Enter a valid expiry date and time.`:null}function Mn({message:e}){return(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-4 shrink-0`}),(0,Y.jsx)(`span`,{children:e})]})}function Nn({label:e,value:n,blocked:r=[],disabled:i,onChange:a}){return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground`,children:e}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:_n.map(e=>{let o=n.includes(e);return(0,Y.jsxs)(`button`,{type:`button`,"aria-pressed":o,disabled:r.includes(e),onClick:()=>a(o?n.filter(t=>t!==e):[...n,e]),className:t(`rounded border px-2 py-0.5 text-[11px] disabled:opacity-30`,o?`border-primary bg-primary/10 text-foreground`:`border-border text-muted-foreground hover:bg-accent`),children:[u(e),i.has(e)?` (disabled)`:``]},e)})})]})}function Pn(e){return Array.isArray(e)?(0,Y.jsxs)(M,{value:vn,className:`text-xs`,children:[e.join(` or `),` (unchanged)`]}):null}function Fn({form:e,original:t,error:n,disabledProviders:r,onChange:i,onSave:a,onCancel:o,isNew:s}){function c(t){i({...e,...t})}return(0,Y.jsxs)(`div`,{className:`space-y-3 rounded-md border border-primary/30 bg-primary/5 p-3`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:s?`New preference`:`Edit ${e.id}`}),(0,Y.jsxs)(`label`,{className:`block space-y-1`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground`,children:`Label (optional)`}),(0,Y.jsx)(B,{value:e.label,onChange:e=>c({label:e.target.value}),placeholder:`e.g. Prefer Codex for builds`,className:`h-8 text-xs`})]}),(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`label`,{className:`space-y-1`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground`,children:`Work type`}),(0,Y.jsxs)(N,{value:e.type,onValueChange:e=>c({type:e}),children:[(0,Y.jsx)(A,{className:`h-8 text-xs`,children:(0,Y.jsx)(k,{})}),(0,Y.jsxs)(j,{children:[Pn(t?.match.type),(0,Y.jsx)(M,{value:$,className:`text-xs`,children:`any`}),h.map(e=>(0,Y.jsx)(M,{value:e,className:`text-xs`,children:e},e))]})]})]}),(0,Y.jsxs)(`label`,{className:`space-y-1`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground`,children:`Complexity`}),(0,Y.jsxs)(N,{value:e.complexity,onValueChange:e=>c({complexity:e}),children:[(0,Y.jsx)(A,{className:`h-8 text-xs`,children:(0,Y.jsx)(k,{})}),(0,Y.jsxs)(j,{children:[Pn(t?.match.complexity),(0,Y.jsx)(M,{value:$,className:`text-xs`,children:`any`}),g.map(e=>(0,Y.jsx)(M,{value:e,className:`text-xs`,children:e},e))]})]})]})]}),(0,Y.jsx)(Nn,{label:`Prefer`,value:e.prefer,blocked:e.avoid,disabled:r,onChange:e=>c({prefer:e})}),(0,Y.jsx)(Nn,{label:`Avoid (ranks lower, never excludes)`,value:e.avoid,blocked:e.prefer,disabled:r,onChange:e=>c({avoid:e})}),(0,Y.jsx)(Nn,{label:`Require (only these providers may run matching work)`,value:e.require,disabled:r,onChange:e=>c({require:e})}),(0,Y.jsxs)(`label`,{className:`block space-y-1`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground`,children:`Use spare quota until…`}),(0,Y.jsx)(B,{type:`datetime-local`,"aria-label":`Use spare quota until…`,value:e.expires,onChange:e=>c({expires:e.target.value}),className:`h-8 text-xs`}),(0,Y.jsx)(`span`,{className:`block text-[10px] text-muted-foreground`,children:e.expires?yn:`Optional. Without an expiry the preference only ranks providers within a quota band.`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(P,{checked:e.enabled,onCheckedChange:e=>c({enabled:e})}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Enabled`})]}),n&&(0,Y.jsx)(Mn,{message:n}),(0,Y.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Y.jsxs)(R,{size:`sm`,onClick:a,children:[(0,Y.jsx)(L,{className:`size-4`}),s?`Add`:`Save`]}),(0,Y.jsx)(R,{size:`sm`,variant:`outline`,onClick:o,children:`Cancel`})]})]})}function In(e){let t=Object.entries(e.match).map(([e,t])=>`${e}=${Array.isArray(t)?t.join(`|`):t}`);return t.length?t.join(`, `):`all work`}function Ln(e){return e.status===412}function Rn(e,n,r){return(n??[]).map(n=>(0,Y.jsxs)(z,{variant:`outline`,className:t(`text-[10px]`,e===`avoid`?`text-tone-yellow-fg`:`text-tone-success-fg`),children:[e,` `,n,r.has(n)?` (disabled${r.get(n)?`: ${r.get(n)}`:``})`:``]},`${e}-${n}`))}function zn({policy:e,revision:n,diagnostics:r,providerCatalog:i=[],now:a=Date.now(),canWrite:o,onPolicy:s,onReload:c}){let[l,u]=(0,J.useState)(!1),[d,f]=(0,J.useState)(``),[p,m]=(0,J.useState)(null),[h,g]=(0,J.useState)(null),[_,v]=(0,J.useState)(``),y=p===n,b=new Map(i.filter(e=>e.disabled).map(e=>[e.provider,e.disabled?.reason??e.disabled?.source??``])),x=new Set(b.keys());async function S(t){u(!0),f(``);try{s(await Vt({...e,rules:t},n)),g(null),m(null)}catch(e){Ln(e)&&m(n),f(e.message)}finally{u(!1)}}async function C(){f(``),await c?.()}function w(e){g({id:e?.id??null,...e?{original:e}:{},form:e?wn(e):bn(),choices:{}}),v(``)}let T=h?.id==null?void 0:e.rules.find(e=>e.id===h.id),E=h?.original&&T?An(h.original,T,h.form,h.choices):null;function ee(){if(!h)return;let t=jn(E?.form??h.form);if(t){v(t);return}if(E?.conflicts.length){v(`Choose which value to keep for the fields another editor also changed.`);return}let n=En(E?.form??h.form,T??h.original);S(e.rules.some(e=>e.id===n.id)?e.rules.map(e=>e.id===n.id?n:e):[...e.rules,n])}let D=(r??e.migration)?.notes??[],te=e=>Array.isArray(e)?e.join(`, `)||`none`:String(e===``?`none`:e),ne=(e,t)=>h&&(0,Y.jsxs)(Y.Fragment,{children:[E&&E.conflicts.length>0&&(0,Y.jsxs)(`div`,{className:`space-y-2 rounded-md border border-tone-yellow/30 bg-tone-yellow/10 p-3 text-xs`,"data-testid":`routing-merge-conflicts`,children:[(0,Y.jsxs)(`div`,{className:`font-medium`,children:[`Another editor also changed `,h.id]}),E.conflicts.map(({key:e,mine:t,theirs:n})=>(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`w-24 text-muted-foreground`,children:Dn[e]}),(0,Y.jsxs)(R,{size:`sm`,variant:`outline`,onClick:()=>g({...h,choices:{...h.choices,[e]:`mine`}}),children:[`Keep mine: `,te(t)]}),(0,Y.jsxs)(R,{size:`sm`,variant:`outline`,onClick:()=>g({...h,choices:{...h.choices,[e]:`theirs`}}),children:[`Use theirs: `,te(n)]})]},e))]}),(0,Y.jsx)(Fn,{form:h.form,original:t,error:_,disabledProviders:x,isNew:e,onChange:e=>g({...h,form:e}),onSave:ee,onCancel:()=>{g(null),m(null)}},h.id??`new`)]});return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsxs)(K,{className:`flex items-center gap-2 text-sm`,children:[(0,Y.jsx)(Te,{className:`size-4`}),`Routing preferences`,(0,Y.jsxs)(z,{variant:`outline`,className:`ml-auto text-[10px]`,children:[e.rules.length,` rule`,e.rules.length===1?``:`s`]}),l&&(0,Y.jsx)(I,{className:`size-3 animate-spin text-muted-foreground`})]}),(0,Y.jsx)(H,{className:`text-xs`,children:`For matching work, prefer, avoid or require providers. Every matching enabled rule counts. The dispatcher still picks the provider, model and effort from the work shape and live quota: a preference ranks providers within a quota band, and disabled providers drop out on their own. Explicit spawn pins still win.`})]}),(0,Y.jsxs)(G,{className:`space-y-2`,children:[d&&!y&&(0,Y.jsx)(Mn,{message:d}),y&&(0,Y.jsxs)(`div`,{className:`space-y-2 rounded-md border border-tone-yellow/30 bg-tone-yellow/10 p-3 text-xs`,"data-testid":`routing-conflict-banner`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:`The routing policy changed elsewhere.`}),(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:h?`Your draft is kept. Reload the latest policy, then save to apply your draft on top of it.`:`Reload the latest policy and repeat your change.`}),(0,Y.jsx)(R,{size:`sm`,variant:`outline`,onClick:()=>void C(),children:`Reload latest`})]}),D.length>0&&(0,Y.jsxs)(`div`,{className:`space-y-1 rounded-md border border-tone-yellow/30 bg-tone-yellow/10 p-3 text-xs`,"data-testid":`routing-migration-banner`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium`,children:[(0,Y.jsx)(pe,{className:`size-3.5`}),`Converted from v1 routing rules`]}),(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`Converted rules start disabled. Model and effort now come from the work-shape dispatch policy.`}),(0,Y.jsx)(`ul`,{className:`list-disc space-y-0.5 pl-4 text-muted-foreground`,children:D.map(e=>(0,Y.jsx)(`li`,{children:e},e))})]}),e.rules.length===0&&!h&&(0,Y.jsx)(`div`,{className:`rounded-md border border-dashed border-border py-6 text-center text-xs text-muted-foreground`,children:`No preferences — the dispatch policy and quota bands decide alone.`}),e.rules.map(n=>{if(h?.id===n.id)return(0,Y.jsx)(J.Fragment,{children:ne(!1,n)},n.id);let r=n.expiresAt!==void 0&&n.expiresAt<=a,i=n.enabled!==!1&&!r&&!!n.prefer?.length&&n.prefer.every(e=>x.has(e));return(0,Y.jsxs)(`div`,{className:t(`group flex items-start gap-3 rounded-md border bg-muted/20 p-3`,(n.enabled===!1||r)&&`opacity-60`),children:[(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[n.label&&(0,Y.jsx)(`span`,{className:`text-xs font-medium`,children:n.label}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:n.id}),Rn(`prefer`,n.prefer,b),Rn(`avoid`,n.avoid,b),Rn(`require`,n.require,b),n.expiresAt!==void 0&&(0,Y.jsxs)(z,{variant:`outline`,className:t(`text-[10px]`,r?`text-tone-yellow-fg`:`text-tone-success-fg`),children:[r?`expired`:`until`,` `,new Date(n.expiresAt).toLocaleString()]}),i&&(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px] text-tone-yellow-fg`,children:`dormant: preferred providers are disabled`})]}),(0,Y.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[`match: `,(0,Y.jsx)(`span`,{className:`font-mono text-foreground`,children:In(n)})]})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,Y.jsx)(P,{checked:n.enabled!==!1,disabled:!o||l,onCheckedChange:t=>void S(e.rules.map(e=>e.id===n.id?{...e,enabled:t}:e)),title:n.enabled===!1?`Enable rule`:`Disable rule`}),o&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`button`,{type:`button`,title:`Edit`,onClick:()=>w(n),disabled:l,className:`rounded p-1 text-muted-foreground hover:bg-accent hover:text-foreground disabled:pointer-events-none`,children:(0,Y.jsx)(xe,{className:`size-3.5`})}),(0,Y.jsx)(`button`,{type:`button`,title:`Remove`,onClick:()=>void S(e.rules.filter(e=>e.id!==n.id)),disabled:l,className:`rounded p-1 text-destructive hover:bg-destructive/10 disabled:pointer-events-none`,children:(0,Y.jsx)(Ee,{className:`size-3.5`})})]})]})]},n.id)}),h&&h.id!==null&&!e.rules.some(e=>e.id===h.id)&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[h.id,` was removed in the latest policy. Saving adds it back.`]}),ne(!1,h.original)]}),h?.id===null&&ne(!0),o&&!h&&(0,Y.jsxs)(R,{variant:`outline`,size:`sm`,className:`w-full gap-1`,onClick:()=>w(),disabled:l,children:[(0,Y.jsx)(Se,{className:`size-4`}),`Add preference`]})]})]})}var Bn=[`provider`,`model`,`effort`,`orchestratorId`,`profile`],Vn=e=>e===`orchestratorId`?`Host`:e[0].toUpperCase()+e.slice(1),Hn=`h-8 w-full rounded-md border bg-background px-2 text-xs`;function Un({policy:e,revision:t,teams:n,canWrite:r,onPolicy:i}){let[a,o]=(0,J.useState)(e.stepDefaults??{}),[s,c]=(0,J.useState)(`global`),[l,d]=(0,J.useState)(``),[p,m]=(0,J.useState)(``),[h,g]=(0,J.useState)(!1),_=(s===`global`?a.global:a.teams?.[s])??{},v=[...new Set([`builder`,`reviewer`,...Object.keys(_),...Object.keys(a.global??{})])],y=[...new Set([...n.map(e=>e.id),...Object.keys(a.teams??{})])];function b(e){o(s===`global`?{...a,global:e}:{...a,teams:{...a.teams,[s]:e}}),m(``)}function x(e,t,n){let r={..._[e],[t]:n||void 0};t===`provider`&&n!==_[e]?.provider&&(r.model=void 0,r.effort=void 0),b({..._,[e]:r})}async function S(){g(!0),m(``);try{let n=await Vt({...e,stepDefaults:a},t);o(n.policy.stepDefaults??{}),i(n),m(`Saved`)}catch(e){m(e.message)}finally{g(!1)}}return(0,Y.jsxs)(q,{size:`sm`,children:[(0,Y.jsxs)(W,{children:[(0,Y.jsx)(K,{className:`text-sm`,children:`Workflow role defaults`}),(0,Y.jsx)(H,{className:`text-xs`,children:`Call pins override team defaults, then global defaults, workflow and role definitions, then automatic dispatch. Blank fields inherit. Changes apply to new runs.`})]}),(0,Y.jsxs)(G,{className:`space-y-3`,children:[(0,Y.jsxs)(`label`,{className:`block text-xs`,children:[`Scope`,(0,Y.jsxs)(`select`,{"aria-label":`Routing defaults scope`,className:Hn,value:s,onChange:e=>c(e.target.value),children:[(0,Y.jsx)(`option`,{value:`global`,children:`Global`}),y.map(e=>(0,Y.jsx)(`option`,{value:e,children:n.find(t=>t.id===e)?.title??e},e))]})]}),(0,Y.jsx)(`div`,{className:`overflow-x-auto`,children:(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`text-left`,children:`Role`}),Bn.map(e=>(0,Y.jsx)(`th`,{className:`min-w-28 text-left`,children:Vn(e)},e))]})}),(0,Y.jsx)(`tbody`,{children:v.map(e=>(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`pr-2 text-left font-medium`,children:e}),Bn.map(t=>(0,Y.jsx)(`td`,{className:`p-1`,children:t===`provider`?(0,Y.jsxs)(`select`,{"aria-label":`${e} Provider`,className:Hn,disabled:!r||h,value:_[e]?.provider??``,onChange:n=>x(e,t,n.target.value),children:[(0,Y.jsx)(`option`,{value:``,children:`Inherit`}),f().map(e=>(0,Y.jsx)(`option`,{value:e,children:u(e)},e))]}):(0,Y.jsx)(B,{"aria-label":`${e} ${Vn(t)}`,className:`h-8 text-xs`,value:_[e]?.[t]??``,placeholder:s===`global`?`Inherit`:a.global?.[e]?.[t]??`Inherit`,disabled:!r||h,onChange:n=>x(e,t,n.target.value)})},t))]},e))})]})}),r&&(0,Y.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Y.jsx)(B,{"aria-label":`New routing role`,placeholder:`Project role`,value:l,disabled:h,onChange:e=>d(e.target.value)}),(0,Y.jsx)(R,{size:`sm`,variant:`outline`,disabled:h||!/^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(l)||v.includes(l),onClick:()=>{b({..._,[l]:{}}),d(``)},children:`Add role`}),(0,Y.jsx)(R,{size:`sm`,disabled:h,onClick:()=>void S(),children:h?`Saving…`:`Save role defaults`})]}),p&&(0,Y.jsx)(`p`,{role:`status`,className:`text-xs`,children:p})]})]})}function Wn({message:e}){return(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-4 shrink-0`}),(0,Y.jsx)(`span`,{children:e})]})}function Gn({canWrite:e,canWriteBudget:n=!1}){let[r,a]=(0,J.useState)(null),o=r?.policy,c=s(e=>e.providerCatalog),l=s(e=>e.teams),u=i(6e4),[d,f]=(0,J.useState)(!1),[p,m]=(0,J.useState)(``),[h,g]=(0,J.useState)(!1),[_,v]=(0,J.useState)(0);!h&&!d&&!p&&(f(!0),(async()=>{try{let e=await y(`GET`,`/routing-policy`);a(e),g(!0)}catch(e){m(e.message)}finally{f(!1)}})());async function b(){f(!0),m(``);try{let e=await y(`GET`,`/routing-policy`);a(e),v(e=>e+1),g(!0)}catch(e){m(e.message)}finally{f(!1)}}return(0,Y.jsxs)(`div`,{className:`space-y-6`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-base font-semibold`,children:`Routing`}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Routing preferences steer automatic spawns, Task dispatch and workflow steps; the dispatch policy picks model and effort. Explicit per-spawn pins always take precedence.`})]}),(0,Y.jsxs)(R,{variant:`outline`,size:`sm`,onClick:()=>void b(),disabled:d,children:[(0,Y.jsx)(we,{className:t(`size-4`,d&&`animate-spin`)}),`Refresh`]})]}),p&&(0,Y.jsx)(Wn,{message:p}),d&&!o&&(0,Y.jsx)(q,{size:`sm`,children:(0,Y.jsxs)(G,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,Y.jsx)(I,{className:`size-4 animate-spin`}),`Loading routing policy…`]})}),o&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Un,{policy:o,revision:r.revision,teams:l,canWrite:e,onPolicy:a},_),(0,Y.jsx)(zn,{policy:o,revision:r.revision,diagnostics:r.diagnostics,providerCatalog:c,now:u,canWrite:e,onPolicy:a,onReload:b}),(0,Y.jsx)(en,{policy:o,revision:r.revision,canWrite:e,onPolicy:a}),(0,Y.jsx)(nn,{policy:o,revision:r.revision,canWrite:e,onPolicy:a}),(0,Y.jsx)(dn,{policy:o,revision:r.revision,canWrite:e,onPolicy:a},JSON.stringify([o.apiExpiry,o.subscriptionExpiry])),(0,Y.jsx)(gn,{canWrite:n}),(0,Y.jsx)(gn,{canWrite:n,budgetId:`openai-api`})]}),(0,Y.jsx)(sn,{})]})}var Kn=`browser`,qn=`models`,Jn=`profile`,Yn=`routing`,Xn=[`branch.landed`,`landed-failure`,`agent.ready`,`agent.exited`,`agent.spawn_failed`,`agent.context_threshold`,`agent.quota_threshold`,`workspace.steward_task`,`workspace.conflict`,`workspace.review_request`];function Zn(){if(typeof window>`u`)return``;let e=window.location.hash.replace(/^#/,``);return e.startsWith(`settings/`)?decodeURIComponent(e.slice(9)):``}function Qn(e){if(typeof window>`u`)return;let t=new URL(window.location.href);t.hash=`settings/${encodeURIComponent(e)}`,window.history.pushState({},``,t)}function $n(){let[e,n]=(0,J.useState)([]),[r,i]=(0,J.useState)(null),[a,o]=(0,J.useState)([]),c=s(e=>e.set),l=s(e=>e.teams),u=s(e=>e.fetchTeams),[d,f]=(0,J.useState)(()=>Zn()),[p,m]=(0,J.useState)(!0),[h,g]=(0,J.useState)(``),[_,v]=(0,J.useState)(``);async function b(){m(!0),g(``),v(``);try{let[e,t,r]=await Promise.all([y(`GET`,`/settings`),y(`GET`,`/tokens/me`),y(`GET`,`/providers`).catch(e=>(v(e.message),{catalog:[]})),u()]);n(e.settings),i(t),o(r.catalog)}catch(e){g(e.message)}finally{m(!1)}}(0,J.useEffect)(()=>{b()},[]),(0,J.useEffect)(()=>{let e=()=>f(Zn());return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[]);let x=(0,J.useMemo)(()=>Re(e),[e]),S=(0,J.useMemo)(()=>[...x.map(e=>({slug:e.slug,label:e.group,description:`${e.settings.length} schema setting${e.settings.length===1?``:`s`}`,kind:`descriptors`,settings:e.settings})),{slug:`service-access`,label:`Service access`,description:`Profile services and Vault application`,kind:`service-access`,settings:[]},{slug:Yn,label:`Routing`,description:`Rules, quota thresholds, coordinator view`,kind:`routing`,settings:[]},{slug:Jn,label:`Profile`,description:`Display name and avatar`,kind:`profile`,settings:[]},{slug:Kn,label:`Browser`,description:`Local dashboard preferences`,kind:`browser`,settings:[]},{slug:qn,label:`Models`,description:`Provider model catalog`,kind:`models`,settings:[]}],[x]),C=S.find(e=>e.slug===d)??S[0];function w(e){f(e),Qn(e)}function T(e){n(t=>t.map(t=>Fe(t)===Fe(e)?e:t))}let E=C?.kind===`descriptors`?C.settings.find(e=>e.namespace===`idle-digest`&&e.key==="default"):void 0,ee=C?.kind===`descriptors`?C.settings.find(e=>e.namespace===`agent-prefs`&&e.key==="default"):void 0,D=C?.kind===`descriptors`?C.settings.find(e=>e.namespace===`notification-prefs`&&e.key==="default"):void 0,te=C?.kind===`descriptors`?C.settings.filter(e=>e!==E&&e!==ee&&e!==D):[];return(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Settings`}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Schema-driven Relay settings, browser preferences, and model catalog controls.`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[r&&(0,Y.jsxs)(z,{variant:`outline`,className:`gap-1`,children:[(0,Y.jsx)(le,{className:`size-3`}),r.kind,`:`,r.actor]}),(0,Y.jsxs)(R,{variant:`outline`,size:`sm`,onClick:()=>void b(),disabled:p,children:[(0,Y.jsx)(we,{className:t(`size-4`,p&&`animate-spin`)}),`Refresh`]})]})]}),h&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-4`}),(0,Y.jsx)(`span`,{children:h})]}),(0,Y.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-[230px_minmax(0,1fr)]`,children:[(0,Y.jsx)(`nav`,{className:`space-y-1 lg:sticky lg:top-4 lg:self-start`,children:S.map(e=>(0,Y.jsxs)(`button`,{type:`button`,className:t(`w-full rounded-md border px-3 py-2 text-left text-sm transition-colors`,C?.slug===e.slug?`border-primary/50 bg-primary/10 text-foreground`:`border-transparent hover:border-border hover:bg-accent`),onClick:()=>w(e.slug),children:[(0,Y.jsx)(`span`,{className:`block font-medium`,children:e.label}),(0,Y.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:e.description})]},e.slug))}),(0,Y.jsx)(`div`,{className:`min-w-0 space-y-4`,children:p&&!e.length?(0,Y.jsx)(q,{size:`sm`,children:(0,Y.jsx)(G,{className:`text-sm text-muted-foreground`,children:`Loading settings…`})}):C?.kind===`service-access`?(0,Y.jsx)(ue,{}):C?.kind===`routing`?(0,Y.jsx)(Gn,{canWrite:Ne(r?.scopes,`settings:write:routing`),canWriteBudget:Ne(r?.scopes,`system:admin`)}):C?.kind===`descriptors`?(0,Y.jsxs)(Y.Fragment,{children:[ee&&(0,Y.jsx)(Tt,{setting:ee,onSaved:T}),D&&(0,Y.jsx)(Dt,{setting:D,onSaved:T}),(0,Y.jsx)(Qe,{group:C.label,settings:te,onSaved:T}),C.label===`Users`&&Ne(r?.scopes,`system:admin`)&&(0,Y.jsx)(Ft,{}),E&&(0,Y.jsx)(yt,{setting:E,teams:l,onSaved:T},`${E.version}-${E.updatedAt}`),C.label===`Providers`&&(0,Y.jsx)(Bt,{canWrite:Ne(r?.scopes,`settings:write:provider`)}),C.label===`Notifications`&&(0,Y.jsx)(er,{})]}):C?.kind===`profile`?(0,Y.jsx)(tr,{}):C?.kind===`browser`?(0,Y.jsx)(rt,{}):(0,Y.jsx)(st,{catalog:a,error:_,canWrite:Ne(r?.scopes,`settings:write:provider`),onCatalog:e=>{o(e),c({providerCatalog:e})}})})]})]})}function er(){let[e,t]=(0,J.useState)(`branch.landed`),[n,r]=(0,J.useState)(`{
|
|
4
|
+
"repoRoot": "/repo"
|
|
5
|
+
}`),[i,a]=(0,J.useState)(null),[o,s]=(0,J.useState)(!1),[c,l]=(0,J.useState)(``);async function u(){s(!0),l(``);try{let t=JSON.parse(n);if(!t||typeof t!=`object`||Array.isArray(t))throw Error(`Scope must be a JSON object`);let r=await y(`POST`,`/notifications/preview`,{type:e,scope:t});a(r.preview)}catch(e){a(null),l(e.message)}finally{s(!1)}}return(0,Y.jsx)(q,{size:`sm`,children:(0,Y.jsxs)(G,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Who gets what`}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Dry-run notification routing without sending.`})]}),(0,Y.jsxs)(R,{size:`sm`,onClick:()=>void u(),disabled:o,children:[(0,Y.jsx)(Te,{className:`size-4`}),`Preview`]})]}),(0,Y.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-[240px_minmax(0,1fr)]`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(`label`,{className:`text-xs font-medium text-muted-foreground`,children:`Type`}),(0,Y.jsxs)(N,{value:e,onValueChange:t,children:[(0,Y.jsx)(A,{className:`w-full`,children:(0,Y.jsx)(k,{})}),(0,Y.jsx)(j,{children:Xn.map(e=>(0,Y.jsx)(M,{value:e,children:e},e))})]})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(`label`,{className:`text-xs font-medium text-muted-foreground`,children:`Scope`}),(0,Y.jsx)(V,{value:n,onChange:e=>r(e.target.value),rows:4,className:`font-mono text-xs`})]})]}),c&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2 text-xs text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-3.5`}),(0,Y.jsx)(`span`,{children:c})]}),i&&(0,Y.jsx)(`div`,{className:`overflow-hidden rounded-md border border-border`,children:i.recipients.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-4 text-center text-xs text-muted-foreground`,children:`No recipients`}):i.recipients.map(e=>(0,Y.jsxs)(`div`,{className:`grid gap-1 border-b border-border px-3 py-2 text-xs last:border-b-0 md:grid-cols-[minmax(0,180px)_minmax(0,160px)_minmax(0,1fr)]`,children:[(0,Y.jsx)(`span`,{className:`truncate font-medium`,children:e.recipient}),(0,Y.jsx)(`span`,{className:`truncate font-mono text-muted-foreground`,children:e.matchedRule}),(0,Y.jsx)(`span`,{className:`truncate text-muted-foreground`,children:e.reason})]},`${e.recipient}-${e.matchedRule}`))})]})})}function tr(){let e=s(e=>e.fetchUsers),t=(0,J.useRef)(null),[n,r]=(0,J.useState)(null),[i,a]=(0,J.useState)(``),[o,c]=(0,J.useState)(!0),[l,u]=(0,J.useState)(!1),[d,f]=(0,J.useState)(``);async function p(){c(!0),f(``);try{let e=await y(`GET`,`/users/me`);r(e),a(e.displayName||e.handle)}catch(e){f(e.message)}finally{c(!1)}}(0,J.useEffect)(()=>{p()},[]);async function m(){u(!0),f(``);try{let t=await y(`PATCH`,`/users/me`,{displayName:i});r(t),a(t.displayName||t.handle),await e()}catch(e){f(e.message)}finally{u(!1)}}async function h(n){if(n){u(!0),f(``);try{let t=await _(`/users/me/avatar`,n);r(t.user),a(t.user.displayName||t.user.handle),await e()}catch(e){f(e.message)}finally{u(!1),t.current&&(t.current.value=``)}}}async function g(){u(!0),f(``);try{let t=await y(`DELETE`,`/users/me/avatar`);r(t),await e()}catch(e){f(e.message)}finally{u(!1)}}return(0,Y.jsx)(q,{size:`sm`,children:(0,Y.jsxs)(G,{className:`space-y-4`,children:[d&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,Y.jsx)(F,{className:`mt-0.5 size-4`}),(0,Y.jsx)(`span`,{children:d})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4`,children:[(0,Y.jsx)(Ae,{user:n??void 0,distinct:!0,className:`size-16 text-lg`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[(0,Y.jsx)(`label`,{className:`block text-xs font-medium text-muted-foreground`,htmlFor:`profile-display-name`,children:`Display name`}),(0,Y.jsx)(`input`,{id:`profile-display-name`,className:`h-9 w-full rounded-md border border-input bg-background px-3 text-sm`,value:i,onChange:e=>a(e.target.value),disabled:o||l,maxLength:120})]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsxs)(R,{size:`sm`,onClick:()=>void m(),disabled:o||l||!i.trim(),children:[(0,Y.jsx)(L,{className:`size-4`}),`Save`]}),(0,Y.jsxs)(R,{size:`sm`,variant:`outline`,onClick:()=>t.current?.click(),disabled:o||l,children:[(0,Y.jsx)(fe,{className:`size-4`}),`Upload`]}),(0,Y.jsxs)(R,{size:`sm`,variant:`outline`,onClick:()=>void g(),disabled:o||l||!n?.avatarArtifactId,children:[(0,Y.jsx)(Ee,{className:`size-4`}),`Remove`]}),l&&(0,Y.jsx)(me,{className:`size-4 animate-pulse text-muted-foreground`}),(0,Y.jsx)(`input`,{ref:t,type:`file`,accept:`image/png,image/jpeg,image/gif,image/webp`,className:`hidden`,onChange:e=>void h(e.target.files?.[0])})]})]})})}export{$n as SettingsView};
|
|
6
|
+
//# sourceMappingURL=settings-C6sZ9eBa.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=[Object.freeze(JSON.parse(`{"displayName":"Shell","name":"shellscript","patterns":[{"include":"#initial_context"}],"repository":{"alias_statement":{"begin":"[\\\\t ]*+(alias)[\\\\t ]*+((?:((?<!\\\\w)-\\\\w+)\\\\b[\\\\t ]*+)*)[\\\\t ]*+((?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w))(?:(\\\\[)((?:(?:\\\\$?(?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w)|@)|\\\\*)|(-?\\\\d+))(]))?(?:(?:(=)|(\\\\+=))|(-=))","beginCaptures":{"1":{"name":"storage.type.alias.shell"},"2":{"patterns":[{"match":"(?<!\\\\w)-\\\\w+\\\\b","name":"string.unquoted.argument.shell constant.other.option.shell"}]},"3":{"name":"string.unquoted.argument.shell constant.other.option.shell"},"4":{"name":"variable.other.assignment.shell"},"5":{"name":"punctuation.definition.array.access.shell"},"6":{"name":"variable.other.assignment.shell"},"7":{"name":"constant.numeric.shell constant.numeric.integer.shell"},"8":{"name":"punctuation.definition.array.access.shell"},"9":{"name":"keyword.operator.assignment.shell"},"10":{"name":"keyword.operator.assignment.compound.shell"},"11":{"name":"keyword.operator.assignment.compound.shell"}},"end":"(?=[\\\\t ]|$)|(?:(?:(?:(;)|(&&))|(\\\\|\\\\|))|(&))","endCaptures":{"1":{"name":"punctuation.terminator.statement.semicolon.shell"},"2":{"name":"punctuation.separator.statement.and.shell"},"3":{"name":"punctuation.separator.statement.or.shell"},"4":{"name":"punctuation.separator.statement.background.shell"}},"name":"meta.expression.assignment.alias.shell","patterns":[{"include":"#normal_context"}]},"argument":{"begin":"[\\\\t ]++(?![\\\\n#\\\\&(\\\\[|]|$|;)","beginCaptures":{},"end":"(?=[\\\\t \\\\&;|]|$|[\\\\n)\`])","endCaptures":{},"name":"meta.argument.shell","patterns":[{"include":"#argument_context"},{"include":"#line_continuation"}]},"argument_context":{"patterns":[{"captures":{"1":{"name":"string.unquoted.argument.shell","patterns":[{"match":"\\\\*","name":"variable.language.special.wildcard.shell"},{"include":"#variable"},{"include":"#numeric_literal"},{"captures":{"1":{"name":"constant.language.$1.shell"}},"match":"(?<!\\\\w)\\\\b(true|false)\\\\b(?!\\\\w)"}]}},"match":"[\\\\t ]*+([^\\\\t\\\\n \\"$\\\\&-);<>\\\\\\\\\`|]+(?!>))"},{"include":"#normal_context"}]},"arithmetic_double":{"patterns":[{"begin":"\\\\(\\\\(","beginCaptures":{"0":{"name":"punctuation.section.arithmetic.double.shell"}},"end":"\\\\)\\\\s*\\\\)","endCaptures":{"0":{"name":"punctuation.section.arithmetic.double.shell"}},"name":"meta.arithmetic.shell","patterns":[{"include":"#math"},{"include":"#string"}]}]},"arithmetic_no_dollar":{"patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.arithmetic.single.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.arithmetic.single.shell"}},"name":"meta.arithmetic.shell","patterns":[{"include":"#math"},{"include":"#string"}]}]},"array_access_inline":{"captures":{"1":{"name":"punctuation.section.array.shell"},"2":{"patterns":[{"include":"#special_expansion"},{"include":"#string"},{"include":"#variable"}]},"3":{"name":"punctuation.section.array.shell"}},"match":"(\\\\[)([^]\\\\[]+)(])"},"array_value":{"begin":"[\\\\t ]*+((?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w))(?:(\\\\[)((?:(?:\\\\$?(?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w)|@)|\\\\*)|(-?\\\\d+))(]))?(?:(?:(=)|(\\\\+=))|(-=))[\\\\t ]*+(\\\\()","beginCaptures":{"1":{"name":"variable.other.assignment.shell"},"2":{"name":"punctuation.definition.array.access.shell"},"3":{"name":"variable.other.assignment.shell"},"4":{"name":"constant.numeric.shell constant.numeric.integer.shell"},"5":{"name":"punctuation.definition.array.access.shell"},"6":{"name":"keyword.operator.assignment.shell"},"7":{"name":"keyword.operator.assignment.compound.shell"},"8":{"name":"keyword.operator.assignment.compound.shell"},"9":{"name":"punctuation.definition.array.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.array.shell"}},"patterns":[{"include":"#comment"},{"captures":{"1":{"name":"variable.other.assignment.array.shell entity.other.attribute-name.shell"},"2":{"name":"keyword.operator.assignment.shell punctuation.definition.assignment.shell"}},"match":"((?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w))(=)"},{"captures":{"1":{"name":"punctuation.definition.bracket.named-array.shell"},"2":{"name":"string.unquoted.shell entity.other.attribute-name.bracket.shell"},"3":{"name":"punctuation.definition.bracket.named-array.shell"},"4":{"name":"punctuation.definition.assignment.shell"}},"match":"(\\\\[)(.+?)(])(=)"},{"include":"#normal_context"},{"include":"#simple_unquoted"}]},"assignment_statement":{"patterns":[{"include":"#array_value"},{"include":"#modified_assignment_statement"},{"include":"#normal_assignment_statement"}]},"basic_command_name":{"captures":{"1":{"name":"storage.modifier.$1.shell"},"2":{"name":"entity.name.function.call.shell entity.name.command.shell","patterns":[{"match":"(?<!\\\\w)(?:continue|return|break)(?!\\\\w)","name":"keyword.control.$0.shell"},{"match":"(?<!\\\\w)(?:unfunction|continue|autoload|unsetopt|bindkey|builtin|getopts|command|declare|unalias|history|unlimit|typeset|suspend|source|printf|unhash|disown|ulimit|return|which|alias|break|false|print|shift|times|umask|unset|read|type|exec|eval|wait|echo|dirs|jobs|kill|hash|stat|exit|test|trap|true|let|set|pwd|cd|fg|bg|fc|[.:])(?!/)(?!\\\\w)(?!-)","name":"support.function.builtin.shell"},{"include":"#variable"}]}},"match":"(?![\\\\n!#\\\\&()<>\\\\[{|]|$|[\\\\t ;])(?!nocorrect |nocorrect\\\\t|nocorrect$|readonly |readonly\\\\t|readonly$|function |function\\\\t|function$|foreach |foreach\\\\t|foreach$|coproc |coproc\\\\t|coproc$|logout |logout\\\\t|logout$|export |export\\\\t|export$|select |select\\\\t|select$|repeat |repeat\\\\t|repeat$|pushd |pushd\\\\t|pushd$|until |until\\\\t|until$|while |while\\\\t|while$|local |local\\\\t|local$|case |case\\\\t|case$|done |done\\\\t|done$|elif |elif\\\\t|elif$|else |else\\\\t|else$|esac |esac\\\\t|esac$|popd |popd\\\\t|popd$|then |then\\\\t|then$|time |time\\\\t|time$|for |for\\\\t|for$|end |end\\\\t|end$|fi |fi\\\\t|fi$|do |do\\\\t|do$|in |in\\\\t|in$|if |if\\\\t|if$)(?:((?<=^|[\\\\t \\\\&;])(?:readonly|declare|typeset|export|local)(?=[\\\\t \\\\&;]|$))|((?![\\"']|\\\\\\\\\\\\n?$)[^\\\\t\\\\n\\\\r !\\"'<>]+?))(?:(?=[\\\\t ])|(?=[\\\\n\\\\&);\`{|}]|[\\\\t ]*#|])(?<!\\\\\\\\))","name":"meta.statement.command.name.basic.shell"},"block_comment":{"begin":"\\\\s*+(/\\\\*)","beginCaptures":{"1":{"name":"punctuation.definition.comment.begin.shell"}},"end":"\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.shell"}},"name":"comment.block.shell"},"boolean":{"match":"\\\\b(?:true|false)\\\\b","name":"constant.language.$0.shell"},"case_statement":{"begin":"\\\\b(case)\\\\b[\\\\t ]*+(.+?)[\\\\t ]*+\\\\b(in)\\\\b","beginCaptures":{"1":{"name":"keyword.control.case.shell"},"2":{"patterns":[{"include":"#initial_context"}]},"3":{"name":"keyword.control.in.shell"}},"end":"\\\\besac\\\\b","endCaptures":{"0":{"name":"keyword.control.esac.shell"}},"name":"meta.case.shell","patterns":[{"include":"#comment"},{"captures":{"1":{"name":"keyword.operator.pattern.case.default.shell"}},"match":"[\\\\t ]*+(\\\\* *\\\\))"},{"begin":"(?<!\\\\))(?![\\\\t ]*+(?:esac\\\\b|$))","beginCaptures":{},"end":"(?=\\\\besac\\\\b)|(\\\\))","endCaptures":{"1":{"name":"keyword.operator.pattern.case.shell"}},"name":"meta.case.entry.pattern.shell","patterns":[{"include":"#case_statement_context"}]},{"begin":"(?<=\\\\))","beginCaptures":{},"end":"(;;)|(?=\\\\besac\\\\b)","endCaptures":{"1":{"name":"punctuation.terminator.statement.case.shell"}},"name":"meta.case.entry.body.shell","patterns":[{"include":"#typical_statements"},{"include":"#initial_context"}]}]},"case_statement_context":{"patterns":[{"match":"\\\\*","name":"variable.language.special.quantifier.star.shell keyword.operator.quantifier.star.shell punctuation.definition.arbitrary-repetition.shell punctuation.definition.regex.arbitrary-repetition.shell"},{"match":"\\\\+","name":"variable.language.special.quantifier.plus.shell keyword.operator.quantifier.plus.shell punctuation.definition.arbitrary-repetition.shell punctuation.definition.regex.arbitrary-repetition.shell"},{"match":"\\\\?","name":"variable.language.special.quantifier.question.shell keyword.operator.quantifier.question.shell punctuation.definition.arbitrary-repetition.shell punctuation.definition.regex.arbitrary-repetition.shell"},{"match":"@","name":"variable.language.special.at.shell keyword.operator.at.shell punctuation.definition.regex.at.shell"},{"match":"\\\\|","name":"keyword.operator.orvariable.language.special.or.shell keyword.operator.alternation.ruby.shell punctuation.definition.regex.alternation.shell punctuation.separator.regex.alternation.shell"},{"match":"\\\\\\\\.","name":"constant.character.escape.shell"},{"match":"(?<=\\\\tin| in|[\\\\t ]|;;)\\\\(","name":"keyword.operator.pattern.case.shell"},{"begin":"(?<=\\\\S)(\\\\()","beginCaptures":{"1":{"name":"punctuation.definition.group.shell punctuation.definition.regex.group.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.group.shell punctuation.definition.regex.group.shell"}},"name":"meta.parenthese.shell","patterns":[{"include":"#case_statement_context"}]},{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.character-class.shell"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.character-class.shell"}},"name":"string.regexp.character-class.shell","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.shell"}]},{"include":"#string"},{"match":"[^\\\\t\\\\n )*?@\\\\[|]","name":"string.unquoted.pattern.shell string.regexp.unquoted.shell"}]},"command_name_range":{"begin":"\\\\G","beginCaptures":{},"end":"(?=[\\\\t \\\\&;|]|$|[\\\\n)\`])|(?=<)","endCaptures":{},"name":"meta.statement.command.name.shell","patterns":[{"match":"(?<!\\\\w)(?:continue|return|break)(?!\\\\w)","name":"entity.name.function.call.shell entity.name.command.shell keyword.control.$0.shell"},{"match":"(?<!\\\\w)(?:unfunction|continue|autoload|unsetopt|bindkey|builtin|getopts|command|declare|unalias|history|unlimit|typeset|suspend|source|printf|unhash|disown|ulimit|return|which|alias|break|false|print|shift|times|umask|unset|read|type|exec|eval|wait|echo|dirs|jobs|kill|hash|stat|exit|test|trap|true|let|set|pwd|cd|fg|bg|fc|[.:])(?!/)(?!\\\\w)(?!-)","name":"entity.name.function.call.shell entity.name.command.shell support.function.builtin.shell"},{"include":"#variable"},{"captures":{"1":{"name":"entity.name.function.call.shell entity.name.command.shell"}},"match":"(?<!\\\\w)(?<=\\\\G|[\\"')}])([^\\\\t\\\\n\\\\r \\"\\\\&');->\`{|]+)"},{"begin":"(?:\\\\G|(?<![\\\\t\\\\n #\\\\&;{|]))(\\\\$?)((\\")|('))","beginCaptures":{"1":{"name":"meta.statement.command.name.quoted.shell punctuation.definition.string.shell entity.name.function.call.shell entity.name.command.shell"},"2":{},"3":{"name":"meta.statement.command.name.quoted.shell string.quoted.double.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell"},"4":{"name":"meta.statement.command.name.quoted.shell string.quoted.single.shell punctuation.definition.string.begin.shell entity.name.function.call.shell entity.name.command.shell"}},"end":"(?<!\\\\G)(?<=\\\\2)","endCaptures":{},"patterns":[{"include":"#continuation_of_single_quoted_command_name"},{"include":"#continuation_of_double_quoted_command_name"}]},{"include":"#line_continuation"},{"include":"#simple_unquoted"}]},"command_statement":{"begin":"[\\\\t ]*+(?![\\\\n!#\\\\&()<>\\\\[{|]|$|[\\\\t ;])(?!nocorrect |nocorrect\\\\t|nocorrect$|readonly |readonly\\\\t|readonly$|function |function\\\\t|function$|foreach |foreach\\\\t|foreach$|coproc |coproc\\\\t|coproc$|logout |logout\\\\t|logout$|export |export\\\\t|export$|select |select\\\\t|select$|repeat |repeat\\\\t|repeat$|pushd |pushd\\\\t|pushd$|until |until\\\\t|until$|while |while\\\\t|while$|local |local\\\\t|local$|case |case\\\\t|case$|done |done\\\\t|done$|elif |elif\\\\t|elif$|else |else\\\\t|else$|esac |esac\\\\t|esac$|popd |popd\\\\t|popd$|then |then\\\\t|then$|time |time\\\\t|time$|for |for\\\\t|for$|end |end\\\\t|end$|fi |fi\\\\t|fi$|do |do\\\\t|do$|in |in\\\\t|in$|if |if\\\\t|if$)(?!\\\\\\\\\\\\n?$)","beginCaptures":{},"end":"(?=[\\\\n\\\\&);\`{|}]|[\\\\t ]*#|])(?<!\\\\\\\\)","endCaptures":{},"name":"meta.statement.command.shell","patterns":[{"include":"#command_name_range"},{"include":"#line_continuation"},{"include":"#option"},{"include":"#argument"},{"include":"#string"},{"include":"#heredoc"}]},"comment":{"captures":{"1":{"name":"comment.line.number-sign.shell meta.shebang.shell"},"2":{"name":"punctuation.definition.comment.shebang.shell"},"3":{"name":"comment.line.number-sign.shell"},"4":{"name":"punctuation.definition.comment.shell"}},"match":"(?:^|[\\\\t ]++)(?:((#!).*)|((#).*))"},"comments":{"patterns":[{"include":"#block_comment"},{"include":"#line_comment"}]},"compound-command":{"patterns":[{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.logical-expression.shell"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.logical-expression.shell"}},"name":"meta.scope.logical-expression.shell","patterns":[{"include":"#logical-expression"},{"include":"#initial_context"}]},{"begin":"(?<=\\\\s|^)\\\\{(?=\\\\s|$)","beginCaptures":{"0":{"name":"punctuation.definition.group.shell"}},"end":"(?<=^|;)\\\\s*(})","endCaptures":{"1":{"name":"punctuation.definition.group.shell"}},"name":"meta.scope.group.shell","patterns":[{"include":"#initial_context"}]}]},"continuation_of_double_quoted_command_name":{"begin":"\\\\G(?<=\\")","beginCaptures":{},"contentName":"meta.statement.command.name.continuation string.quoted.double entity.name.function.call entity.name.command","end":"\\"","endCaptures":{"0":{"name":"string.quoted.double.shell punctuation.definition.string.end.shell entity.name.function.call.shell entity.name.command.shell"}},"patterns":[{"match":"\\\\\\\\[\\\\n\\"$\\\\\\\\\`]","name":"constant.character.escape.shell"},{"include":"#variable"},{"include":"#interpolation"}]},"continuation_of_single_quoted_command_name":{"begin":"\\\\G(?<=')","beginCaptures":{},"contentName":"meta.statement.command.name.continuation string.quoted.single entity.name.function.call entity.name.command","end":"'","endCaptures":{"0":{"name":"string.quoted.single.shell punctuation.definition.string.end.shell entity.name.function.call.shell entity.name.command.shell"}}},"custom_command_names":{"patterns":[]},"custom_commands":{"patterns":[]},"double_quote_context":{"patterns":[{"match":"\\\\\\\\[\\\\n\\"$\\\\\\\\\`]","name":"constant.character.escape.shell"},{"include":"#variable"},{"include":"#interpolation"}]},"double_quote_escape_char":{"match":"\\\\\\\\[\\\\n\\"$\\\\\\\\\`]","name":"constant.character.escape.shell"},"floating_keyword":{"patterns":[{"match":"(?<=^|[\\\\t \\\\&;])(?:then|elif|else|done|end|do|if|fi)(?=[\\\\t \\\\&;]|$)","name":"keyword.control.$0.shell"}]},"for_statement":{"patterns":[{"begin":"\\\\b(for)\\\\b[\\\\t ]*+((?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w))[\\\\t ]*+\\\\b(in)\\\\b","beginCaptures":{"1":{"name":"keyword.control.for.shell"},"2":{"name":"variable.other.for.shell"},"3":{"name":"keyword.control.in.shell"}},"end":"(?=[\\\\n\\\\&);\`{|}]|[\\\\t ]*#|])(?<!\\\\\\\\)","endCaptures":{},"name":"meta.for.in.shell","patterns":[{"include":"#string"},{"include":"#simple_unquoted"},{"include":"#normal_context"}]},{"begin":"\\\\b(for)\\\\b","beginCaptures":{"1":{"name":"keyword.control.for.shell"}},"end":"(?=[\\\\n\\\\&);\`{|}]|[\\\\t ]*#|])(?<!\\\\\\\\)","endCaptures":{},"name":"meta.for.shell","patterns":[{"include":"#arithmetic_double"},{"include":"#normal_context"}]}]},"function_definition":{"applyEndPatternLast":1,"begin":"[\\\\t ]*+(?:\\\\b(function)\\\\b[\\\\t ]*+([^\\\\t\\\\n\\\\r \\"'()=]+)(?:(\\\\()[\\\\t ]*+(\\\\)))?|([^\\\\t\\\\n\\\\r \\"'()=]+)[\\\\t ]*+(\\\\()[\\\\t ]*+(\\\\)))","beginCaptures":{"1":{"name":"storage.type.function.shell"},"2":{"name":"entity.name.function.shell"},"3":{"name":"punctuation.definition.arguments.shell"},"4":{"name":"punctuation.definition.arguments.shell"},"5":{"name":"entity.name.function.shell"},"6":{"name":"punctuation.definition.arguments.shell"},"7":{"name":"punctuation.definition.arguments.shell"}},"end":"(?<=[)}])","endCaptures":{},"name":"meta.function.shell","patterns":[{"match":"\\\\G[\\\\t\\\\n ]"},{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.group.shell punctuation.section.function.definition.shell"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.group.shell punctuation.section.function.definition.shell"}},"name":"meta.function.body.shell","patterns":[{"include":"#initial_context"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.group.shell punctuation.section.function.definition.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.group.shell punctuation.section.function.definition.shell"}},"name":"meta.function.body.shell","patterns":[{"include":"#initial_context"}]},{"include":"#initial_context"}]},"heredoc":{"patterns":[{"begin":"((?<!<)<<-)[\\\\t ]*+([\\"'])[\\\\t ]*+([^\\"']+?)(?=[\\"\\\\&';<\\\\s])(\\\\2)(.*)","beginCaptures":{"1":{"name":"keyword.operator.heredoc.shell"},"2":{"name":"punctuation.definition.string.heredoc.quote.shell"},"3":{"name":"punctuation.definition.string.heredoc.delimiter.shell"},"4":{"name":"punctuation.definition.string.heredoc.quote.shell"},"5":{"patterns":[{"include":"#redirect_fix"},{"include":"#typical_statements"}]}},"contentName":"string.quoted.heredoc.indent.$3","end":"^\\\\t*\\\\3(?=[\\\\&;\\\\s]|$)","endCaptures":{"0":{"name":"punctuation.definition.string.heredoc.$0.shell"}},"patterns":[]},{"begin":"((?<!<)<<(?!<))[\\\\t ]*+([\\"'])[\\\\t ]*+([^\\"']+?)(?=[\\"\\\\&';<\\\\s])(\\\\2)(.*)","beginCaptures":{"1":{"name":"keyword.operator.heredoc.shell"},"2":{"name":"punctuation.definition.string.heredoc.quote.shell"},"3":{"name":"punctuation.definition.string.heredoc.delimiter.shell"},"4":{"name":"punctuation.definition.string.heredoc.quote.shell"},"5":{"patterns":[{"include":"#redirect_fix"},{"include":"#typical_statements"}]}},"contentName":"string.quoted.heredoc.no-indent.$3","end":"^\\\\3(?=[\\\\&;\\\\s]|$)","endCaptures":{"0":{"name":"punctuation.definition.string.heredoc.delimiter.shell"}},"patterns":[]},{"begin":"((?<!<)<<-)[\\\\t ]*+([^\\\\t \\"']+)(?=[\\"\\\\&';<\\\\s])(.*)","beginCaptures":{"1":{"name":"keyword.operator.heredoc.shell"},"2":{"name":"punctuation.definition.string.heredoc.delimiter.shell"},"3":{"patterns":[{"include":"#redirect_fix"},{"include":"#typical_statements"}]}},"contentName":"string.unquoted.heredoc.indent.$2","end":"^\\\\t*\\\\2(?=[\\\\&;\\\\s]|$)","endCaptures":{"0":{"name":"punctuation.definition.string.heredoc.delimiter.shell"}},"patterns":[{"include":"#double_quote_escape_char"},{"include":"#variable"},{"include":"#interpolation"}]},{"begin":"((?<!<)<<(?!<))[\\\\t ]*+([^\\\\t \\"']+)(?=[\\"\\\\&';<\\\\s])(.*)","beginCaptures":{"1":{"name":"keyword.operator.heredoc.shell"},"2":{"name":"punctuation.definition.string.heredoc.delimiter.shell"},"3":{"patterns":[{"include":"#redirect_fix"},{"include":"#typical_statements"}]}},"contentName":"string.unquoted.heredoc.no-indent.$2","end":"^\\\\2(?=[\\\\&;\\\\s]|$)","endCaptures":{"0":{"name":"punctuation.definition.string.heredoc.delimiter.shell"}},"patterns":[{"include":"#double_quote_escape_char"},{"include":"#variable"},{"include":"#interpolation"}]}]},"herestring":{"patterns":[{"begin":"(<<<)\\\\s*(('))","beginCaptures":{"1":{"name":"keyword.operator.herestring.shell"},"2":{"name":"string.quoted.single.shell"},"3":{"name":"punctuation.definition.string.begin.shell"}},"contentName":"string.quoted.single.shell","end":"(')","endCaptures":{"0":{"name":"string.quoted.single.shell"},"1":{"name":"punctuation.definition.string.end.shell"}},"name":"meta.herestring.shell"},{"begin":"(<<<)\\\\s*((\\"))","beginCaptures":{"1":{"name":"keyword.operator.herestring.shell"},"2":{"name":"string.quoted.double.shell"},"3":{"name":"punctuation.definition.string.begin.shell"}},"contentName":"string.quoted.double.shell","end":"(\\")","endCaptures":{"0":{"name":"string.quoted.double.shell"},"1":{"name":"punctuation.definition.string.end.shell"}},"name":"meta.herestring.shell","patterns":[{"include":"#double_quote_context"}]},{"captures":{"1":{"name":"keyword.operator.herestring.shell"},"2":{"name":"string.unquoted.herestring.shell","patterns":[{"include":"#initial_context"}]}},"match":"(<<<)\\\\s*(([^)\\\\\\\\\\\\s]|\\\\\\\\.)+)","name":"meta.herestring.shell"}]},"initial_context":{"patterns":[{"include":"#comment"},{"include":"#pipeline"},{"include":"#normal_statement_seperator"},{"include":"#logical_expression_double"},{"include":"#logical_expression_single"},{"include":"#assignment_statement"},{"include":"#case_statement"},{"include":"#for_statement"},{"include":"#loop"},{"include":"#function_definition"},{"include":"#line_continuation"},{"include":"#arithmetic_double"},{"include":"#misc_ranges"},{"include":"#variable"},{"include":"#interpolation"},{"include":"#heredoc"},{"include":"#herestring"},{"include":"#redirection"},{"include":"#pathname"},{"include":"#floating_keyword"},{"include":"#alias_statement"},{"include":"#normal_statement"},{"include":"#string"},{"include":"#support"}]},"inline_comment":{"captures":{"1":{"name":"comment.block.shell punctuation.definition.comment.begin.shell"},"2":{"name":"comment.block.shell"},"3":{"patterns":[{"match":"\\\\*/","name":"comment.block.shell punctuation.definition.comment.end.shell"},{"match":"\\\\*","name":"comment.block.shell"}]}},"match":"(/\\\\*)((?:[^*]|\\\\*++[^/])*+(\\\\*++/))"},"interpolation":{"patterns":[{"include":"#arithmetic_dollar"},{"include":"#subshell_dollar"},{"begin":"\`","beginCaptures":{"0":{"name":"punctuation.definition.evaluation.backticks.shell"}},"end":"\`","endCaptures":{"0":{"name":"punctuation.definition.evaluation.backticks.shell"}},"name":"string.interpolated.backtick.shell","patterns":[{"match":"\\\\\\\\[$\\\\\\\\\`]","name":"constant.character.escape.shell"},{"begin":"(?<=\\\\W)(?=#)(?!#\\\\{)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.shell"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.shell"}},"end":"(?=\`)","name":"comment.line.number-sign.shell"}]},{"include":"#initial_context"}]}]},"keyword":{"patterns":[{"match":"(?<=^|[\\\\&;\\\\s])(then|else|elif|fi|for|in|do|done|select|continue|esac|while|until|return)(?=[\\\\&;\\\\s]|$)","name":"keyword.control.shell"},{"match":"(?<=^|[\\\\&;\\\\s])(?:export|declare|typeset|local|readonly)(?=[\\\\&;\\\\s]|$)","name":"storage.modifier.shell"}]},"line_comment":{"begin":"\\\\s*+(//)","beginCaptures":{"1":{"name":"punctuation.definition.comment.shell"}},"end":"(?<=\\\\n)(?<!\\\\\\\\\\\\n)","endCaptures":{},"name":"comment.line.double-slash.shell","patterns":[{"include":"#line_continuation_character"}]},"line_continuation":{"match":"\\\\\\\\(?=\\\\n)","name":"constant.character.escape.line-continuation.shell"},"logical-expression":{"patterns":[{"include":"#arithmetic_no_dollar"},{"match":"=[=~]?|!=?|[<>]|&&|\\\\|\\\\|","name":"keyword.operator.logical.shell"},{"match":"(?<!\\\\S)-(nt|ot|ef|eq|ne|l[et]|g[et]|[GLNOSa-hknopr-uwxz])\\\\b","name":"keyword.operator.logical.shell"}]},"logical_expression_context":{"patterns":[{"include":"#regex_comparison"},{"include":"#arithmetic_no_dollar"},{"include":"#logical-expression"},{"include":"#logical_expression_single"},{"include":"#logical_expression_double"},{"include":"#comment"},{"include":"#boolean"},{"include":"#redirect_number"},{"include":"#numeric_literal"},{"include":"#pipeline"},{"include":"#normal_statement_seperator"},{"include":"#string"},{"include":"#variable"},{"include":"#interpolation"},{"include":"#heredoc"},{"include":"#herestring"},{"include":"#pathname"},{"include":"#floating_keyword"},{"include":"#support"}]},"logical_expression_double":{"begin":"\\\\[\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.logical-expression.shell"}},"end":"]]","endCaptures":{"0":{"name":"punctuation.definition.logical-expression.shell"}},"name":"meta.scope.logical-expression.shell","patterns":[{"include":"#logical_expression_context"}]},"logical_expression_single":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.logical-expression.shell"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.logical-expression.shell"}},"name":"meta.scope.logical-expression.shell","patterns":[{"include":"#logical_expression_context"}]},"loop":{"patterns":[{"begin":"(?<=^|[\\\\&;\\\\s])(for)\\\\s+(.+?)\\\\s+(in)(?=[\\\\&;\\\\s]|$)","beginCaptures":{"1":{"name":"keyword.control.shell"},"2":{"name":"variable.other.loop.shell","patterns":[{"include":"#string"}]},"3":{"name":"keyword.control.shell"}},"end":"(?<=^|[\\\\&;\\\\s])done(?=[\\\\&;\\\\s]|$|\\\\))","endCaptures":{"0":{"name":"keyword.control.shell"}},"name":"meta.scope.for-in-loop.shell","patterns":[{"include":"#initial_context"}]},{"begin":"(?<=^|[\\\\&;\\\\s])(while|until)(?=[\\\\&;\\\\s]|$)","beginCaptures":{"1":{"name":"keyword.control.shell"}},"end":"(?<=^|[\\\\&;\\\\s])done(?=[\\\\&;\\\\s]|$|\\\\))","endCaptures":{"0":{"name":"keyword.control.shell"}},"name":"meta.scope.while-loop.shell","patterns":[{"include":"#initial_context"}]},{"begin":"(?<=^|[\\\\&;\\\\s])(select)\\\\s+((?:[^\\\\\\\\\\\\s]|\\\\\\\\.)+)(?=[\\\\&;\\\\s]|$)","beginCaptures":{"1":{"name":"keyword.control.shell"},"2":{"name":"variable.other.loop.shell"}},"end":"(?<=^|[\\\\&;\\\\s])(done)(?=[\\\\&;\\\\s]|$|\\\\))","endCaptures":{"1":{"name":"keyword.control.shell"}},"name":"meta.scope.select-block.shell","patterns":[{"include":"#initial_context"}]},{"begin":"(?<=^|[\\\\&;\\\\s])if(?=[\\\\&;\\\\s]|$)","beginCaptures":{"0":{"name":"keyword.control.if.shell"}},"end":"(?<=^|[\\\\&;\\\\s])fi(?=[\\\\&;\\\\s]|$)","endCaptures":{"0":{"name":"keyword.control.fi.shell"}},"name":"meta.scope.if-block.shell","patterns":[{"include":"#initial_context"}]}]},"math":{"patterns":[{"include":"#variable"},{"match":"\\\\+{1,2}|-{1,2}|[!~]|\\\\*{1,2}|[%/]|<[<=]?|>[=>]?|==|!=|^|\\\\|{1,2}|&{1,2}|[,:=?]|[-%\\\\&*+/^|]=|<<=|>>=","name":"keyword.operator.arithmetic.shell"},{"match":"0[Xx]\\\\h+","name":"constant.numeric.hex.shell"},{"match":";","name":"punctuation.separator.semicolon.range"},{"match":"0\\\\d+","name":"constant.numeric.octal.shell"},{"match":"\\\\d{1,2}#[0-9@-Z_a-z]+","name":"constant.numeric.other.shell"},{"match":"\\\\d+","name":"constant.numeric.integer.shell"},{"match":"(?<!\\\\w)[0-9A-Z_a-z]+(?!\\\\w)","name":"variable.other.normal.shell"}]},"math_operators":{"patterns":[{"match":"\\\\+{1,2}|-{1,2}|[!~]|\\\\*{1,2}|[%/]|<[<=]?|>[=>]?|==|!=|^|\\\\|{1,2}|&{1,2}|[,:=?]|[-%\\\\&*+/^|]=|<<=|>>=","name":"keyword.operator.arithmetic.shell"},{"match":"0[Xx]\\\\h+","name":"constant.numeric.hex.shell"},{"match":"0\\\\d+","name":"constant.numeric.octal.shell"},{"match":"\\\\d{1,2}#[0-9@-Z_a-z]+","name":"constant.numeric.other.shell"},{"match":"\\\\d+","name":"constant.numeric.integer.shell"}]},"misc_ranges":{"patterns":[{"include":"#logical_expression_single"},{"include":"#logical_expression_double"},{"include":"#subshell_dollar"},{"begin":"(?<![^\\\\t ])(\\\\{)(?![$\\\\w])","beginCaptures":{"1":{"name":"punctuation.definition.group.shell"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.group.shell"}},"name":"meta.scope.group.shell","patterns":[{"include":"#initial_context"}]}]},"modified_assignment_statement":{"begin":"(?<=^|[\\\\t \\\\&;])(?:readonly|declare|typeset|export|local)(?=[\\\\t \\\\&;]|$)","beginCaptures":{"0":{"name":"storage.modifier.$0.shell"}},"end":"(?=[\\\\n\\\\&);\`{|}]|[\\\\t ]*#|])(?<!\\\\\\\\)","endCaptures":{},"name":"meta.statement.shell meta.expression.assignment.modified.shell","patterns":[{"match":"(?<!\\\\w)-\\\\w+\\\\b","name":"string.unquoted.argument.shell constant.other.option.shell"},{"include":"#array_value"},{"captures":{"1":{"name":"variable.other.assignment.shell"},"2":{"name":"punctuation.definition.array.access.shell"},"3":{"name":"variable.other.assignment.shell"},"4":{"name":"constant.numeric.shell constant.numeric.integer.shell"},"5":{"name":"punctuation.definition.array.access.shell"},"6":{"name":"keyword.operator.assignment.shell"},"7":{"name":"keyword.operator.assignment.compound.shell"},"8":{"name":"keyword.operator.assignment.compound.shell"},"9":{"name":"constant.numeric.shell constant.numeric.hex.shell"},"10":{"name":"constant.numeric.shell constant.numeric.octal.shell"},"11":{"name":"constant.numeric.shell constant.numeric.other.shell"},"12":{"name":"constant.numeric.shell constant.numeric.decimal.shell"},"13":{"name":"constant.numeric.shell constant.numeric.version.shell"},"14":{"name":"constant.numeric.shell constant.numeric.integer.shell"}},"match":"((?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w))(?:(\\\\[)((?:(?:\\\\$?(?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w)|@)|\\\\*)|(-?\\\\d+))(]))?(?:(?:(=)|(\\\\+=))|(-=))?(?:(?<=[\\\\t =]|^|[(\\\\[{])(?:(?:(?:(?:(?:(0[Xx]\\\\h+)|(0\\\\d+))|(\\\\d{1,2}#[0-9@-Z_a-z]+))|(-?\\\\d+\\\\.\\\\d+))|(-?\\\\d+(?:\\\\.\\\\d+)+))|(-?\\\\d+))(?=[\\\\t ]|$|[);}]))?"},{"include":"#normal_context"}]},"modifiers":{"match":"(?<=^|[\\\\t \\\\&;])(?:readonly|declare|typeset|export|local)(?=[\\\\t \\\\&;]|$)","name":"storage.modifier.$0.shell"},"normal_assignment_statement":{"begin":"[\\\\t ]*+((?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w))(?:(\\\\[)((?:(?:\\\\$?(?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w)|@)|\\\\*)|(-?\\\\d+))(]))?(?:(?:(=)|(\\\\+=))|(-=))","beginCaptures":{"1":{"name":"variable.other.assignment.shell"},"2":{"name":"punctuation.definition.array.access.shell"},"3":{"name":"variable.other.assignment.shell"},"4":{"name":"constant.numeric.shell constant.numeric.integer.shell"},"5":{"name":"punctuation.definition.array.access.shell"},"6":{"name":"keyword.operator.assignment.shell"},"7":{"name":"keyword.operator.assignment.compound.shell"},"8":{"name":"keyword.operator.assignment.compound.shell"}},"end":"(?=[\\\\n\\\\&);\`{|}]|[\\\\t ]*#|])(?<!\\\\\\\\)","endCaptures":{},"name":"meta.expression.assignment.shell","patterns":[{"include":"#comment"},{"include":"#string"},{"include":"#normal_assignment_statement"},{"begin":"(?<=[\\\\t ])(?![\\\\t ]|\\\\w+=)","beginCaptures":{},"end":"(?=[\\\\n\\\\&);\`{|}]|[\\\\t ]*#|])(?<!\\\\\\\\)","endCaptures":{},"name":"meta.statement.command.env.shell","patterns":[{"include":"#command_name_range"},{"include":"#line_continuation"},{"include":"#option"},{"include":"#argument"},{"include":"#string"}]},{"include":"#simple_unquoted"},{"include":"#normal_context"}]},"normal_context":{"patterns":[{"include":"#comment"},{"include":"#pipeline"},{"include":"#normal_statement_seperator"},{"include":"#misc_ranges"},{"include":"#boolean"},{"include":"#redirect_number"},{"include":"#numeric_literal"},{"include":"#string"},{"include":"#variable"},{"include":"#interpolation"},{"include":"#heredoc"},{"include":"#herestring"},{"include":"#redirection"},{"include":"#pathname"},{"include":"#floating_keyword"},{"include":"#support"},{"include":"#parenthese"}]},"normal_statement":{"begin":"(?!^[\\\\t ]*+$)(?:(?<=(?:^until| until|\\\\tuntil|^while| while|\\\\twhile|^elif| elif|\\\\telif|^else| else|\\\\telse|^then| then|\\\\tthen|^do| do|\\\\tdo|^if| if|\\\\tif) )|(?<=^|[!\\\\&(;\`{|]))[\\\\t ]*+(?!nocorrect\\\\W|nocorrect\\\\$|function\\\\W|function\\\\$|foreach\\\\W|foreach\\\\$|repeat\\\\W|repeat\\\\$|logout\\\\W|logout\\\\$|coproc\\\\W|coproc\\\\$|select\\\\W|select\\\\$|while\\\\W|while\\\\$|pushd\\\\W|pushd\\\\$|until\\\\W|until\\\\$|case\\\\W|case\\\\$|done\\\\W|done\\\\$|elif\\\\W|elif\\\\$|else\\\\W|else\\\\$|esac\\\\W|esac\\\\$|popd\\\\W|popd\\\\$|then\\\\W|then\\\\$|time\\\\W|time\\\\$|for\\\\W|for\\\\$|end\\\\W|end\\\\$|fi\\\\W|fi\\\\$|do\\\\W|do\\\\$|in\\\\W|in\\\\$|if\\\\W|if\\\\$)","beginCaptures":{},"end":"(?=[\\\\n\\\\&);\`{|}]|[\\\\t ]*#|])(?<!\\\\\\\\)","endCaptures":{},"name":"meta.statement.shell","patterns":[{"include":"#typical_statements"}]},"normal_statement_seperator":{"captures":{"1":{"name":"punctuation.terminator.statement.semicolon.shell"},"2":{"name":"punctuation.separator.statement.and.shell"},"3":{"name":"punctuation.separator.statement.or.shell"},"4":{"name":"punctuation.separator.statement.background.shell"}},"match":"(?:(?:(;)|(&&))|(\\\\|\\\\|))|(&)"},"numeric_literal":{"captures":{"1":{"name":"constant.numeric.shell constant.numeric.hex.shell"},"2":{"name":"constant.numeric.shell constant.numeric.octal.shell"},"3":{"name":"constant.numeric.shell constant.numeric.other.shell"},"4":{"name":"constant.numeric.shell constant.numeric.decimal.shell"},"5":{"name":"constant.numeric.shell constant.numeric.version.shell"},"6":{"name":"constant.numeric.shell constant.numeric.integer.shell"}},"match":"(?<=[\\\\t =]|^|[(\\\\[{])(?:(?:(?:(?:(?:(0[Xx]\\\\h+)|(0\\\\d+))|(\\\\d{1,2}#[0-9@-Z_a-z]+))|(-?\\\\d+\\\\.\\\\d+))|(-?\\\\d+(?:\\\\.\\\\d+)+))|(-?\\\\d+))(?=[\\\\t ]|$|[);}])"},"option":{"begin":"[\\\\t ]++(-)((?![\\\\n!#\\\\&()<>\\\\[{|]|$|[\\\\t ;]))","beginCaptures":{"1":{"name":"string.unquoted.argument.shell constant.other.option.dash.shell"},"2":{"name":"string.unquoted.argument.shell constant.other.option.shell"}},"contentName":"string.unquoted.argument constant.other.option","end":"(?=[\\\\t ])|(?=[\\\\n\\\\&);\`{|}]|[\\\\t ]*#|])(?<!\\\\\\\\)","endCaptures":{},"patterns":[{"include":"#option_context"}]},"option_context":{"patterns":[{"include":"#misc_ranges"},{"include":"#string"},{"include":"#variable"},{"include":"#interpolation"},{"include":"#heredoc"},{"include":"#herestring"},{"include":"#redirection"},{"include":"#pathname"},{"include":"#floating_keyword"},{"include":"#support"}]},"parenthese":{"patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.section.parenthese.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.parenthese.shell"}},"name":"meta.parenthese.group.shell","patterns":[{"include":"#initial_context"}]}]},"pathname":{"patterns":[{"match":"(?<=[:=\\\\s]|^)~","name":"keyword.operator.tilde.shell"},{"match":"[*?]","name":"keyword.operator.glob.shell"},{"begin":"([!*+?@])(\\\\()","beginCaptures":{"1":{"name":"keyword.operator.extglob.shell"},"2":{"name":"punctuation.definition.extglob.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.extglob.shell"}},"name":"meta.structure.extglob.shell","patterns":[{"include":"#initial_context"}]}]},"pipeline":{"patterns":[{"match":"(?<=^|[\\\\&;\\\\s])(time)(?=[\\\\&;\\\\s]|$)","name":"keyword.other.shell"},{"match":"[!|]","name":"keyword.operator.pipe.shell"}]},"redirect_fix":{"captures":{"1":{"name":"keyword.operator.redirect.shell"},"2":{"name":"string.unquoted.argument.shell"}},"match":"(>>?)[\\\\t ]*+([^\\\\t\\\\n \\"$\\\\&-);<>\\\\\\\\\`|]+)"},"redirect_number":{"captures":{"1":{"name":"keyword.operator.redirect.stdout.shell"},"2":{"name":"keyword.operator.redirect.stderr.shell"},"3":{"name":"keyword.operator.redirect.$3.shell"}},"match":"(?<=[\\\\t ])(?:(1)|(2)|(\\\\d+))(?=>)"},"redirection":{"patterns":[{"begin":"[<>]\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.string.end.shell"}},"name":"string.interpolated.process-substitution.shell","patterns":[{"include":"#initial_context"}]},{"match":"(?<![<>])(&>|\\\\d*>&\\\\d*|\\\\d*(>>|[<>])|\\\\d*<&|\\\\d*<>)(?![<>])","name":"keyword.operator.redirect.shell"}]},"regex_comparison":{"match":"=~","name":"keyword.operator.logical.regex.shell"},"regexp":{"patterns":[{"match":".+"}]},"simple_options":{"captures":{"0":{"patterns":[{"captures":{"1":{"name":"string.unquoted.argument.shell constant.other.option.dash.shell"},"2":{"name":"string.unquoted.argument.shell constant.other.option.shell"}},"match":"[\\\\t ]++(-)(\\\\w+)"}]}},"match":"(?:[\\\\t ]++-\\\\w+)*"},"simple_unquoted":{"match":"[^\\\\t\\\\n \\"$\\\\&-);<>\\\\\\\\\`|]","name":"string.unquoted.shell"},"special_expansion":{"match":"!|:[-=?]?|[*@]|##?|%%|[%/]","name":"keyword.operator.expansion.shell"},"start_of_command":{"match":"[\\\\t ]*+(?![\\\\n!#\\\\&()<>\\\\[{|]|$|[\\\\t ;])(?!nocorrect |nocorrect\\\\t|nocorrect$|readonly |readonly\\\\t|readonly$|function |function\\\\t|function$|foreach |foreach\\\\t|foreach$|coproc |coproc\\\\t|coproc$|logout |logout\\\\t|logout$|export |export\\\\t|export$|select |select\\\\t|select$|repeat |repeat\\\\t|repeat$|pushd |pushd\\\\t|pushd$|until |until\\\\t|until$|while |while\\\\t|while$|local |local\\\\t|local$|case |case\\\\t|case$|done |done\\\\t|done$|elif |elif\\\\t|elif$|else |else\\\\t|else$|esac |esac\\\\t|esac$|popd |popd\\\\t|popd$|then |then\\\\t|then$|time |time\\\\t|time$|for |for\\\\t|for$|end |end\\\\t|end$|fi |fi\\\\t|fi$|do |do\\\\t|do$|in |in\\\\t|in$|if |if\\\\t|if$)(?!\\\\\\\\\\\\n?$)"},"string":{"patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.shell"},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.shell"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.shell"}},"name":"string.quoted.single.shell"},{"begin":"\\\\$?\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.shell"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.shell"}},"name":"string.quoted.double.shell","patterns":[{"match":"\\\\\\\\[\\\\n\\"$\\\\\\\\\`]","name":"constant.character.escape.shell"},{"include":"#variable"},{"include":"#interpolation"}]},{"begin":"\\\\$'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.shell"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.shell"}},"name":"string.quoted.single.dollar.shell","patterns":[{"match":"\\\\\\\\['\\\\\\\\abefnrtv]","name":"constant.character.escape.ansi-c.shell"},{"match":"\\\\\\\\[0-9]{3}\\"","name":"constant.character.escape.octal.shell"},{"match":"\\\\\\\\x\\\\h{2}\\"","name":"constant.character.escape.hex.shell"},{"match":"\\\\\\\\c.\\"","name":"constant.character.escape.control-char.shell"}]}]},"subshell_dollar":{"patterns":[{"begin":"\\\\$\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.subshell.single.shell"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.subshell.single.shell"}},"name":"meta.scope.subshell","patterns":[{"include":"#parenthese"},{"include":"#initial_context"}]}]},"support":{"patterns":[{"match":"(?<=^|[\\\\&;\\\\s])[.:](?=[\\\\&;\\\\s]|$)","name":"support.function.builtin.shell"}]},"typical_statements":{"patterns":[{"include":"#assignment_statement"},{"include":"#case_statement"},{"include":"#for_statement"},{"include":"#while_statement"},{"include":"#function_definition"},{"include":"#command_statement"},{"include":"#line_continuation"},{"include":"#arithmetic_double"},{"include":"#normal_context"}]},"variable":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.variable.shell variable.parameter.positional.all.shell"},"2":{"name":"variable.parameter.positional.all.shell"}},"match":"(\\\\$)(@(?!\\\\w))"},{"captures":{"1":{"name":"punctuation.definition.variable.shell variable.parameter.positional.shell"},"2":{"name":"variable.parameter.positional.shell"}},"match":"(\\\\$)([0-9](?!\\\\w))"},{"captures":{"1":{"name":"punctuation.definition.variable.shell variable.language.special.shell"},"2":{"name":"variable.language.special.shell"}},"match":"(\\\\$)([-!#$*0?_](?!\\\\w))"},{"begin":"(\\\\$)(\\\\{)[\\\\t ]*+(?=\\\\d)","beginCaptures":{"1":{"name":"punctuation.definition.variable.shell variable.parameter.positional.shell"},"2":{"name":"punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell variable.parameter.positional.shell"}},"contentName":"meta.parameter-expansion","end":"}","endCaptures":{"0":{"name":"punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell variable.parameter.positional.shell"}},"patterns":[{"include":"#special_expansion"},{"include":"#array_access_inline"},{"match":"[0-9]+","name":"variable.parameter.positional.shell"},{"match":"(?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w)","name":"variable.other.normal.shell"},{"include":"#variable"},{"include":"#string"}]},{"begin":"(\\\\$)(\\\\{)","beginCaptures":{"1":{"name":"punctuation.definition.variable.shell"},"2":{"name":"punctuation.section.bracket.curly.variable.begin.shell punctuation.definition.variable.shell"}},"contentName":"meta.parameter-expansion","end":"}","endCaptures":{"0":{"name":"punctuation.section.bracket.curly.variable.end.shell punctuation.definition.variable.shell"}},"patterns":[{"include":"#special_expansion"},{"include":"#array_access_inline"},{"match":"(?<!\\\\w)[-0-9A-Z_a-z]+(?!\\\\w)","name":"variable.other.normal.shell"},{"include":"#variable"},{"include":"#string"}]},{"captures":{"1":{"name":"punctuation.definition.variable.shell variable.other.normal.shell"},"2":{"name":"variable.other.normal.shell"}},"match":"(\\\\$)(\\\\w+(?!\\\\w))"}]},"while_statement":{"patterns":[{"begin":"\\\\b(while)\\\\b","beginCaptures":{"1":{"name":"keyword.control.while.shell"}},"end":"(?=[\\\\n\\\\&);\`{|}]|[\\\\t ]*#|])(?<!\\\\\\\\)","endCaptures":{},"name":"meta.while.shell","patterns":[{"include":"#line_continuation"},{"include":"#math_operators"},{"include":"#option"},{"include":"#simple_unquoted"},{"include":"#normal_context"},{"include":"#string"}]}]}},"scopeName":"source.shell","aliases":["bash","sh","shell","zsh"]}`))];export{e as default};
|
|
2
|
+
//# sourceMappingURL=shellscript-CLZ0U2zV.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e}from"./dist-DeW2Y1R5.js";var t=e(`shield`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]);export{t};
|
|
2
|
+
//# sourceMappingURL=shield-CtXNUA0i.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e}from"./dist-DeW2Y1R5.js";var t=e(`history`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]]),n=e(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]);export{t as n,n as t};
|
|
2
|
+
//# sourceMappingURL=shield-alert-B9jCWcKW.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{p as t,u as n}from"./dist-DeW2Y1R5.js";import{a as r,c as i,l as a,o,s,t as c}from"./store-BvtFdlGX.js";import{h as l}from"./display-CfO7rTuF.js";import{t as u}from"./api-CIIVBtAV.js";import{i as d,r as f,t as p}from"./tabs-jZgNvNHr.js";import{a as m,c as h,i as g,n as _,o as v,r as y,s as b,t as x}from"./warehouse-BanzOanY.js";import{t as S}from"./chevron-right-iljytE0x.js";import{t as C}from"./eye-BAP6fHrX.js";import{t as w}from"./gauge-BIODY-BQ.js";import{t as T}from"./hourglass-txu4ax6n.js";import{t as E}from"./lock-BW8MPKw_.js";import{t as D}from"./rocket-BmO1qSu-.js";import{n as O}from"./workflow-marker-Cf3Hf2fN.js";import{t as k}from"./button-Do6Z3vvn.js";import{t as A}from"./badge-DqJRtj_p.js";import{n as j}from"./agent-name-CTZBrSD9.js";import{t as M}from"./input-CsTB6jIx.js";import{t as N}from"./crate-agent-H6S7-B9T.js";import{t as P}from"./stats-V9Z-GxUd.js";var F=e(t(),1),I=n();function L({incident:e}){let[t,n]=(0,F.useState)(``),[r,i]=(0,F.useState)(!1),[a,o]=(0,F.useState)(``);async function s(){i(!0),o(``);try{await u(`POST`,`/shipping/incidents/${encodeURIComponent(e.incidentId)}/abandon`,{reason:t}),await c.getState().openShipping()}catch(e){o(e.message)}finally{i(!1)}}return(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,I.jsxs)(A,{variant:`destructive`,title:`${e.remote} lane ${e.laneKey}, incident ${e.state}`,children:[e.mainFailurePolicy===`advisory`?`advisory: red main`:`lane stopped: red main`,` `,e.sha.slice(0,12),`, incident `,e.incidentId]}),(0,I.jsx)(M,{"aria-label":`Abandon reason for ${e.incidentId}`,placeholder:`Reason to abandon incident`,value:t,maxLength:1e3,onChange:e=>n(e.target.value)}),(0,I.jsx)(k,{size:`sm`,variant:`outline`,disabled:r||!t.trim(),onClick:s,children:`Abandon incident`}),(0,I.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.mainFailurePolicy===`advisory`?`Lands continue. Deployment waits for a successful product check.`:`Releases the lane stop. Red CI still blocks deployment.`}),a&&(0,I.jsx)(`span`,{role:`alert`,children:a})]})}function R({incidents:e}){return e?.length?(0,I.jsx)(`div`,{role:`alert`,"aria-label":`Red main`,className:`space-y-1.5`,children:e.map(e=>(0,I.jsx)(L,{incident:e},e.incidentId))}):null}var z={implementation:{label:`Implementation`,icon:v,hue:250},review:{label:`Review`,icon:C,hue:305},gates:{label:`Gates`,icon:g,hue:85},landing:{label:`Landing`,icon:m,hue:50},main:{label:`On main`,icon:x,hue:150},deploy:{label:`Deploy`,icon:D,hue:205},validated:{label:`Validated`,icon:h,hue:170}},B=new Intl.NumberFormat(void 0,{notation:`compact`,maximumFractionDigits:1}),V={done:`Done`,cd:`Relay CD`,steward:`Steward`,landing:`Relay landing`},H={builder:`Owner`,reviewer:`No reviewer yet · owner`,closer:`To close: owner`};function U({responsible:e}){let t=c(e=>e.agentsById);return(0,I.jsxs)(`span`,{"data-testid":`shipping-card-responsible`,className:`flex min-w-0 items-center gap-1`,children:[(0,I.jsx)(`span`,{className:`shrink-0`,children:e.kind===`relay`?V[e.role]??V.landing:H[e.role]??`Owner`}),e.id?(0,I.jsx)(j,{target:e.id,agentsById:t,className:`font-medium`}):e.kind===`owner`&&(0,I.jsx)(`span`,{className:`truncate text-muted-foreground`,children:`unassigned`})]})}var W=e=>e.kind===`relay`?e.role===`done`?`done`:`relay`:`agent`;function G({card:e,holder:t}){let{responsible:n}=e;if(n.kind===`relay`||!t){let e=n.kind===`relay`?n.role===`done`?h:b:_;return(0,I.jsxs)(`div`,{className:`mt-1.5 flex min-w-0 items-center gap-1 text-xs`,title:n.id,children:[(0,I.jsx)(e,{className:`h-3.5 w-3.5 shrink-0`,style:{color:`var(--crate)`},"aria-hidden":!0}),(0,I.jsx)(U,{responsible:n})]})}return(0,I.jsxs)(`div`,{className:`mt-1 text-xs`,children:[(0,I.jsx)(N,{holder:t,prefix:t.id===n.id&&n.role===`reviewer`?`Review:`:void 0}),n.kind===`owner`&&(0,I.jsx)(`div`,{className:`pl-5 text-[11px] text-muted-foreground`,title:n.id,children:(0,I.jsx)(U,{responsible:n})})]})}function K({card:e,holder:t,now:n,maxTokens:i,project:a}){let o=c(e=>e.openTaskDetailById),s=c(t=>t.workflowLiveIndex.byTask[e.taskId]),u=e.tokens?.total??0;return(0,I.jsxs)(`li`,{"data-testid":`shipping-card-${e.taskId}`,"data-owner":W(e.responsible),"data-live":t?.live===!0,"data-workflow":s?s.kind:void 0,onClick:()=>o(e.taskId),className:`ship-crate cursor-pointer rounded-md px-2.5 py-2 text-sm motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in-from-left-3 motion-safe:duration-300`,children:[(0,I.jsxs)(`div`,{className:`flex min-w-0 items-baseline gap-1.5`,children:[(0,I.jsxs)(`span`,{className:`shrink-0 rounded bg-muted px-1 font-mono text-[11px] tabular-nums text-muted-foreground`,children:[`T`,e.taskId]}),e.signals.reviewHold&&(0,I.jsx)(`span`,{"data-testid":`shipping-card-review-hold`,role:`img`,"aria-label":`Review hold`,title:`Review hold: a complete delivery parks for review`,className:`shrink-0 self-center`,children:(0,I.jsx)(E,{className:`h-3 w-3`,style:{color:`var(--crate)`},"aria-hidden":!0})}),(0,I.jsx)(`button`,{type:`button`,className:`truncate rounded text-left font-medium hover:underline focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,title:e.title,children:e.title})]}),s&&(0,I.jsxs)(`div`,{"data-testid":`shipping-card-workflow`,className:`mt-1 flex min-w-0 items-center gap-1 text-[11px] font-medium`,children:[(0,I.jsx)(O,{workflow:s.workflow,step:s.step}),(0,I.jsx)(`span`,{className:`truncate`,title:`Workflow run ${s.runId}`,children:r(s)})]}),e.signals.staleOwnerGone&&(0,I.jsxs)(`div`,{"data-testid":`shipping-card-stale`,className:`mt-1 flex items-center gap-1 text-[11px] text-tone-warning-fg`,title:`In progress or blocked, no change for 7 days, and its builder agent is gone`,children:[(0,I.jsx)(T,{className:`h-3 w-3 shrink-0`,"aria-hidden":!0}),(0,I.jsx)(`span`,{className:`truncate`,children:`Idle 7d+, builder gone`})]}),(0,I.jsx)(G,{card:e,holder:t}),(0,I.jsxs)(`div`,{className:`mt-1.5 flex items-center gap-2`,title:`Tokens spent on this Task`,children:[(0,I.jsx)(`div`,{className:`ship-meter h-1.5 min-w-0 flex-1 overflow-hidden rounded-full`,"aria-hidden":!0,children:(0,I.jsx)(`span`,{className:`block h-full rounded-full`,style:{width:`${i&&u?Math.max(4,u/i*100):0}%`}})}),(0,I.jsx)(`span`,{className:`shrink-0 font-mono text-xs tabular-nums text-muted-foreground`,children:e.tokens?B.format(e.tokens.total):`—`})]}),(0,I.jsxs)(`div`,{className:`mt-1 flex items-center justify-between gap-2 text-[11px] text-muted-foreground`,title:`In ${z[e.stage].label} since ${new Date(e.stageSince).toLocaleString()}`,children:[(0,I.jsxs)(`span`,{children:[`In stage `,l(n,e.stageSince)]}),a&&(0,I.jsx)(`span`,{className:`truncate`,"data-testid":`shipping-card-project`,children:a})]})]})}function q({ci:e,all:t}){return e.length?(0,I.jsxs)(`div`,{role:`group`,"aria-label":`CI`,className:`flex flex-wrap items-center gap-1.5`,children:[(0,I.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,"aria-hidden":!0,children:`CI`}),e.map(e=>(0,I.jsxs)(A,{variant:e.status===`failing`?`destructive`:`secondary`,title:`CI workflow ${e.workflow} on ${e.branch}, observed ${new Date(e.observedAt).toLocaleString()}`,children:[(0,I.jsx)(`span`,{className:`ship-lamp h-2 w-2 shrink-0 rounded-full`,"data-status":e.status,"aria-hidden":!0}),t?`${e.repository} `:``,e.workflow,` on `,e.branch,`: `,e.status]},`${e.repository}:${e.branch}:${e.workflow}`))]}):(0,I.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t?`No CI watches`:`No CI watch for this project`})}function J({board:e}){let t=e.projectLanes.filter(e=>e.gates.length>0);return t.length?(0,I.jsx)(`ul`,{className:`mb-2 space-y-1`,"data-testid":`shipping-gate-names`,children:t.map(t=>(0,I.jsxs)(`li`,{className:`flex flex-wrap gap-1`,children:[e.all&&(0,I.jsx)(`span`,{className:`w-full truncate text-[11px] text-muted-foreground`,children:t.title}),t.gates.map(e=>(0,I.jsx)(A,{variant:`outline`,className:`px-1.5 py-0 font-mono text-[11px] font-normal`,children:e},e))]},t.projectId))}):null}function Y({label:e,value:t,testId:n}){return(0,I.jsxs)(`div`,{"data-testid":n,className:`ship-hud min-w-0 rounded-md px-2.5 py-1.5`,children:[(0,I.jsx)(`div`,{className:`truncate text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:e}),(0,I.jsx)(`div`,{className:`font-mono text-lg font-semibold tabular-nums leading-tight`,children:t})]})}function X({cards:e,agentsById:t,now:n}){let r=i(e,t,n);return(0,I.jsxs)(`div`,{className:`grid grid-cols-3 gap-2 sm:grid-cols-5`,"aria-label":`Board totals`,children:[(0,I.jsx)(Y,{testId:`shipping-hud-in-flight`,label:`In flight`,value:String(r.inFlight)}),(0,I.jsx)(Y,{testId:`shipping-hud-agents`,label:`With agents`,value:String(r.withAgents)}),(0,I.jsx)(Y,{testId:`shipping-hud-stale`,label:`No live agent`,value:String(r.withoutAgent)}),(0,I.jsx)(Y,{testId:`shipping-hud-relay`,label:`With Relay`,value:String(r.withRelay)}),(0,I.jsx)(Y,{testId:`shipping-hud-tokens`,label:`Tokens spent`,value:B.format(r.tokens)})]})}function Z({stage:e,cards:t,holders:n,board:r,projectTitles:i,now:a,maxTokens:s}){let[c,l]=(0,F.useState)(!1),u=o.includes(e),d=e=>u?!n.get(e.taskId)?.live:e.signals.staleOwnerGone===!0,f=t.filter(e=>!d(e)),p=t.filter(d),{label:m,icon:h,hue:g}=z[e],_=e=>(0,I.jsx)(K,{card:e,holder:n.get(e.taskId)??null,now:a,maxTokens:s,project:r.all?i.get(e.projectId??``):void 0},e.taskId);return(0,I.jsxs)(`section`,{"data-testid":`shipping-lane-${e}`,"data-empty":t.length===0,"aria-label":m,className:`ship-lane min-w-0 rounded-lg p-2`,style:{"--stage-hue":g},children:[(0,I.jsxs)(`h3`,{className:`flex items-center gap-1.5 px-0.5 text-sm font-semibold`,children:[(0,I.jsx)(`span`,{className:`ship-lane-badge grid h-6 w-6 shrink-0 place-items-center rounded-md`,children:(0,I.jsx)(h,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),(0,I.jsx)(`span`,{className:`truncate`,children:m}),(0,I.jsx)(`span`,{"data-testid":`shipping-lane-count-${e}`,className:`ml-auto rounded-full bg-background/70 px-1.5 font-mono text-xs tabular-nums text-muted-foreground`,children:f.length})]}),(0,I.jsx)(`div`,{className:`ship-belt my-2`,"aria-hidden":!0}),e===`gates`&&(0,I.jsx)(J,{board:r}),f.length>0&&(0,I.jsx)(`ul`,{className:`space-y-1.5`,children:f.map(_)}),t.length===0&&(0,I.jsx)(`p`,{className:`max-lg:hidden rounded-md border border-dashed border-border/70 px-2 py-3 text-center text-[11px] text-muted-foreground`,children:`Bay clear`}),p.length>0&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`button`,{type:`button`,"data-testid":`shipping-stale-toggle-${e}`,"aria-expanded":c,onClick:()=>l(!c),className:`mt-1.5 flex min-h-8 w-full items-center gap-1 rounded-md px-1.5 text-left text-xs text-muted-foreground hover:bg-background/60 hover:text-foreground`,children:[(0,I.jsx)(S,{className:`h-3.5 w-3.5 shrink-0 ${c?`rotate-90`:``}`,"aria-hidden":!0}),p.length,` `,u?`without a live agent`:`idle, builder gone`]}),c&&(0,I.jsx)(`ul`,{"data-testid":`shipping-stale-${e}`,className:`mt-1 space-y-1.5 opacity-75`,children:p.map(_)})]})]})}function Q({board:e,agentsById:t,now:n}){let r=new Map(e.projectLanes.map(e=>[e.projectId,e.title])),a=new Map(e.tasks.map(e=>[e.taskId,s(e,t,n)])),{maxTokens:o}=i(e.tasks,t,n);return(0,I.jsx)(`div`,{className:`overflow-x-auto pb-2`,children:(0,I.jsx)(`div`,{className:`ship-floor grid gap-2 rounded-xl border border-border p-2 lg:min-w-[calc(var(--lanes)*9.5rem)] lg:grid-cols-[repeat(var(--lanes),minmax(0,1fr))]`,style:{"--lanes":e.lanes.length},children:e.lanes.map(t=>(0,I.jsx)(Z,{stage:t,cards:e.tasks.filter(e=>e.stage===t),holders:a,board:e,projectTitles:r,now:n,maxTokens:o},t))})})}function $(){let e=c(e=>e.shippingBoard),t=c(e=>e.agents),n=c(e=>e.agentsById),r=Date.now(),i=e?a(e,t,r):null,o=c(e=>e.shippingLoading),s=c(e=>e.shippingError),l=c(e=>e.setShippingProject),u=c(e=>e.shippingTab),m=c(e=>e.setShippingTab),h=c(e=>e.shippingStatsProjectId),g=c(e=>e.setShippingStatsProject),_=c(e=>e.setAnalyticsTab),v=c(e=>e.switchView);return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(y,{className:`h-5 w-5 text-muted-foreground`}),(0,I.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Shipping`})]}),(0,I.jsx)(p,{value:u,onValueChange:e=>m(e),children:(0,I.jsxs)(f,{children:[(0,I.jsx)(d,{value:`realtime`,children:`Realtime`}),(0,I.jsx)(d,{value:`stats`,children:`Statistics`})]})}),(0,I.jsxs)(`button`,{type:`button`,className:`ml-auto inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground`,onClick:()=>{_(`gates`),v(`analytics`)},children:[(0,I.jsx)(w,{className:`h-3.5 w-3.5`}),` Gate statistics`]}),i&&i.projects.length>0&&(0,I.jsxs)(`select`,{"aria-label":`Project`,className:`h-8 max-w-full min-w-0 rounded-md border border-border bg-background px-2 text-sm`,value:u===`stats`?h:i.all?`*`:i.projectId??``,onChange:e=>u===`stats`?g(e.target.value):l(e.target.value),children:[u===`stats`?(0,I.jsx)(`option`,{value:``,children:`All projects`}):(0,I.jsx)(`option`,{value:`*`,children:`All projects`}),i.projects.map(e=>(0,I.jsx)(`option`,{value:e.id,children:u===`stats`?e.title:`${e.title} (${e.inFlight})`},e.id))]}),u===`realtime`&&i&&(0,I.jsx)(q,{ci:i.ci,all:i.all===!0}),u===`realtime`&&i&&(0,I.jsx)(R,{incidents:i.redMain})]}),u===`stats`&&(0,I.jsx)(P,{}),u===`realtime`&&s&&(0,I.jsxs)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive`,children:[`Could not load the board: `,s]}),u===`realtime`&&!i&&o&&(0,I.jsx)(`div`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`Loading the board…`}),u===`realtime`&&i&&!i.projectId&&!i.all&&(0,I.jsx)(`div`,{className:`rounded-md border border-border px-3 py-12 text-center text-sm text-muted-foreground`,children:`No project has Tasks in progress.`}),u===`realtime`&&i&&(i.projectId||i.all)&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(X,{cards:i.tasks,agentsById:n,now:r}),(0,I.jsx)(Q,{board:i,agentsById:n,now:r})]})]})}export{$ as ShippingView};
|
|
2
|
+
//# sourceMappingURL=shipping-Bu8p1gEw.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={"24h":1,"7d":7,"30d":30},t=Object.keys(e);function n(t){return e[t]+1}function r(e){if(e<1e3)return`${Math.round(e)}ms`;let t=e/1e3;if(t<60)return`${Math.round(t)}s`;let n=Math.round(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);if(r<48)return n%60?`${r}h ${n%60}m`:`${r}h`;let i=Math.floor(r/24);return r%24?`${i}d ${r%24}h`:`${i}d`}function i(e){if(e===null)return`—`;let t=e*100;return`${t>0&&t<1?`<1`:Math.round(t)}%`}export{e as a,n as i,i as n,r,t};
|
|
2
|
+
//# sourceMappingURL=shipping-stats-BiMTsA4A.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=Object.freeze(JSON.parse(`{"colors":{"activityBar.background":"#222222","activityBarBadge.background":"#1D978D","button.background":"#0077B5","button.foreground":"#FFF","button.hoverBackground":"#005076","debugExceptionWidget.background":"#141414","debugExceptionWidget.border":"#FFF","debugToolBar.background":"#141414","editor.background":"#222222","editor.foreground":"#E6E6E6","editor.inactiveSelectionBackground":"#3a3d41","editor.lineHighlightBackground":"#141414","editor.lineHighlightBorder":"#141414","editor.selectionHighlightBackground":"#add6ff26","editorIndentGuide.activeBackground":"#707070","editorIndentGuide.background":"#404040","editorLink.activeForeground":"#0077B5","editorSuggestWidget.selectedBackground":"#0077B5","extensionButton.prominentBackground":"#0077B5","extensionButton.prominentForeground":"#FFF","extensionButton.prominentHoverBackground":"#005076","focusBorder":"#0077B5","gitDecoration.addedResourceForeground":"#ECB22E","gitDecoration.conflictingResourceForeground":"#FFF","gitDecoration.deletedResourceForeground":"#FFF","gitDecoration.ignoredResourceForeground":"#877583","gitDecoration.modifiedResourceForeground":"#ECB22E","gitDecoration.untrackedResourceForeground":"#ECB22E","input.placeholderForeground":"#7A7A7A","list.activeSelectionBackground":"#222222","list.dropBackground":"#383b3d","list.focusBackground":"#0077B5","list.hoverBackground":"#222222","menu.background":"#252526","menu.foreground":"#E6E6E6","notificationLink.foreground":"#0077B5","settings.numberInputBackground":"#292929","settings.textInputBackground":"#292929","sideBarSectionHeader.background":"#222222","sideBarTitle.foreground":"#E6E6E6","statusBar.background":"#222222","statusBar.debuggingBackground":"#1D978D","statusBar.noFolderBackground":"#141414","textLink.activeForeground":"#0077B5","textLink.foreground":"#0077B5","titleBar.activeBackground":"#222222","titleBar.activeForeground":"#E6E6E6","titleBar.inactiveBackground":"#222222","titleBar.inactiveForeground":"#7A7A7A"},"displayName":"Slack Dark","name":"slack-dark","tokenColors":[{"scope":["meta.embedded","source.groovy.embedded"],"settings":{"foreground":"#D4D4D4"}},{"scope":"emphasis","settings":{"fontStyle":"italic"}},{"scope":"strong","settings":{"fontStyle":"bold"}},{"scope":"header","settings":{"foreground":"#000080"}},{"scope":"comment","settings":{"foreground":"#6A9955"}},{"scope":"constant.language","settings":{"foreground":"#569cd6"}},{"scope":["constant.numeric"],"settings":{"foreground":"#b5cea8"}},{"scope":"constant.regexp","settings":{"foreground":"#646695"}},{"scope":"entity.name.tag","settings":{"foreground":"#569cd6"}},{"scope":"entity.name.tag.css","settings":{"foreground":"#d7ba7d"}},{"scope":"entity.other.attribute-name","settings":{"foreground":"#9cdcfe"}},{"scope":["entity.other.attribute-name.class.css","entity.other.attribute-name.class.mixin.css","entity.other.attribute-name.id.css","entity.other.attribute-name.parent-selector.css","entity.other.attribute-name.pseudo-class.css","entity.other.attribute-name.pseudo-element.css","source.css.less entity.other.attribute-name.id","entity.other.attribute-name.attribute.scss","entity.other.attribute-name.scss"],"settings":{"foreground":"#d7ba7d"}},{"scope":"invalid","settings":{"foreground":"#f44747"}},{"scope":"markup.underline","settings":{"fontStyle":"underline"}},{"scope":"markup.bold","settings":{"fontStyle":"bold","foreground":"#569cd6"}},{"scope":"markup.heading","settings":{"fontStyle":"bold","foreground":"#569cd6"}},{"scope":"markup.italic","settings":{"fontStyle":"italic"}},{"scope":"markup.inserted","settings":{"foreground":"#b5cea8"}},{"scope":"markup.deleted","settings":{"foreground":"#ce9178"}},{"scope":"markup.changed","settings":{"foreground":"#569cd6"}},{"scope":"punctuation.definition.quote.begin.markdown","settings":{"foreground":"#6A9955"}},{"scope":"punctuation.definition.list.begin.markdown","settings":{"foreground":"#6796e6"}},{"scope":"markup.inline.raw","settings":{"foreground":"#ce9178"}},{"scope":"punctuation.definition.tag","settings":{"foreground":"#808080"}},{"scope":"meta.preprocessor","settings":{"foreground":"#569cd6"}},{"scope":"meta.preprocessor.string","settings":{"foreground":"#ce9178"}},{"scope":"meta.preprocessor.numeric","settings":{"foreground":"#b5cea8"}},{"scope":"meta.structure.dictionary.key.python","settings":{"foreground":"#9cdcfe"}},{"scope":"meta.diff.header","settings":{"foreground":"#569cd6"}},{"scope":"storage","settings":{"foreground":"#569cd6"}},{"scope":"storage.type","settings":{"foreground":"#569cd6"}},{"scope":"storage.modifier","settings":{"foreground":"#569cd6"}},{"scope":"string","settings":{"foreground":"#ce9178"}},{"scope":"string.tag","settings":{"foreground":"#ce9178"}},{"scope":"string.value","settings":{"foreground":"#ce9178"}},{"scope":"string.regexp","settings":{"foreground":"#d16969"}},{"scope":["punctuation.definition.template-expression.begin","punctuation.definition.template-expression.end","punctuation.section.embedded"],"settings":{"foreground":"#569cd6"}},{"scope":["meta.template.expression"],"settings":{"foreground":"#d4d4d4"}},{"scope":["support.type.vendored.property-name","support.type.property-name","variable.css","variable.scss","variable.other.less","source.coffee.embedded"],"settings":{"foreground":"#9cdcfe"}},{"scope":"keyword","settings":{"foreground":"#569cd6"}},{"scope":"keyword.control","settings":{"foreground":"#569cd6"}},{"scope":"keyword.operator","settings":{"foreground":"#d4d4d4"}},{"scope":["keyword.operator.new","keyword.operator.expression","keyword.operator.cast","keyword.operator.sizeof","keyword.operator.instanceof","keyword.operator.logical.python"],"settings":{"foreground":"#569cd6"}},{"scope":"keyword.other.unit","settings":{"foreground":"#b5cea8"}},{"scope":["punctuation.section.embedded.begin.php","punctuation.section.embedded.end.php"],"settings":{"foreground":"#569cd6"}},{"scope":"support.function.git-rebase","settings":{"foreground":"#9cdcfe"}},{"scope":"constant.sha.git-rebase","settings":{"foreground":"#b5cea8"}},{"scope":["storage.modifier.import.java","variable.language.wildcard.java","storage.modifier.package.java"],"settings":{"foreground":"#d4d4d4"}},{"scope":"variable.language","settings":{"foreground":"#569cd6"}},{"scope":["entity.name.function","support.function","support.constant.handlebars"],"settings":{"foreground":"#DCDCAA"}},{"scope":["meta.return-type","support.class","support.type","entity.name.type","entity.name.class","storage.type.numeric.go","storage.type.byte.go","storage.type.boolean.go","storage.type.string.go","storage.type.uintptr.go","storage.type.error.go","storage.type.rune.go","storage.type.cs","storage.type.generic.cs","storage.type.modifier.cs","storage.type.variable.cs","storage.type.annotation.java","storage.type.generic.java","storage.type.java","storage.type.object.array.java","storage.type.primitive.array.java","storage.type.primitive.java","storage.type.token.java","storage.type.groovy","storage.type.annotation.groovy","storage.type.parameters.groovy","storage.type.generic.groovy","storage.type.object.array.groovy","storage.type.primitive.array.groovy","storage.type.primitive.groovy"],"settings":{"foreground":"#4EC9B0"}},{"scope":["meta.type.cast.expr","meta.type.new.expr","support.constant.math","support.constant.dom","support.constant.json","entity.other.inherited-class"],"settings":{"foreground":"#4EC9B0"}},{"scope":"keyword.control","settings":{"foreground":"#C586C0"}},{"scope":["variable","meta.definition.variable.name","support.variable","entity.name.variable"],"settings":{"foreground":"#9CDCFE"}},{"scope":["meta.object-literal.key"],"settings":{"foreground":"#9CDCFE"}},{"scope":["support.constant.property-value","support.constant.font-name","support.constant.media-type","support.constant.media","constant.other.color.rgb-value","constant.other.rgb-value","support.constant.color"],"settings":{"foreground":"#CE9178"}},{"scope":["punctuation.definition.group.regexp","punctuation.definition.group.assertion.regexp","punctuation.definition.character-class.regexp","punctuation.character.set.begin.regexp","punctuation.character.set.end.regexp","keyword.operator.negation.regexp","support.other.parenthesis.regexp"],"settings":{"foreground":"#CE9178"}},{"scope":["constant.character.character-class.regexp","constant.other.character-class.set.regexp","constant.other.character-class.regexp","constant.character.set.regexp"],"settings":{"foreground":"#d16969"}},{"scope":["keyword.operator.or.regexp","keyword.control.anchor.regexp"],"settings":{"foreground":"#DCDCAA"}},{"scope":"keyword.operator.quantifier.regexp","settings":{"foreground":"#d7ba7d"}},{"scope":"constant.character","settings":{"foreground":"#569cd6"}},{"scope":"constant.character.escape","settings":{"foreground":"#d7ba7d"}},{"scope":"token.info-token","settings":{"foreground":"#6796e6"}},{"scope":"token.warn-token","settings":{"foreground":"#cd9731"}},{"scope":"token.error-token","settings":{"foreground":"#f44747"}},{"scope":"token.debug-token","settings":{"foreground":"#b267e6"}}],"type":"dark"}`));export{e as default};
|
|
2
|
+
//# sourceMappingURL=slack-dark-DnToyrRv.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=Object.freeze(JSON.parse(`{"colors":{"activityBar.background":"#161F26","activityBar.dropBackground":"#FFF","activityBar.foreground":"#FFF","activityBarBadge.background":"#8AE773","activityBarBadge.foreground":"#FFF","badge.background":"#8AE773","breadcrumb.focusForeground":"#475663","breadcrumb.foreground":"#161F26","button.background":"#475663","button.foreground":"#FFF","button.hoverBackground":"#161F26","debugExceptionWidget.background":"#AED4FB","debugExceptionWidget.border":"#161F26","debugToolBar.background":"#161F26","dropdown.background":"#FFF","dropdown.border":"#DCDEDF","dropdown.foreground":"#DCDEDF","dropdown.listBackground":"#FFF","editor.background":"#FFF","editor.findMatchBackground":"#AED4FB","editor.foreground":"#000","editor.lineHighlightBackground":"#EEEEEE","editor.selectionBackground":"#AED4FB","editor.wordHighlightBackground":"#AED4FB","editor.wordHighlightStrongBackground":"#EEEEEE","editorActiveLineNumber.foreground":"#475663","editorGroup.emptyBackground":"#2D3E4C","editorGroup.focusedEmptyBorder":"#2D3E4C","editorGroupHeader.tabsBackground":"#2D3E4C","editorHint.border":"#F9F9F9","editorHint.foreground":"#F9F9F9","editorIndentGuide.activeBackground":"#dbdbdb","editorIndentGuide.background":"#F3F3F3","editorLineNumber.foreground":"#b9b9b9","editorMarkerNavigation.background":"#F9F9F9","editorMarkerNavigationError.background":"#F44C5E","editorMarkerNavigationInfo.background":"#6182b8","editorMarkerNavigationWarning.background":"#F6B555","editorPane.background":"#2D3E4C","editorSuggestWidget.foreground":"#2D3E4C","editorSuggestWidget.highlightForeground":"#2D3E4C","editorSuggestWidget.selectedBackground":"#b9b9b9","editorWidget.background":"#F9F9F9","editorWidget.border":"#dbdbdb","extensionButton.prominentBackground":"#475663","extensionButton.prominentForeground":"#F6F6F6","extensionButton.prominentHoverBackground":"#161F26","focusBorder":"#161F26","foreground":"#616161","gitDecoration.addedResourceForeground":"#ECB22E","gitDecoration.conflictingResourceForeground":"#FFF","gitDecoration.deletedResourceForeground":"#FFF","gitDecoration.ignoredResourceForeground":"#877583","gitDecoration.modifiedResourceForeground":"#ECB22E","gitDecoration.untrackedResourceForeground":"#ECB22E","input.background":"#FFF","input.border":"#161F26","input.foreground":"#000","input.placeholderForeground":"#a0a0a0","inputOption.activeBorder":"#3E313C","inputValidation.errorBackground":"#F44C5E","inputValidation.errorForeground":"#FFF","inputValidation.infoBackground":"#6182b8","inputValidation.infoForeground":"#FFF","inputValidation.warningBackground":"#F6B555","inputValidation.warningForeground":"#000","list.activeSelectionBackground":"#5899C5","list.activeSelectionForeground":"#fff","list.focusBackground":"#d5e1ea","list.focusForeground":"#fff","list.highlightForeground":"#2D3E4C","list.hoverBackground":"#d5e1ea","list.hoverForeground":"#fff","list.inactiveFocusBackground":"#161F26","list.inactiveSelectionBackground":"#5899C5","list.inactiveSelectionForeground":"#fff","list.invalidItemForeground":"#fff","menu.background":"#161F26","menu.foreground":"#F9FAFA","menu.separatorBackground":"#F9FAFA","notificationCenter.border":"#161F26","notificationCenterHeader.foreground":"#FFF","notificationLink.foreground":"#FFF","notificationToast.border":"#161F26","notifications.background":"#161F26","notifications.border":"#161F26","notifications.foreground":"#FFF","panel.border":"#2D3E4C","panelTitle.activeForeground":"#161F26","progressBar.background":"#8AE773","scrollbar.shadow":"#ffffff00","scrollbarSlider.activeBackground":"#161F267e","scrollbarSlider.background":"#161F267e","scrollbarSlider.hoverBackground":"#161F267e","settings.dropdownBorder":"#161F26","settings.dropdownForeground":"#161F26","settings.headerForeground":"#161F26","sideBar.background":"#2D3E4C","sideBar.foreground":"#DCDEDF","sideBarSectionHeader.background":"#161F26","sideBarSectionHeader.foreground":"#FFF","sideBarTitle.foreground":"#FFF","statusBar.background":"#5899C5","statusBar.debuggingBackground":"#8AE773","statusBar.foreground":"#FFF","statusBar.noFolderBackground":"#161F26","tab.activeBackground":"#FFF","tab.activeForeground":"#000","tab.border":"#F3F3F3","tab.inactiveBackground":"#F3F3F3","tab.inactiveForeground":"#686868","terminal.ansiBlack":"#000000","terminal.ansiBlue":"#6182b8","terminal.ansiBrightBlack":"#90a4ae","terminal.ansiBrightBlue":"#6182b8","terminal.ansiBrightCyan":"#39adb5","terminal.ansiBrightGreen":"#91b859","terminal.ansiBrightMagenta":"#7c4dff","terminal.ansiBrightRed":"#e53935","terminal.ansiBrightWhite":"#ffffff","terminal.ansiBrightYellow":"#ffb62c","terminal.ansiCyan":"#39adb5","terminal.ansiGreen":"#91b859","terminal.ansiMagenta":"#7c4dff","terminal.ansiRed":"#e53935","terminal.ansiWhite":"#ffffff","terminal.ansiYellow":"#ffb62c","terminal.border":"#2D3E4C","terminal.foreground":"#161F26","terminal.selectionBackground":"#0006","textPreformat.foreground":"#161F26","titleBar.activeBackground":"#2D3E4C","titleBar.activeForeground":"#FFF","titleBar.border":"#2D3E4C","titleBar.inactiveBackground":"#161F26","titleBar.inactiveForeground":"#685C66","welcomePage.buttonBackground":"#F3F3F3","welcomePage.buttonHoverBackground":"#ECECEC","widget.shadow":"#161F2694"},"displayName":"Slack Ochin","name":"slack-ochin","tokenColors":[{"settings":{"foreground":"#002339"}},{"scope":["meta.paragraph.markdown","string.other.link.description.title.markdown"],"settings":{"foreground":"#110000"}},{"scope":["entity.name.section.markdown","punctuation.definition.heading.markdown"],"settings":{"foreground":"#034c7c"}},{"scope":["punctuation.definition.string.begin.markdown","punctuation.definition.string.end.markdown","markup.quote.markdown"],"settings":{"foreground":"#00AC8F"}},{"scope":["markup.quote.markdown"],"settings":{"fontStyle":"italic","foreground":"#003494"}},{"scope":["markup.bold.markdown","punctuation.definition.bold.markdown"],"settings":{"fontStyle":"bold","foreground":"#4e76b5"}},{"scope":["markup.italic.markdown","punctuation.definition.italic.markdown"],"settings":{"fontStyle":"italic","foreground":"#C792EA"}},{"scope":["markup.inline.raw.string.markdown","markup.fenced_code.block.markdown"],"settings":{"fontStyle":"italic","foreground":"#0460b1"}},{"scope":["punctuation.definition.metadata.markdown"],"settings":{"foreground":"#00AC8F"}},{"scope":["markup.underline.link.image.markdown","markup.underline.link.markdown"],"settings":{"foreground":"#924205"}},{"scope":"comment","settings":{"fontStyle":"italic","foreground":"#357b42"}},{"scope":"string","settings":{"foreground":"#a44185"}},{"scope":"constant.numeric","settings":{"foreground":"#174781"}},{"scope":"constant","settings":{"foreground":"#174781"}},{"scope":"language.method","settings":{"foreground":"#174781"}},{"scope":["constant.character","constant.other"],"settings":{"foreground":"#174781"}},{"scope":"variable","settings":{"fontStyle":"","foreground":"#2f86d2"}},{"scope":"variable.language.this","settings":{"fontStyle":"","foreground":"#000000"}},{"scope":"keyword","settings":{"fontStyle":"","foreground":"#7b30d0"}},{"scope":"storage","settings":{"fontStyle":"","foreground":"#da5221"}},{"scope":"storage.type","settings":{"fontStyle":"","foreground":"#0991b6"}},{"scope":"entity.name.class","settings":{"foreground":"#1172c7"}},{"scope":"entity.other.inherited-class","settings":{"fontStyle":"","foreground":"#b02767"}},{"scope":"entity.name.function","settings":{"fontStyle":"","foreground":"#7eb233"}},{"scope":"variable.parameter","settings":{"fontStyle":"","foreground":"#b1108e"}},{"scope":"entity.name.tag","settings":{"fontStyle":"","foreground":"#0444ac"}},{"scope":"text.html.basic","settings":{"fontStyle":"","foreground":"#0071ce"}},{"scope":"entity.name.type","settings":{"foreground":"#0444ac"}},{"scope":"entity.other.attribute-name","settings":{"fontStyle":"italic","foreground":"#df8618"}},{"scope":"support.function","settings":{"fontStyle":"","foreground":"#1ab394"}},{"scope":"support.constant","settings":{"fontStyle":"","foreground":"#174781"}},{"scope":["support.type","support.class"],"settings":{"foreground":"#dc3eb7"}},{"scope":"support.other.variable","settings":{"foreground":"#224555"}},{"scope":"invalid","settings":{"fontStyle":" italic bold underline","foreground":"#207bb8"}},{"scope":"invalid.deprecated","settings":{"fontStyle":" bold italic underline","foreground":"#207bb8"}},{"scope":"source.json support","settings":{"foreground":"#6dbdfa"}},{"scope":["source.json string","source.json punctuation.definition.string"],"settings":{"foreground":"#00820f"}},{"scope":"markup.list","settings":{"foreground":"#207bb8"}},{"scope":["markup.heading punctuation.definition.heading","entity.name.section"],"settings":{"fontStyle":"","foreground":"#4FB4D8"}},{"scope":["text.html.markdown meta.paragraph meta.link.inline","text.html.markdown meta.paragraph meta.link.inline punctuation.definition.string.begin.markdown","text.html.markdown meta.paragraph meta.link.inline punctuation.definition.string.end.markdown"],"settings":{"foreground":"#87429A"}},{"scope":"markup.quote","settings":{"foreground":"#87429A"}},{"scope":"markup.bold","settings":{"fontStyle":"bold","foreground":"#08134A"}},{"scope":["markup.italic","punctuation.definition.italic"],"settings":{"fontStyle":"italic","foreground":"#174781"}},{"scope":"meta.link","settings":{"foreground":"#87429A"}}],"type":"light"}`));export{e as default};
|
|
2
|
+
//# sourceMappingURL=slack-ochin-B2OO5cIa.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e}from"./dist-DeW2Y1R5.js";var t=e(`smile-plus`,[[`path`,{d:`M22 11v1a10 10 0 1 1-9-10`,key:`ew0xw9`}],[`path`,{d:`M8 14s1.5 2 4 2 4-2 4-2`,key:`1y1vjs`}],[`line`,{x1:`9`,x2:`9.01`,y1:`9`,y2:`9`,key:`yxxnd0`}],[`line`,{x1:`15`,x2:`15.01`,y1:`9`,y2:`9`,key:`1p4y9e`}],[`path`,{d:`M16 5h6`,key:`1vod17`}],[`path`,{d:`M19 2v6`,key:`4bpg5p`}]]);export{t};
|
|
2
|
+
//# sourceMappingURL=smile-plus-q6EQBXHZ.js.map
|