@aiworker/web 1.22.0 → 1.23.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 +4 -4
- package/bin/cli.js +14 -4
- package/bin/cli.test.js +165 -73
- package/bin/lib/cli-api-target.js +2 -2
- package/bin/lib/cli-args.js +119 -119
- package/bin/lib/cli-lifecycle.js +9 -9
- package/bin/lib/cli-network.js +3 -3
- package/bin/lib/cli-paths.js +3 -3
- package/bin/lib/cli-ports.js +2 -2
- package/bin/lib/cli-process.js +4 -4
- package/bin/lib/cli-startup.js +64 -15
- package/bin/lib/cli-tunnel-profiles.js +1 -1
- package/bin/lib/cli-tunnel-utils.js +2 -2
- package/bin/lib/commands-connect-url.js +19 -19
- package/bin/lib/commands-lifecycle.js +27 -27
- package/bin/lib/commands-logs.js +5 -5
- package/bin/lib/commands-models.js +1 -1
- package/bin/lib/commands-projects.js +1 -1
- package/bin/lib/commands-schedule.js +1 -1
- package/bin/lib/commands-serve.js +29 -29
- package/bin/lib/commands-session.js +1 -1
- package/bin/lib/commands-startup.js +45 -10
- package/bin/lib/commands-status.js +1 -1
- package/bin/lib/commands-tunnel.js +40 -40
- package/bin/lib/commands-update.js +1 -1
- package/bin/lib/commands-update.test.js +6 -6
- package/dist/assets/{CodeMirrorCommentWidgets-B3u7UIcE.js → CodeMirrorCommentWidgets-B1Gizi3a.js} +1 -1
- package/dist/assets/DiffView-DXjVsEOw.js +4 -0
- package/dist/assets/DirtyBranchSwitchDialog-aig6zJjg.js +1 -0
- package/dist/assets/FilesView-CJdG0-wk.js +17 -0
- package/dist/assets/GitView-BXsS3jG6.js +6 -0
- package/dist/assets/{JsonTreeView-B0BdZEHG.js → JsonTreeView-D_hpXBnF.js} +1 -1
- package/dist/assets/LinearIssuesView-BoUiLQG1.js +1 -0
- package/dist/assets/MarkdownImageGallery-B_B_a9KS.js +1 -0
- package/dist/assets/MarkdownRendererImpl-xgyyLiBM.js +12 -0
- package/dist/assets/OnboardingScreen-DIp84OWt.js +1 -0
- package/dist/assets/{PatchDiff-DvfqDql7.js → PatchDiff-8p6nLJaU.js} +1 -1
- package/dist/assets/PierreDiffViewer-DjC8nTk9.js +161 -0
- package/dist/assets/PlanView-CJTmOF6I.js +5 -0
- package/dist/assets/SettingsView-DD-JqIJx.js +28 -0
- package/dist/assets/{SettingsWindow-i45U1Cy1.js → SettingsWindow-Cpb4hM6q.js} +1 -1
- package/dist/assets/SymbolsNerdFontMono-Regular-aK5vsLov.woff2 +0 -0
- package/dist/assets/{ToolOutputDialog-BTwyh5OF.js → ToolOutputDialog-DfaKZXNU.js} +6 -6
- package/dist/assets/ToolPartDiffPreview-DtZLzrSK.js +8 -0
- package/dist/assets/{VirtualizedFileDiff-DD8lDVej.js → VirtualizedFileDiff-C8i9HpTB.js} +1 -1
- package/dist/assets/WalkthroughView-DeKMvZlL.js +4 -0
- package/dist/assets/{computeVirtualFileMetrics-BMIRgMHv.js → computeVirtualFileMetrics-BBI7ZwrC.js} +2 -2
- package/dist/assets/contextPanelEmbeddedChat-BdA6bdky.js +1 -0
- package/dist/assets/de-DCrsQ5zS.js +10 -0
- package/dist/assets/es-Dwv4YfH6.js +16 -0
- package/dist/assets/fr-BCWg4Cnx.js +14 -0
- package/dist/assets/ghostty-vt-DdA0Zryv.wasm +0 -0
- package/dist/assets/index-B68h5S5B.css +1 -0
- package/dist/assets/index-DVwMarHI.js +39 -0
- package/dist/assets/{index-CODwDsU_.js → index-jXSK5RrB.js} +1 -1
- package/dist/assets/{isDiffPlainText-BqayB8d3.js → isDiffPlainText-B_x_rVon.js} +1 -1
- package/dist/assets/{isFilePlainText-QfoiKJNY.js → isFilePlainText-DW_xMer1.js} +1 -1
- package/dist/assets/ja-Bruw3RYC.js +16 -0
- package/dist/assets/ko-idhXGF8j.js +16 -0
- package/dist/assets/main-BkyaQhJX.js +930 -0
- package/dist/assets/{main-C5DVOxc6.js → main-CzdPuL0s.js} +2 -2
- package/dist/assets/markdownCore-Cn4Tyejo.js +5 -0
- package/dist/assets/{miniChat-DUJ4irZc.js → miniChat-CCkqKOLp.js} +2 -2
- package/dist/assets/{mobile-CcaxB0n4.js → mobile-mvxTo055.js} +2 -2
- package/dist/assets/patchFileDiff-Csk4iNUi.js +13 -0
- package/dist/assets/pl-CGZWUqZJ.js +16 -0
- package/dist/assets/pt-BR-B8V7u7tA.js +16 -0
- package/dist/assets/renderElectronMiniChatApp-BxoyujA5.js +2 -0
- package/dist/assets/renderMobileApp-B48CsP4r.js +25 -0
- package/dist/assets/runtimeEndpointReset-Bg5gx18H.js +17 -0
- package/dist/assets/scheduledTasksApi-BW0Etzwz.js +1 -0
- package/dist/assets/{shikiHighlight-DYOWuY65.js → shikiHighlight-CRl0SUC9.js} +1 -1
- package/dist/assets/surface-oMvhsog3.js +1 -0
- package/dist/assets/tr-BK_KiO2V.js +7 -0
- package/dist/assets/uk-CG74xV8N.js +16 -0
- package/dist/assets/useAppFontEffects-CPKeOpUo.js +7284 -0
- package/dist/assets/useGitComparison-DH220WmO.js +1 -0
- package/dist/assets/useInlineCommentController-BiWz4AVb.js +2 -0
- package/dist/assets/useRootScrollLock-BS4-kr7P.js +1 -0
- package/dist/assets/{vendor-base-ui-BeMD8X_w.js → vendor-base-ui-DdV8vhHn.js} +1 -1
- package/dist/assets/{vendor-codemirror-language-data-DFZik9R2.js → vendor-codemirror-language-data-Bg4AEeCr.js} +2 -2
- package/dist/assets/vendor-zod-BPAANqvH.js +39 -0
- package/dist/assets/{web-components-Bhg83tjf.js → web-components-z7hfnS8n.js} +1 -1
- package/dist/assets/zh-CN-T4AXofZI.js +16 -0
- package/dist/assets/zh-TW-Dte40sxp.js +16 -0
- package/dist/index.html +21 -59
- package/dist/mini-chat.html +7 -7
- package/dist/mobile.html +5 -5
- package/package.json +3 -4
- package/server/index.d.ts +15 -0
- package/server/index.js +158 -89
- package/server/lib/agent-memory/actions.js +2 -2
- package/server/lib/agent-memory/feature-flag.js +1 -1
- package/server/lib/agent-memory/feature-flag.test.js +8 -8
- package/server/lib/agent-memory/routes.js +2 -2
- package/server/lib/agent-tool/runtime.js +37 -54
- package/server/lib/agent-tool/runtime.test.js +59 -59
- package/server/lib/browser-control/broker.js +3 -3
- package/server/lib/browser-control/broker.test.js +1 -1
- package/server/lib/changelog/update-notes.js +82 -0
- package/server/lib/changelog/update-notes.test.js +59 -0
- package/server/lib/client-auth/remote-clients.test.js +5 -5
- package/server/lib/context-obligatory/runtime.js +7 -7
- package/server/lib/context-obligatory/runtime.test.js +5 -5
- package/server/lib/data-dir-migration.js +40 -0
- package/server/lib/data-dir-migration.test.js +59 -0
- package/server/lib/dev-servers/parse.js +2 -2
- package/server/lib/dev-servers/parse.test.js +2 -2
- package/server/lib/dev-servers/routes.js +1 -1
- package/server/lib/dev-tunnel/DOCUMENTATION.md +13 -4
- package/server/lib/dev-tunnel/client.js +1 -1
- package/server/lib/dev-tunnel/runtime.js +5 -5
- package/server/lib/dev-tunnel/tunnel.test.js +21 -1
- package/server/lib/dictation/local/model-catalog.js +1 -1
- package/server/lib/dictation/local/worker-process.js +2 -2
- package/server/lib/event-stream/directory-ws-bridge.js +1 -1
- package/server/lib/event-stream/global-ws-bridge.js +1 -1
- package/server/lib/event-stream/protocol.test.js +4 -4
- package/server/lib/event-stream/runtime.test.js +18 -18
- package/server/lib/fs/DOCUMENTATION.md +5 -0
- package/server/lib/fs/routes.js +68 -26
- package/server/lib/fs/routes.test.js +208 -22
- package/server/lib/git/DOCUMENTATION.md +32 -6
- package/server/lib/git/identity-storage.js +1 -1
- package/server/lib/git/issue-2746-longpaths.test.js +4 -4
- package/server/lib/git/routes.js +41 -5
- package/server/lib/git/service.js +300 -224
- package/server/lib/git/service.test.js +596 -28
- package/server/lib/github/auth.js +8 -8
- package/server/lib/github/pr-status.js +1 -1
- package/server/lib/github/routes.js +2 -2
- package/server/lib/inherited-env.js +17 -10
- package/server/lib/inherited-env.test.js +10 -11
- package/server/lib/linear/auth.js +8 -8
- package/server/lib/linear/auth.test.js +24 -24
- package/server/lib/linear/issues.test.js +6 -6
- package/server/lib/linear/mapping.test.js +4 -4
- package/server/lib/linear/oauth.js +2 -2
- package/server/lib/linear/oauth.test.js +14 -14
- package/server/lib/linear/routes.js +5 -5
- package/server/lib/linear/routes.test.js +16 -16
- package/server/lib/linear/status-runtime.test.js +9 -9
- package/server/lib/linear/status.js +1 -1
- package/server/lib/linear/status.test.js +15 -15
- package/server/lib/linear/teams.test.js +4 -4
- package/server/lib/magic-prompts/routes.js +2 -2
- package/server/lib/mcp-reconnect/DOCUMENTATION.md +55 -0
- package/server/lib/mcp-reconnect/runtime.js +122 -0
- package/server/lib/mcp-reconnect/runtime.test.js +140 -0
- package/server/lib/message-queue/DOCUMENTATION.md +161 -0
- package/server/lib/message-queue/runtime.js +870 -0
- package/server/lib/message-queue/runtime.test.js +482 -0
- package/server/lib/network-defaults.js +23 -0
- package/server/lib/network-defaults.test.js +52 -0
- package/server/lib/notifications/apns-runtime.js +17 -17
- package/server/lib/notifications/apns-runtime.test.js +11 -11
- package/server/lib/notifications/emitter-runtime.js +1 -1
- package/server/lib/notifications/emitter-runtime.test.js +1 -1
- package/server/lib/notifications/push-runtime.js +7 -7
- package/server/lib/notifications/routes.js +1 -1
- package/server/lib/notifications/runtime.js +1 -1
- package/server/lib/openchamber-control/action-resolution.test.js +10 -10
- package/server/lib/openchamber-control/actions.js +24 -24
- package/server/lib/openchamber-control/error.js +4 -4
- package/server/lib/openchamber-control/routes.js +2 -2
- package/server/lib/openchamber-control/routes.test.js +5 -5
- package/server/lib/openchamber-control/screenshots.js +1 -1
- package/server/lib/openchamber-control/screenshots.test.js +1 -1
- package/server/lib/openchamber-control/service.js +50 -50
- package/server/lib/openchamber-control/service.test.js +5 -5
- package/server/lib/openchamber-sessions/routes.js +124 -22
- package/server/lib/openchamber-sessions/routes.test.js +99 -11
- package/server/lib/opencode/DOCUMENTATION.md +30 -6
- package/server/lib/opencode/auth.js +1 -1
- package/server/lib/opencode/bootstrap-runtime.js +8 -6
- package/server/lib/opencode/cli-options.js +8 -8
- package/server/lib/opencode/config-paths.test.js +116 -0
- package/server/lib/opencode/core-routes.js +8 -7
- package/server/lib/opencode/core-routes.test.js +11 -11
- package/server/lib/opencode/env-config.js +5 -5
- package/server/lib/opencode/env-config.test.js +7 -7
- package/server/lib/opencode/env-runtime.js +10 -10
- package/server/lib/opencode/env-runtime.test.js +18 -18
- package/server/lib/opencode/feature-routes-runtime.js +19 -12
- package/server/lib/opencode/hmr-state-runtime.js +2 -2
- package/server/lib/opencode/hmr-state-runtime.test.js +1 -1
- package/server/lib/opencode/input-history-scope.js +14 -0
- package/server/lib/opencode/lifecycle.js +8 -8
- package/server/lib/opencode/lifecycle.test.js +4 -4
- package/server/lib/opencode/managed-plugin-config.js +35 -0
- package/server/lib/opencode/managed-process-registry.js +3 -3
- package/server/lib/opencode/mcp-oauth-callback.test.js +2 -2
- package/server/lib/opencode/openchamber-routes.js +79 -19
- package/server/lib/opencode/openchamber-routes.test.js +139 -12
- package/server/lib/opencode/plugins.js +2 -2
- package/server/lib/opencode/plugins.test.js +1 -1
- package/server/lib/opencode/project-icon-routes.js +2 -2
- package/server/lib/opencode/project-icon-routes.test.js +1 -1
- package/server/lib/opencode/providers.js +44 -2
- package/server/lib/opencode/providers.test.js +131 -4
- package/server/lib/opencode/proxy.js +2 -2
- package/server/lib/opencode/pwa-manifest-routes.js +1 -1
- package/server/lib/opencode/restart-session-recovery.test.js +1 -1
- package/server/lib/opencode/routes-upgrade.test.js +4 -4
- package/server/lib/opencode/routes.js +19 -17
- package/server/lib/opencode/server-startup-runtime.js +6 -6
- package/server/lib/opencode/session-runtime.js +3 -3
- package/server/lib/opencode/session-runtime.test.js +6 -6
- package/server/lib/opencode/settings-files.js +214 -0
- package/server/lib/opencode/settings-helpers.js +116 -44
- package/server/lib/opencode/settings-helpers.test.js +354 -12
- package/server/lib/opencode/settings-registry.json +747 -0
- package/server/lib/opencode/settings-runtime.js +141 -20
- package/server/lib/opencode/settings-runtime.test.js +191 -4
- package/server/lib/opencode/shared.js +5 -2
- package/server/lib/opencode/shared.test.js +7 -7
- package/server/lib/opencode/shutdown-runtime.js +2 -0
- package/server/lib/opencode/skill-routes.js +2 -1
- package/server/lib/opencode/snippets.js +1 -2
- package/server/lib/opencode/startup-performance.js +1 -1
- package/server/lib/opencode/startup-performance.test.js +6 -6
- package/server/lib/opencode/static-routes-runtime.js +8 -8
- package/server/lib/opencode/static-routes-runtime.test.js +7 -7
- package/server/lib/opencode/upgrade-capability.js +2 -2
- package/server/lib/opencode/upgrade-capability.test.js +3 -3
- package/server/lib/package-manager.js +17 -42
- package/server/lib/package-manager.test.js +19 -19
- package/server/lib/permission-auto-accept/runtime.js +1 -1
- package/server/lib/project-context/DOCUMENTATION.md +25 -1
- package/server/lib/project-context/routes.http.test.js +18 -0
- package/server/lib/project-context/routes.js +16 -1
- package/server/lib/project-context/runtime.js +248 -23
- package/server/lib/project-context/runtime.test.js +106 -3
- package/server/lib/projects/DOCUMENTATION.md +76 -0
- package/server/lib/projects/project-config.js +144 -11
- package/server/lib/projects/project-id.js +17 -0
- package/server/lib/projects/project-setup.js +409 -0
- package/server/lib/projects/project-setup.test.js +557 -0
- package/server/lib/projects/routes.js +59 -0
- package/server/lib/quota/DOCUMENTATION.md +40 -2
- package/server/lib/quota/credentials/providers.js +4 -0
- package/server/lib/quota/credentials/store.js +4 -4
- package/server/lib/quota/credentials/store.test.js +8 -8
- package/server/lib/quota/index.js +1 -0
- package/server/lib/quota/providers/cline-pass.js +125 -0
- package/server/lib/quota/providers/cline-pass.test.js +103 -0
- package/server/lib/quota/providers/exe-dev.js +75 -0
- package/server/lib/quota/providers/exe-dev.test.js +47 -0
- package/server/lib/quota/providers/hyper.js +118 -0
- package/server/lib/quota/providers/hyper.test.js +126 -0
- package/server/lib/quota/providers/index.js +22 -0
- package/server/lib/quota/providers/neuralwatt.js +3 -6
- package/server/lib/quota/providers/neuralwatt.test.js +7 -7
- package/server/lib/quota/providers/ollama-cloud.js +32 -1
- package/server/lib/quota/providers/ollama-cloud.test.js +33 -1
- package/server/lib/quota/providers/opencode-go.js +3 -2
- package/server/lib/quota/providers/opencode-go.test.js +35 -6
- package/server/lib/quota/providers/openrouter.js +119 -24
- package/server/lib/quota/providers/openrouter.test.js +330 -0
- package/server/lib/quota/providers/xai.js +1 -1
- package/server/lib/quota/routes.js +2 -0
- package/server/lib/quota/utils/auth.js +1 -1
- package/server/lib/relay/DOCUMENTATION.md +56 -1
- package/server/lib/relay/cross-compat.test.js +26 -0
- package/server/lib/relay/downstream-scheduler.js +154 -0
- package/server/lib/relay/downstream-scheduler.test.js +162 -0
- package/server/lib/relay/e2ee.js +10 -8
- package/server/lib/relay/flow-control.test.js +177 -0
- package/server/lib/relay/host-client.js +38 -9
- package/server/lib/relay/host-client.test.js +9 -1
- package/server/lib/relay/host-lock.js +1 -1
- package/server/lib/relay/service.js +5 -5
- package/server/lib/relay/tunnel-codec.js +9 -0
- package/server/lib/relay/tunnel-host.js +69 -18
- package/server/lib/relay/tunnel-host.test.js +9 -1
- package/server/lib/scheduled-tasks/issue-2710-double-execution.test.js +2 -2
- package/server/lib/scheduled-tasks/routes.js +5 -5
- package/server/lib/scheduled-tasks/service.js +25 -25
- package/server/lib/scheduled-tasks/service.test.js +1 -1
- package/server/lib/security/bind-host.js +4 -4
- package/server/lib/security/bind-host.test.js +1 -1
- package/server/lib/security/request-security.js +11 -5
- package/server/lib/security/request-security.test.js +14 -14
- package/server/lib/session-assist/runtime.js +15 -18
- package/server/lib/session-folders/routes.js +2 -2
- package/server/lib/session-folders/routes.test.js +8 -8
- package/server/lib/session-goal/DOCUMENTATION.md +20 -7
- package/server/lib/session-goal/create.js +4 -2
- package/server/lib/session-goal/create.test.js +1 -1
- package/server/lib/session-goal/objectives.js +4 -4
- package/server/lib/session-goal/routes.js +1 -1
- package/server/lib/session-goal/runtime.js +91 -30
- package/server/lib/session-goal/runtime.test.js +428 -2
- package/server/lib/session-knowledge/runtime.js +11 -11
- package/server/lib/session-knowledge/runtime.test.js +5 -5
- package/server/lib/skills-catalog/DOCUMENTATION.md +1 -1
- package/server/lib/skills-catalog/cache.test.js +2 -2
- package/server/lib/skills-catalog/disk-cache.js +5 -5
- package/server/lib/skills-catalog/github-meta.test.js +2 -2
- package/server/lib/skills-catalog/install.js +3 -2
- package/server/lib/small-model/DOCUMENTATION.md +7 -2
- package/server/lib/small-model/call.js +18 -7
- package/server/lib/small-model/call.test.js +58 -6
- package/server/lib/small-model/index.js +12 -16
- package/server/lib/small-model/index.test.js +1 -1
- package/server/lib/small-model/resolve.js +1 -1
- package/server/lib/small-model/resolve.test.js +1 -1
- package/server/lib/small-model/routes.js +2 -1
- package/server/lib/small-model/runtime-providers.js +15 -7
- package/server/lib/small-model/runtime-providers.test.js +7 -1
- package/server/lib/system-prompt/runtime.js +3 -22
- package/server/lib/system-prompt/runtime.test.js +3 -3
- package/server/lib/terminal/DOCUMENTATION.md +14 -10
- package/server/lib/terminal/runtime.js +190 -31
- package/server/lib/terminal/runtime.test.js +572 -38
- package/server/lib/terminal/shells.js +20 -3
- package/server/lib/terminal/shells.test.js +33 -2
- package/server/lib/tts/base-url.js +3 -3
- package/server/lib/tts/routes.test.js +20 -20
- package/server/lib/ui-auth/ui-auth.js +12 -9
- package/server/lib/ui-auth/ui-auth.test.js +19 -3
- package/server/lib/ui-auth/ui-passkeys.js +7 -7
- package/server/lib/walkthrough/DOCUMENTATION.md +33 -14
- package/server/lib/walkthrough/index.js +1 -0
- package/server/lib/walkthrough/jobs.test.js +1 -1
- package/server/lib/walkthrough/language.test.js +1 -1
- package/server/lib/walkthrough/model-settings.js +11 -15
- package/server/lib/walkthrough/model-settings.test.js +1 -1
- package/server/lib/walkthrough/prompt.js +3 -1
- package/server/lib/walkthrough/pull-request.test.js +5 -5
- package/server/lib/walkthrough/reproduce-2607.test.js +2 -2
- package/server/lib/walkthrough/routes.test.js +26 -5
- package/server/lib/walkthrough/sources.js +23 -2
- package/server/lib/walkthrough/store.js +3 -3
- package/server/lib/walkthrough/store.test.js +1 -1
- package/server/opencode-proxy.test.js +2 -2
- package/server/proxy-headers.js +1 -1
- package/server/sse-routes.test.js +4 -4
- package/README.md.bak +0 -250
- package/bin/lib/DOCUMENTATION.md.bak +0 -163
- package/dist/assets/CommitSection-SGBCAW0w.js +0 -1
- package/dist/assets/DiffView-DluiRSla.js +0 -4
- package/dist/assets/FilesView-Bdq8ppva.js +0 -17
- package/dist/assets/GitView-Znn7VJcP.js +0 -6
- package/dist/assets/LinearIssuesView-jP-hXyac.js +0 -1
- package/dist/assets/MarkdownImageGallery-ClOvuZxC.js +0 -1
- package/dist/assets/MarkdownRendererImpl-Dt9mjTRN.js +0 -12
- package/dist/assets/OnboardingScreen-D2DG7K6b.js +0 -1
- package/dist/assets/PierreDiffViewer-B7m3f0d7.js +0 -157
- package/dist/assets/PlanView-B0F3BtPZ.js +0 -5
- package/dist/assets/SettingsView-BBW-S-gh.js +0 -28
- package/dist/assets/ToolPartDiffPreview-CUNe28U1.js +0 -8
- package/dist/assets/WalkthroughView-egQgxel3.js +0 -4
- package/dist/assets/contextPanelEmbeddedChat-C3fjDbdg.js +0 -1
- package/dist/assets/de-C1P6X5Rs.js +0 -9
- package/dist/assets/es-CDgaF1_t.js +0 -15
- package/dist/assets/fr-Bgxqvvz_.js +0 -13
- package/dist/assets/index-C57jT0Sa.css +0 -1
- package/dist/assets/index-DW_E3rnL.js +0 -7
- package/dist/assets/ja-BDRrEcNP.js +0 -15
- package/dist/assets/ko-Ba8sQV79.js +0 -15
- package/dist/assets/main-Bv5Pkngh.js +0 -928
- package/dist/assets/markdownCore-CZwzz5gw.js +0 -3
- package/dist/assets/patchFileDiff-yNfWXN4E.js +0 -10
- package/dist/assets/pl-Dioz29BI.js +0 -15
- package/dist/assets/pt-BR-DIs6ElwV.js +0 -15
- package/dist/assets/renderElectronMiniChatApp-BcKLHXKe.js +0 -2
- package/dist/assets/renderMobileApp-D9yQJy0L.js +0 -25
- package/dist/assets/runtimeEndpointReset-CjhvxLH0.js +0 -16
- package/dist/assets/scheduledTasksApi-DLW0mkQK.js +0 -1
- package/dist/assets/tr-DFnMlPxY.js +0 -6
- package/dist/assets/uk-ZrCNjM7Y.js +0 -15
- package/dist/assets/useAppFontEffects-CjrntdL0.js +0 -7310
- package/dist/assets/useInlineCommentController-CDEuSlPH.js +0 -2
- package/dist/assets/useRootScrollLock-BHYPkrLv.js +0 -1
- package/dist/assets/vendor-ghostty-web-CrxinGGH.js +0 -13
- package/dist/assets/vendor-zod-BLfBSgBh.js +0 -39
- package/dist/assets/zh-CN-iv_AV4EC.js +0 -15
- package/dist/assets/zh-TW-CzEUk38j.js +0 -15
- package/server/index.d.ts.bak +0 -39
- package/server/lib/agent-tool/DOCUMENTATION.md.bak +0 -119
- package/server/lib/browser-control/DOCUMENTATION.md.bak +0 -50
- package/server/lib/context-obligatory/DOCUMENTATION.md.bak +0 -19
- package/server/lib/dev-tunnel/DOCUMENTATION.md.bak +0 -57
- package/server/lib/dictation/DOCUMENTATION.md.bak +0 -100
- package/server/lib/event-stream/DOCUMENTATION.md.bak +0 -62
- package/server/lib/fs/DOCUMENTATION.md.bak +0 -47
- package/server/lib/git/DOCUMENTATION.md.bak +0 -193
- package/server/lib/github/DOCUMENTATION.md.bak +0 -183
- package/server/lib/linear/DOCUMENTATION.md.bak +0 -97
- package/server/lib/linear/OAUTH-BROKER-HANDOFF.md.bak +0 -91
- package/server/lib/markdown-image-grants/DOCUMENTATION.md.bak +0 -40
- package/server/lib/notifications/APNS.md.bak +0 -135
- package/server/lib/notifications/DOCUMENTATION.md.bak +0 -138
- package/server/lib/openchamber-control/DOCUMENTATION.md.bak +0 -64
- package/server/lib/opencode/DOCUMENTATION.md.bak +0 -431
- package/server/lib/opencode/managed-process-registry.d.ts.bak +0 -13
- package/server/lib/opencode/provider-env-aliases.d.ts.bak +0 -3
- package/server/lib/permission-auto-accept/DOCUMENTATION.md.bak +0 -34
- package/server/lib/project-context/DOCUMENTATION.md.bak +0 -160
- package/server/lib/quota/DOCUMENTATION.md.bak +0 -123
- package/server/lib/relay/DOCUMENTATION.md.bak +0 -100
- package/server/lib/scheduled-tasks/DOCUMENTATION.md.bak +0 -182
- package/server/lib/session-assist/DOCUMENTATION.md.bak +0 -66
- package/server/lib/session-goal/DOCUMENTATION.md.bak +0 -213
- package/server/lib/session-knowledge/DOCUMENTATION.md.bak +0 -89
- package/server/lib/skills-catalog/DOCUMENTATION.md.bak +0 -151
- package/server/lib/small-model/DOCUMENTATION.md.bak +0 -212
- package/server/lib/system-prompt/DOCUMENTATION.md.bak +0 -36
- package/server/lib/terminal/DOCUMENTATION.md.bak +0 -50
- package/server/lib/text/DOCUMENTATION.md.bak +0 -35
- package/server/lib/tts/DOCUMENTATION.md.bak +0 -147
- package/server/lib/tunnels/DOCUMENTATION.md.bak +0 -21
- package/server/lib/ui-auth/DOCUMENTATION.md.bak +0 -44
- package/server/lib/walkthrough/DOCUMENTATION.md.bak +0 -411
|
@@ -84,18 +84,18 @@ describe('event stream broadcaster', () => {
|
|
|
84
84
|
},
|
|
85
85
|
});
|
|
86
86
|
|
|
87
|
-
broadcast({ type: '
|
|
87
|
+
broadcast({ type: 'aiworker:session-status' }, { eventId: 'evt-1', directory: '/tmp/project' });
|
|
88
88
|
|
|
89
89
|
expect(sseEvents).toEqual([
|
|
90
90
|
{
|
|
91
91
|
res: sseClient,
|
|
92
|
-
payload: { type: '
|
|
92
|
+
payload: { type: 'aiworker:session-status' },
|
|
93
93
|
},
|
|
94
94
|
]);
|
|
95
95
|
expect(wsPayloads).toEqual([
|
|
96
96
|
{
|
|
97
97
|
type: 'event',
|
|
98
|
-
payload: { type: '
|
|
98
|
+
payload: { type: 'aiworker:session-status' },
|
|
99
99
|
eventId: 'evt-1',
|
|
100
100
|
directory: '/tmp/project',
|
|
101
101
|
},
|
|
@@ -120,7 +120,7 @@ describe('event stream broadcaster', () => {
|
|
|
120
120
|
},
|
|
121
121
|
});
|
|
122
122
|
|
|
123
|
-
broadcast({ type: '
|
|
123
|
+
broadcast({ type: 'aiworker:notification' });
|
|
124
124
|
|
|
125
125
|
expect(wsClients.size).toBe(0);
|
|
126
126
|
});
|
|
@@ -446,18 +446,18 @@ describe('message stream websocket runtime', () => {
|
|
|
446
446
|
const socket = new FakeSocket();
|
|
447
447
|
runtime.wsServer.emit('connection', socket, { url: '/api/global/event/ws' });
|
|
448
448
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
449
|
+
try {
|
|
450
|
+
// Wait for the reconnect event itself; a 35ms sleep raced the event
|
|
451
|
+
// loop when the workspace build and test workers ran together.
|
|
452
|
+
await expect.poll(() => socket.sent.filter((frame) => frame.type === 'ready').length).toBeGreaterThanOrEqual(2);
|
|
453
|
+
const eventFrames = socket.sent.filter((frame) => frame.type === 'event' && frame.payload?.type === 'server.connected');
|
|
454
|
+
expect(eventFrames.length).toBeGreaterThanOrEqual(2);
|
|
455
|
+
expect(fetchCalls.slice(0, 2)).toEqual([null, 'evt-1']);
|
|
456
|
+
expect(triggerHealthCheckCalls).toBe(0);
|
|
457
|
+
} finally {
|
|
458
|
+
socket.close();
|
|
459
|
+
await runtime.close();
|
|
460
|
+
}
|
|
461
461
|
});
|
|
462
462
|
|
|
463
463
|
it('keeps synthetic event processing on forwarded upstream events', async () => {
|
|
@@ -475,7 +475,7 @@ describe('message stream websocket runtime', () => {
|
|
|
475
475
|
getOpenCodeAuthHeaders: () => ({}),
|
|
476
476
|
processForwardedEventPayload(payload, emitSynthetic) {
|
|
477
477
|
if (payload.type === 'session.updated') {
|
|
478
|
-
emitSynthetic({ type: '
|
|
478
|
+
emitSynthetic({ type: 'aiworker:session-status', sessionID: 'ses_1' });
|
|
479
479
|
}
|
|
480
480
|
},
|
|
481
481
|
wsClients,
|
|
@@ -502,7 +502,7 @@ describe('message stream websocket runtime', () => {
|
|
|
502
502
|
});
|
|
503
503
|
expect(socket.sent).toContainEqual({
|
|
504
504
|
type: 'event',
|
|
505
|
-
payload: { type: '
|
|
505
|
+
payload: { type: 'aiworker:session-status', sessionID: 'ses_1' },
|
|
506
506
|
directory: 'global',
|
|
507
507
|
});
|
|
508
508
|
|
|
@@ -14,6 +14,8 @@ Own filesystem API behavior for the web server runtime, including workspace-boun
|
|
|
14
14
|
- `POST /api/fs/mkdir`
|
|
15
15
|
- `GET /api/fs/read`
|
|
16
16
|
- `GET /api/fs/raw`
|
|
17
|
+
- `GET /api/fs/stat`
|
|
18
|
+
- `GET /api/fs/directory-stat`
|
|
17
19
|
- `GET /api/fs/serve/:path(*)`
|
|
18
20
|
- `POST /api/fs/write`
|
|
19
21
|
- `POST /api/fs/upload`
|
|
@@ -40,7 +42,10 @@ Own filesystem API behavior for the web server runtime, including workspace-boun
|
|
|
40
42
|
|
|
41
43
|
## Notes for contributors
|
|
42
44
|
- Keep filesystem policy (workspace root checks, error mapping, exec timeout behavior) inside this module, not in the composition root.
|
|
45
|
+
- Workspace checks accept, besides the active workspace and its worktrees, the **managed roots**: the AiWorker config root and the managed chats root (`managedChatsRoot` dependency; `AIWORKER_CHATS_DIR` upstream, default `<config root>/chats`). Chat worktrees may legitimately live outside every project workspace.
|
|
46
|
+
- `GET /api/fs/home` answers `{ home, chatsRoot }`. `chatsRoot` is the server-resolved managed chats root; clients must use it instead of joining `home` + the well-known segment (a relocated root does not contain that segment).
|
|
43
47
|
- Filesystem `EPERM`/`EACCES` failures use the stable `reason: "os-permission"` response marker. Policy denials such as workspace-boundary or missing-grant failures must not use that marker because a native folder picker cannot remediate them.
|
|
48
|
+
- `GET /api/fs/directory-stat?path=...` uses one `stat` without listing contents or resolving project topology. It follows the same authenticated directory-discovery path policy as `/api/fs/list`, including targets outside the active workspace. A directory returns `{ isDirectory: true }`; `ENOENT` returns `not-found`, and a file or `ENOTDIR` returns `not-directory`. Permission and other failures remain distinct from a missing path. VS Code explicitly returns 501, so the shared client treats its probe as unknown.
|
|
44
49
|
- Read-only routes authorize the requested path against the workspace before resolving symlinks. A symlink reached through the workspace may therefore target a file outside it, while a directly requested outside path still requires an exact-path grant. Write routes keep canonical-target boundary checks.
|
|
45
50
|
- If adding new `/api/fs/*` endpoints, add them in `routes.js` and extend this document.
|
|
46
51
|
- `GET /api/fs/list` may resolve symlinks with `realpath` to read directory contents, but the response `path` and each entry `path` must stay in the caller's requested path space (`path.join(requestedPath, name)`). Returning real paths breaks file-tree expansion for directories reached through workspace symlinks.
|
package/server/lib/fs/routes.js
CHANGED
|
@@ -87,7 +87,7 @@ const resolveOutsideFileGrant = async ({ token, targetPath, scope, fsPromises })
|
|
|
87
87
|
};
|
|
88
88
|
|
|
89
89
|
const createCommandTimeoutMs = () => {
|
|
90
|
-
const raw = Number(process.env.
|
|
90
|
+
const raw = Number(process.env.AIWORKER_FS_EXEC_TIMEOUT_MS);
|
|
91
91
|
if (Number.isFinite(raw) && raw > 0) return raw;
|
|
92
92
|
return 5 * 60 * 1000;
|
|
93
93
|
};
|
|
@@ -97,19 +97,19 @@ const createCommandTimeoutMs = () => {
|
|
|
97
97
|
// absorbs the burst of identical lookups a fresh client (e.g. right after a
|
|
98
98
|
// page reload) fires for every project. Set to 0 to disable caching.
|
|
99
99
|
const createGitReadCacheTtlMs = () => {
|
|
100
|
-
const raw = Number(process.env.
|
|
100
|
+
const raw = Number(process.env.AIWORKER_GIT_READ_CACHE_TTL_MS);
|
|
101
101
|
if (Number.isFinite(raw) && raw >= 0) return raw;
|
|
102
102
|
return 30 * 1000;
|
|
103
103
|
};
|
|
104
104
|
|
|
105
105
|
const createGitCheckIgnoreTimeoutMs = () => {
|
|
106
|
-
const raw = Number(process.env.
|
|
106
|
+
const raw = Number(process.env.AIWORKER_GIT_CHECK_IGNORE_TIMEOUT_MS);
|
|
107
107
|
if (Number.isFinite(raw) && raw >= 0) return raw;
|
|
108
108
|
return 2500;
|
|
109
109
|
};
|
|
110
110
|
|
|
111
111
|
const createUploadMaxBytes = () => {
|
|
112
|
-
const raw = Number(process.env.
|
|
112
|
+
const raw = Number(process.env.AIWORKER_FS_UPLOAD_MAX_BYTES);
|
|
113
113
|
if (Number.isFinite(raw) && raw > 0) return Math.floor(raw);
|
|
114
114
|
return 100 * 1024 * 1024;
|
|
115
115
|
};
|
|
@@ -196,7 +196,7 @@ const isPathWithinRoot = (resolvedPath, rootPath, path, os) => {
|
|
|
196
196
|
return true;
|
|
197
197
|
};
|
|
198
198
|
|
|
199
|
-
const resolveWorkspacePath = ({ targetPath, baseDirectory, path, os, normalizeDirectoryPath,
|
|
199
|
+
const resolveWorkspacePath = ({ targetPath, baseDirectory, path, os, normalizeDirectoryPath, managedRoots }) => {
|
|
200
200
|
const normalized = normalizeDirectoryPath(targetPath);
|
|
201
201
|
if (!normalized || typeof normalized !== 'string') {
|
|
202
202
|
return { ok: false, error: 'Path is required' };
|
|
@@ -209,8 +209,12 @@ const resolveWorkspacePath = ({ targetPath, baseDirectory, path, os, normalizeDi
|
|
|
209
209
|
return { ok: true, base: resolvedBase, resolved };
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
|
|
213
|
-
|
|
212
|
+
// Managed roots (config root, relocated chats root) stay valid targets
|
|
213
|
+
// even outside the active workspace.
|
|
214
|
+
for (const root of managedRoots) {
|
|
215
|
+
if (isPathWithinRoot(resolved, root, path, os)) {
|
|
216
|
+
return { ok: true, base: path.resolve(root), resolved };
|
|
217
|
+
}
|
|
214
218
|
}
|
|
215
219
|
|
|
216
220
|
return { ok: false, error: 'Path is outside of active workspace' };
|
|
@@ -249,7 +253,7 @@ const resolveWorkspacePathFromWorktrees = async ({ targetPath, baseDirectory, pa
|
|
|
249
253
|
return { ok: false, error: 'Path is outside of active workspace' };
|
|
250
254
|
};
|
|
251
255
|
|
|
252
|
-
const resolveWorkspacePathFromContext = async ({ req, targetPath, resolveProjectDirectory, path, os, normalizeDirectoryPath,
|
|
256
|
+
const resolveWorkspacePathFromContext = async ({ req, targetPath, resolveProjectDirectory, path, os, normalizeDirectoryPath, managedRoots }) => {
|
|
253
257
|
const resolvedProject = await resolveProjectDirectory(req);
|
|
254
258
|
if (!resolvedProject.directory) {
|
|
255
259
|
return { ok: false, error: resolvedProject.error || 'Active workspace is required' };
|
|
@@ -261,7 +265,7 @@ const resolveWorkspacePathFromContext = async ({ req, targetPath, resolveProject
|
|
|
261
265
|
path,
|
|
262
266
|
os,
|
|
263
267
|
normalizeDirectoryPath,
|
|
264
|
-
|
|
268
|
+
managedRoots,
|
|
265
269
|
});
|
|
266
270
|
if (resolved.ok || resolved.error !== 'Path is outside of active workspace') {
|
|
267
271
|
return resolved;
|
|
@@ -281,7 +285,7 @@ const resolveWorkspacePathFromContext = async ({ req, targetPath, resolveProject
|
|
|
281
285
|
path,
|
|
282
286
|
os,
|
|
283
287
|
normalizeDirectoryPath,
|
|
284
|
-
|
|
288
|
+
managedRoots,
|
|
285
289
|
});
|
|
286
290
|
if (lexical.ok) {
|
|
287
291
|
return lexical;
|
|
@@ -412,7 +416,7 @@ const escapeCloneSshKeyPath = (sshKeyPath) => {
|
|
|
412
416
|
return `'${normalized.replace(/'/g, "'\\''")}'`;
|
|
413
417
|
};
|
|
414
418
|
|
|
415
|
-
const resolveReadPathFromContext = async ({ req, targetPath, scope, resolveProjectDirectory, path, os, fsPromises, normalizeDirectoryPath,
|
|
419
|
+
const resolveReadPathFromContext = async ({ req, targetPath, scope, resolveProjectDirectory, path, os, fsPromises, normalizeDirectoryPath, managedRoots }) => {
|
|
416
420
|
if (req.query?.allowOutsideWorkspace === 'true') {
|
|
417
421
|
const normalized = normalizeDirectoryPath(targetPath);
|
|
418
422
|
if (!normalized || typeof normalized !== 'string') {
|
|
@@ -434,7 +438,7 @@ const resolveReadPathFromContext = async ({ req, targetPath, scope, resolveProje
|
|
|
434
438
|
path,
|
|
435
439
|
os,
|
|
436
440
|
normalizeDirectoryPath,
|
|
437
|
-
|
|
441
|
+
managedRoots,
|
|
438
442
|
});
|
|
439
443
|
};
|
|
440
444
|
|
|
@@ -519,8 +523,15 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
519
523
|
resolveProjectDirectory,
|
|
520
524
|
buildAugmentedPath,
|
|
521
525
|
resolveGitBinaryForSpawn,
|
|
522
|
-
|
|
526
|
+
aiworkerUserConfigRoot,
|
|
527
|
+
managedChatsRoot,
|
|
523
528
|
} = dependencies;
|
|
529
|
+
// Chat worktrees may live outside every project workspace; both managed
|
|
530
|
+
// roots stay valid filesystem targets.
|
|
531
|
+
const chatsRoot = typeof managedChatsRoot === 'string' && managedChatsRoot.trim()
|
|
532
|
+
? path.resolve(managedChatsRoot.trim())
|
|
533
|
+
: path.join(aiworkerUserConfigRoot, 'chats');
|
|
534
|
+
const managedRoots = [path.resolve(aiworkerUserConfigRoot), chatsRoot];
|
|
524
535
|
const realpathCache = createRealpathCache({
|
|
525
536
|
realpath: fsPromises.realpath.bind(fsPromises),
|
|
526
537
|
});
|
|
@@ -699,7 +710,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
699
710
|
if (!home || typeof home !== 'string' || home.length === 0) {
|
|
700
711
|
return res.status(500).json({ error: 'Failed to resolve home directory' });
|
|
701
712
|
}
|
|
702
|
-
return res.json({ home });
|
|
713
|
+
return res.json({ home, chatsRoot });
|
|
703
714
|
} catch (error) {
|
|
704
715
|
console.error('Failed to resolve home directory:', error);
|
|
705
716
|
return res.status(500).json({ error: (error && error.message) || 'Failed to resolve home directory' });
|
|
@@ -725,7 +736,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
725
736
|
path,
|
|
726
737
|
os,
|
|
727
738
|
normalizeDirectoryPath,
|
|
728
|
-
|
|
739
|
+
managedRoots,
|
|
729
740
|
});
|
|
730
741
|
if (!resolved.ok) {
|
|
731
742
|
return res.status(400).json({ error: resolved.error });
|
|
@@ -853,6 +864,37 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
853
864
|
}
|
|
854
865
|
});
|
|
855
866
|
|
|
867
|
+
app.get('/api/fs/directory-stat', async (req, res) => {
|
|
868
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
869
|
+
const paths = new URL(req.url, 'http://openchamber.local').searchParams.getAll('path');
|
|
870
|
+
const directoryPath = paths.length === 1 ? paths[0].trim() : '';
|
|
871
|
+
if (!directoryPath) {
|
|
872
|
+
return res.status(400).json({ error: 'Path is required' });
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
try {
|
|
876
|
+
// Directory discovery uses the same path policy as /api/fs/list, including
|
|
877
|
+
// paths outside the current workspace. stat follows symlinks without readdir.
|
|
878
|
+
const resolvedPath = path.resolve(normalizeDirectoryPath(directoryPath));
|
|
879
|
+
const stats = await fsPromises.stat(resolvedPath);
|
|
880
|
+
if (!stats.isDirectory()) {
|
|
881
|
+
return res.status(400).json({ error: 'Specified path is not a directory', reason: 'not-directory' });
|
|
882
|
+
}
|
|
883
|
+
return res.json({ isDirectory: true });
|
|
884
|
+
} catch (error) {
|
|
885
|
+
if (error.code === 'ENOENT' || error.code === 'ENOTDIR') {
|
|
886
|
+
return res.status(error.code === 'ENOENT' ? 404 : 400).json({
|
|
887
|
+
error: error.code === 'ENOENT' ? 'Directory not found' : 'Specified path is not a directory',
|
|
888
|
+
reason: error.code === 'ENOENT' ? 'not-found' : 'not-directory',
|
|
889
|
+
});
|
|
890
|
+
}
|
|
891
|
+
if (isOsPermissionError(error)) {
|
|
892
|
+
return sendOsPermissionDenied(res, 'Access to directory denied');
|
|
893
|
+
}
|
|
894
|
+
return res.status(500).json({ error: 'Failed to stat directory' });
|
|
895
|
+
}
|
|
896
|
+
});
|
|
897
|
+
|
|
856
898
|
app.get('/api/fs/stat', async (req, res) => {
|
|
857
899
|
const filePath = typeof req.query.path === 'string' ? req.query.path.trim() : '';
|
|
858
900
|
const optional = req.query.optional === 'true';
|
|
@@ -870,7 +912,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
870
912
|
os,
|
|
871
913
|
fsPromises,
|
|
872
914
|
normalizeDirectoryPath,
|
|
873
|
-
|
|
915
|
+
managedRoots,
|
|
874
916
|
});
|
|
875
917
|
if (!resolved.ok) {
|
|
876
918
|
if (req.query?.allowOutsideWorkspace === 'true') {
|
|
@@ -920,7 +962,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
920
962
|
os,
|
|
921
963
|
fsPromises,
|
|
922
964
|
normalizeDirectoryPath,
|
|
923
|
-
|
|
965
|
+
managedRoots,
|
|
924
966
|
});
|
|
925
967
|
if (!resolved.ok) {
|
|
926
968
|
if (req.query?.allowOutsideWorkspace === 'true') {
|
|
@@ -984,7 +1026,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
984
1026
|
os,
|
|
985
1027
|
fsPromises,
|
|
986
1028
|
normalizeDirectoryPath,
|
|
987
|
-
|
|
1029
|
+
managedRoots,
|
|
988
1030
|
});
|
|
989
1031
|
if (!resolved.ok) {
|
|
990
1032
|
if (req.query?.allowOutsideWorkspace === 'true') {
|
|
@@ -1065,7 +1107,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
1065
1107
|
path,
|
|
1066
1108
|
os,
|
|
1067
1109
|
normalizeDirectoryPath,
|
|
1068
|
-
|
|
1110
|
+
managedRoots,
|
|
1069
1111
|
});
|
|
1070
1112
|
if (!resolved.ok) {
|
|
1071
1113
|
return res.status(400).json({ error: resolved.error });
|
|
@@ -1117,7 +1159,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
1117
1159
|
path,
|
|
1118
1160
|
os,
|
|
1119
1161
|
normalizeDirectoryPath,
|
|
1120
|
-
|
|
1162
|
+
managedRoots,
|
|
1121
1163
|
});
|
|
1122
1164
|
if (!resolved.ok) {
|
|
1123
1165
|
return res.status(400).json({ error: resolved.error });
|
|
@@ -1187,7 +1229,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
1187
1229
|
path,
|
|
1188
1230
|
os,
|
|
1189
1231
|
normalizeDirectoryPath,
|
|
1190
|
-
|
|
1232
|
+
managedRoots,
|
|
1191
1233
|
});
|
|
1192
1234
|
if (!resolved.ok) {
|
|
1193
1235
|
return res.status(400).json({ error: resolved.error });
|
|
@@ -1294,7 +1336,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
1294
1336
|
path,
|
|
1295
1337
|
os,
|
|
1296
1338
|
normalizeDirectoryPath,
|
|
1297
|
-
|
|
1339
|
+
managedRoots,
|
|
1298
1340
|
});
|
|
1299
1341
|
if (!resolved.ok) {
|
|
1300
1342
|
return res.status(400).json({ error: resolved.error });
|
|
@@ -1332,7 +1374,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
1332
1374
|
path,
|
|
1333
1375
|
os,
|
|
1334
1376
|
normalizeDirectoryPath,
|
|
1335
|
-
|
|
1377
|
+
managedRoots,
|
|
1336
1378
|
});
|
|
1337
1379
|
if (!resolvedOld.ok) {
|
|
1338
1380
|
return res.status(400).json({ error: resolvedOld.error });
|
|
@@ -1345,7 +1387,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
1345
1387
|
path,
|
|
1346
1388
|
os,
|
|
1347
1389
|
normalizeDirectoryPath,
|
|
1348
|
-
|
|
1390
|
+
managedRoots,
|
|
1349
1391
|
});
|
|
1350
1392
|
if (!resolvedNew.ok) {
|
|
1351
1393
|
return res.status(400).json({ error: resolvedNew.error });
|
|
@@ -1451,7 +1493,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
1451
1493
|
path,
|
|
1452
1494
|
os,
|
|
1453
1495
|
normalizeDirectoryPath,
|
|
1454
|
-
|
|
1496
|
+
managedRoots,
|
|
1455
1497
|
});
|
|
1456
1498
|
if (!resolvedForWorkspace.ok) {
|
|
1457
1499
|
console.warn(`Rejected /api/fs/exec outside workspace: ${resolvedForWorkspace.error}`);
|
|
@@ -1689,7 +1731,7 @@ export const registerFsRoutes = (app, dependencies) => {
|
|
|
1689
1731
|
path,
|
|
1690
1732
|
os,
|
|
1691
1733
|
normalizeDirectoryPath,
|
|
1692
|
-
|
|
1734
|
+
managedRoots,
|
|
1693
1735
|
});
|
|
1694
1736
|
if (!resolved.ok) {
|
|
1695
1737
|
return res.status(400).json({ error: resolved.error });
|