@pasko70/pibo 1.1.0 → 1.2.0
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/README.md +106 -254
- package/context/codex-base-prompt.md +4 -0
- package/context/compute-worker.md +23 -0
- package/context/pibo-native-tooling.md +18 -0
- package/context/pibo-system-prompt.md +69 -8
- package/dist/api/simple-agent-api.js +136 -0
- package/dist/app-context.js +4 -0
- package/dist/apps/chat/agent-profiles.js +18 -3
- package/dist/apps/chat/agent-store.js +113 -16
- package/dist/apps/chat/chat-api-routes.js +311 -0
- package/dist/apps/chat/chat-capability-routes.js +90 -0
- package/dist/apps/chat/chat-files.js +178 -0
- package/dist/apps/chat/chat-request-normalizers.js +681 -0
- package/dist/apps/chat/chat-settings-routes.js +75 -0
- package/dist/apps/chat/chat-trace-helpers.js +94 -0
- package/dist/apps/chat/chat-user-skill-routes.js +149 -0
- package/dist/apps/chat/cron-api.js +213 -0
- package/dist/apps/chat/data/chat-data-mappers.js +74 -0
- package/dist/apps/chat/data/event-command-service.js +75 -0
- package/dist/apps/chat/data/navigation-query-service.js +11 -0
- package/dist/apps/chat/data/project-service.js +844 -0
- package/dist/apps/chat/data/read-state-service.js +42 -0
- package/dist/apps/chat/data/room-service.js +52 -0
- package/dist/apps/chat/data/session-query-service.js +63 -0
- package/dist/apps/chat/data/timeline-query-service.js +96 -0
- package/dist/apps/chat/event-log.js +1 -307
- package/dist/apps/chat/model-catalog.js +7 -2
- package/dist/apps/chat/output-compactor.js +126 -0
- package/dist/apps/chat/output-event-policy.js +17 -0
- package/dist/apps/chat/project-workflow-human-actions.js +347 -0
- package/dist/apps/chat/project-workflow-sessions.js +260 -0
- package/dist/apps/chat/provider-auth-actions.js +43 -0
- package/dist/apps/chat/ralph-api.js +156 -0
- package/dist/apps/chat/read-model.js +1 -218
- package/dist/apps/chat/rooms.js +1 -321
- package/dist/apps/chat/static-assets.js +996 -0
- package/dist/apps/chat/stream.js +29 -6
- package/dist/apps/chat/trace.js +179 -1003
- package/dist/apps/chat/types/event-store.js +1 -0
- package/dist/apps/chat/types/read-model.js +1 -0
- package/dist/apps/chat/types/rooms.js +36 -0
- package/dist/apps/chat/web-app.js +3131 -1959
- package/dist/apps/chat/workflow-catalog.js +572 -0
- package/dist/apps/chat/workflow-edge-compatibility.js +51 -0
- package/dist/apps/chat/workflow-json-schema-validation.js +335 -0
- package/dist/apps/chat/workflow-persistence-model.js +140 -0
- package/dist/apps/chat/workflow-persistence.js +633 -0
- package/dist/apps/chat/workflow-registered-ref-params.js +130 -0
- package/dist/apps/chat/workflow-registered-ref-pickers.js +179 -0
- package/dist/apps/chat/workflow-registered-ref-validation.js +210 -0
- package/dist/apps/chat/workflow-v2-security-validation.js +93 -0
- package/dist/apps/chat/workflow-validation-helpers.js +114 -0
- package/dist/apps/chat-ui/assets/{dist-CNLWH2qh.js → dist-B4lw9z4F.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-8e4L8ciw.js → dist-BbTaHWON.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CMZOa5ik.js → dist-BcT_c1EJ.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-DNcnQRPF.js → dist-CGINd7XU.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CqqUC8Ce.js → dist-CrBzZkUp.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-D2N4-LIc.js → dist-CyyISotB.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CUqpST5w.js → dist-DFbnFNpX.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CspjOeBj.js → dist-DGLWQLX8.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-B7bbI3Qz.js → dist-DfcIkFSN.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-v4pjHlB7.js → dist-sKDHTwaT.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-D9L4MSRF.js → dist-y9D6la48.js} +1 -1
- package/dist/apps/chat-ui/assets/index-C25VYnyb.css +1 -0
- package/dist/apps/chat-ui/assets/index-CUkuvI3v.js +165 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-144x144.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-192x192.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-48x48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-512x512.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-72x72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-96x96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/1024.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/114.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/120.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/128.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/144.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/152.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/167.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/180.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/192.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/29.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/50.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/512.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/57.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/58.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/76.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/87.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-24.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-30.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-36.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-44.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-24.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-30.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-36.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-44.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-24.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-30.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-36.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-44.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-400.png +0 -0
- package/dist/apps/chat-ui/index.html +8 -3
- package/dist/apps/chat-ui/manifest.webmanifest +25 -0
- package/dist/apps/chat-ui/sw.js +41 -0
- package/dist/apps/cli-ui/InkSessionApp.js +1218 -0
- package/dist/apps/cli-ui/InkTerminalLine.js +53 -0
- package/dist/apps/cli-ui/InkTerminalRow.js +304 -0
- package/dist/apps/cli-ui/InkTerminalView.js +25 -0
- package/dist/apps/cli-ui/cliSessionsCommand.js +232 -0
- package/dist/apps/cli-ui/index.js +8 -0
- package/dist/apps/cli-ui/inkColors.js +67 -0
- package/dist/apps/cli-ui/inkJson.js +244 -0
- package/dist/apps/cli-ui/inkMarkdown.js +122 -0
- package/dist/apps/context-files-ui/assets/{dist-DFi2YGux.js → dist-BOiGdrG-.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-DyfSeBMu.js → dist-DK01b7x4.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-CwbH_3RN.js → dist-DPG9jOQ-.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-dTBsFYAl.js → dist-Dp5AH00p.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-CxRLRmMx.js → dist-DqYw0LH7.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-MyZgX9K2.js → dist-TF5iO5ML.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-DQXzt2Ng.js → dist-TbjAhles.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-YwR9dpb-.js → dist-ZsBbt0uY.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-CKQF1zEu.js → dist-kmsvtHkH.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-BJW3917N.js → dist-vnd7PMu3.js} +1 -1
- package/dist/apps/context-files-ui/assets/{index-BwRDoHMC.css → index-B92tL3Pp.css} +1 -1
- package/dist/apps/context-files-ui/assets/{index-GwvjXytt.js → index-BhAWD3dv.js} +2 -2
- package/dist/apps/context-files-ui/index.html +2 -2
- package/dist/auth/better-auth.js +2 -1
- package/dist/auth/login-actions.js +251 -0
- package/dist/auth/openai-codex-usage.js +147 -0
- package/dist/bin/pibo.js +0 -0
- package/dist/bin/rg.js +15 -0
- package/dist/cli-session/fakeSessionSource.js +804 -0
- package/dist/cli-session/index.js +3 -0
- package/dist/cli-session/localSessionSource.js +1144 -0
- package/dist/cli-session/sessionSource.js +13 -0
- package/dist/cli.js +142 -14
- package/dist/compute/cli.js +415 -0
- package/dist/compute/docker.js +827 -0
- package/dist/compute/resource-health.js +333 -0
- package/dist/compute/resource-policy.js +98 -0
- package/dist/config/config.js +9 -5
- package/dist/core/context-build.js +677 -0
- package/dist/core/model-defaults.js +51 -9
- package/dist/core/pibo-home.js +8 -0
- package/dist/core/profiles.js +48 -0
- package/dist/core/provider-telemetry.js +222 -0
- package/dist/core/routed-session.js +441 -47
- package/dist/core/runtime-telemetry.js +853 -0
- package/dist/core/runtime.js +103 -15
- package/dist/core/session-errors.js +47 -0
- package/dist/core/session-model.js +39 -0
- package/dist/core/session-router.js +292 -62
- package/dist/core/shared-app.js +17 -0
- package/dist/core/skill-expansion.js +43 -0
- package/dist/core/system-prompt-template.js +9 -9
- package/dist/core/telemetry-staleness.js +128 -0
- package/dist/core/test-output-compaction.js +145 -0
- package/dist/core/user-settings.js +73 -0
- package/dist/cron/channel.js +28 -0
- package/dist/cron/cli.js +230 -0
- package/dist/cron/plugin.js +11 -0
- package/dist/cron/schedule.js +214 -0
- package/dist/cron/service.js +177 -0
- package/dist/cron/store.js +349 -0
- package/dist/cron/types.js +1 -0
- package/dist/data/cli.js +184 -0
- package/dist/data/event-log.js +106 -0
- package/dist/data/final-app-space-cutover-migration.js +728 -0
- package/dist/data/ingest-service.js +389 -0
- package/dist/data/message-store.js +62 -0
- package/dist/data/navigation-store.js +75 -0
- package/dist/data/observation-store.js +46 -0
- package/dist/data/payload-store.js +144 -0
- package/dist/data/pibo-store.js +59 -0
- package/dist/data/schema.js +434 -0
- package/dist/data/session-store.js +63 -0
- package/dist/data/shared-app-migration.js +757 -0
- package/dist/data/sqlite-schema.js +12 -0
- package/dist/data/telemetry-preview.js +65 -0
- package/dist/data/telemetry-queries.js +212 -0
- package/dist/data/telemetry-retention.js +50 -0
- package/dist/data/telemetry-rows.js +158 -0
- package/dist/data/telemetry.js +357 -0
- package/dist/debug/delta-compaction.js +99 -0
- package/dist/debug/detail-format.js +86 -0
- package/dist/debug/events.js +149 -29
- package/dist/debug/failures.js +162 -0
- package/dist/debug/index.js +655 -30
- package/dist/debug/messages.js +185 -0
- package/dist/debug/next-commands.js +6 -0
- package/dist/debug/payloads.js +123 -0
- package/dist/debug/pty.js +924 -0
- package/dist/debug/session.js +45 -15
- package/dist/debug/sql.js +1 -1
- package/dist/debug/stores.js +18 -13
- package/dist/debug/summary.js +72 -0
- package/dist/debug/telemetry.js +649 -0
- package/dist/debug/tools.js +168 -0
- package/dist/debug/trace-render-check.js +151 -0
- package/dist/debug/trace.js +152 -27
- package/dist/debug/web-artifacts.js +63 -0
- package/dist/debug/web-options.js +313 -0
- package/dist/debug/web-render-analysis.js +310 -0
- package/dist/debug/web-snapshot-browser-scripts.js +303 -0
- package/dist/debug/web-streaming-benchmark-analysis.js +605 -0
- package/dist/debug/web-streaming-browser-library.js +928 -0
- package/dist/debug/web-streaming-browser-scripts.js +242 -0
- package/dist/debug/web-streaming-provider-telemetry.js +194 -0
- package/dist/debug/web-streaming-report.js +493 -0
- package/dist/debug/web-streaming-types.js +1 -0
- package/dist/debug/web.js +574 -0
- package/dist/gateway/backup.js +83 -0
- package/dist/gateway/cli.js +511 -0
- package/dist/gateway/fallback.js +155 -0
- package/dist/gateway/pidfile.js +84 -0
- package/dist/gateway/protocol.js +16 -0
- package/dist/gateway/server.js +172 -17
- package/dist/gateway/tool.js +54 -51
- package/dist/gateway/web.js +74 -2
- package/dist/index.js +3 -1
- package/dist/local/client.js +3 -3
- package/dist/local/extension.js +8 -5
- package/dist/plugins/builtin.js +251 -49
- package/dist/plugins/chat-vscode-web.js +28 -0
- package/dist/plugins/codex-compat.js +0 -41
- package/dist/plugins/context-files.js +98 -18
- package/dist/plugins/dev-auth.js +124 -0
- package/dist/plugins/native-tooling.js +15 -0
- package/dist/plugins/registry.js +49 -1
- package/dist/plugins/web-annotations.js +27 -0
- package/dist/providers/minimax.js +70 -0
- package/dist/providers/openai-compat.js +48 -0
- package/dist/ralph/channel.js +8 -0
- package/dist/ralph/cli.js +152 -0
- package/dist/ralph/plugin.js +14 -0
- package/dist/ralph/service.js +271 -0
- package/dist/ralph/stopping.js +151 -0
- package/dist/ralph/store.js +450 -0
- package/dist/ralph/templates.js +200 -0
- package/dist/ralph/types.js +1 -0
- package/dist/reliability/store.js +42 -26
- package/dist/runs/registry.js +72 -35
- package/dist/session-ui/commandCatalog.js +193 -0
- package/dist/session-ui/commandResults.js +95 -0
- package/dist/session-ui/index.js +7 -0
- package/dist/session-ui/ownerViewModel.js +27 -0
- package/dist/session-ui/roomSessionViewModel.js +69 -0
- package/dist/session-ui/statusViewModel.js +127 -0
- package/dist/session-ui/terminalCards.js +210 -0
- package/dist/session-ui/terminalRows.js +937 -0
- package/dist/session-ui/terminalValue.js +45 -0
- package/dist/sessions/pibo-data-store.js +178 -0
- package/dist/sessions/sqlite-store.js +78 -12
- package/dist/sessions/store.js +11 -4
- package/dist/sessions/workflow-session-kind.js +20 -0
- package/dist/setup/cli.js +567 -0
- package/dist/shared/trace-async-agent-runs.js +127 -0
- package/dist/shared/trace-engine.js +96 -0
- package/dist/shared/trace-event-projection.js +679 -0
- package/dist/shared/trace-live-reducer.js +191 -0
- package/dist/shared/trace-nodes.js +76 -0
- package/dist/shared/trace-order.js +11 -10
- package/dist/shared/trace-patch-nodes.js +83 -0
- package/dist/shared/trace-run-notifications.js +69 -0
- package/dist/shared/trace-subagent-links.js +46 -0
- package/dist/shared/trace-transcript.js +303 -0
- package/dist/shared/trace-types.js +1 -0
- package/dist/shared-app.js +4 -0
- package/dist/signals/aggregate.js +65 -0
- package/dist/signals/events.js +1 -0
- package/dist/signals/projector.js +158 -0
- package/dist/signals/registry.js +513 -0
- package/dist/signals/store.js +1 -0
- package/dist/signals/types.js +1 -0
- package/dist/skills/cli.js +117 -0
- package/dist/tools/agent-browser-leases.js +219 -0
- package/dist/tools/agent-browser-wrapper.js +99 -0
- package/dist/tools/browser-pool.js +623 -0
- package/dist/tools/browser-use-cdp.js +56 -4
- package/dist/tools/browser-use-leases.js +215 -37
- package/dist/tools/browser-use-wrapper.js +508 -65
- package/dist/tools/cdp-client.js +189 -0
- package/dist/tools/guides.js +203 -4
- package/dist/tools/index.js +666 -16
- package/dist/tools/npm-runtime.js +136 -0
- package/dist/tools/registry.js +107 -8
- package/dist/tools/runtime/index.js +3 -0
- package/dist/tools/runtime/node-backend.js +225 -0
- package/dist/tools/runtime/node-worker-source.js +206 -0
- package/dist/tools/runtime/python-backend.js +227 -0
- package/dist/tools/runtime/python-worker-source.js +178 -0
- package/dist/tools/runtime/registry.js +255 -0
- package/dist/tools/runtime/tool.js +168 -0
- package/dist/tools/runtime/types.js +1 -0
- package/dist/tools/web-search.js +2 -1
- package/dist/user-skills/installer.js +39 -36
- package/dist/user-skills/store.js +50 -11
- package/dist/web/auth.js +5 -1
- package/dist/web/channel.js +86 -0
- package/dist/web/http.js +79 -14
- package/dist/web-annotations/api.js +348 -0
- package/dist/web-annotations/attachments.js +201 -0
- package/dist/web-annotations/cdp.js +1107 -0
- package/dist/web-annotations/index.js +7 -0
- package/dist/web-annotations/store.js +407 -0
- package/dist/web-annotations/tools.js +350 -0
- package/dist/web-annotations/types.js +34 -0
- package/dist/web-annotations/validation.js +288 -0
- package/docs/README.md +23 -0
- package/docs/ops/install-developer-host.md +112 -0
- package/docs/ops/install-user-host.md +76 -0
- package/docs/ops/upgrade-user-to-developer-host.md +69 -0
- package/package.json +24 -10
- package/skills/builtin/pi-agent-harness/SKILL.md +24 -24
- package/skills/builtin/pibo-docker-system/SKILL.md +170 -0
- package/skills/builtin/pibo-spec-writing/SKILL.md +330 -0
- package/skills/builtin/prd/SKILL.md +143 -0
- package/skills/builtin/ralph-loop/SKILL.md +359 -0
- package/skills/builtin/ralph-prd-json/SKILL.md +123 -0
- package/skills/builtin/skill-creator/LICENSE.txt +202 -0
- package/skills/builtin/skill-creator/SKILL.md +513 -0
- package/skills/builtin/skill-creator/agents/analyzer.md +274 -0
- package/skills/builtin/skill-creator/agents/comparator.md +202 -0
- package/skills/builtin/skill-creator/agents/grader.md +223 -0
- package/skills/builtin/skill-creator/assets/eval_review.html +146 -0
- package/skills/builtin/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/builtin/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/builtin/skill-creator/references/schemas.md +430 -0
- package/skills/builtin/skill-creator/scripts/__init__.py +0 -0
- package/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/builtin/skill-creator/scripts/generate_report.py +326 -0
- package/skills/builtin/skill-creator/scripts/improve_description.py +247 -0
- package/skills/builtin/skill-creator/scripts/package_skill.py +136 -0
- package/skills/builtin/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/builtin/skill-creator/scripts/run_eval.py +310 -0
- package/skills/builtin/skill-creator/scripts/run_loop.py +328 -0
- package/skills/builtin/skill-creator/scripts/utils.py +47 -0
- package/skills/builtin/web-annotations/SKILL.md +93 -0
- package/dist/apps/chat-ui/assets/index-D2Qxambd.js +0 -151
- package/dist/apps/chat-ui/assets/index-DXx368XK.css +0 -1
- package/dist/env.js +0 -32
- package/dist/plugins/core-tools.js +0 -94
- package/dist/plugins/example.js +0 -67
- package/dist/plugins/remote-agent.js +0 -9
- package/dist/remote/channel.js +0 -176
- package/dist/remote/client.js +0 -92
- package/dist/remote/examples/tui-controller.js +0 -263
- package/dist/remote/protocol.js +0 -55
- package/dist/remote/session-client.js +0 -189
- package/dist/sessions/bindings.js +0 -41
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root,.light,.light-theme{--blue-1:#fbfdff;--blue-2:#f4faff;--blue-3:#e6f4fe;--blue-4:#d5efff;--blue-5:#c2e5ff;--blue-6:#acd8fc;--blue-7:#8ec8f6;--blue-8:#5eb1ef;--blue-9:#0090ff;--blue-10:#0588f0;--blue-11:#0d74ce;--blue-12:#113264}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,.light,.light-theme{--blue-1:color(display-p3 .986 .992 .999);--blue-2:color(display-p3 .96 .979 .998);--blue-3:color(display-p3 .912 .956 .991);--blue-4:color(display-p3 .853 .932 1);--blue-5:color(display-p3 .788 .894 .998);--blue-6:color(display-p3 .709 .843 .976);--blue-7:color(display-p3 .606 .777 .947);--blue-8:color(display-p3 .451 .688 .917);--blue-9:color(display-p3 .247 .556 .969);--blue-10:color(display-p3 .234 .523 .912);--blue-11:color(display-p3 .15 .44 .84);--blue-12:color(display-p3 .102 .193 .379)}}}.dark,.dark-theme{--blue-1:#0d1520;--blue-2:#111927;--blue-3:#0d2847;--blue-4:#003362;--blue-5:#004074;--blue-6:#104d87;--blue-7:#205d9e;--blue-8:#2870bd;--blue-9:#0090ff;--blue-10:#3b9eff;--blue-11:#70b8ff;--blue-12:#c2e6ff}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){.dark,.dark-theme{--blue-1:color(display-p3 .057 .081 .122);--blue-2:color(display-p3 .072 .098 .147);--blue-3:color(display-p3 .078 .154 .27);--blue-4:color(display-p3 .033 .197 .37);--blue-5:color(display-p3 .08 .245 .441);--blue-6:color(display-p3 .14 .298 .511);--blue-7:color(display-p3 .195 .361 .6);--blue-8:color(display-p3 .239 .434 .72);--blue-9:color(display-p3 .247 .556 .969);--blue-10:color(display-p3 .344 .612 .973);--blue-11:color(display-p3 .49 .72 1);--blue-12:color(display-p3 .788 .898 .99)}}}:root,.light,.light-theme{--slate-1:#fcfcfd;--slate-2:#f9f9fb;--slate-3:#f0f0f3;--slate-4:#e8e8ec;--slate-5:#e0e1e6;--slate-6:#d9d9e0;--slate-7:#cdced6;--slate-8:#b9bbc6;--slate-9:#8b8d98;--slate-10:#80838d;--slate-11:#60646c;--slate-12:#1c2024}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,.light,.light-theme{--slate-1:color(display-p3 .988 .988 .992);--slate-2:color(display-p3 .976 .976 .984);--slate-3:color(display-p3 .94 .941 .953);--slate-4:color(display-p3 .908 .909 .925);--slate-5:color(display-p3 .88 .881 .901);--slate-6:color(display-p3 .85 .852 .876);--slate-7:color(display-p3 .805 .808 .838);--slate-8:color(display-p3 .727 .733 .773);--slate-9:color(display-p3 .547 .553 .592);--slate-10:color(display-p3 .503 .512 .549);--slate-11:color(display-p3 .379 .392 .421);--slate-12:color(display-p3 .113 .125 .14)}}}.dark,.dark-theme{--slate-1:#111113;--slate-2:#18191b;--slate-3:#212225;--slate-4:#272a2d;--slate-5:#2e3135;--slate-6:#363a3f;--slate-7:#43484e;--slate-8:#5a6169;--slate-9:#696e77;--slate-10:#777b84;--slate-11:#b0b4ba;--slate-12:#edeef0}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){.dark,.dark-theme{--slate-1:color(display-p3 .067 .067 .074);--slate-2:color(display-p3 .095 .098 .105);--slate-3:color(display-p3 .13 .135 .145);--slate-4:color(display-p3 .156 .163 .176);--slate-5:color(display-p3 .183 .191 .206);--slate-6:color(display-p3 .215 .226 .244);--slate-7:color(display-p3 .265 .28 .302);--slate-8:color(display-p3 .357 .381 .409);--slate-9:color(display-p3 .415 .431 .463);--slate-10:color(display-p3 .469 .483 .514);--slate-11:color(display-p3 .692 .704 .728);--slate-12:color(display-p3 .93 .933 .94)}}}:root,.light,.light-theme{--grass-1:#fbfefb;--grass-2:#f5fbf5;--grass-3:#e9f6e9;--grass-4:#daf1db;--grass-5:#c9e8ca;--grass-6:#b2ddb5;--grass-7:#94ce9a;--grass-8:#65ba74;--grass-9:#46a758;--grass-10:#3e9b4f;--grass-11:#2a7e3b;--grass-12:#203c25}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,.light,.light-theme{--grass-1:color(display-p3 .986 .996 .985);--grass-2:color(display-p3 .966 .983 .964);--grass-3:color(display-p3 .923 .965 .917);--grass-4:color(display-p3 .872 .94 .865);--grass-5:color(display-p3 .811 .908 .802);--grass-6:color(display-p3 .733 .864 .724);--grass-7:color(display-p3 .628 .803 .622);--grass-8:color(display-p3 .477 .72 .482);--grass-9:color(display-p3 .38 .647 .378);--grass-10:color(display-p3 .344 .598 .342);--grass-11:color(display-p3 .263 .488 .261);--grass-12:color(display-p3 .151 .233 .153)}}}:root,.light,.light-theme{--cyan-1:#fafdfe;--cyan-2:#f2fafb;--cyan-3:#def7f9;--cyan-4:#caf1f6;--cyan-5:#b5e9f0;--cyan-6:#9ddde7;--cyan-7:#7dcedc;--cyan-8:#3db9cf;--cyan-9:#00a2c7;--cyan-10:#0797b9;--cyan-11:#107d98;--cyan-12:#0d3c48}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,.light,.light-theme{--cyan-1:color(display-p3 .982 .992 .996);--cyan-2:color(display-p3 .955 .981 .984);--cyan-3:color(display-p3 .888 .965 .975);--cyan-4:color(display-p3 .821 .941 .959);--cyan-5:color(display-p3 .751 .907 .935);--cyan-6:color(display-p3 .671 .862 .9);--cyan-7:color(display-p3 .564 .8 .854);--cyan-8:color(display-p3 .388 .715 .798);--cyan-9:color(display-p3 .282 .627 .765);--cyan-10:color(display-p3 .264 .583 .71);--cyan-11:color(display-p3 .08 .48 .63);--cyan-12:color(display-p3 .108 .232 .277)}}}:root,.light,.light-theme{--amber-1:#fefdfb;--amber-2:#fefbe9;--amber-3:#fff7c2;--amber-4:#ffee9c;--amber-5:#fbe577;--amber-6:#f3d673;--amber-7:#e9c162;--amber-8:#e2a336;--amber-9:#ffc53d;--amber-10:#ffba18;--amber-11:#ab6400;--amber-12:#4f3422}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,.light,.light-theme{--amber-1:color(display-p3 .995 .992 .985);--amber-2:color(display-p3 .994 .986 .921);--amber-3:color(display-p3 .994 .969 .782);--amber-4:color(display-p3 .989 .937 .65);--amber-5:color(display-p3 .97 .902 .527);--amber-6:color(display-p3 .936 .844 .506);--amber-7:color(display-p3 .89 .762 .443);--amber-8:color(display-p3 .85 .65 .3);--amber-9:color(display-p3 1 .77 .26);--amber-10:color(display-p3 .959 .741 .274);--amber-11:color(display-p3 .64 .4 0);--amber-12:color(display-p3 .294 .208 .145)}}}:root,.light,.light-theme{--red-1:#fffcfc;--red-2:#fff7f7;--red-3:#feebec;--red-4:#ffdbdc;--red-5:#ffcdce;--red-6:#fdbdbe;--red-7:#f4a9aa;--red-8:#eb8e90;--red-9:#e5484d;--red-10:#dc3e42;--red-11:#ce2c31;--red-12:#641723}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,.light,.light-theme{--red-1:color(display-p3 .998 .989 .988);--red-2:color(display-p3 .995 .971 .971);--red-3:color(display-p3 .985 .925 .925);--red-4:color(display-p3 .999 .866 .866);--red-5:color(display-p3 .984 .812 .811);--red-6:color(display-p3 .955 .751 .749);--red-7:color(display-p3 .915 .675 .672);--red-8:color(display-p3 .872 .575 .572);--red-9:color(display-p3 .83 .329 .324);--red-10:color(display-p3 .798 .294 .285);--red-11:color(display-p3 .744 .234 .222);--red-12:color(display-p3 .36 .115 .143)}}}.mdxeditor .cm-editor{--sp-font-mono:var(--font-mono);--sp-font-body:var(--font-body);padding:var(--sp-space-4) 0}.mdxeditor .sp-editor .cm-editor{padding-bottom:0}.mdxeditor .cm-scroller{padding:0!important}.mdxeditor .cm-focused{outline:none}.mdxeditor .sp-wrapper{overflow:hidden}.mdxeditor .sp-layout{border:none}.mdxeditor .sp-cm pre{white-space:break-spaces;word-break:break-word;overflow-wrap:anywhere;flex-shrink:1}.mdxeditor .cm-mergeView .cm-scroller,.mdxeditor .cm-sourceView .cm-scroller{font-family:var(--font-mono);line-height:1.3rem;font-size:var(--text-xs)}.mdxeditor .cm-gutters{font-size:var(--text-xxs);background:0 0}.mdxeditor .cm-activeLine{background:0 0}.mdxeditor .cm-tooltip-autocomplete{background:var(--baseBgSubtle)}.mdxeditor hr.selected[data-lexical-decorator=true]{outline:2px solid highlight}._editorRoot_1e2ox_53{--accentBase:var(--blue-1);--accentBgSubtle:var(--blue-2);--accentBg:var(--blue-3);--accentBgHover:var(--blue-4);--accentBgActive:var(--blue-5);--accentLine:var(--blue-6);--accentBorder:var(--blue-7);--accentBorderHover:var(--blue-8);--accentSolid:var(--blue-9);--accentSolidHover:var(--blue-10);--accentText:var(--blue-11);--accentTextContrast:var(--blue-12);--basePageBg:white;--baseBase:var(--slate-1);--baseBgSubtle:var(--slate-2);--baseBg:var(--slate-3);--baseBgHover:var(--slate-4);--baseBgActive:var(--slate-5);--baseLine:var(--slate-6);--baseBorder:var(--slate-7);--baseBorderHover:var(--slate-8);--baseSolid:var(--slate-9);--baseSolidHover:var(--slate-10);--baseText:var(--slate-11);--baseTextContrast:var(--slate-12);--admonitionTipBg:var(--cyan-4);--admonitionTipBorder:var(--cyan-8);--admonitionInfoBg:var(--grass-4);--admonitionInfoBorder:var(--grass-8);--admonitionCautionBg:var(--amber-4);--admonitionCautionBorder:var(--amber-8);--admonitionDangerBg:var(--red-4);--admonitionDangerBorder:var(--red-8);--admonitionNoteBg:var(--slate-4);--admonitionNoteBorder:var(--slate-8);--error-color:var(--red-10);--spacing-0:0px;--spacing-px:1px;--spacing-0_5:.125rem;--spacing-1:.25rem;--spacing-1_5:.375rem;--spacing-2:.5rem;--spacing-2_5:.625rem;--spacing-3:.75rem;--spacing-3_5:.875rem;--spacing-4:1rem;--spacing-5:1.25rem;--spacing-6:1.5rem;--spacing-7:1.75rem;--spacing-8:2rem;--spacing-9:2.25rem;--spacing-10:2.5rem;--spacing-11:2.75rem;--spacing-12:3rem;--spacing-14:3.5rem;--spacing-16:4rem;--spacing-20:5rem;--spacing-24:6rem;--spacing-28:7rem;--spacing-32:8rem;--spacing-36:9rem;--spacing-40:10rem;--spacing-44:11rem;--spacing-48:12rem;--spacing-52:13rem;--spacing-56:14rem;--spacing-60:15rem;--spacing-64:16rem;--spacing-72:18rem;--spacing-80:20rem;--spacing-96:24rem;--radius-none:0px;--radius-small:var(--spacing-0_5);--radius-base:var(--spacing-1);--radius-medium:var(--spacing-1_5);--radius-large:var(--spacing-2);--radius-extra-large:var(--spacing-3);--radius-full:9999px;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--font-body:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--text-base:1rem;--text-sm:.875rem;--text-xs:.75rem;--text-xxs:.6rem;font-family:var(--font-body);color:var(--baseText)}._nestedListItem_1e2ox_158{list-style:none}._toolbarRoot_1e2ox_162{z-index:2;gap:var(--spacing-1);border-radius:var(--radius-medium);padding:var(--spacing-1_5);background-color:var(--baseBg);width:inherit;flex-direction:row;align-items:center;display:flex;position:sticky;top:0;overflow-x:auto}._toolbarRoot_1e2ox_162 div[role=separator]{margin:var(--spacing-2) var(--spacing-1);border-left:1px solid var(--baseBorder);border-right:1px solid var(--baseBase);height:var(--spacing-4)}._toolbarRoot_1e2ox_162 svg{color:var(--baseTextContrast);display:block}._readOnlyToolbarRoot_1e2ox_189{pointer-events:none;background:var(--baseBase)}._readOnlyToolbarRoot_1e2ox_189>div{opacity:.5}._toolbarModeSwitch_1e2ox_198{border:1px solid var(--baseBg);border-radius:var(--radius-medium);font-size:var(--text-xs);align-self:stretch;align-items:stretch;margin-left:auto;display:flex;opacity:1!important}._toolbarModeSwitch_1e2ox_198 ._toolbarToggleItem_1e2ox_208{padding-inline-start:var(--spacing-4);padding-inline-end:var(--spacing-4)}._toolbarModeSwitch_1e2ox_198 ._toolbarToggleItem_1e2ox_208:active,._toolbarModeSwitch_1e2ox_198 ._toolbarToggleItem_1e2ox_208[data-state=on]{background-color:var(--baseBorder)}._toolbarGroupOfGroups_1e2ox_219{margin:0 var(--spacing-1);display:flex}._toolbarToggleSingleGroup_1e2ox_224:first-of-type ._toolbarToggleItem_1e2ox_208:only-child,._toolbarToggleSingleGroup_1e2ox_224:only-child ._toolbarToggleItem_1e2ox_208:first-child,._toolbarModeSwitch_1e2ox_198 ._toolbarToggleItem_1e2ox_208:first-child{border-top-left-radius:var(--radius-base);border-bottom-left-radius:var(--radius-base)}._toolbarToggleSingleGroup_1e2ox_224:last-of-type ._toolbarToggleItem_1e2ox_208:only-child,._toolbarToggleSingleGroup_1e2ox_224:only-child ._toolbarToggleItem_1e2ox_208:last-child,._toolbarModeSwitch_1e2ox_198 ._toolbarToggleItem_1e2ox_208:last-child{border-top-right-radius:var(--radius-base);border-bottom-right-radius:var(--radius-base)}._toolbarToggleItem_1e2ox_208,._toolbarButton_1e2ox_239{all:unset;box-sizing:border-box;cursor:default;padding:var(--spacing-0_5)}@media (hover:hover){._toolbarToggleItem_1e2ox_208:hover,._toolbarButton_1e2ox_239:hover{background-color:var(--baseBgActive)}}._toolbarToggleItem_1e2ox_208:active svg,._toolbarButton_1e2ox_239:active svg{transform:translate(1px,1px)}._toolbarToggleItem_1e2ox_208[data-state=on],._toolbarButton_1e2ox_239[data-state=on],._toolbarToggleItem_1e2ox_208:active,._toolbarButton_1e2ox_239:active{color:var(--baseTextContrast);background-color:var(--baseBgActive)}._toolbarToggleItem_1e2ox_208[data-disabled],._toolbarButton_1e2ox_239[data-disabled]{pointer-events:none}._toolbarToggleItem_1e2ox_208[data-disabled] svg,._toolbarButton_1e2ox_239[data-disabled] svg{color:var(--baseBorderHover)}._toolbarButton_1e2ox_239{border-radius:var(--radius-base)}._toolbarButton_1e2ox_239+._toolbarButton_1e2ox_239{margin-left:var(--spacing-1)}._activeToolbarButton_1e2ox_275{color:var(--accentText)}._toolbarToggleSingleGroup_1e2ox_224{white-space:nowrap;align-items:center;display:flex}._toolbarNodeKindSelectContainer_1e2ox_285,._toolbarButtonDropdownContainer_1e2ox_286,._toolbarCodeBlockLanguageSelectContent_1e2ox_287,._selectContainer_1e2ox_288{filter:drop-shadow(0 2px 2px #0003);z-index:3;width:var(--spacing-36);border-bottom-left-radius:var(--radius-base);border-bottom-right-radius:var(--radius-base);background-color:var(--basePageBg);font-size:var(--text-sm)}._toolbarButtonDropdownContainer_1e2ox_286,._toolbarButtonDropdownContainer_1e2ox_286 ._selectItem_1e2ox_301:first-child{border-top-right-radius:var(--radius-base)}._toolbarNodeKindSelectTrigger_1e2ox_306,._toolbarButtonSelectTrigger_1e2ox_307,._selectTrigger_1e2ox_308{color:inherit;width:var(--spacing-36);padding:var(--spacing-0_5) var(--spacing-1);border-radius:var(--radius-medium);white-space:nowrap;font-size:var(--text-sm);background-color:#0000;background-color:var(--basePageBg);margin:0 var(--spacing-1);border:0;flex-wrap:nowrap;align-items:center;padding-inline-start:var(--spacing-2);display:flex}._toolbarNodeKindSelectTrigger_1e2ox_306[data-state=open],._toolbarButtonSelectTrigger_1e2ox_307[data-state=open],._selectTrigger_1e2ox_308[data-state=open]{filter:drop-shadow(0 2px 2px #0003);border-bottom-right-radius:var(--radius-none);border-bottom-left-radius:var(--radius-none)}._selectTrigger_1e2ox_308[data-placeholder]>span:first-child{color:var(--baseBorderHover)}._toolbarButtonSelectTrigger_1e2ox_307{width:auto;padding-inline-start:var(--spacing-2);padding-inline-end:var(--spacing-1);padding-block:var(--spacing-0_5)}._toolbarCodeBlockLanguageSelectTrigger_1e2ox_343,._toolbarCodeBlockLanguageSelectContent_1e2ox_287{width:var(--spacing-48)}._toolbarNodeKindSelectItem_1e2ox_348,._selectItem_1e2ox_301{cursor:default;padding:var(--spacing-2);display:flex}._toolbarNodeKindSelectItem_1e2ox_348[data-highlighted],._selectItem_1e2ox_301[data-highlighted]{background-color:var(--baseBg)}._toolbarNodeKindSelectItem_1e2ox_348[data-state=checked],._selectItem_1e2ox_301[data-state=checked]{color:var(--baseTextContrast);background-color:var(--baseBg)}._toolbarNodeKindSelectItem_1e2ox_348[data-highlighted],._selectItem_1e2ox_301[data-highlighted]{outline:none}._toolbarNodeKindSelectItem_1e2ox_348:last-child,._selectItem_1e2ox_301:last-child{border-bottom-left-radius:var(--radius-base);border-bottom-right-radius:var(--radius-base)}._toolbarNodeKindSelectDropdownArrow_1e2ox_373,._selectDropdownArrow_1e2ox_374{align-items:center;margin-left:auto;display:flex}._contentEditable_1e2ox_380{box-sizing:border-box;width:100%;color:var(--baseTextContrast);padding:var(--spacing-3)}._contentEditable_1e2ox_380:focus{outline:none}._codeMirrorWrapper_1e2ox_392{margin-bottom:var(--spacing-5);border:1px solid var(--baseLine);border-radius:var(--radius-medium);padding:.8rem;position:relative;overflow:hidden}._sandPackWrapper_1e2ox_401{margin-bottom:var(--spacing-5);border:1px solid var(--baseLine);border-radius:var(--radius-medium);position:relative;overflow:hidden}._codeMirrorToolbar_1e2ox_409{gap:var(--spacing-1);padding:var(--spacing-1);z-index:1;background-color:var(--baseBase);border-bottom-left-radius:var(--radius-base);display:flex;position:absolute;top:0;right:0}._frontmatterWrapper_1e2ox_413{border-radius:var(--radius-medium);padding:var(--spacing-3);background-color:var(--baseBgSubtle)}._frontmatterWrapper_1e2ox_413[data-expanded=true]{margin-bottom:var(--spacing-10)}._frontmatterToggleButton_1e2ox_423{all:unset;box-sizing:border-box;cursor:default;align-items:center;gap:var(--spacing-1);font-size:var(--text-sm);display:flex}._propertyPanelTitle_1e2ox_431{font-size:var(--text-xs);padding-top:var(--spacing-2);padding-left:var(--spacing-2);margin:0;font-weight:400}._propertyEditorTable_1e2ox_439{table-layout:fixed;border-spacing:var(--spacing-2)}._propertyEditorTable_1e2ox_439 th{text-align:left;font-size:var(--text-sm);padding:var(--spacing-2) var(--spacing-3)}._propertyEditorTable_1e2ox_439 col:first-child{width:30%}._propertyEditorTable_1e2ox_439 col:nth-child(2){width:70%}._propertyEditorTable_1e2ox_439 td:last-child ._iconButton_1e2ox_457{margin-left:var(--spacing-4);margin-right:var(--spacing-4)}._propertyEditorTable_1e2ox_439 ._readOnlyColumnCell_1e2ox_462{padding-left:0}._propertyEditorLabelCell_1e2ox_467{font-weight:400}._readOnlyColumnCell_1e2ox_462{padding-left:0}._buttonsFooter_1e2ox_475{justify-content:flex-end;gap:var(--spacing-2);display:flex}._propertyEditorInput_1e2ox_481{all:unset;box-sizing:border-box;cursor:default;width:100%;padding:var(--spacing-2) var(--spacing-3);border-radius:var(--radius-base);border:1px solid var(--baseBorder);background-color:var(--baseBase);font-size:var(--text-sm)}._iconButton_1e2ox_457{all:unset;box-sizing:border-box;cursor:default;color:var(--baseText)}@media (hover:hover){._iconButton_1e2ox_457:hover{color:var(--baseTextContrast)}}._iconButton_1e2ox_457:disabled,._iconButton_1e2ox_457:disabled:hover{color:var(--baseLine)}._primaryButton_1e2ox_507,._secondaryButton_1e2ox_508{all:unset;box-sizing:border-box;cursor:default;padding:var(--spacing-2) var(--spacing-3);border:1px solid var(--accentBorder);background-color:var(--accentSolidHover);color:var(--baseBase);font-size:var(--text-xs);border-radius:var(--radius-medium)}._primaryButton_1e2ox_507:disabled,._secondaryButton_1e2ox_508:disabled{background:var(--accentLine);border-color:var(--accentBg)}._smallButton_1e2ox_523{font-size:var(--text-xs);padding:var(--spacing-1) var(--spacing-2);border-radius:var(--radius-base)}._secondaryButton_1e2ox_508{border:1px solid var(--baseBorder);background-color:var(--baseSolidHover);color:var(--baseBase)}._dialogForm_1e2ox_535{gap:var(--spacing-2);flex-direction:row;display:flex}._linkDialogEditForm_1e2ox_541{align-items:stretch;gap:var(--spacing-2);flex-direction:column;padding:0;display:flex}._linkDialogInputContainer_1e2ox_549{flex-direction:column;align-items:stretch;display:flex}._linkDialogInputWrapper_1e2ox_555{background-color:var(--baseBase);border-radius:var(--radius-base);border:1px solid var(--baseBorder);align-items:center;display:flex}._linkDialogInputWrapper_1e2ox_555[data-visible-dropdown=true]{border-bottom-left-radius:var(--radius-none);border-bottom-right-radius:var(--radius-none);border-bottom-width:0}._linkDialogInputWrapper_1e2ox_555>button{all:unset;box-sizing:border-box;cursor:default;padding-right:var(--spacing-2)}._linkDialogInput_1e2ox_549,._dialogInput_1e2ox_576{all:unset;box-sizing:border-box;cursor:default;width:20rem;padding:var(--spacing-2) var(--spacing-3);font-size:var(--text-sm)}._linkDialogInput_1e2ox_549::-moz-placeholder{color:var(--baseBorder)}._dialogInput_1e2ox_576::-moz-placeholder{color:var(--baseBorder)}._linkDialogInput_1e2ox_549::placeholder,._dialogInput_1e2ox_576::placeholder{color:var(--baseBorder)}._linkDialogAnchor_1e2ox_587{z-index:-1;background-color:highlight;position:fixed}._linkDialogAnchor_1e2ox_587[data-visible=true]{visibility:visible}._linkDialogAnchor_1e2ox_587[data-visible=false]{visibility:hidden}._linkDialogPopoverContent_1e2ox_601,._tableColumnEditorPopoverContent_1e2ox_602,._dialogContent_1e2ox_603{filter:drop-shadow(0 2px 2px #0003);align-items:center;gap:var(--spacing-0_5);border-radius:var(--radius-medium);border:1px solid var(--baseBg);background-color:var(--basePageBg);padding:var(--spacing-1) var(--spacing-1);font-size:var(--text-sm);display:flex}._largeDialogContent_1e2ox_615{filter:drop-shadow(0 2px 2px #0003);gap:var(--spacing-0_5);border-radius:var(--radius-medium);border:1px solid var(--baseBorder);background-color:var(--baseBgSubtle);padding:var(--spacing-4);font-size:var(--text-sm)}._dialogTitle_1e2ox_625{font-size:var(--text-base);padding-left:var(--spacing-2);font-weight:600}._dialogCloseButton_1e2ox_631{all:unset;box-sizing:border-box;cursor:default;position:absolute;top:10px;right:10px}._popoverContent_1e2ox_638{filter:drop-shadow(0 2px 2px #0003);align-items:center;gap:var(--spacing-0_5);border-radius:var(--radius-medium);background-color:var(--baseBgSubtle);padding:var(--spacing-2) var(--spacing-2);font-size:var(--text-sm);z-index:1;display:flex}._popoverArrow_1e2ox_650{fill:var(--basePageBg)}._linkDialogPreviewAnchor_1e2ox_654{margin-right:var(--spacing-1);color:var(--accentText);border:1px solid #0000;align-items:center;text-decoration:none;display:flex}@media (hover:hover){._linkDialogPreviewAnchor_1e2ox_654:hover{color:var(--accentSolidHover)}}._linkDialogPreviewAnchor_1e2ox_654 span{text-overflow:ellipsis;white-space:nowrap;max-width:14rem;overflow-x:hidden}._tooltipTrigger_1e2ox_677{align-self:center}._tooltipContent_1e2ox_681{z-index:2;border-radius:var(--radius-medium);padding:var(--spacing-1) var(--spacing-2);font-size:var(--text-xs);background-color:var(--baseText);color:var(--baseBase);position:relative}._tooltipContent_1e2ox_681 svg{fill:var(--baseText)}._actionButton_1e2ox_695{all:unset;box-sizing:border-box;cursor:default;padding:var(--spacing-1);color:var(--baseTextContrast);padding:var(--spacing-1) var(--spacing-1);border-radius:var(--radius-medium)}._actionButton_1e2ox_695 svg{display:block}@media (hover:hover){._actionButton_1e2ox_695:hover{background-color:var(--baseBg)}}._actionButton_1e2ox_695:active svg{transform:translate(1px,1px)}._actionButton_1e2ox_695[data-state=on],._actionButton_1e2ox_695:active{background-color:var(--baseBg);color:var(--baseTextContrast)}._primaryActionButton_1e2ox_702{background-color:var(--accentSolid);color:var(--baseBase)}@media (hover:hover){._primaryActionButton_1e2ox_702:hover{background-color:var(--accentSolidHover);color:var(--baseBase)}}._tableEditor_1e2ox_714{table-layout:fixed;border-spacing:0;border-collapse:collapse;width:100%;height:100%}._tableEditor_1e2ox_714 thead>tr>th{text-align:right}._tableEditor_1e2ox_714>tbody>tr>td:not(._toolCell_1e2ox_725),._tableEditor_1e2ox_714>tbody>tr>th:not(._toolCell_1e2ox_725):not([data-tool-cell=true]){border:1px solid var(--baseBgActive);padding:var(--spacing-1) var(--spacing-2);white-space:normal}:is(._tableEditor_1e2ox_714>tbody>tr>td:not(._toolCell_1e2ox_725),._tableEditor_1e2ox_714>tbody>tr>th:not(._toolCell_1e2ox_725):not([data-tool-cell=true]))>div{outline:none}:is(._tableEditor_1e2ox_714>tbody>tr>td:not(._toolCell_1e2ox_725),._tableEditor_1e2ox_714>tbody>tr>th:not(._toolCell_1e2ox_725):not([data-tool-cell=true]))>div>p{margin:0}[data-active=true]:is(._tableEditor_1e2ox_714>tbody>tr>td:not(._toolCell_1e2ox_725),._tableEditor_1e2ox_714>tbody>tr>th:not(._toolCell_1e2ox_725):not([data-tool-cell=true])){outline:solid 1px var(--baseSolid)}._tableEditor_1e2ox_714 ._tableColumnEditorTrigger_1e2ox_744,._tableEditor_1e2ox_714 ._tableRowEditorTrigger_1e2ox_745,._tableEditor_1e2ox_714 ._addRowButton_1e2ox_746,._tableEditor_1e2ox_714 ._addColumnButton_1e2ox_747,._tableEditor_1e2ox_714 ._iconButton_1e2ox_457{opacity:.15}@media (hover:hover){._tableEditor_1e2ox_714:hover ._tableColumnEditorTrigger_1e2ox_744,._tableEditor_1e2ox_714:hover ._tableRowEditorTrigger_1e2ox_745,._tableEditor_1e2ox_714:hover ._addRowButton_1e2ox_746,._tableEditor_1e2ox_714:hover ._addColumnButton_1e2ox_747,._tableEditor_1e2ox_714:hover ._iconButton_1e2ox_457{opacity:.3}._tableEditor_1e2ox_714:hover ._tableColumnEditorTrigger_1e2ox_744:hover,._tableEditor_1e2ox_714:hover ._tableRowEditorTrigger_1e2ox_745:hover,._tableEditor_1e2ox_714:hover ._addRowButton_1e2ox_746:hover,._tableEditor_1e2ox_714:hover ._addColumnButton_1e2ox_747:hover,._tableEditor_1e2ox_714:hover ._iconButton_1e2ox_457:hover{opacity:1}}._toolCell_1e2ox_725{text-align:right}._toolCell_1e2ox_725 button{margin:auto;display:block}._tableColumnEditorTrigger_1e2ox_744{all:unset;box-sizing:border-box;cursor:default;padding:var(--spacing-1);color:var(--baseTextContrast);padding:var(--spacing-1);border-radius:var(--radius-full);opacity:.2}._tableColumnEditorTrigger_1e2ox_744 svg{display:block}@media (hover:hover){._tableColumnEditorTrigger_1e2ox_744:hover{background-color:var(--baseBg)}}._tableColumnEditorTrigger_1e2ox_744:active svg{transform:translate(1px,1px)}._tableColumnEditorTrigger_1e2ox_744[data-state=on],._tableColumnEditorTrigger_1e2ox_744:active{background-color:var(--baseBg);color:var(--baseTextContrast)}._tableColumnEditorTrigger_1e2ox_744[data-active=true]{opacity:1!important}._tableColumnEditorToolbar_1e2ox_789{display:flex}._tableColumnEditorToolbar_1e2ox_789>button{all:unset;box-sizing:border-box;cursor:default;padding:var(--spacing-1);color:var(--baseTextContrast)}._tableColumnEditorToolbar_1e2ox_789>button svg{display:block}@media (hover:hover){._tableColumnEditorToolbar_1e2ox_789>button:hover{background-color:var(--baseBg)}}._tableColumnEditorToolbar_1e2ox_789>button:active svg{transform:translate(1px,1px)}._tableColumnEditorToolbar_1e2ox_789>button[data-state=on],._tableColumnEditorToolbar_1e2ox_789>button:active{background-color:var(--baseBg);color:var(--baseTextContrast)}._tableColumnEditorToolbar_1e2ox_789 [role=separator]{margin-left:var(--spacing-1);margin-right:var(--spacing-1)}._toggleGroupRoot_1e2ox_802{display:inline-flex}._toggleGroupRoot_1e2ox_802 button{all:unset;box-sizing:border-box;cursor:default;padding:var(--spacing-1);color:var(--baseTextContrast)}._toggleGroupRoot_1e2ox_802 button svg{display:block}@media (hover:hover){._toggleGroupRoot_1e2ox_802 button:hover{background-color:var(--baseBg)}}._toggleGroupRoot_1e2ox_802 button:active svg{transform:translate(1px,1px)}._toggleGroupRoot_1e2ox_802 button[data-state=on],._toggleGroupRoot_1e2ox_802 button:active{background-color:var(--baseBg);color:var(--baseTextContrast)}._toggleGroupRoot_1e2ox_802 button:first-child{border-top-left-radius:var(--radius-base);border-bottom-left-radius:var(--radius-base)}._toggleGroupRoot_1e2ox_802 button:last-child{border-top-right-radius:var(--radius-base);border-bottom-right-radius:var(--radius-base)}._tableToolsColumn_1e2ox_820{width:2rem}._tableToolsColumn_1e2ox_820 button{margin:auto;display:block}._leftAlignedCell_1e2ox_829{text-align:left}._rightAlignedCell_1e2ox_833{text-align:right}._centeredCell_1e2ox_837{text-align:center}._addColumnButton_1e2ox_747,._addRowButton_1e2ox_746{all:unset;box-sizing:border-box;cursor:default;padding:var(--spacing-1);color:var(--baseTextContrast);background-color:var(--baseBase);align-items:center;display:flex}._addColumnButton_1e2ox_747 svg,._addRowButton_1e2ox_746 svg{display:block}@media (hover:hover){._addColumnButton_1e2ox_747:hover,._addRowButton_1e2ox_746:hover{background-color:var(--baseBg)}}._addColumnButton_1e2ox_747:active svg,._addRowButton_1e2ox_746:active svg{transform:translate(1px,1px)}._addColumnButton_1e2ox_747[data-state=on],._addRowButton_1e2ox_746[data-state=on],._addColumnButton_1e2ox_747:active,._addRowButton_1e2ox_746:active{background-color:var(--baseBg);color:var(--baseTextContrast)}._addColumnButton_1e2ox_747 svg,._addRowButton_1e2ox_746 svg{margin:auto}._addRowButton_1e2ox_746{width:100%;margin-top:var(--spacing-px);box-sizing:border-box;border-bottom-right-radius:var(--radius-medium);border-bottom-left-radius:var(--radius-medium)}._addColumnButton_1e2ox_747{margin-left:var(--spacing-px);border-top-right-radius:var(--radius-medium);border-bottom-right-radius:var(--radius-medium);height:100%}._dialogOverlay_1e2ox_870{background-color:var(--baseBase);z-index:51;opacity:.5;animation:.15s cubic-bezier(.16,1,.3,1) _overlayShow_1e2ox_1;position:fixed;inset:0}._dialogContent_1e2ox_603,._largeDialogContent_1e2ox_615{z-index:52;animation:.15s cubic-bezier(.16,1,.3,1) _contentShow_1e2ox_1;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}._dialogContent_1e2ox_603:focus,._largeDialogContent_1e2ox_615:focus{outline:none}@keyframes _overlayShow_1e2ox_1{0%{opacity:0}to{opacity:.5}}@keyframes _contentShow_1e2ox_1{0%{opacity:0;transform:translate(-50%,-48%)scale(.96)}to{opacity:1;transform:translate(-50%,-50%)scale(1)}}._focusedImage_1e2ox_916{outline:2px solid highlight}._imageWrapper_1e2ox_920{display:inline-block;position:relative}._imageWrapper_1e2ox_920[draggable=true]{cursor:move;cursor:grab;cursor:-webkit-grab}._editImageToolbar_1e2ox_933{gap:var(--spacing-1);padding:var(--spacing-1);z-index:1;background-color:var(--baseBase);border-bottom-left-radius:var(--radius-base);display:flex;position:absolute;top:0;right:0}._editImageButton_1e2ox_937 svg{display:block}._inlineEditor_1e2ox_943{border-radius:var(--radius-medium);padding:var(--spacing-1);gap:var(--spacing-2);background:var(--baseBg);align-items:center;display:inline-flex}._blockEditor_1e2ox_952{border-radius:var(--radius-medium);padding:var(--spacing-2);justify-content:stretch;gap:var(--spacing-2);background:var(--baseBg);align-items:center;display:flex}._blockEditor_1e2ox_952 ._nestedEditor_1e2ox_961{flex-grow:1}._nestedEditor_1e2ox_961{background:var(--basePageBg);padding:var(--spacing-1) var(--spacing-2);border-radius:var(--radius-medium)}._nestedEditor_1e2ox_961>p{margin:0}._nestedEditor_1e2ox_961:focus{outline:none}._genericComponentName_1e2ox_980{font-size:var(--text-sm);color:var(--baseText);padding-right:var(--spacing-2)}._diffSourceToggleWrapper_1e2ox_986{pointer-events:auto;opacity:1;margin-left:auto;position:sticky;right:0}._diffSourceToggle_1e2ox_986{border-radius:var(--radius-medium);background-color:var(--baseBase);display:flex}._diffSourceToggle_1e2ox_986 ._toolbarToggleItem_1e2ox_208{padding:0}._diffSourceToggle_1e2ox_986 ._toolbarToggleItem_1e2ox_208>span{padding:var(--spacing-1) var(--spacing-1);display:block}._selectWithLabel_1e2ox_1012{align-items:center;gap:var(--spacing-2);margin-left:var(--spacing-2);display:flex}._selectWithLabel_1e2ox_1012>label{font-size:var(--text-sm)}._selectWithLabel_1e2ox_1012 ._selectTrigger_1e2ox_308{border:1px solid var(--baseBorder)}._toolbarTitleMode_1e2ox_1027{font-size:var(--text-sm);margin-left:var(--spacing-2)}._imageControlWrapperResizing_1e2ox_1032{touch-action:none}._imageResizer_1e2ox_1036{background-color:var(--accentText);border:1px solid var(--baseBg);width:7px;height:7px;display:block;position:absolute}._imageResizer_1e2ox_1036._imageResizerN_1e2ox_1045{cursor:n-resize;top:-6px;left:48%}._imageResizer_1e2ox_1036._imageResizerNe_1e2ox_1051{cursor:ne-resize;top:-6px;right:-6px}._imageResizer_1e2ox_1036._imageResizerE_1e2ox_1057{cursor:e-resize;bottom:48%;right:-6px}._imageResizer_1e2ox_1036._imageResizerSe_1e2ox_1063{cursor:nwse-resize;bottom:-2px;right:-6px}._imageResizer_1e2ox_1036._imageResizerS_1e2ox_1063{cursor:s-resize;bottom:-2px;left:48%}._imageResizer_1e2ox_1036._imageResizerSw_1e2ox_1075{cursor:sw-resize;bottom:-2px;left:-6px}._imageResizer_1e2ox_1036._imageResizerW_1e2ox_1081{cursor:w-resize;bottom:48%;left:-6px}._imageResizer_1e2ox_1036._imageResizerNw_1e2ox_1087{cursor:nw-resize;top:-6px;left:-6px}._imagePlaceholder_1e2ox_1093{border:2px dashed;width:fit-content;height:fit-content;margin:12px;padding:48px}._imageDimensionsContainer_1e2ox_1101{gap:var(--spacing-4);display:flex}._placeholder_1e2ox_1106{color:var(--baseSolid);padding:var(--spacing-3);text-overflow:ellipsis;-webkit-user-select:none;user-select:none;white-space:nowrap;pointer-events:none;display:inline-block;position:absolute;top:0;overflow:hidden}._rootContentEditableWrapper_1e2ox_1119{position:relative}._downshiftContainer_1e2ox_1123{flex-direction:column;align-items:stretch;display:flex}._downshiftInputWrapper_1e2ox_1129{background-color:var(--baseBase);border-radius:var(--radius-base);border:1px solid var(--baseBorder);align-items:center;display:flex}._downshiftInputWrapper_1e2ox_1129[data-visible-dropdown=true]{border-bottom-left-radius:var(--radius-none);border-bottom-right-radius:var(--radius-none);border-bottom-width:0}._downshiftInputWrapper_1e2ox_1129>button{all:unset;box-sizing:border-box;cursor:default;padding-right:var(--spacing-2)}._downshiftInput_1e2ox_1129{all:unset;box-sizing:border-box;cursor:default;width:20rem;padding:var(--spacing-2) var(--spacing-3);font-size:var(--text-sm)}._downshiftInput_1e2ox_1129::placeholder{color:var(--baseBorder)}._downshiftAutocompleteContainer_1e2ox_1160{position:relative}._downshiftAutocompleteContainer_1e2ox_1160 ul{all:unset;box-sizing:border-box;font-size:var(--text-sm);border-bottom-left-radius:var(--radius-medium);border-bottom-right-radius:var(--radius-medium);width:100%;max-height:var(--spacing-48);border:1px solid var(--baseBorder);background-color:var(--baseBase);border-top-width:0;display:none;position:absolute;overflow:hidden auto}._downshiftAutocompleteContainer_1e2ox_1160 ul[data-visible=true]{display:block}._downshiftAutocompleteContainer_1e2ox_1160 ul li{padding:var(--spacing-2) var(--spacing-3);white-space:nowrap;margin-bottom:var(--spacing-1);text-overflow:ellipsis;overflow-x:hidden}._downshiftAutocompleteContainer_1e2ox_1160 ul li[data-selected=true]{background-color:var(--baseBgSubtle)}._downshiftAutocompleteContainer_1e2ox_1160 ul li[data-highlighted=true]{background-color:var(--baseBgHover)}._downshiftAutocompleteContainer_1e2ox_1160 ul li:last-of-type{border-bottom-left-radius:var(--radius-medium);border-bottom-right-radius:var(--radius-medium)}._textInput_1e2ox_1206{all:unset;border-radius:var(--radius-base);border:1px solid var(--baseBorder);background-color:var(--baseBase);padding:var(--spacing-2) var(--spacing-3)}form._multiFieldForm_1e2ox_1214{padding:var(--spacing-2);gap:var(--spacing-2);flex-direction:column;display:flex}form._multiFieldForm_1e2ox_1214 ._formField_1e2ox_1220{gap:var(--spacing-2);flex-direction:column;display:flex}form._multiFieldForm_1e2ox_1214 ._formField_1e2ox_1220 label{font-size:var(--text-xs)}._markdownParseError_1e2ox_1231{border-radius:var(--radius-base);border:1px solid var(--error-color);padding:var(--spacing-2);margin-block:var(--spacing-2);color:var(--error-color);font-size:var(--text-xs)}._popupContainer_1e2ox_1240{z-index:2;position:relative}._inputSizer_1e2ox_1245{vertical-align:baseline;align-items:center;display:inline-grid;position:relative}._inputSizer_1e2ox_1245:after,._inputSizer_1e2ox_1245 input{width:auto;min-width:1rem;font:inherit;resize:none;appearance:none;color:inherit;background:0 0;border:none;grid-area:1/2;margin:0;padding:0 2px}._inputSizer_1e2ox_1245 span{padding:.25em}._inputSizer_1e2ox_1245:after{content:attr(data-value);white-space:pre-wrap}:root,._light_1tncs_1,._light-theme_1tncs_1{--blue-1:#fbfdff;--blue-2:#f4faff;--blue-3:#e6f4fe;--blue-4:#d5efff;--blue-5:#c2e5ff;--blue-6:#acd8fc;--blue-7:#8ec8f6;--blue-8:#5eb1ef;--blue-9:#0090ff;--blue-10:#0588f0;--blue-11:#0d74ce;--blue-12:#113264}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,._light_1tncs_1,._light-theme_1tncs_1{--blue-1:color(display-p3 .986 .992 .999);--blue-2:color(display-p3 .96 .979 .998);--blue-3:color(display-p3 .912 .956 .991);--blue-4:color(display-p3 .853 .932 1);--blue-5:color(display-p3 .788 .894 .998);--blue-6:color(display-p3 .709 .843 .976);--blue-7:color(display-p3 .606 .777 .947);--blue-8:color(display-p3 .451 .688 .917);--blue-9:color(display-p3 .247 .556 .969);--blue-10:color(display-p3 .234 .523 .912);--blue-11:color(display-p3 .15 .44 .84);--blue-12:color(display-p3 .102 .193 .379)}}}._dark_1tncs_1,._dark-theme_1tncs_1{--blue-1:#0d1520;--blue-2:#111927;--blue-3:#0d2847;--blue-4:#003362;--blue-5:#004074;--blue-6:#104d87;--blue-7:#205d9e;--blue-8:#2870bd;--blue-9:#0090ff;--blue-10:#3b9eff;--blue-11:#70b8ff;--blue-12:#c2e6ff}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){._dark_1tncs_1,._dark-theme_1tncs_1{--blue-1:color(display-p3 .057 .081 .122);--blue-2:color(display-p3 .072 .098 .147);--blue-3:color(display-p3 .078 .154 .27);--blue-4:color(display-p3 .033 .197 .37);--blue-5:color(display-p3 .08 .245 .441);--blue-6:color(display-p3 .14 .298 .511);--blue-7:color(display-p3 .195 .361 .6);--blue-8:color(display-p3 .239 .434 .72);--blue-9:color(display-p3 .247 .556 .969);--blue-10:color(display-p3 .344 .612 .973);--blue-11:color(display-p3 .49 .72 1);--blue-12:color(display-p3 .788 .898 .99)}}}:root,._light_1tncs_1,._light-theme_1tncs_1{--slate-1:#fcfcfd;--slate-2:#f9f9fb;--slate-3:#f0f0f3;--slate-4:#e8e8ec;--slate-5:#e0e1e6;--slate-6:#d9d9e0;--slate-7:#cdced6;--slate-8:#b9bbc6;--slate-9:#8b8d98;--slate-10:#80838d;--slate-11:#60646c;--slate-12:#1c2024}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,._light_1tncs_1,._light-theme_1tncs_1{--slate-1:color(display-p3 .988 .988 .992);--slate-2:color(display-p3 .976 .976 .984);--slate-3:color(display-p3 .94 .941 .953);--slate-4:color(display-p3 .908 .909 .925);--slate-5:color(display-p3 .88 .881 .901);--slate-6:color(display-p3 .85 .852 .876);--slate-7:color(display-p3 .805 .808 .838);--slate-8:color(display-p3 .727 .733 .773);--slate-9:color(display-p3 .547 .553 .592);--slate-10:color(display-p3 .503 .512 .549);--slate-11:color(display-p3 .379 .392 .421);--slate-12:color(display-p3 .113 .125 .14)}}}._dark_1tncs_1,._dark-theme_1tncs_1{--slate-1:#111113;--slate-2:#18191b;--slate-3:#212225;--slate-4:#272a2d;--slate-5:#2e3135;--slate-6:#363a3f;--slate-7:#43484e;--slate-8:#5a6169;--slate-9:#696e77;--slate-10:#777b84;--slate-11:#b0b4ba;--slate-12:#edeef0}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){._dark_1tncs_1,._dark-theme_1tncs_1{--slate-1:color(display-p3 .067 .067 .074);--slate-2:color(display-p3 .095 .098 .105);--slate-3:color(display-p3 .13 .135 .145);--slate-4:color(display-p3 .156 .163 .176);--slate-5:color(display-p3 .183 .191 .206);--slate-6:color(display-p3 .215 .226 .244);--slate-7:color(display-p3 .265 .28 .302);--slate-8:color(display-p3 .357 .381 .409);--slate-9:color(display-p3 .415 .431 .463);--slate-10:color(display-p3 .469 .483 .514);--slate-11:color(display-p3 .692 .704 .728);--slate-12:color(display-p3 .93 .933 .94)}}}:root,._light_1tncs_1,._light-theme_1tncs_1{--grass-1:#fbfefb;--grass-2:#f5fbf5;--grass-3:#e9f6e9;--grass-4:#daf1db;--grass-5:#c9e8ca;--grass-6:#b2ddb5;--grass-7:#94ce9a;--grass-8:#65ba74;--grass-9:#46a758;--grass-10:#3e9b4f;--grass-11:#2a7e3b;--grass-12:#203c25}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,._light_1tncs_1,._light-theme_1tncs_1{--grass-1:color(display-p3 .986 .996 .985);--grass-2:color(display-p3 .966 .983 .964);--grass-3:color(display-p3 .923 .965 .917);--grass-4:color(display-p3 .872 .94 .865);--grass-5:color(display-p3 .811 .908 .802);--grass-6:color(display-p3 .733 .864 .724);--grass-7:color(display-p3 .628 .803 .622);--grass-8:color(display-p3 .477 .72 .482);--grass-9:color(display-p3 .38 .647 .378);--grass-10:color(display-p3 .344 .598 .342);--grass-11:color(display-p3 .263 .488 .261);--grass-12:color(display-p3 .151 .233 .153)}}}:root,._light_1tncs_1,._light-theme_1tncs_1{--cyan-1:#fafdfe;--cyan-2:#f2fafb;--cyan-3:#def7f9;--cyan-4:#caf1f6;--cyan-5:#b5e9f0;--cyan-6:#9ddde7;--cyan-7:#7dcedc;--cyan-8:#3db9cf;--cyan-9:#00a2c7;--cyan-10:#0797b9;--cyan-11:#107d98;--cyan-12:#0d3c48}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,._light_1tncs_1,._light-theme_1tncs_1{--cyan-1:color(display-p3 .982 .992 .996);--cyan-2:color(display-p3 .955 .981 .984);--cyan-3:color(display-p3 .888 .965 .975);--cyan-4:color(display-p3 .821 .941 .959);--cyan-5:color(display-p3 .751 .907 .935);--cyan-6:color(display-p3 .671 .862 .9);--cyan-7:color(display-p3 .564 .8 .854);--cyan-8:color(display-p3 .388 .715 .798);--cyan-9:color(display-p3 .282 .627 .765);--cyan-10:color(display-p3 .264 .583 .71);--cyan-11:color(display-p3 .08 .48 .63);--cyan-12:color(display-p3 .108 .232 .277)}}}:root,._light_1tncs_1,._light-theme_1tncs_1{--amber-1:#fefdfb;--amber-2:#fefbe9;--amber-3:#fff7c2;--amber-4:#ffee9c;--amber-5:#fbe577;--amber-6:#f3d673;--amber-7:#e9c162;--amber-8:#e2a336;--amber-9:#ffc53d;--amber-10:#ffba18;--amber-11:#ab6400;--amber-12:#4f3422}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,._light_1tncs_1,._light-theme_1tncs_1{--amber-1:color(display-p3 .995 .992 .985);--amber-2:color(display-p3 .994 .986 .921);--amber-3:color(display-p3 .994 .969 .782);--amber-4:color(display-p3 .989 .937 .65);--amber-5:color(display-p3 .97 .902 .527);--amber-6:color(display-p3 .936 .844 .506);--amber-7:color(display-p3 .89 .762 .443);--amber-8:color(display-p3 .85 .65 .3);--amber-9:color(display-p3 1 .77 .26);--amber-10:color(display-p3 .959 .741 .274);--amber-11:color(display-p3 .64 .4 0);--amber-12:color(display-p3 .294 .208 .145)}}}:root,._light_1tncs_1,._light-theme_1tncs_1{--red-1:#fffcfc;--red-2:#fff7f7;--red-3:#feebec;--red-4:#ffdbdc;--red-5:#ffcdce;--red-6:#fdbdbe;--red-7:#f4a9aa;--red-8:#eb8e90;--red-9:#e5484d;--red-10:#dc3e42;--red-11:#ce2c31;--red-12:#641723}@supports (color:color(display-p3 1 1 1)){@media (color-gamut:p3){:root,._light_1tncs_1,._light-theme_1tncs_1{--red-1:color(display-p3 .998 .989 .988);--red-2:color(display-p3 .995 .971 .971);--red-3:color(display-p3 .985 .925 .925);--red-4:color(display-p3 .999 .866 .866);--red-5:color(display-p3 .984 .812 .811);--red-6:color(display-p3 .955 .751 .749);--red-7:color(display-p3 .915 .675 .672);--red-8:color(display-p3 .872 .575 .572);--red-9:color(display-p3 .83 .329 .324);--red-10:color(display-p3 .798 .294 .285);--red-11:color(display-p3 .744 .234 .222);--red-12:color(display-p3 .36 .115 .143)}}}._bold_1tncs_10{font-weight:700}._italic_1tncs_14{font-style:italic}._underline_1tncs_18{text-decoration:underline}._strikethrough_1tncs_34{text-decoration:line-through}._underlineStrikethrough_1tncs_38{text-decoration:underline line-through}._subscript_1tncs_42{font-size:.8em;vertical-align:sub!important}._superscript_1tncs_47{vertical-align:super;font-size:.8em}._code_1tncs_52{background-color:var(--baseBg);font-family:var(--font-mono);padding:1px .25rem;font-size:94%}._nestedListItem_1tncs_59{list-style:none}._listitem_1tncs_69{margin:var(--spacing-2) 0}._listItemChecked_1tncs_73,._listItemUnchecked_1tncs_74{margin-left:0;margin-right:0;padding-left:var(--spacing-6);padding-right:var(--spacing-6);outline:none;margin-inline-start:-1rem;list-style-type:none;position:relative}._listItemChecked_1tncs_73{text-decoration:line-through}._listItemUnchecked_1tncs_74:before,._listItemChecked_1tncs_73:before{content:"";width:var(--spacing-4);height:var(--spacing-4);cursor:pointer;background-size:cover;display:block;position:absolute;top:0;left:0}._listItemUnchecked_1tncs_74[dir=rtl]:before,._listItemChecked_1tncs_73[dir=rtl]:before{left:auto;right:0}._listItemUnchecked_1tncs_74:focus:before,._listItemChecked_1tncs_73:focus:before{box-shadow:0 0 0 2px var(--accentBgActive);border-radius:var(--radius-small)}._listItemUnchecked_1tncs_74:before{border:1px solid var(--baseBorder);border-radius:var(--radius-small)}._listItemChecked_1tncs_73:before{border:1px solid var(--accentBorder);border-radius:var(--radius-small);background-color:var(--accentSolid);background-repeat:no-repeat}._listItemChecked_1tncs_73:after{content:"";cursor:pointer;border-color:var(--baseBase);top:var(--spacing-0_5);width:var(--spacing-1);left:var(--spacing-1_5);right:var(--spacing-1_5);height:var(--spacing-2);border-style:solid;border-width:0 var(--spacing-0_5) var(--spacing-0_5) 0;display:block;position:absolute;transform:rotate(45deg)}._nestedListItem_1tncs_59{list-style-type:none}._nestedListItem_1tncs_59:before,._nestedListItem_1tncs_59:after{display:none}._admonitionDanger_1tncs_151,._admonitionInfo_1tncs_152,._admonitionNote_1tncs_153,._admonitionTip_1tncs_154,._admonitionCaution_1tncs_155{padding:var(--spacing-2);margin-top:var(--spacing-2);margin-bottom:var(--spacing-2);border-left:3px solid var(--admonitionBorder);background-color:var(--admonitionBg)}._admonitionInfo_1tncs_152{--admonitionBorder:var(--admonitionInfoBorder);--admonitionBg:var(--admonitionInfoBg)}._admonitionTip_1tncs_154{--admonitionBorder:var(--admonitionTipBorder);--admonitionBg:var(--admonitionTipBg)}._admonitionCaution_1tncs_155{--admonitionBorder:var(--admonitionCautionBorder);--admonitionBg:var(--admonitionCautionBg)}._admonitionDanger_1tncs_151{--admonitionBorder:var(--admonitionDangerBorder);--admonitionBg:var(--admonitionDangerBg)}._admonitionNote_1tncs_153{--admonitionBorder:var(--admonitionNoteBorder);--admonitionBg:var(--admonitionNoteBg)}._mdxExpression_1tncs_188{font-family:var(--font-mono);color:var(--accentText);font-size:84%}._mdxExpression_1tncs_188 input:focus-visible{outline:none}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-300:oklch(90.5% .182 98.111);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-500:oklch(71.5% .143 215.221);--color-sky-100:oklch(95.1% .026 236.824);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-sm:.25rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.-top-0\.5{top:calc(var(--spacing) * -.5)}.top-0{top:calc(var(--spacing) * 0)}.top-7{top:calc(var(--spacing) * 7)}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.col-start-2{grid-column-start:2}.m-0{margin:calc(var(--spacing) * 0)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-4{margin-right:calc(var(--spacing) * 4)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-\[1\.9rem\]{margin-left:1.9rem}.box-border{box-sizing:border-box}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-full{height:100%}.h-screen{height:100vh}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-14{min-height:calc(var(--spacing) * 14)}.min-h-24{min-height:calc(var(--spacing) * 24)}.min-h-\[72px\]{min-height:72px}.min-h-\[92px\]{min-height:92px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-36{width:calc(var(--spacing) * 36)}.w-72{width:calc(var(--spacing) * 72)}.w-\[min\(520px\,calc\(100\%-24px\)\)\]{width:min(520px,100% - 24px)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-48{max-width:calc(var(--spacing) * 48)}.max-w-52{max-width:calc(var(--spacing) * 52)}.max-w-56{max-width:calc(var(--spacing) * 56)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-6{min-width:calc(var(--spacing) * 6)}.min-w-7{min-width:calc(var(--spacing) * 7)}.min-w-20{min-width:calc(var(--spacing) * 20)}.min-w-\[16rem\]{min-width:16rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.appearance-none{appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[1\.9rem_minmax\(0\,1fr\)\]{grid-template-columns:1.9rem minmax(0,1fr)}.grid-cols-\[1fr_1fr_80px_auto\]{grid-template-columns:1fr 1fr 80px auto}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-cols-\[1fr_auto_auto\]{grid-template-columns:1fr auto auto}.grid-cols-\[8px_minmax\(0\,1fr\)\]{grid-template-columns:8px minmax(0,1fr)}.grid-cols-\[18px_1fr\]{grid-template-columns:18px 1fr}.grid-cols-\[18px_minmax\(0\,1fr\)\]{grid-template-columns:18px minmax(0,1fr)}.grid-cols-\[84px_minmax\(0\,1fr\)\]{grid-template-columns:84px minmax(0,1fr)}.grid-cols-\[120px_1fr\]{grid-template-columns:120px 1fr}.grid-cols-\[250px_minmax\(0\,1fr\)\]{grid-template-columns:250px minmax(0,1fr)}.grid-cols-\[300px_minmax\(0\,1fr\)\]{grid-template-columns:300px minmax(0,1fr)}.grid-cols-\[300px_minmax\(0\,1fr\)_320px\]{grid-template-columns:300px minmax(0,1fr) 320px}.grid-cols-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_300px\]{grid-template-columns:minmax(0,1fr) 300px}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-rows-\[16px_16px\]{grid-template-rows:16px 16px}.grid-rows-\[56px_1fr\]{grid-template-rows:56px 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.self-center{align-self:center}.self-end{align-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[\#0bda57\]{border-color:#0bda57}.border-\[\#0bda57\]\/30{border-color:oklab(77.5045% -.189885 .120443/.3)}.border-\[\#0bda57\]\/50{border-color:oklab(77.5045% -.189885 .120443/.5)}.border-\[\#1f4960\]{border-color:#1f4960}.border-\[\#2a2a2a\]{border-color:#2a2a2a}.border-\[\#3a3a3a\]{border-color:#3a3a3a}.border-\[\#5f2222\]{border-color:#5f2222}.border-\[\#11a4d4\]{border-color:#11a4d4}.border-\[\#11a4d4\]\/20{border-color:oklab(67.2064% -.0856208 -.096275/.2)}.border-\[\#11a4d4\]\/30{border-color:oklab(67.2064% -.0856208 -.096275/.3)}.border-\[\#11a4d4\]\/35{border-color:oklab(67.2064% -.0856208 -.096275/.35)}.border-\[\#11a4d4\]\/50{border-color:oklab(67.2064% -.0856208 -.096275/.5)}.border-\[\#11a4d4\]\/60{border-color:oklab(67.2064% -.0856208 -.096275/.6)}.border-\[\#11a4d4\]\/70{border-color:oklab(67.2064% -.0856208 -.096275/.7)}.border-\[\#11a4d4\]\/80{border-color:oklab(67.2064% -.0856208 -.096275/.8)}.border-\[\#38bdf8\]{border-color:#38bdf8}.border-\[\#141414\]{border-color:#141414}.border-\[\#a855f7\]\/50{border-color:oklab(62.6846% .129701 -.193012/.5)}.border-\[\#f59e0b\]{border-color:#f59e0b}.border-\[\#f59e0b\]\/40{border-color:oklab(76.8591% .0560995 .154808/.4)}.border-\[\#f59e0b\]\/50{border-color:oklab(76.8591% .0560995 .154808/.5)}.border-\[\#f59e0b\]\/60{border-color:oklab(76.8591% .0560995 .154808/.6)}.border-\[\#f59e0b\]\/70{border-color:oklab(76.859% .0560995 .154808/.7)}.border-\[\#f97316\]\/50{border-color:oklab(70.4871% .125896 .137895/.5)}.border-\[\#ff6b00\]\/50{border-color:oklab(70.2233% .141495 .14197/.5)}.border-amber-400\/70{border-color:#fcbb00b3}@supports (color:color-mix(in lab, red, red)){.border-amber-400\/70{border-color:color-mix(in oklab, var(--color-amber-400) 70%, transparent)}}.border-amber-400\/80{border-color:#fcbb00cc}@supports (color:color-mix(in lab, red, red)){.border-amber-400\/80{border-color:color-mix(in oklab, var(--color-amber-400) 80%, transparent)}}.border-amber-500{border-color:var(--color-amber-500)}.border-blue-500{border-color:var(--color-blue-500)}.border-current\/30{border-color:currentColor}@supports (color:color-mix(in lab, red, red)){.border-current\/30{border-color:color-mix(in oklab, currentcolor 30%, transparent)}}.border-cyan-500{border-color:var(--color-cyan-500)}.border-cyan-500\/70{border-color:#00b7d7b3}@supports (color:color-mix(in lab, red, red)){.border-cyan-500\/70{border-color:color-mix(in oklab, var(--color-cyan-500) 70%, transparent)}}.border-emerald-500\/60{border-color:#00bb7f99}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/60{border-color:color-mix(in oklab, var(--color-emerald-500) 60%, transparent)}}.border-emerald-500\/70{border-color:#00bb7fb3}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/70{border-color:color-mix(in oklab, var(--color-emerald-500) 70%, transparent)}}.border-emerald-500\/80{border-color:#00bb7fcc}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/80{border-color:color-mix(in oklab, var(--color-emerald-500) 80%, transparent)}}.border-fuchsia-500\/70{border-color:#e12afbb3}@supports (color:color-mix(in lab, red, red)){.border-fuchsia-500\/70{border-color:color-mix(in oklab, var(--color-fuchsia-500) 70%, transparent)}}.border-green-500{border-color:var(--color-green-500)}.border-green-500\/20{border-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.border-green-500\/20{border-color:color-mix(in oklab, var(--color-green-500) 20%, transparent)}}.border-orange-400\/70{border-color:#ff8b1ab3}@supports (color:color-mix(in lab, red, red)){.border-orange-400\/70{border-color:color-mix(in oklab, var(--color-orange-400) 70%, transparent)}}.border-orange-400\/80{border-color:#ff8b1acc}@supports (color:color-mix(in lab, red, red)){.border-orange-400\/80{border-color:color-mix(in oklab, var(--color-orange-400) 80%, transparent)}}.border-orange-500{border-color:var(--color-orange-500)}.border-orange-500\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab, red, red)){.border-orange-500\/20{border-color:color-mix(in oklab, var(--color-orange-500) 20%, transparent)}}.border-purple-500{border-color:var(--color-purple-500)}.border-red-500{border-color:var(--color-red-500)}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.border-red-500\/20{border-color:color-mix(in oklab, var(--color-red-500) 20%, transparent)}}.border-red-500\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab, red, red)){.border-red-500\/40{border-color:color-mix(in oklab, var(--color-red-500) 40%, transparent)}}.border-red-500\/50{border-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.border-red-500\/50{border-color:color-mix(in oklab, var(--color-red-500) 50%, transparent)}}.border-red-500\/60{border-color:#fb2c3699}@supports (color:color-mix(in lab, red, red)){.border-red-500\/60{border-color:color-mix(in oklab, var(--color-red-500) 60%, transparent)}}.border-red-500\/70{border-color:#fb2c36b3}@supports (color:color-mix(in lab, red, red)){.border-red-500\/70{border-color:color-mix(in oklab, var(--color-red-500) 70%, transparent)}}.border-red-500\/80{border-color:#fb2c36cc}@supports (color:color-mix(in lab, red, red)){.border-red-500\/80{border-color:color-mix(in oklab, var(--color-red-500) 80%, transparent)}}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-700\/30{border-color:#3141584d}@supports (color:color-mix(in lab, red, red)){.border-slate-700\/30{border-color:color-mix(in oklab, var(--color-slate-700) 30%, transparent)}}.border-slate-700\/40{border-color:#31415866}@supports (color:color-mix(in lab, red, red)){.border-slate-700\/40{border-color:color-mix(in oklab, var(--color-slate-700) 40%, transparent)}}.border-slate-700\/60{border-color:#31415899}@supports (color:color-mix(in lab, red, red)){.border-slate-700\/60{border-color:color-mix(in oklab, var(--color-slate-700) 60%, transparent)}}.border-slate-800{border-color:var(--color-slate-800)}.border-transparent{border-color:#0000}.bg-\[\#0b0b0b\]{background-color:#0b0b0b}.bg-\[\#0bda57\]{background-color:#0bda57}.bg-\[\#0bda57\]\/5{background-color:oklab(77.5045% -.189885 .120443/.05)}.bg-\[\#0bda57\]\/10{background-color:oklab(77.5045% -.189885 .120443/.1)}.bg-\[\#0bda57\]\/15{background-color:oklab(77.5045% -.189885 .120443/.15)}.bg-\[\#0bda57\]\/20{background-color:oklab(77.5045% -.189885 .120443/.2)}.bg-\[\#0c1214\]{background-color:#0c1214}.bg-\[\#0e1116\]{background-color:#0e1116}.bg-\[\#0e1116\]\/60{background-color:oklab(17.6746% -.0018611 -.0112852/.6)}.bg-\[\#1a262b\]{background-color:#1a262b}.bg-\[\#1a262b\]\/80{background-color:oklab(25.968% -.0133818 -.0136123/.8)}.bg-\[\#2a1417\]{background-color:#2a1417}.bg-\[\#11a4d4\]{background-color:#11a4d4}.bg-\[\#11a4d4\]\/5{background-color:oklab(67.2064% -.0856208 -.096275/.05)}.bg-\[\#11a4d4\]\/10{background-color:oklab(67.2064% -.0856208 -.096275/.1)}.bg-\[\#11a4d4\]\/15{background-color:oklab(67.2064% -.0856208 -.096275/.15)}.bg-\[\#11a4d4\]\/20{background-color:oklab(67.2064% -.0856208 -.096275/.2)}.bg-\[\#101d22\]{background-color:#101d22}.bg-\[\#151f24\]{background-color:#151f24}.bg-\[\#151f24\]\/80{background-color:oklab(23.1971% -.0110927 -.0132385/.8)}.bg-\[\#151f24\]\/95{background-color:oklab(23.1971% -.0110927 -.0132385/.95)}.bg-\[\#111111\]{background-color:#111}.bg-\[\#a855f7\]\/10{background-color:oklab(62.6846% .129701 -.193012/.1)}.bg-\[\#f59e0b\]\/5{background-color:oklab(76.8591% .0560995 .154808/.05)}.bg-\[\#f59e0b\]\/10{background-color:oklab(76.8591% .0560995 .154808/.1)}.bg-\[\#f59e0b\]\/15{background-color:oklab(76.8591% .0560995 .154808/.15)}.bg-\[\#f97316\]\/10{background-color:oklab(70.4871% .125896 .137895/.1)}.bg-\[\#ff6b00\]\/5{background-color:oklab(70.2233% .141495 .14197/.05)}.bg-\[\#ff6b00\]\/20{background-color:oklab(70.2233% .141495 .14197/.2)}.bg-amber-400\/10{background-color:#fcbb001a}@supports (color:color-mix(in lab, red, red)){.bg-amber-400\/10{background-color:color-mix(in oklab, var(--color-amber-400) 10%, transparent)}}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/5{background-color:color-mix(in oklab, var(--color-amber-500) 5%, transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/20{background-color:color-mix(in oklab, var(--color-amber-500) 20%, transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab, red, red)){.bg-black\/70{background-color:color-mix(in oklab, var(--color-black) 70%, transparent)}}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\/20{background-color:color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}.bg-cyan-500\/20{background-color:#00b7d733}@supports (color:color-mix(in lab, red, red)){.bg-cyan-500\/20{background-color:color-mix(in oklab, var(--color-cyan-500) 20%, transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/10{background-color:color-mix(in oklab, var(--color-emerald-500) 10%, transparent)}}.bg-green-500\/5{background-color:#00c7580d}@supports (color:color-mix(in lab, red, red)){.bg-green-500\/5{background-color:color-mix(in oklab, var(--color-green-500) 5%, transparent)}}.bg-green-500\/20{background-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.bg-green-500\/20{background-color:color-mix(in oklab, var(--color-green-500) 20%, transparent)}}.bg-orange-400\/10{background-color:#ff8b1a1a}@supports (color:color-mix(in lab, red, red)){.bg-orange-400\/10{background-color:color-mix(in oklab, var(--color-orange-400) 10%, transparent)}}.bg-orange-500\/5{background-color:#fe6e000d}@supports (color:color-mix(in lab, red, red)){.bg-orange-500\/5{background-color:color-mix(in oklab, var(--color-orange-500) 5%, transparent)}}.bg-orange-500\/15{background-color:#fe6e0026}@supports (color:color-mix(in lab, red, red)){.bg-orange-500\/15{background-color:color-mix(in oklab, var(--color-orange-500) 15%, transparent)}}.bg-orange-500\/20{background-color:#fe6e0033}@supports (color:color-mix(in lab, red, red)){.bg-orange-500\/20{background-color:color-mix(in oklab, var(--color-orange-500) 20%, transparent)}}.bg-purple-500\/20{background-color:#ac4bff33}@supports (color:color-mix(in lab, red, red)){.bg-purple-500\/20{background-color:color-mix(in oklab, var(--color-purple-500) 20%, transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/10{background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.bg-slate-600{background-color:var(--color-slate-600)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-800\/50{background-color:#1d293d80}@supports (color:color-mix(in lab, red, red)){.bg-slate-800\/50{background-color:color-mix(in oklab, var(--color-slate-800) 50%, transparent)}}.bg-slate-900\/40{background-color:#0f172b66}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\/40{background-color:color-mix(in oklab, var(--color-slate-900) 40%, transparent)}}.bg-slate-900\/50{background-color:#0f172b80}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\/50{background-color:color-mix(in oklab, var(--color-slate-900) 50%, transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-baseline{vertical-align:baseline}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-\[1\.45\]{--tw-leading:1.45;line-height:1.45}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#0bda57\]{color:#0bda57}.text-\[\#0e1116\]{color:#0e1116}.text-\[\#7dd3fc\]{color:#7dd3fc}.text-\[\#11a4d4\]{color:#11a4d4}.text-\[\#22c55e\]{color:#22c55e}.text-\[\#38bdf8\]{color:#38bdf8}.text-\[\#60a5fa\]{color:#60a5fa}.text-\[\#525252\]{color:#525252}.text-\[\#737373\]{color:#737373}.text-\[\#a855f7\]{color:#a855f7}.text-\[\#d4d4d4\]{color:#d4d4d4}.text-\[\#d946ef\]{color:#d946ef}.text-\[\#ef4444\]{color:#ef4444}.text-\[\#f59e0b\]{color:#f59e0b}.text-\[\#f97316\]{color:#f97316}.text-\[\#facc15\]{color:#facc15}.text-\[\#fb923c\]{color:#fb923c}.text-\[\#ff6b00\]{color:#ff6b00}.text-amber-100{color:var(--color-amber-100)}.text-amber-200{color:var(--color-amber-200)}.text-amber-500{color:var(--color-amber-500)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-cyan-200{color:var(--color-cyan-200)}.text-cyan-500{color:var(--color-cyan-500)}.text-emerald-100{color:var(--color-emerald-100)}.text-emerald-200{color:var(--color-emerald-200)}.text-fuchsia-200{color:var(--color-fuchsia-200)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-orange-100{color:var(--color-orange-100)}.text-orange-400{color:var(--color-orange-400)}.text-orange-500{color:var(--color-orange-500)}.text-purple-400{color:var(--color-purple-400)}.text-purple-500{color:var(--color-purple-500)}.text-red-100{color:var(--color-red-100)}.text-red-200{color:var(--color-red-200)}.text-red-200\/90{color:#ffcacae6}@supports (color:color-mix(in lab, red, red)){.text-red-200\/90{color:color-mix(in oklab, var(--color-red-200) 90%, transparent)}}.text-red-300{color:var(--color-red-300)}.text-red-300\/80{color:#ffa3a3cc}@supports (color:color-mix(in lab, red, red)){.text-red-300\/80{color:color-mix(in oklab, var(--color-red-300) 80%, transparent)}}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-sky-100{color:var(--color-sky-100)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-yellow-300{color:var(--color-yellow-300)}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow-\[0_0_10px_rgba\(17\,164\,212\,0\.1\)\]{--tw-shadow:0 0 10px var(--tw-shadow-color,#11a4d41a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_10px_rgba\(17\,164\,212\,0\.4\)\]{--tw-shadow:0 0 10px var(--tw-shadow-color,#11a4d466);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-black\/30{--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.shadow-black\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/40{--tw-shadow-color:#0006}@supports (color:color-mix(in lab, red, red)){.shadow-black\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.\[scrollbar-gutter\:stable\]{scrollbar-gutter:stable}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-slate-500::placeholder{color:var(--color-slate-500)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.read-only\:text-slate-400:read-only{color:var(--color-slate-400)}.focus-within\:border-\[\#11a4d4\]:focus-within{border-color:#11a4d4}@media (hover:hover){.hover\:border-\[\#11a4d4\]:hover{border-color:#11a4d4}.hover\:border-\[\#38bdf8\]:hover{border-color:#38bdf8}.hover\:border-\[\#a855f7\]:hover{border-color:#a855f7}.hover\:border-\[\#f97316\]:hover{border-color:#f97316}.hover\:border-red-400:hover{border-color:var(--color-red-400)}.hover\:border-red-500:hover{border-color:var(--color-red-500)}.hover\:border-slate-500:hover{border-color:var(--color-slate-500)}.hover\:border-slate-600:hover{border-color:var(--color-slate-600)}.hover\:border-slate-700:hover{border-color:var(--color-slate-700)}.hover\:bg-\[\#1a262b\]:hover{background-color:#1a262b}.hover\:bg-\[\#11a4d4\]:hover{background-color:#11a4d4}.hover\:bg-\[\#11a4d4\]\/15:hover{background-color:oklab(67.2064% -.0856208 -.096275/.15)}.hover\:bg-\[\#101d22\]:hover{background-color:#101d22}.hover\:bg-\[\#161616\]:hover{background-color:#161616}.hover\:bg-\[\#a855f7\]\/15:hover{background-color:oklab(62.6846% .129701 -.193012/.15)}.hover\:bg-\[\#f97316\]\/15:hover{background-color:oklab(70.4871% .125896 .137895/.15)}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.hover\:bg-slate-700\/60:hover{background-color:#31415899}@supports (color:color-mix(in lab, red, red)){.hover\:bg-slate-700\/60:hover{background-color:color-mix(in oklab, var(--color-slate-700) 60%, transparent)}}.hover\:bg-slate-800\/60:hover{background-color:#1d293d99}@supports (color:color-mix(in lab, red, red)){.hover\:bg-slate-800\/60:hover{background-color:color-mix(in oklab, var(--color-slate-800) 60%, transparent)}}.hover\:text-\[\#7dd3fc\]:hover{color:#7dd3fc}.hover\:text-\[\#11a4d4\]:hover{color:#11a4d4}.hover\:text-\[\#38bdf8\]:hover{color:#38bdf8}.hover\:text-red-100:hover{color:var(--color-red-100)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-sky-100:hover{color:var(--color-sky-100)}.hover\:text-slate-100:hover{color:var(--color-slate-100)}.hover\:text-slate-200:hover{color:var(--color-slate-200)}.hover\:text-slate-300:hover{color:var(--color-slate-300)}.hover\:text-white:hover{color:var(--color-white)}}.focus\:border-\[\#11a4d4\]:focus{border-color:#11a4d4}.focus\:border-red-500:focus{border-color:var(--color-red-500)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-100:disabled{opacity:1}@media not all and (width>=1120px){.max-\[1120px\]\:grid-cols-\[minmax\(0\,1fr\)_260px\]{grid-template-columns:minmax(0,1fr) 260px}}@media not all and (width>=1100px){.max-\[1100px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media not all and (width>=980px){.max-\[980px\]\:hidden{display:none}.max-\[980px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-\[980px\]\:grid-cols-\[240px_minmax\(0\,1fr\)\]{grid-template-columns:240px minmax(0,1fr)}.max-\[980px\]\:border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.max-\[980px\]\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}}@media not all and (width>=920px){.max-\[920px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media (width>=40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.dark\:bg-\[\#1a262b\]:where(.dark,.dark *){background-color:#1a262b}.dark\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\:text-slate-500:where(.dark,.dark *){color:var(--color-slate-500)}}html,body,#root{height:100%}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#101d22;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Helvetica Neue,sans-serif}code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.model-response-markdown{color:#dbe7e8;overflow-wrap:anywhere}.model-response-markdown>:first-child{margin-top:0}.model-response-markdown>:last-child{margin-bottom:0}.model-response-markdown p{margin:0 0 .85rem}.model-response-markdown h1,.model-response-markdown h2,.model-response-markdown h3,.model-response-markdown h4{color:#f8fafc;letter-spacing:0;margin:1.1rem 0 .45rem;font-weight:700;line-height:1.25}.model-response-markdown h1{font-size:1.15rem}.model-response-markdown h2{font-size:1.05rem}.model-response-markdown h3,.model-response-markdown h4{font-size:.95rem}.model-response-markdown a{color:#42c7ec;text-underline-offset:3px;-webkit-text-decoration:underline #42c7ec73;text-decoration:underline #42c7ec73}.model-response-markdown a:hover{color:#7dd3fc;text-decoration-color:currentColor}.model-response-markdown strong{color:#f8fafc;font-weight:700}.model-response-markdown del{color:#94a3b8}.model-response-markdown ul,.model-response-markdown ol{margin:0 0 .95rem;padding-left:1.25rem;list-style-position:outside}.model-response-markdown ul{list-style-type:disc}.model-response-markdown ol{list-style-type:decimal}.model-response-markdown ul ul,.model-response-markdown ol ul{margin:.25rem 0;list-style-type:circle}.model-response-markdown ul ol,.model-response-markdown ol ol{margin:.25rem 0;list-style-type:lower-alpha}.model-response-markdown li{margin:.25rem 0;padding-left:.15rem}.model-response-markdown li::marker{color:#11a4d4}.model-response-markdown blockquote{color:#cbd5e1;background:#0bda5712;border-left:2px solid #0bda57;margin:.95rem 0;padding:.55rem .85rem}.model-response-markdown hr{border:0;border-top:1px solid #334155cc;margin:1rem 0}.model-response-markdown table{border-collapse:collapse;border:1px solid #334155e6;border-radius:3px;width:max-content;max-width:100%;margin:1rem 0;font-size:.82rem;display:block;overflow-x:auto}.model-response-markdown th,.model-response-markdown td{text-align:left;vertical-align:top;border:1px solid #334155cc;padding:.45rem .6rem}.model-response-markdown th{color:#e2f6fb;background:#11a4d41f;font-weight:700}.model-response-markdown td{color:#dbe7e8;background:#0e11166b}.model-response-markdown :not(pre)>code{color:#11a4d4;background:#111a1f;border:1px solid #e2e8f02e;border-radius:3px;padding:.1rem .3rem;font-size:.86em}.model-response-markdown pre{color:#d1d5db;background:#0e1116;border:1px solid #334155e6;border-left:2px solid #0bda57;border-radius:2px;margin:.95rem 0;padding:.85rem;font-size:.78rem;line-height:1.55;overflow-x:auto}.model-response-markdown pre code{color:inherit;font-size:inherit;background:0 0}.compact-terminal-markdown{color:#d4d4d4;overflow-wrap:anywhere;word-break:break-word;font-size:12px;line-height:1.45}.compact-terminal-markdown>:first-child{margin-top:0}.compact-terminal-markdown>:last-child{margin-bottom:0}.compact-terminal-markdown p{margin:0 0 .55rem}.compact-terminal-reasoning{color:#c7b27a}.compact-terminal-reasoning p{margin-bottom:.35rem}.compact-terminal-reasoning li::marker{color:#f59e0b}.compact-terminal-markdown h1,.compact-terminal-markdown h2,.compact-terminal-markdown h3,.compact-terminal-markdown h4{color:#f3f4f6;margin:.8rem 0 .35rem;font-size:.95rem;line-height:1.3}.compact-terminal-markdown a{color:#38bdf8}.compact-terminal-markdown ul,.compact-terminal-markdown ol{margin:0 0 .55rem;padding-left:1.35rem;list-style-position:outside}.compact-terminal-markdown ul{list-style-type:disc}.compact-terminal-markdown ol{list-style-type:decimal}.compact-terminal-markdown ul ul,.compact-terminal-markdown ol ul{margin:.2rem 0;list-style-type:circle}.compact-terminal-markdown ul ol,.compact-terminal-markdown ol ol{margin:.2rem 0;list-style-type:lower-alpha}.compact-terminal-markdown li{margin:.15rem 0;padding-left:.1rem}.compact-terminal-markdown li::marker{color:#38bdf8}.compact-terminal-markdown li>p{margin:.15rem 0}.compact-terminal-markdown input[type=checkbox]{vertical-align:-.12em;accent-color:#38bdf8;margin:0 .45rem 0 -1.15rem}.compact-terminal-markdown blockquote{color:#d4d4d4;background:#38bdf814;border-left:1px solid #38bdf8;margin:.6rem 0;padding:.45rem .7rem}.compact-terminal-markdown :not(pre)>code{color:#38bdf8;background:#161616;border:1px solid #5a5a5a99;border-radius:2px;padding:.05rem .25rem}.compact-terminal-markdown pre{color:#d4d4d4;background:#111;border:1px solid #2a2a2a;max-width:100%;margin:.65rem 0;padding:.65rem .8rem;font-size:.78rem;line-height:1.5;overflow-x:auto}.compact-terminal-markdown table{border-collapse:collapse;max-width:100%;display:block;overflow-x:auto}.compact-terminal-markdown th,.compact-terminal-markdown td{vertical-align:top;border:1px solid #2a2a2a;padding:.25rem .4rem}.compact-terminal-markdown th{color:#f3f4f6;background:#161616}.compact-terminal-markdown .token.comment,.model-response-markdown .token.comment,.compact-terminal-markdown .token.prolog,.model-response-markdown .token.prolog,.compact-terminal-markdown .token.doctype,.model-response-markdown .token.doctype,.compact-terminal-markdown .token.cdata,.model-response-markdown .token.cdata{color:#737373}.compact-terminal-markdown .token.punctuation,.model-response-markdown .token.punctuation{color:#94a3b8}.compact-terminal-markdown .token.property,.model-response-markdown .token.property,.compact-terminal-markdown .token.tag,.model-response-markdown .token.tag,.compact-terminal-markdown .token.boolean,.model-response-markdown .token.boolean,.compact-terminal-markdown .token.number,.model-response-markdown .token.number,.compact-terminal-markdown .token.constant,.model-response-markdown .token.constant,.compact-terminal-markdown .token.symbol,.model-response-markdown .token.symbol{color:#60a5fa}.compact-terminal-markdown .token.selector,.model-response-markdown .token.selector,.compact-terminal-markdown .token.attr-name,.model-response-markdown .token.attr-name,.compact-terminal-markdown .token.string,.model-response-markdown .token.string,.compact-terminal-markdown .token.char,.model-response-markdown .token.char,.compact-terminal-markdown .token.builtin,.model-response-markdown .token.builtin{color:#22c55e}.compact-terminal-markdown .token.operator,.model-response-markdown .token.operator,.compact-terminal-markdown .token.entity,.model-response-markdown .token.entity,.compact-terminal-markdown .token.url,.model-response-markdown .token.url,.compact-terminal-markdown .token.variable,.model-response-markdown .token.variable{color:#facc15}.compact-terminal-markdown .token.atrule,.model-response-markdown .token.atrule,.compact-terminal-markdown .token.attr-value,.model-response-markdown .token.attr-value,.compact-terminal-markdown .token.function,.model-response-markdown .token.function,.compact-terminal-markdown .token.class-name,.model-response-markdown .token.class-name{color:#38bdf8}.compact-terminal-markdown .token.keyword,.model-response-markdown .token.keyword{color:#d946ef}.compact-terminal-markdown .token.regex,.model-response-markdown .token.regex,.compact-terminal-markdown .token.important,.model-response-markdown .token.important{color:#fb923c}.compact-terminal-markdown .token.deleted,.model-response-markdown .token.deleted{color:#ef4444}.compact-terminal-markdown .token.inserted,.model-response-markdown .token.inserted{color:#22c55e}.compact-terminal-json{--w-rjv-background-color:transparent;--w-rjv-border-left:#2a2a2a;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.compact-terminal-function-call{overflow-wrap:anywhere;word-break:break-word}.compact-terminal-json-toggle{font:inherit;cursor:pointer;background:0 0;border:0;margin:0;padding:0}.compact-terminal-json-toggle:hover{text-underline-offset:2px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.compact-terminal-json-caret{color:#a3a3a3;width:.75em;text-decoration:none;display:inline-block}.context-files-view .mdxeditor{--baseBg:#151f24;--baseBorderColor:#334155;--baseTextColor:#dbe7e8;--accentBg:#11a4d42e;--accentTextColor:#f8fafc;--accentBaseColor:#11a4d4;--basePageBg:transparent;color:#dbe7e8;flex-direction:column;min-height:100%;display:flex}.context-files-view .mdxeditor-toolbar{z-index:2;background:#151f24;border-bottom:1px solid #1e293b;position:sticky;top:0;overflow-x:auto}.context-files-view .mdxeditor-toolbar [role=toolbar]{gap:.3rem;padding:.45rem .55rem}.context-files-view .mdxeditor-root-contenteditable,.context-files-mdx-content{color:#dbe7e8;overflow-wrap:anywhere;word-break:break-word;width:100%;min-width:0;min-height:calc(100vh - 14rem);padding:1.15rem 1.25rem 5rem}.context-files-mdx-content h1,.context-files-mdx-content h2,.context-files-mdx-content h3,.context-files-mdx-content h4,.context-files-mdx-content h5,.context-files-mdx-content h6{color:#f8fafc;margin:1.2rem 0 .55rem;line-height:1.2}.context-files-mdx-content h1{margin-top:0;font-size:1.6rem}.context-files-mdx-content h2{font-size:1.25rem}.context-files-mdx-content h3{font-size:1.05rem}.context-files-mdx-content ul,.context-files-mdx-content ol{margin:0 0 1rem;padding-left:1.4rem}.context-files-mdx-content blockquote{color:#cbd5e1;border-left:4px solid #11a4d473;margin-left:0;padding-left:.9rem}.context-files-mdx-content table{border-collapse:collapse;width:100%;display:block;overflow-x:auto}.context-files-mdx-content th,.context-files-mdx-content td{border:1px solid #334155;padding:.5rem .6rem}.context-files-view .cm-editor,.context-files-view .cm-gutters{color:#dbe7e8;background:#0e1116}.context-files-view .cm-scroller,.context-files-view pre{max-width:100%;overflow-x:auto}.context-files-view .cm-cursor,.context-files-view .cm-dropCursor{border-left-color:#11a4d4}.context-files-view [class*=_iconButton_],.context-files-view [class*=_toolbarButton_],.context-files-view [class*=_toolbarToggleItem_],.context-files-view [class*=_selectTrigger_],.context-files-view [class*=_toolbarNodeKindSelectTrigger_],.context-files-view [class*=_toolbarButtonSelectTrigger_]{color:#94a3b8!important;box-shadow:none!important;background:0 0!important;border-color:#2a3943!important;font-weight:400!important}.context-files-view [class*=_iconButton_] svg,.context-files-view [class*=_toolbarButton_] svg,.context-files-view [class*=_toolbarToggleItem_] svg,.context-files-view [class*=_selectTrigger_] svg,.context-files-view [class*=_toolbarNodeKindSelectTrigger_] svg,.context-files-view [class*=_toolbarButtonSelectTrigger_] svg{opacity:.88;color:#94a3b8!important;stroke:currentColor!important;width:18px!important;height:18px!important}.context-files-view [class*=_iconButton_]:hover,.context-files-view [class*=_toolbarButton_]:hover,.context-files-view [class*=_toolbarToggleItem_]:hover,.context-files-view [class*=_selectTrigger_]:hover,.context-files-view [class*=_toolbarNodeKindSelectTrigger_]:hover,.context-files-view [class*=_toolbarButtonSelectTrigger_]:hover{color:#cbd5e1!important;background:#ffffff08!important;border-color:#334155!important}.context-files-view [class*=_iconButton_]:hover svg,.context-files-view [class*=_toolbarButton_]:hover svg,.context-files-view [class*=_toolbarToggleItem_]:hover svg,.context-files-view [class*=_selectTrigger_]:hover svg,.context-files-view [class*=_toolbarNodeKindSelectTrigger_]:hover svg,.context-files-view [class*=_toolbarButtonSelectTrigger_]:hover svg{opacity:.94;color:#cbd5e1!important}.context-files-view [data-state=on],.context-files-view [aria-checked=true]{color:#dbe7e8!important;background:#11a4d41f!important;border-color:#11a4d473!important}.context-files-view [data-state=on] svg,.context-files-view [aria-checked=true] svg{opacity:.94;color:#cbd5e1!important}.context-files-view [class*=_selectContent_],.context-files-view [class*=_dropdownMenuContent_],.context-files-view [class*=_dialogContent_]{color:#dbe7e8!important;background:#111a1f!important;border:1px solid #334155!important}.context-files-view [class*=_toolbarToggleSingleGroup_]{gap:.3rem}.context-files-plain-fallback{flex-direction:column;height:100%;min-height:0;display:flex}.context-files-plain-fallback__notice{color:#fde68a;background:#f59e0b1a;border-bottom:1px solid #1e293b;margin:0;padding:.75rem 1rem;font-size:.84rem}.context-files-plain-fallback__textarea{color:#dbe7e8;min-height:0;font:inherit;resize:none;background:#151f24;border:0;outline:none;flex:1;padding:1rem 1.15rem 4rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;line-height:1.55;overflow:auto}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
package/dist/env.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
-
import { resolve } from "node:path";
|
|
3
|
-
function parseEnvLine(line) {
|
|
4
|
-
const trimmed = line.trim();
|
|
5
|
-
if (!trimmed || trimmed.startsWith("#"))
|
|
6
|
-
return undefined;
|
|
7
|
-
const equalsIndex = trimmed.indexOf("=");
|
|
8
|
-
if (equalsIndex === -1)
|
|
9
|
-
return undefined;
|
|
10
|
-
const key = trimmed.slice(0, equalsIndex).trim();
|
|
11
|
-
let value = trimmed.slice(equalsIndex + 1).trim();
|
|
12
|
-
if (!key)
|
|
13
|
-
return undefined;
|
|
14
|
-
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
15
|
-
(value.startsWith("'") && value.endsWith("'"))) {
|
|
16
|
-
value = value.slice(1, -1);
|
|
17
|
-
}
|
|
18
|
-
return [key, value];
|
|
19
|
-
}
|
|
20
|
-
export function loadDotEnv(path = ".env") {
|
|
21
|
-
const resolvedPath = resolve(path);
|
|
22
|
-
if (!existsSync(resolvedPath))
|
|
23
|
-
return;
|
|
24
|
-
const content = readFileSync(resolvedPath, "utf-8");
|
|
25
|
-
for (const line of content.split(/\r?\n/)) {
|
|
26
|
-
const entry = parseEnvLine(line);
|
|
27
|
-
if (!entry)
|
|
28
|
-
continue;
|
|
29
|
-
const [key, value] = entry;
|
|
30
|
-
process.env[key] ??= value;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { Type } from "@mariozechner/pi-ai";
|
|
3
|
-
import { defineTool } from "@mariozechner/pi-coding-agent";
|
|
4
|
-
const DEFAULT_MAX_OUTPUT_CHARS = 20000;
|
|
5
|
-
function truncate(value, maxChars) {
|
|
6
|
-
if (value.length <= maxChars)
|
|
7
|
-
return value;
|
|
8
|
-
return `${value.slice(0, maxChars)}\n[truncated ${value.length - maxChars} chars]`;
|
|
9
|
-
}
|
|
10
|
-
const piboExecTool = defineTool({
|
|
11
|
-
name: "pibo_exec",
|
|
12
|
-
label: "Pibo Exec",
|
|
13
|
-
description: "Run a shell command on this machine with full agent privileges.",
|
|
14
|
-
promptSnippet: "Run a shell command on this machine. Use directly for short commands, or wrap with pibo_run_start for long-running commands.",
|
|
15
|
-
parameters: Type.Object({
|
|
16
|
-
command: Type.String({ description: "Shell command to run through bash -lc" }),
|
|
17
|
-
cwd: Type.Optional(Type.String({ description: "Working directory. Defaults to the pibo runtime cwd." })),
|
|
18
|
-
timeoutMs: Type.Optional(Type.Number({ description: "Optional timeout in milliseconds. Omit for no timeout." })),
|
|
19
|
-
maxOutputChars: Type.Optional(Type.Number({ description: "Maximum stdout/stderr chars returned per stream" })),
|
|
20
|
-
}),
|
|
21
|
-
async execute(_toolCallId, params, signal, _onUpdate, ctx) {
|
|
22
|
-
const cwd = params.cwd ?? ctx.cwd;
|
|
23
|
-
const maxOutputChars = Math.max(0, params.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS);
|
|
24
|
-
const result = await new Promise((resolve, reject) => {
|
|
25
|
-
const child = spawn("bash", ["-lc", params.command], {
|
|
26
|
-
cwd,
|
|
27
|
-
env: process.env,
|
|
28
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
29
|
-
});
|
|
30
|
-
let stdout = "";
|
|
31
|
-
let stderr = "";
|
|
32
|
-
let timedOut = false;
|
|
33
|
-
const timeout = params.timeoutMs && params.timeoutMs > 0
|
|
34
|
-
? setTimeout(() => {
|
|
35
|
-
timedOut = true;
|
|
36
|
-
child.kill("SIGTERM");
|
|
37
|
-
}, params.timeoutMs)
|
|
38
|
-
: undefined;
|
|
39
|
-
const abort = () => {
|
|
40
|
-
timedOut = false;
|
|
41
|
-
child.kill("SIGTERM");
|
|
42
|
-
};
|
|
43
|
-
signal?.addEventListener("abort", abort, { once: true });
|
|
44
|
-
child.stdout?.on("data", (chunk) => {
|
|
45
|
-
stdout += String(chunk);
|
|
46
|
-
});
|
|
47
|
-
child.stderr?.on("data", (chunk) => {
|
|
48
|
-
stderr += String(chunk);
|
|
49
|
-
});
|
|
50
|
-
child.once("error", (error) => {
|
|
51
|
-
if (timeout)
|
|
52
|
-
clearTimeout(timeout);
|
|
53
|
-
signal?.removeEventListener("abort", abort);
|
|
54
|
-
reject(error);
|
|
55
|
-
});
|
|
56
|
-
child.once("close", (exitCode, exitSignal) => {
|
|
57
|
-
if (timeout)
|
|
58
|
-
clearTimeout(timeout);
|
|
59
|
-
signal?.removeEventListener("abort", abort);
|
|
60
|
-
resolve({
|
|
61
|
-
command: params.command,
|
|
62
|
-
cwd,
|
|
63
|
-
exitCode,
|
|
64
|
-
signal: exitSignal,
|
|
65
|
-
stdout: truncate(stdout, maxOutputChars),
|
|
66
|
-
stderr: truncate(stderr, maxOutputChars),
|
|
67
|
-
timedOut,
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
const text = [
|
|
72
|
-
`exitCode: ${result.exitCode}`,
|
|
73
|
-
result.signal ? `signal: ${result.signal}` : undefined,
|
|
74
|
-
result.timedOut ? "timedOut: true" : undefined,
|
|
75
|
-
result.stdout ? `stdout:\n${result.stdout}` : undefined,
|
|
76
|
-
result.stderr ? `stderr:\n${result.stderr}` : undefined,
|
|
77
|
-
].filter(Boolean).join("\n\n");
|
|
78
|
-
return {
|
|
79
|
-
content: [{ type: "text", text }],
|
|
80
|
-
details: result,
|
|
81
|
-
isError: result.exitCode !== 0,
|
|
82
|
-
};
|
|
83
|
-
},
|
|
84
|
-
});
|
|
85
|
-
export function createPiboCoreToolProfiles() {
|
|
86
|
-
return [createToolProfile(piboExecTool)];
|
|
87
|
-
}
|
|
88
|
-
function createToolProfile(definition) {
|
|
89
|
-
return {
|
|
90
|
-
name: definition.name,
|
|
91
|
-
description: definition.description,
|
|
92
|
-
definition,
|
|
93
|
-
};
|
|
94
|
-
}
|
package/dist/plugins/example.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { Type } from "@mariozechner/pi-ai";
|
|
2
|
-
import { defineTool } from "@mariozechner/pi-coding-agent";
|
|
3
|
-
import { InitialSessionContextBuilder } from "../core/profiles.js";
|
|
4
|
-
import { definePiboPlugin } from "./registry.js";
|
|
5
|
-
const EXAMPLE_SKILL = "pibo-example-plugin";
|
|
6
|
-
const EXAMPLE_TOOL = "pibo_example_plugin_note";
|
|
7
|
-
const piboExamplePluginTool = defineTool({
|
|
8
|
-
name: EXAMPLE_TOOL,
|
|
9
|
-
label: "Pibo Example Plugin Note",
|
|
10
|
-
description: "Return a short note from the minimal pibo example plugin.",
|
|
11
|
-
promptSnippet: "Use this tool to verify that a pibo plugin can add a custom tool.",
|
|
12
|
-
parameters: Type.Object({
|
|
13
|
-
note: Type.String({ description: "Short note to return from the example plugin tool" }),
|
|
14
|
-
}),
|
|
15
|
-
async execute(_toolCallId, params) {
|
|
16
|
-
return {
|
|
17
|
-
content: [{ type: "text", text: `Example plugin note: ${params.note}` }],
|
|
18
|
-
details: {
|
|
19
|
-
plugin: "pibo.example",
|
|
20
|
-
note: params.note,
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
export const piboExamplePlugin = definePiboPlugin({
|
|
26
|
-
id: "pibo.example",
|
|
27
|
-
name: "Pibo Example Plugin",
|
|
28
|
-
register(api) {
|
|
29
|
-
let stopExampleChannel;
|
|
30
|
-
api.registerSkill({
|
|
31
|
-
name: EXAMPLE_SKILL,
|
|
32
|
-
path: "examples/skills/pibo-example-plugin/SKILL.md",
|
|
33
|
-
});
|
|
34
|
-
api.registerTool(createToolProfile(piboExamplePluginTool));
|
|
35
|
-
api.registerProfile({
|
|
36
|
-
name: "pibo-example-plugin",
|
|
37
|
-
aliases: ["example-plugin"],
|
|
38
|
-
description: "Minimal profile that demonstrates plugin-provided skills and tools.",
|
|
39
|
-
create(context) {
|
|
40
|
-
return new InitialSessionContextBuilder("pibo-example-plugin")
|
|
41
|
-
.addSkill(context.getSkill(EXAMPLE_SKILL))
|
|
42
|
-
.addTool(context.getTool(EXAMPLE_TOOL))
|
|
43
|
-
.createSession();
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
api.registerChannel({
|
|
47
|
-
name: "pibo-example-channel",
|
|
48
|
-
kind: "custom",
|
|
49
|
-
description: "Minimal no-op channel that demonstrates plugin channel registration.",
|
|
50
|
-
auth: { mode: "trusted-local" },
|
|
51
|
-
start(context) {
|
|
52
|
-
stopExampleChannel = context.subscribe(() => { });
|
|
53
|
-
},
|
|
54
|
-
stop() {
|
|
55
|
-
stopExampleChannel?.();
|
|
56
|
-
stopExampleChannel = undefined;
|
|
57
|
-
},
|
|
58
|
-
});
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
function createToolProfile(definition) {
|
|
62
|
-
return {
|
|
63
|
-
name: definition.name,
|
|
64
|
-
description: definition.description,
|
|
65
|
-
definition,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { createRemoteAgentChannel } from "../remote/channel.js";
|
|
2
|
-
import { definePiboPlugin } from "./registry.js";
|
|
3
|
-
export const piboRemoteAgentPlugin = definePiboPlugin({
|
|
4
|
-
id: "pibo.remote-agent",
|
|
5
|
-
name: "Pibo Remote Agent",
|
|
6
|
-
register(api) {
|
|
7
|
-
api.registerChannel(createRemoteAgentChannel());
|
|
8
|
-
},
|
|
9
|
-
});
|
package/dist/remote/channel.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { createServer } from "node:net";
|
|
2
|
-
import { DEFAULT_REMOTE_AGENT_HOST, DEFAULT_REMOTE_AGENT_PORT, REMOTE_AGENT_CHANNEL_NAME, encodeRemoteAgentFrame, isRemoteAgentRequestFrame, remoteAgentErrorResponse, } from "./protocol.js";
|
|
3
|
-
function parseJsonLine(line) {
|
|
4
|
-
try {
|
|
5
|
-
return JSON.parse(line);
|
|
6
|
-
}
|
|
7
|
-
catch {
|
|
8
|
-
throw new Error("Invalid JSON frame");
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
function createConnection(socket) {
|
|
12
|
-
return {
|
|
13
|
-
socket,
|
|
14
|
-
send(frame) {
|
|
15
|
-
if (socket.destroyed)
|
|
16
|
-
return;
|
|
17
|
-
socket.write(encodeRemoteAgentFrame(frame));
|
|
18
|
-
},
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
export function createRemoteAgentChannel(options = {}) {
|
|
22
|
-
const host = options.host ?? DEFAULT_REMOTE_AGENT_HOST;
|
|
23
|
-
const port = options.port ?? DEFAULT_REMOTE_AGENT_PORT;
|
|
24
|
-
const defaultProfile = options.defaultProfile ?? "pibo-minimal";
|
|
25
|
-
const connections = new Set();
|
|
26
|
-
let server;
|
|
27
|
-
let unsubscribe;
|
|
28
|
-
let context;
|
|
29
|
-
const requireContext = () => {
|
|
30
|
-
if (!context)
|
|
31
|
-
throw new Error("Remote agent channel is not started");
|
|
32
|
-
return context;
|
|
33
|
-
};
|
|
34
|
-
const handleRequest = async (connection, frame) => {
|
|
35
|
-
const ctx = requireContext();
|
|
36
|
-
if (frame.type === "remote_attach") {
|
|
37
|
-
const binding = ctx.resolveSession({
|
|
38
|
-
channel: REMOTE_AGENT_CHANNEL_NAME,
|
|
39
|
-
externalId: frame.sessionName,
|
|
40
|
-
defaultProfile: frame.profile ?? defaultProfile,
|
|
41
|
-
});
|
|
42
|
-
connection.binding = binding;
|
|
43
|
-
return {
|
|
44
|
-
type: "remote_res",
|
|
45
|
-
id: frame.id,
|
|
46
|
-
ok: true,
|
|
47
|
-
payload: {
|
|
48
|
-
binding,
|
|
49
|
-
capabilities: {
|
|
50
|
-
actions: ctx.getGatewayActions(),
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
if (frame.type === "remote_capabilities") {
|
|
56
|
-
return {
|
|
57
|
-
type: "remote_res",
|
|
58
|
-
id: frame.id,
|
|
59
|
-
ok: true,
|
|
60
|
-
payload: {
|
|
61
|
-
actions: ctx.getGatewayActions(),
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
if (!connection.binding) {
|
|
66
|
-
throw new Error("Remote agent client is not attached");
|
|
67
|
-
}
|
|
68
|
-
const sessionKey = connection.binding.sessionKey;
|
|
69
|
-
const output = frame.input.type === "message"
|
|
70
|
-
? await ctx.emit({
|
|
71
|
-
type: "message",
|
|
72
|
-
sessionKey,
|
|
73
|
-
id: frame.id,
|
|
74
|
-
text: frame.input.text,
|
|
75
|
-
source: "ui",
|
|
76
|
-
})
|
|
77
|
-
: await ctx.emit({
|
|
78
|
-
type: "execution",
|
|
79
|
-
sessionKey,
|
|
80
|
-
id: frame.id,
|
|
81
|
-
action: frame.input.action,
|
|
82
|
-
params: frame.input.params,
|
|
83
|
-
});
|
|
84
|
-
return { type: "remote_res", id: frame.id, ok: true, payload: output };
|
|
85
|
-
};
|
|
86
|
-
const handleLine = async (connection, line) => {
|
|
87
|
-
let frame;
|
|
88
|
-
try {
|
|
89
|
-
frame = parseJsonLine(line);
|
|
90
|
-
if (!isRemoteAgentRequestFrame(frame)) {
|
|
91
|
-
throw new Error("Invalid remote agent request frame");
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
connection.send(remoteAgentErrorResponse("invalid", error));
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
try {
|
|
99
|
-
connection.send(await handleRequest(connection, frame));
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
connection.send(remoteAgentErrorResponse(frame.id, error));
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
const handleSocket = (socket) => {
|
|
106
|
-
const connection = createConnection(socket);
|
|
107
|
-
connections.add(connection);
|
|
108
|
-
let buffer = "";
|
|
109
|
-
socket.setEncoding("utf-8");
|
|
110
|
-
socket.on("data", (chunk) => {
|
|
111
|
-
buffer += chunk;
|
|
112
|
-
let newlineIndex = buffer.indexOf("\n");
|
|
113
|
-
while (newlineIndex !== -1) {
|
|
114
|
-
const line = buffer.slice(0, newlineIndex).trim();
|
|
115
|
-
buffer = buffer.slice(newlineIndex + 1);
|
|
116
|
-
if (line) {
|
|
117
|
-
void handleLine(connection, line);
|
|
118
|
-
}
|
|
119
|
-
newlineIndex = buffer.indexOf("\n");
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
socket.once("close", () => connections.delete(connection));
|
|
123
|
-
socket.once("error", () => connections.delete(connection));
|
|
124
|
-
};
|
|
125
|
-
return {
|
|
126
|
-
name: REMOTE_AGENT_CHANNEL_NAME,
|
|
127
|
-
kind: "local",
|
|
128
|
-
description: "Local Pi Coding Agent style remote-control channel for pibo sessions.",
|
|
129
|
-
auth: { mode: "trusted-local" },
|
|
130
|
-
async start(channelContext) {
|
|
131
|
-
if (server)
|
|
132
|
-
return;
|
|
133
|
-
context = channelContext;
|
|
134
|
-
unsubscribe = channelContext.subscribe((event) => {
|
|
135
|
-
for (const connection of connections) {
|
|
136
|
-
if (connection.binding?.sessionKey === event.sessionKey) {
|
|
137
|
-
connection.send({ type: "remote_event", sessionKey: event.sessionKey, payload: event });
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
server = createServer((socket) => handleSocket(socket));
|
|
142
|
-
await new Promise((resolve, reject) => {
|
|
143
|
-
server.once("error", reject);
|
|
144
|
-
server.listen(port, host, () => {
|
|
145
|
-
server.off("error", reject);
|
|
146
|
-
resolve();
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
const address = this.getAddress();
|
|
150
|
-
if (address && options.announce !== false) {
|
|
151
|
-
console.error(`pibo remote agent channel listening on ${address.host}:${address.port}`);
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
async stop() {
|
|
155
|
-
unsubscribe?.();
|
|
156
|
-
unsubscribe = undefined;
|
|
157
|
-
context = undefined;
|
|
158
|
-
for (const connection of connections) {
|
|
159
|
-
connection.socket.destroy();
|
|
160
|
-
}
|
|
161
|
-
connections.clear();
|
|
162
|
-
if (server) {
|
|
163
|
-
await new Promise((resolve, reject) => {
|
|
164
|
-
server.close((error) => (error ? reject(error) : resolve()));
|
|
165
|
-
});
|
|
166
|
-
server = undefined;
|
|
167
|
-
}
|
|
168
|
-
},
|
|
169
|
-
getAddress() {
|
|
170
|
-
const address = server?.address();
|
|
171
|
-
if (!address || typeof address === "string")
|
|
172
|
-
return undefined;
|
|
173
|
-
return { host: address.address, port: address.port };
|
|
174
|
-
},
|
|
175
|
-
};
|
|
176
|
-
}
|