conductor-oss 0.3.4 → 0.4.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 +225 -201
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +28 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/start.d.ts +14 -2
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +351 -180
- package/dist/commands/start.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/board-watcher.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/board-watcher.js +11 -8
- package/node_modules/@conductor-oss/core/dist/board-watcher.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/config-sync.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/config-sync.js +23 -2
- package/node_modules/@conductor-oss/core/dist/config-sync.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/config.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/config.js +87 -4
- package/node_modules/@conductor-oss/core/dist/config.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/metadata.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/metadata.js +4 -0
- package/node_modules/@conductor-oss/core/dist/metadata.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/prompt-builder.d.ts +1 -1
- package/node_modules/@conductor-oss/core/dist/prompt-builder.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/prompt-builder.js +5 -0
- package/node_modules/@conductor-oss/core/dist/prompt-builder.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/scaffold.d.ts +20 -2
- package/node_modules/@conductor-oss/core/dist/scaffold.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/scaffold.js +39 -5
- package/node_modules/@conductor-oss/core/dist/scaffold.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/session-manager.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/session-manager.js +82 -9
- package/node_modules/@conductor-oss/core/dist/session-manager.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/types.d.ts +33 -7
- package/node_modules/@conductor-oss/core/dist/types.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/types.js +151 -0
- package/node_modules/@conductor-oss/core/dist/types.js.map +1 -1
- package/node_modules/@conductor-oss/plugin-agent-amp/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-ccr/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-claude-code/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-codex/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-cursor-cli/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-droid/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-gemini/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-github-copilot/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-opencode/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-qwen-code/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-mcp-server/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-desktop/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-discord/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-runtime-tmux/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-scm-github/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-terminal-web/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-tracker-github/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-workspace-worktree/package.json +1 -1
- package/package.json +24 -23
- package/web/.next/standalone/node_modules/@babel/code-frame/lib/index.js +217 -0
- package/web/.next/standalone/node_modules/@babel/code-frame/package.json +32 -0
- package/web/.next/standalone/node_modules/@babel/helper-validator-identifier/lib/identifier.js +70 -0
- package/web/.next/standalone/node_modules/@babel/helper-validator-identifier/lib/index.js +57 -0
- package/web/.next/standalone/node_modules/@babel/helper-validator-identifier/lib/keyword.js +35 -0
- package/web/.next/standalone/node_modules/@babel/helper-validator-identifier/package.json +31 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/CLI.js +338 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/Cache.js +208 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/DefaultProvider.js +35 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/DefaultProvider.spec.js +75 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.js +235 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.js +47 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.js +296 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.js +43 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.js +63 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.js +374 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.js +63 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/debug.js +8 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.js +47 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/fileUtil.js +156 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/httpUtil.js +132 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/install.js +351 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/launch.js +426 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/main-cli.js +9 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/main.js +15 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/package.json +1 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/lib/esm/provider.js +13 -0
- package/web/.next/standalone/node_modules/@puppeteer/browsers/package.json +125 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js +53 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js +58 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/context.js +691 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/debug.js +6 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/deferred-promise.js +96 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/errors.js +58 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/esmHelpers.js +19 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/generated/emscripten-module.WASM_RELEASE_SYNC.js +387 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/generated/ffi.WASM_RELEASE_SYNC.js +71 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/index.js +128 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/lifetime.js +227 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/memory.js +41 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/module-asyncify.js +97 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/module-test.js +77 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/module.js +302 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/runtime-asyncify.js +49 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/runtime.js +300 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/types-ffi.js +38 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/types.js +58 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/variants.js +169 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/dist/vm-interface.js +12 -0
- package/web/.next/standalone/node_modules/@tootallnate/quickjs-emscripten/package.json +60 -0
- package/web/.next/standalone/node_modules/agent-base/dist/helpers.js +66 -0
- package/web/.next/standalone/node_modules/agent-base/dist/index.js +178 -0
- package/web/.next/standalone/node_modules/agent-base/package.json +46 -0
- package/web/.next/standalone/node_modules/ast-types/def/babel-core.js +256 -0
- package/web/.next/standalone/node_modules/ast-types/def/babel.js +11 -0
- package/web/.next/standalone/node_modules/ast-types/def/core.js +298 -0
- package/web/.next/standalone/node_modules/ast-types/def/es-proposals.js +33 -0
- package/web/.next/standalone/node_modules/ast-types/def/es2020.js +16 -0
- package/web/.next/standalone/node_modules/ast-types/def/es6.js +210 -0
- package/web/.next/standalone/node_modules/ast-types/def/es7.js +34 -0
- package/web/.next/standalone/node_modules/ast-types/def/esprima.js +49 -0
- package/web/.next/standalone/node_modules/ast-types/def/flow.js +292 -0
- package/web/.next/standalone/node_modules/ast-types/def/jsx.js +103 -0
- package/web/.next/standalone/node_modules/ast-types/def/type-annotations.js +40 -0
- package/web/.next/standalone/node_modules/ast-types/def/typescript.js +344 -0
- package/web/.next/standalone/node_modules/ast-types/fork.js +52 -0
- package/web/.next/standalone/node_modules/ast-types/gen/namedTypes.js +6 -0
- package/web/.next/standalone/node_modules/ast-types/lib/equiv.js +154 -0
- package/web/.next/standalone/node_modules/ast-types/lib/node-path.js +411 -0
- package/web/.next/standalone/node_modules/ast-types/lib/path-visitor.js +343 -0
- package/web/.next/standalone/node_modules/ast-types/lib/path.js +331 -0
- package/web/.next/standalone/node_modules/ast-types/lib/scope.js +318 -0
- package/web/.next/standalone/node_modules/ast-types/lib/shared.js +47 -0
- package/web/.next/standalone/node_modules/ast-types/lib/types.js +780 -0
- package/web/.next/standalone/node_modules/ast-types/main.js +53 -0
- package/web/.next/standalone/node_modules/ast-types/package.json +65 -0
- package/web/.next/standalone/node_modules/b4a/index.js +188 -0
- package/web/.next/standalone/node_modules/b4a/package.json +49 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/Client.js +782 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/FileInfo.js +92 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/FtpContext.js +365 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/ProgressTracker.js +72 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/StringEncoding.js +2 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/StringWriter.js +23 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/index.js +28 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/netUtils.js +66 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/parseControlResponse.js +66 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/parseList.js +79 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/parseListDOS.js +52 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/parseListMLSD.js +187 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/parseListUnix.js +155 -0
- package/web/.next/standalone/node_modules/basic-ftp/dist/transfer.js +318 -0
- package/web/.next/standalone/node_modules/basic-ftp/package.json +52 -0
- package/web/.next/standalone/node_modules/buffer-crc32/index.js +111 -0
- package/web/.next/standalone/node_modules/buffer-crc32/package.json +39 -0
- package/web/.next/standalone/node_modules/callsites/index.js +13 -0
- package/web/.next/standalone/node_modules/callsites/package.json +39 -0
- package/web/.next/standalone/node_modules/cliui/build/lib/index.js +287 -0
- package/web/.next/standalone/node_modules/cliui/build/lib/string-utils.js +27 -0
- package/web/.next/standalone/node_modules/cliui/index.mjs +13 -0
- package/web/.next/standalone/node_modules/cliui/package.json +83 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/Explorer.js +170 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/ExplorerBase.js +126 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/ExplorerSync.js +184 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/cacheWrapper.js +32 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/canUseDynamicImport.js +23 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/defaults.js +105 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/getDirectory.js +38 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/getPropertyByPath.js +28 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/index.js +148 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/loaders.js +150 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/merge.js +40 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/readFile.js +56 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/types.js +3 -0
- package/web/.next/standalone/node_modules/cosmiconfig/dist/util.js +99 -0
- package/web/.next/standalone/node_modules/cosmiconfig/package.json +103 -0
- package/web/.next/standalone/node_modules/data-uri-to-buffer/dist/common.js +54 -0
- package/web/.next/standalone/node_modules/data-uri-to-buffer/dist/node.js +26 -0
- package/web/.next/standalone/node_modules/data-uri-to-buffer/package.json +48 -0
- package/web/.next/standalone/node_modules/debug/package.json +64 -0
- package/web/.next/standalone/node_modules/debug/src/browser.js +272 -0
- package/web/.next/standalone/node_modules/debug/src/common.js +292 -0
- package/web/.next/standalone/node_modules/debug/src/index.js +10 -0
- package/web/.next/standalone/node_modules/debug/src/node.js +263 -0
- package/web/.next/standalone/node_modules/degenerator/dist/compile.js +107 -0
- package/web/.next/standalone/node_modules/degenerator/dist/degenerator.js +156 -0
- package/web/.next/standalone/node_modules/degenerator/dist/index.js +19 -0
- package/web/.next/standalone/node_modules/degenerator/package.json +42 -0
- package/web/.next/standalone/node_modules/end-of-stream/index.js +96 -0
- package/web/.next/standalone/node_modules/end-of-stream/package.json +37 -0
- package/web/.next/standalone/node_modules/env-paths/index.js +74 -0
- package/web/.next/standalone/node_modules/env-paths/license +9 -0
- package/web/.next/standalone/node_modules/env-paths/package.json +45 -0
- package/web/.next/standalone/node_modules/env-paths/readme.md +115 -0
- package/web/.next/standalone/node_modules/error-ex/index.js +141 -0
- package/web/.next/standalone/node_modules/error-ex/package.json +46 -0
- package/web/.next/standalone/node_modules/escalade/package.json +74 -0
- package/web/.next/standalone/node_modules/escalade/sync/index.d.mts +9 -0
- package/web/.next/standalone/node_modules/escalade/sync/index.js +18 -0
- package/web/.next/standalone/node_modules/escalade/sync/index.mjs +18 -0
- package/web/.next/standalone/node_modules/escodegen/escodegen.js +2667 -0
- package/web/.next/standalone/node_modules/escodegen/package.json +63 -0
- package/web/.next/standalone/node_modules/esprima/dist/esprima.js +6709 -0
- package/web/.next/standalone/node_modules/esprima/package.json +112 -0
- package/web/.next/standalone/node_modules/estraverse/estraverse.js +805 -0
- package/web/.next/standalone/node_modules/estraverse/package.json +40 -0
- package/web/.next/standalone/node_modules/esutils/lib/ast.js +144 -0
- package/web/.next/standalone/node_modules/esutils/lib/code.js +135 -0
- package/web/.next/standalone/node_modules/esutils/lib/keyword.js +165 -0
- package/web/.next/standalone/node_modules/esutils/lib/utils.js +33 -0
- package/web/.next/standalone/node_modules/esutils/package.json +44 -0
- package/web/.next/standalone/node_modules/events-universal/default.js +1 -0
- package/web/.next/standalone/node_modules/events-universal/package.json +39 -0
- package/web/.next/standalone/node_modules/extract-zip/LICENSE +23 -0
- package/web/.next/standalone/node_modules/extract-zip/cli.js +19 -0
- package/web/.next/standalone/node_modules/extract-zip/index.js +173 -0
- package/web/.next/standalone/node_modules/extract-zip/package.json +80 -0
- package/web/.next/standalone/node_modules/extract-zip/readme.md +57 -0
- package/web/.next/standalone/node_modules/fast-fifo/fixed-size.js +39 -0
- package/web/.next/standalone/node_modules/fast-fifo/index.js +48 -0
- package/web/.next/standalone/node_modules/fast-fifo/package.json +28 -0
- package/web/.next/standalone/node_modules/fd-slicer/index.js +296 -0
- package/web/.next/standalone/node_modules/fd-slicer/package.json +36 -0
- package/web/.next/standalone/node_modules/get-stream/buffer-stream.js +52 -0
- package/web/.next/standalone/node_modules/get-stream/index.js +60 -0
- package/web/.next/standalone/node_modules/get-stream/package.json +50 -0
- package/web/.next/standalone/node_modules/get-uri/dist/data.js +43 -0
- package/web/.next/standalone/node_modules/get-uri/dist/file.js +57 -0
- package/web/.next/standalone/node_modules/get-uri/dist/ftp.js +93 -0
- package/web/.next/standalone/node_modules/get-uri/dist/http-error.js +15 -0
- package/web/.next/standalone/node_modules/get-uri/dist/http.js +191 -0
- package/web/.next/standalone/node_modules/get-uri/dist/https.js +16 -0
- package/web/.next/standalone/node_modules/get-uri/dist/index.js +57 -0
- package/web/.next/standalone/node_modules/get-uri/dist/notfound.js +16 -0
- package/web/.next/standalone/node_modules/get-uri/dist/notmodified.js +17 -0
- package/web/.next/standalone/node_modules/get-uri/package.json +58 -0
- package/web/.next/standalone/node_modules/http-proxy-agent/dist/index.js +148 -0
- package/web/.next/standalone/node_modules/http-proxy-agent/package.json +47 -0
- package/web/.next/standalone/node_modules/https-proxy-agent/dist/index.js +180 -0
- package/web/.next/standalone/node_modules/https-proxy-agent/dist/parse-proxy-response.js +101 -0
- package/web/.next/standalone/node_modules/https-proxy-agent/package.json +50 -0
- package/web/.next/standalone/node_modules/import-fresh/index.js +34 -0
- package/web/.next/standalone/node_modules/import-fresh/node_modules/resolve-from/index.js +47 -0
- package/web/.next/standalone/node_modules/import-fresh/node_modules/resolve-from/license +9 -0
- package/web/.next/standalone/node_modules/import-fresh/node_modules/resolve-from/package.json +34 -0
- package/web/.next/standalone/node_modules/import-fresh/node_modules/resolve-from/readme.md +72 -0
- package/web/.next/standalone/node_modules/import-fresh/package.json +48 -0
- package/web/.next/standalone/node_modules/ip-address/dist/address-error.js +12 -0
- package/web/.next/standalone/node_modules/ip-address/dist/common.js +46 -0
- package/web/.next/standalone/node_modules/ip-address/dist/ip-address.js +35 -0
- package/web/.next/standalone/node_modules/ip-address/dist/ipv4.js +360 -0
- package/web/.next/standalone/node_modules/ip-address/dist/ipv6.js +1003 -0
- package/web/.next/standalone/node_modules/ip-address/dist/v4/constants.js +8 -0
- package/web/.next/standalone/node_modules/ip-address/dist/v6/constants.js +76 -0
- package/web/.next/standalone/node_modules/ip-address/dist/v6/helpers.js +45 -0
- package/web/.next/standalone/node_modules/ip-address/dist/v6/regular-expressions.js +95 -0
- package/web/.next/standalone/node_modules/ip-address/package.json +78 -0
- package/web/.next/standalone/node_modules/is-arrayish/index.js +10 -0
- package/web/.next/standalone/node_modules/is-arrayish/package.json +34 -0
- package/web/.next/standalone/node_modules/js-tokens/index.js +23 -0
- package/web/.next/standalone/node_modules/js-tokens/package.json +30 -0
- package/web/.next/standalone/node_modules/js-yaml/index.js +47 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/common.js +59 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/dumper.js +965 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/exception.js +55 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/loader.js +1733 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/schema/core.js +11 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/schema/default.js +22 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/schema/failsafe.js +17 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/schema/json.js +19 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/schema.js +121 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/snippet.js +101 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/binary.js +125 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/bool.js +35 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/float.js +97 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/int.js +156 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/map.js +8 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/merge.js +12 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/null.js +35 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/omap.js +44 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/pairs.js +53 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/seq.js +8 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/set.js +29 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/str.js +8 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type/timestamp.js +88 -0
- package/web/.next/standalone/node_modules/js-yaml/lib/type.js +66 -0
- package/web/.next/standalone/node_modules/js-yaml/package.json +66 -0
- package/web/.next/standalone/node_modules/json-parse-even-better-errors/index.js +121 -0
- package/web/.next/standalone/node_modules/json-parse-even-better-errors/package.json +33 -0
- package/web/.next/standalone/node_modules/lines-and-columns/build/index.js +62 -0
- package/web/.next/standalone/node_modules/lines-and-columns/package.json +49 -0
- package/web/.next/standalone/node_modules/lru-cache/index.js +1227 -0
- package/web/.next/standalone/node_modules/lru-cache/package.json +96 -0
- package/web/.next/standalone/node_modules/ms/index.js +162 -0
- package/web/.next/standalone/node_modules/ms/package.json +38 -0
- package/web/.next/standalone/node_modules/netmask/lib/netmask.js +208 -0
- package/web/.next/standalone/node_modules/netmask/package.json +36 -0
- package/web/.next/standalone/node_modules/once/once.js +42 -0
- package/web/.next/standalone/node_modules/once/package.json +33 -0
- package/web/.next/standalone/node_modules/pac-proxy-agent/dist/index.js +238 -0
- package/web/.next/standalone/node_modules/pac-proxy-agent/package.json +58 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/dateRange.js +73 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/dnsDomainIs.js +30 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/dnsDomainLevels.js +28 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/dnsResolve.js +32 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/index.js +87 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/ip.js +50 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/isInNet.js +42 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/isPlainHostName.js +23 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/isResolvable.js +23 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/localHostOrDomainIs.js +40 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/myIpAddress.js +50 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/shExpMatch.js +41 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/timeRange.js +92 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/util.js +22 -0
- package/web/.next/standalone/node_modules/pac-resolver/dist/weekdayRange.js +91 -0
- package/web/.next/standalone/node_modules/pac-resolver/package.json +47 -0
- package/web/.next/standalone/node_modules/parent-module/index.js +37 -0
- package/web/.next/standalone/node_modules/parent-module/package.json +46 -0
- package/web/.next/standalone/node_modules/parse-json/index.js +54 -0
- package/web/.next/standalone/node_modules/parse-json/package.json +45 -0
- package/web/.next/standalone/node_modules/pend/index.js +55 -0
- package/web/.next/standalone/node_modules/pend/package.json +18 -0
- package/web/.next/standalone/node_modules/picocolors/package.json +25 -0
- package/web/.next/standalone/node_modules/picocolors/picocolors.js +75 -0
- package/web/.next/standalone/node_modules/progress/index.js +1 -0
- package/web/.next/standalone/node_modules/progress/lib/node-progress.js +236 -0
- package/web/.next/standalone/node_modules/progress/package.json +26 -0
- package/web/.next/standalone/node_modules/proxy-agent/dist/index.js +138 -0
- package/web/.next/standalone/node_modules/proxy-agent/package.json +60 -0
- package/web/.next/standalone/node_modules/proxy-from-env/index.js +108 -0
- package/web/.next/standalone/node_modules/proxy-from-env/package.json +34 -0
- package/web/.next/standalone/node_modules/pump/index.js +86 -0
- package/web/.next/standalone/node_modules/pump/package.json +30 -0
- package/web/.next/standalone/node_modules/puppeteer/lib/esm/package.json +1 -0
- package/web/.next/standalone/node_modules/puppeteer/lib/esm/puppeteer/getConfiguration.js +122 -0
- package/web/.next/standalone/node_modules/puppeteer/lib/esm/puppeteer/puppeteer.js +40 -0
- package/web/.next/standalone/node_modules/puppeteer/package.json +145 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/package.json +1 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/Browser.js +204 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/BrowserContext.js +182 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/CDPSession.js +68 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/DeviceRequestPrompt.js +34 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/Dialog.js +90 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/ElementHandle.js +1406 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/ElementHandleSymbol.js +10 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/Frame.js +904 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/HTTPRequest.js +461 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/HTTPResponse.js +56 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/Input.js +211 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/JSHandle.js +227 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/Page.js +1511 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/Realm.js +44 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/Target.js +49 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/WebWorker.js +106 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/api.js +22 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/api/locators/locators.js +769 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/bidi/BrowserConnector.js +83 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Accessibility.js +591 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Binding.js +162 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/BluetoothEmulation.js +26 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Browser.js +321 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/BrowserConnector.js +26 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/BrowserContext.js +192 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/CdpPreloadScript.js +39 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/CdpSession.js +129 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Connection.js +244 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Coverage.js +372 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/DeviceRequestPrompt.js +151 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Dialog.js +23 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/ElementHandle.js +206 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/EmulationManager.js +458 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/ExecutionContext.js +457 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/ExtensionTransport.js +175 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Frame.js +358 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/FrameManager.js +455 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/FrameManagerEvents.js +24 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/FrameTree.js +91 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/HTTPRequest.js +195 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/HTTPResponse.js +126 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Input.js +499 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/IsolatedWorld.js +157 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/IsolatedWorlds.js +20 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/JSHandle.js +101 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/LifecycleWatcher.js +174 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/NetworkEventManager.js +162 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/NetworkManager.js +601 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Page.js +1006 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/PredefinedNetworkConditions.js +69 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Target.js +243 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/TargetManageEvents.js +7 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/TargetManager.js +320 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Tracing.js +110 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/WebWorker.js +73 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/cdp.js +43 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/utils.js +216 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.js +54 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/BrowserConnector.js +129 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/BrowserWebSocketTransport.js +39 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/CSSQueryHandler.js +18 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/CallbackRegistry.js +133 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/ConsoleMessage.js +78 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/CustomQueryHandler.js +114 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/Debug.js +109 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/Device.js +1604 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.js +94 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/EventEmitter.js +128 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/FileChooser.js +75 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/GetQueryHandler.js +70 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/HandleIterator.js +142 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/LazyArg.js +23 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManagerEvents.js +21 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.js +58 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/PQueryHandler.js +18 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/PSelectorParser.js +100 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/PierceQueryHandler.js +18 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/Puppeteer.js +98 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/QueryHandler.js +225 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/ScriptInjector.js +51 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/SecurityDetails.js +69 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.js +24 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/TextQueryHandler.js +15 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/TimeoutSettings.js +39 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/USKeyboardLayout.js +394 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/WaitTask.js +197 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/XPathQueryHandler.js +21 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/common.js +35 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/common/util.js +375 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/environment.js +24 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/generated/injected.js +9 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/index-browser.js +11 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/index.js +8 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserLauncher.js +312 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/node/ChromeLauncher.js +258 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/node/FirefoxLauncher.js +166 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/node/LaunchOptions.js +22 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.js +55 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/node/PipeTransport.js +72 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/node/PuppeteerNode.js +281 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/node/ScreenRecorder.js +279 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/node/node.js +12 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/node/util/fs.js +24 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/puppeteer-core.js +41 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/revisions.js +14 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/AsyncIterableUtil.js +29 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/Deferred.js +105 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/ErrorLike.js +41 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/Function.js +70 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/Mutex.js +46 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/assert.js +18 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/decorators.js +232 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/disposable.js +342 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/encoding.js +63 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/incremental-id-generator.js +18 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/util.js +13 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/puppeteer/util/version.js +10 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/third_party/mitt/mitt.js +44 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/third_party/parsel-js/parsel-js.js +196 -0
- package/web/.next/standalone/node_modules/puppeteer-core/lib/esm/third_party/rxjs/rxjs.js +2887 -0
- package/web/.next/standalone/node_modules/puppeteer-core/package.json +169 -0
- package/web/.next/standalone/node_modules/semver/functions/clean.js +8 -0
- package/web/.next/standalone/node_modules/semver/functions/compare-build.js +9 -0
- package/web/.next/standalone/node_modules/semver/functions/compare-loose.js +5 -0
- package/web/.next/standalone/node_modules/semver/functions/diff.js +60 -0
- package/web/.next/standalone/node_modules/semver/functions/inc.js +21 -0
- package/web/.next/standalone/node_modules/semver/functions/major.js +5 -0
- package/web/.next/standalone/node_modules/semver/functions/minor.js +5 -0
- package/web/.next/standalone/node_modules/semver/functions/patch.js +5 -0
- package/web/.next/standalone/node_modules/semver/functions/prerelease.js +8 -0
- package/web/.next/standalone/node_modules/semver/functions/rcompare.js +5 -0
- package/web/.next/standalone/node_modules/semver/functions/rsort.js +5 -0
- package/web/.next/standalone/node_modules/semver/functions/sort.js +5 -0
- package/web/.next/standalone/node_modules/semver/functions/valid.js +8 -0
- package/web/.next/standalone/node_modules/semver/index.js +91 -0
- package/web/.next/standalone/node_modules/semver/ranges/gtr.js +6 -0
- package/web/.next/standalone/node_modules/semver/ranges/intersects.js +9 -0
- package/web/.next/standalone/node_modules/semver/ranges/ltr.js +6 -0
- package/web/.next/standalone/node_modules/semver/ranges/max-satisfying.js +27 -0
- package/web/.next/standalone/node_modules/semver/ranges/min-satisfying.js +26 -0
- package/web/.next/standalone/node_modules/semver/ranges/min-version.js +63 -0
- package/web/.next/standalone/node_modules/semver/ranges/outside.js +82 -0
- package/web/.next/standalone/node_modules/semver/ranges/simplify.js +49 -0
- package/web/.next/standalone/node_modules/semver/ranges/subset.js +249 -0
- package/web/.next/standalone/node_modules/semver/ranges/to-comparators.js +10 -0
- package/web/.next/standalone/node_modules/semver/ranges/valid.js +13 -0
- package/web/.next/standalone/node_modules/smart-buffer/build/smartbuffer.js +1233 -0
- package/web/.next/standalone/node_modules/smart-buffer/build/utils.js +108 -0
- package/web/.next/standalone/node_modules/smart-buffer/package.json +79 -0
- package/web/.next/standalone/node_modules/socks/build/client/socksclient.js +793 -0
- package/web/.next/standalone/node_modules/socks/build/common/constants.js +108 -0
- package/web/.next/standalone/node_modules/socks/build/common/helpers.js +167 -0
- package/web/.next/standalone/node_modules/socks/build/common/receivebuffer.js +43 -0
- package/web/.next/standalone/node_modules/socks/build/common/util.js +25 -0
- package/web/.next/standalone/node_modules/socks/build/index.js +18 -0
- package/web/.next/standalone/node_modules/socks/package.json +58 -0
- package/web/.next/standalone/node_modules/socks-proxy-agent/dist/index.js +195 -0
- package/web/.next/standalone/node_modules/socks-proxy-agent/package.json +142 -0
- package/web/.next/standalone/node_modules/source-map/lib/array-set.js +121 -0
- package/web/.next/standalone/node_modules/source-map/lib/base64-vlq.js +140 -0
- package/web/.next/standalone/node_modules/source-map/lib/base64.js +67 -0
- package/web/.next/standalone/node_modules/source-map/lib/binary-search.js +111 -0
- package/web/.next/standalone/node_modules/source-map/lib/mapping-list.js +79 -0
- package/web/.next/standalone/node_modules/source-map/lib/quick-sort.js +114 -0
- package/web/.next/standalone/node_modules/source-map/lib/source-map-consumer.js +1145 -0
- package/web/.next/standalone/node_modules/source-map/lib/source-map-generator.js +425 -0
- package/web/.next/standalone/node_modules/source-map/lib/source-node.js +413 -0
- package/web/.next/standalone/node_modules/source-map/lib/util.js +488 -0
- package/web/.next/standalone/node_modules/source-map/package.json +73 -0
- package/web/.next/standalone/node_modules/source-map/source-map.js +8 -0
- package/web/.next/standalone/node_modules/streamx/index.js +1184 -0
- package/web/.next/standalone/node_modules/streamx/package.json +34 -0
- package/web/.next/standalone/node_modules/tar-fs/LICENSE +21 -0
- package/web/.next/standalone/node_modules/tar-fs/README.md +154 -0
- package/web/.next/standalone/node_modules/tar-fs/index.js +400 -0
- package/web/.next/standalone/node_modules/tar-fs/package.json +61 -0
- package/web/.next/standalone/node_modules/tar-stream/constants.js +14 -0
- package/web/.next/standalone/node_modules/tar-stream/extract.js +406 -0
- package/web/.next/standalone/node_modules/tar-stream/headers.js +321 -0
- package/web/.next/standalone/node_modules/tar-stream/index.js +2 -0
- package/web/.next/standalone/node_modules/tar-stream/pack.js +287 -0
- package/web/.next/standalone/node_modules/tar-stream/package.json +42 -0
- package/web/.next/standalone/node_modules/text-decoder/index.js +64 -0
- package/web/.next/standalone/node_modules/text-decoder/lib/pass-through-decoder.js +19 -0
- package/web/.next/standalone/node_modules/text-decoder/lib/utf8-decoder.js +185 -0
- package/web/.next/standalone/node_modules/text-decoder/package.json +39 -0
- package/web/.next/standalone/node_modules/tslib/package.json +47 -0
- package/web/.next/standalone/node_modules/tslib/tslib.js +484 -0
- package/web/.next/standalone/node_modules/wrappy/package.json +29 -0
- package/web/.next/standalone/node_modules/wrappy/wrappy.js +33 -0
- package/web/.next/standalone/node_modules/ws/lib/buffer-util.js +131 -0
- package/web/.next/standalone/node_modules/ws/lib/constants.js +19 -0
- package/web/.next/standalone/node_modules/ws/lib/event-target.js +292 -0
- package/web/.next/standalone/node_modules/ws/lib/extension.js +203 -0
- package/web/.next/standalone/node_modules/ws/lib/limiter.js +55 -0
- package/web/.next/standalone/node_modules/ws/lib/permessage-deflate.js +528 -0
- package/web/.next/standalone/node_modules/ws/lib/receiver.js +706 -0
- package/web/.next/standalone/node_modules/ws/lib/sender.js +602 -0
- package/web/.next/standalone/node_modules/ws/lib/stream.js +161 -0
- package/web/.next/standalone/node_modules/ws/lib/subprotocol.js +62 -0
- package/web/.next/standalone/node_modules/ws/lib/validation.js +152 -0
- package/web/.next/standalone/node_modules/ws/lib/websocket-server.js +554 -0
- package/web/.next/standalone/node_modules/ws/lib/websocket.js +1393 -0
- package/web/.next/standalone/node_modules/ws/package.json +69 -0
- package/web/.next/standalone/node_modules/ws/wrapper.mjs +8 -0
- package/web/.next/standalone/node_modules/y18n/build/lib/index.js +174 -0
- package/web/.next/standalone/node_modules/y18n/build/lib/platform-shims/node.js +19 -0
- package/web/.next/standalone/node_modules/y18n/index.mjs +8 -0
- package/web/.next/standalone/node_modules/y18n/package.json +70 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/argsert.js +62 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/command.js +449 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/completion-templates.js +48 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/completion.js +243 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/middleware.js +88 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/parse-command.js +32 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/typings/common-types.js +9 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/usage.js +584 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/utils/apply-extends.js +59 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/utils/is-promise.js +5 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/utils/levenshtein.js +34 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/utils/maybe-async-result.js +17 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/utils/obj-filter.js +10 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/utils/process-argv.js +17 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/utils/set-blocking.js +12 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/utils/which-module.js +10 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/validation.js +305 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/yargs-factory.js +1512 -0
- package/web/.next/standalone/node_modules/yargs/build/lib/yerror.js +9 -0
- package/web/.next/standalone/node_modules/yargs/helpers/helpers.mjs +10 -0
- package/web/.next/standalone/node_modules/yargs/index.mjs +8 -0
- package/web/.next/standalone/node_modules/yargs/lib/platform-shims/esm.mjs +73 -0
- package/web/.next/standalone/node_modules/yargs/package.json +123 -0
- package/web/.next/standalone/node_modules/yargs-parser/build/lib/index.js +62 -0
- package/web/.next/standalone/node_modules/yargs-parser/build/lib/string-utils.js +65 -0
- package/web/.next/standalone/node_modules/yargs-parser/build/lib/tokenize-arg-string.js +40 -0
- package/web/.next/standalone/node_modules/yargs-parser/build/lib/yargs-parser-types.js +12 -0
- package/web/.next/standalone/node_modules/yargs-parser/build/lib/yargs-parser.js +1045 -0
- package/web/.next/standalone/node_modules/yargs-parser/package.json +92 -0
- package/web/.next/standalone/node_modules/yauzl/LICENSE +21 -0
- package/web/.next/standalone/node_modules/yauzl/README.md +658 -0
- package/web/.next/standalone/node_modules/yauzl/index.js +796 -0
- package/web/.next/standalone/node_modules/yauzl/package.json +40 -0
- package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/packages/web/.next/app-path-routes-manifest.json +10 -0
- package/web/.next/standalone/packages/web/.next/build-manifest.json +6 -6
- package/web/.next/standalone/packages/web/.next/node_modules/puppeteer-582bc9288a971b4a/lib/esm/package.json +1 -0
- package/web/.next/standalone/packages/web/.next/node_modules/puppeteer-582bc9288a971b4a/lib/esm/puppeteer/getConfiguration.js +122 -0
- package/web/.next/standalone/packages/web/.next/node_modules/puppeteer-582bc9288a971b4a/lib/esm/puppeteer/puppeteer.js +40 -0
- package/web/.next/standalone/packages/web/.next/node_modules/puppeteer-582bc9288a971b4a/package.json +145 -0
- package/web/.next/standalone/packages/web/.next/prerender-manifest.json +3 -27
- package/web/.next/standalone/packages/web/.next/routes-manifest.json +70 -0
- package/web/.next/standalone/packages/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/_global-error/page.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js +10 -7
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.rsc +15 -14
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +15 -14
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +6 -5
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js +5 -4
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route.js +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route/build-manifest.json +11 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js +10 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js.map +5 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js.nft.json +1 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/auth/grant/route.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/auth/grant/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/icon.svg/route.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/icon.svg/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/page/build-manifest.json +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/page/react-loadable-manifest.json +4 -3
- package/web/.next/standalone/packages/web/.next/server/app/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/page.js +13 -9
- package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/build-manifest.json +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js +13 -9
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/build-manifest.json +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js +10 -7
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page/build-manifest.json +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js +11 -8
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app-paths-manifest.json +10 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/26076_server_app_api_sessions_[id]_preview_screenshot_route_actions_dcbbcaf6.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/29f24__next-internal_server_app_api_sessions_[id]_feed_stream_route_actions_1262f517.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/29f24__next-internal_server_app_api_sessions_[id]_interrupt_route_actions_89990829.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/29f24__next-internal_server_app_api_sessions_[id]_preview_dom_route_actions_fb81dadb.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/730ea_web__next-internal_server_app_api_boards_comments_route_actions_7acfa960.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/730ea_web__next-internal_server_app_api_context-files_open_route_actions_ffa7eab4.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/730ea_web__next-internal_server_app_api_sessions_[id]_preview_route_actions_9f632c66.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[externals]__06cd15c5._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__0c7f79b1._.js → [root-of-the-server]__025155ac._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__144e8e60._.js → [root-of-the-server]__03277e82._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__16d4a78f._.js → [root-of-the-server]__03d02e36._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__095ffdaa._.js → [root-of-the-server]__06d0fa23._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__07d320fc._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__09d81126._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0a4bdecd._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0d3270b2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0f87f848._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__120e7cdf._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__186317eb._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1888a793._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1ae07be2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1b995ded._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1c1c0e68._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1ce34a21._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__228603ec._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__256d4deb._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2a02fc49._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2ce39d51._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2d6ad93c._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__31703e2b._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__394943dc._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3bab2cf7._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3f48e8a2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__405fc5bc._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__412dec17._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__428f1837._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__446f586e._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__46ba5636._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__49e358a8._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4a3e9ddd._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4d8a3fa3._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5dc7cf0d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5fd67791._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__61a55b93._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__621d9bca._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6313c91e._.js +28 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__65fcccc8._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__668ff2cd._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__66e8ccce._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6b163dd7._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6c5a5852._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__73601621._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__747ac51a._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__78d6e137._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7dac9015._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7e929085._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7fcfdb86._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__80fb443b._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__85538066._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__85b114a2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__865615a6._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__893cfe3c._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__90d02df4._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__925bed49._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__95440fe8._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__968aabbd._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__97658502._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9b2f424f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9ca51739._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a45d3a1d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b5c89bad._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b73a3118._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c06cb06b._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c624410f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c6ecf2e6._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c9626ece._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c9b787f4._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cb1e2942._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cb29be7d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cc4964a5._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cdcdbbe3._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ce529f57._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cfaae401._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d2afbd4e._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d62bf196._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d8cd86c9._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__de098ee1._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e0d759be._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e6181b22._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e633102f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ea845f9f._.js +7 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__eabdec9e._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__eb0c88b2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ececfccf._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ed83cdf3._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__eda7b9ea._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef38eeb2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__efbfac9f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__efd26bfc._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f12a3bd3._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f4786ce9._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f4d63c18._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f8ebc9db._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/_2c837d66._.js +80 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_5eb57175.js +6 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_eaad1f33.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_web__next-internal_server_app_api_app-update_route_actions_67fa9ca7.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_web__next-internal_server_app_api_github_webhook_route_actions_16ed82df.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_web__next-internal_server_app_api_remote-access_route_actions_5ebfaea6.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[externals]_node:async_hooks_b485b2a4._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__000b8c99._.js +4 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__009ce29c._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__010700d3._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__0aa08967._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__11ca851a._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__29091976._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__29d8d063._.js +4 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__4168e031._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__5fccda2c._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__525ee5d4._.js → [root-of-the-server]__85aece6a._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__8a6b25f0._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__8bcf983b._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__a3c8291e._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__b388693f._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__d1efcbf0._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__d800fc87._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__e6f079d9._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_0e1412de._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_1f2460d5._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_230c0c14._.js +80 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_27fe5f5d._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_69e05fca._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_6cfd06c2._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_7321b77f._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_80efe193._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_8982bbf3._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_9f3d31e1._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b214b154._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b6d31783._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_c0f0e227._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_c9612a3a._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_e1c18705._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_f36ddaa9._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_270cb834._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_8d94411c._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_3d65ee57._.js +24 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_902120fe._.js +31 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{node_modules_@clerk_nextjs_dist_esm_app-router_57153687._.js → node_modules_@clerk_nextjs_dist_esm_app-router_0a811c5a._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_2c78c2f3._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_server_index_a054612e.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@radix-ui_02f0d3f0._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_message-square_2e76b8d9.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_a9871523._.js +14 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_ae5d7b42._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{node_modules_next_2a43e292._.js → node_modules_next_c73d6895._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_dist_08570d7f._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_dist_65e60196._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_dist_891f7b49._.js +6 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_cd51dad4.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_dist_esm_eedfc1fd._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_board_WorkspaceKanban_tsx_735b7999._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_ui_Tooltip_tsx_6becc8ca._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_features_dashboard_DashboardClient_tsx_81ae42b0._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_lib_cn_ts_d08d265f._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/functions-config-manifest.json +7 -5
- package/web/.next/standalone/packages/web/.next/server/middleware-build-manifest.js +4 -4
- package/web/.next/standalone/packages/web/.next/server/middleware.js +2 -4
- package/web/.next/standalone/packages/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +8 -8
- package/web/.next/standalone/packages/web/.next/static/{8a_zZln8ezVAo0jAilwbF → E4-NvSai1Ps20r9dtdpps}/_clientMiddlewareManifest.json +0 -4
- package/web/.next/standalone/packages/web/.next/static/chunks/006a91a252482204.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/07f3b9a104ce0ff4.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/1004422d31074d62.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/{12d9b4273416fe9b.js → 28eac764d6544827.js} +1 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/2e2e8fd2ceca47dc.js +6 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/30ababddac1b82dc.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/3349bdab17ed1183.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/3770166bed1577ce.js +4 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/4c3afea55dd8bc93.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/57858ac28cbf124d.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/7fd2a83e9e74f215.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/91e9e111a2536f92.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/aabc80195233b4da.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/bf82908a598c6de5.css +3 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/d6a81d2f8b98b4be.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/e9d0e95bbaa0f4fb.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/ebaa0c535c4135f1.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/{turbopack-57373a2ee9f56180.js → turbopack-49f4119854e8206e.js} +1 -1
- package/web/.next/standalone/packages/web/package.json +2 -1
- package/web/.next/standalone/packages/web/src/app/api/agents/route.ts +196 -2
- package/web/.next/standalone/packages/web/src/app/api/app-update/route.ts +6 -0
- package/web/.next/standalone/packages/web/src/app/api/auth/session/route.ts +38 -3
- package/web/.next/standalone/packages/web/src/app/api/boards/comments/route.ts +8 -0
- package/web/.next/standalone/packages/web/src/app/api/boards/route.ts +1 -0
- package/web/.next/standalone/packages/web/src/app/api/context-files/open/route.ts +8 -0
- package/web/.next/standalone/packages/web/src/app/api/github/webhook/route.ts +5 -0
- package/web/.next/standalone/packages/web/src/app/api/remote-access/route.ts +115 -0
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/feed/stream/route.ts +8 -0
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/interrupt/route.ts +8 -0
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/preview/dom/route.ts +37 -0
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/preview/route.test.ts +141 -0
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/preview/route.ts +90 -0
- package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/preview/screenshot/route.ts +43 -0
- package/web/.next/standalone/packages/web/src/app/auth/grant/route.ts +3 -28
- package/web/.next/standalone/packages/web/src/app/layout.tsx +4 -2
- package/web/.next/standalone/packages/web/src/app/page.tsx +32 -3
- package/web/.next/standalone/packages/web/src/app/sessions/[id]/page.tsx +36 -3
- package/web/.next/standalone/packages/web/src/app/sign-in/[[...sign-in]]/page.tsx +20 -2
- package/web/.next/standalone/packages/web/src/app/unlock/page.tsx +29 -7
- package/web/.next/standalone/packages/web/src/components/Dashboard.tsx +8 -4
- package/web/.next/standalone/packages/web/src/components/board/WorkspaceKanban.tsx +1524 -213
- package/web/.next/standalone/packages/web/src/components/layout/AppShell.tsx +30 -14
- package/web/.next/standalone/packages/web/src/components/layout/AppUpdateNotice.tsx +345 -0
- package/web/.next/standalone/packages/web/src/components/layout/WorkspaceSidebarPanel.tsx +1 -1
- package/web/.next/standalone/packages/web/src/components/sessions/ChatPanel.tsx +614 -130
- package/web/.next/standalone/packages/web/src/components/sessions/SessionDetail.tsx +33 -6
- package/web/.next/standalone/packages/web/src/components/sessions/SessionOverview.tsx +0 -57
- package/web/.next/standalone/packages/web/src/components/sessions/SessionPreview.tsx +1143 -0
- package/web/.next/standalone/packages/web/src/components/sessions/SessionRuntimeStatusBar.tsx +215 -0
- package/web/.next/standalone/packages/web/src/features/dashboard/DashboardClient.tsx +1049 -329
- package/web/.next/standalone/packages/web/src/features/sessions/SessionPageClient.tsx +9 -17
- package/web/.next/standalone/packages/web/src/hooks/useAgents.ts +5 -0
- package/web/.next/standalone/packages/web/src/hooks/usePreferences.ts +4 -8
- package/web/.next/standalone/packages/web/src/hooks/useResponsiveSidebarState.ts +46 -0
- package/web/.next/standalone/packages/web/src/hooks/useSessionFeed.ts +57 -3
- package/web/.next/standalone/packages/web/src/lib/auth.test.ts +98 -0
- package/web/.next/standalone/packages/web/src/lib/auth.ts +88 -54
- package/web/.next/standalone/packages/web/src/lib/chatFeed.ts +4 -4
- package/web/.next/standalone/packages/web/src/lib/devPreviewBrowser.ts +608 -0
- package/web/.next/standalone/packages/web/src/lib/edgeAuth.test.ts +14 -25
- package/web/.next/standalone/packages/web/src/lib/edgeAuth.ts +39 -52
- package/web/.next/standalone/packages/web/src/lib/guardedRustProxy.ts +30 -2
- package/web/.next/standalone/packages/web/src/lib/knownAgents.ts +125 -0
- package/web/.next/standalone/packages/web/src/lib/liveEvents.ts +50 -3
- package/web/.next/standalone/packages/web/src/lib/modelAccess.ts +7 -0
- package/web/.next/standalone/packages/web/src/lib/previewSession.test.ts +109 -0
- package/web/.next/standalone/packages/web/src/lib/previewSession.ts +216 -0
- package/web/.next/standalone/packages/web/src/lib/previewTypes.ts +75 -0
- package/web/.next/standalone/packages/web/src/lib/projectConfigSync.ts +13 -2
- package/web/.next/standalone/packages/web/src/lib/proxyRoutes.ts +1 -1
- package/web/.next/standalone/packages/web/src/lib/remoteAccess.test.ts +118 -0
- package/web/.next/standalone/packages/web/src/lib/remoteAccess.ts +245 -0
- package/web/.next/standalone/packages/web/src/lib/remoteAccessManager.ts +513 -0
- package/web/.next/standalone/packages/web/src/lib/remoteAccessRuntime.ts +117 -0
- package/web/.next/standalone/packages/web/src/lib/remoteAuth.test.ts +15 -0
- package/web/.next/standalone/packages/web/src/lib/remoteAuth.ts +8 -65
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/amp.ts +42 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/ccr.ts +47 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/claude.ts +179 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/codex.ts +211 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/copilot.ts +136 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/cursor.ts +39 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/droid.ts +103 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/gemini.ts +65 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/helpers.ts +409 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/index.ts +127 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/opencode.ts +138 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/qwen.ts +50 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels/types.ts +78 -0
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModelsShared.ts +9 -0
- package/web/.next/standalone/packages/web/src/lib/rustBackendProxy.ts +29 -3
- package/web/.next/standalone/packages/web/src/lib/sessionModelCatalog.ts +56 -0
- package/web/.next/standalone/packages/web/src/lib/sessionRuntimeStatus.ts +152 -0
- package/web/.next/standalone/packages/web/src/lib/types.ts +32 -0
- package/web/.next/standalone/packages/web/src/proxy.ts +2 -98
- package/web/.next/static/{8a_zZln8ezVAo0jAilwbF → E4-NvSai1Ps20r9dtdpps}/_clientMiddlewareManifest.json +0 -4
- package/web/.next/static/chunks/006a91a252482204.js +1 -0
- package/web/.next/static/chunks/07f3b9a104ce0ff4.js +1 -0
- package/web/.next/static/chunks/1004422d31074d62.js +1 -0
- package/web/.next/static/chunks/{12d9b4273416fe9b.js → 28eac764d6544827.js} +1 -1
- package/web/.next/static/chunks/2e2e8fd2ceca47dc.js +6 -0
- package/web/.next/static/chunks/30ababddac1b82dc.js +1 -0
- package/web/.next/static/chunks/3349bdab17ed1183.js +1 -0
- package/web/.next/static/chunks/3770166bed1577ce.js +4 -0
- package/web/.next/static/chunks/4c3afea55dd8bc93.js +1 -0
- package/web/.next/static/chunks/57858ac28cbf124d.js +1 -0
- package/web/.next/static/chunks/7fd2a83e9e74f215.js +1 -0
- package/web/.next/static/chunks/91e9e111a2536f92.js +1 -0
- package/web/.next/static/chunks/aabc80195233b4da.js +1 -0
- package/web/.next/static/chunks/bf82908a598c6de5.css +3 -0
- package/web/.next/static/chunks/d6a81d2f8b98b4be.js +1 -0
- package/web/.next/static/chunks/e9d0e95bbaa0f4fb.js +1 -0
- package/web/.next/static/chunks/ebaa0c535c4135f1.js +1 -0
- package/web/.next/static/chunks/{turbopack-57373a2ee9f56180.js → turbopack-49f4119854e8206e.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.html +0 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.meta +0 -14
- package/web/.next/standalone/packages/web/.next/server/app/index.rsc +0 -24
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/__PAGE__.segment.rsc +0 -9
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_full.segment.rsc +0 -24
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_head.segment.rsc +0 -6
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_index.segment.rsc +0 -6
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_tree.segment.rsc +0 -7
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0074ebac._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__03a6b3e6._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__049daed6._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__09c3bdaf._.js +0 -7
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__137c9740._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__14949257._.js +0 -80
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__15594e11._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__159ecc1b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__171dd44e._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__177505ca._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__18aa1fa3._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1c3521a3._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1c793b78._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__22fbbc7b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__25bbe81a._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2d10de49._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__30442998._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__31d22800._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3d6b30a3._.js +0 -14
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3d7ad620._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__44892736._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__495221b1._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4ff9e8b0._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__54eb1ef0._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5c375e13._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6362697f._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__69b36e36._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6badbf4e._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6c4cd852._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6f7b329b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__70b7af90._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__71077192._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__758687ca._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7604e43b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__77b23eae._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__78650ac9._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__789107eb._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__78c062a8._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__78c4bb1e._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__790d1d4b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8132442f._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__833a2cd9._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__85d6ae4c._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8d933120._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__90ac5665._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__92a4f9bf._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__93d550e2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__96e59c1f._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9c1d09aa._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9d98fee2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9fcf6265._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a5b78741._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a8a4b101._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a8d11727._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b2e0e81c._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__bf756716._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c09452b3._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c3c6a7bf._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c43dcff1._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c923cbdc._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ce993e7b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cfbdd2bf._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d1d8bfb5._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d4d1744d._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d8852803._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ea1961bd._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ee8a3221._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef8c815b._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef918d06._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f3693403._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f62cac3a._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f73117e9._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f7651519._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__fc6ffe6c._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_c59ce641._.js +0 -52
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_3f8eedde._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_9a15df2c._.js +0 -14
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_2175c4f5._.js +0 -6
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__09178ceb._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__404c1aeb._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__4c215c94._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__504277b5._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__6622b514._.js +0 -4
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__869d9ac0._.js +0 -4
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__9dc23e5a._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__b3463b25._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__d6c32514._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__dd8d1ff5._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__e93a8bf2._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__f3a0805b._.js +0 -26
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__f9e4d8f6._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_3acfb388._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_54e5c07e._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_5edc4d99._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_668c9201._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_5c577fb4._.js +0 -22
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_a719fbda._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_f2ebd7a9._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_06f89723._.js +0 -6
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_dist_aa203534._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_79316445._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_a078c137._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_app_page_tsx_cd282e82._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_app_unlock_UnlockForm_tsx_ce3149a7._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_556f498f._.js +0 -3
- package/web/.next/standalone/packages/web/.next/static/chunks/25438e9094804f85.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/38c2e6a114505dfb.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/42170782dc03a5a6.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/4f46b791ea244c81.js +0 -6
- package/web/.next/standalone/packages/web/.next/static/chunks/524a7c2a8e85ea2f.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/5672ef74a562c5dd.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/710591a828e2bb9d.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/72c822cfe5b6f4f2.js +0 -4
- package/web/.next/standalone/packages/web/.next/static/chunks/870a993d28314a90.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/8c120e4e5b844646.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/8ec81b945f12169b.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/aa158726d4a10331.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/adf48bd54f32b061.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/c5caacf383990e7b.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/d3cd3cf58c908ec9.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/df9658182f4f7d54.css +0 -3
- package/web/.next/standalone/packages/web/src/app/unlock/UnlockForm.tsx +0 -98
- package/web/.next/standalone/packages/web/src/lib/editorLinks.ts +0 -51
- package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels.ts +0 -788
- package/web/.next/static/chunks/25438e9094804f85.js +0 -1
- package/web/.next/static/chunks/38c2e6a114505dfb.js +0 -1
- package/web/.next/static/chunks/42170782dc03a5a6.js +0 -1
- package/web/.next/static/chunks/4f46b791ea244c81.js +0 -6
- package/web/.next/static/chunks/524a7c2a8e85ea2f.js +0 -1
- package/web/.next/static/chunks/5672ef74a562c5dd.js +0 -1
- package/web/.next/static/chunks/710591a828e2bb9d.js +0 -1
- package/web/.next/static/chunks/72c822cfe5b6f4f2.js +0 -4
- package/web/.next/static/chunks/870a993d28314a90.js +0 -1
- package/web/.next/static/chunks/8c120e4e5b844646.js +0 -1
- package/web/.next/static/chunks/8ec81b945f12169b.js +0 -1
- package/web/.next/static/chunks/aa158726d4a10331.js +0 -1
- package/web/.next/static/chunks/adf48bd54f32b061.js +0 -1
- package/web/.next/static/chunks/c5caacf383990e7b.js +0 -1
- package/web/.next/static/chunks/d3cd3cf58c908ec9.js +0 -1
- package/web/.next/static/chunks/df9658182f4f7d54.css +0 -3
- /package/web/.next/standalone/packages/web/.next/static/{8a_zZln8ezVAo0jAilwbF → E4-NvSai1Ps20r9dtdpps}/_buildManifest.js +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{8a_zZln8ezVAo0jAilwbF → E4-NvSai1Ps20r9dtdpps}/_ssgManifest.js +0 -0
- /package/web/.next/static/{8a_zZln8ezVAo0jAilwbF → E4-NvSai1Ps20r9dtdpps}/_buildManifest.js +0 -0
- /package/web/.next/static/{8a_zZln8ezVAo0jAilwbF → E4-NvSai1Ps20r9dtdpps}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import dynamic from "next/dynamic";
|
|
4
|
+
import { usePathname, useRouter, useSearchParams } from "next/navigation";
|
|
4
5
|
import { type FormEvent, memo, useCallback, useEffect, useMemo, useState } from "react";
|
|
5
6
|
import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
|
|
6
7
|
import { GitBranchIcon, LockIcon, MarkGithubIcon, RepoIcon } from "@primer/octicons-react";
|
|
@@ -16,7 +17,6 @@ import {
|
|
|
16
17
|
type AgentReasoningOption,
|
|
17
18
|
type DashboardRole,
|
|
18
19
|
type ModelAccessPreferences,
|
|
19
|
-
type TrustedHeaderAccessProvider,
|
|
20
20
|
} from "@conductor-oss/core/types";
|
|
21
21
|
import type { IconType } from "react-icons";
|
|
22
22
|
import { SiNotion, SiObsidian } from "react-icons/si";
|
|
@@ -48,9 +48,15 @@ import {
|
|
|
48
48
|
} from "lucide-react";
|
|
49
49
|
import type { DashboardSession } from "@/lib/types";
|
|
50
50
|
import { normalizeAgentName } from "@/lib/agentUtils";
|
|
51
|
+
import {
|
|
52
|
+
getKnownAgent,
|
|
53
|
+
KNOWN_AGENTS,
|
|
54
|
+
KNOWN_AGENT_ORDER,
|
|
55
|
+
} from "@/lib/knownAgents";
|
|
51
56
|
import { useSessions } from "@/hooks/useSessions";
|
|
52
57
|
import { useConfig, type ConfigProject } from "@/hooks/useConfig";
|
|
53
58
|
import { useAgents } from "@/hooks/useAgents";
|
|
59
|
+
import { useResponsiveSidebarState } from "@/hooks/useResponsiveSidebarState";
|
|
54
60
|
import { AppShell } from "@/components/layout/AppShell";
|
|
55
61
|
import { TopBar } from "@/components/layout/TopBar";
|
|
56
62
|
import { AgentTileIcon } from "@/components/AgentTileIcon";
|
|
@@ -65,42 +71,17 @@ import {
|
|
|
65
71
|
} from "@/lib/runtimeAgentModelsShared";
|
|
66
72
|
import { WorkspaceOverview } from "@/features/dashboard/components/WorkspaceOverview";
|
|
67
73
|
|
|
68
|
-
const EXECUTOR_ORDER = [
|
|
69
|
-
"codex",
|
|
70
|
-
"gemini",
|
|
71
|
-
"qwen-code",
|
|
72
|
-
"droid",
|
|
73
|
-
"claude-code",
|
|
74
|
-
"amp",
|
|
75
|
-
"opencode",
|
|
76
|
-
"github-copilot",
|
|
77
|
-
"cursor-cli",
|
|
78
|
-
"ccr",
|
|
79
|
-
];
|
|
80
|
-
|
|
81
74
|
const DEFAULT_AGENT = "claude-code";
|
|
75
|
+
type DashboardWorkspaceView = "chat" | "board";
|
|
82
76
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
droid: "Droid",
|
|
88
|
-
"claude-code": "Claude Code",
|
|
89
|
-
amp: "Amp",
|
|
90
|
-
opencode: "Opencode",
|
|
91
|
-
"github-copilot": "Copilot",
|
|
92
|
-
"cursor-cli": "Cursor Agent",
|
|
93
|
-
ccr: "CCR",
|
|
94
|
-
};
|
|
77
|
+
function normalizeDashboardQueryValue(value: string | null): string | null {
|
|
78
|
+
const trimmed = value?.trim();
|
|
79
|
+
return trimmed && trimmed.length > 0 ? trimmed : null;
|
|
80
|
+
}
|
|
95
81
|
|
|
96
|
-
|
|
97
|
-
"
|
|
98
|
-
|
|
99
|
-
gemini: "https://aistudio.google.com/",
|
|
100
|
-
"qwen-code": "https://chat.qwen.ai/",
|
|
101
|
-
opencode: "https://opencode.ai/",
|
|
102
|
-
"github-copilot": "https://github.com/settings/copilot",
|
|
103
|
-
};
|
|
82
|
+
function resolveDashboardWorkspaceView(value: string | null): DashboardWorkspaceView {
|
|
83
|
+
return value === "board" ? "board" : "chat";
|
|
84
|
+
}
|
|
104
85
|
|
|
105
86
|
const SessionDetail = dynamic(
|
|
106
87
|
() => import("@/components/sessions/SessionDetail").then((mod) => mod.SessionDetail),
|
|
@@ -125,8 +106,8 @@ const WorkspaceKanban = dynamic(
|
|
|
125
106
|
);
|
|
126
107
|
|
|
127
108
|
function getAgentLabel(value: string): string {
|
|
128
|
-
const
|
|
129
|
-
if (
|
|
109
|
+
const known = getKnownAgent(value);
|
|
110
|
+
if (known?.label) return known.label;
|
|
130
111
|
return value
|
|
131
112
|
.split(/[-_\s]+/g)
|
|
132
113
|
.filter(Boolean)
|
|
@@ -259,6 +240,7 @@ type CreateSessionOptions = {
|
|
|
259
240
|
type LinkedBoardTask = {
|
|
260
241
|
id: string;
|
|
261
242
|
text: string;
|
|
243
|
+
issueId: string | null;
|
|
262
244
|
taskRef: string | null;
|
|
263
245
|
type: string | null;
|
|
264
246
|
priority: string | null;
|
|
@@ -294,9 +276,8 @@ type PreferencesPayload = {
|
|
|
294
276
|
onboardingAcknowledged: boolean;
|
|
295
277
|
codingAgent: string;
|
|
296
278
|
ide: string;
|
|
297
|
-
remoteSshHost: string;
|
|
298
|
-
remoteSshUser: string;
|
|
299
279
|
markdownEditor: string;
|
|
280
|
+
markdownEditorPath: string;
|
|
300
281
|
modelAccess: ModelAccessPreferences;
|
|
301
282
|
notifications: {
|
|
302
283
|
soundEnabled: boolean;
|
|
@@ -312,7 +293,7 @@ type AccessIdentitySummary = {
|
|
|
312
293
|
};
|
|
313
294
|
|
|
314
295
|
function getLinkedTaskValue(task: LinkedBoardTask): string {
|
|
315
|
-
return task.taskRef?.trim() || task.id;
|
|
296
|
+
return task.issueId?.trim() || task.taskRef?.trim() || task.id;
|
|
316
297
|
}
|
|
317
298
|
|
|
318
299
|
function getLinkedTaskTitle(text: string): string {
|
|
@@ -325,7 +306,7 @@ type AccessSettingsPayload = {
|
|
|
325
306
|
defaultRole: DashboardRole;
|
|
326
307
|
trustedHeaders: {
|
|
327
308
|
enabled: boolean;
|
|
328
|
-
provider:
|
|
309
|
+
provider: "cloudflare-access";
|
|
329
310
|
emailHeader: string;
|
|
330
311
|
jwtHeader: string;
|
|
331
312
|
teamDomain: string;
|
|
@@ -342,6 +323,31 @@ type AccessSettingsPayload = {
|
|
|
342
323
|
current: AccessIdentitySummary;
|
|
343
324
|
};
|
|
344
325
|
|
|
326
|
+
type RemoteAccessPayload = {
|
|
327
|
+
publicUrl: string | null;
|
|
328
|
+
connectUrl: string | null;
|
|
329
|
+
shareable: boolean;
|
|
330
|
+
status: "disabled" | "starting" | "ready" | "error";
|
|
331
|
+
provider: "tailscale" | null;
|
|
332
|
+
recommendedProvider: "tailscale" | null;
|
|
333
|
+
localUrl: string | null;
|
|
334
|
+
managed: boolean;
|
|
335
|
+
installed: boolean;
|
|
336
|
+
connected: boolean;
|
|
337
|
+
canAutoInstall: boolean;
|
|
338
|
+
autoInstallMethod: "brew" | null;
|
|
339
|
+
lastError: string | null;
|
|
340
|
+
startedAt: string | null;
|
|
341
|
+
updatedAt: string | null;
|
|
342
|
+
mode: "cloudflare-access" | "private-network" | "enterprise-only" | "generic-header" | "clerk" | "local-only" | "misconfigured" | "unsafe-public";
|
|
343
|
+
title: string;
|
|
344
|
+
description: string;
|
|
345
|
+
warnings: string[];
|
|
346
|
+
nextSteps: string[];
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
type RemoteAccessAction = "enable" | "rotate" | "disable";
|
|
350
|
+
|
|
345
351
|
type RepositoryPathHealth = {
|
|
346
352
|
exists: boolean;
|
|
347
353
|
isGitRepository: boolean;
|
|
@@ -354,6 +360,7 @@ type RepositorySettingsPayload = {
|
|
|
354
360
|
repo: string;
|
|
355
361
|
path: string;
|
|
356
362
|
agent: string;
|
|
363
|
+
agentPermissions: string;
|
|
357
364
|
agentModel: string;
|
|
358
365
|
agentReasoningEffort: string;
|
|
359
366
|
workspaceMode: string;
|
|
@@ -362,6 +369,12 @@ type RepositorySettingsPayload = {
|
|
|
362
369
|
defaultWorkingDirectory: string;
|
|
363
370
|
defaultBranch: string;
|
|
364
371
|
devServerScript: string;
|
|
372
|
+
devServerCwd: string;
|
|
373
|
+
devServerUrl: string;
|
|
374
|
+
devServerPort: string;
|
|
375
|
+
devServerHost: string;
|
|
376
|
+
devServerPath: string;
|
|
377
|
+
devServerHttps: boolean;
|
|
365
378
|
setupScript: string;
|
|
366
379
|
runSetupInParallel: boolean;
|
|
367
380
|
cleanupScript: string;
|
|
@@ -383,6 +396,9 @@ type AgentSetupState = {
|
|
|
383
396
|
configured: boolean;
|
|
384
397
|
homepage: string | null;
|
|
385
398
|
description: string | null;
|
|
399
|
+
installHint: string | null;
|
|
400
|
+
installUrl: string | null;
|
|
401
|
+
setupUrl: string | null;
|
|
386
402
|
};
|
|
387
403
|
|
|
388
404
|
type PreferencesDialogMode = "onboarding" | "settings";
|
|
@@ -465,23 +481,19 @@ function normalizePreferences(value: unknown, fallbackAgent: string): Preference
|
|
|
465
481
|
const ide = typeof payload["ide"] === "string" && payload["ide"].trim().length > 0
|
|
466
482
|
? payload["ide"].trim()
|
|
467
483
|
: "vscode";
|
|
468
|
-
const remoteSshHost = typeof payload["remoteSshHost"] === "string" && payload["remoteSshHost"].trim().length > 0
|
|
469
|
-
? payload["remoteSshHost"].trim()
|
|
470
|
-
: "";
|
|
471
|
-
const remoteSshUser = typeof payload["remoteSshUser"] === "string" && payload["remoteSshUser"].trim().length > 0
|
|
472
|
-
? payload["remoteSshUser"].trim()
|
|
473
|
-
: "";
|
|
474
484
|
const markdownEditor = typeof payload["markdownEditor"] === "string" && payload["markdownEditor"].trim().length > 0
|
|
475
485
|
? payload["markdownEditor"].trim()
|
|
476
486
|
: "obsidian";
|
|
487
|
+
const markdownEditorPath = typeof payload["markdownEditorPath"] === "string"
|
|
488
|
+
? payload["markdownEditorPath"].trim()
|
|
489
|
+
: "";
|
|
477
490
|
|
|
478
491
|
return {
|
|
479
492
|
onboardingAcknowledged: payload["onboardingAcknowledged"] === true,
|
|
480
493
|
codingAgent,
|
|
481
494
|
ide,
|
|
482
|
-
remoteSshHost,
|
|
483
|
-
remoteSshUser,
|
|
484
495
|
markdownEditor,
|
|
496
|
+
markdownEditorPath,
|
|
485
497
|
modelAccess: normalizeModelAccessPreferences(payload["modelAccess"]),
|
|
486
498
|
notifications: {
|
|
487
499
|
soundEnabled: notifications["soundEnabled"] !== false,
|
|
@@ -510,6 +522,14 @@ function normalizeMultilineList(value: unknown): string {
|
|
|
510
522
|
.join("\n");
|
|
511
523
|
}
|
|
512
524
|
|
|
525
|
+
function normalizeStringArray(value: unknown): string[] {
|
|
526
|
+
if (!Array.isArray(value)) return [];
|
|
527
|
+
return value
|
|
528
|
+
.filter((item): item is string => typeof item === "string")
|
|
529
|
+
.map((item) => item.trim())
|
|
530
|
+
.filter(Boolean);
|
|
531
|
+
}
|
|
532
|
+
|
|
513
533
|
function normalizeAccessSettings(value: unknown, summary?: unknown): AccessSettingsPayload {
|
|
514
534
|
const payload = toObject(value);
|
|
515
535
|
const trustedHeaders = toObject(payload["trustedHeaders"]);
|
|
@@ -523,11 +543,11 @@ function normalizeAccessSettings(value: unknown, summary?: unknown): AccessSetti
|
|
|
523
543
|
const currentRoleRaw = current["role"];
|
|
524
544
|
|
|
525
545
|
return {
|
|
526
|
-
requireAuth: payload["requireAuth"] === true,
|
|
546
|
+
requireAuth: payload["requireAuth"] === true || trustedHeaders["enabled"] === true,
|
|
527
547
|
defaultRole,
|
|
528
548
|
trustedHeaders: {
|
|
529
549
|
enabled: trustedHeaders["enabled"] === true,
|
|
530
|
-
provider:
|
|
550
|
+
provider: "cloudflare-access",
|
|
531
551
|
emailHeader: typeof trustedHeaders["emailHeader"] === "string" && trustedHeaders["emailHeader"].trim().length > 0
|
|
532
552
|
? trustedHeaders["emailHeader"].trim()
|
|
533
553
|
: "Cf-Access-Authenticated-User-Email",
|
|
@@ -564,6 +584,108 @@ function normalizeAccessSettings(value: unknown, summary?: unknown): AccessSetti
|
|
|
564
584
|
};
|
|
565
585
|
}
|
|
566
586
|
|
|
587
|
+
function normalizeRemoteAccess(value: unknown): RemoteAccessPayload {
|
|
588
|
+
const payload = toObject(value);
|
|
589
|
+
const mode = payload["mode"];
|
|
590
|
+
const status = payload["status"];
|
|
591
|
+
const provider = payload["provider"];
|
|
592
|
+
const autoInstallMethod = payload["autoInstallMethod"];
|
|
593
|
+
|
|
594
|
+
return {
|
|
595
|
+
publicUrl: typeof payload["publicUrl"] === "string" && payload["publicUrl"].trim().length > 0
|
|
596
|
+
? payload["publicUrl"].trim()
|
|
597
|
+
: null,
|
|
598
|
+
connectUrl: typeof payload["connectUrl"] === "string" && payload["connectUrl"].trim().length > 0
|
|
599
|
+
? payload["connectUrl"].trim()
|
|
600
|
+
: null,
|
|
601
|
+
shareable: payload["shareable"] === true,
|
|
602
|
+
status:
|
|
603
|
+
status === "starting"
|
|
604
|
+
|| status === "ready"
|
|
605
|
+
|| status === "error"
|
|
606
|
+
|| status === "disabled"
|
|
607
|
+
? status
|
|
608
|
+
: "disabled",
|
|
609
|
+
provider: provider === "tailscale" ? provider : null,
|
|
610
|
+
recommendedProvider:
|
|
611
|
+
payload["recommendedProvider"] === "tailscale"
|
|
612
|
+
? payload["recommendedProvider"]
|
|
613
|
+
: null,
|
|
614
|
+
localUrl: typeof payload["localUrl"] === "string" && payload["localUrl"].trim().length > 0
|
|
615
|
+
? payload["localUrl"].trim()
|
|
616
|
+
: null,
|
|
617
|
+
managed: payload["managed"] === true,
|
|
618
|
+
installed: payload["installed"] === true,
|
|
619
|
+
connected: payload["connected"] === true,
|
|
620
|
+
canAutoInstall: payload["canAutoInstall"] === true,
|
|
621
|
+
autoInstallMethod: autoInstallMethod === "brew" ? "brew" : null,
|
|
622
|
+
lastError: typeof payload["lastError"] === "string" && payload["lastError"].trim().length > 0
|
|
623
|
+
? payload["lastError"].trim()
|
|
624
|
+
: null,
|
|
625
|
+
startedAt: typeof payload["startedAt"] === "string" && payload["startedAt"].trim().length > 0
|
|
626
|
+
? payload["startedAt"].trim()
|
|
627
|
+
: null,
|
|
628
|
+
updatedAt: typeof payload["updatedAt"] === "string" && payload["updatedAt"].trim().length > 0
|
|
629
|
+
? payload["updatedAt"].trim()
|
|
630
|
+
: null,
|
|
631
|
+
mode:
|
|
632
|
+
mode === "cloudflare-access"
|
|
633
|
+
|| mode === "private-network"
|
|
634
|
+
|| mode === "enterprise-only"
|
|
635
|
+
|| mode === "generic-header"
|
|
636
|
+
|| mode === "clerk"
|
|
637
|
+
|| mode === "local-only"
|
|
638
|
+
|| mode === "misconfigured"
|
|
639
|
+
|| mode === "unsafe-public"
|
|
640
|
+
? mode
|
|
641
|
+
: "local-only",
|
|
642
|
+
title: typeof payload["title"] === "string" && payload["title"].trim().length > 0
|
|
643
|
+
? payload["title"].trim()
|
|
644
|
+
: "Remote access",
|
|
645
|
+
description: typeof payload["description"] === "string" && payload["description"].trim().length > 0
|
|
646
|
+
? payload["description"].trim()
|
|
647
|
+
: "",
|
|
648
|
+
warnings: normalizeStringArray(payload["warnings"]),
|
|
649
|
+
nextSteps: normalizeStringArray(payload["nextSteps"]),
|
|
650
|
+
};
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
function getRemoteAccessModeLabel(mode: RemoteAccessPayload["mode"]): string {
|
|
654
|
+
switch (mode) {
|
|
655
|
+
case "cloudflare-access":
|
|
656
|
+
return "Cloudflare Access";
|
|
657
|
+
case "private-network":
|
|
658
|
+
return "Private network";
|
|
659
|
+
case "enterprise-only":
|
|
660
|
+
return "Enterprise only";
|
|
661
|
+
case "generic-header":
|
|
662
|
+
return "Legacy mode blocked";
|
|
663
|
+
case "clerk":
|
|
664
|
+
return "Clerk";
|
|
665
|
+
case "misconfigured":
|
|
666
|
+
return "Auth required";
|
|
667
|
+
case "unsafe-public":
|
|
668
|
+
return "Blocked until protected";
|
|
669
|
+
case "local-only":
|
|
670
|
+
default:
|
|
671
|
+
return "Local only";
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
function getRemoteAccessStatusLabel(status: RemoteAccessPayload["status"]): string {
|
|
676
|
+
switch (status) {
|
|
677
|
+
case "starting":
|
|
678
|
+
return "Starting";
|
|
679
|
+
case "ready":
|
|
680
|
+
return "Ready";
|
|
681
|
+
case "error":
|
|
682
|
+
return "Error";
|
|
683
|
+
case "disabled":
|
|
684
|
+
default:
|
|
685
|
+
return "Disabled";
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
|
|
567
689
|
function emptyModelSelection(): ModelSelectionState {
|
|
568
690
|
return {
|
|
569
691
|
catalogModel: "",
|
|
@@ -734,8 +856,9 @@ function resolveReasoningSelectionValue(selection: ModelSelectionState): string
|
|
|
734
856
|
|
|
735
857
|
function getAgentModelAccessLabel(agent: string, modelAccess: ModelAccessPreferences): string | null {
|
|
736
858
|
const catalog = getAgentModelCatalog(agent);
|
|
859
|
+
if (!catalog || catalog.accessOptions.length <= 1) return null;
|
|
737
860
|
const access = resolveAgentModelAccess(agent, modelAccess);
|
|
738
|
-
if (!
|
|
861
|
+
if (!access) return null;
|
|
739
862
|
|
|
740
863
|
return catalog.accessOptions.find((option) => option.id === access)?.label ?? null;
|
|
741
864
|
}
|
|
@@ -972,13 +1095,31 @@ function AgentModelSelector({
|
|
|
972
1095
|
}
|
|
973
1096
|
|
|
974
1097
|
export default function DashboardClient() {
|
|
975
|
-
const
|
|
976
|
-
const
|
|
977
|
-
const
|
|
1098
|
+
const router = useRouter();
|
|
1099
|
+
const pathname = usePathname();
|
|
1100
|
+
const searchParams = useSearchParams();
|
|
1101
|
+
const selectedProjectId = useMemo(
|
|
1102
|
+
() => normalizeDashboardQueryValue(searchParams.get("project")),
|
|
1103
|
+
[searchParams],
|
|
1104
|
+
);
|
|
1105
|
+
const selectedSessionId = useMemo(
|
|
1106
|
+
() => normalizeDashboardQueryValue(searchParams.get("session")),
|
|
1107
|
+
[searchParams],
|
|
1108
|
+
);
|
|
1109
|
+
const workspaceView = useMemo(
|
|
1110
|
+
() => resolveDashboardWorkspaceView(searchParams.get("view")),
|
|
1111
|
+
[searchParams],
|
|
1112
|
+
);
|
|
1113
|
+
const { sessions, loading: sessionsLoading, error: sessionsError, refresh: refreshSessions } = useSessions(selectedProjectId);
|
|
1114
|
+
const { projects, loading: configLoading, error: configError, refresh: refreshConfig } = useConfig();
|
|
978
1115
|
const { agents } = useAgents();
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
1116
|
+
const {
|
|
1117
|
+
mobileSidebarOpen,
|
|
1118
|
+
desktopSidebarOpen,
|
|
1119
|
+
toggleSidebar,
|
|
1120
|
+
closeSidebarOnMobile,
|
|
1121
|
+
syncSidebarForViewport,
|
|
1122
|
+
} = useResponsiveSidebarState();
|
|
982
1123
|
|
|
983
1124
|
const [prompt, setPrompt] = useState("");
|
|
984
1125
|
const [selectedAgent, setSelectedAgent] = useState("");
|
|
@@ -988,7 +1129,6 @@ export default function DashboardClient() {
|
|
|
988
1129
|
const [newWorkspaceOpen, setNewWorkspaceOpen] = useState(false);
|
|
989
1130
|
const [creatingWorkspace, setCreatingWorkspace] = useState(false);
|
|
990
1131
|
const [newWorkspaceError, setNewWorkspaceError] = useState<string | null>(null);
|
|
991
|
-
const [workspaceView, setWorkspaceView] = useState<"chat" | "board">("chat");
|
|
992
1132
|
const [preferences, setPreferences] = useState<PreferencesPayload | null>(null);
|
|
993
1133
|
const [preferencesLoading, setPreferencesLoading] = useState(true);
|
|
994
1134
|
const [preferencesSaving, setPreferencesSaving] = useState(false);
|
|
@@ -999,30 +1139,91 @@ export default function DashboardClient() {
|
|
|
999
1139
|
const dashboardSessions = sessions as unknown as DashboardSession[];
|
|
1000
1140
|
const workspaceError = createError ?? configError ?? sessionsError ?? preferencesError;
|
|
1001
1141
|
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1142
|
+
const navigateDashboard = useCallback((
|
|
1143
|
+
updates: {
|
|
1144
|
+
projectId?: string | null;
|
|
1145
|
+
sessionId?: string | null;
|
|
1146
|
+
workspaceView?: DashboardWorkspaceView | null;
|
|
1147
|
+
tab?: "overview" | "chat" | "diff" | "preview" | null;
|
|
1148
|
+
},
|
|
1149
|
+
mode: "push" | "replace" = "push",
|
|
1150
|
+
) => {
|
|
1151
|
+
const params = new URLSearchParams(searchParams.toString());
|
|
1152
|
+
|
|
1153
|
+
const updateParam = (key: string, value: string | null | undefined) => {
|
|
1154
|
+
const trimmed = typeof value === "string" ? value.trim() : "";
|
|
1155
|
+
if (trimmed.length > 0) {
|
|
1156
|
+
params.set(key, trimmed);
|
|
1157
|
+
return;
|
|
1158
|
+
}
|
|
1159
|
+
params.delete(key);
|
|
1160
|
+
};
|
|
1161
|
+
|
|
1162
|
+
if ("projectId" in updates) {
|
|
1163
|
+
updateParam("project", updates.projectId);
|
|
1164
|
+
}
|
|
1165
|
+
if ("sessionId" in updates) {
|
|
1166
|
+
updateParam("session", updates.sessionId);
|
|
1167
|
+
}
|
|
1168
|
+
if ("workspaceView" in updates) {
|
|
1169
|
+
if (updates.workspaceView === "board") {
|
|
1170
|
+
params.set("view", "board");
|
|
1171
|
+
} else {
|
|
1172
|
+
params.delete("view");
|
|
1173
|
+
}
|
|
1174
|
+
}
|
|
1175
|
+
if ("tab" in updates) {
|
|
1176
|
+
if (updates.tab && updates.tab !== "chat") {
|
|
1177
|
+
params.set("tab", updates.tab);
|
|
1178
|
+
} else {
|
|
1179
|
+
params.delete("tab");
|
|
1180
|
+
}
|
|
1006
1181
|
}
|
|
1007
|
-
|
|
1182
|
+
|
|
1183
|
+
if (!params.has("project")) {
|
|
1184
|
+
params.delete("view");
|
|
1185
|
+
}
|
|
1186
|
+
if (!params.has("session")) {
|
|
1187
|
+
params.delete("tab");
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
const nextQuery = params.toString();
|
|
1191
|
+
const nextUrl = nextQuery.length > 0 ? `${pathname}?${nextQuery}` : pathname;
|
|
1192
|
+
if (mode === "replace") {
|
|
1193
|
+
router.replace(nextUrl, { scroll: false });
|
|
1194
|
+
return;
|
|
1195
|
+
}
|
|
1196
|
+
router.push(nextUrl, { scroll: false });
|
|
1197
|
+
}, [pathname, router, searchParams]);
|
|
1008
1198
|
|
|
1009
1199
|
useEffect(() => {
|
|
1200
|
+
if (configLoading || configError) return;
|
|
1201
|
+
|
|
1010
1202
|
if (projects.length === 0) {
|
|
1011
|
-
if (selectedProjectId !== null)
|
|
1203
|
+
if (selectedProjectId !== null) {
|
|
1204
|
+
navigateDashboard({ projectId: null, workspaceView: null }, "replace");
|
|
1205
|
+
}
|
|
1012
1206
|
return;
|
|
1013
1207
|
}
|
|
1014
1208
|
|
|
1015
1209
|
if (selectedProjectId !== null && !projects.some((project) => project.id === selectedProjectId)) {
|
|
1016
|
-
|
|
1210
|
+
navigateDashboard(
|
|
1211
|
+
{
|
|
1212
|
+
projectId: selectedSessionId ? null : projects[0]?.id ?? null,
|
|
1213
|
+
workspaceView: selectedSessionId ? null : workspaceView,
|
|
1214
|
+
},
|
|
1215
|
+
"replace",
|
|
1216
|
+
);
|
|
1017
1217
|
}
|
|
1018
|
-
}, [projects, selectedProjectId]);
|
|
1218
|
+
}, [configError, configLoading, navigateDashboard, projects, selectedProjectId, selectedSessionId, workspaceView]);
|
|
1019
1219
|
|
|
1020
1220
|
useEffect(() => {
|
|
1221
|
+
if (sessionsLoading || sessionsError || !selectedSessionId) return;
|
|
1021
1222
|
if (!selectedSessionId) return;
|
|
1022
1223
|
if (!dashboardSessions.some((session) => session.id === selectedSessionId)) {
|
|
1023
|
-
|
|
1224
|
+
navigateDashboard({ sessionId: null, tab: null }, "replace");
|
|
1024
1225
|
}
|
|
1025
|
-
}, [dashboardSessions, selectedSessionId]);
|
|
1226
|
+
}, [dashboardSessions, navigateDashboard, selectedSessionId, sessionsError, sessionsLoading]);
|
|
1026
1227
|
|
|
1027
1228
|
const selectedSession = useMemo(
|
|
1028
1229
|
() => dashboardSessions.find((s) => s.id === selectedSessionId) ?? null,
|
|
@@ -1050,6 +1251,9 @@ export default function DashboardClient() {
|
|
|
1050
1251
|
: [];
|
|
1051
1252
|
const opts = new Set<string>();
|
|
1052
1253
|
|
|
1254
|
+
for (const known of KNOWN_AGENTS) {
|
|
1255
|
+
opts.add(known.name);
|
|
1256
|
+
}
|
|
1053
1257
|
for (const agent of safeAgents) {
|
|
1054
1258
|
if (agent.name) {
|
|
1055
1259
|
opts.add(agent.name);
|
|
@@ -1072,6 +1276,19 @@ export default function DashboardClient() {
|
|
|
1072
1276
|
|
|
1073
1277
|
const agentStatesByName = useMemo(() => {
|
|
1074
1278
|
const states: Record<string, AgentSetupState> = {};
|
|
1279
|
+
for (const known of KNOWN_AGENTS) {
|
|
1280
|
+
states[normalizeAgentName(known.name)] = {
|
|
1281
|
+
name: known.name,
|
|
1282
|
+
ready: false,
|
|
1283
|
+
installed: false,
|
|
1284
|
+
configured: false,
|
|
1285
|
+
homepage: known.homepage,
|
|
1286
|
+
description: known.description,
|
|
1287
|
+
installHint: known.installHint ?? null,
|
|
1288
|
+
installUrl: known.installUrl ?? known.homepage ?? null,
|
|
1289
|
+
setupUrl: known.setupUrl ?? known.homepage ?? null,
|
|
1290
|
+
};
|
|
1291
|
+
}
|
|
1075
1292
|
const safeAgents = Array.isArray(agents)
|
|
1076
1293
|
? agents as Array<{
|
|
1077
1294
|
name?: string;
|
|
@@ -1080,18 +1297,36 @@ export default function DashboardClient() {
|
|
|
1080
1297
|
configured?: boolean;
|
|
1081
1298
|
homepage?: string | null;
|
|
1082
1299
|
description?: string | null;
|
|
1300
|
+
installHint?: string | null;
|
|
1301
|
+
installUrl?: string | null;
|
|
1302
|
+
setupUrl?: string | null;
|
|
1083
1303
|
}>
|
|
1084
1304
|
: [];
|
|
1085
1305
|
|
|
1086
1306
|
for (const agent of safeAgents) {
|
|
1087
1307
|
if (!agent.name) continue;
|
|
1308
|
+
const normalizedName = normalizeAgentName(agent.name);
|
|
1309
|
+
const known = getKnownAgent(agent.name);
|
|
1088
1310
|
states[normalizeAgentName(agent.name)] = {
|
|
1089
|
-
name: agent.name,
|
|
1311
|
+
name: known?.name ?? agent.name,
|
|
1090
1312
|
ready: agent.ready === true,
|
|
1091
1313
|
installed: agent.installed !== false,
|
|
1092
|
-
configured: agent.configured
|
|
1093
|
-
homepage: typeof agent.homepage === "string"
|
|
1094
|
-
|
|
1314
|
+
configured: agent.configured === true,
|
|
1315
|
+
homepage: typeof agent.homepage === "string"
|
|
1316
|
+
? agent.homepage
|
|
1317
|
+
: known?.homepage ?? states[normalizedName]?.homepage ?? null,
|
|
1318
|
+
description: typeof agent.description === "string"
|
|
1319
|
+
? agent.description
|
|
1320
|
+
: known?.description ?? states[normalizedName]?.description ?? null,
|
|
1321
|
+
installHint: typeof agent.installHint === "string"
|
|
1322
|
+
? agent.installHint
|
|
1323
|
+
: known?.installHint ?? states[normalizedName]?.installHint ?? null,
|
|
1324
|
+
installUrl: typeof agent.installUrl === "string"
|
|
1325
|
+
? agent.installUrl
|
|
1326
|
+
: known?.installUrl ?? states[normalizedName]?.installUrl ?? null,
|
|
1327
|
+
setupUrl: typeof agent.setupUrl === "string"
|
|
1328
|
+
? agent.setupUrl
|
|
1329
|
+
: known?.setupUrl ?? states[normalizedName]?.setupUrl ?? null,
|
|
1095
1330
|
};
|
|
1096
1331
|
}
|
|
1097
1332
|
|
|
@@ -1114,7 +1349,16 @@ export default function DashboardClient() {
|
|
|
1114
1349
|
|
|
1115
1350
|
const openAgentSetup = useCallback((agentName: string) => {
|
|
1116
1351
|
const normalized = normalizeAgentName(agentName);
|
|
1117
|
-
const
|
|
1352
|
+
const agentState = agentStatesByName[normalized];
|
|
1353
|
+
const known = getKnownAgent(agentName);
|
|
1354
|
+
const target = agentState?.installed
|
|
1355
|
+
? agentState?.setupUrl ?? known?.setupUrl ?? agentState?.homepage ?? known?.homepage
|
|
1356
|
+
: agentState?.installUrl
|
|
1357
|
+
?? known?.installUrl
|
|
1358
|
+
?? agentState?.setupUrl
|
|
1359
|
+
?? known?.setupUrl
|
|
1360
|
+
?? agentState?.homepage
|
|
1361
|
+
?? known?.homepage;
|
|
1118
1362
|
if (!target || typeof window === "undefined") return;
|
|
1119
1363
|
window.open(target, "_blank", "noopener,noreferrer");
|
|
1120
1364
|
}, [agentStatesByName]);
|
|
@@ -1232,22 +1476,6 @@ export default function DashboardClient() {
|
|
|
1232
1476
|
}
|
|
1233
1477
|
}
|
|
1234
1478
|
|
|
1235
|
-
const toggleSidebar = useCallback(() => setSidebarOpen((prev) => !prev), []);
|
|
1236
|
-
|
|
1237
|
-
const closeSidebarOnMobile = useCallback(() => {
|
|
1238
|
-
if (typeof window !== "undefined" && window.innerWidth < 1024) {
|
|
1239
|
-
setSidebarOpen(false);
|
|
1240
|
-
}
|
|
1241
|
-
}, []);
|
|
1242
|
-
|
|
1243
|
-
const syncSidebarForViewport = useCallback(() => {
|
|
1244
|
-
if (typeof window !== "undefined" && window.innerWidth < 1024) {
|
|
1245
|
-
setSidebarOpen(false);
|
|
1246
|
-
return;
|
|
1247
|
-
}
|
|
1248
|
-
setSidebarOpen(true);
|
|
1249
|
-
}, []);
|
|
1250
|
-
|
|
1251
1479
|
const openWorkspaceDialog = useCallback(() => {
|
|
1252
1480
|
setNewWorkspaceError(null);
|
|
1253
1481
|
setNewWorkspaceOpen(true);
|
|
@@ -1318,10 +1546,17 @@ export default function DashboardClient() {
|
|
|
1318
1546
|
}
|
|
1319
1547
|
|
|
1320
1548
|
setPrompt("");
|
|
1321
|
-
setWorkspaceView("chat");
|
|
1322
1549
|
syncSidebarForViewport();
|
|
1323
1550
|
await refreshSessions();
|
|
1324
|
-
|
|
1551
|
+
navigateDashboard(
|
|
1552
|
+
{
|
|
1553
|
+
projectId,
|
|
1554
|
+
sessionId: data.session.id,
|
|
1555
|
+
workspaceView: "chat",
|
|
1556
|
+
tab: "chat",
|
|
1557
|
+
},
|
|
1558
|
+
"push",
|
|
1559
|
+
);
|
|
1325
1560
|
} catch (err) {
|
|
1326
1561
|
setCreateError(err instanceof Error ? err.message : "Failed to create workspace");
|
|
1327
1562
|
} finally {
|
|
@@ -1330,6 +1565,7 @@ export default function DashboardClient() {
|
|
|
1330
1565
|
}, [
|
|
1331
1566
|
agentStatesByName,
|
|
1332
1567
|
launchModelSelection,
|
|
1568
|
+
navigateDashboard,
|
|
1333
1569
|
openAgentSetup,
|
|
1334
1570
|
projects,
|
|
1335
1571
|
prompt,
|
|
@@ -1363,11 +1599,11 @@ export default function DashboardClient() {
|
|
|
1363
1599
|
}
|
|
1364
1600
|
|
|
1365
1601
|
if (selectedSessionId === sessionId) {
|
|
1366
|
-
|
|
1602
|
+
navigateDashboard({ sessionId: null, tab: null }, "replace");
|
|
1367
1603
|
}
|
|
1368
1604
|
|
|
1369
1605
|
await refreshSessions();
|
|
1370
|
-
}, [refreshSessions, selectedSessionId]);
|
|
1606
|
+
}, [navigateDashboard, refreshSessions, selectedSessionId]);
|
|
1371
1607
|
|
|
1372
1608
|
const handleCreateWorkspace = useCallback(async (payload: NewWorkspacePayload) => {
|
|
1373
1609
|
setCreatingWorkspace(true);
|
|
@@ -1394,33 +1630,55 @@ export default function DashboardClient() {
|
|
|
1394
1630
|
}
|
|
1395
1631
|
|
|
1396
1632
|
await refreshConfig();
|
|
1397
|
-
setSelectedProjectId(createdProjectId);
|
|
1398
|
-
setSelectedSessionId(null);
|
|
1399
1633
|
setPrompt("");
|
|
1400
1634
|
syncSidebarForViewport();
|
|
1401
1635
|
setNewWorkspaceOpen(false);
|
|
1636
|
+
navigateDashboard(
|
|
1637
|
+
{
|
|
1638
|
+
projectId: createdProjectId,
|
|
1639
|
+
sessionId: null,
|
|
1640
|
+
workspaceView: "chat",
|
|
1641
|
+
tab: null,
|
|
1642
|
+
},
|
|
1643
|
+
"push",
|
|
1644
|
+
);
|
|
1402
1645
|
} catch (err) {
|
|
1403
1646
|
setNewWorkspaceError(err instanceof Error ? err.message : "Failed to add workspace");
|
|
1404
1647
|
} finally {
|
|
1405
1648
|
setCreatingWorkspace(false);
|
|
1406
1649
|
}
|
|
1407
|
-
}, [refreshConfig, syncSidebarForViewport]);
|
|
1650
|
+
}, [navigateDashboard, refreshConfig, syncSidebarForViewport]);
|
|
1408
1651
|
|
|
1409
1652
|
const onboardingRequired = !preferencesLoading && !!preferences && !preferences.onboardingAcknowledged;
|
|
1410
1653
|
const resolvedPreferences = preferences ?? normalizePreferences(null, selectedAgent || DEFAULT_AGENT);
|
|
1411
1654
|
const resolvedCodingAgent = selectedAgent || resolvedPreferences.codingAgent || DEFAULT_AGENT;
|
|
1412
1655
|
|
|
1413
1656
|
const handleSelectProject = useCallback((projectId: string | null) => {
|
|
1414
|
-
|
|
1415
|
-
|
|
1657
|
+
navigateDashboard(
|
|
1658
|
+
{
|
|
1659
|
+
projectId,
|
|
1660
|
+
sessionId: null,
|
|
1661
|
+
workspaceView: projectId ? workspaceView : null,
|
|
1662
|
+
tab: null,
|
|
1663
|
+
},
|
|
1664
|
+
"push",
|
|
1665
|
+
);
|
|
1416
1666
|
setSelectedAgent(preferences?.codingAgent || DEFAULT_AGENT);
|
|
1417
1667
|
closeSidebarOnMobile();
|
|
1418
|
-
}, [closeSidebarOnMobile, preferences?.codingAgent]);
|
|
1668
|
+
}, [closeSidebarOnMobile, navigateDashboard, preferences?.codingAgent, workspaceView]);
|
|
1419
1669
|
|
|
1420
1670
|
const handleSelectSession = useCallback((id: string) => {
|
|
1421
|
-
|
|
1671
|
+
const matchedSession = dashboardSessions.find((session) => session.id === id) ?? null;
|
|
1672
|
+
navigateDashboard(
|
|
1673
|
+
{
|
|
1674
|
+
projectId: matchedSession?.projectId ?? selectedProjectId ?? null,
|
|
1675
|
+
sessionId: id,
|
|
1676
|
+
tab: "chat",
|
|
1677
|
+
},
|
|
1678
|
+
"push",
|
|
1679
|
+
);
|
|
1422
1680
|
closeSidebarOnMobile();
|
|
1423
|
-
}, [closeSidebarOnMobile]);
|
|
1681
|
+
}, [closeSidebarOnMobile, dashboardSessions, navigateDashboard, selectedProjectId]);
|
|
1424
1682
|
|
|
1425
1683
|
const handleOpenPreferences = useCallback(() => {
|
|
1426
1684
|
setPreferencesDialogOpen(true);
|
|
@@ -1502,7 +1760,7 @@ export default function DashboardClient() {
|
|
|
1502
1760
|
agentOptions={agentOptions}
|
|
1503
1761
|
projects={projects}
|
|
1504
1762
|
selectedProjectId={selectedProjectId}
|
|
1505
|
-
onSelectProject={
|
|
1763
|
+
onSelectProject={handleSelectProject}
|
|
1506
1764
|
projectLabel={selectedProjectId ?? "All projects"}
|
|
1507
1765
|
hasProject={projects.length > 0}
|
|
1508
1766
|
creating={creating}
|
|
@@ -1550,7 +1808,7 @@ export default function DashboardClient() {
|
|
|
1550
1808
|
<div className="inline-flex w-fit rounded-[6px] border border-[var(--vk-border)] p-1">
|
|
1551
1809
|
<button
|
|
1552
1810
|
type="button"
|
|
1553
|
-
onClick={() =>
|
|
1811
|
+
onClick={() => navigateDashboard({ projectId: selectedProject.id, workspaceView: "chat" }, "replace")}
|
|
1554
1812
|
className={`min-h-[32px] rounded-[4px] px-3 text-[13px] ${
|
|
1555
1813
|
workspaceView === "chat"
|
|
1556
1814
|
? "bg-[var(--vk-bg-active)] text-[var(--vk-text-strong)]"
|
|
@@ -1561,7 +1819,7 @@ export default function DashboardClient() {
|
|
|
1561
1819
|
</button>
|
|
1562
1820
|
<button
|
|
1563
1821
|
type="button"
|
|
1564
|
-
onClick={() =>
|
|
1822
|
+
onClick={() => navigateDashboard({ projectId: selectedProject.id, workspaceView: "board" }, "replace")}
|
|
1565
1823
|
className={`min-h-[32px] rounded-[4px] px-3 text-[13px] ${
|
|
1566
1824
|
workspaceView === "board"
|
|
1567
1825
|
? "bg-[var(--vk-bg-active)] text-[var(--vk-text-strong)]"
|
|
@@ -1579,7 +1837,7 @@ export default function DashboardClient() {
|
|
|
1579
1837
|
</div>
|
|
1580
1838
|
</div>
|
|
1581
1839
|
);
|
|
1582
|
-
}, [selectedProject, workspaceMainPanel, workspaceView]);
|
|
1840
|
+
}, [navigateDashboard, selectedProject, workspaceMainPanel, workspaceView]);
|
|
1583
1841
|
|
|
1584
1842
|
const workspaceContent = useMemo(() => {
|
|
1585
1843
|
if (selectedSessionId) {
|
|
@@ -1622,7 +1880,8 @@ export default function DashboardClient() {
|
|
|
1622
1880
|
return (
|
|
1623
1881
|
<>
|
|
1624
1882
|
<AppShell
|
|
1625
|
-
|
|
1883
|
+
mobileSidebarOpen={mobileSidebarOpen}
|
|
1884
|
+
desktopSidebarOpen={desktopSidebarOpen}
|
|
1626
1885
|
onToggleSidebar={toggleSidebar}
|
|
1627
1886
|
sidebar={sidebarContent}
|
|
1628
1887
|
>
|
|
@@ -1657,6 +1916,7 @@ export default function DashboardClient() {
|
|
|
1657
1916
|
current={resolvedPreferences}
|
|
1658
1917
|
projectCount={projects.length}
|
|
1659
1918
|
agentOptions={agentOptions}
|
|
1919
|
+
agentStates={agentStatesByName}
|
|
1660
1920
|
runtimeModelCatalogs={runtimeModelCatalogs}
|
|
1661
1921
|
onRepositoriesChanged={refreshConfig}
|
|
1662
1922
|
onOnboardingComplete={({ needsProject }) => {
|
|
@@ -1664,6 +1924,7 @@ export default function DashboardClient() {
|
|
|
1664
1924
|
setPendingWorkspaceSetup(true);
|
|
1665
1925
|
}
|
|
1666
1926
|
}}
|
|
1927
|
+
onOpenAgentSetup={openAgentSetup}
|
|
1667
1928
|
onClose={handleClosePreferencesDialog}
|
|
1668
1929
|
onSave={handleSavePreferences}
|
|
1669
1930
|
/>
|
|
@@ -1784,7 +2045,7 @@ function NewWorkspaceDialog({
|
|
|
1784
2045
|
opts.push(defaultAgent || DEFAULT_AGENT);
|
|
1785
2046
|
}
|
|
1786
2047
|
|
|
1787
|
-
const rankMap = new Map(
|
|
2048
|
+
const rankMap = new Map(KNOWN_AGENT_ORDER.map((name, index) => [name, index]));
|
|
1788
2049
|
return opts.sort((left, right) => {
|
|
1789
2050
|
const leftRank = rankMap.get(normalizeAgentName(left)) ?? Number.MAX_SAFE_INTEGER;
|
|
1790
2051
|
const rightRank = rankMap.get(normalizeAgentName(right)) ?? Number.MAX_SAFE_INTEGER;
|
|
@@ -2745,7 +3006,7 @@ const CreateWorkspacePanel = memo(function CreateWorkspacePanel({
|
|
|
2745
3006
|
onCreate: (options?: CreateSessionOptions) => void;
|
|
2746
3007
|
}) {
|
|
2747
3008
|
const orderedAgentOptions = useMemo(() => {
|
|
2748
|
-
const rankMap = new Map(
|
|
3009
|
+
const rankMap = new Map(KNOWN_AGENT_ORDER.map((name, index) => [name, index]));
|
|
2749
3010
|
return [...agentOptions].sort((left, right) => {
|
|
2750
3011
|
const leftRank = rankMap.get(normalizeAgentName(left)) ?? Number.MAX_SAFE_INTEGER;
|
|
2751
3012
|
const rightRank = rankMap.get(normalizeAgentName(right)) ?? Number.MAX_SAFE_INTEGER;
|
|
@@ -3399,9 +3660,11 @@ function SettingsDialog({
|
|
|
3399
3660
|
current,
|
|
3400
3661
|
projectCount,
|
|
3401
3662
|
agentOptions,
|
|
3663
|
+
agentStates,
|
|
3402
3664
|
runtimeModelCatalogs,
|
|
3403
3665
|
onRepositoriesChanged,
|
|
3404
3666
|
onOnboardingComplete,
|
|
3667
|
+
onOpenAgentSetup,
|
|
3405
3668
|
onClose,
|
|
3406
3669
|
onSave,
|
|
3407
3670
|
}: {
|
|
@@ -3412,18 +3675,19 @@ function SettingsDialog({
|
|
|
3412
3675
|
current: PreferencesPayload;
|
|
3413
3676
|
projectCount: number;
|
|
3414
3677
|
agentOptions: string[];
|
|
3678
|
+
agentStates: Record<string, AgentSetupState>;
|
|
3415
3679
|
runtimeModelCatalogs: Record<string, RuntimeAgentModelCatalog>;
|
|
3416
3680
|
onRepositoriesChanged?: () => Promise<void>;
|
|
3417
3681
|
onOnboardingComplete?: (result: { needsProject: boolean }) => void;
|
|
3682
|
+
onOpenAgentSetup: (agent: string) => void;
|
|
3418
3683
|
onClose: () => void;
|
|
3419
3684
|
onSave: (next: PreferencesPayload, options?: { closeDialog?: boolean }) => Promise<boolean>;
|
|
3420
3685
|
}) {
|
|
3421
3686
|
const [activeTab, setActiveTab] = useState<SettingsTabId>("preferences");
|
|
3422
3687
|
const [codingAgent, setCodingAgent] = useState(current.codingAgent);
|
|
3423
3688
|
const [ide, setIde] = useState(current.ide);
|
|
3424
|
-
const [remoteSshHost, setRemoteSshHost] = useState(current.remoteSshHost);
|
|
3425
|
-
const [remoteSshUser, setRemoteSshUser] = useState(current.remoteSshUser);
|
|
3426
3689
|
const [markdownEditor, setMarkdownEditor] = useState(current.markdownEditor);
|
|
3690
|
+
const [markdownEditorPath, setMarkdownEditorPath] = useState<string>(current.markdownEditorPath ?? "");
|
|
3427
3691
|
const [modelAccess, setModelAccess] = useState<ModelAccessPreferences>(current.modelAccess);
|
|
3428
3692
|
const [soundEnabled, setSoundEnabled] = useState(current.notifications.soundEnabled);
|
|
3429
3693
|
const [soundFile, setSoundFile] = useState<string | null>(current.notifications.soundFile);
|
|
@@ -3438,23 +3702,36 @@ function SettingsDialog({
|
|
|
3438
3702
|
const [repositoryBranchesLoading, setRepositoryBranchesLoading] = useState(false);
|
|
3439
3703
|
const [repositoryBranchesError, setRepositoryBranchesError] = useState<string | null>(null);
|
|
3440
3704
|
const [repositoryFolderPickerOpen, setRepositoryFolderPickerOpen] = useState(false);
|
|
3705
|
+
const [notesFolderPickerOpen, setNotesFolderPickerOpen] = useState(false);
|
|
3441
3706
|
const [accessSettings, setAccessSettings] = useState<AccessSettingsPayload>(() => normalizeAccessSettings(null));
|
|
3442
3707
|
const [accessLoading, setAccessLoading] = useState(false);
|
|
3443
3708
|
const [accessSaving, setAccessSaving] = useState(false);
|
|
3444
3709
|
const [accessError, setAccessError] = useState<string | null>(null);
|
|
3710
|
+
const [remoteAccessSettings, setRemoteAccessSettings] = useState<RemoteAccessPayload>(() => normalizeRemoteAccess(null));
|
|
3711
|
+
const [remoteAccessLoading, setRemoteAccessLoading] = useState(false);
|
|
3712
|
+
const [remoteAccessMutating, setRemoteAccessMutating] = useState<RemoteAccessAction | null>(null);
|
|
3713
|
+
const [remoteAccessError, setRemoteAccessError] = useState<string | null>(null);
|
|
3445
3714
|
|
|
3446
|
-
const isBusy = creating || repositoriesSaving || accessSaving;
|
|
3715
|
+
const isBusy = creating || repositoriesSaving || accessSaving || remoteAccessMutating !== null;
|
|
3447
3716
|
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3717
|
+
function hydrateRepositoryDraft(value: RepositorySettingsPayload): RepositorySettingsPayload {
|
|
3718
|
+
return {
|
|
3719
|
+
...value,
|
|
3720
|
+
agentPermissions: value.agentPermissions === "default" ? "default" : "skip",
|
|
3721
|
+
devServerScript: value.devServerScript ?? "",
|
|
3722
|
+
devServerCwd: value.devServerCwd ?? "",
|
|
3723
|
+
devServerUrl: value.devServerUrl ?? "",
|
|
3724
|
+
devServerPort: value.devServerPort ?? "",
|
|
3725
|
+
devServerHost: value.devServerHost ?? "",
|
|
3726
|
+
devServerPath: value.devServerPath ?? "",
|
|
3727
|
+
devServerHttps: value.devServerHttps === true,
|
|
3728
|
+
pathHealth: {
|
|
3729
|
+
exists: value.pathHealth.exists,
|
|
3730
|
+
isGitRepository: value.pathHealth.isGitRepository,
|
|
3731
|
+
suggestedPath: value.pathHealth.suggestedPath,
|
|
3732
|
+
},
|
|
3733
|
+
};
|
|
3734
|
+
}
|
|
3458
3735
|
|
|
3459
3736
|
function parseMultilineRoleList(value: string): string[] {
|
|
3460
3737
|
return value
|
|
@@ -3559,11 +3836,18 @@ function SettingsDialog({
|
|
|
3559
3836
|
repo: repositoryDraft.repo,
|
|
3560
3837
|
path: repositoryDraft.path,
|
|
3561
3838
|
agent: repositoryDraft.agent,
|
|
3839
|
+
agentPermissions: repositoryDraft.agentPermissions,
|
|
3562
3840
|
agentModel: resolveModelSelectionValue(repositoryModelSelection) ?? "",
|
|
3563
3841
|
agentReasoningEffort: resolveReasoningSelectionValue(repositoryModelSelection) ?? "",
|
|
3564
3842
|
defaultWorkingDirectory: repositoryDraft.defaultWorkingDirectory,
|
|
3565
3843
|
defaultBranch: repositoryDraft.defaultBranch,
|
|
3566
3844
|
devServerScript: repositoryDraft.devServerScript,
|
|
3845
|
+
devServerCwd: repositoryDraft.devServerCwd,
|
|
3846
|
+
devServerUrl: repositoryDraft.devServerUrl,
|
|
3847
|
+
devServerPort: repositoryDraft.devServerPort,
|
|
3848
|
+
devServerHost: repositoryDraft.devServerHost,
|
|
3849
|
+
devServerPath: repositoryDraft.devServerPath,
|
|
3850
|
+
devServerHttps: repositoryDraft.devServerHttps,
|
|
3567
3851
|
setupScript: repositoryDraft.setupScript,
|
|
3568
3852
|
runSetupInParallel: repositoryDraft.runSetupInParallel,
|
|
3569
3853
|
cleanupScript: repositoryDraft.cleanupScript,
|
|
@@ -3633,11 +3917,11 @@ function SettingsDialog({
|
|
|
3633
3917
|
method: "PUT",
|
|
3634
3918
|
headers: { "Content-Type": "application/json" },
|
|
3635
3919
|
body: JSON.stringify({
|
|
3636
|
-
requireAuth: accessSettings.requireAuth,
|
|
3920
|
+
requireAuth: accessSettings.requireAuth || accessSettings.trustedHeaders.enabled,
|
|
3637
3921
|
defaultRole: accessSettings.defaultRole,
|
|
3638
3922
|
trustedHeaders: {
|
|
3639
3923
|
enabled: accessSettings.trustedHeaders.enabled,
|
|
3640
|
-
provider:
|
|
3924
|
+
provider: "cloudflare-access",
|
|
3641
3925
|
emailHeader: accessSettings.trustedHeaders.emailHeader,
|
|
3642
3926
|
jwtHeader: accessSettings.trustedHeaders.jwtHeader,
|
|
3643
3927
|
teamDomain: accessSettings.trustedHeaders.teamDomain,
|
|
@@ -3661,6 +3945,9 @@ function SettingsDialog({
|
|
|
3661
3945
|
}
|
|
3662
3946
|
|
|
3663
3947
|
setAccessSettings(normalizeAccessSettings(data?.access, data?.current));
|
|
3948
|
+
if (activeTab === "remote_access") {
|
|
3949
|
+
await loadRemoteAccess();
|
|
3950
|
+
}
|
|
3664
3951
|
return true;
|
|
3665
3952
|
} catch (err) {
|
|
3666
3953
|
setAccessError(err instanceof Error ? err.message : "Failed to save organization settings");
|
|
@@ -3670,14 +3957,78 @@ function SettingsDialog({
|
|
|
3670
3957
|
}
|
|
3671
3958
|
}
|
|
3672
3959
|
|
|
3960
|
+
async function loadRemoteAccess(): Promise<void> {
|
|
3961
|
+
setRemoteAccessLoading(true);
|
|
3962
|
+
setRemoteAccessError(null);
|
|
3963
|
+
try {
|
|
3964
|
+
const res = await fetch("/api/remote-access");
|
|
3965
|
+
const data = (await res.json().catch(() => null)) as
|
|
3966
|
+
| { error?: string; reason?: string }
|
|
3967
|
+
| RemoteAccessPayload
|
|
3968
|
+
| null;
|
|
3969
|
+
if (!res.ok) {
|
|
3970
|
+
const reason = data && typeof data === "object" && "reason" in data && typeof data.reason === "string"
|
|
3971
|
+
? data.reason
|
|
3972
|
+
: null;
|
|
3973
|
+
const errorMessage = data && typeof data === "object" && "error" in data && typeof data.error === "string"
|
|
3974
|
+
? data.error
|
|
3975
|
+
: null;
|
|
3976
|
+
throw new Error(reason ?? errorMessage ?? `Failed to load remote access (${res.status})`);
|
|
3977
|
+
}
|
|
3978
|
+
|
|
3979
|
+
setRemoteAccessSettings(normalizeRemoteAccess(data));
|
|
3980
|
+
} catch (err) {
|
|
3981
|
+
setRemoteAccessSettings(normalizeRemoteAccess(null));
|
|
3982
|
+
setRemoteAccessError(err instanceof Error ? err.message : "Failed to load remote access");
|
|
3983
|
+
} finally {
|
|
3984
|
+
setRemoteAccessLoading(false);
|
|
3985
|
+
}
|
|
3986
|
+
}
|
|
3987
|
+
|
|
3988
|
+
async function mutateRemoteAccess(action: RemoteAccessAction): Promise<void> {
|
|
3989
|
+
setRemoteAccessMutating(action);
|
|
3990
|
+
setRemoteAccessError(null);
|
|
3991
|
+
try {
|
|
3992
|
+
const res = await fetch("/api/remote-access", {
|
|
3993
|
+
method: action === "disable" ? "DELETE" : "POST",
|
|
3994
|
+
headers: action === "disable"
|
|
3995
|
+
? undefined
|
|
3996
|
+
: {
|
|
3997
|
+
"Content-Type": "application/json",
|
|
3998
|
+
},
|
|
3999
|
+
body: action === "disable"
|
|
4000
|
+
? undefined
|
|
4001
|
+
: JSON.stringify({ action }),
|
|
4002
|
+
});
|
|
4003
|
+
const data = (await res.json().catch(() => null)) as
|
|
4004
|
+
| { error?: string; reason?: string }
|
|
4005
|
+
| RemoteAccessPayload
|
|
4006
|
+
| null;
|
|
4007
|
+
if (!res.ok) {
|
|
4008
|
+
const reason = data && typeof data === "object" && "reason" in data && typeof data.reason === "string"
|
|
4009
|
+
? data.reason
|
|
4010
|
+
: null;
|
|
4011
|
+
const errorMessage = data && typeof data === "object" && "error" in data && typeof data.error === "string"
|
|
4012
|
+
? data.error
|
|
4013
|
+
: null;
|
|
4014
|
+
throw new Error(reason ?? errorMessage ?? `Failed to ${action} remote access (${res.status})`);
|
|
4015
|
+
}
|
|
4016
|
+
|
|
4017
|
+
setRemoteAccessSettings(normalizeRemoteAccess(data));
|
|
4018
|
+
} catch (err) {
|
|
4019
|
+
setRemoteAccessError(err instanceof Error ? err.message : `Failed to ${action} remote access`);
|
|
4020
|
+
} finally {
|
|
4021
|
+
setRemoteAccessMutating(null);
|
|
4022
|
+
}
|
|
4023
|
+
}
|
|
4024
|
+
|
|
3673
4025
|
useEffect(() => {
|
|
3674
4026
|
if (!open) return;
|
|
3675
4027
|
setActiveTab(mode === "onboarding" ? "preferences" : "general");
|
|
3676
4028
|
setCodingAgent(current.codingAgent);
|
|
3677
4029
|
setIde(current.ide);
|
|
3678
|
-
setRemoteSshHost(current.remoteSshHost);
|
|
3679
|
-
setRemoteSshUser(current.remoteSshUser);
|
|
3680
4030
|
setMarkdownEditor(current.markdownEditor);
|
|
4031
|
+
setMarkdownEditorPath(current.markdownEditorPath ?? "");
|
|
3681
4032
|
setModelAccess(current.modelAccess);
|
|
3682
4033
|
setSoundEnabled(current.notifications.soundEnabled);
|
|
3683
4034
|
setSoundFile(current.notifications.soundFile);
|
|
@@ -3686,6 +4037,8 @@ function SettingsDialog({
|
|
|
3686
4037
|
setRepositoriesError(null);
|
|
3687
4038
|
setRepositoryModelSelection(emptyModelSelection());
|
|
3688
4039
|
setAccessError(null);
|
|
4040
|
+
setRemoteAccessSettings(normalizeRemoteAccess(null));
|
|
4041
|
+
setRemoteAccessError(null);
|
|
3689
4042
|
}, [mode, open]);
|
|
3690
4043
|
|
|
3691
4044
|
useEffect(() => {
|
|
@@ -3702,6 +4055,12 @@ function SettingsDialog({
|
|
|
3702
4055
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3703
4056
|
}, [mode, open]);
|
|
3704
4057
|
|
|
4058
|
+
useEffect(() => {
|
|
4059
|
+
if (!open || mode === "onboarding" || activeTab !== "remote_access") return;
|
|
4060
|
+
void loadRemoteAccess();
|
|
4061
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
4062
|
+
}, [activeTab, mode, open]);
|
|
4063
|
+
|
|
3705
4064
|
useEffect(() => {
|
|
3706
4065
|
if (!open) return;
|
|
3707
4066
|
if (!selectedRepositoryId) {
|
|
@@ -3746,12 +4105,30 @@ function SettingsDialog({
|
|
|
3746
4105
|
const isGeneralTab = activeTabItem.id === "general";
|
|
3747
4106
|
const isRemoteAccessTab = activeTabItem.id === "remote_access";
|
|
3748
4107
|
const isAgentsTab = activeTabItem.id === "agents";
|
|
3749
|
-
const isPreferenceFormTab = isPreferencesTab || isGeneralTab ||
|
|
4108
|
+
const isPreferenceFormTab = isPreferencesTab || isGeneralTab || isAgentsTab;
|
|
4109
|
+
const isPrimarySettingsTab = isPreferenceFormTab || isRemoteAccessTab;
|
|
3750
4110
|
const isRepositoriesTab = activeTabItem.id === "repositories";
|
|
3751
4111
|
const isOrganizationTab = activeTabItem.id === "organization";
|
|
3752
4112
|
const onboardingStepIndex = visibleTabs.findIndex((tab) => tab.id === activeTabItem.id) + 1;
|
|
3753
4113
|
const onboardingHasRepositoryStep = visibleTabs.some((tab) => tab.id === "repositories");
|
|
3754
4114
|
const accessCanEdit = accessSettings.current.role === "admin";
|
|
4115
|
+
const remoteAccessModeLabel = getRemoteAccessModeLabel(remoteAccessSettings.mode);
|
|
4116
|
+
const remoteAccessStatusLabel = getRemoteAccessStatusLabel(remoteAccessSettings.status);
|
|
4117
|
+
const remoteAccessMutationPending = remoteAccessMutating !== null;
|
|
4118
|
+
const managedRemoteProvider = remoteAccessSettings.provider ?? remoteAccessSettings.recommendedProvider;
|
|
4119
|
+
const usingPrivateNetworkFlow = managedRemoteProvider === "tailscale";
|
|
4120
|
+
const showManagedTunnelControls = managedRemoteProvider !== null || remoteAccessSettings.managed;
|
|
4121
|
+
const remoteAccessEnableLabel = !remoteAccessSettings.installed && remoteAccessSettings.canAutoInstall
|
|
4122
|
+
? "Install + Enable"
|
|
4123
|
+
: "Enable Private Link";
|
|
4124
|
+
const remoteAccessCanEnable = !remoteAccessLoading
|
|
4125
|
+
&& !remoteAccessMutationPending
|
|
4126
|
+
&& usingPrivateNetworkFlow
|
|
4127
|
+
&& !(remoteAccessSettings.status === "ready" && remoteAccessSettings.managed);
|
|
4128
|
+
const remoteAccessCanRotate = false;
|
|
4129
|
+
const remoteAccessCanDisable = !remoteAccessLoading
|
|
4130
|
+
&& !remoteAccessMutationPending
|
|
4131
|
+
&& (remoteAccessSettings.status === "starting" || remoteAccessSettings.status === "ready" || remoteAccessSettings.status === "error");
|
|
3755
4132
|
|
|
3756
4133
|
const orderedAgentOptions = useMemo(() => {
|
|
3757
4134
|
const opts = new Set(agentOptions);
|
|
@@ -3761,7 +4138,7 @@ function SettingsDialog({
|
|
|
3761
4138
|
if (opts.size === 0) {
|
|
3762
4139
|
opts.add(DEFAULT_AGENT);
|
|
3763
4140
|
}
|
|
3764
|
-
const rankMap = new Map(
|
|
4141
|
+
const rankMap = new Map(KNOWN_AGENT_ORDER.map((name, index) => [name, index]));
|
|
3765
4142
|
return [...opts].sort((left, right) => {
|
|
3766
4143
|
const leftRank = rankMap.get(normalizeAgentName(left)) ?? Number.MAX_SAFE_INTEGER;
|
|
3767
4144
|
const rightRank = rankMap.get(normalizeAgentName(right)) ?? Number.MAX_SAFE_INTEGER;
|
|
@@ -3769,6 +4146,7 @@ function SettingsDialog({
|
|
|
3769
4146
|
return getAgentLabel(left).localeCompare(getAgentLabel(right));
|
|
3770
4147
|
});
|
|
3771
4148
|
}, [agentOptions, codingAgent]);
|
|
4149
|
+
const selectedCodingAgentState = agentStates[normalizeAgentName(codingAgent)] ?? null;
|
|
3772
4150
|
|
|
3773
4151
|
function handleModelAccessChange(agent: string, nextAccess: string) {
|
|
3774
4152
|
const catalog = getAgentModelCatalog(agent);
|
|
@@ -3792,7 +4170,6 @@ function SettingsDialog({
|
|
|
3792
4170
|
&& repositoryDraft.defaultBranch.trim().length > 0;
|
|
3793
4171
|
const canSaveAccess = accessCanEdit && !accessLoading && (
|
|
3794
4172
|
!accessSettings.trustedHeaders.enabled
|
|
3795
|
-
|| accessSettings.trustedHeaders.provider === "generic"
|
|
3796
4173
|
|| (
|
|
3797
4174
|
accessSettings.trustedHeaders.teamDomain.trim().length > 0
|
|
3798
4175
|
&& accessSettings.trustedHeaders.audience.trim().length > 0
|
|
@@ -3835,9 +4212,8 @@ function SettingsDialog({
|
|
|
3835
4212
|
onboardingAcknowledged: acknowledgeOnboarding ? true : current.onboardingAcknowledged,
|
|
3836
4213
|
codingAgent: codingAgent.trim(),
|
|
3837
4214
|
ide: ide.trim(),
|
|
3838
|
-
remoteSshHost: remoteSshHost.trim(),
|
|
3839
|
-
remoteSshUser: remoteSshUser.trim(),
|
|
3840
4215
|
markdownEditor: markdownEditor.trim(),
|
|
4216
|
+
markdownEditorPath: (markdownEditorPath ?? "").trim(),
|
|
3841
4217
|
modelAccess,
|
|
3842
4218
|
notifications: {
|
|
3843
4219
|
soundEnabled,
|
|
@@ -3851,7 +4227,11 @@ function SettingsDialog({
|
|
|
3851
4227
|
options?: { closeDialog?: boolean },
|
|
3852
4228
|
): Promise<boolean> {
|
|
3853
4229
|
if (!canSubmitPreferences || creating) return false;
|
|
3854
|
-
|
|
4230
|
+
const saved = await onSave(buildNextPreferences(acknowledgeOnboarding), options);
|
|
4231
|
+
if (saved && selectedCodingAgentState && !selectedCodingAgentState.ready) {
|
|
4232
|
+
onOpenAgentSetup(codingAgent);
|
|
4233
|
+
}
|
|
4234
|
+
return saved;
|
|
3855
4235
|
}
|
|
3856
4236
|
|
|
3857
4237
|
async function handleOnboardingContinue() {
|
|
@@ -3884,7 +4264,7 @@ function SettingsDialog({
|
|
|
3884
4264
|
<div
|
|
3885
4265
|
className="fixed inset-0 z-[90] flex items-start justify-center overflow-y-auto bg-black/70 px-3 py-3 sm:items-center"
|
|
3886
4266
|
onClick={() => {
|
|
3887
|
-
if (isBusy || mode === "onboarding" || repositoryFolderPickerOpen) return;
|
|
4267
|
+
if (isBusy || mode === "onboarding" || repositoryFolderPickerOpen || notesFolderPickerOpen) return;
|
|
3888
4268
|
onClose();
|
|
3889
4269
|
}}
|
|
3890
4270
|
role="presentation"
|
|
@@ -3951,7 +4331,7 @@ function SettingsDialog({
|
|
|
3951
4331
|
</header>
|
|
3952
4332
|
|
|
3953
4333
|
<div className="min-h-0 flex-1 overflow-auto px-4 py-3 sm:px-6 sm:py-4">
|
|
3954
|
-
{
|
|
4334
|
+
{isPrimarySettingsTab ? (
|
|
3955
4335
|
<div className="space-y-5">
|
|
3956
4336
|
{isOnboarding && (
|
|
3957
4337
|
<section className="rounded-[6px] border border-[var(--vk-border)] bg-[rgba(234,122,42,0.08)] px-4 py-3">
|
|
@@ -3966,25 +4346,102 @@ function SettingsDialog({
|
|
|
3966
4346
|
<>
|
|
3967
4347
|
<section className="space-y-2">
|
|
3968
4348
|
<h4 className="text-[15px] font-medium text-[var(--vk-text-strong)]">Choose Your Coding Agent</h4>
|
|
3969
|
-
<p className="text-[12px] text-[var(--vk-text-muted)]">
|
|
3970
|
-
|
|
4349
|
+
<p className="text-[12px] text-[var(--vk-text-muted)]">
|
|
4350
|
+
Select the default coding agent, review its setup state, and confirm which models Conductor can offer for it.
|
|
4351
|
+
</p>
|
|
4352
|
+
<div className="grid gap-3">
|
|
3971
4353
|
{orderedAgentOptions.map((agent) => {
|
|
3972
4354
|
const selected = codingAgent === agent;
|
|
4355
|
+
const agentState = agentStates[normalizeAgentName(agent)] ?? null;
|
|
4356
|
+
const accessLabel = getAgentModelAccessLabel(agent, modelAccess);
|
|
4357
|
+
const availableModels = getSelectableAgentModels(agent, modelAccess, runtimeModelCatalogs);
|
|
4358
|
+
const previewModels = availableModels.slice(0, 3);
|
|
4359
|
+
const additionalModels = availableModels.length - previewModels.length;
|
|
4360
|
+
const statusLabel = !agentState?.installed
|
|
4361
|
+
? "Not installed"
|
|
4362
|
+
: !agentState.ready
|
|
4363
|
+
? "Setup required"
|
|
4364
|
+
: "Ready";
|
|
3973
4365
|
return (
|
|
3974
|
-
<
|
|
4366
|
+
<div
|
|
3975
4367
|
key={agent}
|
|
3976
|
-
|
|
3977
|
-
onClick={() => setCodingAgent(agent)}
|
|
3978
|
-
className={`flex items-center gap-2 rounded-[4px] border px-3 py-2 text-left ${
|
|
4368
|
+
className={`flex flex-col gap-3 rounded-[4px] border px-3 py-3 text-left sm:flex-row sm:items-start ${
|
|
3979
4369
|
selected
|
|
3980
4370
|
? "border-[var(--vk-orange)] bg-[var(--vk-bg-hover)]"
|
|
3981
4371
|
: "border-[var(--vk-border)] hover:bg-[var(--vk-bg-hover)]"
|
|
3982
4372
|
}`}
|
|
3983
4373
|
>
|
|
3984
|
-
<
|
|
3985
|
-
|
|
3986
|
-
|
|
3987
|
-
|
|
4374
|
+
<div className="flex min-w-0 flex-1 items-start gap-3">
|
|
4375
|
+
<AgentTileIcon seed={{ label: agent }} className="mt-0.5 h-5 w-5 border-none bg-transparent" />
|
|
4376
|
+
<div className="min-w-0 flex-1">
|
|
4377
|
+
<div className="flex flex-wrap items-center gap-2">
|
|
4378
|
+
<span className="text-[13px] font-medium text-[var(--vk-text-normal)]">{getAgentLabel(agent)}</span>
|
|
4379
|
+
<span className="inline-flex rounded-full border border-[var(--vk-border)] px-2 py-0.5 text-[11px] text-[var(--vk-text-muted)]">
|
|
4380
|
+
{statusLabel}
|
|
4381
|
+
</span>
|
|
4382
|
+
{accessLabel ? (
|
|
4383
|
+
<span className="inline-flex rounded-full border border-[var(--vk-border)] px-2 py-0.5 text-[11px] text-[var(--vk-text-muted)]">
|
|
4384
|
+
{accessLabel}
|
|
4385
|
+
</span>
|
|
4386
|
+
) : null}
|
|
4387
|
+
</div>
|
|
4388
|
+
<p className="mt-1 text-[12px] leading-5 text-[var(--vk-text-muted)]">
|
|
4389
|
+
{agentState?.description ?? getKnownAgent(agent)?.description ?? "Agent metadata not available."}
|
|
4390
|
+
</p>
|
|
4391
|
+
<div className="mt-2 flex flex-wrap gap-1.5">
|
|
4392
|
+
{previewModels.map((model) => (
|
|
4393
|
+
<span
|
|
4394
|
+
key={`${agent}-${model.id}`}
|
|
4395
|
+
className="inline-flex rounded-full border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 py-0.5 text-[11px] text-[var(--vk-text-normal)]"
|
|
4396
|
+
>
|
|
4397
|
+
{model.label}
|
|
4398
|
+
</span>
|
|
4399
|
+
))}
|
|
4400
|
+
{additionalModels > 0 ? (
|
|
4401
|
+
<span className="inline-flex rounded-full border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 py-0.5 text-[11px] text-[var(--vk-text-muted)]">
|
|
4402
|
+
+{additionalModels} more
|
|
4403
|
+
</span>
|
|
4404
|
+
) : null}
|
|
4405
|
+
{previewModels.length === 0 ? (
|
|
4406
|
+
<span className="inline-flex rounded-full border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 py-0.5 text-[11px] text-[var(--vk-text-muted)]">
|
|
4407
|
+
{supportsAgentModelSelection(agent) ? "Models appear after setup" : "Uses the agent default model"}
|
|
4408
|
+
</span>
|
|
4409
|
+
) : null}
|
|
4410
|
+
</div>
|
|
4411
|
+
{!agentState?.installed && agentState?.installHint ? (
|
|
4412
|
+
<p className="mt-2 text-[11px] text-[var(--vk-text-muted)]">
|
|
4413
|
+
Install hint: <code className="rounded bg-[var(--vk-bg-main)] px-1.5 py-0.5 text-[11px] text-[var(--vk-text-normal)]">{agentState.installHint}</code>
|
|
4414
|
+
</p>
|
|
4415
|
+
) : null}
|
|
4416
|
+
</div>
|
|
4417
|
+
</div>
|
|
4418
|
+
<div className="flex shrink-0 items-center gap-2 self-start sm:ml-auto">
|
|
4419
|
+
{!agentState?.ready ? (
|
|
4420
|
+
<button
|
|
4421
|
+
type="button"
|
|
4422
|
+
onClick={() => {
|
|
4423
|
+
setCodingAgent(agent);
|
|
4424
|
+
onOpenAgentSetup(agent);
|
|
4425
|
+
}}
|
|
4426
|
+
className="inline-flex h-8 items-center rounded-[4px] border border-[var(--vk-border)] px-3 text-[12px] text-[var(--vk-orange)] hover:bg-[var(--vk-bg-panel)]"
|
|
4427
|
+
>
|
|
4428
|
+
{agentState?.installed ? "Authenticate" : "Install"}
|
|
4429
|
+
</button>
|
|
4430
|
+
) : null}
|
|
4431
|
+
<button
|
|
4432
|
+
type="button"
|
|
4433
|
+
onClick={() => setCodingAgent(agent)}
|
|
4434
|
+
className={`inline-flex h-8 items-center rounded-[4px] border px-3 text-[12px] ${
|
|
4435
|
+
selected
|
|
4436
|
+
? "border-[var(--vk-orange)] bg-[var(--vk-orange)]/12 text-[var(--vk-orange)]"
|
|
4437
|
+
: "border-[var(--vk-border)] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-panel)]"
|
|
4438
|
+
}`}
|
|
4439
|
+
>
|
|
4440
|
+
{selected ? "Selected" : "Use this agent"}
|
|
4441
|
+
</button>
|
|
4442
|
+
{selected && <Check className="h-3.5 w-3.5 text-[var(--vk-orange)]" />}
|
|
4443
|
+
</div>
|
|
4444
|
+
</div>
|
|
3988
4445
|
);
|
|
3989
4446
|
})}
|
|
3990
4447
|
</div>
|
|
@@ -3999,7 +4456,10 @@ function SettingsDialog({
|
|
|
3999
4456
|
</p>
|
|
4000
4457
|
</div>
|
|
4001
4458
|
<div className="grid gap-3">
|
|
4002
|
-
{orderedAgentOptions.filter((agent) =>
|
|
4459
|
+
{orderedAgentOptions.filter((agent) => {
|
|
4460
|
+
const catalog = getAgentModelCatalog(agent);
|
|
4461
|
+
return supportsAgentModelSelection(agent) && (catalog?.accessOptions.length ?? 0) > 1;
|
|
4462
|
+
}).map((agent) => {
|
|
4003
4463
|
const catalog = getAgentModelCatalog(agent);
|
|
4004
4464
|
if (!catalog) return null;
|
|
4005
4465
|
const selectedAccess = resolveAgentModelAccess(agent, modelAccess) ?? catalog.defaultAccess;
|
|
@@ -4032,181 +4492,349 @@ function SettingsDialog({
|
|
|
4032
4492
|
|
|
4033
4493
|
{(isPreferencesTab || isGeneralTab) && (
|
|
4034
4494
|
<>
|
|
4495
|
+
<section className="space-y-2">
|
|
4496
|
+
<h4 className="text-[15px] font-medium text-[var(--vk-text-strong)]">Choose Your Code Editor</h4>
|
|
4497
|
+
<p className="text-[12px] text-[var(--vk-text-muted)]">This editor will be used when opening attempts and files.</p>
|
|
4498
|
+
<div className="grid gap-2 sm:grid-cols-2">
|
|
4499
|
+
{IDE_OPTIONS.map((option) => {
|
|
4500
|
+
const selected = ide === option.id;
|
|
4501
|
+
return (
|
|
4502
|
+
<button
|
|
4503
|
+
key={option.id}
|
|
4504
|
+
type="button"
|
|
4505
|
+
onClick={() => setIde(option.id)}
|
|
4506
|
+
className={`flex items-center gap-2 rounded-[4px] border px-3 py-2 text-left ${
|
|
4507
|
+
selected
|
|
4508
|
+
? "border-[var(--vk-orange)] bg-[var(--vk-bg-hover)]"
|
|
4509
|
+
: "border-[var(--vk-border)] hover:bg-[var(--vk-bg-hover)]"
|
|
4510
|
+
}`}
|
|
4511
|
+
>
|
|
4512
|
+
<CodeEditorIcon editorId={option.id} label={option.label} />
|
|
4513
|
+
<span className="flex-1 text-[13px] text-[var(--vk-text-normal)]">{option.label}</span>
|
|
4514
|
+
{selected && <Check className="h-3.5 w-3.5 text-[var(--vk-orange)]" />}
|
|
4515
|
+
</button>
|
|
4516
|
+
);
|
|
4517
|
+
})}
|
|
4518
|
+
</div>
|
|
4519
|
+
</section>
|
|
4035
4520
|
|
|
4036
|
-
|
|
4037
|
-
|
|
4038
|
-
|
|
4039
|
-
|
|
4040
|
-
|
|
4041
|
-
|
|
4042
|
-
|
|
4521
|
+
<section className="space-y-2">
|
|
4522
|
+
<h4 className="text-[15px] font-medium text-[var(--vk-text-strong)]">Markdown Editor</h4>
|
|
4523
|
+
<p className="text-[12px] text-[var(--vk-text-muted)]">
|
|
4524
|
+
Used as your second-brain markdown source when feeding context into tasks.
|
|
4525
|
+
</p>
|
|
4526
|
+
<div className="grid gap-2 sm:grid-cols-2">
|
|
4527
|
+
{MARKDOWN_EDITOR_OPTIONS.map((option) => {
|
|
4528
|
+
const selected = markdownEditor === option.id;
|
|
4529
|
+
return (
|
|
4530
|
+
<button
|
|
4531
|
+
key={option.id}
|
|
4532
|
+
type="button"
|
|
4533
|
+
onClick={() => setMarkdownEditor(option.id)}
|
|
4534
|
+
className={`flex items-center gap-2 rounded-[4px] border px-3 py-2 text-left ${
|
|
4535
|
+
selected
|
|
4536
|
+
? "border-[var(--vk-orange)] bg-[var(--vk-bg-hover)]"
|
|
4537
|
+
: "border-[var(--vk-border)] hover:bg-[var(--vk-bg-hover)]"
|
|
4538
|
+
}`}
|
|
4539
|
+
>
|
|
4540
|
+
<MarkdownEditorIcon editorId={option.id} />
|
|
4541
|
+
<span className="flex-1 text-[13px] text-[var(--vk-text-normal)]">{option.label}</span>
|
|
4542
|
+
{selected && <Check className="h-3.5 w-3.5 text-[var(--vk-orange)]" />}
|
|
4543
|
+
</button>
|
|
4544
|
+
);
|
|
4545
|
+
})}
|
|
4546
|
+
</div>
|
|
4547
|
+
{markdownEditor !== "notion" && (
|
|
4548
|
+
<div className="rounded-[4px] border border-[var(--vk-border)] px-3 py-3">
|
|
4549
|
+
<label className="block">
|
|
4550
|
+
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">
|
|
4551
|
+
Notes Root
|
|
4552
|
+
</span>
|
|
4553
|
+
<div className="flex items-center gap-2">
|
|
4554
|
+
<input
|
|
4555
|
+
value={markdownEditorPath ?? ""}
|
|
4556
|
+
readOnly
|
|
4557
|
+
onClick={() => setNotesFolderPickerOpen(true)}
|
|
4558
|
+
placeholder="Select your Obsidian vault, Logseq graph, or notes folder"
|
|
4559
|
+
className="h-9 w-full cursor-pointer rounded-[4px] border border-[var(--vk-border)] bg-transparent px-2 text-[13px] text-[var(--vk-text-normal)] outline-none focus:border-[var(--vk-orange)]"
|
|
4560
|
+
/>
|
|
4561
|
+
<button
|
|
4562
|
+
type="button"
|
|
4563
|
+
onClick={() => setNotesFolderPickerOpen(true)}
|
|
4564
|
+
disabled={isBusy}
|
|
4565
|
+
className="inline-flex h-9 items-center rounded-[4px] border border-[var(--vk-border)] px-2 text-[12px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)] disabled:opacity-60"
|
|
4566
|
+
title="Browse folders"
|
|
4567
|
+
>
|
|
4568
|
+
<FolderOpen className="h-4 w-4" />
|
|
4569
|
+
</button>
|
|
4570
|
+
{(markdownEditorPath ?? "").trim().length > 0 && (
|
|
4571
|
+
<button
|
|
4572
|
+
type="button"
|
|
4573
|
+
onClick={() => setMarkdownEditorPath("")}
|
|
4574
|
+
disabled={isBusy}
|
|
4575
|
+
className="inline-flex h-9 items-center rounded-[4px] border border-[var(--vk-border)] px-2 text-[12px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)] disabled:opacity-60"
|
|
4576
|
+
>
|
|
4577
|
+
Clear
|
|
4578
|
+
</button>
|
|
4579
|
+
)}
|
|
4580
|
+
</div>
|
|
4581
|
+
<p className="mt-1 text-[12px] text-[var(--vk-text-muted)]">
|
|
4582
|
+
Context attachments are discovered from this folder first. Leave it blank to fall back to the current workspace.
|
|
4583
|
+
</p>
|
|
4584
|
+
</label>
|
|
4585
|
+
</div>
|
|
4586
|
+
)}
|
|
4587
|
+
</section>
|
|
4588
|
+
|
|
4589
|
+
<section className="space-y-2">
|
|
4590
|
+
<h4 className="text-[15px] font-medium text-[var(--vk-text-strong)]">Notification Sound</h4>
|
|
4591
|
+
<p className="text-[12px] text-[var(--vk-text-muted)]">Pick a sound for notifications, or disable sound.</p>
|
|
4592
|
+
<div className="grid gap-2 sm:grid-cols-2">
|
|
4593
|
+
{NOTIFICATION_SOUND_OPTIONS.map((option) => {
|
|
4594
|
+
const selected = soundEnabled && soundFile === option.id;
|
|
4595
|
+
return (
|
|
4596
|
+
<button
|
|
4597
|
+
key={option.id}
|
|
4598
|
+
type="button"
|
|
4599
|
+
onClick={() => {
|
|
4600
|
+
setSoundEnabled(true);
|
|
4601
|
+
setSoundFile(option.id);
|
|
4602
|
+
}}
|
|
4603
|
+
className={`flex items-center gap-2 rounded-[4px] border px-3 py-2 text-left ${
|
|
4604
|
+
selected
|
|
4605
|
+
? "border-[var(--vk-orange)] bg-[var(--vk-bg-hover)]"
|
|
4606
|
+
: "border-[var(--vk-border)] hover:bg-[var(--vk-bg-hover)]"
|
|
4607
|
+
}`}
|
|
4608
|
+
>
|
|
4609
|
+
<Volume2 className="h-4 w-4 text-[var(--vk-text-muted)]" />
|
|
4610
|
+
<span className="flex-1 text-[13px] text-[var(--vk-text-normal)]">{option.label}</span>
|
|
4611
|
+
{selected && <Check className="h-3.5 w-3.5 text-[var(--vk-orange)]" />}
|
|
4612
|
+
</button>
|
|
4613
|
+
);
|
|
4614
|
+
})}
|
|
4043
4615
|
<button
|
|
4044
|
-
key={option.id}
|
|
4045
4616
|
type="button"
|
|
4046
|
-
onClick={() =>
|
|
4617
|
+
onClick={() => setSoundEnabled(false)}
|
|
4047
4618
|
className={`flex items-center gap-2 rounded-[4px] border px-3 py-2 text-left ${
|
|
4048
|
-
|
|
4619
|
+
!soundEnabled
|
|
4049
4620
|
? "border-[var(--vk-orange)] bg-[var(--vk-bg-hover)]"
|
|
4050
4621
|
: "border-[var(--vk-border)] hover:bg-[var(--vk-bg-hover)]"
|
|
4051
4622
|
}`}
|
|
4052
4623
|
>
|
|
4053
|
-
<
|
|
4054
|
-
<span className="flex-1 text-[13px] text-[var(--vk-text-normal)]">
|
|
4055
|
-
{
|
|
4624
|
+
<VolumeX className="h-4 w-4 text-[var(--vk-text-muted)]" />
|
|
4625
|
+
<span className="flex-1 text-[13px] text-[var(--vk-text-normal)]">No sound</span>
|
|
4626
|
+
{!soundEnabled && <Check className="h-3.5 w-3.5 text-[var(--vk-orange)]" />}
|
|
4056
4627
|
</button>
|
|
4057
|
-
|
|
4058
|
-
|
|
4059
|
-
|
|
4060
|
-
|
|
4628
|
+
</div>
|
|
4629
|
+
</section>
|
|
4630
|
+
</>
|
|
4631
|
+
)}
|
|
4061
4632
|
|
|
4062
|
-
{
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4633
|
+
{isRemoteAccessTab && (
|
|
4634
|
+
<div className="space-y-4">
|
|
4635
|
+
<section className="rounded-[6px] border border-[var(--vk-border)] bg-[rgba(234,122,42,0.06)] px-4 py-3">
|
|
4636
|
+
<h4 className="text-[15px] font-medium text-[var(--vk-text-strong)]">Remote Access</h4>
|
|
4637
|
+
<p className="mt-1 text-[12px] leading-5 text-[var(--vk-text-muted)]">
|
|
4638
|
+
Use one complete URL to open this Conductor instance from your phone or any other machine.
|
|
4639
|
+
The URL below is only shown to admin sessions because it can grant real control of the dashboard.
|
|
4640
|
+
</p>
|
|
4641
|
+
</section>
|
|
4071
4642
|
|
|
4072
|
-
<
|
|
4073
|
-
<
|
|
4074
|
-
<
|
|
4075
|
-
|
|
4076
|
-
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
|
|
4080
|
-
|
|
4081
|
-
|
|
4643
|
+
<section className="space-y-3 rounded-[6px] border border-[var(--vk-border)] px-4 py-4">
|
|
4644
|
+
<div className="flex flex-wrap items-start justify-between gap-3">
|
|
4645
|
+
<div className="space-y-1">
|
|
4646
|
+
<h5 className="text-[18px] leading-[20px] text-[var(--vk-text-strong)]">{remoteAccessSettings.title}</h5>
|
|
4647
|
+
<p className="text-[12px] leading-5 text-[var(--vk-text-muted)]">
|
|
4648
|
+
{remoteAccessSettings.description}
|
|
4649
|
+
</p>
|
|
4650
|
+
</div>
|
|
4651
|
+
<button
|
|
4652
|
+
type="button"
|
|
4653
|
+
onClick={() => void loadRemoteAccess()}
|
|
4654
|
+
disabled={remoteAccessLoading}
|
|
4655
|
+
className="inline-flex h-8 items-center gap-1.5 rounded-[4px] border border-[var(--vk-border)] px-2 text-[12px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)] disabled:cursor-not-allowed disabled:opacity-60"
|
|
4656
|
+
>
|
|
4657
|
+
<RefreshCcw className={`h-3.5 w-3.5${remoteAccessLoading ? " animate-spin" : ""}`} />
|
|
4658
|
+
<span>Refresh</span>
|
|
4659
|
+
</button>
|
|
4660
|
+
</div>
|
|
4082
4661
|
|
|
4083
|
-
|
|
4084
|
-
<
|
|
4085
|
-
|
|
4086
|
-
|
|
4087
|
-
|
|
4088
|
-
|
|
4089
|
-
|
|
4090
|
-
|
|
4091
|
-
|
|
4092
|
-
|
|
4662
|
+
{remoteAccessLoading ? (
|
|
4663
|
+
<div className="flex items-center gap-2 rounded-[6px] border border-[var(--vk-border)] px-3 py-3 text-[13px] text-[var(--vk-text-muted)]">
|
|
4664
|
+
<Loader2 className="h-4 w-4 animate-spin" />
|
|
4665
|
+
Loading remote access details...
|
|
4666
|
+
</div>
|
|
4667
|
+
) : remoteAccessError ? (
|
|
4668
|
+
<div className="rounded-[6px] border border-[var(--vk-red)]/35 bg-[var(--vk-red)]/10 px-3 py-3 text-[12px] leading-5 text-[var(--vk-red)]">
|
|
4669
|
+
{remoteAccessError}
|
|
4670
|
+
</div>
|
|
4671
|
+
) : (
|
|
4672
|
+
<>
|
|
4673
|
+
<div className="grid gap-3 lg:grid-cols-3">
|
|
4674
|
+
<div className="rounded-[6px] border border-[var(--vk-border)] px-4 py-3">
|
|
4675
|
+
<span className="text-[11px] uppercase tracking-[0.12em] text-[var(--vk-text-muted)]">
|
|
4676
|
+
Remote Status
|
|
4677
|
+
</span>
|
|
4678
|
+
<p className="mt-2 text-[14px] text-[var(--vk-text-normal)]">{remoteAccessStatusLabel}</p>
|
|
4679
|
+
</div>
|
|
4680
|
+
<div className="rounded-[6px] border border-[var(--vk-border)] px-4 py-3">
|
|
4681
|
+
<span className="text-[11px] uppercase tracking-[0.12em] text-[var(--vk-text-muted)]">
|
|
4682
|
+
Security Mode
|
|
4683
|
+
</span>
|
|
4684
|
+
<p className="mt-2 text-[14px] text-[var(--vk-text-normal)]">{remoteAccessModeLabel}</p>
|
|
4685
|
+
</div>
|
|
4686
|
+
<div className="rounded-[6px] border border-[var(--vk-border)] px-4 py-3">
|
|
4687
|
+
<span className="text-[11px] uppercase tracking-[0.12em] text-[var(--vk-text-muted)]">
|
|
4688
|
+
Local Target
|
|
4689
|
+
</span>
|
|
4690
|
+
<p className="mt-2 break-all text-[14px] text-[var(--vk-text-normal)]">
|
|
4691
|
+
{remoteAccessSettings.localUrl ?? "Not resolved"}
|
|
4692
|
+
</p>
|
|
4693
|
+
</div>
|
|
4694
|
+
<div className="rounded-[6px] border border-[var(--vk-border)] px-4 py-3">
|
|
4695
|
+
<span className="text-[11px] uppercase tracking-[0.12em] text-[var(--vk-text-muted)]">
|
|
4696
|
+
Remote URL
|
|
4697
|
+
</span>
|
|
4698
|
+
<p className="mt-2 break-all text-[14px] text-[var(--vk-text-normal)]">
|
|
4699
|
+
{remoteAccessSettings.publicUrl ?? "Not resolved"}
|
|
4700
|
+
</p>
|
|
4701
|
+
</div>
|
|
4702
|
+
</div>
|
|
4093
4703
|
|
|
4094
|
-
|
|
4095
|
-
|
|
4096
|
-
|
|
4097
|
-
|
|
4098
|
-
|
|
4099
|
-
|
|
4704
|
+
{showManagedTunnelControls ? (
|
|
4705
|
+
<div className="space-y-3 rounded-[6px] border border-[var(--vk-border)] px-4 py-4">
|
|
4706
|
+
<div className="flex flex-wrap items-start justify-between gap-3">
|
|
4707
|
+
<div className="space-y-1">
|
|
4708
|
+
<span className="text-[11px] uppercase tracking-[0.12em] text-[var(--vk-text-muted)]">
|
|
4709
|
+
{usingPrivateNetworkFlow ? "Private Network Link" : "Managed Remote Access"}
|
|
4710
|
+
</span>
|
|
4711
|
+
<p className="text-[13px] leading-5 text-[var(--vk-text-normal)]">
|
|
4712
|
+
{usingPrivateNetworkFlow
|
|
4713
|
+
? "Start a private Tailscale link inside Conductor. Only authenticated devices on your tailnet can reach this URL."
|
|
4714
|
+
: "Conductor no longer starts public share tunnels. Use a private Tailscale link here, or configure a protected Cloudflare Access URL separately."}
|
|
4715
|
+
</p>
|
|
4716
|
+
</div>
|
|
4717
|
+
<div className="flex flex-wrap gap-2">
|
|
4718
|
+
<button
|
|
4719
|
+
type="button"
|
|
4720
|
+
onClick={() => void mutateRemoteAccess("enable")}
|
|
4721
|
+
disabled={!remoteAccessCanEnable}
|
|
4722
|
+
className="inline-flex h-8 items-center rounded-[4px] border border-[var(--vk-orange)] px-3 text-[12px] text-[var(--vk-orange)] hover:bg-[var(--vk-orange)]/10 disabled:cursor-not-allowed disabled:opacity-50"
|
|
4723
|
+
>
|
|
4724
|
+
{remoteAccessMutating === "enable" ? "Enabling..." : remoteAccessEnableLabel}
|
|
4725
|
+
</button>
|
|
4726
|
+
<button
|
|
4727
|
+
type="button"
|
|
4728
|
+
onClick={() => void mutateRemoteAccess("disable")}
|
|
4729
|
+
disabled={!remoteAccessCanDisable}
|
|
4730
|
+
className="inline-flex h-8 items-center rounded-[4px] border border-[var(--vk-border)] px-3 text-[12px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)] disabled:cursor-not-allowed disabled:opacity-50"
|
|
4731
|
+
>
|
|
4732
|
+
{remoteAccessMutating === "disable" ? "Disabling..." : "Disable"}
|
|
4733
|
+
</button>
|
|
4734
|
+
</div>
|
|
4735
|
+
</div>
|
|
4100
4736
|
|
|
4101
|
-
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
|
|
4111
|
-
|
|
4112
|
-
|
|
4113
|
-
|
|
4114
|
-
|
|
4115
|
-
|
|
4116
|
-
|
|
4117
|
-
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
|
|
4122
|
-
|
|
4123
|
-
</button>
|
|
4124
|
-
);
|
|
4125
|
-
})}
|
|
4126
|
-
</div>
|
|
4127
|
-
</section>
|
|
4737
|
+
<p className="text-[12px] leading-5 text-[var(--vk-text-muted)]">
|
|
4738
|
+
{usingPrivateNetworkFlow
|
|
4739
|
+
? remoteAccessSettings.installed
|
|
4740
|
+
? "Tailscale is available on this machine. Conductor will publish a private HTTPS link inside your tailnet."
|
|
4741
|
+
: remoteAccessSettings.canAutoInstall && remoteAccessSettings.autoInstallMethod === "brew"
|
|
4742
|
+
? "Tailscale is not installed yet. Conductor can install it automatically with Homebrew, but the machine still needs a Tailscale sign-in."
|
|
4743
|
+
: "Tailscale is not installed on this machine yet. Install and sign in once to enable the private remote link."
|
|
4744
|
+
: "Managed remote access now uses only a private Tailscale link. For an enterprise public URL, configure Cloudflare Access separately and point Conductor at that protected address."}
|
|
4745
|
+
</p>
|
|
4746
|
+
</div>
|
|
4747
|
+
) : (
|
|
4748
|
+
<div className="rounded-[6px] border border-[var(--vk-border)] px-4 py-4">
|
|
4749
|
+
<span className="text-[11px] uppercase tracking-[0.12em] text-[var(--vk-text-muted)]">
|
|
4750
|
+
Enterprise Policy
|
|
4751
|
+
</span>
|
|
4752
|
+
<p className="mt-2 text-[13px] leading-5 text-[var(--vk-text-normal)]">
|
|
4753
|
+
{remoteAccessSettings.recommendedProvider === "tailscale"
|
|
4754
|
+
? "Conductor is set up for a private VPN-style link. Install and sign in to Tailscale, then enable the private link from this screen."
|
|
4755
|
+
: "Conductor no longer publishes bearer-style unlock URLs. Configure verified Cloudflare Access and point `CONDUCTOR_PUBLIC_DASHBOARD_URL` at the protected external URL instead."}
|
|
4756
|
+
</p>
|
|
4757
|
+
</div>
|
|
4758
|
+
)}
|
|
4128
4759
|
|
|
4129
|
-
|
|
4130
|
-
|
|
4131
|
-
|
|
4132
|
-
|
|
4133
|
-
|
|
4134
|
-
|
|
4135
|
-
|
|
4136
|
-
|
|
4137
|
-
|
|
4138
|
-
|
|
4139
|
-
onClick={() => {
|
|
4140
|
-
setSoundEnabled(true);
|
|
4141
|
-
setSoundFile(option.id);
|
|
4142
|
-
}}
|
|
4143
|
-
className={`flex items-center gap-2 rounded-[4px] border px-3 py-2 text-left ${
|
|
4144
|
-
selected
|
|
4145
|
-
? "border-[var(--vk-orange)] bg-[var(--vk-bg-hover)]"
|
|
4146
|
-
: "border-[var(--vk-border)] hover:bg-[var(--vk-bg-hover)]"
|
|
4147
|
-
}`}
|
|
4148
|
-
>
|
|
4149
|
-
<Volume2 className="h-4 w-4 text-[var(--vk-text-muted)]" />
|
|
4150
|
-
<span className="flex-1 text-[13px] text-[var(--vk-text-normal)]">{option.label}</span>
|
|
4151
|
-
{selected && <Check className="h-3.5 w-3.5 text-[var(--vk-orange)]" />}
|
|
4152
|
-
</button>
|
|
4153
|
-
);
|
|
4154
|
-
})}
|
|
4155
|
-
<button
|
|
4156
|
-
type="button"
|
|
4157
|
-
onClick={() => setSoundEnabled(false)}
|
|
4158
|
-
className={`flex items-center gap-2 rounded-[4px] border px-3 py-2 text-left ${
|
|
4159
|
-
!soundEnabled
|
|
4160
|
-
? "border-[var(--vk-orange)] bg-[var(--vk-bg-hover)]"
|
|
4161
|
-
: "border-[var(--vk-border)] hover:bg-[var(--vk-bg-hover)]"
|
|
4162
|
-
}`}
|
|
4163
|
-
>
|
|
4164
|
-
<VolumeX className="h-4 w-4 text-[var(--vk-text-muted)]" />
|
|
4165
|
-
<span className="flex-1 text-[13px] text-[var(--vk-text-normal)]">No sound</span>
|
|
4166
|
-
{!soundEnabled && <Check className="h-3.5 w-3.5 text-[var(--vk-orange)]" />}
|
|
4167
|
-
</button>
|
|
4168
|
-
</div>
|
|
4169
|
-
</section>
|
|
4170
|
-
</>
|
|
4171
|
-
)}
|
|
4760
|
+
{remoteAccessSettings.lastError && (
|
|
4761
|
+
<div className="rounded-[6px] border border-[var(--vk-red)]/35 bg-[var(--vk-red)]/10 px-4 py-3">
|
|
4762
|
+
<span className="text-[11px] uppercase tracking-[0.12em] text-[var(--vk-red)]">
|
|
4763
|
+
{usingPrivateNetworkFlow ? "Private Link Error" : "Tunnel Error"}
|
|
4764
|
+
</span>
|
|
4765
|
+
<p className="mt-2 text-[12px] leading-5 text-[var(--vk-red)]">
|
|
4766
|
+
{remoteAccessSettings.lastError}
|
|
4767
|
+
</p>
|
|
4768
|
+
</div>
|
|
4769
|
+
)}
|
|
4172
4770
|
|
|
4173
|
-
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
|
|
4178
|
-
|
|
4179
|
-
|
|
4180
|
-
|
|
4181
|
-
|
|
4771
|
+
{remoteAccessSettings.connectUrl ? (
|
|
4772
|
+
<div className="space-y-2 rounded-[6px] border border-[var(--vk-border)] px-4 py-4">
|
|
4773
|
+
<div className="flex flex-wrap items-start justify-between gap-2">
|
|
4774
|
+
<div className="space-y-1">
|
|
4775
|
+
<span className="text-[11px] uppercase tracking-[0.12em] text-[var(--vk-text-muted)]">
|
|
4776
|
+
{remoteAccessSettings.mode === "private-network"
|
|
4777
|
+
? "Private Remote URL"
|
|
4778
|
+
: "Protected Remote URL"}
|
|
4779
|
+
</span>
|
|
4780
|
+
<p className="text-[12px] text-[var(--vk-text-muted)]">
|
|
4781
|
+
{remoteAccessSettings.mode === "private-network"
|
|
4782
|
+
? "Share this URL only with operators who are already authenticated to your private network."
|
|
4783
|
+
: "Share this protected URL. Recipients still need to pass the enterprise identity check before they reach Conductor."}
|
|
4784
|
+
</p>
|
|
4785
|
+
</div>
|
|
4786
|
+
<CopySnippetButton value={remoteAccessSettings.connectUrl} idleLabel="Copy URL" />
|
|
4787
|
+
</div>
|
|
4788
|
+
<code className="block break-all rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-3 py-3 text-[12px] leading-5 text-[var(--vk-text-normal)]">
|
|
4789
|
+
{remoteAccessSettings.connectUrl}
|
|
4790
|
+
</code>
|
|
4791
|
+
</div>
|
|
4792
|
+
) : (
|
|
4793
|
+
<div className="rounded-[6px] border border-[var(--vk-border)] px-4 py-3">
|
|
4794
|
+
<p className="text-[13px] text-[var(--vk-text-normal)]">
|
|
4795
|
+
{remoteAccessSettings.mode === "enterprise-only"
|
|
4796
|
+
? remoteAccessSettings.recommendedProvider === "tailscale"
|
|
4797
|
+
? remoteAccessSettings.connected
|
|
4798
|
+
? "A private VPN URL will appear here after you enable the private link."
|
|
4799
|
+
: "A private VPN URL will appear here after Tailscale is installed and signed in."
|
|
4800
|
+
: "A protected enterprise remote URL will appear here after verified Cloudflare Access is configured."
|
|
4801
|
+
: "A protected remote URL is not available yet."}
|
|
4802
|
+
</p>
|
|
4803
|
+
</div>
|
|
4804
|
+
)}
|
|
4182
4805
|
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
|
|
4191
|
-
|
|
4192
|
-
|
|
4806
|
+
{remoteAccessSettings.warnings.length > 0 && (
|
|
4807
|
+
<div className="space-y-2 rounded-[6px] border border-[var(--vk-red)]/35 bg-[var(--vk-red)]/10 px-4 py-3">
|
|
4808
|
+
<span className="text-[11px] uppercase tracking-[0.12em] text-[var(--vk-red)]">
|
|
4809
|
+
Security Warnings
|
|
4810
|
+
</span>
|
|
4811
|
+
<div className="space-y-1.5">
|
|
4812
|
+
{remoteAccessSettings.warnings.map((warning) => (
|
|
4813
|
+
<p key={warning} className="text-[12px] leading-5 text-[var(--vk-red)]">
|
|
4814
|
+
{warning}
|
|
4815
|
+
</p>
|
|
4816
|
+
))}
|
|
4817
|
+
</div>
|
|
4818
|
+
</div>
|
|
4819
|
+
)}
|
|
4193
4820
|
|
|
4194
|
-
|
|
4195
|
-
|
|
4196
|
-
|
|
4197
|
-
|
|
4198
|
-
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
4821
|
+
{remoteAccessSettings.nextSteps.length > 0 && (
|
|
4822
|
+
<div className="space-y-2 rounded-[6px] border border-[var(--vk-border)] px-4 py-3">
|
|
4823
|
+
<span className="text-[11px] uppercase tracking-[0.12em] text-[var(--vk-text-muted)]">Next Steps</span>
|
|
4824
|
+
<div className="space-y-1.5">
|
|
4825
|
+
{remoteAccessSettings.nextSteps.map((step) => (
|
|
4826
|
+
<p key={step} className="text-[12px] leading-5 text-[var(--vk-text-muted)]">
|
|
4827
|
+
{step}
|
|
4828
|
+
</p>
|
|
4829
|
+
))}
|
|
4830
|
+
</div>
|
|
4831
|
+
</div>
|
|
4832
|
+
)}
|
|
4833
|
+
</>
|
|
4834
|
+
)}
|
|
4835
|
+
</section>
|
|
4204
4836
|
|
|
4205
|
-
|
|
4206
|
-
One-click remote open currently supports VS Code and VS Code Insiders. Other editors will still
|
|
4207
|
-
save as your preference, but they will not get a remote launch button yet.
|
|
4208
|
-
</p>
|
|
4209
|
-
</section>
|
|
4837
|
+
</div>
|
|
4210
4838
|
)}
|
|
4211
4839
|
</div>
|
|
4212
4840
|
) : isRepositoriesTab ? (
|
|
@@ -4357,6 +4985,24 @@ function SettingsDialog({
|
|
|
4357
4985
|
</div>
|
|
4358
4986
|
)}
|
|
4359
4987
|
|
|
4988
|
+
<label className="block">
|
|
4989
|
+
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">Agent Permission Default</span>
|
|
4990
|
+
<select
|
|
4991
|
+
value={repositoryDraft.agentPermissions}
|
|
4992
|
+
onChange={(event) => setRepositoryDraft((prev) => prev ? {
|
|
4993
|
+
...prev,
|
|
4994
|
+
agentPermissions: event.target.value === "default" ? "default" : "skip",
|
|
4995
|
+
} : prev)}
|
|
4996
|
+
className="h-9 w-full rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 text-[13px] text-[var(--vk-text-normal)] outline-none focus:border-[var(--vk-orange)]"
|
|
4997
|
+
>
|
|
4998
|
+
<option value="skip">Auto approve and allow local dev servers</option>
|
|
4999
|
+
<option value="default">Sandboxed default mode</option>
|
|
5000
|
+
</select>
|
|
5001
|
+
<p className="mt-1 text-[12px] text-[var(--vk-text-muted)]">
|
|
5002
|
+
Applies to new sessions for this repository across all agents unless you override the launch mode.
|
|
5003
|
+
</p>
|
|
5004
|
+
</label>
|
|
5005
|
+
|
|
4360
5006
|
<label className="block">
|
|
4361
5007
|
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">Repository Path</span>
|
|
4362
5008
|
<div className="flex items-center gap-2">
|
|
@@ -4482,9 +5128,78 @@ function SettingsDialog({
|
|
|
4482
5128
|
placeholder="npm run dev"
|
|
4483
5129
|
className="w-full rounded-[4px] border border-[var(--vk-border)] bg-transparent px-2 py-2 text-[13px] text-[var(--vk-text-normal)] outline-none focus:border-[var(--vk-orange)]"
|
|
4484
5130
|
/>
|
|
4485
|
-
<p className="mt-1 text-[12px] text-[var(--vk-text-muted)]">
|
|
5131
|
+
<p className="mt-1 text-[12px] text-[var(--vk-text-muted)]">
|
|
5132
|
+
Optional. Leave this blank if you run the local app yourself and only want Conductor to auto-connect the preview.
|
|
5133
|
+
</p>
|
|
4486
5134
|
</label>
|
|
4487
5135
|
|
|
5136
|
+
<div className="grid gap-3 sm:grid-cols-2">
|
|
5137
|
+
<label className="block">
|
|
5138
|
+
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">Dev Server CWD</span>
|
|
5139
|
+
<input
|
|
5140
|
+
value={repositoryDraft.devServerCwd}
|
|
5141
|
+
onChange={(event) => setRepositoryDraft((prev) => prev ? { ...prev, devServerCwd: event.target.value } : prev)}
|
|
5142
|
+
placeholder="e.g., apps/web"
|
|
5143
|
+
className="h-9 w-full rounded-[4px] border border-[var(--vk-border)] bg-transparent px-2 text-[13px] text-[var(--vk-text-normal)] outline-none focus:border-[var(--vk-orange)]"
|
|
5144
|
+
/>
|
|
5145
|
+
<p className="mt-1 text-[12px] text-[var(--vk-text-muted)]">Runs the dev server from this subdirectory when set.</p>
|
|
5146
|
+
</label>
|
|
5147
|
+
|
|
5148
|
+
<label className="block">
|
|
5149
|
+
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">Preview URL Override</span>
|
|
5150
|
+
<input
|
|
5151
|
+
value={repositoryDraft.devServerUrl}
|
|
5152
|
+
onChange={(event) => setRepositoryDraft((prev) => prev ? { ...prev, devServerUrl: event.target.value } : prev)}
|
|
5153
|
+
placeholder="e.g., https://preview.example.com"
|
|
5154
|
+
className="h-9 w-full rounded-[4px] border border-[var(--vk-border)] bg-transparent px-2 text-[13px] text-[var(--vk-text-normal)] outline-none focus:border-[var(--vk-orange)]"
|
|
5155
|
+
/>
|
|
5156
|
+
<p className="mt-1 text-[12px] text-[var(--vk-text-muted)]">If set, preview connects here first instead of inferring from logs.</p>
|
|
5157
|
+
</label>
|
|
5158
|
+
</div>
|
|
5159
|
+
|
|
5160
|
+
<div className="grid gap-3 sm:grid-cols-4">
|
|
5161
|
+
<label className="block">
|
|
5162
|
+
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">Preview Port</span>
|
|
5163
|
+
<input
|
|
5164
|
+
value={repositoryDraft.devServerPort}
|
|
5165
|
+
onChange={(event) => setRepositoryDraft((prev) => prev ? { ...prev, devServerPort: event.target.value } : prev)}
|
|
5166
|
+
inputMode="numeric"
|
|
5167
|
+
placeholder="3000"
|
|
5168
|
+
className="h-9 w-full rounded-[4px] border border-[var(--vk-border)] bg-transparent px-2 text-[13px] text-[var(--vk-text-normal)] outline-none focus:border-[var(--vk-orange)]"
|
|
5169
|
+
/>
|
|
5170
|
+
</label>
|
|
5171
|
+
|
|
5172
|
+
<label className="block">
|
|
5173
|
+
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">Preview Host</span>
|
|
5174
|
+
<input
|
|
5175
|
+
value={repositoryDraft.devServerHost}
|
|
5176
|
+
onChange={(event) => setRepositoryDraft((prev) => prev ? { ...prev, devServerHost: event.target.value } : prev)}
|
|
5177
|
+
placeholder="127.0.0.1"
|
|
5178
|
+
className="h-9 w-full rounded-[4px] border border-[var(--vk-border)] bg-transparent px-2 text-[13px] text-[var(--vk-text-normal)] outline-none focus:border-[var(--vk-orange)]"
|
|
5179
|
+
/>
|
|
5180
|
+
</label>
|
|
5181
|
+
|
|
5182
|
+
<label className="block">
|
|
5183
|
+
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">Preview Path</span>
|
|
5184
|
+
<input
|
|
5185
|
+
value={repositoryDraft.devServerPath}
|
|
5186
|
+
onChange={(event) => setRepositoryDraft((prev) => prev ? { ...prev, devServerPath: event.target.value } : prev)}
|
|
5187
|
+
placeholder="/"
|
|
5188
|
+
className="h-9 w-full rounded-[4px] border border-[var(--vk-border)] bg-transparent px-2 text-[13px] text-[var(--vk-text-normal)] outline-none focus:border-[var(--vk-orange)]"
|
|
5189
|
+
/>
|
|
5190
|
+
</label>
|
|
5191
|
+
|
|
5192
|
+
<label className="flex items-center gap-2 rounded-[4px] border border-[var(--vk-border)] px-3 py-2 text-[13px] text-[var(--vk-text-normal)]">
|
|
5193
|
+
<input
|
|
5194
|
+
type="checkbox"
|
|
5195
|
+
checked={repositoryDraft.devServerHttps}
|
|
5196
|
+
onChange={(event) => setRepositoryDraft((prev) => prev ? { ...prev, devServerHttps: event.target.checked } : prev)}
|
|
5197
|
+
className="h-4 w-4 rounded border border-[var(--vk-border)] bg-transparent accent-[var(--vk-orange)]"
|
|
5198
|
+
/>
|
|
5199
|
+
<span>Use HTTPS</span>
|
|
5200
|
+
</label>
|
|
5201
|
+
</div>
|
|
5202
|
+
|
|
4488
5203
|
<label className="block">
|
|
4489
5204
|
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">Setup Script</span>
|
|
4490
5205
|
<textarea
|
|
@@ -4597,8 +5312,7 @@ function SettingsDialog({
|
|
|
4597
5312
|
<section className="rounded-[6px] border border-[var(--vk-border)] bg-[rgba(80,80,80,0.18)] px-4 py-3">
|
|
4598
5313
|
<p className="text-[12px] leading-5 text-[var(--vk-text-muted)]">
|
|
4599
5314
|
You can review organization security here, but only an admin session can save changes.
|
|
4600
|
-
Use
|
|
4601
|
-
auth provider to modify access rules.
|
|
5315
|
+
Use a local admin session or an admin identity from your edge auth provider to modify access rules.
|
|
4602
5316
|
</p>
|
|
4603
5317
|
</section>
|
|
4604
5318
|
)}
|
|
@@ -4607,8 +5321,9 @@ function SettingsDialog({
|
|
|
4607
5321
|
<div className="space-y-1">
|
|
4608
5322
|
<h5 className="text-[18px] leading-[20px] text-[var(--vk-text-strong)]">Baseline Access Rules</h5>
|
|
4609
5323
|
<p className="text-[12px] text-[var(--vk-text-muted)]">
|
|
4610
|
-
Require authentication for
|
|
4611
|
-
by default before explicit role bindings are applied.
|
|
5324
|
+
Require authentication for remote dashboard requests and decide what authenticated users get
|
|
5325
|
+
by default before explicit role bindings are applied. Localhost on this machine stays in a
|
|
5326
|
+
local admin recovery mode so setup and break-glass access keep working.
|
|
4612
5327
|
</p>
|
|
4613
5328
|
</div>
|
|
4614
5329
|
|
|
@@ -4620,12 +5335,17 @@ function SettingsDialog({
|
|
|
4620
5335
|
...prev,
|
|
4621
5336
|
requireAuth: event.target.checked,
|
|
4622
5337
|
}))}
|
|
4623
|
-
disabled={!accessCanEdit || accessSaving}
|
|
5338
|
+
disabled={!accessCanEdit || accessSaving || accessSettings.trustedHeaders.enabled}
|
|
4624
5339
|
className="mt-0.5 h-4 w-4 rounded border border-[var(--vk-border)] bg-transparent accent-[var(--vk-orange)]"
|
|
4625
5340
|
/>
|
|
4626
|
-
<span>Require authentication
|
|
5341
|
+
<span>Require authentication for remote dashboard requests</span>
|
|
4627
5342
|
</label>
|
|
4628
5343
|
|
|
5344
|
+
<p className="rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-3 py-2 text-[12px] leading-5 text-[var(--vk-text-muted)]">
|
|
5345
|
+
Public share-link remote control has been removed. Remote access now requires either the private
|
|
5346
|
+
Tailscale link or an identity-bound provider such as Cloudflare Access or Clerk.
|
|
5347
|
+
</p>
|
|
5348
|
+
|
|
4629
5349
|
<label className="block">
|
|
4630
5350
|
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">Default Role</span>
|
|
4631
5351
|
<select
|
|
@@ -4643,6 +5363,7 @@ function SettingsDialog({
|
|
|
4643
5363
|
</select>
|
|
4644
5364
|
<p className="mt-1 text-[12px] text-[var(--vk-text-muted)]">
|
|
4645
5365
|
This applies after identity verification when no explicit email or domain binding matches.
|
|
5366
|
+
Cloudflare Access enterprise mode forces full authentication automatically.
|
|
4646
5367
|
</p>
|
|
4647
5368
|
</label>
|
|
4648
5369
|
</section>
|
|
@@ -4662,6 +5383,7 @@ function SettingsDialog({
|
|
|
4662
5383
|
checked={accessSettings.trustedHeaders.enabled}
|
|
4663
5384
|
onChange={(event) => setAccessSettings((prev) => ({
|
|
4664
5385
|
...prev,
|
|
5386
|
+
requireAuth: event.target.checked ? true : prev.requireAuth,
|
|
4665
5387
|
trustedHeaders: {
|
|
4666
5388
|
...prev.trustedHeaders,
|
|
4667
5389
|
enabled: event.target.checked,
|
|
@@ -4676,21 +5398,9 @@ function SettingsDialog({
|
|
|
4676
5398
|
<div className="grid gap-3 lg:grid-cols-2">
|
|
4677
5399
|
<label className="block">
|
|
4678
5400
|
<span className="mb-1.5 block text-[12px] font-medium text-[var(--vk-text-normal)]">Provider</span>
|
|
4679
|
-
<
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
...prev,
|
|
4683
|
-
trustedHeaders: {
|
|
4684
|
-
...prev.trustedHeaders,
|
|
4685
|
-
provider: event.target.value as TrustedHeaderAccessProvider,
|
|
4686
|
-
},
|
|
4687
|
-
}))}
|
|
4688
|
-
disabled={!accessCanEdit || accessSaving}
|
|
4689
|
-
className="h-9 w-full rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 text-[13px] text-[var(--vk-text-normal)] outline-none focus:border-[var(--vk-orange)] disabled:opacity-60"
|
|
4690
|
-
>
|
|
4691
|
-
<option value="cloudflare-access">Cloudflare Access (verified JWT)</option>
|
|
4692
|
-
<option value="generic">Generic header passthrough (advanced)</option>
|
|
4693
|
-
</select>
|
|
5401
|
+
<div className="flex h-9 items-center rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2 text-[13px] text-[var(--vk-text-normal)]">
|
|
5402
|
+
Cloudflare Access (verified JWT)
|
|
5403
|
+
</div>
|
|
4694
5404
|
</label>
|
|
4695
5405
|
|
|
4696
5406
|
<label className="block">
|
|
@@ -4760,13 +5470,11 @@ function SettingsDialog({
|
|
|
4760
5470
|
</label>
|
|
4761
5471
|
</div>
|
|
4762
5472
|
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4766
|
-
|
|
4767
|
-
|
|
4768
|
-
</p>
|
|
4769
|
-
)}
|
|
5473
|
+
<p className="rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-3 py-2 text-[12px] leading-5 text-[var(--vk-text-muted)]">
|
|
5474
|
+
Enterprise remote access requires a Cloudflare Access application that injects a verified JWT
|
|
5475
|
+
and email header. Conductor will not publish a shareable admin URL when that verification layer
|
|
5476
|
+
is missing.
|
|
5477
|
+
</p>
|
|
4770
5478
|
</section>
|
|
4771
5479
|
|
|
4772
5480
|
<section className="space-y-3 rounded-[6px] border border-[var(--vk-border)] px-4 py-4">
|
|
@@ -4976,6 +5684,18 @@ function SettingsDialog({
|
|
|
4976
5684
|
void detectRepositoryBranches(selectedPath);
|
|
4977
5685
|
}}
|
|
4978
5686
|
/>
|
|
5687
|
+
<FolderPickerDialog
|
|
5688
|
+
open={notesFolderPickerOpen}
|
|
5689
|
+
initialPath={markdownEditorPath ?? ""}
|
|
5690
|
+
title="Select Notes Root"
|
|
5691
|
+
description="Choose the local Obsidian vault, Logseq graph, or markdown notes folder used for context attachments."
|
|
5692
|
+
onClose={() => setNotesFolderPickerOpen(false)}
|
|
5693
|
+
onSelect={(selectedPath) => {
|
|
5694
|
+
setNotesFolderPickerOpen(false);
|
|
5695
|
+
if (selectedPath === null) return;
|
|
5696
|
+
setMarkdownEditorPath(selectedPath);
|
|
5697
|
+
}}
|
|
5698
|
+
/>
|
|
4979
5699
|
</>
|
|
4980
5700
|
);
|
|
4981
5701
|
}
|