Files
openclaw/extensions/browser/src/core-api.ts
Zee Zheng 8be581cbf8 fix(browser): allow inbound media uploads
Allow the browser upload tool to resolve OpenClaw-managed inbound media refs such as `media://inbound/<id>` and sandbox-relative `media/inbound/<id>` while preserving the existing upload-root path contract.

Keep upload-root files ahead of sandbox-relative inbound fallback, reject nested absolute inbound media files, and validate raw `media://` paths before URL normalization so traversal-shaped refs cannot resolve to direct media ids.

Verification:
- `OPENCLAW_VITEST_MAX_WORKERS=1 node scripts/run-vitest.mjs extensions/browser/src/browser/paths.test.ts --reporter=verbose`
- `OPENCLAW_VITEST_MAX_WORKERS=1 node scripts/run-vitest.mjs extensions/browser/src/browser/paths.test.ts --reporter=dot`
- `OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.extensions.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/extensions-test.tsbuildinfo`
- `pnpm lint --threads=8`
- `.agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main`
- `git diff --check`
- GitHub PR checks on be08e6c8a8: dependency-guard, check-lint, check-test-types, check-additional-extension-bundled, checks-fast-contracts-plugins-a, checks-fast-contracts-plugins-b all passed.

Fixes #83544.

Co-authored-by: Zee Zheng <zheng.zuo0@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-30 23:49:07 +01:00

117 lines
2.7 KiB
TypeScript

export {
DEFAULT_AI_SNAPSHOT_MAX_CHARS,
DEFAULT_UPLOAD_DIR,
applyBrowserProxyPaths,
browserAct,
browserArmDialog,
browserArmFileChooser,
browserCloseTab,
browserCreateProfile,
browserConsoleMessages,
browserDeleteProfile,
browserDoctor,
browserFocusTab,
browserNavigate,
browserOpenTab,
browserPdfSave,
browserProfiles,
browserResetProfile,
browserScreenshotAction,
browserSnapshot,
browserStart,
browserStatus,
browserStop,
browserTabAction,
browserTabs,
createBrowserControlContext,
createBrowserRouteDispatcher,
createBrowserRuntimeState,
createBrowserRouteContext,
ensureBrowserControlAuth,
getBrowserControlState,
getBrowserProfileCapabilities,
isPersistentBrowserProfileMutation,
installBrowserAuthMiddleware,
installBrowserCommonMiddleware,
normalizeBrowserFormField,
normalizeBrowserFormFieldValue,
normalizeBrowserRequestPath,
persistBrowserProxyFiles,
redactCdpUrl,
registerBrowserRoutes,
resolveBrowserConfig,
resolveBrowserControlAuth,
resolveExistingPathsWithinRoot,
resolveExistingUploadPaths,
resolveProfile,
resolveRequestedBrowserProfile,
startBrowserControlServiceFromConfig,
stopBrowserControlService,
stopBrowserRuntime,
trackSessionBrowserTab,
untrackSessionBrowserTab,
} from "./browser-runtime.js";
export type {
BrowserCreateProfileResult,
BrowserDeleteProfileResult,
BrowserDoctorCheck,
BrowserDoctorReport,
BrowserFormField,
BrowserResetProfileResult,
BrowserRouteRegistrar,
BrowserServerState,
BrowserStatus,
BrowserTab,
BrowserTransport,
ProfileStatus,
SnapshotResult,
} from "./browser-runtime.js";
export {
callGatewayTool,
danger,
detectMime,
formatCliCommand,
formatDocsLink,
formatHelpExamples,
inheritOptionFromParent,
info,
imageResultFromFile,
jsonResult,
listNodes,
optionalStringEnum,
readStringParam,
resolveNodeIdFromList,
selectDefaultNodeFromList,
stringEnum,
theme,
} from "./sdk-setup-tools.js";
export {
getRuntimeConfig,
normalizePluginsConfig,
parseBooleanValue,
resolveEffectiveEnableState,
shortenHomePath,
} from "./sdk-config.js";
export {
addGatewayClientOptions,
callGatewayFromCli,
defaultRuntime,
ErrorCodes,
errorShape,
isNodeCommandAllowed,
respondUnavailableOnNodeInvokeError,
resolveNodeCommandAllowlist,
runCommandWithRuntime,
safeParseJson,
withTimeout,
} from "./sdk-node-runtime.js";
export { createSubsystemLogger, wrapExternalContent } from "./sdk-security-runtime.js";
export type { AnyAgentTool, NodeListNode } from "./sdk-setup-tools.js";
export type { OpenClawConfig } from "./sdk-config.js";
export type {
GatewayRequestHandlers,
GatewayRpcOpts,
NodeSession,
OpenClawPluginService,
} from "./sdk-node-runtime.js";