@extension.dev/mcp 10.10.1 → 10.10.3

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.
Files changed (44) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +214 -0
  4. package/README.md +29 -4
  5. package/bin/extension-mcp.js +14 -4
  6. package/claude/CLAUDE.md +2 -1
  7. package/dist/module.d.ts +1 -0
  8. package/dist/module.js +2194 -264
  9. package/dist/src/index.d.ts +3 -2
  10. package/dist/src/lib/approval-gate.d.ts +5 -1
  11. package/dist/src/lib/artifacts-api.d.ts +1 -0
  12. package/dist/src/lib/bridge-tabs.d.ts +8 -1
  13. package/dist/src/lib/cdp-devtools.d.ts +27 -0
  14. package/dist/src/lib/cdp-extension-page.d.ts +18 -0
  15. package/dist/src/lib/cdp-targets.d.ts +7 -0
  16. package/dist/src/lib/cdp.d.ts +2 -0
  17. package/dist/src/lib/common-schema.d.ts +3 -3
  18. package/dist/src/lib/credentials.d.ts +24 -3
  19. package/dist/src/lib/device-flow.d.ts +6 -3
  20. package/dist/src/lib/envelope.d.ts +1 -1
  21. package/dist/src/lib/exec.d.ts +1 -0
  22. package/dist/src/lib/publish.d.ts +3 -1
  23. package/dist/src/lib/registry.d.ts +1 -0
  24. package/dist/src/lib/session-browser.d.ts +1 -1
  25. package/dist/src/lib/session-paths.d.ts +10 -1
  26. package/dist/src/lib/tool-policy.d.ts +33 -0
  27. package/dist/src/tools/browsers.d.ts +1 -1
  28. package/dist/src/tools/build.d.ts +1 -1
  29. package/dist/src/tools/detect-browsers.d.ts +2 -0
  30. package/dist/src/tools/dev.d.ts +1 -1
  31. package/dist/src/tools/eval.d.ts +2 -0
  32. package/dist/src/tools/inspect-gecko.d.ts +1 -0
  33. package/dist/src/tools/logout.d.ts +1 -1
  34. package/dist/src/tools/open.d.ts +25 -1
  35. package/dist/src/tools/preview-web.d.ts +7 -2
  36. package/dist/src/tools/project-create.d.ts +15 -0
  37. package/dist/src/tools/publish.d.ts +5 -0
  38. package/dist/src/tools/release-promote.d.ts +5 -0
  39. package/dist/src/tools/shares.d.ts +5 -0
  40. package/dist/src/tools/start.d.ts +6 -1
  41. package/dist/src/tools/submit.d.ts +5 -0
  42. package/dist/src/tools/workspace-create.d.ts +42 -0
  43. package/package.json +18 -13
  44. package/server.json +3 -3
@@ -1,6 +1,7 @@
1
1
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
2
  import { version } from "../package.json";
3
3
  export { version };
4
+ import { type ServerOptions } from "./lib/tool-policy";
4
5
  export interface ToolModule {
5
6
  schema: {
6
7
  name: string;
@@ -18,6 +19,6 @@ export declare function toolResultFrame(result: string): {
18
19
  isError?: boolean;
19
20
  };
20
21
  export declare const SERVER_INSTRUCTIONS: string;
21
- export declare function createServer(): Server;
22
- export declare function startServer(): Promise<void>;
22
+ export declare function createServer(options?: ServerOptions): Server;
23
+ export declare function startServer(options?: ServerOptions): Promise<void>;
23
24
  export declare function runCli(cmd: string, args: string[]): Promise<number>;
@@ -2,7 +2,11 @@ export declare const APPROVAL_GATE_ENV = "EXTENSION_DEV_APPROVAL_GATE";
2
2
  export declare const APPROVAL_REQUIRED_STATUS = "approval-required";
3
3
  export declare const APPROVAL_PENDING_STATUS = "approval-pending";
4
4
  export declare const APPROVAL_REJECTED_STATUS = "approval-rejected";
5
- export declare function approvalGateEnabled(): boolean;
5
+ export declare function approvalGateEnabled(defaultOn?: boolean): boolean;
6
+ export declare function platformRequiresApproval(res: {
7
+ status: number;
8
+ }, data: unknown): boolean;
9
+ export declare function requestApprovalAfterRefusal(input: ApprovalGateInput): Promise<string>;
6
10
  export type ApprovalScope = Record<string, string | string[]>;
7
11
  export declare function actionFingerprint(action: string, scope: ApprovalScope): string;
8
12
  export interface ApprovalGateInput {
@@ -55,6 +55,7 @@ export type ArtifactsOutcome<T> = {
55
55
  name: string;
56
56
  message: string;
57
57
  status?: number;
58
+ code?: string;
58
59
  };
59
60
  held?: boolean;
60
61
  body?: unknown;
@@ -10,5 +10,12 @@ export declare function listBridgeTabs(projectPath: string, browser: string, tim
10
10
  }>;
11
11
  export declare function matchTabsByUrl(tabs: BridgeTab[], needle: string): BridgeTab[];
12
12
  export declare function pollForBridgeTab(projectPath: string, browser: string, url: string, budgetMs: number): Promise<BridgeTab | null>;
13
- export declare function navigateToUrlViaBridge(projectPath: string, browser: string, url: string, timeout?: number, tool?: string): Promise<string>;
13
+ export interface NavigateTarget {
14
+ tab?: number;
15
+ newTab?: boolean;
16
+ }
17
+ export declare function navigateToUrlViaBridge(projectPath: string, browser: string, url: string, timeout?: number, tool?: string, target?: NavigateTarget): Promise<string>;
18
+ export declare function geckoAddonId(projectPath: string, browser: string): string | null;
19
+ export declare function sessionProfilePath(projectPath: string, browser: string): string | null;
20
+ export declare function readGeckoBaseUrlFromProfile(projectPath: string, browser: string): string | null;
14
21
  export declare function resolveBridgeBaseUrl(projectPath: string, browser: string, timeout?: number): Promise<string | null>;
@@ -0,0 +1,27 @@
1
+ export type DevToolsPanelOutcome = {
2
+ opened: true;
3
+ devtoolsTargetId: string;
4
+ panelId: string;
5
+ panelTitle: string;
6
+ panelTarget: {
7
+ targetId: string;
8
+ url: string;
9
+ } | null;
10
+ panels: string[];
11
+ } | {
12
+ opened: false;
13
+ stage: "open" | "frontend" | "panel" | "show";
14
+ reason: string;
15
+ devtoolsTargetId?: string;
16
+ panels?: string[];
17
+ };
18
+ export declare function panelIdPrefix(extensionId: string): string;
19
+ export declare function panelTitleFromId(panelId: string, extensionId: string): string;
20
+ export declare function openDevToolsPanel(port: number, options: {
21
+ inspectedTargetId: string;
22
+ extensionId: string;
23
+ devtoolsPageUrl: string;
24
+ panelTitle?: string;
25
+ budgetMs?: number;
26
+ reloadInspected?: boolean;
27
+ }): Promise<DevToolsPanelOutcome>;
@@ -8,6 +8,24 @@ export type ExtensionPageEval = {
8
8
  thrown: boolean;
9
9
  };
10
10
  export declare function matchExtensionPageTargets(targets: PageTarget[], wantedUrl: string): PageTarget[];
11
+ export declare const WORKER_TARGET_TYPES: Set<string>;
12
+ export declare function findExtensionWorkerTargets(port: number, extensionId: string): Promise<Array<{
13
+ targetId: string;
14
+ type: string;
15
+ url: string;
16
+ }>>;
17
+ export type WorkerWake = {
18
+ woken: true;
19
+ targets: Array<{
20
+ targetId: string;
21
+ type: string;
22
+ url: string;
23
+ }>;
24
+ } | {
25
+ woken: false;
26
+ reason: string;
27
+ };
28
+ export declare function wakeExtensionWorker(port: number, extensionId: string): Promise<WorkerWake>;
11
29
  export declare function findExtensionPageTargets(port: number, wantedUrl: string): Promise<PageTarget[]>;
12
30
  export declare function evaluateOnExtensionPage(port: number, targetId: string, expression: string): Promise<ExtensionPageEval>;
13
31
  export type SidePanelGestureOutcome = {
@@ -12,4 +12,11 @@ export declare function filterPageTargets(raw: Array<{
12
12
  title: string;
13
13
  }>): PageTarget[];
14
14
  export declare function listPageTargets(port: number): Promise<PageTarget[]>;
15
+ export declare function filterDocumentTargets(raw: Array<{
16
+ id: string;
17
+ type: string;
18
+ url: string;
19
+ title: string;
20
+ }>): PageTarget[];
21
+ export declare function listDocumentTargets(port: number): Promise<PageTarget[]>;
15
22
  export declare function matchTargetsByUrl(targets: PageTarget[], needle: string): PageTarget[];
@@ -9,6 +9,8 @@ export interface RenderEvidence {
9
9
  }
10
10
  export declare class CDPClient extends CDPConnection {
11
11
  static discoverBrowserWsUrl(port: number, host?: string): Promise<string>;
12
+ static discoverBrowserVersion(port: number, host?: string): Promise<string | null>;
13
+ static discoverUserAgent(port: number, host?: string): Promise<string | null>;
12
14
  static discoverTargets(port: number, host?: string): Promise<Array<{
13
15
  id: string;
14
16
  type: string;
@@ -1,5 +1,5 @@
1
- export declare const LAUNCHABLE_BROWSERS: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "safari", "chromium-based", "gecko-based", "firefox-based", "webkit-based"];
2
- export declare const REAL_BROWSERS: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "safari"];
1
+ export declare const LAUNCHABLE_BROWSERS: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "zen", "floorp", "safari", "chromium-based", "gecko-based", "firefox-based", "webkit-based"];
2
+ export declare const REAL_BROWSERS: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "zen", "floorp", "safari"];
3
3
  export declare const MANAGED_BROWSERS: readonly ["chrome", "chromium", "edge", "firefox"];
4
4
  export declare const PROJECT_PATH: {
5
5
  readonly type: "string";
@@ -23,6 +23,6 @@ export declare const API_BASE: {
23
23
  };
24
24
  export declare const LAUNCH_BROWSER: {
25
25
  readonly type: "string";
26
- readonly enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "safari", "chromium-based", "gecko-based", "firefox-based", "webkit-based"];
26
+ readonly enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "zen", "floorp", "safari", "chromium-based", "gecko-based", "firefox-based", "webkit-based"];
27
27
  readonly default: "chrome";
28
28
  };
@@ -8,10 +8,31 @@ export interface StoredCredentials {
8
8
  provider?: "extensiondev";
9
9
  }
10
10
  export declare function credentialsPath(): string;
11
- export declare function readCredentials(): StoredCredentials | null;
11
+ export interface CredentialStore {
12
+ version: 2;
13
+ active: string | null;
14
+ entries: Record<string, StoredCredentials>;
15
+ }
16
+ export interface CredentialSelector {
17
+ project?: string;
18
+ }
19
+ export declare function credentialKey(workspaceSlug: string, projectSlug: string): string;
20
+ export declare function readCredentialStore(): CredentialStore | null;
21
+ export declare function readCredentials(selector?: CredentialSelector): StoredCredentials | null;
22
+ export declare function listCredentials(): Array<StoredCredentials & {
23
+ key: string;
24
+ active: boolean;
25
+ }>;
12
26
  export declare function writeCredentials(creds: StoredCredentials): string;
13
- export declare function clearCredentials(): {
27
+ export declare function clearCredentials(selector?: CredentialSelector): {
14
28
  cleared: boolean;
15
29
  path: string;
30
+ removed: string[];
31
+ remaining: string[];
32
+ };
33
+ export declare function readValidCredentials(nowSeconds?: number, selector?: CredentialSelector): StoredCredentials | null;
34
+ export declare const PROJECT_TOKEN_INPUT: {
35
+ readonly type: "string";
36
+ readonly description: "Which stored login to use, as '<workspace>/<project>' (or a project slug that matches one login), when extension_auth has signed in to more than one project on this machine. Omitted, the most recent login is used, after EXTENSION_DEV_TOKEN when that is set. Named, it outranks EXTENSION_DEV_TOKEN. extension_auth (action: status) lists the stored logins.";
16
37
  };
17
- export declare function readValidCredentials(nowSeconds?: number): StoredCredentials | null;
38
+ export declare function noStoredLoginHint(project: string): string;
@@ -8,12 +8,14 @@ export interface DeviceCodeStart {
8
8
  interval: number;
9
9
  expiresIn: number;
10
10
  }
11
+ export type DeviceIntent = "login" | "create" | "create-workspace";
11
12
  export declare function requestDeviceCode(args: {
12
13
  apiBase: string;
13
14
  path: string;
14
- project: string;
15
+ project?: string;
16
+ workspace?: string;
15
17
  clientName?: string;
16
- intent?: "login" | "create";
18
+ intent?: DeviceIntent;
17
19
  fetchImpl?: FetchImpl;
18
20
  }): Promise<DeviceCodeStart>;
19
21
  export type DevicePollResult = {
@@ -35,7 +37,8 @@ export type DeviceGrantPollResult = {
35
37
  export declare function pollDeviceGrant(args: {
36
38
  apiBase: string;
37
39
  path: string;
38
- project: string;
40
+ project?: string;
41
+ workspace?: string;
39
42
  deviceCode: string;
40
43
  interval: number;
41
44
  budgetMs: number;
@@ -1,6 +1,6 @@
1
1
  export declare const ENVELOPE_SCHEMA: 1;
2
2
  export declare const DECISION_D6 = "The MCP tool name owns the envelope `command` key; forking the key to `tool` would fork the schema the checksum test pins.";
3
- export type ErrorCode = "E_AMBIGUOUS_TARGET" | "E_APPROVAL_PENDING" | "E_APPROVAL_REJECTED" | "E_APPROVAL_REQUIRED" | "E_AUTH_DENIED" | "E_AUTH_EXPIRED" | "E_AUTH_FAILED" | "E_AUTH_PENDING" | "E_AUTH_REQUIRED" | "E_BAD_HOST_URL" | "E_BAD_MANIFEST" | "E_BAD_REQUEST" | "E_BRIDGE" | "E_BROWSER_EXITED" | "E_BROWSER_INSTALL" | "E_BROWSER_UNINSTALL" | "E_BUILD_FAILED" | "E_CARRIER_IN_DIST" | "E_CDP" | "E_CLI" | "E_COMPILE" | "E_CONFIG" | "E_CONTRACT_ERROR" | "E_CONTROL_CHANNEL" | "E_CONTROL_ENVELOPE" | "E_ENGINE_TOO_OLD" | "E_ENTRYPOINT_MISSING" | "E_FIRST_COMPILE" | "E_INPUT_VALIDATION" | "E_INTERNAL" | "E_INVALID_BUNDLE_ID" | "E_LOGS_MISSING" | "E_MANIFEST_BLOCKING" | "E_MANIFEST_NOT_FOUND" | "E_NAVIGATE_ERROR" | "E_NAVIGATE_FAILED" | "E_NETWORK" | "E_NO_CONTROL_CHANNEL" | "E_NO_DIST" | "E_NO_EXTENSION_ID" | "E_NO_MATCHING_TARGET" | "E_NO_REFERENCE_TEMPLATE" | "E_NO_SESSION" | "E_NO_SURFACE_DOCUMENT" | "E_NO_TARGET" | "E_NOT_ATTACHED" | "E_PARSE" | "E_PLATFORM" | "E_PREVIEW_HOST_UNREACHABLE" | "E_PROFILE_LOCKED" | "E_RDP" | "E_SAFARI_ONLY_OPTION" | "E_EVAL" | "E_SCAFFOLD_FAILED" | "E_SCAFFOLD_INCOMPLETE" | "E_SESSION_EXISTS" | "E_SESSION_EXITED" | "E_STALE_CONTRACT" | "E_SURFACE_DID_NOT_OPEN" | "E_TEMPLATE_FETCH" | "E_TEMPLATE_NOT_FOUND" | "E_UNKNOWN_COMMAND" | "E_UNKNOWN_TOOL" | "E_UNSUPPORTED_BROWSER" | "E_WAIT_TIMEOUT";
3
+ export type ErrorCode = "E_AMBIGUOUS_TARGET" | "E_APPROVAL_PENDING" | "E_APPROVAL_REJECTED" | "E_APPROVAL_REQUIRED" | "E_AUTH_DENIED" | "E_AUTH_EXPIRED" | "E_AUTH_FAILED" | "E_AUTH_REQUIRED" | "E_BAD_HOST_URL" | "E_BAD_MANIFEST" | "E_BAD_REQUEST" | "E_BRIDGE" | "E_BROWSER_EXITED" | "E_BROWSER_INSTALL" | "E_BROWSER_UNINSTALL" | "E_BUILD_FAILED" | "E_CARRIER_IN_DIST" | "E_CDP" | "E_CLI" | "E_COMPILE" | "E_CONFIG" | "E_CONTRACT_ERROR" | "E_CONTROL_CHANNEL" | "E_CONTROL_ENVELOPE" | "E_ENGINE_TOO_OLD" | "E_ENTRYPOINT_MISSING" | "E_FIRST_COMPILE" | "E_INPUT_VALIDATION" | "E_INTERNAL" | "E_INVALID_BUNDLE_ID" | "E_LOGS_MISSING" | "E_MANIFEST_BLOCKING" | "E_MANIFEST_NOT_FOUND" | "E_NAVIGATE_ERROR" | "E_NAVIGATE_FAILED" | "E_NETWORK" | "E_NO_CONTROL_CHANNEL" | "E_NO_DIST" | "E_NO_EXTENSION_ID" | "E_NO_MATCHING_TARGET" | "E_NO_REFERENCE_TEMPLATE" | "E_NO_SESSION" | "E_NO_SURFACE_DOCUMENT" | "E_NO_TARGET" | "E_NOT_ATTACHED" | "E_PARSE" | "E_PLATFORM" | "E_PREVIEW_HOST_UNREACHABLE" | "E_PROFILE_LOCKED" | "E_RDP" | "E_SAFARI_ONLY_OPTION" | "E_EVAL" | "E_SCAFFOLD_FAILED" | "E_SCAFFOLD_INCOMPLETE" | "E_SESSION_EXISTS" | "E_SESSION_EXITED" | "E_STALE_CONTRACT" | "E_SURFACE_DID_NOT_OPEN" | "E_TEMPLATE_FETCH" | "E_TEMPLATE_NOT_FOUND" | "E_TOOL_DISABLED" | "E_UNKNOWN_COMMAND" | "E_UNKNOWN_TOOL" | "E_UNSUPPORTED_BROWSER" | "E_WAIT_TIMEOUT";
4
4
  export declare const ERROR_CODES: ErrorCode[];
5
5
  export interface EnvelopeError {
6
6
  code: ErrorCode | string;
@@ -6,6 +6,7 @@ export interface CliResult {
6
6
  }
7
7
  export declare function pinnedCliVersion(): string;
8
8
  export declare function exactVersion(spec: string): string;
9
+ export declare function describeExtensionInvocation(projectDir?: string): string;
9
10
  export declare function resolveExtensionInvocation(projectDir?: string): {
10
11
  command: string;
11
12
  prefixArgs: string[];
@@ -1,5 +1,7 @@
1
1
  type FetchImpl = typeof fetch;
2
- export declare function resolveToken(): string;
2
+ export declare function resolveToken(options?: {
3
+ project?: string;
4
+ }): string;
3
5
  export interface PublishOptions {
4
6
  ttlHours?: number;
5
7
  buildSha?: string;
@@ -52,5 +52,6 @@ export interface BuildIndexItem {
52
52
  timestamp?: string;
53
53
  browsers?: string[];
54
54
  }
55
+ export declare function isSuccessfulBuild(item: Pick<BuildIndexItem, "status">): boolean;
55
56
  export declare function parseBuildIndex(json: unknown): BuildIndexItem[];
56
57
  export declare function mirrorActionsUrlFromRunUrl(runUrl: unknown): string | null;
@@ -9,7 +9,7 @@ export interface LiveSession {
9
9
  source: "registry" | "contract" | "marker";
10
10
  }
11
11
  export declare function liveProjectSessions(projectPath: string): LiveSession[];
12
- export declare function deadReadySession(projectPath: string): {
12
+ export declare function deadReadySession(projectPath: string, browser?: string): {
13
13
  browser: string;
14
14
  pid: number;
15
15
  } | null;
@@ -1,4 +1,13 @@
1
- export { actionsPath, browserArtifactsDir, buildSummaryPath, eventsPath, logsPath, readyContractPath, sessionArtifactsRootDir, sessionStateDir, } from "extension-develop/bridge";
1
+ export declare function ownsManifest(projectManifestPath: string, manifestPath: string): boolean;
2
+ export declare function engineProjectRoot(projectPath: string): string;
3
+ export declare const actionsPath: (projectPath: string, browser: string) => string;
4
+ export declare const browserArtifactsDir: (projectPath: string, browser: string) => string;
5
+ export declare const buildSummaryPath: (projectPath: string, browser: string) => string;
6
+ export declare const eventsPath: (projectPath: string, browser: string) => string;
7
+ export declare const logsPath: (projectPath: string, browser: string) => string;
8
+ export declare const readyContractPath: (projectPath: string, browser: string) => string;
9
+ export declare const sessionArtifactsRootDir: (projectPath: string) => string;
10
+ export declare const sessionStateDir: (projectPath: string) => string;
2
11
  export { readReadyContract, type ReadyContractInfo, } from "extension-develop/bridge";
3
12
  export declare function sessionPathHint(file: string): string;
4
13
  export declare function profilesRootDir(projectPath: string): string;
@@ -0,0 +1,33 @@
1
+ export type FeatureGroup = "local" | "platform";
2
+ export declare const FEATURE_GROUPS: FeatureGroup[];
3
+ export declare const FEATURES_ENV = "EXTENSION_DEV_FEATURES";
4
+ export declare const NO_SHIP_ENV = "EXTENSION_DEV_NO_SHIP";
5
+ export interface ToolAnnotations {
6
+ readOnlyHint: boolean;
7
+ destructiveHint: boolean;
8
+ idempotentHint: boolean;
9
+ openWorldHint: boolean;
10
+ }
11
+ type Args = Record<string, unknown>;
12
+ export interface ToolPolicy {
13
+ group: FeatureGroup;
14
+ annotations: ToolAnnotations;
15
+ ships?: "always" | ((args: Args) => boolean);
16
+ }
17
+ export declare const TOOL_POLICY: Record<string, ToolPolicy>;
18
+ export interface ServerOptions {
19
+ features: FeatureGroup[];
20
+ noShip: boolean;
21
+ }
22
+ export declare const DEFAULT_SERVER_OPTIONS: ServerOptions;
23
+ export declare function isServerFlag(arg: string): boolean;
24
+ export declare function resolveServerOptions(argv: string[], env: Record<string, string | undefined>): {
25
+ ok: true;
26
+ options: ServerOptions;
27
+ } | {
28
+ ok: false;
29
+ message: string;
30
+ };
31
+ export declare function isToolListed(name: string, options: ServerOptions): boolean;
32
+ export declare function disabledToolEnvelope(name: string, args: Args, options: ServerOptions): string | null;
33
+ export {};
@@ -13,7 +13,7 @@ export declare const schema: {
13
13
  type: string;
14
14
  items: {
15
15
  type: string;
16
- enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "safari"];
16
+ enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "zen", "floorp", "safari"];
17
17
  };
18
18
  description: string;
19
19
  };
@@ -10,7 +10,7 @@ export declare const schema: {
10
10
  };
11
11
  browser: {
12
12
  readonly type: "string";
13
- readonly enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "safari", "chromium-based", "gecko-based", "firefox-based", "webkit-based"];
13
+ readonly enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "zen", "floorp", "safari", "chromium-based", "gecko-based", "firefox-based", "webkit-based"];
14
14
  readonly default: "chrome";
15
15
  };
16
16
  zip: {
@@ -1,2 +1,4 @@
1
+ export declare function compareVersionNames(a: string, b: string): number;
1
2
  export declare function findManagedBinary(browser: string, cacheRoot?: string): string | null;
3
+ export declare function findManagedBinaryIn(browserDir: string, browser: string): string | null;
2
4
  export declare function detectBrowsers(browsers?: string[]): Promise<string>;
@@ -62,7 +62,7 @@ export declare const schema: {
62
62
  };
63
63
  browser: {
64
64
  readonly type: "string";
65
- readonly enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "safari", "chromium-based", "gecko-based", "firefox-based", "webkit-based"];
65
+ readonly enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "zen", "floorp", "safari", "chromium-based", "gecko-based", "firefox-based", "webkit-based"];
66
66
  readonly default: "chrome";
67
67
  };
68
68
  port: {
@@ -40,9 +40,11 @@ export declare const schema: {
40
40
  };
41
41
  };
42
42
  export declare function chromiumManifestVersion(projectPath: string, browser: string): 2 | 3 | null;
43
+ export declare function geckoManifestVersion(projectPath: string, browser: string): 2 | 3 | null;
43
44
  export declare function resolveDefaultEvalContext(projectPath: string, browser: string): "background" | "page";
44
45
  export { EXTENSION_PAGE_CONTEXTS };
45
46
  export declare function wantsExtensionPageOverCdp(projectPath: string, browser: string, context: string | undefined, url: string | undefined): boolean;
47
+ export declare function isBrowserErrorPage(url: string): boolean;
46
48
  export declare function handler(args: ActArgs & {
47
49
  expression: string;
48
50
  }): Promise<string>;
@@ -1,5 +1,6 @@
1
1
  import { surfaceForExtensionUrl } from "../lib/extension-surfaces";
2
2
  export { surfaceForExtensionUrl };
3
+ export declare function executeScriptExpression(urlFilter: string | undefined, code: string): string;
3
4
  export declare function inspectViaBridge(args: {
4
5
  projectPath: string;
5
6
  url?: string;
@@ -1 +1 @@
1
- export declare function clearLocalCredentials(): Promise<string>;
1
+ export declare function clearLocalCredentials(project?: string): Promise<string>;
@@ -1,6 +1,10 @@
1
1
  import { type ActArgs } from "../lib/act";
2
2
  export declare const OVERRIDE_SURFACES: string[];
3
- export declare function navigateToUrl(projectPath: string, browser: string, url: string, timeout?: number): Promise<string>;
3
+ export interface NavigateOptions {
4
+ reuse?: "blank" | "surface";
5
+ tab?: number;
6
+ }
7
+ export declare function navigateToUrl(projectPath: string, browser: string, url: string, timeout?: number, options?: NavigateOptions): Promise<string>;
4
8
  export declare function resolveExtensionId(projectPath: string, browser: string): Promise<string | null>;
5
9
  export declare function surfaceDocument(projectPath: string, browser: string, surface: string): string | null;
6
10
  export declare const SURFACE_MANIFEST_KEYS: Record<string, string>;
@@ -29,10 +33,27 @@ export declare const schema: {
29
33
  type: string;
30
34
  description: string;
31
35
  };
36
+ panel: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ waitMs: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ reload: {
45
+ type: string;
46
+ default: boolean;
47
+ description: string;
48
+ };
32
49
  url: {
33
50
  type: string;
34
51
  description: string;
35
52
  };
53
+ tab: {
54
+ type: string;
55
+ description: string;
56
+ };
36
57
  asTab: {
37
58
  type: string;
38
59
  default: boolean;
@@ -54,6 +75,9 @@ export declare function sessionIsHeadless(): boolean;
54
75
  export declare function handler(args: ActArgs & {
55
76
  surface?: string;
56
77
  name?: string;
78
+ panel?: string;
79
+ waitMs?: number;
80
+ reload?: boolean;
57
81
  url?: string;
58
82
  asTab?: boolean;
59
83
  }): Promise<string>;
@@ -8,9 +8,13 @@ export declare const schema: {
8
8
  readonly type: "string";
9
9
  readonly description: "Extension project root";
10
10
  };
11
+ project: {
12
+ readonly type: "string";
13
+ readonly description: "Which stored login to use, as '<workspace>/<project>' (or a project slug that matches one login), when extension_auth has signed in to more than one project on this machine. Omitted, the most recent login is used, after EXTENSION_DEV_TOKEN when that is set. Named, it outranks EXTENSION_DEV_TOKEN. extension_auth (action: status) lists the stored logins.";
14
+ };
11
15
  browser: {
12
16
  type: string;
13
- enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "safari"];
17
+ enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "zen", "floorp", "safari"];
14
18
  default: string;
15
19
  description: string;
16
20
  };
@@ -39,7 +43,7 @@ export declare const schema: {
39
43
  };
40
44
  openIn: {
41
45
  type: string;
42
- enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "safari"];
46
+ enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "zen", "floorp", "safari"];
43
47
  description: string;
44
48
  };
45
49
  share: {
@@ -61,4 +65,5 @@ export declare function handler(args: {
61
65
  open?: boolean;
62
66
  openIn?: string;
63
67
  share?: boolean;
68
+ project?: string;
64
69
  }): Promise<string>;
@@ -39,6 +39,19 @@ export declare const schema: {
39
39
  default: string;
40
40
  description: string;
41
41
  };
42
+ browsers: {
43
+ type: string;
44
+ items: {
45
+ type: string;
46
+ enum: string[];
47
+ };
48
+ default: string[];
49
+ description: string;
50
+ };
51
+ outputDirectories: {
52
+ type: string;
53
+ description: string;
54
+ };
42
55
  deviceCode: {
43
56
  type: string;
44
57
  description: string;
@@ -60,6 +73,8 @@ export declare function handler(args: {
60
73
  installCommand?: string;
61
74
  buildCommand?: string;
62
75
  outputDirectory?: string;
76
+ browsers?: string[];
77
+ outputDirectories?: Record<string, unknown>;
63
78
  deviceCode?: string;
64
79
  api?: string;
65
80
  }): Promise<string>;
@@ -4,6 +4,10 @@ export declare const schema: {
4
4
  inputSchema: {
5
5
  type: "object";
6
6
  properties: {
7
+ project: {
8
+ readonly type: "string";
9
+ readonly description: "Which stored login to use, as '<workspace>/<project>' (or a project slug that matches one login), when extension_auth has signed in to more than one project on this machine. Omitted, the most recent login is used, after EXTENSION_DEV_TOKEN when that is set. Named, it outranks EXTENSION_DEV_TOKEN. extension_auth (action: status) lists the stored logins.";
10
+ };
7
11
  ttlHours: {
8
12
  type: string;
9
13
  description: string;
@@ -21,6 +25,7 @@ export declare const schema: {
21
25
  };
22
26
  };
23
27
  export declare function handler(args: {
28
+ project?: string;
24
29
  ttlHours?: number;
25
30
  buildSha?: string;
26
31
  api?: string;
@@ -4,6 +4,10 @@ export declare const schema: {
4
4
  inputSchema: {
5
5
  type: "object";
6
6
  properties: {
7
+ project: {
8
+ readonly type: "string";
9
+ readonly description: "Which stored login to use, as '<workspace>/<project>' (or a project slug that matches one login), when extension_auth has signed in to more than one project on this machine. Omitted, the most recent login is used, after EXTENSION_DEV_TOKEN when that is set. Named, it outranks EXTENSION_DEV_TOKEN. extension_auth (action: status) lists the stored logins.";
10
+ };
7
11
  buildId: {
8
12
  type: string;
9
13
  description: string;
@@ -52,4 +56,5 @@ export declare function handler(args: {
52
56
  releaseNotes?: string;
53
57
  approvalId?: string;
54
58
  api?: string;
59
+ project?: string;
55
60
  }): Promise<string>;
@@ -4,6 +4,10 @@ export declare const schema: {
4
4
  inputSchema: {
5
5
  type: "object";
6
6
  properties: {
7
+ project: {
8
+ readonly type: "string";
9
+ readonly description: "Which stored login to use, as '<workspace>/<project>' (or a project slug that matches one login), when extension_auth has signed in to more than one project on this machine. Omitted, the most recent login is used, after EXTENSION_DEV_TOKEN when that is set. Named, it outranks EXTENSION_DEV_TOKEN. extension_auth (action: status) lists the stored logins.";
10
+ };
7
11
  action: {
8
12
  type: string;
9
13
  enum: string[];
@@ -53,4 +57,5 @@ export declare function handler(args: {
53
57
  status?: string;
54
58
  limit?: number;
55
59
  api?: string;
60
+ project?: string;
56
61
  }): Promise<string>;
@@ -42,7 +42,7 @@ export declare const schema: {
42
42
  };
43
43
  browser: {
44
44
  readonly type: "string";
45
- readonly enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "safari", "chromium-based", "gecko-based", "firefox-based", "webkit-based"];
45
+ readonly enum: readonly ["chrome", "chromium", "edge", "brave", "opera", "vivaldi", "yandex", "firefox", "waterfox", "librewolf", "zen", "floorp", "safari", "chromium-based", "gecko-based", "firefox-based", "webkit-based"];
46
46
  readonly default: "chrome";
47
47
  };
48
48
  build: {
@@ -64,6 +64,10 @@ export declare const schema: {
64
64
  default: boolean;
65
65
  description: string;
66
66
  };
67
+ outputPath: {
68
+ type: string;
69
+ description: string;
70
+ };
67
71
  };
68
72
  required: string[];
69
73
  };
@@ -75,4 +79,5 @@ export declare function handler(args: {
75
79
  polyfill?: boolean;
76
80
  port?: number;
77
81
  noBrowser?: boolean;
82
+ outputPath?: string;
78
83
  } & LaunchFlagArgs): Promise<string>;
@@ -1,5 +1,6 @@
1
1
  export declare function storeMdWarnings(browsers: string[], cwd: string): string[];
2
2
  export interface SubmitToolArgs {
3
+ project?: string;
3
4
  browsers: string[];
4
5
  buildSha: string;
5
6
  channel?: string;
@@ -15,6 +16,10 @@ export declare const schema: {
15
16
  inputSchema: {
16
17
  type: "object";
17
18
  properties: {
19
+ project: {
20
+ readonly type: "string";
21
+ readonly description: "Which stored login to use, as '<workspace>/<project>' (or a project slug that matches one login), when extension_auth has signed in to more than one project on this machine. Omitted, the most recent login is used, after EXTENSION_DEV_TOKEN when that is set. Named, it outranks EXTENSION_DEV_TOKEN. extension_auth (action: status) lists the stored logins.";
22
+ };
18
23
  browsers: {
19
24
  type: string;
20
25
  items: {
@@ -0,0 +1,42 @@
1
+ export declare const schema: {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: {
5
+ type: "object";
6
+ properties: {
7
+ workspace: {
8
+ type: string;
9
+ description: string;
10
+ };
11
+ displayName: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ description: {
16
+ type: string;
17
+ description: string;
18
+ };
19
+ developerUrl: {
20
+ type: string;
21
+ description: string;
22
+ };
23
+ deviceCode: {
24
+ type: string;
25
+ description: string;
26
+ };
27
+ api: {
28
+ readonly type: "string";
29
+ readonly description: "Platform base URL (default EXTENSION_DEV_API_URL, else https://www.extension.dev)";
30
+ };
31
+ };
32
+ required: string[];
33
+ };
34
+ };
35
+ export declare function handler(args: {
36
+ workspace: string;
37
+ displayName?: string;
38
+ description?: string;
39
+ developerUrl?: string;
40
+ deviceCode?: string;
41
+ api?: string;
42
+ }): Promise<string>;