@sidecar-ai/compiler 0.1.0-alpha.11 → 0.1.0-alpha.13
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/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/core/src/index.ts","../../packages/compiler/src/analyze.ts","../../packages/compiler/src/ast.ts","../../packages/compiler/src/errors.ts","../../packages/compiler/src/project.ts","../../packages/compiler/src/utils.ts","../../packages/compiler/src/schema.ts","../../packages/compiler/src/runtime-schema.ts","../../packages/compiler/src/widgets.ts","../../packages/compiler/src/build.ts","../../packages/compiler/src/config.ts","../../packages/compiler/src/diagnostics.ts","../../packages/compiler/src/generated.ts","../../packages/compiler/src/identity.ts","../../packages/compiler/src/plugins.ts","../../packages/compiler/src/plugin-components/agents.ts","../../packages/compiler/src/plugin-components/commands.ts","../../packages/compiler/src/plugin-components/hooks.ts","../../packages/compiler/src/plugin-components/passthrough.ts","../../packages/compiler/src/plugin-components/skills.ts","../../packages/compiler/src/prompts.ts","../../packages/compiler/src/resources.ts","../../packages/compiler/src/server-output.ts"],"sourcesContent":["/**\n * Core Sidecar authoring primitives.\n *\n * This package intentionally has no host or transport dependency. It defines\n * the stable contracts used by the compiler, MCP runtime, auth package, and\n * widget bridge.\n */\nexport type JsonPrimitive = string | number | boolean | null;\n\n/** JSON-compatible data accepted in MCP structured content and metadata. */\nexport type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\n\n/** JSON object shorthand used by MCP content blocks and descriptors. */\nexport type JsonObject = { [key: string]: JsonValue };\n\n/** Value that may be returned synchronously or asynchronously. */\nexport type MaybePromise<T> = T | Promise<T>;\n\n/** MIME type required for HTML MCP Apps resources. */\nexport const MCP_APP_RESOURCE_MIME_TYPE = \"text/html;profile=mcp-app\";\n\n/** Project-level metadata declared from `sidecar.config.ts`. */\nexport type SidecarConfig = {\n /** Human-readable app/server name used in generated manifests. */\n name: string;\n /** Semver-ish app version used in generated manifests and plugin output. */\n version: string;\n /** Short app description used by hosts and generated install docs. */\n description: string;\n /** Build defaults used when CLI flags do not override them. */\n build?: BuildConfig;\n /** Server-level MCP resource capabilities. */\n resources?: ResourceCapabilityConfig;\n /** Server-level MCP prompt capabilities. */\n prompts?: PromptCapabilityConfig;\n /** Server-level MCP tool capabilities. */\n tools?: ToolCapabilityConfig;\n /** Cursor pagination defaults for MCP list operations. */\n pagination?: PaginationConfig;\n /** Optional code-mode transform that exposes a small tool catalog backed by generated code. */\n codeMode?: boolean | CodeModeConfig;\n /** Enables project-owned remote execution through reserved `remote.ts`. */\n remoteExecution?: boolean;\n};\n\n/** Build target profile selected by reserved platform file suffixes. */\nexport type BuildTarget = \"mcp\" | \"chatgpt\" | \"claude\";\n\n/** Host runtime artifact emitted for a build output. */\nexport type BuildHost = \"node\" | \"vercel\";\n\n/** Project-level build defaults. CLI flags always take precedence. */\nexport type BuildConfig = {\n /** Default target profile for `sidecar build`. */\n target?: BuildTarget;\n /** Default host artifact for `sidecar build`. Vercel also auto-selects this when `VERCEL=1`. */\n host?: BuildHost;\n /** Default output directory. Leave unset for host-specific defaults. */\n outDir?: string;\n /** Whether `sidecar build` should emit installable plugin packages by default. */\n plugins?: boolean;\n /** Optional widget bundler extensions. Sidecar still owns the wrapper and output shape. */\n widgets?: WidgetBuildConfig;\n};\n\n/** Project-level widget bundler extensions. */\nexport type WidgetBuildConfig = {\n /** Static esbuild option extensions for every widget bundle. */\n esbuild?: WidgetEsbuildConfig;\n /** Optional TS/JS module path that default-exports a widget bundler hook. */\n configure?: string;\n};\n\n/** Serializable esbuild options Sidecar can read statically from config. */\nexport type WidgetEsbuildConfig = {\n /** Package/path aliases merged with Sidecar's own aliases. Relative replacements resolve from the project root. */\n alias?: Record<string, string>;\n /** Compile-time constants, usually JSON.stringify(...) values. */\n define?: Record<string, string>;\n /** Package names or paths to keep external. */\n external?: string[];\n /** Extra esbuild loaders keyed by extension, for example `{ \".svg\": \"text\" }`. */\n loader?: Record<string, string>;\n /** Package export conditions. */\n conditions?: string[];\n /** Package main fields. */\n mainFields?: string[];\n /** JSX transform mode. Defaults to `automatic`. */\n jsx?: \"automatic\" | \"transform\" | \"preserve\";\n /** JSX import source used with the automatic runtime. */\n jsxImportSource?: string;\n};\n\n/** Esbuild-like option bag exposed to `defineWidgetBundler()` without making core depend on esbuild. */\nexport type WidgetBundlerEsbuildOptions = WidgetEsbuildConfig & {\n nodePaths?: string[];\n plugins?: unknown[];\n [key: string]: unknown;\n};\n\n/** Widget identity passed to a project-level bundler hook. */\nexport type WidgetBundlerHookWidget = {\n toolId: string;\n toolName: string;\n target: BuildTarget;\n sourceFile: string;\n};\n\n/** Input passed to a project-level bundler hook. */\nexport type WidgetBundlerHookInput<Options = WidgetBundlerEsbuildOptions> = {\n rootDir: string;\n outDir: string;\n entryFile: string;\n widget: WidgetBundlerHookWidget;\n esbuildOptions: Options;\n};\n\n/** Result returned by a project-level bundler hook. */\nexport type WidgetBundlerHookResult<Options = WidgetBundlerEsbuildOptions> =\n | void\n | Options\n | {\n esbuildOptions?: Options;\n };\n\n/** Project-level hook for extending widget bundling without replacing Sidecar's wrapper. */\nexport type WidgetBundlerHook<Options = WidgetBundlerEsbuildOptions> = (\n input: WidgetBundlerHookInput<Options>\n) => MaybePromise<WidgetBundlerHookResult<Options>>;\n\n/** MCP list operations that support cursor pagination. */\nexport type McpListOperation =\n | \"tools/list\"\n | \"resources/list\"\n | \"resources/templates/list\"\n | \"prompts/list\";\n\n/** Configures server-level resource capabilities. */\nexport type ResourceCapabilityConfig = {\n /** Whether the runtime accepts `resources/subscribe` and `resources/unsubscribe`. */\n subscribe?: boolean;\n /** Whether the runtime may emit `notifications/resources/list_changed`. */\n listChanged?: boolean;\n};\n\n/** Configures server-level prompt capabilities. */\nexport type PromptCapabilityConfig = {\n /** Whether the runtime may emit `notifications/prompts/list_changed`. */\n listChanged?: boolean;\n};\n\n/** Configures server-level tool capabilities. */\nexport type ToolCapabilityConfig = {\n /** Whether the runtime may emit `notifications/tools/list_changed`. */\n listChanged?: boolean;\n};\n\n/** Context passed to project-level pagination overrides. */\nexport type PaginationContext<Auth = unknown> = {\n operation: McpListOperation;\n cursor?: string;\n pageSize: number;\n auth?: Auth;\n};\n\n/** Input accepted by a project-level pagination override. */\nexport type PaginationOverrideInput<Item = unknown, Auth = unknown> =\n PaginationContext<Auth> & {\n items: readonly Item[];\n };\n\n/** Result returned by a project-level pagination override. */\nexport type PaginationResult<Item = unknown> = {\n items: readonly Item[];\n nextCursor?: string;\n};\n\n/** Custom pagination function used for one or more MCP list operations. */\nexport type PaginationOverride<Item = unknown, Auth = unknown> = (\n input: PaginationOverrideInput<Item, Auth>\n) => MaybePromise<PaginationResult<Item>>;\n\n/** Operation-specific pagination overrides. Specific keys win over `default`. */\nexport type PaginationOverrideMap<Auth = unknown> = {\n default?: PaginationOverride<unknown, Auth>;\n toolsList?: PaginationOverride<unknown, Auth>;\n resourcesList?: PaginationOverride<unknown, Auth>;\n resourceTemplatesList?: PaginationOverride<unknown, Auth>;\n promptsList?: PaginationOverride<unknown, Auth>;\n};\n\n/** Project-level cursor pagination config. */\nexport type PaginationConfig<Auth = unknown> = {\n /** Server-chosen page size. Clients must treat cursors as opaque and must not assume this value. */\n pageSize?: number;\n /** One override for all list operations, or specific overrides keyed by operation. */\n override?: PaginationOverride<unknown, Auth> | PaginationOverrideMap<Auth>;\n};\n\n/** Strategy used by the generated code-mode widget when several internal tools can render UI. */\nexport type CodeModeRenderStrategy =\n | \"last-renderable\"\n | \"first-renderable\"\n | \"explicit\";\n\n/** UI rendering behavior for code-mode tool results. */\nexport type CodeModeRenderConfig = {\n /** Whether the public `execute_code` tool should advertise a dynamic widget. */\n enabled?: boolean;\n /** How Sidecar chooses an internal widget result when generated code calls several tools. */\n strategy?: CodeModeRenderStrategy;\n};\n\n/** Configures Sidecar's code-mode transform. */\nexport type CodeModeConfig = {\n /** Runs generated code directly in the MCP server process. Intended only for trusted/local use. */\n unsafe?: boolean;\n /** Dynamic widget selection behavior for code-mode results. */\n render?: boolean | CodeModeRenderConfig;\n};\n\n/** File emitted into a remote executor workspace for one code-mode run. */\nexport type RemoteRunFile = {\n path: string;\n text: string;\n};\n\n/** Code-mode work package passed to `remote.ts`. */\nexport type RemoteCodeRun = {\n /** Stable id for this code-mode invocation. */\n id: string;\n /** Files Sidecar generated for the remote executor. */\n files: RemoteRunFile[];\n /** Command the executor should run after writing `files`. */\n command: string[];\n /** Sidecar-generated environment only. App/provider secrets are intentionally not included. */\n env: Record<string, string>;\n /** Maximum runtime Sidecar expects the executor to enforce. */\n timeoutMs: number;\n};\n\n/** Result returned by `remote.ts` after the generated runner exits. */\nexport type RemoteExecutionResult = {\n exitCode: number;\n stdout: string;\n stderr?: string;\n};\n\n/** Context passed to a project-owned remote executor. */\nexport type RemoteExecutionContext = {\n log: Logger;\n};\n\n/** Reserved `remote.ts` definition used by code mode remote execution. */\nexport type RemoteExecutionDefinition = {\n execute(\n run: RemoteCodeRun,\n ctx: RemoteExecutionContext,\n ): MaybePromise<RemoteExecutionResult>;\n};\n\n/** Options accepted by the built-in offset cursor pagination helper. */\nexport type OffsetPaginationOptions<Item> = {\n items: readonly Item[];\n cursor?: string;\n pageSize: number;\n};\n\n/**\n * Paginates an in-memory list with opaque offset cursors.\n *\n * Use this inside `pagination.override` when you want Sidecar's standard\n * cursor behavior after applying app-specific filtering or sorting.\n */\nexport function offsetPagination<Item>(\n options: OffsetPaginationOptions<Item>,\n): PaginationResult<Item> {\n const offset = options.cursor ? decodeOffsetCursor(options.cursor) : 0;\n const pageSize = options.pageSize > 0 ? Math.floor(options.pageSize) : 50;\n const page = options.items.slice(offset, offset + pageSize);\n const nextOffset = offset + page.length;\n return {\n items: page,\n nextCursor: nextOffset < options.items.length\n ? encodeOffsetCursor(nextOffset)\n : undefined,\n };\n}\n\n/** MCP content block variants Sidecar currently normalizes. */\nexport type McpContentBlock =\n | { type: \"text\"; text: string }\n | { type: \"image\"; data: string; mimeType: string }\n | { type: \"audio\"; data: string; mimeType: string }\n | { type: \"resource\"; resource: JsonObject };\n\n/** Minimal JSON Schema shape Sidecar needs for MCP tool descriptors. */\nexport type JsonSchema = {\n $schema?: string;\n type?: string | string[];\n title?: string;\n description?: string;\n properties?: Record<string, JsonSchema>;\n required?: string[];\n additionalProperties?: boolean | JsonSchema;\n items?: JsonSchema;\n enum?: JsonValue[];\n const?: JsonValue;\n anyOf?: JsonSchema[];\n oneOf?: JsonSchema[];\n allOf?: JsonSchema[];\n default?: JsonValue;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n minItems?: number;\n maxItems?: number;\n pattern?: string;\n format?: string;\n};\n\n/** Descriptor-level auth scheme advertised to MCP/App clients. */\nexport type SecurityScheme =\n | { type: \"noauth\" }\n | {\n type: \"oauth2\";\n scopes: string[];\n };\n\n/** MCP tool annotation hints used by hosts to understand tool behavior. */\nexport type ToolAnnotations = {\n /** Human-facing display title. Defaults to the tool name. */\n title?: string;\n /** True when the tool only reads data and has no side effects. */\n readOnlyHint?: boolean;\n /** True when the tool may perform destructive updates. Meaningful only for non-read-only tools. */\n destructiveHint?: boolean;\n /** True when repeating the same call has no extra effect. Meaningful only for non-read-only tools. */\n idempotentHint?: boolean;\n /** True when the tool may interact with external systems outside the current account/control boundary. */\n openWorldHint?: boolean;\n};\n\n/** Shared MCP annotations for resources, resource contents, and prompt content. */\nexport type ResourceAnnotations = {\n /** Intended audience for the annotated content. */\n audience?: readonly (\"user\" | \"assistant\")[];\n /** Relative importance from 0.0 to 1.0. */\n priority?: number;\n /** ISO 8601 timestamp describing when the content last changed. */\n lastModified?: string | Date;\n};\n\n/** Icon metadata supported by MCP resources and prompts. */\nexport type McpIcon = {\n src: string;\n mimeType?: string;\n sizes?: readonly string[];\n};\n\n/** User-friendly input accepted by `resourceResult()`. */\nexport type ResourceResultContentInput<\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = {\n /** Text, JSON-compatible data, or bytes returned by the resource. */\n content: string | JsonValue | Uint8Array | ArrayBuffer;\n /** Optional MIME type. Sidecar infers a conservative value when omitted. */\n mimeType?: string;\n /** Optional MCP annotations for this returned content block. */\n annotations?: ResourceAnnotations;\n /** Optional host/client-only metadata emitted as MCP `_meta`. */\n meta?: Meta;\n};\n\n/** Options accepted by `resourceResult()`. */\nexport type ResourceResultInput<\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = ResourceResultContentInput<Meta> | readonly ResourceResultContentInput<Meta>[];\n\ndeclare const resourceResultTypeBrand: unique symbol;\n\n/** Branded Sidecar result returned by every resource read. */\nexport type ResourceResult<\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = {\n readonly [resourceResultTypeBrand]: true;\n contents: ResourceResultContentInput<Meta>[];\n};\n\n/** MCP resource content emitted on the wire. */\nexport type McpResourceContent =\n | {\n uri: string;\n mimeType?: string;\n text: string;\n annotations?: ResourceAnnotations;\n _meta?: Record<string, unknown>;\n }\n | {\n uri: string;\n mimeType: string;\n blob: string;\n annotations?: ResourceAnnotations;\n _meta?: Record<string, unknown>;\n };\n\n/** Normalized MCP resource read result returned by the runtime. */\nexport type McpResourceReadResult = {\n contents: McpResourceContent[];\n _meta?: Record<string, unknown>;\n};\n\n/** Helper used by resources to return MCP-compliant content. */\nexport type ResourceResultFactory = {\n <Meta extends Record<string, unknown> = Record<string, unknown>>(\n input: ResourceResultInput<Meta>\n ): ResourceResult<Meta>;\n many<Meta extends Record<string, unknown> = Record<string, unknown>>(\n input: readonly ResourceResultContentInput<Meta>[]\n ): ResourceResult<Meta>;\n};\n\n/** Runtime context passed to a resource's `read` method. */\nexport type ResourceContext<Auth = unknown, Services = unknown> = {\n auth: Auth;\n request: ToolRequestContext;\n services: Services;\n log: Logger;\n storage: ScopedStorage;\n notify: RuntimeNotifications;\n env: Readonly<Record<string, string | undefined>>;\n};\n\n/** Author-facing definition accepted by `resource()`. */\nexport type ResourceDefinition<Auth = unknown, Services = unknown> = {\n /** Human-readable name shown to users and clients. */\n name: string;\n /** Optional stable MCP resource URI. Defaults to `sidecar://resources/<folder>`. */\n uri?: string;\n /** Optional display title when the machine-facing name is terse. */\n title?: string;\n /** Optional human-readable description. */\n description?: string;\n /** Optional MIME type advertised from `resources/list` and used as a result default. */\n mimeType?: string;\n /** Optional resource size in bytes. */\n size?: number;\n /** Optional MCP display icons. */\n icons?: readonly McpIcon[];\n /** Optional MCP annotations for the listed resource. */\n annotations?: ResourceAnnotations;\n /** Whether this resource is worth subscribing to when server subscribe is enabled. */\n subscribe?: boolean;\n /** Resource implementation. It may be synchronous or asynchronous. */\n read: (ctx: ResourceContext<Auth, Services>) => MaybePromise<ResourceResult>;\n};\n\n/** Branded Sidecar resource returned by `resource()`. */\nexport type SidecarResource<Auth = unknown, Services = unknown> =\n ResourceDefinition<Auth, Services> & {\n readonly kind: \"sidecar.resource\";\n };\n\n/** MCP descriptor emitted for `resources/list`. */\nexport type McpResourceDescriptor = {\n uri: string;\n name: string;\n title?: string;\n description?: string;\n mimeType?: string;\n size?: number;\n icons?: McpIcon[];\n annotations?: ResourceAnnotations;\n _meta?: Record<string, unknown>;\n};\n\n/** MCP resource template descriptor emitted for `resources/templates/list`. */\nexport type McpResourceTemplateDescriptor = {\n uriTemplate: string;\n name: string;\n title?: string;\n description?: string;\n mimeType?: string;\n icons?: McpIcon[];\n annotations?: ResourceAnnotations;\n _meta?: Record<string, unknown>;\n};\n\n/** Shorthand argument forms accepted by `prompt({ args })`. */\nexport type PromptArgInput =\n | string\n | readonly JsonPrimitive[]\n | {\n description?: string;\n required?: boolean;\n };\n\n/** Prompt argument schema declared in normal TypeScript objects. */\nexport type PromptArgsDefinition = Record<string, PromptArgInput>;\n\n/** MCP prompt argument descriptor emitted for `prompts/list`. */\nexport type McpPromptArgument = {\n name: string;\n description?: string;\n required?: boolean;\n};\n\n/** MCP prompt descriptor emitted for `prompts/list`. */\nexport type McpPromptDescriptor = {\n name: string;\n title?: string;\n description?: string;\n arguments?: McpPromptArgument[];\n icons?: McpIcon[];\n};\n\n/** MCP prompt message content. */\nexport type McpPromptContent = McpContentBlock;\n\n/** MCP prompt message emitted by `prompts/get`. */\nexport type McpPromptMessage = {\n role: \"user\" | \"assistant\";\n content: McpPromptContent;\n};\n\n/** User-friendly value accepted from `prompt().run`. */\nexport type PromptResultInput =\n | string\n | McpPromptMessage\n | McpPromptMessage[]\n | {\n description?: string;\n messages: McpPromptMessage[];\n };\n\n/** Normalized MCP prompt result returned by the runtime. */\nexport type McpPromptResult = {\n description?: string;\n messages: McpPromptMessage[];\n};\n\n/** Runtime context passed to a prompt's `run` method. */\nexport type PromptContext<Auth = unknown, Services = unknown> = {\n auth: Auth;\n request: ToolRequestContext;\n services: Services;\n log: Logger;\n storage: ScopedStorage;\n notify: RuntimeNotifications;\n env: Readonly<Record<string, string | undefined>>;\n};\n\n/** Author-facing definition accepted by `prompt()`. */\nexport type PromptDefinition<\n Args extends Record<string, unknown> = Record<string, unknown>,\n Auth = unknown,\n Services = unknown,\n> = {\n /** Optional MCP prompt machine name. Defaults to the folder name. */\n name?: string;\n /** Human-readable display title. */\n title: string;\n /** Optional human-readable description. */\n description?: string;\n /** Optional simple argument declarations. */\n args?: PromptArgsDefinition;\n /** Optional MCP display icons. */\n icons?: readonly McpIcon[];\n /** Prompt implementation. Returning a string creates one user text message. */\n run: (args: Args, ctx: PromptContext<Auth, Services>) => MaybePromise<PromptResultInput>;\n};\n\n/** Branded Sidecar prompt returned by `prompt()`. */\nexport type SidecarPrompt<\n Args extends Record<string, unknown> = Record<string, unknown>,\n Auth = unknown,\n Services = unknown,\n> = PromptDefinition<Args, Auth, Services> & {\n readonly kind: \"sidecar.prompt\";\n};\n\n/** Controls which callers can see or call a tool. */\nexport type ToolVisibility = {\n model?: boolean;\n widgets?: boolean | string[];\n tools?: boolean | string[];\n};\n\n/** ChatGPT compatibility metadata for tool descriptors. */\nexport type ChatGptToolOptions = {\n /** Short status shown while ChatGPT is invoking the tool. */\n invoking?: string;\n /** Short status shown after ChatGPT has invoked the tool. */\n invoked?: string;\n /** Compatibility hint for legacy ChatGPT clients that allow widget tool calls. */\n widgetAccessible?: boolean;\n /** Compatibility visibility hint for legacy ChatGPT clients. */\n visibility?: \"public\" | \"private\";\n /** Top-level input fields that receive ChatGPT file references. */\n fileParams?: readonly string[];\n};\n\n/** Descriptor target used when filtering host-specific metadata. */\nexport type ToolDescriptorTarget = \"mcp\" | \"chatgpt\" | \"claude\";\n\n/** Widget CSP allowlists emitted on the MCP Apps resource metadata. */\nexport type WidgetCspOptions = {\n /** Domains the widget may contact with fetch/XHR. */\n connectDomains?: readonly string[];\n /** Domains the widget may use for static resources. */\n resourceDomains?: readonly string[];\n /** Origins allowed for subframes. Omit unless the widget embeds iframes. */\n frameDomains?: readonly string[];\n /** Allowed base URI origins. Omit to let hosts enforce the secure default. */\n baseUriDomains?: readonly string[];\n};\n\n/** Browser permissions an MCP Apps host may grant to a widget iframe. */\nexport type WidgetPermissionOptions = {\n camera?: boolean;\n microphone?: boolean;\n geolocation?: boolean;\n clipboardWrite?: boolean;\n};\n\n/** ChatGPT-only widget compatibility options. */\nexport type ChatGptWidgetOptions = {\n /** Dedicated widget origin for broad ChatGPT distribution. */\n domain?: string;\n /** Redirect targets for ChatGPT external-link handling. */\n redirectDomains?: readonly string[];\n};\n\n/** Widget resource metadata declared by `widget(...)` in a sibling widget file. */\nexport type ToolWidgetOptions = {\n /** Host-facing summary of what the rendered widget shows. */\n description?: string;\n /** Whether the widget prefers a host-provided border. */\n prefersBorder?: boolean;\n /** Optional dedicated sandbox origin. Host-specific validation still applies. */\n domain?: string;\n /** Standard MCP Apps CSP allowlists. */\n csp?: WidgetCspOptions;\n /** Standard MCP Apps iframe permission requests. */\n permissions?: WidgetPermissionOptions;\n /** Host-specific widget compatibility metadata. */\n hosts?: {\n chatgpt?: ChatGptWidgetOptions;\n };\n};\n\n/** Host-specific extension options. Keep standard MCP fields primary. */\nexport type ToolHostExtensions = {\n chatgpt?: ChatGptToolOptions;\n};\n\n/** Typed auth scope object imported by tool files. */\nexport type AuthScopeDefinition<\n Id extends string = string,\n Auth = unknown,\n> = {\n readonly kind: \"sidecar.scope\";\n readonly id: Id;\n readonly description: string;\n readonly __auth?: Auth;\n};\n\n/** Per-tool authorization policy. Omitted policy means public tool. */\nexport type ToolAuthPolicy<Auth = unknown> =\n | {\n /** This tool intentionally does not require an authenticated session. */\n public: true;\n authenticated?: never;\n scopes?: never;\n }\n | {\n /** This tool requires a valid authenticated session but no specific scope. */\n authenticated: true;\n public?: false;\n scopes?: never;\n }\n | {\n /** This tool requires an authenticated session with every listed scope. */\n scopes: readonly AuthScopeDefinition<string, Auth>[];\n public?: false;\n authenticated?: true;\n };\n\ndeclare const toolResultTypeBrand: unique symbol;\n\n/** User-friendly content accepted by `toolResult()`. */\nexport type ToolResultContent = string | McpContentBlock | McpContentBlock[];\n\n/** Options for a tool result that only needs model-visible content. */\nexport type TextToolResultInput<\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = {\n /** Required model-visible content. Sidecar normalizes strings to MCP text blocks. */\n content: ToolResultContent;\n /** Optional host/widget-only data emitted as MCP `_meta`. */\n meta?: Meta;\n /** Marks the tool result as an error while preserving normal MCP result channels. */\n isError?: boolean;\n /** Omitted for content-only results. */\n structuredContent?: undefined;\n};\n\n/** Options for a tool result with typed structured content. */\nexport type StructuredToolResultInput<\n Structured,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = {\n /** Typed machine-readable output validated against the tool output schema when present. */\n structuredContent: Structured;\n /** Required model-visible content. Sidecar normalizes strings to MCP text blocks. */\n content: ToolResultContent;\n /** Optional host/widget-only data emitted as MCP `_meta`. */\n meta?: Meta;\n /** Marks the tool result as an error while preserving normal MCP result channels. */\n isError?: boolean;\n};\n\n/** Options accepted by `toolResult()`. */\nexport type ToolResultInput<\n Structured = undefined,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = [Structured] extends [undefined]\n ? TextToolResultInput<Meta>\n : StructuredToolResultInput<Structured, Meta>;\n\n/** Branded Sidecar result returned by every tool execution. */\nexport type ToolResult<\n Structured = undefined,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = {\n readonly [toolResultTypeBrand]: true;\n content: McpContentBlock[];\n _meta?: Meta;\n isError?: boolean;\n} & ([Structured] extends [undefined]\n ? { structuredContent?: Structured }\n : { structuredContent: Structured });\n\n/** Normalized MCP tool result returned by the runtime. */\nexport type McpToolResult = {\n structuredContent?: unknown;\n content: McpContentBlock[];\n _meta?: Record<string, unknown>;\n isError?: boolean;\n};\n\n/** Helper used by tools to return MCP-compliant result envelopes. */\nexport type ToolResultFactory = {\n <Meta extends Record<string, unknown> = Record<string, unknown>>(\n input: TextToolResultInput<Meta>\n ): ToolResult<undefined, Meta>;\n <Structured, Meta extends Record<string, unknown> = Record<string, unknown>>(\n input: StructuredToolResultInput<Structured, Meta>\n ): ToolResult<Structured, Meta>;\n text(text: string): McpContentBlock;\n error<\n Structured = undefined,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n >(\n message: string,\n options?: Omit<ToolResultInput<Structured, Meta>, \"content\" | \"isError\">\n ): ToolResult<Structured, Meta>;\n};\n\n/** Logger surface exposed in `ToolContext`. */\nexport type Logger = {\n debug(message: string, data?: Record<string, unknown>): void;\n info(message: string, data?: Record<string, unknown>): void;\n warn(message: string, data?: Record<string, unknown>): void;\n error(message: string, data?: Record<string, unknown>): void;\n};\n\n/** Minimal tracing hook exposed in `ToolContext`. */\nexport type Trace = {\n span<T>(name: string, run: () => MaybePromise<T>): Promise<T>;\n};\n\n/** Tool-scoped storage abstraction for runtimes that provide persistence. */\nexport type ScopedStorage = {\n get<T = unknown>(key: string): Promise<T | undefined>;\n set<T = unknown>(key: string, value: T): Promise<void>;\n delete(key: string): Promise<void>;\n};\n\n/** Opaque MCP progress token supplied by a client in request `_meta`. */\nexport type ProgressToken = string | number;\n\n/** Progress update payload emitted as `notifications/progress`. */\nexport type ToolProgressUpdate = {\n /** Monotonically increasing progress value for the active request. */\n progress: number;\n /** Optional total value when the total work is known. */\n total?: number;\n /** Optional short human-readable progress message. */\n message?: string;\n};\n\n/** Typed notification helpers exposed to runtime code. */\nexport type RuntimeNotifications = {\n /** Emits `notifications/progress` when the client supplied a progress token. */\n progress(update: ToolProgressUpdate): MaybePromise<void>;\n /** Emits `notifications/tools/list_changed` on an available server SSE stream. */\n toolsChanged(): MaybePromise<void>;\n /** Emits `notifications/resources/list_changed` on an available server SSE stream. */\n resourcesChanged(): MaybePromise<void>;\n /** Emits `notifications/prompts/list_changed` on an available server SSE stream. */\n promptsChanged(): MaybePromise<void>;\n /** Emits `notifications/resources/updated` for one resource URI. */\n resourceUpdated(uri: string): MaybePromise<void>;\n};\n\n/** Request metadata supplied to each tool invocation. */\nexport type ToolRequestContext = {\n id: string;\n signal: AbortSignal;\n host: \"chatgpt\" | \"claude\" | \"unknown\";\n transport: \"streamable-http\" | \"stdio\";\n};\n\n/** Runtime context passed to a tool's `execute` method. */\nexport type ToolContext<Auth = unknown, Services = unknown, Tools = unknown> = {\n auth: Auth;\n request: ToolRequestContext;\n services: Services;\n tools: Tools;\n log: Logger;\n trace: Trace;\n storage: ScopedStorage;\n notify: RuntimeNotifications;\n env: Readonly<Record<string, string | undefined>>;\n};\n\n/** Small subset of Zod-like validation Sidecar can consume without depending on Zod. */\nexport type ZodLikeSchema<T = unknown> = {\n safeParse(value: unknown): { success: true; data: T } | { success: false; error: unknown };\n};\n\n/** Infers a params type from a validator if one is supplied. */\nexport type InferParams<T> = T extends ZodLikeSchema<infer Output> ? Output : T;\n\n/** Function signature for tool execution. */\nexport type ToolExecute<Params, Output, Auth = unknown, Services = unknown, Tools = unknown> = (\n params: Params,\n ctx: ToolContext<Auth, Services, Tools>\n) => MaybePromise<ToolResult<Output>>;\n\n/** Tool execute function with a runtime params validator attached. */\nexport type ToolExecuteWithParams<\n Schema extends ZodLikeSchema,\n Output,\n Auth = unknown,\n Services = unknown,\n Tools = unknown,\n> = ToolExecute<InferParams<Schema>, Output, Auth, Services, Tools> & {\n readonly kind: \"sidecar.withParams\";\n readonly params: Schema;\n};\n\n/** Author-facing definition accepted by `tool()`. */\nexport type ToolDefinition<Params = unknown, Output = unknown, Auth = unknown, Services = unknown, Tools = unknown> = {\n /** Human-readable name shown to users and models. */\n name: string;\n /** Optional MCP machine id. If omitted in a reserved tool file, Sidecar uses the folder name. */\n id?: string;\n /** Model-facing description. This should be specific enough for reliable tool selection. */\n description: string;\n /** Optional runtime validation schema. Zod schemas are supported directly. */\n params?: ZodLikeSchema<Params>;\n /** Optional output schema escape hatch. The compiler normally derives this from `execute`. */\n output?: JsonSchema;\n /** MCP tool behavior hints. */\n annotations?: ToolAnnotations;\n /** Optional visibility policy for model, widget, and tool callers. */\n visibility?: ToolVisibility;\n /** Optional host-specific compatibility metadata. */\n hosts?: ToolHostExtensions;\n /** Low-level descriptor metadata escape hatch. Prefer typed fields when available. */\n meta?: Record<string, unknown>;\n /** Optional authorization policy. Tools are public unless this is declared. */\n auth?: ToolAuthPolicy<Auth>;\n /** Tool implementation. It may be synchronous or asynchronous. */\n execute: ToolExecute<Params, Output, Auth, Services, Tools>;\n};\n\n/** Branded Sidecar tool returned by `tool()`. */\nexport type SidecarTool<Params = unknown, Output = unknown, Auth = unknown> = ToolDefinition<Params, Output, Auth> & {\n readonly kind: \"sidecar.tool\";\n};\n\n/** MCP descriptor emitted for `tools/list`. */\nexport type McpToolDescriptor = {\n name: string;\n title?: string;\n description: string;\n inputSchema: JsonSchema;\n outputSchema?: JsonSchema;\n securitySchemes?: SecurityScheme[];\n annotations?: ToolAnnotations;\n _meta?: Record<string, unknown>;\n};\n\n/** Typed skill declaration used by plugin generation. */\nexport type SkillDefinition = {\n /** Stable skill folder/name. */\n name: string;\n /** Short routing description for the host/model. */\n description: string;\n /** Markdown body emitted to SKILL.md. */\n body: string;\n};\n\nconst toolBrand = Symbol.for(\"sidecar.tool\");\nconst toolExecuteParamsBrand = Symbol.for(\"sidecar.withParams\");\nconst toolResultBrand = Symbol.for(\"sidecar.toolResult\");\nconst resourceBrand = Symbol.for(\"sidecar.resource\");\nconst resourceResultBrand = Symbol.for(\"sidecar.resourceResult\");\nconst promptBrand = Symbol.for(\"sidecar.prompt\");\nconst skillBrand = Symbol.for(\"sidecar.skill\");\nconst remoteBrand = Symbol.for(\"sidecar.remote\");\n\n/**\n * Declares app identity in `sidecar.config.ts`.\n *\n * The compiler reads the object statically, while the helper gives authors\n * editor completions for every supported config field.\n */\nexport function defineConfig(config: SidecarConfig): SidecarConfig {\n if (!config.name.trim()) {\n throw new SidecarDefinitionError(\"Project name is required.\");\n }\n if (!config.version.trim()) {\n throw new SidecarDefinitionError(`Project \"${config.name}\" must include a version.`);\n }\n if (!config.description.trim()) {\n throw new SidecarDefinitionError(`Project \"${config.name}\" must include a description.`);\n }\n\n return Object.freeze({ ...config });\n}\n\n/** Gives TS users completion when authoring `build.widgets.configure` modules. */\nexport function defineWidgetBundler<Options = WidgetBundlerEsbuildOptions>(\n hook: WidgetBundlerHook<Options>,\n): WidgetBundlerHook<Options> {\n return hook;\n}\n\n/** Declares the project-owned remote code executor in reserved `remote.ts`. */\nexport function remote(definition: RemoteExecutionDefinition): RemoteExecutionDefinition {\n if (typeof definition.execute !== \"function\") {\n throw new SidecarDefinitionError(\"remote({ ... }) must include an execute function.\");\n }\n\n return Object.freeze({\n ...definition,\n [remoteBrand]: true,\n });\n}\n\n/** Returns true when a value was produced by `remote()`. */\nexport function isSidecarRemote(value: unknown): value is RemoteExecutionDefinition {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (value as Record<symbol, unknown>)[remoteBrand] === true,\n );\n}\n\n/**\n * Attaches a runtime params validator directly to a tool execute function.\n *\n * This is the preferred Zod authoring path: `withParams(schema, execute)` keeps\n * runtime validation, JSON Schema generation, and TypeScript inference tied to\n * one schema value.\n */\nexport function withParams<\n Schema extends ZodLikeSchema,\n Output,\n Auth = unknown,\n Services = unknown,\n Tools = unknown,\n>(\n params: Schema,\n execute: ToolExecute<InferParams<Schema>, Output, Auth, Services, Tools>,\n): ToolExecuteWithParams<Schema, Output, Auth, Services, Tools> {\n Object.defineProperties(execute, {\n kind: {\n value: \"sidecar.withParams\",\n enumerable: false,\n },\n params: {\n value: params,\n enumerable: false,\n },\n [toolExecuteParamsBrand]: {\n value: true,\n enumerable: false,\n },\n });\n\n return execute as ToolExecuteWithParams<Schema, Output, Auth, Services, Tools>;\n}\n\n/**\n * Declares a Sidecar MCP tool.\n *\n * The compiler reads this object statically, while the server executes the\n * returned branded value at runtime.\n */\nexport function tool<Params, Output, Auth = unknown>(\n definition: ToolDefinition<Params, Output, Auth>\n): SidecarTool<Params, Output, Auth> {\n if (!definition.name.trim()) {\n throw new SidecarDefinitionError(\"Tool name is required.\");\n }\n if (!definition.description.trim()) {\n throw new SidecarDefinitionError(`Tool \"${definition.name}\" must include a description.`);\n }\n\n const executeParams = readExecuteParams(definition.execute);\n if (definition.params && executeParams) {\n throw new SidecarDefinitionError(\n `Tool \"${definition.name}\" declares params twice. Use either params: schema or execute: withParams(schema, fn), not both.`,\n );\n }\n\n return Object.freeze({\n ...definition,\n params: definition.params ?? executeParams,\n kind: \"sidecar.tool\" as const,\n [toolBrand]: true\n }) as SidecarTool<Params, Output, Auth>;\n}\n\n/** Returns true when a value was produced by `tool()`. */\nexport function isSidecarTool(value: unknown): value is SidecarTool {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n ((value as Record<symbol, unknown>)[toolBrand] ||\n (value as { kind?: unknown }).kind === \"sidecar.tool\"),\n );\n}\n\n/** Reads the validator attached by `withParams()`, if present. */\nfunction readExecuteParams<Params, Output, Auth, Services, Tools>(\n execute: ToolExecute<Params, Output, Auth, Services, Tools>,\n): ZodLikeSchema<Params> | undefined {\n if (\n !execute ||\n typeof execute !== \"function\" ||\n !((execute as unknown as Record<symbol, unknown>)[toolExecuteParamsBrand])\n ) {\n return undefined;\n }\n\n return (execute as ToolExecuteWithParams<ZodLikeSchema<Params>, unknown>).params;\n}\n\n/**\n * Declares a Sidecar MCP resource.\n *\n * The compiler fills default URIs from the reserved folder name, while the\n * runtime executes the returned branded value for `resources/read`.\n */\nexport function resource<Auth = unknown, Services = unknown>(\n definition: ResourceDefinition<Auth, Services>\n): SidecarResource<Auth, Services> {\n if (!definition.name.trim()) {\n throw new SidecarDefinitionError(\"Resource name is required.\");\n }\n if (definition.uri) {\n validateResourceUri(definition.uri);\n }\n\n return Object.freeze({\n ...definition,\n kind: \"sidecar.resource\" as const,\n [resourceBrand]: true\n }) as SidecarResource<Auth, Services>;\n}\n\n/** Returns true when a value was produced by `resource()`. */\nexport function isSidecarResource(value: unknown): value is SidecarResource {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n ((value as Record<symbol, unknown>)[resourceBrand] ||\n (value as { kind?: unknown }).kind === \"sidecar.resource\"),\n );\n}\n\n/**\n * Declares a Sidecar MCP prompt.\n *\n * The compiler fills default machine names from the reserved folder name and\n * converts `args` into MCP prompt argument descriptors.\n */\nexport function prompt<Args extends Record<string, unknown> = Record<string, unknown>, Auth = unknown>(\n definition: PromptDefinition<Args, Auth>\n): SidecarPrompt<Args, Auth> {\n if (!definition.title.trim()) {\n throw new SidecarDefinitionError(\"Prompt title is required.\");\n }\n\n return Object.freeze({\n ...definition,\n kind: \"sidecar.prompt\" as const,\n [promptBrand]: true\n }) as SidecarPrompt<Args, Auth>;\n}\n\n/** Returns true when a value was produced by `prompt()`. */\nexport function isSidecarPrompt(value: unknown): value is SidecarPrompt {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n ((value as Record<symbol, unknown>)[promptBrand] ||\n (value as { kind?: unknown }).kind === \"sidecar.prompt\"),\n );\n}\n\n/** Declares a generated skill that can be emitted as `SKILL.md`. */\nexport function skill(definition: SkillDefinition): SkillDefinition {\n if (!definition.name.trim()) {\n throw new SidecarDefinitionError(\"Skill name is required.\");\n }\n if (!definition.description.trim()) {\n throw new SidecarDefinitionError(`Skill \"${definition.name}\" must include a description.`);\n }\n\n return Object.freeze({\n ...definition,\n [skillBrand]: true\n });\n}\n\n/** Factory for standardized tool results and common content blocks. */\nexport const toolResult = Object.assign(\n createToolResult,\n {\n text(text: string): McpContentBlock {\n return { type: \"text\", text };\n },\n error<\n Structured = undefined,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n >(\n message: string,\n options: Omit<ToolResultInput<Structured, Meta>, \"content\" | \"isError\"> = {} as Omit<\n ToolResultInput<Structured, Meta>,\n \"content\" | \"isError\"\n >,\n ): ToolResult<Structured, Meta> {\n return createToolResult({\n ...options,\n structuredContent: (options as { structuredContent?: Structured }).structuredContent,\n content: message,\n isError: true\n } as ToolResultInput<Structured, Meta>);\n }\n }\n) as ToolResultFactory;\n\n/** Factory for standardized resource results. */\nexport const resourceResult = Object.assign(\n createResourceResult,\n {\n many<Meta extends Record<string, unknown> = Record<string, unknown>>(\n input: readonly ResourceResultContentInput<Meta>[],\n ): ResourceResult<Meta> {\n return createResourceResult(input);\n },\n },\n) as ResourceResultFactory;\n\n/** Creates and brands one standardized Sidecar tool result. */\nfunction createToolResult<\n Structured,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n>(input: ToolResultInput<Structured, Meta>): ToolResult<Structured, Meta> {\n const resultEnvelope = stripUndefined({\n structuredContent: stripJsonUndefined(input.structuredContent),\n content: normalizeRequiredContent(input.content),\n _meta: stripJsonUndefined(input.meta) as Meta | undefined,\n isError: input.isError\n }) as unknown as ToolResult<Structured, Meta>;\n\n Object.defineProperty(resultEnvelope, toolResultBrand, {\n enumerable: false,\n value: true\n });\n\n return resultEnvelope;\n}\n\n/** Creates and brands one standardized Sidecar resource result. */\nfunction createResourceResult<\n Meta extends Record<string, unknown> = Record<string, unknown>,\n>(input: ResourceResultInput<Meta>): ResourceResult<Meta> {\n const contents = Array.isArray(input) ? [...input] : [input];\n if (!contents.length) {\n throw new SidecarRuntimeError(\n \"resourceResult(...) must include at least one content item.\",\n \"invalid_resource_result\",\n );\n }\n\n const resultEnvelope = {\n contents,\n } as ResourceResult<Meta>;\n\n Object.defineProperty(resultEnvelope, resourceResultBrand, {\n enumerable: false,\n value: true,\n });\n\n return resultEnvelope;\n}\n\n/** Returns true when a value was produced by `toolResult()`. */\nexport function isToolResult(value: unknown): value is ToolResult {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (value as Record<symbol, unknown>)[toolResultBrand] === true\n );\n}\n\n/** Returns true when a value was produced by `resourceResult()`. */\nexport function isResourceResult(value: unknown): value is ResourceResult {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (value as Record<symbol, unknown>)[resourceResultBrand] === true\n );\n}\n\n/** Converts a branded Sidecar tool result into an MCP-compliant tool result. */\nexport function normalizeToolResult(value: unknown): McpToolResult {\n if (!isToolResult(value)) {\n throw new SidecarRuntimeError(\n \"Tool execute() must return toolResult({ structuredContent, content, meta }).\",\n \"invalid_tool_result\",\n );\n }\n\n return stripUndefined({\n structuredContent: stripJsonUndefined(value.structuredContent),\n content: value.content ?? [],\n _meta: stripJsonUndefined(value._meta) as Record<string, unknown> | undefined,\n isError: value.isError\n });\n}\n\n/** Converts a branded Sidecar resource result into an MCP-compliant read result. */\nexport function normalizeResourceResult(\n value: unknown,\n uri: string,\n defaultMimeType?: string,\n): McpResourceReadResult {\n if (!isResourceResult(value)) {\n throw new SidecarRuntimeError(\n \"Resource read() must return resourceResult(...).\",\n \"invalid_resource_result\",\n );\n }\n\n return {\n contents: value.contents.map((content) =>\n normalizeResourceContent(content, uri, defaultMimeType),\n ),\n };\n}\n\n/** Validates params, runs a tool, and normalizes its result for JSON-RPC. */\nexport async function executeTool<Params, Output>(\n sidecarTool: SidecarTool<Params, Output>,\n params: unknown,\n ctx: ToolContext\n): Promise<McpToolResult> {\n const parsedParams = validateParams(sidecarTool, params);\n const value = await sidecarTool.execute(parsedParams, ctx);\n return normalizeToolResult(value);\n}\n\n/** Reads a resource and normalizes its result for JSON-RPC. */\nexport async function executeResource(\n sidecarResource: SidecarResource,\n ctx: ResourceContext,\n options: { uri: string; mimeType?: string },\n): Promise<McpResourceReadResult> {\n const value = await sidecarResource.read(ctx);\n return normalizeResourceResult(value, options.uri, sidecarResource.mimeType ?? options.mimeType);\n}\n\n/** Runs a prompt and normalizes its messages for JSON-RPC. */\nexport async function executePrompt<Args extends Record<string, unknown>>(\n sidecarPrompt: SidecarPrompt<Args>,\n args: unknown,\n ctx: PromptContext,\n): Promise<McpPromptResult> {\n const parsedArgs = validatePromptArgs(sidecarPrompt, args);\n const value = await sidecarPrompt.run(parsedArgs, ctx);\n return normalizePromptResult(value, sidecarPrompt.description);\n}\n\n/** Builds an MCP descriptor from a Sidecar tool definition. */\nexport function createToolDescriptor(definition: {\n name: string;\n id?: string;\n description: string;\n target?: ToolDescriptorTarget;\n inputSchema?: JsonSchema;\n outputSchema?: JsonSchema;\n annotations?: ToolAnnotations;\n visibility?: ToolVisibility;\n hosts?: ToolHostExtensions;\n meta?: Record<string, unknown>;\n auth?: ToolAuthPolicy<unknown>;\n}): McpToolDescriptor {\n const machineName = definition.id ?? toMachineName(definition.name);\n\n validateToolId(machineName);\n const target = definition.target ?? \"mcp\";\n\n return stripUndefined({\n name: machineName,\n title: definition.name,\n description: definition.description,\n inputSchema: definition.inputSchema ?? emptyObjectSchema(),\n outputSchema: definition.outputSchema,\n securitySchemes: securitySchemes(definition.auth),\n annotations: withAnnotationDefaults(definition.annotations),\n _meta: mergeMeta(\n securitySchemesMeta(definition.auth),\n visibilityMeta(definition.visibility),\n target === \"chatgpt\" ? chatGptToolMeta(definition.hosts?.chatgpt) : undefined,\n definition.meta\n )\n });\n}\n\n/** Builds an MCP resource descriptor from a Sidecar resource definition. */\nexport function createResourceDescriptor(definition: {\n name: string;\n uri: string;\n title?: string;\n description?: string;\n mimeType?: string;\n size?: number;\n icons?: readonly McpIcon[];\n annotations?: ResourceAnnotations;\n meta?: Record<string, unknown>;\n}): McpResourceDescriptor {\n validateResourceUri(definition.uri);\n\n return stripUndefined({\n uri: definition.uri,\n name: definition.name,\n title: definition.title,\n description: definition.description,\n mimeType: definition.mimeType,\n size: definition.size,\n icons: definition.icons ? [...definition.icons] : undefined,\n annotations: normalizeAnnotations(definition.annotations),\n _meta: definition.meta,\n });\n}\n\n/** Builds an MCP prompt descriptor from a Sidecar prompt definition. */\nexport function createPromptDescriptor(definition: {\n name: string;\n title: string;\n description?: string;\n args?: PromptArgsDefinition;\n icons?: readonly McpIcon[];\n}): McpPromptDescriptor {\n validatePromptName(definition.name);\n\n return stripUndefined({\n name: definition.name,\n title: definition.title,\n description: definition.description,\n arguments: promptArguments(definition.args),\n icons: definition.icons ? [...definition.icons] : undefined,\n });\n}\n\n/** Converts a Sidecar auth policy into descriptor security schemes. */\nfunction securitySchemes(policy: ToolAuthPolicy<unknown> | undefined): SecurityScheme[] {\n if (!policy || policy.public === true) {\n return [{ type: \"noauth\" }];\n }\n\n if (\"scopes\" in policy && policy.scopes?.length) {\n return [{ type: \"oauth2\", scopes: policy.scopes.map((entry) => entry.id) }];\n }\n\n return [{ type: \"oauth2\", scopes: [] }];\n}\n\n/** Mirrors security schemes into `_meta` for older Apps clients. */\nfunction securitySchemesMeta(policy: ToolAuthPolicy<unknown> | undefined): Record<string, unknown> {\n return {\n securitySchemes: securitySchemes(policy),\n };\n}\n\n/** Returns scope ids required by a tool's auth policy. */\nexport function toolAuthScopes(toolDefinition: Pick<ToolDefinition, \"auth\">): string[] {\n const authPolicy = toolDefinition.auth;\n if (!authPolicy || authPolicy.public === true || !authPolicy.scopes) {\n return [];\n }\n\n return authPolicy.scopes.map((entry) => entry.id);\n}\n\n/** Converts visibility booleans into the standard MCP Apps `_meta.ui.visibility` list. */\nfunction visibilityMeta(visibility: ToolVisibility | undefined): Record<string, unknown> | undefined {\n if (!visibility) {\n return undefined;\n }\n\n const uiVisibility = [\n visibility.model !== false ? \"model\" : undefined,\n visibility.widgets !== false ? \"app\" : undefined\n ].filter(Boolean) as string[];\n\n return {\n ui: {\n visibility: uiVisibility\n }\n };\n}\n\n/** Converts typed ChatGPT options into optional OpenAI compatibility metadata. */\nfunction chatGptToolMeta(options: ChatGptToolOptions | undefined): Record<string, unknown> | undefined {\n if (!options) {\n return undefined;\n }\n\n return stripUndefined({\n \"openai/widgetAccessible\": options.widgetAccessible,\n \"openai/visibility\": options.visibility,\n \"openai/toolInvocation/invoking\": options.invoking,\n \"openai/toolInvocation/invoked\": options.invoked,\n \"openai/fileParams\": options.fileParams ? [...options.fileParams] : undefined\n });\n}\n\n/** Merges descriptor metadata while preserving nested standard `ui` metadata. */\nfunction mergeMeta(\n ...entries: Array<Record<string, unknown> | undefined>\n): Record<string, unknown> | undefined {\n const merged: Record<string, unknown> = {};\n\n for (const entry of entries) {\n if (!entry) {\n continue;\n }\n\n for (const [key, value] of Object.entries(entry)) {\n if (key === \"ui\" && isRecord(value) && isRecord(merged.ui)) {\n merged.ui = { ...merged.ui, ...value };\n } else {\n merged[key] = value;\n }\n }\n }\n\n return Object.keys(merged).length ? stripUndefined(merged) : undefined;\n}\n\n/** Returns true for plain metadata objects. */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\n/** JSON Schema for a tool with no input parameters. */\nexport function emptyObjectSchema(): JsonSchema {\n return {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: false\n };\n}\n\n/** Converts a human tool name into a stable MCP machine name. */\nexport function toMachineName(name: string): string {\n return name\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .replace(/[^A-Za-z0-9._-]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .replace(/_{2,}/g, \"_\")\n .toLowerCase();\n}\n\n/** Throws when a machine tool id is not MCP-safe. */\nexport function validateToolId(id: string): void {\n if (\n !/^[A-Za-z0-9._-]{1,128}$/.test(id) ||\n id === \".\" ||\n id === \"..\" ||\n id.includes(\"/..\") ||\n id.includes(\"../\")\n ) {\n throw new SidecarDefinitionError(\n `Invalid tool id \"${id}\". Tool ids must be 1-128 ASCII letters, digits, dots, hyphens, or underscores.`\n );\n }\n}\n\n/** Throws when a resource URI is not a valid absolute URI. */\nexport function validateResourceUri(uri: string): void {\n try {\n const parsed = new URL(uri);\n if (!parsed.protocol || parsed.hash) {\n throw new Error(\"invalid uri\");\n }\n } catch {\n throw new SidecarDefinitionError(\n `Invalid resource uri \"${uri}\". Resource URIs must be absolute and must not include fragments.`\n );\n }\n}\n\n/** Throws when a prompt machine name is not MCP-safe. */\nexport function validatePromptName(name: string): void {\n if (!/^[A-Za-z0-9._-]{1,128}$/.test(name) || name === \".\" || name === \"..\") {\n throw new SidecarDefinitionError(\n `Invalid prompt name \"${name}\". Prompt names must be 1-128 ASCII letters, digits, dots, hyphens, or underscores.`\n );\n }\n}\n\n/** Applies conservative annotation defaults when a tool omits them. */\nexport function withAnnotationDefaults(annotations: ToolAnnotations | undefined): ToolAnnotations {\n const readOnlyHint = annotations?.readOnlyHint ?? false;\n\n return {\n title: annotations?.title,\n readOnlyHint,\n destructiveHint: annotations?.destructiveHint ?? !readOnlyHint,\n idempotentHint: annotations?.idempotentHint ?? false,\n openWorldHint: annotations?.openWorldHint ?? true\n };\n}\n\n/** Error thrown for invalid Sidecar declarations. */\nexport class SidecarDefinitionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SidecarDefinitionError\";\n }\n}\n\n/** Error thrown while executing a tool. */\nexport class SidecarRuntimeError extends Error {\n constructor(message: string, readonly code: string) {\n super(message);\n this.name = \"SidecarRuntimeError\";\n }\n}\n\n/** Runs optional runtime schema validation before tool execution. */\nfunction validateParams<Params>(sidecarTool: SidecarTool<Params>, params: unknown): Params {\n if (!sidecarTool.params) {\n return (params ?? {}) as Params;\n }\n\n const parsed = sidecarTool.params.safeParse(params ?? {});\n if (parsed.success) {\n return parsed.data;\n }\n\n throw new SidecarRuntimeError(`Invalid parameters for tool \"${sidecarTool.name}\".`, \"invalid_tool_params\");\n}\n\n/** Normalizes required user-friendly result content into MCP content blocks. */\nfunction normalizeRequiredContent(content: ToolResultContent): McpContentBlock[] {\n if (typeof content === \"string\") {\n return [toolResult.text(content)];\n }\n const blocks = Array.isArray(content) ? content : [content];\n if (blocks.length > 0) {\n return blocks;\n }\n\n throw new SidecarRuntimeError(\n \"toolResult({ content }) must include at least one MCP content block.\",\n \"invalid_tool_result\",\n );\n}\n\n/** Converts one friendly resource content item to the MCP wire shape. */\nfunction normalizeResourceContent(\n content: ResourceResultContentInput,\n uri: string,\n defaultMimeType?: string,\n): McpResourceContent {\n const annotations = normalizeAnnotations(content.annotations);\n const meta = content.meta;\n if (isBinaryLike(content.content)) {\n return stripUndefined({\n uri,\n mimeType: content.mimeType ?? defaultMimeType ?? \"application/octet-stream\",\n blob: bytesToBase64(content.content),\n annotations,\n _meta: meta,\n });\n }\n\n if (typeof content.content === \"string\") {\n return stripUndefined({\n uri,\n mimeType: content.mimeType ?? defaultMimeType ?? \"text/plain\",\n text: content.content,\n annotations,\n _meta: meta,\n });\n }\n\n return stripUndefined({\n uri,\n mimeType: content.mimeType ?? defaultMimeType ?? \"application/json\",\n text: JSON.stringify(content.content),\n annotations,\n _meta: meta,\n });\n}\n\n/** Returns true for byte containers that MCP resources must expose as base64 blobs. */\nfunction isBinaryLike(value: unknown): value is Uint8Array | ArrayBuffer {\n return value instanceof ArrayBuffer || value instanceof Uint8Array;\n}\n\n/** Encodes bytes as base64 in Node and browser-compatible runtimes. */\nfunction bytesToBase64(value: Uint8Array | ArrayBuffer): string {\n const bytes = value instanceof ArrayBuffer ? new Uint8Array(value) : value;\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(bytes).toString(\"base64\");\n }\n\n let binary = \"\";\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary);\n}\n\n/** Encodes an offset as an opaque base64url cursor. */\nfunction encodeOffsetCursor(offset: number): string {\n return base64UrlEncode(JSON.stringify({ offset }));\n}\n\n/** Decodes an opaque offset cursor produced by `offsetPagination()`. */\nfunction decodeOffsetCursor(cursor: string): number {\n try {\n const decoded = JSON.parse(base64UrlDecode(cursor)) as { offset?: unknown };\n if (typeof decoded.offset !== \"number\" || !Number.isInteger(decoded.offset) || decoded.offset < 0) {\n throw new Error(\"invalid offset\");\n }\n return decoded.offset;\n } catch {\n throw new SidecarRuntimeError(\"Invalid pagination cursor.\", \"invalid_pagination_cursor\");\n }\n}\n\n/** Base64url-encodes UTF-8 text in Node and browser-compatible runtimes. */\nfunction base64UrlEncode(value: string): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value, \"utf8\").toString(\"base64url\");\n }\n return btoa(value)\n .replaceAll(\"+\", \"-\")\n .replaceAll(\"/\", \"_\")\n .replace(/=+$/g, \"\");\n}\n\n/** Base64url-decodes UTF-8 text in Node and browser-compatible runtimes. */\nfunction base64UrlDecode(value: string): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value, \"base64url\").toString(\"utf8\");\n }\n const padded = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\")\n .padEnd(Math.ceil(value.length / 4) * 4, \"=\");\n return atob(padded);\n}\n\n/** Converts Date annotations to the protocol's ISO timestamp string. */\nfunction normalizeAnnotations(\n annotations: ResourceAnnotations | undefined,\n): ResourceAnnotations | undefined {\n if (!annotations) {\n return undefined;\n }\n\n return stripUndefined({\n audience: annotations.audience ? [...annotations.audience] : undefined,\n priority: annotations.priority,\n lastModified: annotations.lastModified instanceof Date\n ? annotations.lastModified.toISOString()\n : annotations.lastModified,\n });\n}\n\n/** Converts friendly prompt argument declarations to MCP descriptors. */\nfunction promptArguments(args: PromptArgsDefinition | undefined): McpPromptArgument[] | undefined {\n if (!args) {\n return undefined;\n }\n\n const entries = Object.entries(args).map(([name, value]) => {\n if (typeof value === \"string\") {\n return { name, description: value, required: true };\n }\n if (isReadonlyArray(value)) {\n return {\n name,\n description: value.length\n ? `One of: ${value.map(String).join(\", \")}.`\n : undefined,\n required: true,\n };\n }\n return {\n name,\n description: value.description,\n required: value.required ?? true,\n };\n });\n\n return entries.length ? entries : undefined;\n}\n\n/** Narrows readonly argument enum arrays. */\nfunction isReadonlyArray(value: PromptArgInput): value is readonly JsonPrimitive[] {\n return Array.isArray(value);\n}\n\n/** Validates required prompt arguments before running a prompt. */\nfunction validatePromptArgs<Args extends Record<string, unknown>>(\n promptDefinition: SidecarPrompt<Args>,\n args: unknown,\n): Args {\n const input = args && typeof args === \"object\" && !Array.isArray(args)\n ? args as Record<string, unknown>\n : {};\n for (const argument of promptArguments(promptDefinition.args) ?? []) {\n if (argument.required !== false && !(argument.name in input)) {\n throw new SidecarRuntimeError(\n `Prompt \"${promptDefinition.name ?? promptDefinition.title}\" is missing required argument \"${argument.name}\".`,\n \"invalid_prompt_args\",\n );\n }\n }\n return input as Args;\n}\n\n/** Converts a prompt's friendly return value into MCP messages. */\nfunction normalizePromptResult(value: PromptResultInput, defaultDescription?: string): McpPromptResult {\n if (typeof value === \"string\") {\n return {\n description: defaultDescription,\n messages: [{\n role: \"user\",\n content: toolResult.text(value),\n }],\n };\n }\n\n if (Array.isArray(value)) {\n return {\n description: defaultDescription,\n messages: value,\n };\n }\n\n if (\"messages\" in value) {\n return {\n description: value.description ?? defaultDescription,\n messages: value.messages,\n };\n }\n\n return {\n description: defaultDescription,\n messages: [value],\n };\n}\n\n/** Removes `undefined` keys so JSON serialization matches MCP expectations. */\nfunction stripUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined)) as T;\n}\n\n/** Recursively removes undefined values from JSON-like result channels. */\nfunction stripJsonUndefined(value: unknown): unknown {\n if (value === undefined) {\n return undefined;\n }\n\n if (Array.isArray(value)) {\n return value\n .map((entry) => stripJsonUndefined(entry))\n .filter((entry) => entry !== undefined);\n }\n\n if (!value || typeof value !== \"object\") {\n return value;\n }\n\n return Object.fromEntries(\n Object.entries(value)\n .map(([key, entry]) => [key, stripJsonUndefined(entry)] as const)\n .filter(([, entry]) => entry !== undefined),\n );\n}\n","/** Static analysis for reserved server tool files. */\nimport {\n createToolDescriptor,\n toMachineName,\n type ChatGptToolOptions,\n type ToolHostExtensions,\n type ToolAnnotations,\n type ToolAuthPolicy,\n type ToolVisibility,\n type JsonSchema,\n} from \"@sidecar-ai/core\";\nimport { readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n Node,\n type Project,\n SyntaxKind,\n type ArrowFunction,\n type CallExpression,\n type FunctionExpression,\n type MethodDeclaration,\n type ObjectLiteralExpression,\n type SourceFile,\n} from \"ts-morph\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"./ast.js\";\nimport { CompilerError } from \"./errors.js\";\nimport { createProject } from \"./project.js\";\nimport { getOutputSchema, getParamsSchema } from \"./schema.js\";\nimport { readRuntimeToolInputSchema } from \"./runtime-schema.js\";\nimport type { SidecarToolManifestEntry } from \"./types.js\";\nimport { existsSyncSafe } from \"./utils.js\";\nimport { findWidget, mergeWidgetMeta, readWidgetOptions, widgetMeta, widgetResourceMeta } from \"./widgets.js\";\nimport type { SidecarSourceVariant, SidecarTarget } from \"./types.js\";\n\ntype AuthScopeCatalog = Record<string, { id: string; description: string }>;\n\n/** Finds all Sidecar tool files under `server/` and returns manifest entries. */\nexport async function analyzeProjectTools(\n rootDir: string,\n options: { target?: SidecarTarget } = {},\n): Promise<SidecarToolManifestEntry[]> {\n const target = options.target ?? \"mcp\";\n const toolFiles = await findToolFiles(path.join(rootDir, \"server\"), target);\n if (toolFiles.length === 0) {\n return [];\n }\n\n const project = createProject(rootDir);\n const authScopes = readAuthScopeCatalog(project, rootDir);\n const sources = toolFiles.map((candidate) => ({\n candidate,\n sourceFile: project.addSourceFileAtPath(candidate.filePath),\n }));\n const runtimeInputSchemas = await readRuntimeInputSchemas(rootDir, sources);\n\n return sources.map(({ candidate, sourceFile }) =>\n analyzeToolFile(sourceFile, rootDir, {\n target,\n variant: candidate.variant,\n authScopes,\n inputSchema: runtimeInputSchemas.get(candidate.filePath),\n }),\n );\n}\n\n/** Analyzes one `tool.ts` source file into a compiler manifest entry. */\nexport function analyzeToolFile(\n sourceFile: SourceFile,\n rootDir: string,\n options: {\n target?: SidecarTarget;\n variant?: SidecarSourceVariant;\n authScopes?: AuthScopeCatalog;\n inputSchema?: JsonSchema;\n } = {},\n): SidecarToolManifestEntry {\n const target = options.target ?? \"mcp\";\n const variant = options.variant ?? \"shared\";\n const definition = findToolDefinition(sourceFile);\n const absoluteFile = sourceFile.getFilePath();\n const directory = path.basename(path.dirname(absoluteFile));\n const name = getRequiredStringProperty(definition, \"name\", sourceFile);\n const id = getOptionalStringProperty(definition, \"id\") ?? toMachineName(directory);\n const description = getRequiredStringProperty(\n definition,\n \"description\",\n sourceFile,\n );\n const annotations = readAnnotations(definition);\n const visibility = readVisibility(definition);\n const hosts = readHosts(definition);\n const auth = readAuthPolicy(definition, options.authScopes ?? {});\n const execute = getExecuteFunction(definition, sourceFile);\n\n const inputSchema = options.inputSchema ?? getParamsSchema(definition, execute);\n const outputSchema = getOutputSchema(definition, execute);\n const descriptor = createToolDescriptor({\n name,\n id,\n description,\n target,\n inputSchema,\n outputSchema,\n annotations,\n visibility,\n hosts,\n auth,\n meta: undefined,\n });\n\n validateWidgetHierarchy(sourceFile, absoluteFile, target, variant);\n\n const widget = findWidget(rootDir, absoluteFile, id, target, variant);\n if (widget) {\n const widgetFile = path.join(rootDir, widget.sourceFile);\n const project = sourceFile.getProject();\n const widgetSourceFile =\n project.getSourceFile(widgetFile) ?? project.addSourceFileAtPath(widgetFile);\n widget.options = {\n description,\n ...readWidgetOptions(widgetSourceFile),\n };\n widget.resourceMeta = widgetResourceMeta(widget.options, target);\n descriptor._meta = mergeWidgetMeta(descriptor._meta, widgetMeta(widget.resourceUri, widget.options, target));\n }\n\n return {\n sourceFile: path.relative(rootDir, absoluteFile),\n variant,\n target,\n directory,\n id,\n name,\n description,\n inputSchema,\n outputSchema,\n annotations,\n visibility,\n widget,\n descriptor,\n };\n}\n\n/** Reads runtime param schemas only for tools that declare a validator. */\nasync function readRuntimeInputSchemas(\n rootDir: string,\n sources: Array<{ candidate: ToolFileCandidate; sourceFile: SourceFile }>,\n): Promise<Map<string, JsonSchema>> {\n const schemas = new Map<string, JsonSchema>();\n await Promise.all(sources.map(async ({ candidate, sourceFile }) => {\n const definition = findToolDefinition(sourceFile);\n if (!definitionHasRuntimeParams(definition)) {\n return;\n }\n\n const schema = await readRuntimeToolInputSchema(rootDir, candidate.filePath);\n if (schema) {\n schemas.set(candidate.filePath, schema);\n }\n }));\n return schemas;\n}\n\n/** Returns true when a tool declares runtime params directly or through `withParams()`. */\nfunction definitionHasRuntimeParams(definition: ObjectLiteralExpression): boolean {\n if (definition.getProperty(\"params\")) {\n return true;\n }\n\n return Boolean(getWithParamsCall(definition));\n}\n\n/** Extracts static auth shape for descriptor security-scheme generation. */\nfunction readAuthPolicy(\n definition: ObjectLiteralExpression,\n authScopes: AuthScopeCatalog,\n): ToolAuthPolicy | undefined {\n const initializer = readObjectProperty(definition, \"auth\");\n if (!initializer) {\n return undefined;\n }\n\n const publicValue = readBooleanProperty(initializer, \"public\");\n if (publicValue === true) {\n return { public: true };\n }\n\n const scopesProperty = initializer.getProperty(\"scopes\");\n if (scopesProperty && Node.isPropertyAssignment(scopesProperty)) {\n return { scopes: readScopeReferences(scopesProperty.getInitializer(), authScopes) };\n }\n\n return { authenticated: true };\n}\n\n/** Extracts auth.ts scope declarations so generated descriptors can name required scopes. */\nfunction readAuthScopeCatalog(project: Project, rootDir: string): AuthScopeCatalog {\n const authPath = path.join(rootDir, \"auth.ts\");\n if (!existsSyncSafe(authPath)) {\n return {};\n }\n\n const sourceFile = project.addSourceFileAtPath(authPath);\n const catalog: AuthScopeCatalog = {};\n for (const call of sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {\n if (!isNamedCall(call, \"auth\")) {\n continue;\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n continue;\n }\n\n const scopes = readObjectProperty(definition, \"scopes\");\n if (!scopes) {\n continue;\n }\n\n for (const property of scopes.getProperties()) {\n if (!Node.isPropertyAssignment(property)) {\n continue;\n }\n\n const scope = readScopeCall(property.getInitializer());\n if (scope) {\n catalog[property.getName().replace(/^[\"']|[\"']$/g, \"\")] = scope;\n }\n }\n }\n\n return catalog;\n}\n\n/** Reads a tool auth `scopes: [...]` initializer into Sidecar scope placeholders. */\nfunction readScopeReferences(\n initializer: Node | undefined,\n authScopes: AuthScopeCatalog,\n): NonNullable<Extract<ToolAuthPolicy, { scopes: unknown }>[\"scopes\"]> {\n const expression = unwrapExpression(initializer);\n if (!expression || !Node.isArrayLiteralExpression(expression)) {\n return [];\n }\n\n return expression.getElements().flatMap((element) => {\n const direct = readScopeCall(element);\n if (direct) {\n return [{ kind: \"sidecar.scope\" as const, ...direct }];\n }\n\n const name = scopeReferenceName(element);\n const declared = name ? authScopes[name] : undefined;\n if (declared) {\n return [{ kind: \"sidecar.scope\" as const, ...declared }];\n }\n\n const literal = unwrapExpression(element);\n if (literal && Node.isStringLiteral(literal)) {\n return [{\n kind: \"sidecar.scope\" as const,\n id: literal.getLiteralText(),\n description: \"\",\n }];\n }\n\n return [];\n });\n}\n\n/** Reads `scope(\"id\", \"description\")` helper calls without executing auth.ts. */\nfunction readScopeCall(node: Node | undefined): { id: string; description: string } | undefined {\n const expression = unwrapExpression(node);\n if (!expression || !Node.isCallExpression(expression) || !isNamedCall(expression, \"scope\")) {\n return undefined;\n }\n\n const [idArg, descriptionArg] = expression.getArguments();\n if (!idArg || !Node.isStringLiteral(idArg)) {\n return undefined;\n }\n\n return {\n id: idArg.getLiteralText(),\n description: Node.isStringLiteral(descriptionArg) ? descriptionArg.getLiteralText() : \"\",\n };\n}\n\n/** Returns the final property name from references like `scopes.expensesRead`. */\nfunction scopeReferenceName(node: Node): string | undefined {\n const expression = unwrapExpression(node);\n if (!expression || !Node.isPropertyAccessExpression(expression)) {\n return undefined;\n }\n\n return expression.getName();\n}\n\n/** Returns true for direct or namespace-qualified helper calls. */\nfunction isNamedCall(call: CallExpression, name: string): boolean {\n const callee = call.getExpression().getText();\n return callee === name || callee.endsWith(`.${name}`);\n}\n\n/** Enforces Sidecar's hierarchical reserved-file platform rule. */\nfunction validateWidgetHierarchy(\n sourceFile: SourceFile,\n toolFile: string,\n target: SidecarTarget,\n variant: SidecarSourceVariant,\n): void {\n const directory = path.dirname(toolFile);\n const platformWidget =\n target === \"chatgpt\"\n ? \"widget.openai.tsx\"\n : target === \"claude\"\n ? \"widget.anthropic.tsx\"\n : undefined;\n\n if (!platformWidget || variant !== \"shared\") {\n return;\n }\n\n if (existsSyncSafe(path.join(directory, platformWidget))) {\n const expectedTool =\n target === \"chatgpt\" ? \"tool.openai.ts\" : \"tool.anthropic.ts\";\n throw new CompilerError(\n sourceFile,\n `${platformWidget} requires a sibling ${expectedTool}; platform-specific widgets cannot attach to a shared tool.ts.`,\n );\n }\n}\n\n/** Finds immediate server child tool files in deterministic order. */\ntype ToolFileCandidate = {\n filePath: string;\n variant: SidecarSourceVariant;\n};\n\nasync function findToolFiles(serverDir: string, target: SidecarTarget): Promise<ToolFileCandidate[]> {\n if (!existsSyncSafe(serverDir)) {\n return [];\n }\n\n const entries = await readdir(serverDir, { withFileTypes: true });\n const files: ToolFileCandidate[] = [];\n\n for (const entry of entries) {\n const entryPath = path.join(serverDir, entry.name);\n if (entry.isDirectory()) {\n const candidate = selectToolFile(entryPath, target);\n if (candidate) {\n files.push(candidate);\n }\n }\n }\n\n return files.sort((left, right) => left.filePath.localeCompare(right.filePath));\n}\n\n/** Picks the platform-specific tool file for a target, falling back to shared code. */\nfunction selectToolFile(directory: string, target: SidecarTarget): ToolFileCandidate | undefined {\n const candidates =\n target === \"chatgpt\"\n ? [\n { name: \"tool.openai.ts\", variant: \"openai\" as const },\n { name: \"tool.ts\", variant: \"shared\" as const },\n ]\n : target === \"claude\"\n ? [\n { name: \"tool.anthropic.ts\", variant: \"anthropic\" as const },\n { name: \"tool.ts\", variant: \"shared\" as const },\n ]\n : [{ name: \"tool.ts\", variant: \"shared\" as const }];\n\n for (const candidate of candidates) {\n const filePath = path.join(directory, candidate.name);\n if (existsSyncSafe(filePath)) {\n return { filePath, variant: candidate.variant };\n }\n }\n\n return undefined;\n}\n\n/** Locates the default-exported `tool({ ... })` object literal. */\nfunction findToolDefinition(sourceFile: SourceFile): ObjectLiteralExpression {\n const call = resolveDefaultExportCall(sourceFile, \"tool\");\n if (!call) {\n throw new CompilerError(\n sourceFile,\n \"tool.ts must default-export tool({ ... }) or an identifier initialized with tool({ ... }).\",\n );\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n throw new CompilerError(\n sourceFile,\n \"tool(...) must receive one object literal.\",\n );\n }\n\n return definition;\n}\n\n/** Reads the supported `execute` declaration shapes from a tool definition. */\nfunction getExecuteFunction(\n definition: ObjectLiteralExpression,\n sourceFile: SourceFile,\n): MethodDeclaration | ArrowFunction | FunctionExpression {\n const property = definition.getProperty(\"execute\");\n if (!property) {\n throw new CompilerError(\n sourceFile,\n \"tool({ ... }) must include an execute method.\",\n );\n }\n\n if (Node.isMethodDeclaration(property)) {\n return property;\n }\n\n if (Node.isPropertyAssignment(property)) {\n const initializer = unwrapExpression(property.getInitializer());\n if (\n initializer &&\n (Node.isArrowFunction(initializer) ||\n Node.isFunctionExpression(initializer))\n ) {\n return initializer;\n }\n\n const withParamsCall = getWithParamsCall(definition);\n const wrappedExecute = unwrapExpression(withParamsCall?.getArguments()[1]);\n if (\n wrappedExecute &&\n (Node.isArrowFunction(wrappedExecute) ||\n Node.isFunctionExpression(wrappedExecute))\n ) {\n return wrappedExecute;\n }\n }\n\n throw new CompilerError(\n sourceFile,\n \"execute must be a method, function expression, or arrow function.\",\n );\n}\n\n/** Returns the `withParams(schema, execute)` call used as `execute`, if present. */\nfunction getWithParamsCall(definition: ObjectLiteralExpression): CallExpression | undefined {\n const property = definition.getProperty(\"execute\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isCallExpression(initializer)) {\n return undefined;\n }\n\n return isNamedCall(initializer, \"withParams\") ? initializer : undefined;\n}\n\n/** Reads a required string property from the tool object. */\nfunction getRequiredStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n sourceFile: SourceFile,\n): string {\n const value = getOptionalStringProperty(definition, propertyName);\n if (value === undefined || !value.trim()) {\n throw new CompilerError(\n sourceFile,\n `tool({ ... }) must include a non-empty ${propertyName} string.`,\n );\n }\n return value;\n}\n\n/** Reads an optional string literal property from the tool object. */\nfunction getOptionalStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = property.getInitializer();\n if (!initializer || !Node.isStringLiteral(initializer)) {\n return undefined;\n }\n\n return initializer.getLiteralText();\n}\n\n/** Extracts static MCP annotation hints from the tool object. */\nfunction readAnnotations(\n definition: ObjectLiteralExpression,\n): ToolAnnotations | undefined {\n const property = definition.getProperty(\"annotations\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = property.getInitializer();\n if (!initializer || !Node.isObjectLiteralExpression(initializer)) {\n return undefined;\n }\n\n const annotations: ToolAnnotations = {};\n for (const key of [\n \"title\",\n \"readOnlyHint\",\n \"destructiveHint\",\n \"idempotentHint\",\n \"openWorldHint\",\n ] as const) {\n const value = initializer.getProperty(key);\n if (!value || !Node.isPropertyAssignment(value)) {\n continue;\n }\n\n const expression = value.getInitializer();\n if (!expression) {\n continue;\n }\n\n if (key === \"title\" && Node.isStringLiteral(expression)) {\n annotations.title = expression.getLiteralText();\n } else if (\n key !== \"title\" &&\n (expression.getKind() === SyntaxKind.TrueKeyword ||\n expression.getKind() === SyntaxKind.FalseKeyword)\n ) {\n annotations[key] = expression.getKind() === SyntaxKind.TrueKeyword;\n }\n }\n\n return Object.keys(annotations).length ? annotations : undefined;\n}\n\n/** Extracts static Sidecar visibility policy from the tool object. */\nfunction readVisibility(\n definition: ObjectLiteralExpression,\n): ToolVisibility | undefined {\n const initializer = readObjectProperty(definition, \"visibility\");\n if (!initializer) {\n return undefined;\n }\n\n const visibility: ToolVisibility = {};\n for (const key of [\"model\", \"widgets\", \"tools\"] as const) {\n const property = initializer.getProperty(key);\n if (!property || !Node.isPropertyAssignment(property)) {\n continue;\n }\n\n const value = property.getInitializer();\n if (!value) {\n continue;\n }\n\n if (\n value.getKind() === SyntaxKind.TrueKeyword ||\n value.getKind() === SyntaxKind.FalseKeyword\n ) {\n assignVisibility(visibility, key, value.getKind() === SyntaxKind.TrueKeyword);\n } else if (Node.isArrayLiteralExpression(value)) {\n assignVisibility(visibility, key, value\n .getElements()\n .filter(Node.isStringLiteral)\n .map((element) => element.getLiteralText()));\n }\n }\n\n return Object.keys(visibility).length ? visibility : undefined;\n}\n\n/** Assigns a visibility property without losing the precise key type. */\nfunction assignVisibility<Key extends keyof ToolVisibility>(\n visibility: ToolVisibility,\n key: Key,\n value: ToolVisibility[Key],\n): void {\n visibility[key] = value;\n}\n\n/** Extracts supported host-specific extension metadata from the tool object. */\nfunction readHosts(\n definition: ObjectLiteralExpression,\n): ToolHostExtensions | undefined {\n const initializer = readObjectProperty(definition, \"hosts\");\n if (!initializer) {\n return undefined;\n }\n\n const chatgpt = readObjectProperty(initializer, \"chatgpt\");\n if (!chatgpt) {\n return undefined;\n }\n\n const options: ChatGptToolOptions = {};\n const invoking = readStringProperty(chatgpt, \"invoking\");\n const invoked = readStringProperty(chatgpt, \"invoked\");\n const visibility = readStringProperty(chatgpt, \"visibility\");\n const widgetAccessible = readBooleanProperty(chatgpt, \"widgetAccessible\");\n const fileParams = readStringArrayProperty(chatgpt, \"fileParams\");\n\n if (invoking) options.invoking = invoking;\n if (invoked) options.invoked = invoked;\n if (visibility === \"public\" || visibility === \"private\") {\n options.visibility = visibility;\n }\n if (widgetAccessible !== undefined) {\n options.widgetAccessible = widgetAccessible;\n }\n if (fileParams) {\n options.fileParams = fileParams;\n }\n\n return Object.keys(options).length ? { chatgpt: options } : undefined;\n}\n\n/** Reads a nested object literal property, unwrapping `satisfies` expressions. */\nfunction readObjectProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): ObjectLiteralExpression | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** Reads a string literal property from an object literal. */\nfunction readStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isStringLiteral(initializer)\n ? initializer.getLiteralText()\n : undefined;\n}\n\n/** Reads a boolean literal property from an object literal. */\nfunction readBooleanProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): boolean | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n\n if (initializer.getKind() === SyntaxKind.TrueKeyword) {\n return true;\n }\n if (initializer.getKind() === SyntaxKind.FalseKeyword) {\n return false;\n }\n return undefined;\n}\n\n/** Reads a string literal array property from an object literal. */\nfunction readStringArrayProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string[] | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n\n return initializer\n .getElements()\n .filter(Node.isStringLiteral)\n .map((element) => element.getLiteralText());\n}\n","/** Shared ts-morph helpers for reserved Sidecar files. */\nimport {\n Node,\n type CallExpression,\n type SourceFile,\n type VariableDeclaration,\n} from \"ts-morph\";\n\n/**\n * Resolves a default export into a call to the requested authoring helper.\n *\n * This supports both idiomatic shapes:\n *\n * - `export default tool({ ... })`\n * - `const review = tool({ ... }); export default review`\n */\nexport function resolveDefaultExportCall(\n sourceFile: SourceFile,\n helperName: string,\n): CallExpression | undefined {\n const exportAssignment = sourceFile.getExportAssignment(\n (assignment) => !assignment.isExportEquals(),\n );\n const expression = unwrapExpression(exportAssignment?.getExpression());\n const direct = asHelperCall(expression, helperName);\n if (direct) {\n return direct;\n }\n\n if (!expression || !Node.isIdentifier(expression)) {\n return undefined;\n }\n\n const declaration = findVariableDeclaration(sourceFile, expression.getText());\n const initializer = unwrapExpression(declaration?.getInitializer());\n return asHelperCall(initializer, helperName);\n}\n\n/** Removes TypeScript-only wrappers such as `satisfies` from expressions. */\nexport function unwrapExpression(expression: Node | undefined): Node | undefined {\n if (!expression) {\n return undefined;\n }\n\n if (Node.isSatisfiesExpression(expression) || Node.isAsExpression(expression)) {\n return expression.getExpression();\n }\n\n return expression;\n}\n\n/** Returns a helper call when the expression calls exactly that helper. */\nfunction asHelperCall(\n expression: Node | undefined,\n helperName: string,\n): CallExpression | undefined {\n if (!expression || !Node.isCallExpression(expression)) {\n return undefined;\n }\n\n const callee = expression.getExpression().getText();\n return matchesHelperName(callee, helperName) ? expression : undefined;\n}\n\n/** Finds a top-level variable declaration by identifier name. */\nfunction findVariableDeclaration(\n sourceFile: SourceFile,\n name: string,\n): VariableDeclaration | undefined {\n return sourceFile\n .getVariableDeclarations()\n .find((declaration) => declaration.getName() === name);\n}\n\n/** Checks imported, namespaced, and locally scoped helper call names. */\nfunction matchesHelperName(callee: string, helperName: string): boolean {\n return callee === helperName || callee.endsWith(`.${helperName}`);\n}\n","/** Compiler-specific errors include the source file path in their message. */\nimport type { SourceFile } from \"ts-morph\";\n\n/** Error thrown when a reserved file violates Sidecar's authoring contract. */\nexport class CompilerError extends Error {\n constructor(sourceFile: SourceFile, message: string) {\n super(`${sourceFile.getFilePath()}: ${message}`);\n this.name = \"CompilerError\";\n }\n}\n","/** Shared ts-morph project setup for Sidecar reserved-file analyzers. */\nimport path from \"node:path\";\nimport {\n ModuleKind,\n ModuleResolutionKind,\n Project,\n ScriptTarget,\n} from \"ts-morph\";\nimport { existsSyncSafe } from \"./utils.js\";\n\n/** Creates a ts-morph project using the app tsconfig when available. */\nexport function createProject(rootDir: string): Project {\n const tsconfig = path.join(rootDir, \"tsconfig.json\");\n\n return new Project({\n tsConfigFilePath: existsSyncSafe(tsconfig) ? tsconfig : undefined,\n compilerOptions: existsSyncSafe(tsconfig)\n ? undefined\n : {\n allowJs: false,\n baseUrl: process.cwd(),\n esModuleInterop: true,\n module: ModuleKind.NodeNext,\n moduleResolution: ModuleResolutionKind.NodeNext,\n paths: devSidecarTypePaths(),\n strict: true,\n target: ScriptTarget.ES2022,\n },\n skipAddingFilesFromTsConfig: true,\n });\n}\n\n/** Provides source aliases for repo-local examples before package dist exists. */\nfunction devSidecarTypePaths(): Record<string, string[]> | undefined {\n const repoRoot = process.cwd();\n const corePath = path.join(repoRoot, \"packages\", \"core\", \"src\", \"index.ts\");\n if (!existsSyncSafe(corePath)) {\n return undefined;\n }\n\n return {\n \"sidecar-ai\": [\"packages/sidecar-ai/src/index.ts\"],\n \"@sidecar-ai/core\": [\"packages/core/src/index.ts\"],\n \"@sidecar-ai/client\": [\"packages/client/src/index.ts\"],\n \"@sidecar-ai/react\": [\"packages/react/src/index.ts\"],\n \"@sidecar-ai/native\": [\"packages/native/src/index.ts\"],\n \"@sidecar-ai/native/components\": [\"packages/native/src/components/index.tsx\"],\n \"@sidecar-ai/openai\": [\"packages/openai/src/index.ts\"],\n \"@sidecar-ai/openai/components\": [\"packages/openai/src/components.tsx\"],\n \"@sidecar-ai/anthropic\": [\"packages/anthropic/src/index.ts\"],\n \"@sidecar-ai/anthropic/components\": [\"packages/anthropic/src/components.tsx\"],\n \"@sidecar-ai/anthropic/plugin\": [\"packages/anthropic/src/plugin.ts\"],\n \"@sidecar-ai/anthropic/hooks\": [\"packages/anthropic/src/hooks.ts\"],\n };\n}\n","/** Shared compiler utility helpers. */\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\n/** Safe filesystem existence check wrapped for testability and consistency. */\nexport function existsSyncSafe(filePath: string): boolean {\n return existsSync(filePath);\n}\n\n/** Creates an ESM import specifier from one file location to another. */\nexport function toImportSpecifier(\n fromDir: string,\n toFile: string,\n options: { extension?: \"none\" | \"js\" | \"preserve\" } = {},\n): string {\n const relative = path.relative(fromDir, toFile).replaceAll(path.sep, \"/\");\n const normalized = relative.startsWith(\".\") ? relative : `./${relative}`;\n\n switch (options.extension ?? \"none\") {\n case \"js\":\n return normalized.replace(/\\.(tsx|ts)$/, \".js\");\n case \"preserve\":\n return normalized;\n case \"none\":\n return normalized.replace(/\\.(tsx|ts)$/, \"\");\n }\n}\n\n/** Converts a tool id into a valid JavaScript property identifier. */\nexport function toIdentifier(value: string): string {\n const identifier = value\n .replace(/[^A-Za-z0-9]+(.)/g, (_match, char: string) => char.toUpperCase())\n .replace(/^[^A-Za-z_$]+/, \"\")\n .replace(/[^A-Za-z0-9_$]/g, \"\");\n\n return identifier || \"tool\";\n}\n\n/** Sanitizes a value for use as a path segment. */\nexport function safePathSegment(value: string): string {\n const segment = value.replace(/[^A-Za-z0-9._-]+/g, \"_\");\n if (!segment || segment === \".\" || segment === \"..\") {\n return \"_\";\n }\n return segment;\n}\n\n/** Sanitizes a metadata-provided file stem for generated plugin files. */\nexport function safeFileStem(value: string): string {\n return safePathSegment(value).replace(/^\\.+/, \"_\").replace(/^_+/, \"_\");\n}\n\n/** Escapes a scalar value for simple YAML/frontmatter generation. */\nexport function yamlScalar(value: unknown): string {\n return JSON.stringify(String(value ?? \"\"));\n}\n\n/** Escapes text that will be embedded into HTML. */\nexport function escapeHtml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\");\n}\n\n/** Drops undefined values from JSON-like objects before writing files. */\nexport function stripUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n\n/** Reads a simple string property from a TypeScript object literal string. */\nexport function readObjectString(source: string, key: string): string | undefined {\n const match = source.match(\n new RegExp(`${key}\\\\s*:\\\\s*([\"'\\`])([\\\\s\\\\S]*?)\\\\1`),\n );\n return match?.[2]?.trim();\n}\n\n/** Reads a simple string array property from a TypeScript object literal string. */\nexport function readObjectStringArray(\n source: string,\n key: string,\n): string[] | undefined {\n const match = source.match(new RegExp(`${key}\\\\s*:\\\\s*\\\\[([\\\\s\\\\S]*?)\\\\]`));\n if (!match?.[1]) {\n return undefined;\n }\n\n return [...match[1].matchAll(/[\"']([^\"']+)[\"']/g)]\n .map((item) => item[1]!)\n .filter(Boolean);\n}\n","/** TypeScript-to-JSON-Schema extraction for reserved Sidecar tool files. */\nimport { emptyObjectSchema, type JsonSchema } from \"@sidecar-ai/core\";\nimport {\n Node,\n type ArrowFunction,\n type FunctionExpression,\n type MethodDeclaration,\n type ObjectLiteralExpression,\n type Symbol as MorphSymbol,\n type Type,\n} from \"ts-morph\";\n\n/** Supported AST nodes that can execute a Sidecar tool. */\nexport type ExecutableNode = MethodDeclaration | ArrowFunction | FunctionExpression;\n\n/** Builds the input schema from explicit params or the execute param type. */\nexport function getParamsSchema(\n _definition: ObjectLiteralExpression,\n execute: ExecutableNode,\n): JsonSchema {\n const [params] = execute.getParameters();\n if (!params) {\n return emptyObjectSchema();\n }\n\n return typeToJsonSchema(\n params.getType(),\n schemaDescription(params.getSymbol()),\n );\n}\n\n/** Builds the output schema from explicit output or the execute return type. */\nexport function getOutputSchema(\n definition: ObjectLiteralExpression,\n execute: ExecutableNode,\n): JsonSchema | undefined {\n const explicitOutput = definition.getProperty(\"output\");\n if (explicitOutput && Node.isPropertyAssignment(explicitOutput)) {\n return undefined;\n }\n\n const returnType = unwrapToolResultType(unwrapPromiseType(execute.getReturnType()));\n if (returnType.isVoid() || returnType.isUndefined()) {\n return undefined;\n }\n\n return typeToJsonSchema(returnType);\n}\n\n/** Converts a TypeScript type into a JSON Schema object. */\nfunction typeToJsonSchema(type: Type, description?: string): JsonSchema {\n const withoutUndefined = removeUndefined(type);\n const schema = typeToJsonSchemaInner(withoutUndefined);\n if (description) {\n schema.description = description;\n }\n return schema;\n}\n\n/** Recursively maps TypeScript primitives, unions, arrays, tuples, and objects. */\nfunction typeToJsonSchemaInner(type: Type): JsonSchema {\n if (type.isString() || type.isStringLiteral()) {\n return literalOrPrimitive(type, \"string\");\n }\n if (type.isNumber() || type.isNumberLiteral()) {\n return literalOrPrimitive(type, \"number\");\n }\n if (type.isBoolean() || type.isBooleanLiteral()) {\n return literalOrPrimitive(type, \"boolean\");\n }\n if (type.isNull()) {\n return { type: \"null\" };\n }\n if (type.isArray()) {\n return {\n type: \"array\",\n items: typeToJsonSchema(type.getArrayElementTypeOrThrow()),\n };\n }\n if (type.isTuple()) {\n const elements = type.getTupleElements();\n return {\n type: \"array\",\n items:\n elements.length === 1\n ? typeToJsonSchema(elements[0]!)\n : { anyOf: elements.map((item) => typeToJsonSchema(item)) },\n };\n }\n if (type.isUnion()) {\n const parts = type.getUnionTypes().filter((part) => !part.isUndefined());\n if (parts.every(isLiteralType)) {\n return { enum: parts.map((part) => literalValue(part)) };\n }\n return { anyOf: parts.map((part) => typeToJsonSchema(part)) };\n }\n\n const properties = type.getProperties();\n const indexType = type.getStringIndexType() ?? type.getNumberIndexType();\n if (properties.length > 0) {\n return objectTypeToSchema(properties, indexType);\n }\n\n if (indexType) {\n return {\n type: \"object\",\n additionalProperties: indexTypeToAdditionalProperties(indexType),\n };\n }\n\n return {};\n}\n\n/** Converts object properties into JSON Schema properties and required lists. */\nfunction objectTypeToSchema(\n properties: MorphSymbol[],\n indexType: Type | undefined,\n): JsonSchema {\n const schemaProperties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const property of properties) {\n const declaration =\n property.getValueDeclaration() ?? property.getDeclarations()[0];\n if (!declaration) {\n continue;\n }\n\n const name = property.getName();\n const rawType = property.getTypeAtLocation(declaration);\n const propertyType = removeUndefined(rawType);\n const propertySchema = typeToJsonSchema(\n propertyType,\n schemaDescription(property),\n );\n schemaProperties[name] = propertySchema;\n\n if (!property.isOptional() && !containsUndefined(rawType)) {\n required.push(name);\n }\n }\n\n return {\n type: \"object\",\n properties: schemaProperties,\n required,\n additionalProperties: indexType\n ? indexTypeToAdditionalProperties(indexType)\n : false,\n };\n}\n\n/** Converts a TypeScript index signature into JSON Schema additionalProperties. */\nfunction indexTypeToAdditionalProperties(type: Type): boolean | JsonSchema {\n if (type.isAny() || type.isUnknown()) {\n return true;\n }\n\n const schema = typeToJsonSchema(type);\n return Object.keys(schema).length ? schema : true;\n}\n\n/** Returns a literal const schema when possible, otherwise a primitive schema. */\nfunction literalOrPrimitive(\n type: Type,\n primitive: \"string\" | \"number\" | \"boolean\",\n): JsonSchema {\n if (isLiteralType(type)) {\n return { const: literalValue(type) };\n }\n return { type: primitive };\n}\n\n/** Returns true for literal string, number, and boolean types. */\nfunction isLiteralType(type: Type): boolean {\n return (\n type.isStringLiteral() || type.isNumberLiteral() || type.isBooleanLiteral()\n );\n}\n\n/** Reads a JavaScript literal value from a TypeScript literal type. */\nfunction literalValue(type: Type): string | number | boolean {\n if (type.isStringLiteral()) return String(type.getLiteralValue());\n if (type.isNumberLiteral()) return Number(type.getLiteralValue());\n const text = type.getText();\n return text === \"true\";\n}\n\n/** Unwraps `Promise<T>` return types for output schema inference. */\nfunction unwrapPromiseType(type: Type): Type {\n if (!type.getText().startsWith(\"Promise<\")) {\n return type;\n }\n const args = type.getTypeArguments();\n return args[0] ?? type;\n}\n\n/** Extracts the structured content type from Sidecar's required `ToolResult<T>`. */\nfunction unwrapToolResultType(type: Type): Type {\n const aliasName = type.getAliasSymbol()?.getName();\n if (aliasName === \"ToolResult\") {\n const [structured] = type.getAliasTypeArguments();\n return structured ?? type;\n }\n\n const structured = type.getProperty(\"structuredContent\");\n const declaration = structured?.getValueDeclaration() ?? structured?.getDeclarations()[0];\n if (!structured || !declaration) {\n return type;\n }\n\n return removeUndefined(structured.getTypeAtLocation(declaration));\n}\n\n/** Removes `undefined` from simple union types. */\nfunction removeUndefined(type: Type): Type {\n if (!type.isUnion()) {\n return type;\n }\n\n const nonUndefined = type\n .getUnionTypes()\n .filter((part) => !part.isUndefined());\n return nonUndefined.length === 1 ? nonUndefined[0]! : type;\n}\n\n/** Returns true when a union includes `undefined`. */\nfunction containsUndefined(type: Type): boolean {\n return (\n type.isUnion() && type.getUnionTypes().some((part) => part.isUndefined())\n );\n}\n\n/** Reads the first JSDoc description attached to a symbol. */\nfunction schemaDescription(\n symbol: MorphSymbol | undefined,\n): string | undefined {\n if (!symbol) {\n return undefined;\n }\n\n return symbol\n .getDeclarations()\n .flatMap((declaration) => {\n if (Node.isJSDocable(declaration)) {\n return declaration.getJsDocs().map((doc) => doc.getCommentText() ?? \"\");\n }\n return [];\n })\n .find((comment) => comment.trim().length > 0);\n}\n","/** Runtime schema extraction for validators that can describe themselves. */\nimport { isSidecarTool, type JsonSchema, type SidecarTool } from \"@sidecar-ai/core\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { tsImport } from \"tsx/esm/api\";\nimport { existsSyncSafe } from \"./utils.js\";\n\ntype RuntimeModule = {\n default?: unknown;\n};\n\ntype JsonSchemaConverter = (\n options?: { io?: \"input\" | \"output\" },\n) => unknown;\n\ntype ZodTopLevelModule = {\n toJSONSchema?: (schema: unknown, options?: { io?: \"input\" | \"output\" }) => unknown;\n};\n\n/** Imports a Sidecar tool and converts its runtime params validator into JSON Schema when possible. */\nexport async function readRuntimeToolInputSchema(\n rootDir: string,\n sourcePath: string,\n): Promise<JsonSchema | undefined> {\n let sidecarTool: SidecarTool | undefined;\n try {\n sidecarTool = await importRuntimeTool(rootDir, sourcePath);\n } catch (error) {\n warnRuntimeSchemaFallback(sourcePath, error);\n return undefined;\n }\n\n if (!sidecarTool.params) {\n return undefined;\n }\n\n try {\n return await paramsToJsonSchema(sidecarTool.params);\n } catch (error) {\n warnRuntimeSchemaFallback(sourcePath, error);\n return undefined;\n }\n}\n\n/** Loads one authored `tool.ts` through tsx so runtime schemas can be inspected. */\nasync function importRuntimeTool(\n rootDir: string,\n sourcePath: string,\n): Promise<SidecarTool> {\n const module = (await tsImport(pathToFileURL(sourcePath).href, {\n parentURL: runtimeParentUrl(rootDir),\n tsconfig: runtimeTsconfig(rootDir),\n })) as RuntimeModule;\n\n const defaultExport = unwrapRuntimeDefault(module.default);\n if (!isSidecarTool(defaultExport)) {\n throw new Error(`${path.relative(rootDir, sourcePath)} must default-export tool({ ... }).`);\n }\n\n return defaultExport;\n}\n\n/** Converts Zod v4 classic/mini schemas without Sidecar parsing Zod source code. */\nasync function paramsToJsonSchema(params: unknown): Promise<JsonSchema | undefined> {\n const instanceConverter = readInstanceConverter(params);\n if (instanceConverter) {\n return ensureJsonSchema(instanceConverter({ io: \"input\" }));\n }\n\n if (isZodMiniSchema(params)) {\n const zod = (await import(\"zod/v4-mini\")) as ZodTopLevelModule;\n if (typeof zod.toJSONSchema === \"function\") {\n return ensureJsonSchema(zod.toJSONSchema(params, { io: \"input\" }));\n }\n }\n\n return undefined;\n}\n\n/** Reads the v4 classic instance method. The lowercase variant is accepted defensively. */\nfunction readInstanceConverter(params: unknown): JsonSchemaConverter | undefined {\n if (!params || typeof params !== \"object\") {\n return undefined;\n }\n\n const record = params as Record<string, unknown>;\n const converter = record.toJSONSchema ?? record.toJsonSchema;\n return typeof converter === \"function\"\n ? converter.bind(params) as JsonSchemaConverter\n : undefined;\n}\n\n/** Returns true for Zod Mini schemas, which rely on top-level conversion helpers. */\nfunction isZodMiniSchema(params: unknown): boolean {\n return Boolean(params && typeof params === \"object\" && \"_zod\" in params);\n}\n\n/** Narrows Zod's unknown converter output to the object shape MCP descriptors require. */\nfunction ensureJsonSchema(value: unknown): JsonSchema | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n return value as JsonSchema;\n}\n\n/** Builds a stable parent URL for tsx module resolution. */\nfunction runtimeParentUrl(rootDir: string): string {\n const configPath = path.join(rootDir, \"sidecar.config.ts\");\n return pathToFileURL(existsSync(configPath) ? configPath : rootDir).href;\n}\n\n/** Uses the app tsconfig, with a repo-local fallback for compiler tests and examples. */\nfunction runtimeTsconfig(rootDir: string): string | false {\n const projectTsconfig = path.join(rootDir, \"tsconfig.json\");\n if (existsSync(projectTsconfig)) {\n return projectTsconfig;\n }\n\n const repoTsconfig = path.join(process.cwd(), \"tsconfig.json\");\n const repoCore = path.join(process.cwd(), \"packages\", \"core\", \"src\", \"index.ts\");\n return existsSyncSafe(repoTsconfig) && existsSyncSafe(repoCore) ? repoTsconfig : false;\n}\n\n/** Normalizes default-export interop shapes produced by source TypeScript loaders. */\nfunction unwrapRuntimeDefault(value: unknown): unknown {\n if (\n value &&\n typeof value === \"object\" &&\n \"default\" in value &&\n Object.keys(value).every((key) => key === \"default\" || key === \"__esModule\")\n ) {\n return unwrapRuntimeDefault((value as { default: unknown }).default);\n }\n return value;\n}\n\n/** Keeps runtime schema import problems visible without breaking TS fallback analysis. */\nfunction warnRuntimeSchemaFallback(sourcePath: string, error: unknown): void {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(\n `[sidecar] Could not convert runtime params schema for ${sourcePath}; falling back to TypeScript parameter inference. ${message}`,\n );\n}\n","/** Widget discovery and HTML bundling. */\nimport { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { build as esbuild, type BuildOptions, type Loader, type Plugin } from \"esbuild\";\nimport postcss from \"postcss\";\nimport {\n Node,\n SyntaxKind,\n type ObjectLiteralExpression,\n type SourceFile,\n} from \"ts-morph\";\nimport type { ChatGptWidgetOptions, ToolWidgetOptions, WidgetBuildConfig, WidgetBundlerHook } from \"@sidecar-ai/core\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"./ast.js\";\nimport { CompilerError } from \"./errors.js\";\nimport type { SidecarSourceVariant, SidecarTarget, SidecarToolManifestEntry, SidecarWidgetManifestEntry } from \"./types.js\";\nimport { escapeHtml, safePathSegment, toImportSpecifier } from \"./utils.js\";\n\nconst CLAUDE_FONT_RESOURCE_DOMAIN = \"https://assets.claude.ai\";\nconst requireFromCompiler = createRequire(import.meta.url);\n\n/** Bundles every discovered `widget.tsx` into a content-hashed HTML resource. */\nexport async function buildWidgets(\n rootDir: string,\n outDir: string,\n tools: SidecarToolManifestEntry[],\n config: WidgetBuildConfig | undefined = undefined,\n): Promise<void> {\n const widgets = tools.filter(\n (\n entry,\n ): entry is SidecarToolManifestEntry & {\n widget: SidecarWidgetManifestEntry;\n } => Boolean(entry.widget),\n );\n if (!widgets.length) {\n return;\n }\n\n const cacheDir = path.join(rootDir, \".sidecar\", \"cache\", \"widgets\");\n await mkdir(cacheDir, { recursive: true });\n const appStyle = await prepareAppStyle(rootDir, cacheDir);\n const configure = await loadWidgetBundlerHook(rootDir, cacheDir, config?.configure);\n\n for (const entry of widgets) {\n const sourceFile = path.join(rootDir, entry.widget.sourceFile);\n const safeId = safePathSegment(entry.id);\n const entryFile = path.join(cacheDir, `${safeId}.entry.tsx`);\n const importPath = toImportSpecifier(path.dirname(entryFile), sourceFile);\n\n await writeFile(\n entryFile,\n `import React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { SidecarWidgetRoot } from \"@sidecar-ai/react\";\nimport \"@sidecar-ai/native/styles.css\";\n${appStyle ? `import ${JSON.stringify(toImportSpecifier(path.dirname(entryFile), appStyle))};` : \"\"}\nimport Component from ${JSON.stringify(importPath)};\n\ncreateRoot(document.getElementById(\"root\")!).render(\n React.createElement(SidecarWidgetRoot, null, React.createElement(Component))\n);\n`,\n );\n\n const baseOptions = enforceWidgetBuildInvariants({\n absWorkingDir: rootDir,\n alias: sidecarWidgetAliases(rootDir),\n bundle: true,\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(\"production\"),\n },\n entryPoints: [entryFile],\n format: \"iife\",\n jsx: \"automatic\",\n minify: true,\n nodePaths: [\n path.join(rootDir, \"node_modules\"),\n path.join(process.cwd(), \"node_modules\"),\n ],\n outfile: \"widget.js\",\n platform: \"browser\",\n sourcemap: false,\n write: false,\n });\n const staticOptions = widgetBuildOptionsFromConfig(rootDir, config);\n const configuredOptions = configure\n ? await configureWidgetBuild(configure, {\n rootDir,\n outDir,\n entryFile,\n widget: {\n toolId: entry.id,\n toolName: entry.name,\n target: entry.target,\n sourceFile: entry.widget.sourceFile,\n },\n esbuildOptions: mergeWidgetBuildOptions(baseOptions, staticOptions),\n })\n : undefined;\n const bundled = await esbuild(enforceWidgetBuildInvariants(\n mergeWidgetBuildOptions(baseOptions, staticOptions, configuredOptions),\n { rootDir, entryFile },\n ));\n\n const outputFiles = bundled.outputFiles ?? [];\n const javascript = outputFiles.find((file) => file.path.endsWith(\".js\"))?.text ?? \"\";\n const css = outputFiles\n .filter((file) => file.path.endsWith(\".css\"))\n .map((file) => file.text)\n .join(\"\\n\");\n const html = renderWidgetHtml(entry.name, javascript, css);\n const hash = createHash(\"sha256\").update(html).digest(\"hex\").slice(0, 12);\n const outputDir = path.join(outDir, \"public\", \"widgets\", safeId);\n const outputFile = path.join(outputDir, `widget.${hash}.html`);\n const resourceUri = `ui://${safeId}/widget.${hash}.html`;\n\n await mkdir(outputDir, { recursive: true });\n await writeFile(outputFile, html);\n\n entry.widget.resourceUri = resourceUri;\n entry.widget.resourceMeta = widgetResourceMeta(entry.widget.options, entry.target);\n entry.widget.outputFile = path.relative(outDir, outputFile);\n entry.descriptor._meta = mergeWidgetMeta(entry.descriptor._meta, widgetMeta(resourceUri, entry.widget.options, entry.target));\n }\n}\n\n/** Bundles the single dynamic widget attached to the public code-mode execute tool. */\nexport async function buildCodeModeWidget(\n rootDir: string,\n outDir: string,\n tools: SidecarToolManifestEntry[],\n target: SidecarTarget,\n config: WidgetBuildConfig | undefined = undefined,\n): Promise<SidecarWidgetManifestEntry | undefined> {\n const renderable = tools.filter(\n (\n entry,\n ): entry is SidecarToolManifestEntry & {\n widget: SidecarWidgetManifestEntry;\n } => Boolean(entry.widget),\n );\n if (!renderable.length) {\n return undefined;\n }\n\n const cacheDir = path.join(rootDir, \".sidecar\", \"cache\", \"widgets\");\n await mkdir(cacheDir, { recursive: true });\n const appStyle = await prepareAppStyle(rootDir, cacheDir);\n const configure = await loadWidgetBundlerHook(rootDir, cacheDir, config?.configure);\n const safeId = \"code-mode\";\n const entryFile = path.join(cacheDir, `${safeId}.entry.tsx`);\n await writeFile(entryFile, renderCodeModeWidgetEntry(rootDir, entryFile, renderable, appStyle));\n\n const baseOptions = enforceWidgetBuildInvariants({\n absWorkingDir: rootDir,\n alias: sidecarWidgetAliases(rootDir),\n bundle: true,\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(\"production\"),\n },\n entryPoints: [entryFile],\n format: \"iife\",\n jsx: \"automatic\",\n minify: true,\n nodePaths: [\n path.join(rootDir, \"node_modules\"),\n path.join(process.cwd(), \"node_modules\"),\n ],\n outfile: \"widget.js\",\n platform: \"browser\",\n sourcemap: false,\n write: false,\n });\n const staticOptions = widgetBuildOptionsFromConfig(rootDir, config);\n const configuredOptions = configure\n ? await configureWidgetBuild(configure, {\n rootDir,\n outDir,\n entryFile,\n widget: {\n toolId: \"execute_code\",\n toolName: \"Execute Code\",\n target,\n sourceFile: path.relative(rootDir, entryFile),\n },\n esbuildOptions: mergeWidgetBuildOptions(baseOptions, staticOptions),\n })\n : undefined;\n const bundled = await esbuild(enforceWidgetBuildInvariants(\n mergeWidgetBuildOptions(baseOptions, staticOptions, configuredOptions),\n { rootDir, entryFile },\n ));\n\n const outputFiles = bundled.outputFiles ?? [];\n const javascript = outputFiles.find((file) => file.path.endsWith(\".js\"))?.text ?? \"\";\n const css = outputFiles\n .filter((file) => file.path.endsWith(\".css\"))\n .map((file) => file.text)\n .join(\"\\n\");\n const html = renderWidgetHtml(\"Execute Code\", javascript, css);\n const hash = createHash(\"sha256\").update(html).digest(\"hex\").slice(0, 12);\n const outputDir = path.join(outDir, \"public\", \"widgets\", safeId);\n const outputFile = path.join(outputDir, `widget.${hash}.html`);\n const resourceUri = `ui://${safeId}/widget.${hash}.html`;\n const options: ToolWidgetOptions = {\n description: \"Renders the selected result from a Sidecar code-mode execution.\",\n csp: {\n connectDomains: [],\n resourceDomains: [],\n },\n };\n\n await mkdir(outputDir, { recursive: true });\n await writeFile(outputFile, html);\n\n return {\n sourceFile: path.relative(rootDir, entryFile),\n variant: \"shared\",\n resourceUri,\n resourceMeta: widgetResourceMeta(options, target),\n outputFile: path.relative(outDir, outputFile),\n options,\n };\n}\n\n/** Converts static config into esbuild option extensions. */\nfunction widgetBuildOptionsFromConfig(\n rootDir: string,\n config: WidgetBuildConfig | undefined,\n): BuildOptions | undefined {\n const esbuildConfig = config?.esbuild;\n if (!esbuildConfig) {\n return undefined;\n }\n\n return {\n alias: normalizeAliases(rootDir, esbuildConfig.alias),\n conditions: esbuildConfig.conditions,\n define: esbuildConfig.define,\n external: esbuildConfig.external,\n jsx: esbuildConfig.jsx,\n jsxImportSource: esbuildConfig.jsxImportSource,\n loader: esbuildConfig.loader as Record<string, Loader> | undefined,\n mainFields: esbuildConfig.mainFields,\n };\n}\n\n/** Loads a project-level widget bundler hook from TS or JS. */\nasync function loadWidgetBundlerHook(\n rootDir: string,\n cacheDir: string,\n hookPath: string | undefined,\n): Promise<WidgetBundlerHook<BuildOptions> | undefined> {\n if (!hookPath) {\n return undefined;\n }\n\n const sourcePath = path.resolve(rootDir, hookPath);\n const relative = path.relative(rootDir, sourcePath);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(`Widget bundler hook must stay inside the project root: ${hookPath}`);\n }\n if (!existsSync(sourcePath)) {\n throw new Error(`Widget bundler hook not found: ${hookPath}`);\n }\n\n const outputFile = path.join(cacheDir, `widget-bundler.${contentHash(hookPath)}.mjs`);\n await esbuild({\n absWorkingDir: rootDir,\n alias: devSidecarBundleAliases(rootDir),\n bundle: true,\n entryPoints: [sourcePath],\n format: \"esm\",\n nodePaths: [\n path.join(rootDir, \"node_modules\"),\n path.join(process.cwd(), \"node_modules\"),\n ],\n outfile: outputFile,\n packages: \"external\",\n platform: \"node\",\n target: \"node20\",\n });\n\n const module = (await import(`${pathToFileURL(outputFile).href}?t=${Date.now()}`)) as {\n default?: unknown;\n };\n if (typeof module.default !== \"function\") {\n throw new Error(`Widget bundler hook must default-export a function: ${hookPath}`);\n }\n\n return module.default as WidgetBundlerHook<BuildOptions>;\n}\n\n/** Runs the project hook and normalizes its supported return shapes. */\nasync function configureWidgetBuild(\n hook: WidgetBundlerHook<BuildOptions>,\n input: Parameters<WidgetBundlerHook<BuildOptions>>[0],\n): Promise<BuildOptions | undefined> {\n const result = await hook(input);\n if (!result) {\n return undefined;\n }\n if (typeof result === \"object\" && \"esbuildOptions\" in result) {\n return result.esbuildOptions;\n }\n return result as BuildOptions;\n}\n\n/** Merges esbuild options while preserving additive fields. */\nfunction mergeWidgetBuildOptions(\n ...options: Array<BuildOptions | undefined>\n): BuildOptions {\n const merged: BuildOptions = {};\n for (const option of options) {\n if (!option) {\n continue;\n }\n\n const previousAlias = merged.alias;\n const previousDefine = merged.define;\n const previousLoader = merged.loader;\n const previousExternal = merged.external;\n const previousNodePaths = merged.nodePaths;\n const previousPlugins = merged.plugins;\n Object.assign(merged, option);\n merged.alias = { ...(previousAlias ?? {}), ...(option.alias ?? {}) };\n merged.define = { ...(previousDefine ?? {}), ...(option.define ?? {}) };\n merged.loader = { ...(previousLoader ?? {}), ...(option.loader ?? {}) };\n merged.external = uniqueStrings([...(previousExternal ?? []), ...(option.external ?? [])]);\n merged.nodePaths = uniqueStrings([...(previousNodePaths ?? []), ...(option.nodePaths ?? [])]);\n merged.plugins = [...(previousPlugins ?? []), ...(option.plugins ?? [])] as Plugin[];\n }\n return merged;\n}\n\n/** Re-applies Sidecar-owned esbuild invariants after project extensions. */\nfunction enforceWidgetBuildInvariants(\n options: BuildOptions,\n required?: { rootDir: string; entryFile: string },\n): BuildOptions {\n const aliases = required\n ? { ...(options.alias ?? {}), ...reactSingletonAliases(required.rootDir) }\n : options.alias;\n\n return {\n ...options,\n absWorkingDir: required?.rootDir ?? options.absWorkingDir,\n alias: aliases,\n bundle: true,\n entryPoints: required ? [required.entryFile] : options.entryPoints,\n format: \"iife\",\n outfile: \"widget.js\",\n platform: \"browser\",\n write: false,\n };\n}\n\n/** Renders the generated React entrypoint for the dynamic code-mode widget. */\nfunction renderCodeModeWidgetEntry(\n rootDir: string,\n entryFile: string,\n entries: Array<SidecarToolManifestEntry & { widget: SidecarWidgetManifestEntry }>,\n appStyle: string | undefined,\n): string {\n const entryDir = path.dirname(entryFile);\n const imports = entries.map((entry, index) => {\n const sourceFile = path.join(rootDir, entry.widget.sourceFile);\n return `import Widget${index} from ${JSON.stringify(toImportSpecifier(entryDir, sourceFile))};`;\n }).join(\"\\n\");\n const registry = entries\n .map((entry, index) => `${JSON.stringify(entry.id)}: Widget${index}`)\n .join(\",\\n \");\n\n return `import React, { useMemo } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport {\n SidecarWidgetProvider,\n SidecarWidgetRoot,\n browserBridge,\n useToolResult\n} from \"@sidecar-ai/react\";\nimport { Heading, Stack, Surface, Text } from \"@sidecar-ai/native/components\";\nimport \"@sidecar-ai/native/styles.css\";\n${appStyle ? `import ${JSON.stringify(toImportSpecifier(entryDir, appStyle))};` : \"\"}\n${imports}\n\nconst registry = {\n ${registry}\n};\n\nfunction nestedResult(result, payload) {\n return {\n ...result,\n structuredContent: payload?.result ?? payload?.value,\n structured: payload?.result ?? payload?.value,\n content: payload?.content ?? result.content ?? [],\n meta: payload?.meta ?? result.meta ?? {},\n _meta: payload?.meta ?? result._meta ?? {},\n };\n}\n\nfunction createNestedBridge(result, payload) {\n return {\n ...browserBridge,\n getToolResult() {\n return nestedResult(result, payload);\n },\n subscribeToolResult(listener) {\n return browserBridge.subscribeToolResult((next) => {\n const nextPayload = next?.structuredContent?.codeMode;\n listener(nestedResult(next, nextPayload));\n });\n },\n };\n}\n\nfunction GenericCodeModeResult({ payload }) {\n return React.createElement(\"main\", { className: \"sidecar-code-mode\" },\n React.createElement(Stack, { gap: \"md\" },\n React.createElement(Heading, { level: 1 }, \"Code result\"),\n React.createElement(Surface, { variant: \"card\" },\n React.createElement(\"pre\", {\n style: {\n margin: 0,\n overflowWrap: \"anywhere\",\n whiteSpace: \"pre-wrap\"\n }\n }, JSON.stringify(payload?.value ?? payload ?? {}, null, 2))\n )\n )\n );\n}\n\nfunction CodeModeWidget() {\n const result = useToolResult();\n const payload = result.structuredContent?.codeMode;\n const renderer = payload?.renderer;\n const Component = renderer ? registry[renderer] : undefined;\n const bridge = useMemo(() => createNestedBridge(result, payload), [result, payload]);\n\n if (Component) {\n return React.createElement(\n SidecarWidgetProvider,\n { bridge },\n React.createElement(Component)\n );\n }\n\n if (payload?.ok === false) {\n return React.createElement(\"main\", { className: \"sidecar-code-mode\" },\n React.createElement(Stack, { gap: \"sm\" },\n React.createElement(Heading, { level: 1 }, \"Code failed\"),\n React.createElement(Text, { tone: \"muted\" }, \"The generated code did not complete successfully.\")\n )\n );\n }\n\n return React.createElement(GenericCodeModeResult, { payload });\n}\n\ncreateRoot(document.getElementById(\"root\")).render(\n React.createElement(SidecarWidgetRoot, null, React.createElement(CodeModeWidget))\n);\n`;\n}\n\n/** Builds all Sidecar-owned widget aliases, including React singleton aliases. */\nfunction sidecarWidgetAliases(rootDir: string): Record<string, string> | undefined {\n return {\n ...(devSidecarBundleAliases(rootDir) ?? {}),\n ...reactSingletonAliases(rootDir),\n };\n}\n\n/** Forces React and React DOM to resolve from one project-local copy. */\nfunction reactSingletonAliases(rootDir: string): Record<string, string> {\n return {\n react: resolveProjectModule(rootDir, \"react\"),\n \"react/jsx-runtime\": resolveProjectModule(rootDir, \"react/jsx-runtime\"),\n \"react/jsx-dev-runtime\": resolveProjectModule(rootDir, \"react/jsx-dev-runtime\"),\n \"react-dom\": resolveProjectModule(rootDir, \"react-dom\"),\n \"react-dom/client\": resolveProjectModule(rootDir, \"react-dom/client\"),\n \"react-dom/server\": resolveProjectModule(rootDir, \"react-dom/server\"),\n };\n}\n\n/** Resolves a package entry as the app would, falling back to the compiler workspace. */\nfunction resolveProjectModule(rootDir: string, specifier: string): string {\n return requireFromCompiler.resolve(specifier, {\n paths: [rootDir, process.cwd()],\n });\n}\n\n/** Resolves relative alias replacements from the app root for predictable builds. */\nfunction normalizeAliases(\n rootDir: string,\n aliases: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!aliases) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(aliases).map(([key, value]) => [\n key,\n value.startsWith(\".\") ? path.resolve(rootDir, value) : value,\n ]),\n );\n}\n\n/** Deduplicates esbuild string-array options. */\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values)];\n}\n\n/** Creates a short stable hash for cache file names. */\nfunction contentHash(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n}\n\n/** Provides source aliases when bundling repo-local examples before dist exists. */\nfunction devSidecarBundleAliases(rootDir: string): Record<string, string> | undefined {\n const repoRoot = findSidecarRepoRoot(rootDir) ?? findSidecarRepoRoot(process.cwd());\n if (!repoRoot) {\n return undefined;\n }\n const reactEntry = path.join(repoRoot, \"packages\", \"react\", \"src\", \"index.ts\");\n if (!existsSync(reactEntry)) {\n return undefined;\n }\n\n return {\n \"sidecar-ai/remote\": path.join(repoRoot, \"packages\", \"sidecar-ai\", \"src\", \"remote.ts\"),\n \"sidecar-ai\": path.join(repoRoot, \"packages\", \"sidecar-ai\", \"src\", \"index.ts\"),\n \"@sidecar-ai/client\": path.join(repoRoot, \"packages\", \"client\", \"src\", \"index.ts\"),\n \"@sidecar-ai/core\": path.join(repoRoot, \"packages\", \"core\", \"src\", \"index.ts\"),\n \"@sidecar-ai/react\": reactEntry,\n \"@sidecar-ai/native\": path.join(repoRoot, \"packages\", \"native\", \"src\", \"index.ts\"),\n \"@sidecar-ai/native/components\": path.join(repoRoot, \"packages\", \"native\", \"src\", \"components\", \"index.tsx\"),\n \"@sidecar-ai/native/styles.css\": path.join(repoRoot, \"packages\", \"native\", \"src\", \"styles.css\"),\n };\n}\n\n/** Finds the repository root for source aliases used by local workspace tests. */\nfunction findSidecarRepoRoot(startDir: string): string | undefined {\n let current = path.resolve(startDir);\n while (true) {\n if (existsSync(path.join(current, \"packages\", \"core\", \"src\", \"index.ts\"))) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n\n/** Copies and optionally processes root `style.css` for widget builds. */\nasync function prepareAppStyle(rootDir: string, cacheDir: string): Promise<string | undefined> {\n const sourceFile = path.join(rootDir, \"style.css\");\n if (!existsSync(sourceFile)) {\n return undefined;\n }\n\n const source = await readFile(sourceFile, \"utf8\");\n const css = await processAppStyle(source, sourceFile);\n const outputFile = path.join(cacheDir, \"style.css\");\n await writeFile(outputFile, css);\n return outputFile;\n}\n\n/** Runs Tailwind/PostCSS only when the app stylesheet needs it. */\nasync function processAppStyle(source: string, from: string): Promise<string> {\n if (!needsPostcss(source)) {\n return source;\n }\n\n const cssSource = source\n .replace(/@import\\s+[\"']tailwindcss[\"'];?/g, \"@tailwind utilities;\")\n .replace(/@import\\s+[\"']@openai\\/apps-sdk-ui\\/css[\"'];?/g, \"\");\n const plugins = [];\n if (cssSource.includes(\"@tailwind\")) {\n const tailwind = await import(\"@tailwindcss/postcss\");\n plugins.push(tailwind.default({ base: path.dirname(from) }));\n }\n\n const autoprefixer = await import(\"autoprefixer\");\n plugins.push(autoprefixer.default());\n\n const result = await postcss(plugins).process(cssSource, {\n from,\n map: false,\n });\n return result.css;\n}\n\n/** Returns true when CSS contains framework directives that esbuild does not own. */\nfunction needsPostcss(source: string): boolean {\n return /@import\\s+[\"']tailwindcss[\"']|@tailwind|@source|@theme|@plugin/.test(source);\n}\n\n/** Finds a sibling `widget.tsx` for a tool file. */\nexport function findWidget(\n rootDir: string,\n toolFile: string,\n id: string,\n target: SidecarTarget = \"mcp\",\n toolVariant: SidecarSourceVariant = \"shared\",\n): SidecarWidgetManifestEntry | undefined {\n const selected = selectWidgetFile(path.dirname(toolFile), target, toolVariant);\n if (!selected) {\n return undefined;\n }\n\n const safeId = safePathSegment(id);\n return {\n sourceFile: path.relative(rootDir, selected.filePath),\n variant: selected.variant,\n resourceUri: `ui://${safeId}/widget.html`,\n };\n}\n\n/** Extracts `widget({ ... }, Component)` metadata from a widget source file. */\nexport function readWidgetOptions(\n sourceFile: SourceFile,\n): ToolWidgetOptions | undefined {\n const definition = findWidgetDefinition(sourceFile);\n if (!definition) {\n return undefined;\n }\n\n const options: ToolWidgetOptions = {};\n const description = readStringProperty(definition, \"description\");\n const prefersBorder = readBooleanProperty(definition, \"prefersBorder\");\n const csp = readWidgetCsp(definition);\n const permissions = readWidgetPermissions(definition);\n const chatgpt = readChatGptWidgetOptions(definition);\n const domain = readStringProperty(definition, \"domain\");\n\n if (description) options.description = description;\n if (prefersBorder !== undefined) options.prefersBorder = prefersBorder;\n if (domain) options.domain = domain;\n if (csp) options.csp = csp;\n if (permissions) options.permissions = permissions;\n if (chatgpt) options.hosts = { chatgpt };\n\n return Object.keys(options).length ? options : undefined;\n}\n\n/** Builds standard tool-to-widget and ChatGPT-compatible metadata for a descriptor. */\nexport function widgetMeta(\n resourceUri: string,\n options: ToolWidgetOptions = {},\n target: SidecarTarget = \"mcp\",\n): Record<string, unknown> {\n const chatgptCsp = {\n connect_domains: options.csp?.connectDomains ? [...options.csp.connectDomains] : [],\n resource_domains: options.csp?.resourceDomains ? [...options.csp.resourceDomains] : [],\n frame_domains: options.csp?.frameDomains ? [...options.csp.frameDomains] : undefined,\n redirect_domains: options.hosts?.chatgpt?.redirectDomains\n ? [...options.hosts.chatgpt.redirectDomains]\n : undefined,\n };\n\n const standard = {\n ui: {\n resourceUri,\n },\n \"ui/resourceUri\": resourceUri,\n };\n\n if (target !== \"chatgpt\") {\n return standard;\n }\n\n return {\n ...standard,\n \"openai/outputTemplate\": resourceUri,\n \"openai/widgetDescription\": options.description,\n \"openai/widgetDomain\": options.hosts?.chatgpt?.domain,\n \"openai/widgetCSP\": stripUndefined(chatgptCsp),\n };\n}\n\n/** Builds MCP Apps metadata for the `ui://` resource content. */\nexport function widgetResourceMeta(\n options: ToolWidgetOptions = {},\n target: SidecarTarget = \"mcp\",\n): Record<string, unknown> | undefined {\n const csp = stripUndefined({\n connectDomains: options.csp?.connectDomains ? [...options.csp.connectDomains] : [],\n resourceDomains: widgetResourceDomains(options, target),\n frameDomains: options.csp?.frameDomains ? [...options.csp.frameDomains] : undefined,\n baseUriDomains: options.csp?.baseUriDomains ? [...options.csp.baseUriDomains] : undefined,\n });\n const permissions = widgetPermissionsMeta(options);\n const ui = stripUndefined({\n csp,\n permissions,\n domain: options.domain ?? (target === \"chatgpt\" ? options.hosts?.chatgpt?.domain : undefined),\n prefersBorder: options.prefersBorder,\n });\n\n return Object.keys(ui).length ? { ui } : undefined;\n}\n\n/** Adds Claude's documented font origin when building Claude-targeted widgets. */\nfunction widgetResourceDomains(\n options: ToolWidgetOptions,\n target: SidecarTarget,\n): string[] {\n const domains = [...(options.csp?.resourceDomains ?? [])];\n if (target === \"claude\" && !domains.includes(CLAUDE_FONT_RESOURCE_DOMAIN)) {\n domains.push(CLAUDE_FONT_RESOURCE_DOMAIN);\n }\n return domains;\n}\n\n/** Locates the default-exported widget helper call when a widget uses one. */\nfunction findWidgetDefinition(\n sourceFile: SourceFile,\n): ObjectLiteralExpression | undefined {\n const call = resolveDefaultExportCall(sourceFile, \"widget\");\n if (!call) {\n return undefined;\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n throw new CompilerError(\n sourceFile,\n \"widget(...) must receive its metadata object as the first argument.\",\n );\n }\n\n return definition;\n}\n\n/** Reads standard widget CSP options. */\nfunction readWidgetCsp(\n definition: ObjectLiteralExpression,\n): ToolWidgetOptions[\"csp\"] | undefined {\n const initializer = readObjectProperty(definition, \"csp\");\n if (!initializer) {\n return undefined;\n }\n\n const csp = {\n connectDomains: readStringArrayProperty(initializer, \"connectDomains\"),\n resourceDomains: readStringArrayProperty(initializer, \"resourceDomains\"),\n frameDomains: readStringArrayProperty(initializer, \"frameDomains\"),\n baseUriDomains: readStringArrayProperty(initializer, \"baseUriDomains\"),\n };\n return stripUndefined(csp);\n}\n\n/** Reads standard MCP Apps permission requests. */\nfunction readWidgetPermissions(\n definition: ObjectLiteralExpression,\n): ToolWidgetOptions[\"permissions\"] | undefined {\n const initializer = readObjectProperty(definition, \"permissions\");\n if (!initializer) {\n return undefined;\n }\n\n const permissions = {\n camera: readBooleanProperty(initializer, \"camera\"),\n microphone: readBooleanProperty(initializer, \"microphone\"),\n geolocation: readBooleanProperty(initializer, \"geolocation\"),\n clipboardWrite: readBooleanProperty(initializer, \"clipboardWrite\"),\n };\n return stripUndefined(permissions);\n}\n\n/** Converts boolean permission flags into the standard empty-object shape. */\nfunction widgetPermissionsMeta(options: ToolWidgetOptions): Record<string, unknown> | undefined {\n const permissions = options.permissions;\n if (!permissions) {\n return undefined;\n }\n\n const meta = stripUndefined({\n camera: permissions.camera ? {} : undefined,\n microphone: permissions.microphone ? {} : undefined,\n geolocation: permissions.geolocation ? {} : undefined,\n clipboardWrite: permissions.clipboardWrite ? {} : undefined,\n });\n return Object.keys(meta).length ? meta : undefined;\n}\n\n/** Reads ChatGPT-only widget compatibility options. */\nfunction readChatGptWidgetOptions(\n definition: ObjectLiteralExpression,\n): ChatGptWidgetOptions | undefined {\n const hosts = readObjectProperty(definition, \"hosts\");\n const chatgpt = hosts ? readObjectProperty(hosts, \"chatgpt\") : undefined;\n if (!chatgpt) {\n return undefined;\n }\n\n const options = {\n domain: readStringProperty(chatgpt, \"domain\"),\n redirectDomains: readStringArrayProperty(chatgpt, \"redirectDomains\"),\n };\n return stripUndefined(options);\n}\n\n/** Reads a nested object literal property, unwrapping TS-only expressions. */\nfunction readObjectProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): ObjectLiteralExpression | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** Reads a string literal property from an object literal. */\nfunction readStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isStringLiteral(initializer)\n ? initializer.getLiteralText()\n : undefined;\n}\n\n/** Reads a boolean literal property from an object literal. */\nfunction readBooleanProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): boolean | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n\n if (initializer.getKind() === SyntaxKind.TrueKeyword) {\n return true;\n }\n if (initializer.getKind() === SyntaxKind.FalseKeyword) {\n return false;\n }\n return undefined;\n}\n\n/** Reads a string literal array property from an object literal. */\nfunction readStringArrayProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string[] | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n\n return initializer\n .getElements()\n .filter(Node.isStringLiteral)\n .map((element) => element.getLiteralText());\n}\n\n/** Selects the widget source for a target, preferring platform overrides. */\nfunction selectWidgetFile(\n directory: string,\n target: SidecarTarget,\n toolVariant: SidecarSourceVariant,\n): { filePath: string; variant: SidecarSourceVariant } | undefined {\n if (toolVariant === \"openai\") {\n const filePath = path.join(directory, \"widget.openai.tsx\");\n return existsSync(filePath) ? { filePath, variant: \"openai\" } : undefined;\n }\n\n if (toolVariant === \"anthropic\") {\n const filePath = path.join(directory, \"widget.anthropic.tsx\");\n return existsSync(filePath) ? { filePath, variant: \"anthropic\" } : undefined;\n }\n\n const candidates =\n target === \"chatgpt\" || target === \"claude\" || target === \"mcp\"\n ? [{ name: \"widget.tsx\", variant: \"shared\" as const }]\n : [];\n\n for (const candidate of candidates) {\n const filePath = path.join(directory, candidate.name);\n if (existsSync(filePath)) {\n return { filePath, variant: candidate.variant };\n }\n }\n\n return undefined;\n}\n\n/** Merges widget metadata into existing descriptor metadata without losing `ui`. */\nexport function mergeWidgetMeta(\n existing: Record<string, unknown> | undefined,\n widget: Record<string, unknown>,\n): Record<string, unknown> {\n const merged: Record<string, unknown> = { ...(existing ?? {}) };\n for (const [key, value] of Object.entries(widget)) {\n if (key === \"ui\" && isRecord(value) && isRecord(merged.ui)) {\n merged.ui = { ...merged.ui, ...value };\n } else {\n merged[key] = value;\n }\n }\n return merged;\n}\n\n/** Wraps bundled JavaScript in the minimal transparent widget document. */\nfunction renderWidgetHtml(title: string, javascript: string, css = \"\"): string {\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${escapeHtml(title)}</title>\n <style>\n :root { color-scheme: light dark; font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; }\n html, body, #root { min-height: 100%; margin: 0; background: transparent; }\n body { color: CanvasText; }\n * { box-sizing: border-box; }\n ${css}\n </style>\n </head>\n <body>\n <div id=\"root\"></div>\n <script>${javascript}</script>\n </body>\n</html>\n`;\n}\n\n/** Returns true for metadata objects that can be shallow-merged. */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\n/** Drops undefined keys from emitted metadata objects. */\nfunction stripUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n","/** Build orchestration for Sidecar projects. */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { analyzeProjectTools } from \"./analyze.js\";\nimport { analyzeProjectConfig } from \"./config.js\";\nimport { collectProjectDiagnostics, formatDiagnostic } from \"./diagnostics.js\";\nimport { writeGeneratedTypes } from \"./generated.js\";\nimport { loadProjectIdentity } from \"./identity.js\";\nimport { buildPluginPackages } from \"./plugins.js\";\nimport { analyzeProjectPrompts } from \"./prompts.js\";\nimport { analyzeProjectResources } from \"./resources.js\";\nimport { VERCEL_FUNCTION_DIR, buildServerOutput } from \"./server-output.js\";\nimport type { BuildProjectOptions, SidecarManifest, SidecarResourceTemplateManifestEntry } from \"./types.js\";\nimport { buildCodeModeWidget, buildWidgets } from \"./widgets.js\";\n\n/** Builds the MCP output, generated types, and optional plugin packages. */\nexport async function buildProject(\n options: BuildProjectOptions,\n): Promise<SidecarManifest> {\n const rootDir = path.resolve(options.rootDir);\n const config = analyzeProjectConfig(rootDir);\n const target = options.target ?? config.build.target ?? \"mcp\";\n const host = options.host ?? config.build.host ?? \"node\";\n const plugins = options.plugins ?? config.build.plugins ?? false;\n if (config.codeMode.enabled && !config.codeMode.unsafe && !config.remoteExecution.enabled) {\n throw new Error(\"Code mode requires remoteExecution: true, or codeMode: { unsafe: true } for trusted local use.\");\n }\n if (config.codeMode.enabled && config.remoteExecution.enabled && !existsSync(path.join(rootDir, \"remote.ts\"))) {\n throw new Error(\"remoteExecution: true requires a reserved remote.ts file at the project root.\");\n }\n const tools = await analyzeProjectTools(rootDir, { target });\n const resources = await analyzeProjectResources(rootDir);\n const resourceTemplates: SidecarResourceTemplateManifestEntry[] = [];\n const prompts = await analyzeProjectPrompts(rootDir);\n const identity = await loadProjectIdentity(rootDir);\n const diagnostics = await collectProjectDiagnostics(rootDir, {\n tools,\n resources,\n prompts,\n config,\n });\n const errors = diagnostics.filter((diagnostic) => diagnostic.severity === \"error\");\n if (errors.length) {\n throw new Error(errors.map(formatDiagnostic).join(\"\\n\"));\n }\n\n const outDir = resolveInsideRoot(rootDir, options.outDir ?? config.build.outDir ?? defaultBuildOutDir(host, target));\n const runtimeOutDir = resolveRuntimeOutputDir(outDir, host);\n await buildWidgets(rootDir, runtimeOutDir, tools, config.build.widgets);\n const codeModeWidget = config.codeMode.enabled && config.codeMode.render.enabled\n ? await buildCodeModeWidget(rootDir, runtimeOutDir, tools, target, config.build.widgets)\n : undefined;\n\n const manifest: SidecarManifest = {\n version: 1,\n target,\n host,\n rootDir: \".\",\n generatedAt: new Date().toISOString(),\n config,\n tools,\n codeMode: config.codeMode.enabled\n ? {\n enabled: true,\n unsafe: config.codeMode.unsafe,\n remoteExecution: config.remoteExecution.enabled,\n render: config.codeMode.render,\n widget: codeModeWidget,\n }\n : undefined,\n resources,\n resourceTemplates,\n prompts,\n diagnostics,\n };\n\n await mkdir(runtimeOutDir, { recursive: true });\n await writeFile(\n path.join(runtimeOutDir, \"manifest.sidecar.json\"),\n `${JSON.stringify(manifest, null, 2)}\\n`,\n );\n await writeFile(path.join(runtimeOutDir, \"README.md\"), renderMcpReadme(manifest));\n await writeGeneratedTypes(rootDir, tools);\n await buildServerOutput(rootDir, runtimeOutDir, manifest, identity, host, {\n vercelOutputDir: outDir,\n });\n if (plugins) {\n await buildPluginPackages(rootDir, resolvePluginOutputBase(rootDir, outDir, host), manifest);\n }\n\n return manifest;\n}\n\n/** Returns the conventional output directory for a host target. */\nfunction defaultBuildOutDir(host: string, target: string): string {\n if (host === \"vercel\") {\n return \".vercel/output\";\n }\n return `out/${target}`;\n}\n\n/** Chooses where runtime-private files live for the selected host. */\nfunction resolveRuntimeOutputDir(outDir: string, host: string): string {\n if (host === \"vercel\") {\n return path.join(outDir, VERCEL_FUNCTION_DIR);\n }\n return outDir;\n}\n\n/** Chooses where installable plugin packages should be written. */\nfunction resolvePluginOutputBase(rootDir: string, outDir: string, host: string): string {\n if (host === \"vercel\" && isVercelBuildOutputDir(outDir)) {\n return path.join(rootDir, \"out\");\n }\n return path.dirname(outDir);\n}\n\n/** Returns true for Vercel's required Build Output API directory. */\nfunction isVercelBuildOutputDir(outDir: string): boolean {\n return path.basename(outDir) === \"output\" && path.basename(path.dirname(outDir)) === \".vercel\";\n}\n\n/** Resolves build output paths while preventing writes outside the project. */\nfunction resolveInsideRoot(rootDir: string, output: string): string {\n const resolved = path.resolve(rootDir, output);\n const relative = path.relative(rootDir, resolved);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(`Build output must stay inside the project root: ${output}`);\n }\n return resolved;\n}\n\n/** Renders a short build README with detected tools and install context. */\nfunction renderMcpReadme(manifest: SidecarManifest): string {\n const tools = manifest.tools\n .map((toolEntry) => `- \\`${toolEntry.id}\\`: ${toolEntry.description}`)\n .join(\"\\n\");\n const resources = manifest.resources\n .map((resourceEntry) => `- \\`${resourceEntry.uri}\\`: ${resourceEntry.description ?? resourceEntry.name}`)\n .join(\"\\n\");\n const prompts = manifest.prompts\n .map((promptEntry) => `- \\`${promptEntry.name}\\`: ${promptEntry.description ?? promptEntry.title}`)\n .join(\"\\n\");\n\n return `# Sidecar MCP Build\n\nGenerated by Sidecar.\n\n## Tools\n\n${tools || \"No tools detected.\"}\n\n## Resources\n\n${resources || \"No resources detected.\"}\n\n## Prompts\n\n${prompts || \"No prompts detected.\"}\n\n${manifest.host === \"vercel\" ? renderVercelReadmeSection() : renderNodeReadmeSection()}\n\n## Local HTTPS Testing\n\nRun \\`sidecar dev --tunnel\\` from the project root to start the local MCP server on Streamable HTTP and print a validated HTTPS MCP URL that can be added to ChatGPT, Claude, or a Claude plugin install. Temporary quick tunnels are public and best-effort; use a configured tunnel/domain or deployed preview for repeatable testing.\n`;\n}\n\n/** Renders generated README instructions for standalone Node output. */\nfunction renderNodeReadmeSection(): string {\n return `## Run The Server\n\nThis output includes a standalone Node MCP server. Start it with:\n\n\\`\\`\\`sh\nnpm start\n\\`\\`\\`\n\nor:\n\n\\`\\`\\`sh\nnode server/index.js\n\\`\\`\\`\n\nSet \\`PORT\\` or \\`SIDECAR_PORT\\` to choose the listen port. Hosted/authenticated MCPs should set \\`SIDECAR_MCP_URL\\` to the public \\`https://.../mcp\\` URL before starting.\n`;\n}\n\n/** Renders generated README instructions for Vercel output. */\nfunction renderVercelReadmeSection(): string {\n return `## Deploy To Vercel\n\nThis output uses Vercel's Build Output API. The MCP function is emitted at \\`${VERCEL_FUNCTION_DIR}\\`, and \\`config.json\\` routes Streamable HTTP traffic to it. Set \\`SIDECAR_MCP_URL\\` to the public \\`https://.../mcp\\` URL in Vercel.\n`;\n}\n","/** Static Sidecar config extraction for build manifests. */\nimport path from \"node:path\";\nimport {\n Node,\n SyntaxKind,\n type ObjectLiteralExpression,\n} from \"ts-morph\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"./ast.js\";\nimport { createProject } from \"./project.js\";\nimport type { SidecarCompilerConfig } from \"./types.js\";\nimport { existsSyncSafe } from \"./utils.js\";\nimport type { WidgetBuildConfig, WidgetEsbuildConfig } from \"@sidecar-ai/core\";\nimport type { CodeModeRenderStrategy } from \"@sidecar-ai/core\";\n\n/** Reads the serializable subset of `sidecar.config.ts` without executing app code. */\nexport function analyzeProjectConfig(rootDir: string): SidecarCompilerConfig {\n const configPath = path.join(rootDir, \"sidecar.config.ts\");\n if (!existsSyncSafe(configPath)) {\n return defaultCompilerConfig();\n }\n\n const project = createProject(rootDir);\n const sourceFile = project.addSourceFileAtPath(configPath);\n const call = resolveDefaultExportCall(sourceFile, \"defineConfig\");\n const definition = unwrapExpression(call?.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n return defaultCompilerConfig();\n }\n\n return {\n build: {\n target: readTargetNested(definition, \"build\", \"target\"),\n host: readHostNested(definition, \"build\", \"host\"),\n outDir: readStringNested(definition, \"build\", \"outDir\"),\n plugins: readBooleanNested(definition, \"build\", \"plugins\"),\n widgets: readWidgetBuildConfig(definition),\n },\n resources: {\n subscribe: readBooleanNested(definition, \"resources\", \"subscribe\") ?? false,\n listChanged: readBooleanNested(definition, \"resources\", \"listChanged\") ?? false,\n },\n prompts: {\n listChanged: readBooleanNested(definition, \"prompts\", \"listChanged\") ?? false,\n },\n tools: {\n listChanged: readBooleanNested(definition, \"tools\", \"listChanged\") ?? false,\n },\n pagination: {\n pageSize: readNumberNested(definition, \"pagination\", \"pageSize\") ?? 50,\n hasOverride: hasProperty(readObjectProperty(definition, \"pagination\"), \"override\"),\n },\n codeMode: readCodeModeConfig(definition),\n remoteExecution: {\n enabled: readBooleanProperty(definition, \"remoteExecution\") ?? false,\n },\n };\n}\n\n/** Reads static widget bundler options from `build.widgets`. */\nfunction readWidgetBuildConfig(\n definition: ObjectLiteralExpression,\n): WidgetBuildConfig | undefined {\n const widgets = readObjectProperty(readObjectProperty(definition, \"build\"), \"widgets\");\n if (!widgets) {\n return undefined;\n }\n\n const config: WidgetBuildConfig = {};\n const configure = readStringProperty(widgets, \"configure\");\n const esbuild = readWidgetEsbuildConfig(widgets);\n if (configure) config.configure = configure;\n if (esbuild) config.esbuild = esbuild;\n return Object.keys(config).length ? config : undefined;\n}\n\n/** Reads the serializable esbuild option subset from `build.widgets.esbuild`. */\nfunction readWidgetEsbuildConfig(\n widgets: ObjectLiteralExpression,\n): WidgetEsbuildConfig | undefined {\n const esbuild = readObjectProperty(widgets, \"esbuild\");\n if (!esbuild) {\n return undefined;\n }\n\n const config: WidgetEsbuildConfig = {};\n const alias = readStringRecordProperty(esbuild, \"alias\");\n const define = readStringRecordProperty(esbuild, \"define\");\n const external = readStringArrayProperty(esbuild, \"external\");\n const loader = readStringRecordProperty(esbuild, \"loader\");\n const conditions = readStringArrayProperty(esbuild, \"conditions\");\n const mainFields = readStringArrayProperty(esbuild, \"mainFields\");\n const jsx = readStringProperty(esbuild, \"jsx\");\n const jsxImportSource = readStringProperty(esbuild, \"jsxImportSource\");\n\n if (alias) config.alias = alias;\n if (define) config.define = define;\n if (external) config.external = external;\n if (loader) config.loader = loader;\n if (conditions) config.conditions = conditions;\n if (mainFields) config.mainFields = mainFields;\n if (jsx === \"automatic\" || jsx === \"transform\" || jsx === \"preserve\") {\n config.jsx = jsx;\n }\n if (jsxImportSource) config.jsxImportSource = jsxImportSource;\n\n return Object.keys(config).length ? config : undefined;\n}\n\n/** Returns compiler defaults when config is absent. */\nexport function defaultCompilerConfig(): SidecarCompilerConfig {\n return {\n build: {},\n resources: {\n subscribe: false,\n listChanged: false,\n },\n prompts: {\n listChanged: false,\n },\n tools: {\n listChanged: false,\n },\n pagination: {\n pageSize: 50,\n hasOverride: false,\n },\n codeMode: {\n enabled: false,\n unsafe: false,\n render: {\n enabled: true,\n strategy: \"last-renderable\",\n },\n },\n remoteExecution: {\n enabled: false,\n },\n };\n}\n\n/** Reads normalized code-mode settings from the top-level config object. */\nfunction readCodeModeConfig(definition: ObjectLiteralExpression): SidecarCompilerConfig[\"codeMode\"] {\n const defaults = defaultCompilerConfig().codeMode;\n const property = definition.getProperty(\"codeMode\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return defaults;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return defaults;\n }\n if (initializer.getKind() === SyntaxKind.TrueKeyword) {\n return { ...defaults, enabled: true };\n }\n if (initializer.getKind() === SyntaxKind.FalseKeyword) {\n return { ...defaults, enabled: false };\n }\n if (!Node.isObjectLiteralExpression(initializer)) {\n return defaults;\n }\n\n return {\n enabled: true,\n unsafe: readBooleanProperty(initializer, \"unsafe\") ?? false,\n render: readCodeModeRenderConfig(initializer) ?? defaults.render,\n };\n}\n\n/** Reads `codeMode.render`, accepting a boolean or options object. */\nfunction readCodeModeRenderConfig(\n definition: ObjectLiteralExpression,\n): SidecarCompilerConfig[\"codeMode\"][\"render\"] | undefined {\n const property = definition.getProperty(\"render\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n if (initializer.getKind() === SyntaxKind.TrueKeyword) {\n return { enabled: true, strategy: \"last-renderable\" };\n }\n if (initializer.getKind() === SyntaxKind.FalseKeyword) {\n return { enabled: false, strategy: \"last-renderable\" };\n }\n if (!Node.isObjectLiteralExpression(initializer)) {\n return undefined;\n }\n\n return {\n enabled: readBooleanProperty(initializer, \"enabled\") ?? true,\n strategy: readRenderStrategy(initializer) ?? \"last-renderable\",\n };\n}\n\n/** Reads a supported code-mode render strategy string. */\nfunction readRenderStrategy(\n definition: ObjectLiteralExpression,\n): CodeModeRenderStrategy | undefined {\n const value = readStringProperty(definition, \"strategy\");\n if (\n value === \"last-renderable\" ||\n value === \"first-renderable\" ||\n value === \"explicit\"\n ) {\n return value;\n }\n return undefined;\n}\n\n/** Reads a build target nested object property. */\nfunction readTargetNested(\n definition: ObjectLiteralExpression,\n section: string,\n propertyName: string,\n): \"mcp\" | \"chatgpt\" | \"claude\" | undefined {\n const value = readStringNested(definition, section, propertyName);\n return value === \"mcp\" || value === \"chatgpt\" || value === \"claude\"\n ? value\n : undefined;\n}\n\n/** Reads a build host nested object property. */\nfunction readHostNested(\n definition: ObjectLiteralExpression,\n section: string,\n propertyName: string,\n): \"node\" | \"vercel\" | undefined {\n const value = readStringNested(definition, section, propertyName);\n return value === \"node\" || value === \"vercel\" ? value : undefined;\n}\n\n/** Reads a string nested object property. */\nfunction readStringNested(\n definition: ObjectLiteralExpression,\n section: string,\n propertyName: string,\n): string | undefined {\n const object = readObjectProperty(definition, section);\n if (!object) {\n return undefined;\n }\n return readStringProperty(object, propertyName);\n}\n\n/** Reads a boolean nested object property. */\nfunction readBooleanNested(\n definition: ObjectLiteralExpression,\n section: string,\n propertyName: string,\n): boolean | undefined {\n const object = readObjectProperty(definition, section);\n if (!object) {\n return undefined;\n }\n return readBooleanProperty(object, propertyName);\n}\n\n/** Reads a boolean object property. */\nfunction readBooleanProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): boolean | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n if (initializer.getKind() === SyntaxKind.TrueKeyword) return true;\n if (initializer.getKind() === SyntaxKind.FalseKeyword) return false;\n return undefined;\n}\n\n/** Reads a number nested object property. */\nfunction readNumberNested(\n definition: ObjectLiteralExpression,\n section: string,\n propertyName: string,\n): number | undefined {\n const object = readObjectProperty(definition, section);\n if (!object) {\n return undefined;\n }\n const property = object.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isNumericLiteral(initializer)\n ? Number(initializer.getLiteralText())\n : undefined;\n}\n\n/** Reads a nested object literal property. */\nfunction readObjectProperty(\n definition: ObjectLiteralExpression | undefined,\n propertyName: string,\n): ObjectLiteralExpression | undefined {\n if (!definition) {\n return undefined;\n }\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** Reads one string property from an object literal. */\nfunction readStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isStringLiteral(initializer)\n ? initializer.getLiteralText()\n : undefined;\n}\n\n/** Reads a string array property from an object literal. */\nfunction readStringArrayProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string[] | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n\n const values = initializer.getElements().map((element) => {\n const unwrapped = unwrapExpression(element);\n return unwrapped && Node.isStringLiteral(unwrapped)\n ? unwrapped.getLiteralText()\n : undefined;\n });\n return values.every((value): value is string => value !== undefined)\n ? values\n : undefined;\n}\n\n/** Reads a string-valued object property from an object literal. */\nfunction readStringRecordProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): Record<string, string> | undefined {\n const object = readObjectProperty(definition, propertyName);\n if (!object) {\n return undefined;\n }\n\n const record: Record<string, string> = {};\n for (const property of object.getProperties()) {\n if (!Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isStringLiteral(initializer)) {\n return undefined;\n }\n record[property.getName().replace(/^[\"']|[\"']$/g, \"\")] = initializer.getLiteralText();\n }\n return record;\n}\n\n/** Returns true when an object literal has the named property. */\nfunction hasProperty(\n definition: ObjectLiteralExpression | undefined,\n propertyName: string,\n): boolean {\n return Boolean(definition?.getProperty(propertyName));\n}\n","/** Static diagnostics for Sidecar projects. */\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { JsonSchema } from \"@sidecar-ai/core\";\nimport type {\n SidecarCompilerConfig,\n SidecarPromptManifestEntry,\n SidecarResourceManifestEntry,\n SidecarToolManifestEntry,\n} from \"./types.js\";\n\n/** Diagnostic severity surfaced by the CLI and future editor integrations. */\nexport type DiagnosticSeverity = \"warning\" | \"error\";\n\n/** Stable diagnostic emitted for a concrete project source location. */\nexport type SidecarDiagnostic = {\n severity: DiagnosticSeverity;\n code: string;\n message: string;\n filePath: string;\n line: number;\n column: number;\n hint?: string;\n};\n\n/** Collects project-level warnings that do not block compilation by default. */\nexport async function collectProjectDiagnostics(\n rootDir: string,\n input: SidecarToolManifestEntry[] | {\n tools: SidecarToolManifestEntry[];\n resources?: SidecarResourceManifestEntry[];\n prompts?: SidecarPromptManifestEntry[];\n config?: SidecarCompilerConfig;\n },\n): Promise<SidecarDiagnostic[]> {\n const diagnostics: SidecarDiagnostic[] = [];\n const tools = Array.isArray(input) ? input : input.tools;\n const resources = Array.isArray(input) ? [] : input.resources ?? [];\n const prompts = Array.isArray(input) ? [] : input.prompts ?? [];\n const config = Array.isArray(input) ? undefined : input.config;\n const hasAuthConfig = existsSync(path.join(rootDir, \"auth.ts\"));\n\n for (const entry of tools) {\n const toolPath = path.join(rootDir, entry.sourceFile);\n const toolSource = await readFile(toolPath, \"utf8\");\n diagnostics.push(...diagnoseToolSource(entry, toolSource, hasAuthConfig));\n\n if (entry.widget) {\n const widgetPath = path.join(rootDir, entry.widget.sourceFile);\n const widgetSource = await readFile(widgetPath, \"utf8\");\n diagnostics.push(...diagnoseWidgetSource(rootDir, entry, widgetSource));\n }\n }\n\n for (const entry of resources) {\n const resourcePath = path.join(rootDir, entry.sourceFile);\n const resourceSource = await readFile(resourcePath, \"utf8\");\n diagnostics.push(...diagnoseResourceSource(entry, resourceSource));\n }\n\n for (const entry of prompts) {\n const promptPath = path.join(rootDir, entry.sourceFile);\n const promptSource = await readFile(promptPath, \"utf8\");\n diagnostics.push(...diagnosePromptSource(entry, promptSource));\n }\n\n if (config) {\n diagnostics.push(...diagnoseCapabilities(config, resources));\n }\n\n return diagnostics;\n}\n\n/** Formats diagnostics in a TypeScript-style shape understood by many editors. */\nexport function formatDiagnostic(diagnostic: SidecarDiagnostic): string {\n const location = `${diagnostic.filePath}:${diagnostic.line}:${diagnostic.column}`;\n const hint = diagnostic.hint ? `\\n hint: ${diagnostic.hint}` : \"\";\n return `${location} - ${diagnostic.severity} ${diagnostic.code}: ${diagnostic.message}${hint}`;\n}\n\n/** Emits warnings for one reserved `tool.ts` file. */\nfunction diagnoseToolSource(\n entry: SidecarToolManifestEntry,\n source: string,\n hasAuthConfig: boolean,\n): SidecarDiagnostic[] {\n const diagnostics: SidecarDiagnostic[] = [];\n const toolLocation = locate(source, \"tool({\");\n\n if (!entry.description.trim().startsWith(\"Use this when\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_METADATA_DESCRIPTION\",\n message: `Tool \"${entry.id}\" description should start with \"Use this when...\" for better model routing.`,\n filePath: entry.sourceFile,\n ...toolLocation,\n hint: \"Keep the first sentence specific and include explicit disallowed cases when useful.\",\n });\n }\n\n for (const key of [\"readOnlyHint\", \"destructiveHint\", \"openWorldHint\"] as const) {\n if (!(key in (entry.annotations ?? {}))) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_TOOL_ANNOTATION\",\n message: `Tool \"${entry.id}\" should explicitly declare annotations.${key}.`,\n filePath: entry.sourceFile,\n ...toolLocation,\n hint: \"Hosts use these hints to frame approval and safety UX; Sidecar applies conservative defaults only as a fallback.\",\n });\n }\n }\n\n if (/auth\\s*:/.test(source) && !hasAuthConfig && !isIgnored(source, \"SIDECAR_AUTH_MISSING_CONFIG\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_AUTH_MISSING_CONFIG\",\n message: `Tool \"${entry.id}\" declares auth but the project has no reserved auth.ts file.`,\n filePath: entry.sourceFile,\n ...locate(source, \"auth\"),\n hint: \"Add auth.ts at the project root or mark the tool auth policy as public.\",\n });\n }\n\n if (!returnsToolResult(source) && !isIgnored(source, \"SIDECAR_TOOL_RESULT_REQUIRED\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_TOOL_RESULT_REQUIRED\",\n message: `Tool \"${entry.id}\" should return toolResult(...) from execute.`,\n filePath: entry.sourceFile,\n ...locate(source, \"execute\"),\n hint: \"The runtime rejects plain objects so content, structuredContent, and meta always map cleanly to MCP result channels.\",\n });\n }\n\n if (/[\"']openai\\//.test(source) && !/@sidecar-ai\\/openai/.test(source) && !isIgnored(source, \"SIDECAR_OPENAI_MAGIC_META\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_OPENAI_MAGIC_META\",\n message: `Tool \"${entry.id}\" uses raw ChatGPT metadata strings.`,\n filePath: entry.sourceFile,\n ...locate(source, \"openai/\"),\n hint: \"Use @sidecar-ai/openai helpers or the typed hosts.chatgpt field so platform metadata stays typed.\",\n });\n }\n\n for (const parameterName of missingParameterDescriptions(entry.inputSchema)) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_PARAM_DESCRIPTION\",\n message: `Parameter \"${parameterName}\" on tool \"${entry.id}\" is missing a JSDoc/schema description.`,\n filePath: entry.sourceFile,\n ...locate(source, parameterName),\n hint: \"Add a JSDoc comment to the TypeScript field or provide a schema description.\",\n });\n }\n\n if (looksLikeKnowledgeTool(entry) && !hasCompanyKnowledgeShape(entry.inputSchema) && !isIgnored(source, \"SIDECAR_COMPANY_KNOWLEDGE_SHAPE\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_COMPANY_KNOWLEDGE_SHAPE\",\n message: `Tool \"${entry.id}\" looks like a search/fetch knowledge tool but does not use the expected simple input shape.`,\n filePath: entry.sourceFile,\n ...toolLocation,\n hint: \"Use a string query for search tools or a string id/url for fetch tools, or add // sidecar-ignore SIDECAR_COMPANY_KNOWLEDGE_SHAPE.\",\n });\n }\n\n return diagnostics.filter((diagnostic) => !isIgnored(source, diagnostic.code));\n}\n\n/** Emits warnings for one sibling `widget.tsx` file. */\nfunction diagnoseWidgetSource(\n _rootDir: string,\n entry: SidecarToolManifestEntry,\n source: string,\n): SidecarDiagnostic[] {\n const diagnostics: SidecarDiagnostic[] = [];\n const widgetFile = entry.widget?.sourceFile;\n if (!widgetFile) {\n return diagnostics;\n }\n\n if (/window\\s*\\.\\s*openai|\\(\\s*window\\s+as\\s+[^)]*\\)\\s*\\.\\s*openai/.test(source) && !isIgnored(source, \"SIDECAR_OPENAI_RAW_BRIDGE\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_OPENAI_RAW_BRIDGE\",\n message: `Widget for \"${entry.id}\" reads window.openai directly.`,\n filePath: widgetFile,\n ...locate(source, \"openai\"),\n hint: \"Use @sidecar-ai/openai runtime helpers in ChatGPT-only widgets, or @sidecar-ai/native/@sidecar-ai/client for portable behavior.\",\n });\n }\n\n if (entry.widget?.variant !== \"openai\" && /@sidecar-ai\\/openai/.test(source) && !/@sidecar-ai\\/native/.test(source) && !isIgnored(source, \"SIDECAR_OPENAI_FALLBACK\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_OPENAI_FALLBACK\",\n message: `Widget for \"${entry.id}\" imports @sidecar-ai/openai without a portable fallback.`,\n filePath: widgetFile,\n ...locate(source, \"@sidecar-ai/openai\"),\n hint: \"Prefer @sidecar-ai/native for user-facing behavior and reserve @sidecar-ai/openai for typed metadata or explicit ChatGPT-only code paths.\",\n });\n }\n\n if (entry.widget?.variant !== \"openai\" && /@sidecar-ai\\/openai\\/components/.test(source) && !isIgnored(source, \"SIDECAR_OPENAI_COMPONENT_CROSS_HOST\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_OPENAI_COMPONENT_CROSS_HOST\",\n message: `Widget for \"${entry.id}\" imports ChatGPT-only components.`,\n filePath: widgetFile,\n ...locate(source, \"@sidecar-ai/openai/components\"),\n hint: \"Use @sidecar-ai/native for portable primitives. Keep @sidecar-ai/openai/components for widgets intentionally targeted to ChatGPT.\",\n });\n }\n\n if (entry.widget?.variant !== \"anthropic\" && /@sidecar-ai\\/anthropic\\/components/.test(source) && !isIgnored(source, \"SIDECAR_ANTHROPIC_COMPONENT_CROSS_HOST\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_ANTHROPIC_COMPONENT_CROSS_HOST\",\n message: `Widget for \"${entry.id}\" imports Claude-only components.`,\n filePath: widgetFile,\n ...locate(source, \"@sidecar-ai/anthropic/components\"),\n hint: \"Use @sidecar-ai/native for portable primitives. Keep @sidecar-ai/anthropic/components for widgets intentionally targeted to Claude.\",\n });\n }\n\n if (/\\bPopover\\b/.test(source) && /@sidecar-ai\\/native/.test(source) && !isIgnored(source, \"SIDECAR_NATIVE_NON_PORTABLE_COMPONENT\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_NATIVE_NON_PORTABLE_COMPONENT\",\n message: `Widget for \"${entry.id}\" appears to expect a native Popover.`,\n filePath: widgetFile,\n ...locate(source, \"Popover\"),\n hint: \"Popover is host-specific because Claude inline apps discourage clipped overlay UI. Use @sidecar-ai/openai/components for ChatGPT-only popovers.\",\n });\n }\n\n return diagnostics.filter((diagnostic) => !isIgnored(source, diagnostic.code));\n}\n\n/** Emits warnings for one reserved `resource.ts` file. */\nfunction diagnoseResourceSource(\n entry: SidecarResourceManifestEntry,\n source: string,\n): SidecarDiagnostic[] {\n const diagnostics: SidecarDiagnostic[] = [];\n if (!returnsResourceResult(source) && !isIgnored(source, \"SIDECAR_RESOURCE_RESULT_REQUIRED\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_RESOURCE_RESULT_REQUIRED\",\n message: `Resource \"${entry.uri}\" should return resourceResult(...) from read.`,\n filePath: entry.sourceFile,\n ...locate(source, \"read\"),\n hint: \"The runtime rejects plain objects so text/blob content maps cleanly to MCP resource contents.\",\n });\n }\n return diagnostics.filter((diagnostic) => !isIgnored(source, diagnostic.code));\n}\n\n/** Emits warnings for one reserved `prompt.ts` file. */\nfunction diagnosePromptSource(\n entry: SidecarPromptManifestEntry,\n source: string,\n): SidecarDiagnostic[] {\n const diagnostics: SidecarDiagnostic[] = [];\n if (!source.includes(\"run\") && !isIgnored(source, \"SIDECAR_PROMPT_RUN_REQUIRED\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_PROMPT_RUN_REQUIRED\",\n message: `Prompt \"${entry.name}\" should include a run method.`,\n filePath: entry.sourceFile,\n ...locate(source, \"prompt({\"),\n hint: \"Prompt run methods return a string for the common case or MCP prompt messages for advanced cases.\",\n });\n }\n return diagnostics.filter((diagnostic) => !isIgnored(source, diagnostic.code));\n}\n\n/** Emits build-time errors when config claims unsupported capability wiring. */\nfunction diagnoseCapabilities(\n config: SidecarCompilerConfig,\n resources: SidecarResourceManifestEntry[],\n): SidecarDiagnostic[] {\n const diagnostics: SidecarDiagnostic[] = [];\n if (!config.resources.subscribe && resources.some((entry) => entry.subscribe)) {\n const entry = resources.find((resource) => resource.subscribe);\n if (entry) {\n diagnostics.push({\n severity: \"error\",\n code: \"SIDECAR_RESOURCE_SUBSCRIBE_DISABLED\",\n message: `Resource \"${entry.uri}\" sets subscribe: true but sidecar.config.ts does not enable resources.subscribe.`,\n filePath: entry.sourceFile,\n line: 1,\n column: 1,\n hint: \"Add resources: { subscribe: true } to sidecar.config.ts or remove subscribe: true from this resource.\",\n });\n }\n }\n return diagnostics;\n}\n\n/** Returns true when the source visibly returns the standardized result helper. */\nfunction returnsToolResult(source: string): boolean {\n return /\\breturn\\s+toolResult(?:\\.\\w+)?\\s*\\(/.test(source);\n}\n\n/** Returns true when the source visibly returns the standardized resource helper. */\nfunction returnsResourceResult(source: string): boolean {\n return /\\breturn\\s+resourceResult(?:\\.\\w+)?\\s*\\(/.test(source);\n}\n\n/** Finds required parameters without model-facing descriptions. */\nfunction missingParameterDescriptions(schema: JsonSchema): string[] {\n const properties = schema.properties ?? {};\n return Object.entries(properties)\n .filter(([, value]) => !value.description?.trim())\n .map(([key]) => key);\n}\n\n/** Returns true for tools named like knowledge search/fetch operations. */\nfunction looksLikeKnowledgeTool(entry: SidecarToolManifestEntry): boolean {\n const text = `${entry.id} ${entry.name}`.toLowerCase();\n return /\\b(search|fetch)\\b/.test(text) || /(^|[._-])(search|fetch)([._-]|$)/.test(text);\n}\n\n/** Checks the minimum predictable shape Sidecar expects for knowledge tools. */\nfunction hasCompanyKnowledgeShape(schema: JsonSchema): boolean {\n const properties = schema.properties ?? {};\n const query = properties.query;\n const url = properties.url;\n const id = properties.id;\n return query?.type === \"string\" || url?.type === \"string\" || id?.type === \"string\";\n}\n\n/** Locates text within a source file using 1-based editor coordinates. */\nfunction locate(source: string, needle: string): { line: number; column: number } {\n const index = Math.max(0, source.indexOf(needle));\n const prefix = source.slice(0, index);\n const lines = prefix.split(\"\\n\");\n return {\n line: lines.length,\n column: (lines.at(-1)?.length ?? 0) + 1,\n };\n}\n\n/** Allows authors to silence a warning with a visible source comment. */\nfunction isIgnored(source: string, code: string): boolean {\n return source.includes(`sidecar-ignore ${code}`) || source.includes(`sidecar-ignore all`);\n}\n","/** Generated widget client writer. */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { SidecarToolManifestEntry } from \"./types.js\";\nimport { toIdentifier, toImportSpecifier } from \"./utils.js\";\n\n/** Writes `.sidecar/generated/tools.ts` for typed widget-initiated calls. */\nexport async function writeGeneratedTypes(\n rootDir: string,\n tools: SidecarToolManifestEntry[],\n): Promise<void> {\n const generatedDir = path.join(rootDir, \".sidecar\", \"generated\");\n await mkdir(generatedDir, { recursive: true });\n const appCallableTools = tools.filter(isAppCallable);\n const methodNames = uniqueMethodNames(appCallableTools.map((entry) => toIdentifier(entry.id)));\n\n const imports = appCallableTools\n .map(\n (entry, index) =>\n `import type tool${index} from ${JSON.stringify(toImportSpecifier(generatedDir, path.join(rootDir, entry.sourceFile), { extension: \"js\" }))};`,\n )\n .join(\"\\n\");\n const ids = appCallableTools\n .map((entry, index) => ` ${methodNames[index]}: ${JSON.stringify(entry.id)}`)\n .join(\",\\n\");\n const toolTypes = appCallableTools\n .map(\n (_entry, index) =>\n ` ${methodNames[index]}(params: ToolParams<typeof tool${index}>): Promise<ToolOutput<typeof tool${index}>>;`,\n )\n .join(\"\\n\");\n\n await writeFile(\n path.join(generatedDir, \"tools.ts\"),\n `/**\n * Generated Sidecar widget tool client.\n *\n * Do not edit this file directly; it is regenerated by sidecar build and\n * sidecar dev.\n */\n${imports}\nimport { createToolClient } from \"@sidecar-ai/client\";\nimport type { ToolResult } from \"@sidecar-ai/core\";\n\ntype ExecuteOf<T> = T extends { execute: infer Execute } ? Execute : never;\ntype ToolParams<T> = ExecuteOf<T> extends (params: infer Params, ...args: any[]) => unknown ? Params : never;\ntype RawToolOutput<T> = Awaited<ReturnType<Extract<ExecuteOf<T>, (...args: any[]) => unknown>>>;\ntype ToolOutput<T> = RawToolOutput<T> extends ToolResult<infer Structured, any> ? Structured : never;\n\n/** Machine names keyed by widget-friendly method names. */\nexport const toolIds = {\n${ids}\n} as const;\n\n/** Typed callable tools available to widgets. */\nexport type WidgetTools = {\n${toolTypes}\n};\n\n/** Default widget tool client backed by the host bridge. */\nexport const tools = createToolClient<WidgetTools>(toolIds);\n`,\n );\n}\n\n/** Returns true when MCP Apps metadata allows widgets to call the tool. */\nfunction isAppCallable(entry: SidecarToolManifestEntry): boolean {\n const ui = entry.descriptor._meta?.ui;\n if (!ui || typeof ui !== \"object\" || Array.isArray(ui)) {\n return true;\n }\n\n const visibility = (ui as { visibility?: unknown }).visibility;\n return !Array.isArray(visibility) || visibility.includes(\"app\");\n}\n\n/** Ensures generated widget method names cannot silently collide. */\nfunction uniqueMethodNames(names: string[]): string[] {\n const seen = new Map<string, number>();\n return names.map((name) => {\n const count = seen.get(name) ?? 0;\n seen.set(name, count + 1);\n return count === 0 ? name : `${name}${count + 1}`;\n });\n}\n","/** Project identity loading for generated manifests and plugin packages. */\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { toMachineName } from \"@sidecar-ai/core\";\nimport type { ProjectIdentity } from \"./types.js\";\nimport { existsSyncSafe } from \"./utils.js\";\n\n/** Loads project name, slug, version, and description from config/package metadata. */\nexport async function loadProjectIdentity(\n rootDir: string,\n): Promise<ProjectIdentity> {\n const packageJson = await readOptionalJson(path.join(rootDir, \"package.json\"));\n const configText = await readOptionalText(\n path.join(rootDir, \"sidecar.config.ts\"),\n );\n const name =\n readConfigString(configText, \"name\") ??\n packageJson?.name ??\n path.basename(rootDir);\n const version =\n readConfigString(configText, \"version\") ??\n packageJson?.version ??\n \"0.0.0-dev\";\n const description =\n readConfigString(configText, \"description\") ??\n packageJson?.description ??\n `${name} Sidecar app.`;\n\n return {\n name,\n slug: toMachineName(name).replaceAll(\"_\", \"-\"),\n version,\n description,\n };\n}\n\n/** Reads JSON when the file exists. */\nasync function readOptionalJson(\n filePath: string,\n): Promise<Record<string, string> | undefined> {\n if (!existsSyncSafe(filePath)) {\n return undefined;\n }\n\n return JSON.parse(await readFile(filePath, \"utf8\")) as Record<string, string>;\n}\n\n/** Reads text when the file exists. */\nasync function readOptionalText(filePath: string): Promise<string | undefined> {\n if (!existsSyncSafe(filePath)) {\n return undefined;\n }\n\n return readFile(filePath, \"utf8\");\n}\n\n/** Extracts a simple string property from `sidecar.config.ts` without executing it. */\nfunction readConfigString(\n configText: string | undefined,\n key: string,\n): string | undefined {\n if (!configText) {\n return undefined;\n }\n\n const match = configText.match(\n new RegExp(`${key}\\\\s*:\\\\s*[\"'\\`]([^\"'\\`]+)[\"'\\`]`),\n );\n return match?.[1];\n}\n","/** Plugin package generation for Claude desktop hosts. */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { loadProjectIdentity } from \"./identity.js\";\nimport { emitClaudeAgents } from \"./plugin-components/agents.js\";\nimport { copyCommands } from \"./plugin-components/commands.js\";\nimport { copyHooks } from \"./plugin-components/hooks.js\";\nimport { copyClaudePassthroughDirectories } from \"./plugin-components/passthrough.js\";\nimport { copySkills } from \"./plugin-components/skills.js\";\nimport type { ProjectIdentity, SidecarManifest } from \"./types.js\";\nimport { stripUndefined } from \"./utils.js\";\n\n/** Emits all plugin package targets for the current MCP manifest. */\nexport async function buildPluginPackages(\n rootDir: string,\n outRoot: string,\n manifest: SidecarManifest,\n): Promise<void> {\n const identity = await loadProjectIdentity(rootDir);\n await buildClaudePlugin(rootDir, outRoot, identity, manifest);\n}\n\n/** Emits a Claude/Cowork plugin package that references the hosted MCP server. */\nasync function buildClaudePlugin(\n rootDir: string,\n outRoot: string,\n identity: ProjectIdentity,\n manifest: SidecarManifest,\n): Promise<void> {\n const pluginDir = path.join(outRoot, \"claude-plugin\");\n await mkdir(path.join(pluginDir, \".claude-plugin\"), { recursive: true });\n await copySkills(rootDir, path.join(pluginDir, \"skills\"));\n await copyCommands(rootDir, path.join(pluginDir, \"commands\"));\n await copyHooks(rootDir, path.join(pluginDir, \"hooks\"));\n await emitClaudeAgents(rootDir, path.join(pluginDir, \"agents\"));\n await copyClaudePassthroughDirectories(rootDir, pluginDir);\n\n await writeJson(path.join(pluginDir, \".claude-plugin\", \"plugin.json\"), {\n name: identity.slug,\n version: identity.version,\n description: identity.description,\n displayName: identity.name,\n installationPreference: \"available\",\n });\n\n await writeJson(path.join(pluginDir, \"version.json\"), {\n version: identity.version,\n generatedBy: \"sidecar\",\n });\n\n await writeJson(path.join(pluginDir, \".mcp.json\"), {\n mcpServers: {\n [identity.slug]: {\n type: \"http\",\n url: \"${SIDECAR_MCP_URL}\",\n },\n },\n });\n\n await writeJson(path.join(pluginDir, \"settings.json\"), {\n sidecar: {\n tools: manifest.tools.map((entry) => entry.id),\n resources: manifest.resources.map((entry) => entry.uri),\n prompts: manifest.prompts.map((entry) => entry.name),\n },\n });\n\n await writeFile(\n path.join(pluginDir, \"README.md\"),\n `# ${identity.name} Claude Plugin\n\nThis package was generated by Sidecar.\n\nSet \\`SIDECAR_MCP_URL\\` to the hosted MCP endpoint for this app.\n\nFor local testing, run \\`sidecar dev --tunnel\\` and use the validated HTTPS MCP URL it prints. Temporary quick tunnels are public and best-effort; use a configured tunnel/domain or deployed preview for repeatable testing.\n\nClaude/Cowork plugin-specific components such as skills, slash commands, agents, hooks, output styles, themes, monitors, assets, and bin scripts will be emitted here when the source project defines them.\n`,\n );\n}\n\n/** Writes formatted JSON while dropping undefined fields. */\nasync function writeJson(\n filePath: string,\n value: Record<string, unknown>,\n): Promise<void> {\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(\n filePath,\n `${JSON.stringify(stripUndefined(value), null, 2)}\\n`,\n );\n}\n","/** Claude agent generation from typed Sidecar agent files. */\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n existsSyncSafe,\n readObjectString,\n readObjectStringArray,\n safeFileStem,\n stripUndefined,\n yamlScalar,\n} from \"../utils.js\";\n\n/** Emits `agents/*.md` from reserved agent directories. */\nexport async function emitClaudeAgents(\n rootDir: string,\n destination: string,\n): Promise<void> {\n const source = path.join(rootDir, \"agents\");\n if (!existsSyncSafe(source)) {\n return;\n }\n\n const entries = await readdir(source, { withFileTypes: true });\n const agentDirs = entries.filter(\n (entry) => entry.isDirectory() && existsSyncSafe(path.join(source, entry.name, \"agent.ts\")),\n );\n if (!agentDirs.length) {\n return;\n }\n\n await mkdir(destination, { recursive: true });\n for (const entry of agentDirs) {\n const sourceText = await readFile(path.join(source, entry.name, \"agent.ts\"), \"utf8\");\n const markdown = parseClaudeAgent(\n sourceText,\n entry.name,\n );\n const agentName =\n readObjectString(sourceText, \"name\") ??\n entry.name;\n await writeFile(path.join(destination, `${safeFileStem(agentName)}.md`), markdown);\n }\n}\n\n/** Parses the object-literal agent declaration into Claude markdown. */\nfunction parseClaudeAgent(source: string, fallbackName: string): string {\n const name = readObjectString(source, \"name\") ?? fallbackName;\n const description =\n readObjectString(source, \"description\") ?? `${name} agent.`;\n const prompt = readObjectString(source, \"prompt\") ?? \"\";\n const tools = readObjectStringArray(source, \"tools\");\n const disallowedTools = readObjectStringArray(source, \"disallowedTools\");\n const model = readObjectString(source, \"model\");\n const color = readObjectString(source, \"color\");\n\n const frontmatter = stripUndefined({\n name,\n description,\n model,\n color,\n tools: tools?.join(\", \"),\n \"disallowed-tools\": disallowedTools?.join(\", \"),\n });\n\n return `---\n${Object.entries(frontmatter)\n .map(([key, value]) => `${key}: ${yamlScalar(value)}`)\n .join(\"\\n\")}\n---\n\n${prompt.trim()}\n`;\n}\n","/** Claude slash-command generation from static markdown or typed command files. */\nimport { cp, lstat, mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n existsSyncSafe,\n readObjectString,\n readObjectStringArray,\n safeFileStem,\n stripUndefined,\n yamlScalar,\n} from \"../utils.js\";\n\n/** Copies markdown commands and emits `command.ts` declarations as markdown. */\nexport async function copyCommands(\n rootDir: string,\n destination: string,\n): Promise<void> {\n const source = path.join(rootDir, \"commands\");\n if (!existsSyncSafe(source)) {\n return;\n }\n\n await mkdir(destination, { recursive: true });\n const entries = await readdir(source, { withFileTypes: true });\n for (const entry of entries) {\n const sourcePath = path.join(source, entry.name);\n if (entry.isFile() && entry.name.endsWith(\".md\")) {\n if (await safeCommandCopyFilter(sourcePath)) {\n await cp(sourcePath, path.join(destination, safeFileStem(entry.name.replace(/\\.md$/, \"\")) + \".md\"));\n }\n continue;\n }\n\n if (!entry.isDirectory()) {\n continue;\n }\n\n const dynamicCommand = path.join(sourcePath, \"command.ts\");\n if (existsSyncSafe(dynamicCommand)) {\n const sourceText = await readFile(dynamicCommand, \"utf8\");\n const markdown = parseDynamicCommand(sourceText, entry.name);\n const commandName = readObjectString(sourceText, \"name\") ?? entry.name;\n await writeFile(path.join(destination, `${safeFileStem(commandName)}.md`), markdown);\n continue;\n }\n\n await cp(sourcePath, path.join(destination, entry.name), {\n recursive: true,\n filter: safeCommandCopyFilter,\n });\n }\n}\n\n/** Avoids copying symlinks and common secret files into generated commands. */\nasync function safeCommandCopyFilter(sourcePath: string): Promise<boolean> {\n const basename = path.basename(sourcePath);\n if (basename === \".env\" || basename.startsWith(\".env.\") || basename === \"node_modules\" || basename === \".git\") {\n return false;\n }\n const stat = await lstat(sourcePath);\n return !stat.isSymbolicLink();\n}\n\n/** Parses a typed command declaration into Claude slash-command markdown. */\nfunction parseDynamicCommand(source: string, fallbackName: string): string {\n const name = readObjectString(source, \"name\") ?? fallbackName;\n const description = readObjectString(source, \"description\");\n const prompt = readObjectString(source, \"prompt\") ?? \"\";\n const argumentHint = readObjectString(source, \"argumentHint\");\n const allowedTools = readObjectStringArray(source, \"allowedTools\");\n\n const frontmatter = stripUndefined({\n description,\n \"argument-hint\": argumentHint,\n \"allowed-tools\": allowedTools?.join(\", \"),\n });\n\n const header = Object.keys(frontmatter).length\n ? `---\n${Object.entries(frontmatter)\n .map(([key, value]) => `${key}: ${yamlScalar(value)}`)\n .join(\"\\n\")}\n---\n\n`\n : \"\";\n\n return `${header}${prompt.trim() || `# ${name}`}\\n`;\n}\n","/** Claude hook generation from typed reserved hook files. */\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n Node,\n Project,\n SyntaxKind,\n type ArrayLiteralExpression,\n type CallExpression,\n type Expression,\n type ObjectLiteralExpression,\n} from \"ts-morph\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"../ast.js\";\nimport { existsSyncSafe, stripUndefined } from \"../utils.js\";\n\ntype HookHandler = Record<string, unknown> & {\n type: \"command\" | \"http\";\n};\n\ntype HookMatcher = {\n matcher?: string;\n hooks: HookHandler[];\n};\n\ntype HookConfig = Record<string, HookMatcher[]>;\n\n/** Emits one merged `hooks.json` from reserved hook directories. */\nexport async function copyHooks(\n rootDir: string,\n destination: string,\n): Promise<void> {\n const source = path.join(rootDir, \"hooks\");\n if (!existsSyncSafe(source)) {\n return;\n }\n\n const entries = await readdir(source, { withFileTypes: true });\n const hookDirs = entries.filter(\n (entry) => entry.isDirectory() && existsSyncSafe(path.join(source, entry.name, \"hook.ts\")),\n );\n if (!hookDirs.length) {\n return;\n }\n\n const config: HookConfig = {};\n for (const entry of hookDirs) {\n const filePath = path.join(source, entry.name, \"hook.ts\");\n mergeHooks(config, parseHookFile(await readFile(filePath, \"utf8\"), entry.name));\n }\n\n await mkdir(destination, { recursive: true });\n await writeFile(\n path.join(destination, \"hooks.json\"),\n `${JSON.stringify(config, null, 2)}\\n`,\n );\n}\n\n/** Parses a single reserved hook file into Claude hook JSON fragments. */\nfunction parseHookFile(source: string, fallbackName: string): HookConfig {\n const project = new Project({ useInMemoryFileSystem: true });\n const sourceFile = project.createSourceFile(`${fallbackName}.ts`, source);\n const call =\n resolveDefaultExportCall(sourceFile, \"hook\") ??\n resolveDefaultExportCall(sourceFile, \"hooks\");\n if (!call) {\n throw new Error(`hooks/${fallbackName}/hook.ts must default-export hook({ ... }) or hooks({ ... }).`);\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n throw new Error(`hooks/${fallbackName}/hook.ts must default-export hook({ ... }) or hooks({ ... }).`);\n }\n\n const callee = call.getExpression().getText();\n if (callee === \"hook\" || callee.endsWith(\".hook\")) {\n const entry = parseHookDefinition(definition, fallbackName);\n return { [entry.event]: [stripUndefined({ matcher: entry.matcher, hooks: entry.run })] };\n }\n\n if (callee === \"hooks\" || callee.endsWith(\".hooks\")) {\n return parseHooksDefinition(definition, fallbackName);\n }\n\n throw new Error(`hooks/${fallbackName}/hook.ts must default-export hook({ ... }) or hooks({ ... }).`);\n}\n\n/** Parses `hook({ event, matcher, hooks })`. */\nfunction parseHookDefinition(\n definition: ObjectLiteralExpression,\n fallbackName: string,\n): { event: string; matcher?: string; run: HookHandler[] } {\n const event = readStringProperty(definition, \"event\");\n if (!event) {\n throw new Error(`hooks/${fallbackName}/hook.ts must declare an event string.`);\n }\n\n const hooks = readHookArray(definition, \"run\", fallbackName);\n if (!hooks.length) {\n throw new Error(`hooks/${fallbackName}/hook.ts must declare at least one run handler.`);\n }\n\n return {\n event,\n matcher: readStringProperty(definition, \"matcher\"),\n run: hooks,\n };\n}\n\n/** Parses `hooks({ EventName: [{ matcher, run: [...] }] })`. */\nfunction parseHooksDefinition(\n definition: ObjectLiteralExpression,\n fallbackName: string,\n): HookConfig {\n const config: HookConfig = {};\n\n for (const property of definition.getProperties()) {\n if (!Node.isPropertyAssignment(property)) {\n continue;\n }\n\n const event = property.getName().replace(/^[\"']|[\"']$/g, \"\");\n const initializer = property.getInitializer();\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n throw new Error(`hooks/${fallbackName}/hook.ts event \"${event}\" must be an array.`);\n }\n\n config[event] = initializer.getElements().map((entry) => {\n if (!Node.isObjectLiteralExpression(entry)) {\n throw new Error(`hooks/${fallbackName}/hook.ts event \"${event}\" entries must be objects.`);\n }\n\n return stripUndefined({\n matcher: readStringProperty(entry, \"matcher\"),\n hooks: readHookArray(entry, \"run\", fallbackName),\n });\n });\n }\n\n return config;\n}\n\n/** Reads a hook handler array from an object literal property. */\nfunction readHookArray(\n definition: ObjectLiteralExpression,\n propertyName: string,\n fallbackName: string,\n): HookHandler[] {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return [];\n }\n\n const initializer = property.getInitializer();\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n throw new Error(`hooks/${fallbackName}/hook.ts ${propertyName} must be an array.`);\n }\n\n return parseHookHandlers(initializer, fallbackName);\n}\n\n/** Parses hook handlers written as object literals or helper calls. */\nfunction parseHookHandlers(\n handlers: ArrayLiteralExpression,\n fallbackName: string,\n): HookHandler[] {\n return handlers.getElements().map((handler) => parseHookHandler(handler, fallbackName));\n}\n\n/** Parses one command/http hook handler. */\nfunction parseHookHandler(\n handler: Expression,\n fallbackName: string,\n): HookHandler {\n if (Node.isObjectLiteralExpression(handler)) {\n const type = readStringProperty(handler, \"type\");\n if (type !== \"command\" && type !== \"http\") {\n throw new Error(`hooks/${fallbackName}/hook.ts hook handlers need type \"command\" or \"http\".`);\n }\n return objectLiteralToRecord(handler) as HookHandler;\n }\n\n if (Node.isCallExpression(handler)) {\n return parseHookHandlerCall(handler, fallbackName);\n }\n\n throw new Error(`hooks/${fallbackName}/hook.ts hook handlers must be objects or helper calls.`);\n}\n\n/** Parses `commandHook(...)` and `httpHook(...)` helper calls. */\nfunction parseHookHandlerCall(\n handler: CallExpression,\n fallbackName: string,\n): HookHandler {\n const callee = handler.getExpression().getText();\n const [firstArg, optionsArg] = handler.getArguments();\n const first = firstArg ? stringFromExpression(firstArg) : undefined;\n if (!first) {\n throw new Error(`hooks/${fallbackName}/hook.ts hook helper calls require a string first argument.`);\n }\n\n const options =\n optionsArg && Node.isObjectLiteralExpression(optionsArg)\n ? objectLiteralToRecord(optionsArg)\n : {};\n\n if (callee.endsWith(\"commandHook\")) {\n return stripUndefined({\n type: \"command\",\n command: first,\n ...options,\n }) as HookHandler;\n }\n\n if (callee.endsWith(\"httpHook\")) {\n return stripUndefined({\n type: \"http\",\n url: first,\n ...options,\n }) as HookHandler;\n }\n\n throw new Error(`hooks/${fallbackName}/hook.ts uses an unsupported hook helper \"${callee}\".`);\n}\n\n/** Converts a simple object literal into JSON-compatible data. */\nfunction objectLiteralToRecord(object: ObjectLiteralExpression): Record<string, unknown> {\n const record: Record<string, unknown> = {};\n\n for (const property of object.getProperties()) {\n if (!Node.isPropertyAssignment(property)) {\n continue;\n }\n\n const key = property.getName().replace(/^[\"']|[\"']$/g, \"\");\n const initializer = property.getInitializer();\n if (!initializer) {\n continue;\n }\n record[key] = valueFromExpression(initializer);\n }\n\n return stripUndefined(record);\n}\n\n/** Reads a simple string property from an object literal. */\nfunction readStringProperty(\n object: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = object.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = property.getInitializer();\n return initializer ? stringFromExpression(initializer) : undefined;\n}\n\n/** Converts supported literal expressions into JSON-compatible values. */\nfunction valueFromExpression(expression: Expression): unknown {\n const string = stringFromExpression(expression);\n if (string !== undefined) {\n return string;\n }\n\n if (expression.getKind() === SyntaxKind.TrueKeyword) {\n return true;\n }\n if (expression.getKind() === SyntaxKind.FalseKeyword) {\n return false;\n }\n if (Node.isNumericLiteral(expression)) {\n return Number(expression.getLiteralText());\n }\n if (Node.isArrayLiteralExpression(expression)) {\n return expression.getElements().map(valueFromExpression);\n }\n if (Node.isObjectLiteralExpression(expression)) {\n return objectLiteralToRecord(expression);\n }\n\n return undefined;\n}\n\n/** Reads string literals and no-substitution template literals. */\nfunction stringFromExpression(expression: Node): string | undefined {\n if (Node.isStringLiteral(expression) || Node.isNoSubstitutionTemplateLiteral(expression)) {\n return expression.getLiteralText();\n }\n return undefined;\n}\n\n/** Merges parsed hook config fragments preserving event order. */\nfunction mergeHooks(target: HookConfig, source: HookConfig): void {\n for (const [event, matchers] of Object.entries(source)) {\n target[event] = [...(target[event] ?? []), ...matchers];\n }\n}\n","/** Claude plugin directory passthrough helpers. */\nimport { cp, lstat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { existsSyncSafe } from \"../utils.js\";\n\n/** Copies Claude-specific directories that Sidecar does not transform yet. */\nexport async function copyClaudePassthroughDirectories(\n rootDir: string,\n pluginDir: string,\n): Promise<void> {\n for (const directory of [\n \"assets\",\n \"bin\",\n \"monitors\",\n \"output-styles\",\n \"themes\",\n ]) {\n const source = path.join(rootDir, directory);\n if (!existsSyncSafe(source)) {\n continue;\n }\n\n await cp(source, path.join(pluginDir, directory), {\n recursive: true,\n filter: safePluginCopyFilter,\n });\n }\n}\n\n/** Avoids accidentally packaging symlinks, env files, or package managers' metadata. */\nasync function safePluginCopyFilter(sourcePath: string): Promise<boolean> {\n const basename = path.basename(sourcePath);\n if (\n basename === \"node_modules\" ||\n basename === \".git\" ||\n basename === \".env\" ||\n basename.startsWith(\".env.\")\n ) {\n return false;\n }\n\n const stat = await lstat(sourcePath);\n return !stat.isSymbolicLink();\n}\n","/** Skill copying and typed skill generation for plugin outputs. */\nimport { existsSync } from \"node:fs\";\nimport { cp, lstat, mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { existsSyncSafe, readObjectString, yamlScalar } from \"../utils.js\";\n\n/** Copies static skills or emits `skill.ts` declarations as `SKILL.md`. */\nexport async function copySkills(\n rootDir: string,\n destination: string,\n): Promise<void> {\n const source = path.join(rootDir, \"skills\");\n if (!existsSyncSafe(source)) {\n return;\n }\n\n await mkdir(destination, { recursive: true });\n const entries = await readdir(source, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n const sourceDir = path.join(source, entry.name);\n const destinationDir = path.join(destination, entry.name);\n const staticSkill = path.join(sourceDir, \"SKILL.md\");\n const dynamicSkill = path.join(sourceDir, \"skill.ts\");\n\n await mkdir(destinationDir, { recursive: true });\n if (existsSync(staticSkill)) {\n await cp(sourceDir, destinationDir, {\n recursive: true,\n filter: async (sourcePath) =>\n !sourcePath.endsWith(`${path.sep}skill.ts`) &&\n await safeSkillCopyFilter(sourcePath),\n });\n } else if (existsSync(dynamicSkill)) {\n const generated = parseDynamicSkill(\n await readFile(dynamicSkill, \"utf8\"),\n entry.name,\n );\n await writeFile(path.join(destinationDir, \"SKILL.md\"), generated);\n }\n }\n}\n\n/** Avoids copying symlinks and common secret files into generated plugins. */\nasync function safeSkillCopyFilter(sourcePath: string): Promise<boolean> {\n const basename = path.basename(sourcePath);\n if (basename === \".env\" || basename.startsWith(\".env.\") || basename === \"node_modules\" || basename === \".git\") {\n return false;\n }\n const stat = await lstat(sourcePath);\n return !stat.isSymbolicLink();\n}\n\n/** Parses a typed skill declaration into a `SKILL.md` document. */\nfunction parseDynamicSkill(source: string, fallbackName: string): string {\n const name = readObjectString(source, \"name\") ?? fallbackName;\n const description =\n readObjectString(source, \"description\") ?? `${name} skill.`;\n const body = readObjectString(source, \"body\") ?? \"\";\n\nreturn `---\nname: ${yamlScalar(name)}\ndescription: ${yamlScalar(description)}\n---\n\n${body.trim()}\n`;\n}\n","/** Static analysis for reserved MCP prompt files. */\nimport {\n createPromptDescriptor,\n type McpIcon,\n type PromptArgInput,\n type PromptArgsDefinition,\n} from \"@sidecar-ai/core\";\nimport { readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n Node,\n SyntaxKind,\n type ObjectLiteralExpression,\n type SourceFile,\n} from \"ts-morph\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"./ast.js\";\nimport { CompilerError } from \"./errors.js\";\nimport { createProject } from \"./project.js\";\nimport type { SidecarPromptManifestEntry } from \"./types.js\";\nimport { existsSyncSafe, safePathSegment } from \"./utils.js\";\n\n/** Finds all Sidecar prompt files under `prompts/`. */\nexport async function analyzeProjectPrompts(rootDir: string): Promise<SidecarPromptManifestEntry[]> {\n const promptFiles = await findPromptFiles(path.join(rootDir, \"prompts\"));\n if (promptFiles.length === 0) {\n return [];\n }\n\n const project = createProject(rootDir);\n return promptFiles.map((filePath) =>\n analyzePromptFile(project.addSourceFileAtPath(filePath), rootDir),\n );\n}\n\n/** Analyzes one `prompt.ts` source file into a compiler manifest entry. */\nexport function analyzePromptFile(\n sourceFile: SourceFile,\n rootDir: string,\n): SidecarPromptManifestEntry {\n const definition = findPromptDefinition(sourceFile);\n const absoluteFile = sourceFile.getFilePath();\n const directory = path.basename(path.dirname(absoluteFile));\n const name = getOptionalStringProperty(definition, \"name\") ?? safePathSegment(directory);\n const title = getRequiredStringProperty(definition, \"title\", sourceFile);\n const description = getOptionalStringProperty(definition, \"description\");\n const args = readArgs(definition);\n const descriptor = createPromptDescriptor({\n name,\n title,\n description,\n args,\n icons: readIcons(definition),\n });\n\n if (!getMethodOrFunctionProperty(definition, \"run\")) {\n throw new CompilerError(sourceFile, \"prompt({ ... }) must include a run method.\");\n }\n\n return {\n sourceFile: path.relative(rootDir, absoluteFile),\n directory,\n name,\n title,\n description,\n args,\n descriptor,\n };\n}\n\n/** Finds immediate `prompts/<name>/prompt.ts` files in deterministic order. */\nasync function findPromptFiles(promptsDir: string): Promise<string[]> {\n if (!existsSyncSafe(promptsDir)) {\n return [];\n }\n\n const entries = await readdir(promptsDir, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n const filePath = path.join(promptsDir, entry.name, \"prompt.ts\");\n if (existsSyncSafe(filePath)) {\n files.push(filePath);\n }\n }\n return files.sort((left, right) => left.localeCompare(right));\n}\n\n/** Locates the default-exported `prompt({ ... })` object literal. */\nfunction findPromptDefinition(sourceFile: SourceFile): ObjectLiteralExpression {\n const call = resolveDefaultExportCall(sourceFile, \"prompt\");\n if (!call) {\n throw new CompilerError(\n sourceFile,\n \"prompt.ts must default-export prompt({ ... }) or an identifier initialized with prompt({ ... }).\",\n );\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n throw new CompilerError(sourceFile, \"prompt(...) must receive one object literal.\");\n }\n return definition;\n}\n\n/** Reads a required string property from the prompt object. */\nfunction getRequiredStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n sourceFile: SourceFile,\n): string {\n const value = getOptionalStringProperty(definition, propertyName);\n if (value === undefined || !value.trim()) {\n throw new CompilerError(\n sourceFile,\n `prompt({ ... }) must include a non-empty ${propertyName} string.`,\n );\n }\n return value;\n}\n\n/** Reads an optional string literal property. */\nfunction getOptionalStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isStringLiteral(initializer)\n ? initializer.getLiteralText()\n : undefined;\n}\n\n/** Reads `args` into prompt argument descriptors. */\nfunction readArgs(definition: ObjectLiteralExpression): PromptArgsDefinition | undefined {\n const initializer = readObjectProperty(definition, \"args\");\n if (!initializer) {\n return undefined;\n }\n\n const args: PromptArgsDefinition = {};\n for (const property of initializer.getProperties()) {\n if (!Node.isPropertyAssignment(property)) {\n continue;\n }\n const value = readArgInput(property.getInitializer());\n if (value !== undefined) {\n args[property.getName().replace(/^[\"']|[\"']$/g, \"\")] = value;\n }\n }\n return Object.keys(args).length ? args : undefined;\n}\n\n/** Reads one supported prompt arg declaration. */\nfunction readArgInput(node: Node | undefined): PromptArgInput | undefined {\n const initializer = unwrapExpression(node);\n if (!initializer) {\n return undefined;\n }\n if (Node.isStringLiteral(initializer)) {\n return initializer.getLiteralText();\n }\n if (Node.isArrayLiteralExpression(initializer)) {\n return initializer\n .getElements()\n .filter(Node.isLiteralExpression)\n .map((element) => element.getLiteralText());\n }\n if (Node.isObjectLiteralExpression(initializer)) {\n return {\n description: getOptionalStringProperty(initializer, \"description\"),\n required: readBooleanProperty(initializer, \"required\"),\n };\n }\n return undefined;\n}\n\n/** Reads an optional boolean literal property. */\nfunction readBooleanProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): boolean | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n if (initializer.getKind() === SyntaxKind.TrueKeyword) return true;\n if (initializer.getKind() === SyntaxKind.FalseKeyword) return false;\n return undefined;\n}\n\n/** Reads a supported method/function property without executing code. */\nfunction getMethodOrFunctionProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): Node | undefined {\n const property = definition.getProperty(propertyName);\n if (Node.isMethodDeclaration(property)) {\n return property;\n }\n if (property && Node.isPropertyAssignment(property)) {\n const initializer = property.getInitializer();\n if (\n initializer &&\n (Node.isArrowFunction(initializer) || Node.isFunctionExpression(initializer))\n ) {\n return initializer;\n }\n }\n return undefined;\n}\n\n/** Reads MCP icon metadata from a simple object array. */\nfunction readIcons(definition: ObjectLiteralExpression): McpIcon[] | undefined {\n const property = definition.getProperty(\"icons\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n\n const icons = initializer.getElements().flatMap((element) => {\n const object = unwrapExpression(element);\n if (!object || !Node.isObjectLiteralExpression(object)) {\n return [];\n }\n const src = getOptionalStringProperty(object, \"src\");\n if (!src) {\n return [];\n }\n return [{\n src,\n mimeType: getOptionalStringProperty(object, \"mimeType\"),\n sizes: readStringArrayProperty(object, \"sizes\"),\n }];\n });\n return icons.length ? icons : undefined;\n}\n\n/** Reads a nested object literal property. */\nfunction readObjectProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): ObjectLiteralExpression | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** Reads a string literal array property. */\nfunction readStringArrayProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string[] | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n return initializer\n .getElements()\n .filter(Node.isStringLiteral)\n .map((element) => element.getLiteralText());\n}\n","/** Static analysis for reserved MCP resource files. */\nimport {\n createResourceDescriptor,\n type McpIcon,\n type ResourceAnnotations,\n} from \"@sidecar-ai/core\";\nimport { readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n Node,\n SyntaxKind,\n type ObjectLiteralExpression,\n type SourceFile,\n} from \"ts-morph\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"./ast.js\";\nimport { CompilerError } from \"./errors.js\";\nimport { createProject } from \"./project.js\";\nimport type { SidecarResourceManifestEntry } from \"./types.js\";\nimport { existsSyncSafe, safePathSegment } from \"./utils.js\";\n\n/** Finds all Sidecar resource files under `resources/`. */\nexport async function analyzeProjectResources(rootDir: string): Promise<SidecarResourceManifestEntry[]> {\n const resourceFiles = await findResourceFiles(path.join(rootDir, \"resources\"));\n if (resourceFiles.length === 0) {\n return [];\n }\n\n const project = createProject(rootDir);\n return resourceFiles.map((filePath) =>\n analyzeResourceFile(project.addSourceFileAtPath(filePath), rootDir),\n );\n}\n\n/** Analyzes one `resource.ts` source file into a compiler manifest entry. */\nexport function analyzeResourceFile(\n sourceFile: SourceFile,\n rootDir: string,\n): SidecarResourceManifestEntry {\n const definition = findResourceDefinition(sourceFile);\n const absoluteFile = sourceFile.getFilePath();\n const directory = path.basename(path.dirname(absoluteFile));\n const defaultUri = `sidecar://resources/${safePathSegment(directory)}`;\n const name = getRequiredStringProperty(definition, \"name\", sourceFile);\n const uri = getOptionalStringProperty(definition, \"uri\") ?? defaultUri;\n const descriptor = createResourceDescriptor({\n uri,\n name,\n title: getOptionalStringProperty(definition, \"title\"),\n description: getOptionalStringProperty(definition, \"description\"),\n mimeType: getOptionalStringProperty(definition, \"mimeType\"),\n size: getOptionalNumberProperty(definition, \"size\"),\n icons: readIcons(definition),\n annotations: readAnnotations(definition),\n });\n\n if (!getMethodOrFunctionProperty(definition, \"read\")) {\n throw new CompilerError(sourceFile, \"resource({ ... }) must include a read method.\");\n }\n\n return {\n sourceFile: path.relative(rootDir, absoluteFile),\n directory,\n uri,\n name,\n title: descriptor.title,\n description: descriptor.description,\n mimeType: descriptor.mimeType,\n size: descriptor.size,\n annotations: descriptor.annotations,\n subscribe: readBooleanProperty(definition, \"subscribe\"),\n descriptor,\n };\n}\n\n/** Finds immediate `resources/<name>/resource.ts` files in deterministic order. */\nasync function findResourceFiles(resourcesDir: string): Promise<string[]> {\n if (!existsSyncSafe(resourcesDir)) {\n return [];\n }\n\n const entries = await readdir(resourcesDir, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n const filePath = path.join(resourcesDir, entry.name, \"resource.ts\");\n if (existsSyncSafe(filePath)) {\n files.push(filePath);\n }\n }\n return files.sort((left, right) => left.localeCompare(right));\n}\n\n/** Locates the default-exported `resource({ ... })` object literal. */\nfunction findResourceDefinition(sourceFile: SourceFile): ObjectLiteralExpression {\n const call = resolveDefaultExportCall(sourceFile, \"resource\");\n if (!call) {\n throw new CompilerError(\n sourceFile,\n \"resource.ts must default-export resource({ ... }) or an identifier initialized with resource({ ... }).\",\n );\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n throw new CompilerError(sourceFile, \"resource(...) must receive one object literal.\");\n }\n return definition;\n}\n\n/** Reads a required string property from the resource object. */\nfunction getRequiredStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n sourceFile: SourceFile,\n): string {\n const value = getOptionalStringProperty(definition, propertyName);\n if (value === undefined || !value.trim()) {\n throw new CompilerError(\n sourceFile,\n `resource({ ... }) must include a non-empty ${propertyName} string.`,\n );\n }\n return value;\n}\n\n/** Reads an optional string literal property. */\nfunction getOptionalStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isStringLiteral(initializer)\n ? initializer.getLiteralText()\n : undefined;\n}\n\n/** Reads an optional number literal property. */\nfunction getOptionalNumberProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): number | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isNumericLiteral(initializer)\n ? Number(initializer.getLiteralText())\n : undefined;\n}\n\n/** Reads an optional boolean literal property. */\nfunction readBooleanProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): boolean | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n if (initializer.getKind() === SyntaxKind.TrueKeyword) return true;\n if (initializer.getKind() === SyntaxKind.FalseKeyword) return false;\n return undefined;\n}\n\n/** Reads a supported method/function property without executing code. */\nfunction getMethodOrFunctionProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): Node | undefined {\n const property = definition.getProperty(propertyName);\n if (Node.isMethodDeclaration(property)) {\n return property;\n }\n if (property && Node.isPropertyAssignment(property)) {\n const initializer = property.getInitializer();\n if (\n initializer &&\n (Node.isArrowFunction(initializer) || Node.isFunctionExpression(initializer))\n ) {\n return initializer;\n }\n }\n return undefined;\n}\n\n/** Extracts static MCP annotations from the resource object. */\nfunction readAnnotations(\n definition: ObjectLiteralExpression,\n): ResourceAnnotations | undefined {\n const initializer = readObjectProperty(definition, \"annotations\");\n if (!initializer) {\n return undefined;\n }\n\n const annotations: ResourceAnnotations = {};\n const audience = readStringArrayProperty(initializer, \"audience\")\n ?.filter((value): value is \"user\" | \"assistant\" => value === \"user\" || value === \"assistant\");\n const priority = getOptionalNumberProperty(initializer, \"priority\");\n const lastModified = getOptionalStringProperty(initializer, \"lastModified\");\n if (audience?.length) annotations.audience = audience;\n if (priority !== undefined) annotations.priority = priority;\n if (lastModified) annotations.lastModified = lastModified;\n return Object.keys(annotations).length ? annotations : undefined;\n}\n\n/** Reads MCP icon metadata from a simple object array. */\nfunction readIcons(definition: ObjectLiteralExpression): McpIcon[] | undefined {\n const property = definition.getProperty(\"icons\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n\n const icons = initializer.getElements().flatMap((element) => {\n const object = unwrapExpression(element);\n if (!object || !Node.isObjectLiteralExpression(object)) {\n return [];\n }\n const src = getOptionalStringProperty(object, \"src\");\n if (!src) {\n return [];\n }\n return [{\n src,\n mimeType: getOptionalStringProperty(object, \"mimeType\"),\n sizes: readStringArrayProperty(object, \"sizes\"),\n }];\n });\n return icons.length ? icons : undefined;\n}\n\n/** Reads a nested object literal property. */\nfunction readObjectProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): ObjectLiteralExpression | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** Reads a string literal array property. */\nfunction readStringArrayProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string[] | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n return initializer\n .getElements()\n .filter(Node.isStringLiteral)\n .map((element) => element.getLiteralText());\n}\n","/** Hostable Node server artifact generation for Sidecar builds. */\nimport { existsSync } from \"node:fs\";\nimport { mkdir, rm, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { build as esbuild } from \"esbuild\";\nimport type { ProjectIdentity, SidecarHost, SidecarManifest } from \"./types.js\";\nimport { toImportSpecifier } from \"./utils.js\";\n\n/** Relative location of the generated server entrypoint inside a build output. */\nexport const SERVER_ENTRYPOINT = \"server/index.js\";\n\n/** Relative location of the Vercel Build Output API function directory. */\nexport const VERCEL_FUNCTION_DIR = \"functions/api/sidecar.func\";\n\n/** Relative location of the Vercel Build Output API function entrypoint. */\nexport const VERCEL_ENTRYPOINT = `${VERCEL_FUNCTION_DIR}/index.js`;\n\n/** File name Vercel invokes inside the Build Output API function directory. */\nconst VERCEL_HANDLER_FILE = \"index.js\";\n\n/** Emits a bundled Node MCP server that can be started with `node server/index.js`. */\nexport async function buildServerOutput(\n rootDir: string,\n outDir: string,\n manifest: SidecarManifest,\n identity: ProjectIdentity,\n host: SidecarHost = \"node\",\n options: { vercelOutputDir?: string } = {},\n): Promise<void> {\n const cacheDir = path.join(rootDir, \".sidecar\", \"cache\", \"server\");\n await mkdir(cacheDir, { recursive: true });\n\n const entryFile = path.join(cacheDir, \"index.ts\");\n await writeFile(entryFile, renderServerEntry(rootDir, entryFile, manifest, identity));\n\n const serverFile = path.join(outDir, SERVER_ENTRYPOINT);\n await mkdir(path.dirname(serverFile), { recursive: true });\n await esbuild({\n absWorkingDir: rootDir,\n alias: sidecarBundleAliases(rootDir),\n banner: {\n js: `import { createRequire as __sidecarCreateRequire } from \"node:module\";\\nconst require = __sidecarCreateRequire(import.meta.url);`,\n },\n bundle: true,\n entryPoints: [entryFile],\n format: \"esm\",\n legalComments: \"none\",\n minify: false,\n nodePaths: [\n path.join(rootDir, \"node_modules\"),\n path.join(process.cwd(), \"node_modules\"),\n ],\n outfile: serverFile,\n platform: \"node\",\n sourcemap: false,\n target: \"node20\",\n });\n\n await writeFile(path.join(outDir, \"package.json\"), renderServerPackage(identity));\n if (host === \"vercel\") {\n const vercelOutputDir = options.vercelOutputDir ?? outDir;\n await rm(path.join(vercelOutputDir, \"api\"), { recursive: true, force: true });\n await rm(path.join(vercelOutputDir, \"vercel.json\"), { force: true });\n await writeFile(path.join(outDir, VERCEL_HANDLER_FILE), renderVercelEntrypoint());\n await writeFile(path.join(outDir, \".vc-config.json\"), renderVercelFunctionConfig());\n await mkdir(vercelOutputDir, { recursive: true });\n await writeFile(path.join(vercelOutputDir, \"config.json\"), renderVercelOutputConfig());\n } else {\n await rm(path.join(outDir, \"api\"), { recursive: true, force: true });\n await rm(path.join(outDir, \"vercel.json\"), { force: true });\n }\n}\n\n/** Renders the temporary TypeScript entrypoint that esbuild bundles. */\nfunction renderServerEntry(\n rootDir: string,\n entryFile: string,\n manifest: SidecarManifest,\n identity: ProjectIdentity,\n): string {\n const entryDir = path.dirname(entryFile);\n const tools = manifest.tools;\n const resources = manifest.resources;\n const prompts = manifest.prompts;\n\n const imports = [\n `import { readFileSync, realpathSync } from \"node:fs\";`,\n `import { createServer } from \"node:http\";`,\n `import { pathToFileURL } from \"node:url\";`,\n `import { createSidecarHttpHandler } from \"@sidecar-ai/server\";`,\n `import { isSidecarAuth } from \"@sidecar-ai/auth\";`,\n `import { isSidecarPrompt, isSidecarRemote, isSidecarResource, isSidecarTool } from \"@sidecar-ai/core\";`,\n `import { isSidecarProxy } from \"@sidecar-ai/server/proxy\";`,\n ...tools.map((entry, index) =>\n `import tool${index} from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, entry.sourceFile)))};`,\n ),\n ...resources.map((entry, index) =>\n `import resource${index} from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, entry.sourceFile)))};`,\n ),\n ...prompts.map((entry, index) =>\n `import prompt${index} from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, entry.sourceFile)))};`,\n ),\n existsSync(path.join(rootDir, \"auth.ts\"))\n ? `import authExport from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, \"auth.ts\")))};`\n : `const authExport = undefined;`,\n existsSync(path.join(rootDir, \"proxy.ts\"))\n ? `import proxyExport from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, \"proxy.ts\")))};`\n : `const proxyExport = undefined;`,\n existsSync(path.join(rootDir, \"remote.ts\"))\n ? `import remoteExport from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, \"remote.ts\")))};`\n : `const remoteExport = undefined;`,\n existsSync(path.join(rootDir, \"sidecar.config.ts\"))\n ? `import configExport from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, \"sidecar.config.ts\")))};`\n : `const configExport = undefined;`,\n ].join(\"\\n\");\n\n return `${imports}\n\nconst manifest = ${JSON.stringify(manifest, null, 2)};\nconst identity = ${JSON.stringify(identity, null, 2)};\n\nconst loadedAuth = authExport === undefined ? undefined : assertAuth(authExport);\nconst auth = loadedAuth && process.env.SIDECAR_MCP_URL\n ? loadedAuth.withResource(process.env.SIDECAR_MCP_URL)\n : loadedAuth;\nconst proxy = proxyExport === undefined ? undefined : assertProxy(proxyExport);\nconst remoteExecution = manifest.codeMode?.remoteExecution\n ? assertRemote(remoteExport)\n : undefined;\nconst runtimeConfig = configExport && typeof configExport === \"object\" ? configExport : undefined;\n\nif (auth && !process.env.SIDECAR_MCP_URL) {\n console.warn(\"Sidecar auth is enabled. Set SIDECAR_MCP_URL to the public https://.../mcp URL before hosting.\");\n}\n\nexport const handler = createSidecarHttpHandler({\n name: identity.name,\n version: identity.version,\n path: process.env.SIDECAR_MCP_PATH ?? \"/mcp\",\n publicUrl: process.env.SIDECAR_PUBLIC_URL ?? process.env.SIDECAR_MCP_URL,\n auth,\n proxy,\n codeMode: manifest.codeMode\n ? {\n enabled: true,\n unsafe: manifest.codeMode.unsafe,\n render: manifest.codeMode.render,\n widgetMeta: manifest.codeMode.widget?.resourceUri\n ? {\n ui: { resourceUri: manifest.codeMode.widget.resourceUri },\n \"ui/resourceUri\": manifest.codeMode.widget.resourceUri,\n ...(manifest.target === \"chatgpt\" ? { \"openai/outputTemplate\": manifest.codeMode.widget.resourceUri } : {}),\n }\n : undefined,\n }\n : undefined,\n remoteExecution,\n tools: [\n${tools.map((entry, index) => ` loadTool(${JSON.stringify(entry.sourceFile)}, tool${index}, manifest.tools[${index}].descriptor),`).join(\"\\n\")}\n ],\n resources: [\n${renderWidgetResources(manifest)}\n${resources.map((entry, index) => ` loadResource(${JSON.stringify(entry.sourceFile)}, resource${index}, manifest.resources[${index}]),`).join(\"\\n\")}\n ],\n resourceTemplates: manifest.resourceTemplates.map((entry) => ({ descriptor: entry.descriptor })),\n prompts: [\n${prompts.map((entry, index) => ` loadPrompt(${JSON.stringify(entry.sourceFile)}, prompt${index}, manifest.prompts[${index}].descriptor),`).join(\"\\n\")}\n ],\n capabilities: {\n tools: runtimeConfig?.tools ?? manifest.config.tools,\n resources: runtimeConfig?.resources ?? manifest.config.resources,\n prompts: runtimeConfig?.prompts ?? manifest.config.prompts,\n },\n pagination: runtimeConfig?.pagination ?? {\n pageSize: manifest.config.pagination.pageSize,\n },\n});\n\nexport default handler;\n\nexport const server = createServer(handler);\n\nif (isDirectRun()) {\n const port = readPort();\n const host = process.env.SIDECAR_HOST ?? process.env.HOST ?? \"0.0.0.0\";\n server.listen(port, host, () => {\n const localHost = host === \"0.0.0.0\" ? \"127.0.0.1\" : host;\n console.log(\\`MCP running on Streamable HTTP at http://\\${localHost}:\\${port}\\${process.env.SIDECAR_MCP_PATH ?? \"/mcp\"}\\`);\n printRuntimeUrls(localHost, port);\n });\n\n process.on(\"SIGTERM\", () => shutdown());\n process.on(\"SIGINT\", () => shutdown());\n}\n\nfunction printRuntimeUrls(localHost, port) {\n const mcpPath = process.env.SIDECAR_MCP_PATH ?? \"/mcp\";\n console.log(\"Sidecar URLs:\");\n console.log(\\` Local MCP: http://\\${localHost}:\\${port}\\${mcpPath}\\`);\n console.log(\\` Public MCP: \\${process.env.SIDECAR_MCP_URL ?? \"set SIDECAR_MCP_URL=https://your-host.example.com\" + mcpPath}\\`);\n if (process.env.SIDECAR_PUBLIC_URL) {\n console.log(\\` Public base: \\${process.env.SIDECAR_PUBLIC_URL}\\`);\n }\n}\n\nfunction loadTool(sourceFile, value, descriptor) {\n const tool = unwrapRuntimeDefault(value);\n if (!isSidecarTool(tool)) {\n throw new Error(\\`\\${sourceFile} did not default-export a Sidecar tool.\\`);\n }\n return { tool, descriptor };\n}\n\nfunction loadResource(sourceFile, value, entry) {\n const resource = unwrapRuntimeDefault(value);\n if (!isSidecarResource(resource)) {\n throw new Error(\\`\\${sourceFile} did not default-export a Sidecar resource.\\`);\n }\n return {\n uri: entry.uri,\n descriptor: entry.descriptor,\n resource,\n };\n}\n\nfunction loadPrompt(sourceFile, value, descriptor) {\n const prompt = unwrapRuntimeDefault(value);\n if (!isSidecarPrompt(prompt)) {\n throw new Error(\\`\\${sourceFile} did not default-export a Sidecar prompt.\\`);\n }\n return { prompt, descriptor };\n}\n\nfunction assertAuth(value) {\n const authValue = unwrapRuntimeDefault(value);\n if (!isSidecarAuth(authValue)) {\n throw new Error(\"auth.ts must default-export auth({ ... }) from sidecar-ai.\");\n }\n return authValue;\n}\n\nfunction assertProxy(value) {\n const proxyValue = unwrapRuntimeDefault(value);\n if (!isSidecarProxy(proxyValue)) {\n throw new Error(\"proxy.ts must default-export proxy({ ... }) from @sidecar-ai/server/proxy.\");\n }\n return proxyValue;\n}\n\nfunction assertRemote(value) {\n const remoteValue = unwrapRuntimeDefault(value);\n if (!isSidecarRemote(remoteValue)) {\n throw new Error(\"remote.ts must default-export remote({ execute }) from sidecar-ai/remote.\");\n }\n return remoteValue;\n}\n\nfunction unwrapRuntimeDefault(value) {\n if (\n value &&\n typeof value === \"object\" &&\n \"default\" in value &&\n Object.keys(value).every((key) => key === \"default\" || key === \"__esModule\")\n ) {\n return unwrapRuntimeDefault(value.default);\n }\n return value;\n}\n\nfunction readWidget(outputFile) {\n return readFileSync(new URL(\\`../\\${outputFile}\\`, import.meta.url), \"utf8\");\n}\n\nfunction readPort() {\n const raw = process.env.PORT ?? process.env.SIDECAR_PORT ?? \"3001\";\n const port = Number(raw);\n if (!Number.isInteger(port) || port < 0 || port > 65535) {\n throw new Error(\\`Invalid PORT/SIDECAR_PORT value: \\${raw}\\`);\n }\n return port;\n}\n\nfunction isDirectRun() {\n const entry = process.argv[1];\n if (!entry) {\n return false;\n }\n\n return import.meta.url === pathToFileURL(realpathSync(entry)).href;\n}\n\nfunction shutdown() {\n server.close(() => process.exit(0));\n}\n`;\n}\n\n/** Renders generated widget resources as static MCP resource entries. */\nfunction renderWidgetResources(manifest: SidecarManifest): string {\n const toolWidgets = manifest.tools\n .filter((entry) => entry.widget?.outputFile)\n .map((entry) => ` {\n uri: ${JSON.stringify(entry.widget?.resourceUri)},\n name: ${JSON.stringify(entry.name)},\n description: ${JSON.stringify(entry.widget?.options?.description)},\n mimeType: \"text/html;profile=mcp-app\",\n text: readWidget(${JSON.stringify(entry.widget?.outputFile)}),\n _meta: ${JSON.stringify(entry.widget?.resourceMeta ?? undefined)},\n },`)\n .join(\"\\n\");\n const codeModeWidget = manifest.codeMode?.widget?.outputFile\n ? ` {\n uri: ${JSON.stringify(manifest.codeMode.widget.resourceUri)},\n name: \"Execute Code\",\n description: ${JSON.stringify(manifest.codeMode.widget.options?.description)},\n mimeType: \"text/html;profile=mcp-app\",\n text: readWidget(${JSON.stringify(manifest.codeMode.widget.outputFile)}),\n _meta: ${JSON.stringify(manifest.codeMode.widget.resourceMeta ?? undefined)},\n },`\n : \"\";\n return [codeModeWidget, toolWidgets].filter(Boolean).join(\"\\n\");\n}\n\n/** Writes a minimal package manifest for hosts that run the build output directly. */\nfunction renderServerPackage(identity: ProjectIdentity): string {\n return `${JSON.stringify({\n name: `${identity.slug}-sidecar-server`,\n version: identity.version,\n private: true,\n type: \"module\",\n scripts: {\n start: \"node server/index.js\",\n },\n engines: {\n node: \">=20\",\n },\n }, null, 2)}\\n`;\n}\n\n/** Emits a Vercel function shim that reuses the generated Node request handler. */\nfunction renderVercelEntrypoint(): string {\n return `export { default } from \"./server/index.js\";\n`;\n}\n\n/** Emits Build Output API metadata for the Vercel Node.js function. */\nfunction renderVercelFunctionConfig(): string {\n return `${JSON.stringify({\n runtime: \"nodejs22.x\",\n handler: VERCEL_HANDLER_FILE,\n launcherType: \"Nodejs\",\n shouldAddHelpers: true,\n supportsResponseStreaming: true,\n maxDuration: 300,\n }, null, 2)}\\n`;\n}\n\n/** Emits Vercel Build Output API routing to the generated MCP function. */\nfunction renderVercelOutputConfig(): string {\n return `${JSON.stringify({\n version: 3,\n routes: [\n {\n src: \"/(.*)\",\n dest: \"/api/sidecar\",\n },\n ],\n }, null, 2)}\\n`;\n}\n\n/** Resolves workspace package imports to source when building this monorepo's examples. */\nfunction sidecarBundleAliases(rootDir: string): Record<string, string> | undefined {\n const repoRoot = findSidecarRepoRoot(rootDir) ?? findSidecarRepoRoot(process.cwd());\n if (!repoRoot) {\n return undefined;\n }\n\n return {\n \"sidecar-ai/remote\": path.join(repoRoot, \"packages\", \"sidecar-ai\", \"src\", \"remote.ts\"),\n \"sidecar-ai\": path.join(repoRoot, \"packages\", \"sidecar-ai\", \"src\", \"index.ts\"),\n \"@sidecar-ai/auth\": path.join(repoRoot, \"packages\", \"auth\", \"src\", \"index.ts\"),\n \"@sidecar-ai/core\": path.join(repoRoot, \"packages\", \"core\", \"src\", \"index.ts\"),\n \"@sidecar-ai/server\": path.join(repoRoot, \"packages\", \"server\", \"src\", \"index.ts\"),\n \"@sidecar-ai/server/proxy\": path.join(repoRoot, \"packages\", \"server\", \"src\", \"proxy.ts\"),\n \"@sidecar-ai/client\": path.join(repoRoot, \"packages\", \"client\", \"src\", \"index.ts\"),\n \"@sidecar-ai/react\": path.join(repoRoot, \"packages\", \"react\", \"src\", \"index.ts\"),\n \"@sidecar-ai/native\": path.join(repoRoot, \"packages\", \"native\", \"src\", \"index.ts\"),\n \"@sidecar-ai/native/components\": path.join(repoRoot, \"packages\", \"native\", \"src\", \"components\", \"index.tsx\"),\n \"@sidecar-ai/openai\": path.join(repoRoot, \"packages\", \"openai\", \"src\", \"index.ts\"),\n \"@sidecar-ai/openai/components\": path.join(repoRoot, \"packages\", \"openai\", \"src\", \"components.tsx\"),\n \"@sidecar-ai/openai/official\": path.join(repoRoot, \"packages\", \"openai\", \"src\", \"official.ts\"),\n \"@sidecar-ai/anthropic\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"index.ts\"),\n \"@sidecar-ai/anthropic/agent\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"agent.ts\"),\n \"@sidecar-ai/anthropic/command\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"command.ts\"),\n \"@sidecar-ai/anthropic/components\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"components.tsx\"),\n \"@sidecar-ai/anthropic/hooks\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"hooks.ts\"),\n \"@sidecar-ai/anthropic/mcp\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"mcp.ts\"),\n \"@sidecar-ai/anthropic/plugin\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"plugin.ts\"),\n \"@sidecar-ai/anthropic/skill\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"skill.ts\"),\n };\n}\n\n/** Finds the Sidecar repository root for source aliases used by workspace tests. */\nfunction findSidecarRepoRoot(startDir: string): string | undefined {\n let current = path.resolve(startDir);\n while (true) {\n if (existsSync(path.join(current, \"packages\", \"core\", \"src\", \"index.ts\"))) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n"],"mappings":"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","names":["path","Node","SyntaxKind","path","stripUndefined","path","Node","structured","existsSync","path","path","existsSync","existsSync","path","pathToFileURL","Node","path","existsSync","pathToFileURL","stripUndefined","Node","isRecord","path","readObjectProperty","readBooleanProperty","Node","SyntaxKind","readStringProperty","readStringArrayProperty","mkdir","writeFile","existsSync","path","path","Node","SyntaxKind","path","Node","readObjectProperty","readBooleanProperty","readStringProperty","esbuild","readStringArrayProperty","SyntaxKind","existsSync","readFile","path","mkdir","writeFile","path","path","mkdir","writeFile","readFile","path","path","readFile","mkdir","writeFile","path","mkdir","readdir","readFile","writeFile","path","path","readdir","mkdir","readFile","writeFile","stripUndefined","mkdir","readdir","readFile","writeFile","path","path","mkdir","readdir","readFile","writeFile","stripUndefined","mkdir","readdir","readFile","writeFile","path","Node","Project","SyntaxKind","path","readdir","readFile","mkdir","writeFile","Project","Node","stripUndefined","readStringProperty","SyntaxKind","cp","lstat","path","path","cp","lstat","existsSync","cp","lstat","mkdir","readdir","readFile","writeFile","path","path","mkdir","readdir","existsSync","cp","readFile","writeFile","lstat","path","mkdir","writeFile","stripUndefined","readdir","path","Node","SyntaxKind","path","getOptionalStringProperty","getRequiredStringProperty","readdir","Node","readObjectProperty","readBooleanProperty","SyntaxKind","readStringArrayProperty","readdir","path","Node","SyntaxKind","path","getRequiredStringProperty","getOptionalStringProperty","readIcons","readAnnotations","getMethodOrFunctionProperty","readBooleanProperty","readdir","Node","SyntaxKind","readObjectProperty","readStringArrayProperty","existsSync","mkdir","writeFile","path","esbuild","path","mkdir","writeFile","esbuild","existsSync","findSidecarRepoRoot","path","existsSync","mkdir","writeFile"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/core/src/index.ts","../../packages/compiler/src/analyze.ts","../../packages/compiler/src/ast.ts","../../packages/compiler/src/errors.ts","../../packages/compiler/src/project.ts","../../packages/compiler/src/utils.ts","../../packages/compiler/src/schema.ts","../../packages/compiler/src/runtime-schema.ts","../../packages/compiler/src/widgets.ts","../../packages/compiler/src/build.ts","../../packages/compiler/src/config.ts","../../packages/compiler/src/diagnostics.ts","../../packages/compiler/src/generated.ts","../../packages/compiler/src/identity.ts","../../packages/compiler/src/plugins.ts","../../packages/compiler/src/plugin-components/agents.ts","../../packages/compiler/src/plugin-components/commands.ts","../../packages/compiler/src/plugin-components/hooks.ts","../../packages/compiler/src/plugin-components/passthrough.ts","../../packages/compiler/src/plugin-components/skills.ts","../../packages/compiler/src/prompts.ts","../../packages/compiler/src/resources.ts","../../packages/compiler/src/server-output.ts"],"sourcesContent":["/**\n * Core Sidecar authoring primitives.\n *\n * This package intentionally has no host or transport dependency. It defines\n * the stable contracts used by the compiler, MCP runtime, auth package, and\n * widget bridge.\n */\nexport type JsonPrimitive = string | number | boolean | null;\n\n/** JSON-compatible data accepted in MCP structured content and metadata. */\nexport type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\n\n/** JSON object shorthand used by MCP content blocks and descriptors. */\nexport type JsonObject = { [key: string]: JsonValue };\n\n/** Value that may be returned synchronously or asynchronously. */\nexport type MaybePromise<T> = T | Promise<T>;\n\n/** MIME type required for HTML MCP Apps resources. */\nexport const MCP_APP_RESOURCE_MIME_TYPE = \"text/html;profile=mcp-app\";\n\n/** Project-level metadata declared from `sidecar.config.ts`. */\nexport type SidecarConfig = {\n /** Human-readable app/server name used in generated manifests. */\n name: string;\n /** Semver-ish app version used in generated manifests and plugin output. */\n version: string;\n /** Short app description used by hosts and generated install docs. */\n description: string;\n /** Build defaults used when CLI flags do not override them. */\n build?: BuildConfig;\n /** Server-level MCP resource capabilities. */\n resources?: ResourceCapabilityConfig;\n /** Server-level MCP prompt capabilities. */\n prompts?: PromptCapabilityConfig;\n /** Server-level MCP tool capabilities. */\n tools?: ToolCapabilityConfig;\n /** Cursor pagination defaults for MCP list operations. */\n pagination?: PaginationConfig;\n /** Optional code-mode transform that exposes a small tool catalog backed by generated code. */\n codeMode?: boolean | CodeModeConfig;\n /** Enables project-owned remote execution through reserved `remote.ts`. */\n remoteExecution?: boolean;\n};\n\n/** Build target profile selected by reserved platform file suffixes. */\nexport type BuildTarget = \"mcp\" | \"chatgpt\" | \"claude\";\n\n/** Host runtime artifact emitted for a build output. */\nexport type BuildHost = \"node\" | \"vercel\";\n\n/** Project-level build defaults. CLI flags always take precedence. */\nexport type BuildConfig = {\n /** Default target profile for `sidecar build`. */\n target?: BuildTarget;\n /** Default host artifact for `sidecar build`. Vercel also auto-selects this when `VERCEL=1`. */\n host?: BuildHost;\n /** Default output directory. Leave unset for host-specific defaults. */\n outDir?: string;\n /** Whether `sidecar build` should emit installable plugin packages by default. */\n plugins?: boolean;\n /** Optional widget bundler extensions. Sidecar still owns the wrapper and output shape. */\n widgets?: WidgetBuildConfig;\n};\n\n/** Project-level widget bundler extensions. */\nexport type WidgetBuildConfig = {\n /** Static esbuild option extensions for every widget bundle. */\n esbuild?: WidgetEsbuildConfig;\n /** Optional TS/JS module path that default-exports a widget bundler hook. */\n configure?: string;\n};\n\n/** Serializable esbuild options Sidecar can read statically from config. */\nexport type WidgetEsbuildConfig = {\n /** Package/path aliases merged with Sidecar's own aliases. Relative replacements resolve from the project root. */\n alias?: Record<string, string>;\n /** Compile-time constants, usually JSON.stringify(...) values. */\n define?: Record<string, string>;\n /** Package names or paths to keep external. */\n external?: string[];\n /** Extra esbuild loaders keyed by extension, for example `{ \".svg\": \"text\" }`. */\n loader?: Record<string, string>;\n /** Package export conditions. */\n conditions?: string[];\n /** Package main fields. */\n mainFields?: string[];\n /** JSX transform mode. Defaults to `automatic`. */\n jsx?: \"automatic\" | \"transform\" | \"preserve\";\n /** JSX import source used with the automatic runtime. */\n jsxImportSource?: string;\n};\n\n/** Esbuild-like option bag exposed to `defineWidgetBundler()` without making core depend on esbuild. */\nexport type WidgetBundlerEsbuildOptions = WidgetEsbuildConfig & {\n nodePaths?: string[];\n plugins?: unknown[];\n [key: string]: unknown;\n};\n\n/** Widget identity passed to a project-level bundler hook. */\nexport type WidgetBundlerHookWidget = {\n toolId: string;\n toolName: string;\n target: BuildTarget;\n sourceFile: string;\n};\n\n/** Input passed to a project-level bundler hook. */\nexport type WidgetBundlerHookInput<Options = WidgetBundlerEsbuildOptions> = {\n rootDir: string;\n outDir: string;\n entryFile: string;\n widget: WidgetBundlerHookWidget;\n esbuildOptions: Options;\n};\n\n/** Result returned by a project-level bundler hook. */\nexport type WidgetBundlerHookResult<Options = WidgetBundlerEsbuildOptions> =\n | void\n | Options\n | {\n esbuildOptions?: Options;\n };\n\n/** Project-level hook for extending widget bundling without replacing Sidecar's wrapper. */\nexport type WidgetBundlerHook<Options = WidgetBundlerEsbuildOptions> = (\n input: WidgetBundlerHookInput<Options>\n) => MaybePromise<WidgetBundlerHookResult<Options>>;\n\n/** MCP list operations that support cursor pagination. */\nexport type McpListOperation =\n | \"tools/list\"\n | \"resources/list\"\n | \"resources/templates/list\"\n | \"prompts/list\";\n\n/** Configures server-level resource capabilities. */\nexport type ResourceCapabilityConfig = {\n /** Whether the runtime accepts `resources/subscribe` and `resources/unsubscribe`. */\n subscribe?: boolean;\n /** Whether the runtime may emit `notifications/resources/list_changed`. */\n listChanged?: boolean;\n};\n\n/** Configures server-level prompt capabilities. */\nexport type PromptCapabilityConfig = {\n /** Whether the runtime may emit `notifications/prompts/list_changed`. */\n listChanged?: boolean;\n};\n\n/** Configures server-level tool capabilities. */\nexport type ToolCapabilityConfig = {\n /** Whether the runtime may emit `notifications/tools/list_changed`. */\n listChanged?: boolean;\n};\n\n/** Context passed to project-level pagination overrides. */\nexport type PaginationContext<Auth = unknown> = {\n operation: McpListOperation;\n cursor?: string;\n pageSize: number;\n auth?: Auth;\n};\n\n/** Input accepted by a project-level pagination override. */\nexport type PaginationOverrideInput<Item = unknown, Auth = unknown> =\n PaginationContext<Auth> & {\n items: readonly Item[];\n };\n\n/** Result returned by a project-level pagination override. */\nexport type PaginationResult<Item = unknown> = {\n items: readonly Item[];\n nextCursor?: string;\n};\n\n/** Custom pagination function used for one or more MCP list operations. */\nexport type PaginationOverride<Item = unknown, Auth = unknown> = (\n input: PaginationOverrideInput<Item, Auth>\n) => MaybePromise<PaginationResult<Item>>;\n\n/** Operation-specific pagination overrides. Specific keys win over `default`. */\nexport type PaginationOverrideMap<Auth = unknown> = {\n default?: PaginationOverride<unknown, Auth>;\n toolsList?: PaginationOverride<unknown, Auth>;\n resourcesList?: PaginationOverride<unknown, Auth>;\n resourceTemplatesList?: PaginationOverride<unknown, Auth>;\n promptsList?: PaginationOverride<unknown, Auth>;\n};\n\n/** Project-level cursor pagination config. */\nexport type PaginationConfig<Auth = unknown> = {\n /** Server-chosen page size. Clients must treat cursors as opaque and must not assume this value. */\n pageSize?: number;\n /** One override for all list operations, or specific overrides keyed by operation. */\n override?: PaginationOverride<unknown, Auth> | PaginationOverrideMap<Auth>;\n};\n\n/** Strategy used by the generated code-mode widget when several internal tools can render UI. */\nexport type CodeModeRenderStrategy =\n | \"last-renderable\"\n | \"first-renderable\"\n | \"explicit\";\n\n/** UI rendering behavior for code-mode tool results. */\nexport type CodeModeRenderConfig = {\n /** Whether the public `execute_code` tool should advertise a dynamic widget. */\n enabled?: boolean;\n /** How Sidecar chooses an internal widget result when generated code calls several tools. */\n strategy?: CodeModeRenderStrategy;\n};\n\n/** Configures Sidecar's code-mode transform. */\nexport type CodeModeConfig = {\n /** Runs generated code directly in the MCP server process. Intended only for trusted/local use. */\n unsafe?: boolean;\n /** Dynamic widget selection behavior for code-mode results. */\n render?: boolean | CodeModeRenderConfig;\n};\n\n/** File emitted into a remote executor workspace for one code-mode run. */\nexport type RemoteRunFile = {\n path: string;\n text: string;\n};\n\n/** Code-mode work package passed to `remote.ts`. */\nexport type RemoteCodeRun = {\n /** Stable id for this code-mode invocation. */\n id: string;\n /** Files Sidecar generated for the remote executor. */\n files: RemoteRunFile[];\n /** Command the executor should run after writing `files`. */\n command: string[];\n /** Sidecar-generated environment only. App/provider secrets are intentionally not included. */\n env: Record<string, string>;\n /** Maximum runtime Sidecar expects the executor to enforce. */\n timeoutMs: number;\n};\n\n/** Result returned by `remote.ts` after the generated runner exits. */\nexport type RemoteExecutionResult = {\n exitCode: number;\n stdout: string;\n stderr?: string;\n};\n\n/** Context passed to a project-owned remote executor. */\nexport type RemoteExecutionContext = {\n log: Logger;\n};\n\n/** Reserved `remote.ts` definition used by code mode remote execution. */\nexport type RemoteExecutionDefinition = {\n execute(\n run: RemoteCodeRun,\n ctx: RemoteExecutionContext,\n ): MaybePromise<RemoteExecutionResult>;\n};\n\n/** Options accepted by the built-in offset cursor pagination helper. */\nexport type OffsetPaginationOptions<Item> = {\n items: readonly Item[];\n cursor?: string;\n pageSize: number;\n};\n\n/**\n * Paginates an in-memory list with opaque offset cursors.\n *\n * Use this inside `pagination.override` when you want Sidecar's standard\n * cursor behavior after applying app-specific filtering or sorting.\n */\nexport function offsetPagination<Item>(\n options: OffsetPaginationOptions<Item>,\n): PaginationResult<Item> {\n const offset = options.cursor ? decodeOffsetCursor(options.cursor) : 0;\n const pageSize = options.pageSize > 0 ? Math.floor(options.pageSize) : 50;\n const page = options.items.slice(offset, offset + pageSize);\n const nextOffset = offset + page.length;\n return {\n items: page,\n nextCursor: nextOffset < options.items.length\n ? encodeOffsetCursor(nextOffset)\n : undefined,\n };\n}\n\n/** MCP content block variants Sidecar currently normalizes. */\nexport type McpContentBlock =\n | { type: \"text\"; text: string }\n | { type: \"image\"; data: string; mimeType: string }\n | { type: \"audio\"; data: string; mimeType: string }\n | { type: \"resource\"; resource: JsonObject };\n\n/** Minimal JSON Schema shape Sidecar needs for MCP tool descriptors. */\nexport type JsonSchema = {\n $schema?: string;\n type?: string | string[];\n title?: string;\n description?: string;\n properties?: Record<string, JsonSchema>;\n required?: string[];\n additionalProperties?: boolean | JsonSchema;\n items?: JsonSchema;\n enum?: JsonValue[];\n const?: JsonValue;\n anyOf?: JsonSchema[];\n oneOf?: JsonSchema[];\n allOf?: JsonSchema[];\n default?: JsonValue;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n minItems?: number;\n maxItems?: number;\n pattern?: string;\n format?: string;\n};\n\n/** Descriptor-level auth scheme advertised to MCP/App clients. */\nexport type SecurityScheme =\n | { type: \"noauth\" }\n | {\n type: \"oauth2\";\n scopes: string[];\n };\n\n/** MCP tool annotation hints used by hosts to understand tool behavior. */\nexport type ToolAnnotations = {\n /** Human-facing display title. Defaults to the tool name. */\n title?: string;\n /** True when the tool only reads data and has no side effects. */\n readOnlyHint?: boolean;\n /** True when the tool may perform destructive updates. Meaningful only for non-read-only tools. */\n destructiveHint?: boolean;\n /** True when repeating the same call has no extra effect. Meaningful only for non-read-only tools. */\n idempotentHint?: boolean;\n /** True when the tool may interact with external systems outside the current account/control boundary. */\n openWorldHint?: boolean;\n};\n\n/** Shared MCP annotations for resources, resource contents, and prompt content. */\nexport type ResourceAnnotations = {\n /** Intended audience for the annotated content. */\n audience?: readonly (\"user\" | \"assistant\")[];\n /** Relative importance from 0.0 to 1.0. */\n priority?: number;\n /** ISO 8601 timestamp describing when the content last changed. */\n lastModified?: string | Date;\n};\n\n/** Icon metadata supported by MCP resources and prompts. */\nexport type McpIcon = {\n src: string;\n mimeType?: string;\n sizes?: readonly string[];\n};\n\n/** User-friendly input accepted by `resourceResult()`. */\nexport type ResourceResultContentInput<\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = {\n /** Text, JSON-compatible data, or bytes returned by the resource. */\n content: string | JsonValue | Uint8Array | ArrayBuffer;\n /** Optional MIME type. Sidecar infers a conservative value when omitted. */\n mimeType?: string;\n /** Optional MCP annotations for this returned content block. */\n annotations?: ResourceAnnotations;\n /** Optional host/client-only metadata emitted as MCP `_meta`. */\n meta?: Meta;\n};\n\n/** Options accepted by `resourceResult()`. */\nexport type ResourceResultInput<\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = ResourceResultContentInput<Meta> | readonly ResourceResultContentInput<Meta>[];\n\ndeclare const resourceResultTypeBrand: unique symbol;\n\n/** Branded Sidecar result returned by every resource read. */\nexport type ResourceResult<\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = {\n readonly [resourceResultTypeBrand]: true;\n contents: ResourceResultContentInput<Meta>[];\n};\n\n/** MCP resource content emitted on the wire. */\nexport type McpResourceContent =\n | {\n uri: string;\n mimeType?: string;\n text: string;\n annotations?: ResourceAnnotations;\n _meta?: Record<string, unknown>;\n }\n | {\n uri: string;\n mimeType: string;\n blob: string;\n annotations?: ResourceAnnotations;\n _meta?: Record<string, unknown>;\n };\n\n/** Normalized MCP resource read result returned by the runtime. */\nexport type McpResourceReadResult = {\n contents: McpResourceContent[];\n _meta?: Record<string, unknown>;\n};\n\n/** Helper used by resources to return MCP-compliant content. */\nexport type ResourceResultFactory = {\n <Meta extends Record<string, unknown> = Record<string, unknown>>(\n input: ResourceResultInput<Meta>\n ): ResourceResult<Meta>;\n many<Meta extends Record<string, unknown> = Record<string, unknown>>(\n input: readonly ResourceResultContentInput<Meta>[]\n ): ResourceResult<Meta>;\n};\n\n/** Runtime context passed to a resource's `read` method. */\nexport type ResourceContext<Auth = unknown, Services = unknown> = {\n auth: Auth;\n request: ToolRequestContext;\n services: Services;\n log: Logger;\n storage: ScopedStorage;\n notify: RuntimeNotifications;\n env: Readonly<Record<string, string | undefined>>;\n};\n\n/** Author-facing definition accepted by `resource()`. */\nexport type ResourceDefinition<Auth = unknown, Services = unknown> = {\n /** Human-readable name shown to users and clients. */\n name: string;\n /** Optional stable MCP resource URI. Defaults to `sidecar://resources/<folder>`. */\n uri?: string;\n /** Optional display title when the machine-facing name is terse. */\n title?: string;\n /** Optional human-readable description. */\n description?: string;\n /** Optional MIME type advertised from `resources/list` and used as a result default. */\n mimeType?: string;\n /** Optional resource size in bytes. */\n size?: number;\n /** Optional MCP display icons. */\n icons?: readonly McpIcon[];\n /** Optional MCP annotations for the listed resource. */\n annotations?: ResourceAnnotations;\n /** Whether this resource is worth subscribing to when server subscribe is enabled. */\n subscribe?: boolean;\n /** Resource implementation. It may be synchronous or asynchronous. */\n read: (ctx: ResourceContext<Auth, Services>) => MaybePromise<ResourceResult>;\n};\n\n/** Branded Sidecar resource returned by `resource()`. */\nexport type SidecarResource<Auth = unknown, Services = unknown> =\n ResourceDefinition<Auth, Services> & {\n readonly kind: \"sidecar.resource\";\n };\n\n/** MCP descriptor emitted for `resources/list`. */\nexport type McpResourceDescriptor = {\n uri: string;\n name: string;\n title?: string;\n description?: string;\n mimeType?: string;\n size?: number;\n icons?: McpIcon[];\n annotations?: ResourceAnnotations;\n _meta?: Record<string, unknown>;\n};\n\n/** MCP resource template descriptor emitted for `resources/templates/list`. */\nexport type McpResourceTemplateDescriptor = {\n uriTemplate: string;\n name: string;\n title?: string;\n description?: string;\n mimeType?: string;\n icons?: McpIcon[];\n annotations?: ResourceAnnotations;\n _meta?: Record<string, unknown>;\n};\n\n/** Shorthand argument forms accepted by `prompt({ args })`. */\nexport type PromptArgInput =\n | string\n | readonly JsonPrimitive[]\n | {\n description?: string;\n required?: boolean;\n };\n\n/** Prompt argument schema declared in normal TypeScript objects. */\nexport type PromptArgsDefinition = Record<string, PromptArgInput>;\n\n/** MCP prompt argument descriptor emitted for `prompts/list`. */\nexport type McpPromptArgument = {\n name: string;\n description?: string;\n required?: boolean;\n};\n\n/** MCP prompt descriptor emitted for `prompts/list`. */\nexport type McpPromptDescriptor = {\n name: string;\n title?: string;\n description?: string;\n arguments?: McpPromptArgument[];\n icons?: McpIcon[];\n};\n\n/** MCP prompt message content. */\nexport type McpPromptContent = McpContentBlock;\n\n/** MCP prompt message emitted by `prompts/get`. */\nexport type McpPromptMessage = {\n role: \"user\" | \"assistant\";\n content: McpPromptContent;\n};\n\n/** User-friendly value accepted from `prompt().run`. */\nexport type PromptResultInput =\n | string\n | McpPromptMessage\n | McpPromptMessage[]\n | {\n description?: string;\n messages: McpPromptMessage[];\n };\n\n/** Normalized MCP prompt result returned by the runtime. */\nexport type McpPromptResult = {\n description?: string;\n messages: McpPromptMessage[];\n};\n\n/** Runtime context passed to a prompt's `run` method. */\nexport type PromptContext<Auth = unknown, Services = unknown> = {\n auth: Auth;\n request: ToolRequestContext;\n services: Services;\n log: Logger;\n storage: ScopedStorage;\n notify: RuntimeNotifications;\n env: Readonly<Record<string, string | undefined>>;\n};\n\n/** Author-facing definition accepted by `prompt()`. */\nexport type PromptDefinition<\n Args extends Record<string, unknown> = Record<string, unknown>,\n Auth = unknown,\n Services = unknown,\n> = {\n /** Optional MCP prompt machine name. Defaults to the folder name. */\n name?: string;\n /** Human-readable display title. */\n title: string;\n /** Optional human-readable description. */\n description?: string;\n /** Optional simple argument declarations. */\n args?: PromptArgsDefinition;\n /** Optional MCP display icons. */\n icons?: readonly McpIcon[];\n /** Prompt implementation. Returning a string creates one user text message. */\n run: (args: Args, ctx: PromptContext<Auth, Services>) => MaybePromise<PromptResultInput>;\n};\n\n/** Branded Sidecar prompt returned by `prompt()`. */\nexport type SidecarPrompt<\n Args extends Record<string, unknown> = Record<string, unknown>,\n Auth = unknown,\n Services = unknown,\n> = PromptDefinition<Args, Auth, Services> & {\n readonly kind: \"sidecar.prompt\";\n};\n\n/** Controls which callers can see or call a tool. */\nexport type ToolVisibility = {\n model?: boolean;\n widgets?: boolean | string[];\n tools?: boolean | string[];\n};\n\n/** ChatGPT compatibility metadata for tool descriptors. */\nexport type ChatGptToolOptions = {\n /** Short status shown while ChatGPT is invoking the tool. */\n invoking?: string;\n /** Short status shown after ChatGPT has invoked the tool. */\n invoked?: string;\n /** Compatibility hint for legacy ChatGPT clients that allow widget tool calls. */\n widgetAccessible?: boolean;\n /** Compatibility visibility hint for legacy ChatGPT clients. */\n visibility?: \"public\" | \"private\";\n /** Top-level input fields that receive ChatGPT file references. */\n fileParams?: readonly string[];\n};\n\n/** Descriptor target used when filtering host-specific metadata. */\nexport type ToolDescriptorTarget = \"mcp\" | \"chatgpt\" | \"claude\";\n\n/** Widget CSP allowlists emitted on the MCP Apps resource metadata. */\nexport type WidgetCspOptions = {\n /** Domains the widget may contact with fetch/XHR. */\n connectDomains?: readonly string[];\n /** Domains the widget may use for static resources. */\n resourceDomains?: readonly string[];\n /** Origins allowed for subframes. Omit unless the widget embeds iframes. */\n frameDomains?: readonly string[];\n /** Allowed base URI origins. Omit to let hosts enforce the secure default. */\n baseUriDomains?: readonly string[];\n};\n\n/** Browser permissions an MCP Apps host may grant to a widget iframe. */\nexport type WidgetPermissionOptions = {\n camera?: boolean;\n microphone?: boolean;\n geolocation?: boolean;\n clipboardWrite?: boolean;\n};\n\n/** ChatGPT-only widget compatibility options. */\nexport type ChatGptWidgetOptions = {\n /** Dedicated widget origin for broad ChatGPT distribution. */\n domain?: string;\n /** Redirect targets for ChatGPT external-link handling. */\n redirectDomains?: readonly string[];\n};\n\n/** Widget resource metadata declared by `widget(...)` in a sibling widget file. */\nexport type ToolWidgetOptions = {\n /** Host-facing summary of what the rendered widget shows. */\n description?: string;\n /** Whether the widget prefers a host-provided border. */\n prefersBorder?: boolean;\n /** Optional dedicated sandbox origin. Host-specific validation still applies. */\n domain?: string;\n /** Standard MCP Apps CSP allowlists. */\n csp?: WidgetCspOptions;\n /** Standard MCP Apps iframe permission requests. */\n permissions?: WidgetPermissionOptions;\n /** Host-specific widget compatibility metadata. */\n hosts?: {\n chatgpt?: ChatGptWidgetOptions;\n };\n};\n\n/** Host-specific extension options. Keep standard MCP fields primary. */\nexport type ToolHostExtensions = {\n chatgpt?: ChatGptToolOptions;\n};\n\n/** Typed auth scope object imported by tool files. */\nexport type AuthScopeDefinition<\n Id extends string = string,\n Auth = unknown,\n> = {\n readonly kind: \"sidecar.scope\";\n readonly id: Id;\n readonly description: string;\n readonly __auth?: Auth;\n};\n\n/** Per-tool authorization policy. Omitted policy means public tool. */\nexport type ToolAuthPolicy<Auth = unknown> =\n | {\n /** This tool intentionally does not require an authenticated session. */\n public: true;\n authenticated?: never;\n scopes?: never;\n }\n | {\n /** This tool requires a valid authenticated session but no specific scope. */\n authenticated: true;\n public?: false;\n scopes?: never;\n }\n | {\n /** This tool requires an authenticated session with every listed scope. */\n scopes: readonly AuthScopeDefinition<string, Auth>[];\n public?: false;\n authenticated?: true;\n };\n\ndeclare const toolResultTypeBrand: unique symbol;\n\n/** User-friendly content accepted by `toolResult()`. */\nexport type ToolResultContent = string | McpContentBlock | McpContentBlock[];\n\n/** Options for a tool result that only needs model-visible content. */\nexport type TextToolResultInput<\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = {\n /** Required model-visible content. Sidecar normalizes strings to MCP text blocks. */\n content: ToolResultContent;\n /** Optional host/widget-only data emitted as MCP `_meta`. */\n meta?: Meta;\n /** Marks the tool result as an error while preserving normal MCP result channels. */\n isError?: boolean;\n /** Omitted for content-only results. */\n structuredContent?: undefined;\n};\n\n/** Options for a tool result with typed structured content. */\nexport type StructuredToolResultInput<\n Structured,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = {\n /** Typed machine-readable output validated against the tool output schema when present. */\n structuredContent: Structured;\n /** Required model-visible content. Sidecar normalizes strings to MCP text blocks. */\n content: ToolResultContent;\n /** Optional host/widget-only data emitted as MCP `_meta`. */\n meta?: Meta;\n /** Marks the tool result as an error while preserving normal MCP result channels. */\n isError?: boolean;\n};\n\n/** Options accepted by `toolResult()`. */\nexport type ToolResultInput<\n Structured = undefined,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = [Structured] extends [undefined]\n ? TextToolResultInput<Meta>\n : StructuredToolResultInput<Structured, Meta>;\n\n/** Branded Sidecar result returned by every tool execution. */\nexport type ToolResult<\n Structured = undefined,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n> = {\n readonly [toolResultTypeBrand]: true;\n content: McpContentBlock[];\n _meta?: Meta;\n isError?: boolean;\n} & ([Structured] extends [undefined]\n ? { structuredContent?: Structured }\n : { structuredContent: Structured });\n\n/** Normalized MCP tool result returned by the runtime. */\nexport type McpToolResult = {\n structuredContent?: unknown;\n content: McpContentBlock[];\n _meta?: Record<string, unknown>;\n isError?: boolean;\n};\n\n/** Helper used by tools to return MCP-compliant result envelopes. */\nexport type ToolResultFactory = {\n <Meta extends Record<string, unknown> = Record<string, unknown>>(\n input: TextToolResultInput<Meta>\n ): ToolResult<undefined, Meta>;\n <Structured, Meta extends Record<string, unknown> = Record<string, unknown>>(\n input: StructuredToolResultInput<Structured, Meta>\n ): ToolResult<Structured, Meta>;\n text(text: string): McpContentBlock;\n error<\n Structured = undefined,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n >(\n message: string,\n options?: Omit<ToolResultInput<Structured, Meta>, \"content\" | \"isError\">\n ): ToolResult<Structured, Meta>;\n};\n\n/** Logger surface exposed in `ToolContext`. */\nexport type Logger = {\n debug(message: string, data?: Record<string, unknown>): void;\n info(message: string, data?: Record<string, unknown>): void;\n warn(message: string, data?: Record<string, unknown>): void;\n error(message: string, data?: Record<string, unknown>): void;\n};\n\n/** Minimal tracing hook exposed in `ToolContext`. */\nexport type Trace = {\n span<T>(name: string, run: () => MaybePromise<T>): Promise<T>;\n};\n\n/** Tool-scoped storage abstraction for runtimes that provide persistence. */\nexport type ScopedStorage = {\n get<T = unknown>(key: string): Promise<T | undefined>;\n set<T = unknown>(key: string, value: T): Promise<void>;\n delete(key: string): Promise<void>;\n};\n\n/** Opaque MCP progress token supplied by a client in request `_meta`. */\nexport type ProgressToken = string | number;\n\n/** Progress update payload emitted as `notifications/progress`. */\nexport type ToolProgressUpdate = {\n /** Monotonically increasing progress value for the active request. */\n progress: number;\n /** Optional total value when the total work is known. */\n total?: number;\n /** Optional short human-readable progress message. */\n message?: string;\n};\n\n/** Typed notification helpers exposed to runtime code. */\nexport type RuntimeNotifications = {\n /** Emits `notifications/progress` when the client supplied a progress token. */\n progress(update: ToolProgressUpdate): MaybePromise<void>;\n /** Emits `notifications/tools/list_changed` on an available server SSE stream. */\n toolsChanged(): MaybePromise<void>;\n /** Emits `notifications/resources/list_changed` on an available server SSE stream. */\n resourcesChanged(): MaybePromise<void>;\n /** Emits `notifications/prompts/list_changed` on an available server SSE stream. */\n promptsChanged(): MaybePromise<void>;\n /** Emits `notifications/resources/updated` for one resource URI. */\n resourceUpdated(uri: string): MaybePromise<void>;\n};\n\n/** Request metadata supplied to each tool invocation. */\nexport type ToolRequestContext = {\n id: string;\n signal: AbortSignal;\n host: \"chatgpt\" | \"claude\" | \"unknown\";\n transport: \"streamable-http\" | \"stdio\";\n};\n\n/** Runtime context passed to a tool's `execute` method. */\nexport type ToolContext<Auth = unknown, Services = unknown, Tools = unknown> = {\n auth: Auth;\n request: ToolRequestContext;\n services: Services;\n tools: Tools;\n log: Logger;\n trace: Trace;\n storage: ScopedStorage;\n notify: RuntimeNotifications;\n env: Readonly<Record<string, string | undefined>>;\n};\n\n/** Small subset of Zod-like validation Sidecar can consume without depending on Zod. */\nexport type ZodLikeSchema<T = unknown> = {\n safeParse(value: unknown): { success: true; data: T } | { success: false; error: unknown };\n};\n\n/** Infers a params type from a validator if one is supplied. */\nexport type InferParams<T> = T extends ZodLikeSchema<infer Output> ? Output : T;\n\n/** Function signature for tool execution. */\nexport type ToolExecute<Params, Output, Auth = unknown, Services = unknown, Tools = unknown> = (\n params: Params,\n ctx: ToolContext<Auth, Services, Tools>\n) => MaybePromise<ToolResult<Output>>;\n\n/** Tool execute function with a runtime params validator attached. */\nexport type ToolExecuteWithParams<\n Schema extends ZodLikeSchema,\n Output,\n Auth = unknown,\n Services = unknown,\n Tools = unknown,\n> = ToolExecute<InferParams<Schema>, Output, Auth, Services, Tools> & {\n readonly kind: \"sidecar.withParams\";\n readonly params: Schema;\n};\n\n/** Author-facing definition accepted by `tool()`. */\nexport type ToolDefinition<Params = unknown, Output = unknown, Auth = unknown, Services = unknown, Tools = unknown> = {\n /** Human-readable name shown to users and models. */\n name: string;\n /** Optional MCP machine id. If omitted in a reserved tool file, Sidecar uses the folder name. */\n id?: string;\n /** Model-facing description. This should be specific enough for reliable tool selection. */\n description: string;\n /** Optional runtime validation schema. Zod schemas are supported directly. */\n params?: ZodLikeSchema<Params>;\n /** Optional output schema escape hatch. The compiler normally derives this from `execute`. */\n output?: JsonSchema;\n /** MCP tool behavior hints. */\n annotations?: ToolAnnotations;\n /** Optional visibility policy for model, widget, and tool callers. */\n visibility?: ToolVisibility;\n /** Optional host-specific compatibility metadata. */\n hosts?: ToolHostExtensions;\n /** Low-level descriptor metadata escape hatch. Prefer typed fields when available. */\n meta?: Record<string, unknown>;\n /** Optional authorization policy. Tools are public unless this is declared. */\n auth?: ToolAuthPolicy<Auth>;\n /** Tool implementation. It may be synchronous or asynchronous. */\n execute: ToolExecute<Params, Output, Auth, Services, Tools>;\n};\n\n/** Branded Sidecar tool returned by `tool()`. */\nexport type SidecarTool<Params = unknown, Output = unknown, Auth = unknown> = ToolDefinition<Params, Output, Auth> & {\n readonly kind: \"sidecar.tool\";\n};\n\n/** MCP descriptor emitted for `tools/list`. */\nexport type McpToolDescriptor = {\n name: string;\n title?: string;\n description: string;\n inputSchema: JsonSchema;\n outputSchema?: JsonSchema;\n securitySchemes?: SecurityScheme[];\n annotations?: ToolAnnotations;\n _meta?: Record<string, unknown>;\n};\n\n/** Typed skill declaration used by plugin generation. */\nexport type SkillDefinition = {\n /** Stable skill folder/name. */\n name: string;\n /** Short routing description for the host/model. */\n description: string;\n /** Markdown body emitted to SKILL.md. */\n body: string;\n};\n\nconst toolBrand = Symbol.for(\"sidecar.tool\");\nconst toolExecuteParamsBrand = Symbol.for(\"sidecar.withParams\");\nconst toolResultBrand = Symbol.for(\"sidecar.toolResult\");\nconst resourceBrand = Symbol.for(\"sidecar.resource\");\nconst resourceResultBrand = Symbol.for(\"sidecar.resourceResult\");\nconst promptBrand = Symbol.for(\"sidecar.prompt\");\nconst skillBrand = Symbol.for(\"sidecar.skill\");\nconst remoteBrand = Symbol.for(\"sidecar.remote\");\n\n/**\n * Declares app identity in `sidecar.config.ts`.\n *\n * The compiler reads the object statically, while the helper gives authors\n * editor completions for every supported config field.\n */\nexport function defineConfig(config: SidecarConfig): SidecarConfig {\n if (!config.name.trim()) {\n throw new SidecarDefinitionError(\"Project name is required.\");\n }\n if (!config.version.trim()) {\n throw new SidecarDefinitionError(`Project \"${config.name}\" must include a version.`);\n }\n if (!config.description.trim()) {\n throw new SidecarDefinitionError(`Project \"${config.name}\" must include a description.`);\n }\n\n return Object.freeze({ ...config });\n}\n\n/** Gives TS users completion when authoring `build.widgets.configure` modules. */\nexport function defineWidgetBundler<Options = WidgetBundlerEsbuildOptions>(\n hook: WidgetBundlerHook<Options>,\n): WidgetBundlerHook<Options> {\n return hook;\n}\n\n/** Declares the project-owned remote code executor in reserved `remote.ts`. */\nexport function remote(definition: RemoteExecutionDefinition): RemoteExecutionDefinition {\n if (typeof definition.execute !== \"function\") {\n throw new SidecarDefinitionError(\"remote({ ... }) must include an execute function.\");\n }\n\n return Object.freeze({\n ...definition,\n [remoteBrand]: true,\n });\n}\n\n/** Returns true when a value was produced by `remote()`. */\nexport function isSidecarRemote(value: unknown): value is RemoteExecutionDefinition {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (value as Record<symbol, unknown>)[remoteBrand] === true,\n );\n}\n\n/**\n * Attaches a runtime params validator directly to a tool execute function.\n *\n * This is the preferred Zod authoring path: `withParams(schema, execute)` keeps\n * runtime validation, JSON Schema generation, and TypeScript inference tied to\n * one schema value.\n */\nexport function withParams<\n Schema extends ZodLikeSchema,\n Output,\n Auth = unknown,\n Services = unknown,\n Tools = unknown,\n>(\n params: Schema,\n execute: ToolExecute<InferParams<Schema>, Output, Auth, Services, Tools>,\n): ToolExecuteWithParams<Schema, Output, Auth, Services, Tools> {\n Object.defineProperties(execute, {\n kind: {\n value: \"sidecar.withParams\",\n enumerable: false,\n },\n params: {\n value: params,\n enumerable: false,\n },\n [toolExecuteParamsBrand]: {\n value: true,\n enumerable: false,\n },\n });\n\n return execute as ToolExecuteWithParams<Schema, Output, Auth, Services, Tools>;\n}\n\n/**\n * Declares a Sidecar MCP tool.\n *\n * The compiler reads this object statically, while the server executes the\n * returned branded value at runtime.\n */\nexport function tool<Params, Output, Auth = unknown>(\n definition: ToolDefinition<Params, Output, Auth>\n): SidecarTool<Params, Output, Auth> {\n if (!definition.name.trim()) {\n throw new SidecarDefinitionError(\"Tool name is required.\");\n }\n if (!definition.description.trim()) {\n throw new SidecarDefinitionError(`Tool \"${definition.name}\" must include a description.`);\n }\n\n const executeParams = readExecuteParams(definition.execute);\n if (definition.params && executeParams) {\n throw new SidecarDefinitionError(\n `Tool \"${definition.name}\" declares params twice. Use either params: schema or execute: withParams(schema, fn), not both.`,\n );\n }\n\n return Object.freeze({\n ...definition,\n params: definition.params ?? executeParams,\n kind: \"sidecar.tool\" as const,\n [toolBrand]: true\n }) as SidecarTool<Params, Output, Auth>;\n}\n\n/** Returns true when a value was produced by `tool()`. */\nexport function isSidecarTool(value: unknown): value is SidecarTool {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n ((value as Record<symbol, unknown>)[toolBrand] ||\n (value as { kind?: unknown }).kind === \"sidecar.tool\"),\n );\n}\n\n/** Reads the validator attached by `withParams()`, if present. */\nfunction readExecuteParams<Params, Output, Auth, Services, Tools>(\n execute: ToolExecute<Params, Output, Auth, Services, Tools>,\n): ZodLikeSchema<Params> | undefined {\n if (\n !execute ||\n typeof execute !== \"function\" ||\n !((execute as unknown as Record<symbol, unknown>)[toolExecuteParamsBrand])\n ) {\n return undefined;\n }\n\n return (execute as ToolExecuteWithParams<ZodLikeSchema<Params>, unknown>).params;\n}\n\n/**\n * Declares a Sidecar MCP resource.\n *\n * The compiler fills default URIs from the reserved folder name, while the\n * runtime executes the returned branded value for `resources/read`.\n */\nexport function resource<Auth = unknown, Services = unknown>(\n definition: ResourceDefinition<Auth, Services>\n): SidecarResource<Auth, Services> {\n if (!definition.name.trim()) {\n throw new SidecarDefinitionError(\"Resource name is required.\");\n }\n if (definition.uri) {\n validateResourceUri(definition.uri);\n }\n\n return Object.freeze({\n ...definition,\n kind: \"sidecar.resource\" as const,\n [resourceBrand]: true\n }) as SidecarResource<Auth, Services>;\n}\n\n/** Returns true when a value was produced by `resource()`. */\nexport function isSidecarResource(value: unknown): value is SidecarResource {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n ((value as Record<symbol, unknown>)[resourceBrand] ||\n (value as { kind?: unknown }).kind === \"sidecar.resource\"),\n );\n}\n\n/**\n * Declares a Sidecar MCP prompt.\n *\n * The compiler fills default machine names from the reserved folder name and\n * converts `args` into MCP prompt argument descriptors.\n */\nexport function prompt<Args extends Record<string, unknown> = Record<string, unknown>, Auth = unknown>(\n definition: PromptDefinition<Args, Auth>\n): SidecarPrompt<Args, Auth> {\n if (!definition.title.trim()) {\n throw new SidecarDefinitionError(\"Prompt title is required.\");\n }\n\n return Object.freeze({\n ...definition,\n kind: \"sidecar.prompt\" as const,\n [promptBrand]: true\n }) as SidecarPrompt<Args, Auth>;\n}\n\n/** Returns true when a value was produced by `prompt()`. */\nexport function isSidecarPrompt(value: unknown): value is SidecarPrompt {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n ((value as Record<symbol, unknown>)[promptBrand] ||\n (value as { kind?: unknown }).kind === \"sidecar.prompt\"),\n );\n}\n\n/** Declares a generated skill that can be emitted as `SKILL.md`. */\nexport function skill(definition: SkillDefinition): SkillDefinition {\n if (!definition.name.trim()) {\n throw new SidecarDefinitionError(\"Skill name is required.\");\n }\n if (!definition.description.trim()) {\n throw new SidecarDefinitionError(`Skill \"${definition.name}\" must include a description.`);\n }\n\n return Object.freeze({\n ...definition,\n [skillBrand]: true\n });\n}\n\n/** Factory for standardized tool results and common content blocks. */\nexport const toolResult = Object.assign(\n createToolResult,\n {\n text(text: string): McpContentBlock {\n return { type: \"text\", text };\n },\n error<\n Structured = undefined,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n >(\n message: string,\n options: Omit<ToolResultInput<Structured, Meta>, \"content\" | \"isError\"> = {} as Omit<\n ToolResultInput<Structured, Meta>,\n \"content\" | \"isError\"\n >,\n ): ToolResult<Structured, Meta> {\n return createToolResult({\n ...options,\n structuredContent: (options as { structuredContent?: Structured }).structuredContent,\n content: message,\n isError: true\n } as ToolResultInput<Structured, Meta>);\n }\n }\n) as ToolResultFactory;\n\n/** Factory for standardized resource results. */\nexport const resourceResult = Object.assign(\n createResourceResult,\n {\n many<Meta extends Record<string, unknown> = Record<string, unknown>>(\n input: readonly ResourceResultContentInput<Meta>[],\n ): ResourceResult<Meta> {\n return createResourceResult(input);\n },\n },\n) as ResourceResultFactory;\n\n/** Creates and brands one standardized Sidecar tool result. */\nfunction createToolResult<\n Structured,\n Meta extends Record<string, unknown> = Record<string, unknown>,\n>(input: ToolResultInput<Structured, Meta>): ToolResult<Structured, Meta> {\n const resultEnvelope = stripUndefined({\n structuredContent: stripJsonUndefined(input.structuredContent),\n content: normalizeRequiredContent(input.content),\n _meta: stripJsonUndefined(input.meta) as Meta | undefined,\n isError: input.isError\n }) as unknown as ToolResult<Structured, Meta>;\n\n Object.defineProperty(resultEnvelope, toolResultBrand, {\n enumerable: false,\n value: true\n });\n\n return resultEnvelope;\n}\n\n/** Creates and brands one standardized Sidecar resource result. */\nfunction createResourceResult<\n Meta extends Record<string, unknown> = Record<string, unknown>,\n>(input: ResourceResultInput<Meta>): ResourceResult<Meta> {\n const contents = Array.isArray(input) ? [...input] : [input];\n if (!contents.length) {\n throw new SidecarRuntimeError(\n \"resourceResult(...) must include at least one content item.\",\n \"invalid_resource_result\",\n );\n }\n\n const resultEnvelope = {\n contents,\n } as ResourceResult<Meta>;\n\n Object.defineProperty(resultEnvelope, resourceResultBrand, {\n enumerable: false,\n value: true,\n });\n\n return resultEnvelope;\n}\n\n/** Returns true when a value was produced by `toolResult()`. */\nexport function isToolResult(value: unknown): value is ToolResult {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (value as Record<symbol, unknown>)[toolResultBrand] === true\n );\n}\n\n/** Returns true when a value was produced by `resourceResult()`. */\nexport function isResourceResult(value: unknown): value is ResourceResult {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (value as Record<symbol, unknown>)[resourceResultBrand] === true\n );\n}\n\n/** Converts a branded Sidecar tool result into an MCP-compliant tool result. */\nexport function normalizeToolResult(value: unknown): McpToolResult {\n if (!isToolResult(value)) {\n throw new SidecarRuntimeError(\n \"Tool execute() must return toolResult({ structuredContent, content, meta }).\",\n \"invalid_tool_result\",\n );\n }\n\n return stripUndefined({\n structuredContent: stripJsonUndefined(value.structuredContent),\n content: value.content ?? [],\n _meta: stripJsonUndefined(value._meta) as Record<string, unknown> | undefined,\n isError: value.isError\n });\n}\n\n/** Converts a branded Sidecar resource result into an MCP-compliant read result. */\nexport function normalizeResourceResult(\n value: unknown,\n uri: string,\n defaultMimeType?: string,\n): McpResourceReadResult {\n if (!isResourceResult(value)) {\n throw new SidecarRuntimeError(\n \"Resource read() must return resourceResult(...).\",\n \"invalid_resource_result\",\n );\n }\n\n return {\n contents: value.contents.map((content) =>\n normalizeResourceContent(content, uri, defaultMimeType),\n ),\n };\n}\n\n/** Validates params, runs a tool, and normalizes its result for JSON-RPC. */\nexport async function executeTool<Params, Output>(\n sidecarTool: SidecarTool<Params, Output>,\n params: unknown,\n ctx: ToolContext\n): Promise<McpToolResult> {\n const parsedParams = validateParams(sidecarTool, params);\n const value = await sidecarTool.execute(parsedParams, ctx);\n return normalizeToolResult(value);\n}\n\n/** Reads a resource and normalizes its result for JSON-RPC. */\nexport async function executeResource(\n sidecarResource: SidecarResource,\n ctx: ResourceContext,\n options: { uri: string; mimeType?: string },\n): Promise<McpResourceReadResult> {\n const value = await sidecarResource.read(ctx);\n return normalizeResourceResult(value, options.uri, sidecarResource.mimeType ?? options.mimeType);\n}\n\n/** Runs a prompt and normalizes its messages for JSON-RPC. */\nexport async function executePrompt<Args extends Record<string, unknown>>(\n sidecarPrompt: SidecarPrompt<Args>,\n args: unknown,\n ctx: PromptContext,\n): Promise<McpPromptResult> {\n const parsedArgs = validatePromptArgs(sidecarPrompt, args);\n const value = await sidecarPrompt.run(parsedArgs, ctx);\n return normalizePromptResult(value, sidecarPrompt.description);\n}\n\n/** Builds an MCP descriptor from a Sidecar tool definition. */\nexport function createToolDescriptor(definition: {\n name: string;\n id?: string;\n description: string;\n target?: ToolDescriptorTarget;\n inputSchema?: JsonSchema;\n outputSchema?: JsonSchema;\n annotations?: ToolAnnotations;\n visibility?: ToolVisibility;\n hosts?: ToolHostExtensions;\n meta?: Record<string, unknown>;\n auth?: ToolAuthPolicy<unknown>;\n}): McpToolDescriptor {\n const machineName = definition.id ?? toMachineName(definition.name);\n\n validateToolId(machineName);\n const target = definition.target ?? \"mcp\";\n\n return stripUndefined({\n name: machineName,\n title: definition.name,\n description: definition.description,\n inputSchema: definition.inputSchema ?? emptyObjectSchema(),\n outputSchema: definition.outputSchema,\n securitySchemes: securitySchemes(definition.auth),\n annotations: withAnnotationDefaults(definition.annotations),\n _meta: mergeMeta(\n securitySchemesMeta(definition.auth),\n visibilityMeta(definition.visibility),\n target === \"chatgpt\" ? chatGptToolMeta(definition.hosts?.chatgpt) : undefined,\n definition.meta\n )\n });\n}\n\n/** Builds an MCP resource descriptor from a Sidecar resource definition. */\nexport function createResourceDescriptor(definition: {\n name: string;\n uri: string;\n title?: string;\n description?: string;\n mimeType?: string;\n size?: number;\n icons?: readonly McpIcon[];\n annotations?: ResourceAnnotations;\n meta?: Record<string, unknown>;\n}): McpResourceDescriptor {\n validateResourceUri(definition.uri);\n\n return stripUndefined({\n uri: definition.uri,\n name: definition.name,\n title: definition.title,\n description: definition.description,\n mimeType: definition.mimeType,\n size: definition.size,\n icons: definition.icons ? [...definition.icons] : undefined,\n annotations: normalizeAnnotations(definition.annotations),\n _meta: definition.meta,\n });\n}\n\n/** Builds an MCP prompt descriptor from a Sidecar prompt definition. */\nexport function createPromptDescriptor(definition: {\n name: string;\n title: string;\n description?: string;\n args?: PromptArgsDefinition;\n icons?: readonly McpIcon[];\n}): McpPromptDescriptor {\n validatePromptName(definition.name);\n\n return stripUndefined({\n name: definition.name,\n title: definition.title,\n description: definition.description,\n arguments: promptArguments(definition.args),\n icons: definition.icons ? [...definition.icons] : undefined,\n });\n}\n\n/** Converts a Sidecar auth policy into descriptor security schemes. */\nfunction securitySchemes(policy: ToolAuthPolicy<unknown> | undefined): SecurityScheme[] {\n if (!policy || policy.public === true) {\n return [{ type: \"noauth\" }];\n }\n\n if (\"scopes\" in policy && policy.scopes?.length) {\n return [{ type: \"oauth2\", scopes: policy.scopes.map((entry) => entry.id) }];\n }\n\n return [{ type: \"oauth2\", scopes: [] }];\n}\n\n/** Mirrors security schemes into `_meta` for older Apps clients. */\nfunction securitySchemesMeta(policy: ToolAuthPolicy<unknown> | undefined): Record<string, unknown> {\n return {\n securitySchemes: securitySchemes(policy),\n };\n}\n\n/** Returns scope ids required by a tool's auth policy. */\nexport function toolAuthScopes(toolDefinition: Pick<ToolDefinition, \"auth\">): string[] {\n const authPolicy = toolDefinition.auth;\n if (!authPolicy || authPolicy.public === true || !authPolicy.scopes) {\n return [];\n }\n\n return authPolicy.scopes.map((entry) => entry.id);\n}\n\n/** Converts visibility booleans into the standard MCP Apps `_meta.ui.visibility` list. */\nfunction visibilityMeta(visibility: ToolVisibility | undefined): Record<string, unknown> | undefined {\n if (!visibility) {\n return undefined;\n }\n\n const uiVisibility = [\n visibility.model !== false ? \"model\" : undefined,\n visibility.widgets !== false ? \"app\" : undefined\n ].filter(Boolean) as string[];\n\n return {\n ui: {\n visibility: uiVisibility\n }\n };\n}\n\n/** Converts typed ChatGPT options into optional OpenAI compatibility metadata. */\nfunction chatGptToolMeta(options: ChatGptToolOptions | undefined): Record<string, unknown> | undefined {\n if (!options) {\n return undefined;\n }\n\n return stripUndefined({\n \"openai/widgetAccessible\": options.widgetAccessible,\n \"openai/visibility\": options.visibility,\n \"openai/toolInvocation/invoking\": options.invoking,\n \"openai/toolInvocation/invoked\": options.invoked,\n \"openai/fileParams\": options.fileParams ? [...options.fileParams] : undefined\n });\n}\n\n/** Merges descriptor metadata while preserving nested standard `ui` metadata. */\nfunction mergeMeta(\n ...entries: Array<Record<string, unknown> | undefined>\n): Record<string, unknown> | undefined {\n const merged: Record<string, unknown> = {};\n\n for (const entry of entries) {\n if (!entry) {\n continue;\n }\n\n for (const [key, value] of Object.entries(entry)) {\n if (key === \"ui\" && isRecord(value) && isRecord(merged.ui)) {\n merged.ui = { ...merged.ui, ...value };\n } else {\n merged[key] = value;\n }\n }\n }\n\n return Object.keys(merged).length ? stripUndefined(merged) : undefined;\n}\n\n/** Returns true for plain metadata objects. */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\n/** JSON Schema for a tool with no input parameters. */\nexport function emptyObjectSchema(): JsonSchema {\n return {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: false\n };\n}\n\n/** Converts a human tool name into a stable MCP machine name. */\nexport function toMachineName(name: string): string {\n return name\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .replace(/[^A-Za-z0-9._-]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .replace(/_{2,}/g, \"_\")\n .toLowerCase();\n}\n\n/** Throws when a machine tool id is not MCP-safe. */\nexport function validateToolId(id: string): void {\n if (\n !/^[A-Za-z0-9._-]{1,128}$/.test(id) ||\n id === \".\" ||\n id === \"..\" ||\n id.includes(\"/..\") ||\n id.includes(\"../\")\n ) {\n throw new SidecarDefinitionError(\n `Invalid tool id \"${id}\". Tool ids must be 1-128 ASCII letters, digits, dots, hyphens, or underscores.`\n );\n }\n}\n\n/** Throws when a resource URI is not a valid absolute URI. */\nexport function validateResourceUri(uri: string): void {\n try {\n const parsed = new URL(uri);\n if (!parsed.protocol || parsed.hash) {\n throw new Error(\"invalid uri\");\n }\n } catch {\n throw new SidecarDefinitionError(\n `Invalid resource uri \"${uri}\". Resource URIs must be absolute and must not include fragments.`\n );\n }\n}\n\n/** Throws when a prompt machine name is not MCP-safe. */\nexport function validatePromptName(name: string): void {\n if (!/^[A-Za-z0-9._-]{1,128}$/.test(name) || name === \".\" || name === \"..\") {\n throw new SidecarDefinitionError(\n `Invalid prompt name \"${name}\". Prompt names must be 1-128 ASCII letters, digits, dots, hyphens, or underscores.`\n );\n }\n}\n\n/** Applies conservative annotation defaults when a tool omits them. */\nexport function withAnnotationDefaults(annotations: ToolAnnotations | undefined): ToolAnnotations {\n const readOnlyHint = annotations?.readOnlyHint ?? false;\n\n return {\n title: annotations?.title,\n readOnlyHint,\n destructiveHint: annotations?.destructiveHint ?? !readOnlyHint,\n idempotentHint: annotations?.idempotentHint ?? false,\n openWorldHint: annotations?.openWorldHint ?? true\n };\n}\n\n/** Error thrown for invalid Sidecar declarations. */\nexport class SidecarDefinitionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SidecarDefinitionError\";\n }\n}\n\n/** Error thrown while executing a tool. */\nexport class SidecarRuntimeError extends Error {\n constructor(message: string, readonly code: string) {\n super(message);\n this.name = \"SidecarRuntimeError\";\n }\n}\n\n/** Runs optional runtime schema validation before tool execution. */\nfunction validateParams<Params>(sidecarTool: SidecarTool<Params>, params: unknown): Params {\n if (!sidecarTool.params) {\n return (params ?? {}) as Params;\n }\n\n const parsed = sidecarTool.params.safeParse(params ?? {});\n if (parsed.success) {\n return parsed.data;\n }\n\n throw new SidecarRuntimeError(`Invalid parameters for tool \"${sidecarTool.name}\".`, \"invalid_tool_params\");\n}\n\n/** Normalizes required user-friendly result content into MCP content blocks. */\nfunction normalizeRequiredContent(content: ToolResultContent): McpContentBlock[] {\n if (typeof content === \"string\") {\n return [toolResult.text(content)];\n }\n const blocks = Array.isArray(content) ? content : [content];\n if (blocks.length > 0) {\n return blocks;\n }\n\n throw new SidecarRuntimeError(\n \"toolResult({ content }) must include at least one MCP content block.\",\n \"invalid_tool_result\",\n );\n}\n\n/** Converts one friendly resource content item to the MCP wire shape. */\nfunction normalizeResourceContent(\n content: ResourceResultContentInput,\n uri: string,\n defaultMimeType?: string,\n): McpResourceContent {\n const annotations = normalizeAnnotations(content.annotations);\n const meta = content.meta;\n if (isBinaryLike(content.content)) {\n return stripUndefined({\n uri,\n mimeType: content.mimeType ?? defaultMimeType ?? \"application/octet-stream\",\n blob: bytesToBase64(content.content),\n annotations,\n _meta: meta,\n });\n }\n\n if (typeof content.content === \"string\") {\n return stripUndefined({\n uri,\n mimeType: content.mimeType ?? defaultMimeType ?? \"text/plain\",\n text: content.content,\n annotations,\n _meta: meta,\n });\n }\n\n return stripUndefined({\n uri,\n mimeType: content.mimeType ?? defaultMimeType ?? \"application/json\",\n text: JSON.stringify(content.content),\n annotations,\n _meta: meta,\n });\n}\n\n/** Returns true for byte containers that MCP resources must expose as base64 blobs. */\nfunction isBinaryLike(value: unknown): value is Uint8Array | ArrayBuffer {\n return value instanceof ArrayBuffer || value instanceof Uint8Array;\n}\n\n/** Encodes bytes as base64 in Node and browser-compatible runtimes. */\nfunction bytesToBase64(value: Uint8Array | ArrayBuffer): string {\n const bytes = value instanceof ArrayBuffer ? new Uint8Array(value) : value;\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(bytes).toString(\"base64\");\n }\n\n let binary = \"\";\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary);\n}\n\n/** Encodes an offset as an opaque base64url cursor. */\nfunction encodeOffsetCursor(offset: number): string {\n return base64UrlEncode(JSON.stringify({ offset }));\n}\n\n/** Decodes an opaque offset cursor produced by `offsetPagination()`. */\nfunction decodeOffsetCursor(cursor: string): number {\n try {\n const decoded = JSON.parse(base64UrlDecode(cursor)) as { offset?: unknown };\n if (typeof decoded.offset !== \"number\" || !Number.isInteger(decoded.offset) || decoded.offset < 0) {\n throw new Error(\"invalid offset\");\n }\n return decoded.offset;\n } catch {\n throw new SidecarRuntimeError(\"Invalid pagination cursor.\", \"invalid_pagination_cursor\");\n }\n}\n\n/** Base64url-encodes UTF-8 text in Node and browser-compatible runtimes. */\nfunction base64UrlEncode(value: string): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value, \"utf8\").toString(\"base64url\");\n }\n return btoa(value)\n .replaceAll(\"+\", \"-\")\n .replaceAll(\"/\", \"_\")\n .replace(/=+$/g, \"\");\n}\n\n/** Base64url-decodes UTF-8 text in Node and browser-compatible runtimes. */\nfunction base64UrlDecode(value: string): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value, \"base64url\").toString(\"utf8\");\n }\n const padded = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\")\n .padEnd(Math.ceil(value.length / 4) * 4, \"=\");\n return atob(padded);\n}\n\n/** Converts Date annotations to the protocol's ISO timestamp string. */\nfunction normalizeAnnotations(\n annotations: ResourceAnnotations | undefined,\n): ResourceAnnotations | undefined {\n if (!annotations) {\n return undefined;\n }\n\n return stripUndefined({\n audience: annotations.audience ? [...annotations.audience] : undefined,\n priority: annotations.priority,\n lastModified: annotations.lastModified instanceof Date\n ? annotations.lastModified.toISOString()\n : annotations.lastModified,\n });\n}\n\n/** Converts friendly prompt argument declarations to MCP descriptors. */\nfunction promptArguments(args: PromptArgsDefinition | undefined): McpPromptArgument[] | undefined {\n if (!args) {\n return undefined;\n }\n\n const entries = Object.entries(args).map(([name, value]) => {\n if (typeof value === \"string\") {\n return { name, description: value, required: true };\n }\n if (isReadonlyArray(value)) {\n return {\n name,\n description: value.length\n ? `One of: ${value.map(String).join(\", \")}.`\n : undefined,\n required: true,\n };\n }\n return {\n name,\n description: value.description,\n required: value.required ?? true,\n };\n });\n\n return entries.length ? entries : undefined;\n}\n\n/** Narrows readonly argument enum arrays. */\nfunction isReadonlyArray(value: PromptArgInput): value is readonly JsonPrimitive[] {\n return Array.isArray(value);\n}\n\n/** Validates required prompt arguments before running a prompt. */\nfunction validatePromptArgs<Args extends Record<string, unknown>>(\n promptDefinition: SidecarPrompt<Args>,\n args: unknown,\n): Args {\n const input = args && typeof args === \"object\" && !Array.isArray(args)\n ? args as Record<string, unknown>\n : {};\n for (const argument of promptArguments(promptDefinition.args) ?? []) {\n if (argument.required !== false && !(argument.name in input)) {\n throw new SidecarRuntimeError(\n `Prompt \"${promptDefinition.name ?? promptDefinition.title}\" is missing required argument \"${argument.name}\".`,\n \"invalid_prompt_args\",\n );\n }\n }\n return input as Args;\n}\n\n/** Converts a prompt's friendly return value into MCP messages. */\nfunction normalizePromptResult(value: PromptResultInput, defaultDescription?: string): McpPromptResult {\n if (typeof value === \"string\") {\n return {\n description: defaultDescription,\n messages: [{\n role: \"user\",\n content: toolResult.text(value),\n }],\n };\n }\n\n if (Array.isArray(value)) {\n return {\n description: defaultDescription,\n messages: value,\n };\n }\n\n if (\"messages\" in value) {\n return {\n description: value.description ?? defaultDescription,\n messages: value.messages,\n };\n }\n\n return {\n description: defaultDescription,\n messages: [value],\n };\n}\n\n/** Removes `undefined` keys so JSON serialization matches MCP expectations. */\nfunction stripUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined)) as T;\n}\n\n/** Recursively removes undefined values from JSON-like result channels. */\nfunction stripJsonUndefined(value: unknown): unknown {\n if (value === undefined) {\n return undefined;\n }\n\n if (Array.isArray(value)) {\n return value\n .map((entry) => stripJsonUndefined(entry))\n .filter((entry) => entry !== undefined);\n }\n\n if (!value || typeof value !== \"object\") {\n return value;\n }\n\n return Object.fromEntries(\n Object.entries(value)\n .map(([key, entry]) => [key, stripJsonUndefined(entry)] as const)\n .filter(([, entry]) => entry !== undefined),\n );\n}\n","/** Static analysis for reserved server tool files. */\nimport {\n createToolDescriptor,\n toMachineName,\n type ChatGptToolOptions,\n type ToolHostExtensions,\n type ToolAnnotations,\n type ToolAuthPolicy,\n type ToolVisibility,\n type JsonSchema,\n} from \"@sidecar-ai/core\";\nimport { readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n Node,\n type Project,\n SyntaxKind,\n type ArrowFunction,\n type CallExpression,\n type FunctionExpression,\n type MethodDeclaration,\n type ObjectLiteralExpression,\n type SourceFile,\n} from \"ts-morph\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"./ast.js\";\nimport { CompilerError } from \"./errors.js\";\nimport { createProject } from \"./project.js\";\nimport { getOutputSchema, getParamsSchema } from \"./schema.js\";\nimport { readRuntimeToolInputSchema } from \"./runtime-schema.js\";\nimport type { SidecarToolManifestEntry } from \"./types.js\";\nimport { existsSyncSafe } from \"./utils.js\";\nimport { findWidget, mergeWidgetMeta, readWidgetOptions, widgetMeta, widgetResourceMeta } from \"./widgets.js\";\nimport type { SidecarSourceVariant, SidecarTarget } from \"./types.js\";\n\ntype AuthScopeCatalog = Record<string, { id: string; description: string }>;\n\n/** Finds all Sidecar tool files under `server/` and returns manifest entries. */\nexport async function analyzeProjectTools(\n rootDir: string,\n options: { target?: SidecarTarget } = {},\n): Promise<SidecarToolManifestEntry[]> {\n const target = options.target ?? \"mcp\";\n const toolFiles = await findToolFiles(path.join(rootDir, \"server\"), target);\n if (toolFiles.length === 0) {\n return [];\n }\n\n const project = createProject(rootDir);\n const authScopes = readAuthScopeCatalog(project, rootDir);\n const sources = toolFiles.map((candidate) => ({\n candidate,\n sourceFile: project.addSourceFileAtPath(candidate.filePath),\n }));\n const runtimeInputSchemas = await readRuntimeInputSchemas(rootDir, sources);\n\n return sources.map(({ candidate, sourceFile }) =>\n analyzeToolFile(sourceFile, rootDir, {\n target,\n variant: candidate.variant,\n authScopes,\n inputSchema: runtimeInputSchemas.get(candidate.filePath),\n }),\n );\n}\n\n/** Analyzes one `tool.ts` source file into a compiler manifest entry. */\nexport function analyzeToolFile(\n sourceFile: SourceFile,\n rootDir: string,\n options: {\n target?: SidecarTarget;\n variant?: SidecarSourceVariant;\n authScopes?: AuthScopeCatalog;\n inputSchema?: JsonSchema;\n } = {},\n): SidecarToolManifestEntry {\n const target = options.target ?? \"mcp\";\n const variant = options.variant ?? \"shared\";\n const definition = findToolDefinition(sourceFile);\n const absoluteFile = sourceFile.getFilePath();\n const directory = path.basename(path.dirname(absoluteFile));\n const name = getRequiredStringProperty(definition, \"name\", sourceFile);\n const id = getOptionalStringProperty(definition, \"id\") ?? toMachineName(directory);\n const description = getRequiredStringProperty(\n definition,\n \"description\",\n sourceFile,\n );\n const annotations = readAnnotations(definition);\n const visibility = readVisibility(definition);\n const hosts = readHosts(definition);\n const auth = readAuthPolicy(definition, options.authScopes ?? {});\n const execute = getExecuteFunction(definition, sourceFile);\n\n const inputSchema = options.inputSchema ?? getParamsSchema(definition, execute);\n const outputSchema = getOutputSchema(definition, execute);\n const descriptor = createToolDescriptor({\n name,\n id,\n description,\n target,\n inputSchema,\n outputSchema,\n annotations,\n visibility,\n hosts,\n auth,\n meta: undefined,\n });\n\n validateWidgetHierarchy(sourceFile, absoluteFile, target, variant);\n\n const widget = findWidget(rootDir, absoluteFile, id, target, variant);\n if (widget) {\n const widgetFile = path.join(rootDir, widget.sourceFile);\n const project = sourceFile.getProject();\n const widgetSourceFile =\n project.getSourceFile(widgetFile) ?? project.addSourceFileAtPath(widgetFile);\n widget.options = {\n description,\n ...readWidgetOptions(widgetSourceFile),\n };\n widget.resourceMeta = widgetResourceMeta(widget.options, target);\n descriptor._meta = mergeWidgetMeta(descriptor._meta, widgetMeta(widget.resourceUri, widget.options, target));\n }\n\n return {\n sourceFile: path.relative(rootDir, absoluteFile),\n variant,\n target,\n directory,\n id,\n name,\n description,\n inputSchema,\n outputSchema,\n annotations,\n visibility,\n widget,\n descriptor,\n };\n}\n\n/** Reads runtime param schemas only for tools that declare a validator. */\nasync function readRuntimeInputSchemas(\n rootDir: string,\n sources: Array<{ candidate: ToolFileCandidate; sourceFile: SourceFile }>,\n): Promise<Map<string, JsonSchema>> {\n const schemas = new Map<string, JsonSchema>();\n await Promise.all(sources.map(async ({ candidate, sourceFile }) => {\n const definition = findToolDefinition(sourceFile);\n if (!definitionHasRuntimeParams(definition)) {\n return;\n }\n\n const schema = await readRuntimeToolInputSchema(rootDir, candidate.filePath);\n if (schema) {\n schemas.set(candidate.filePath, schema);\n }\n }));\n return schemas;\n}\n\n/** Returns true when a tool declares runtime params directly or through `withParams()`. */\nfunction definitionHasRuntimeParams(definition: ObjectLiteralExpression): boolean {\n if (definition.getProperty(\"params\")) {\n return true;\n }\n\n return Boolean(getWithParamsCall(definition));\n}\n\n/** Extracts static auth shape for descriptor security-scheme generation. */\nfunction readAuthPolicy(\n definition: ObjectLiteralExpression,\n authScopes: AuthScopeCatalog,\n): ToolAuthPolicy | undefined {\n const initializer = readObjectProperty(definition, \"auth\");\n if (!initializer) {\n return undefined;\n }\n\n const publicValue = readBooleanProperty(initializer, \"public\");\n if (publicValue === true) {\n return { public: true };\n }\n\n const scopesProperty = initializer.getProperty(\"scopes\");\n if (scopesProperty && Node.isPropertyAssignment(scopesProperty)) {\n return { scopes: readScopeReferences(scopesProperty.getInitializer(), authScopes) };\n }\n\n return { authenticated: true };\n}\n\n/** Extracts auth.ts scope declarations so generated descriptors can name required scopes. */\nfunction readAuthScopeCatalog(project: Project, rootDir: string): AuthScopeCatalog {\n const authPath = path.join(rootDir, \"auth.ts\");\n if (!existsSyncSafe(authPath)) {\n return {};\n }\n\n const sourceFile = project.addSourceFileAtPath(authPath);\n const catalog: AuthScopeCatalog = {};\n for (const call of sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {\n if (!isNamedCall(call, \"auth\")) {\n continue;\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n continue;\n }\n\n const scopes = readObjectProperty(definition, \"scopes\");\n if (!scopes) {\n continue;\n }\n\n for (const property of scopes.getProperties()) {\n if (!Node.isPropertyAssignment(property)) {\n continue;\n }\n\n const scope = readScopeCall(property.getInitializer());\n if (scope) {\n catalog[property.getName().replace(/^[\"']|[\"']$/g, \"\")] = scope;\n }\n }\n }\n\n return catalog;\n}\n\n/** Reads a tool auth `scopes: [...]` initializer into Sidecar scope placeholders. */\nfunction readScopeReferences(\n initializer: Node | undefined,\n authScopes: AuthScopeCatalog,\n): NonNullable<Extract<ToolAuthPolicy, { scopes: unknown }>[\"scopes\"]> {\n const expression = unwrapExpression(initializer);\n if (!expression || !Node.isArrayLiteralExpression(expression)) {\n return [];\n }\n\n return expression.getElements().flatMap((element) => {\n const direct = readScopeCall(element);\n if (direct) {\n return [{ kind: \"sidecar.scope\" as const, ...direct }];\n }\n\n const name = scopeReferenceName(element);\n const declared = name ? authScopes[name] : undefined;\n if (declared) {\n return [{ kind: \"sidecar.scope\" as const, ...declared }];\n }\n\n const literal = unwrapExpression(element);\n if (literal && Node.isStringLiteral(literal)) {\n return [{\n kind: \"sidecar.scope\" as const,\n id: literal.getLiteralText(),\n description: \"\",\n }];\n }\n\n return [];\n });\n}\n\n/** Reads `scope(\"id\", \"description\")` helper calls without executing auth.ts. */\nfunction readScopeCall(node: Node | undefined): { id: string; description: string } | undefined {\n const expression = unwrapExpression(node);\n if (!expression || !Node.isCallExpression(expression) || !isNamedCall(expression, \"scope\")) {\n return undefined;\n }\n\n const [idArg, descriptionArg] = expression.getArguments();\n if (!idArg || !Node.isStringLiteral(idArg)) {\n return undefined;\n }\n\n return {\n id: idArg.getLiteralText(),\n description: Node.isStringLiteral(descriptionArg) ? descriptionArg.getLiteralText() : \"\",\n };\n}\n\n/** Returns the final property name from references like `scopes.expensesRead`. */\nfunction scopeReferenceName(node: Node): string | undefined {\n const expression = unwrapExpression(node);\n if (!expression || !Node.isPropertyAccessExpression(expression)) {\n return undefined;\n }\n\n return expression.getName();\n}\n\n/** Returns true for direct or namespace-qualified helper calls. */\nfunction isNamedCall(call: CallExpression, name: string): boolean {\n const callee = call.getExpression().getText();\n return callee === name || callee.endsWith(`.${name}`);\n}\n\n/** Enforces Sidecar's hierarchical reserved-file platform rule. */\nfunction validateWidgetHierarchy(\n sourceFile: SourceFile,\n toolFile: string,\n target: SidecarTarget,\n variant: SidecarSourceVariant,\n): void {\n const directory = path.dirname(toolFile);\n const platformWidget =\n target === \"chatgpt\"\n ? \"widget.openai.tsx\"\n : target === \"claude\"\n ? \"widget.anthropic.tsx\"\n : undefined;\n\n if (!platformWidget || variant !== \"shared\") {\n return;\n }\n\n if (existsSyncSafe(path.join(directory, platformWidget))) {\n const expectedTool =\n target === \"chatgpt\" ? \"tool.openai.ts\" : \"tool.anthropic.ts\";\n throw new CompilerError(\n sourceFile,\n `${platformWidget} requires a sibling ${expectedTool}; platform-specific widgets cannot attach to a shared tool.ts.`,\n );\n }\n}\n\n/** Finds immediate server child tool files in deterministic order. */\ntype ToolFileCandidate = {\n filePath: string;\n variant: SidecarSourceVariant;\n};\n\nasync function findToolFiles(serverDir: string, target: SidecarTarget): Promise<ToolFileCandidate[]> {\n if (!existsSyncSafe(serverDir)) {\n return [];\n }\n\n const entries = await readdir(serverDir, { withFileTypes: true });\n const files: ToolFileCandidate[] = [];\n\n for (const entry of entries) {\n const entryPath = path.join(serverDir, entry.name);\n if (entry.isDirectory()) {\n const candidate = selectToolFile(entryPath, target);\n if (candidate) {\n files.push(candidate);\n }\n }\n }\n\n return files.sort((left, right) => left.filePath.localeCompare(right.filePath));\n}\n\n/** Picks the platform-specific tool file for a target, falling back to shared code. */\nfunction selectToolFile(directory: string, target: SidecarTarget): ToolFileCandidate | undefined {\n const candidates =\n target === \"chatgpt\"\n ? [\n { name: \"tool.openai.ts\", variant: \"openai\" as const },\n { name: \"tool.ts\", variant: \"shared\" as const },\n ]\n : target === \"claude\"\n ? [\n { name: \"tool.anthropic.ts\", variant: \"anthropic\" as const },\n { name: \"tool.ts\", variant: \"shared\" as const },\n ]\n : [{ name: \"tool.ts\", variant: \"shared\" as const }];\n\n for (const candidate of candidates) {\n const filePath = path.join(directory, candidate.name);\n if (existsSyncSafe(filePath)) {\n return { filePath, variant: candidate.variant };\n }\n }\n\n return undefined;\n}\n\n/** Locates the default-exported `tool({ ... })` object literal. */\nfunction findToolDefinition(sourceFile: SourceFile): ObjectLiteralExpression {\n const call = resolveDefaultExportCall(sourceFile, \"tool\");\n if (!call) {\n throw new CompilerError(\n sourceFile,\n \"tool.ts must default-export tool({ ... }) or an identifier initialized with tool({ ... }).\",\n );\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n throw new CompilerError(\n sourceFile,\n \"tool(...) must receive one object literal.\",\n );\n }\n\n return definition;\n}\n\n/** Reads the supported `execute` declaration shapes from a tool definition. */\nfunction getExecuteFunction(\n definition: ObjectLiteralExpression,\n sourceFile: SourceFile,\n): MethodDeclaration | ArrowFunction | FunctionExpression {\n const property = definition.getProperty(\"execute\");\n if (!property) {\n throw new CompilerError(\n sourceFile,\n \"tool({ ... }) must include an execute method.\",\n );\n }\n\n if (Node.isMethodDeclaration(property)) {\n return property;\n }\n\n if (Node.isPropertyAssignment(property)) {\n const initializer = unwrapExpression(property.getInitializer());\n if (\n initializer &&\n (Node.isArrowFunction(initializer) ||\n Node.isFunctionExpression(initializer))\n ) {\n return initializer;\n }\n\n const withParamsCall = getWithParamsCall(definition);\n const wrappedExecute = unwrapExpression(withParamsCall?.getArguments()[1]);\n if (\n wrappedExecute &&\n (Node.isArrowFunction(wrappedExecute) ||\n Node.isFunctionExpression(wrappedExecute))\n ) {\n return wrappedExecute;\n }\n }\n\n throw new CompilerError(\n sourceFile,\n \"execute must be a method, function expression, or arrow function.\",\n );\n}\n\n/** Returns the `withParams(schema, execute)` call used as `execute`, if present. */\nfunction getWithParamsCall(definition: ObjectLiteralExpression): CallExpression | undefined {\n const property = definition.getProperty(\"execute\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isCallExpression(initializer)) {\n return undefined;\n }\n\n return isNamedCall(initializer, \"withParams\") ? initializer : undefined;\n}\n\n/** Reads a required string property from the tool object. */\nfunction getRequiredStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n sourceFile: SourceFile,\n): string {\n const value = getOptionalStringProperty(definition, propertyName);\n if (value === undefined || !value.trim()) {\n throw new CompilerError(\n sourceFile,\n `tool({ ... }) must include a non-empty ${propertyName} string.`,\n );\n }\n return value;\n}\n\n/** Reads an optional string literal property from the tool object. */\nfunction getOptionalStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = property.getInitializer();\n if (!initializer || !Node.isStringLiteral(initializer)) {\n return undefined;\n }\n\n return initializer.getLiteralText();\n}\n\n/** Extracts static MCP annotation hints from the tool object. */\nfunction readAnnotations(\n definition: ObjectLiteralExpression,\n): ToolAnnotations | undefined {\n const property = definition.getProperty(\"annotations\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = property.getInitializer();\n if (!initializer || !Node.isObjectLiteralExpression(initializer)) {\n return undefined;\n }\n\n const annotations: ToolAnnotations = {};\n for (const key of [\n \"title\",\n \"readOnlyHint\",\n \"destructiveHint\",\n \"idempotentHint\",\n \"openWorldHint\",\n ] as const) {\n const value = initializer.getProperty(key);\n if (!value || !Node.isPropertyAssignment(value)) {\n continue;\n }\n\n const expression = value.getInitializer();\n if (!expression) {\n continue;\n }\n\n if (key === \"title\" && Node.isStringLiteral(expression)) {\n annotations.title = expression.getLiteralText();\n } else if (\n key !== \"title\" &&\n (expression.getKind() === SyntaxKind.TrueKeyword ||\n expression.getKind() === SyntaxKind.FalseKeyword)\n ) {\n annotations[key] = expression.getKind() === SyntaxKind.TrueKeyword;\n }\n }\n\n return Object.keys(annotations).length ? annotations : undefined;\n}\n\n/** Extracts static Sidecar visibility policy from the tool object. */\nfunction readVisibility(\n definition: ObjectLiteralExpression,\n): ToolVisibility | undefined {\n const initializer = readObjectProperty(definition, \"visibility\");\n if (!initializer) {\n return undefined;\n }\n\n const visibility: ToolVisibility = {};\n for (const key of [\"model\", \"widgets\", \"tools\"] as const) {\n const property = initializer.getProperty(key);\n if (!property || !Node.isPropertyAssignment(property)) {\n continue;\n }\n\n const value = property.getInitializer();\n if (!value) {\n continue;\n }\n\n if (\n value.getKind() === SyntaxKind.TrueKeyword ||\n value.getKind() === SyntaxKind.FalseKeyword\n ) {\n assignVisibility(visibility, key, value.getKind() === SyntaxKind.TrueKeyword);\n } else if (Node.isArrayLiteralExpression(value)) {\n assignVisibility(visibility, key, value\n .getElements()\n .filter(Node.isStringLiteral)\n .map((element) => element.getLiteralText()));\n }\n }\n\n return Object.keys(visibility).length ? visibility : undefined;\n}\n\n/** Assigns a visibility property without losing the precise key type. */\nfunction assignVisibility<Key extends keyof ToolVisibility>(\n visibility: ToolVisibility,\n key: Key,\n value: ToolVisibility[Key],\n): void {\n visibility[key] = value;\n}\n\n/** Extracts supported host-specific extension metadata from the tool object. */\nfunction readHosts(\n definition: ObjectLiteralExpression,\n): ToolHostExtensions | undefined {\n const initializer = readObjectProperty(definition, \"hosts\");\n if (!initializer) {\n return undefined;\n }\n\n const chatgpt = readObjectProperty(initializer, \"chatgpt\");\n if (!chatgpt) {\n return undefined;\n }\n\n const options: ChatGptToolOptions = {};\n const invoking = readStringProperty(chatgpt, \"invoking\");\n const invoked = readStringProperty(chatgpt, \"invoked\");\n const visibility = readStringProperty(chatgpt, \"visibility\");\n const widgetAccessible = readBooleanProperty(chatgpt, \"widgetAccessible\");\n const fileParams = readStringArrayProperty(chatgpt, \"fileParams\");\n\n if (invoking) options.invoking = invoking;\n if (invoked) options.invoked = invoked;\n if (visibility === \"public\" || visibility === \"private\") {\n options.visibility = visibility;\n }\n if (widgetAccessible !== undefined) {\n options.widgetAccessible = widgetAccessible;\n }\n if (fileParams) {\n options.fileParams = fileParams;\n }\n\n return Object.keys(options).length ? { chatgpt: options } : undefined;\n}\n\n/** Reads a nested object literal property, unwrapping `satisfies` expressions. */\nfunction readObjectProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): ObjectLiteralExpression | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** Reads a string literal property from an object literal. */\nfunction readStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isStringLiteral(initializer)\n ? initializer.getLiteralText()\n : undefined;\n}\n\n/** Reads a boolean literal property from an object literal. */\nfunction readBooleanProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): boolean | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n\n if (initializer.getKind() === SyntaxKind.TrueKeyword) {\n return true;\n }\n if (initializer.getKind() === SyntaxKind.FalseKeyword) {\n return false;\n }\n return undefined;\n}\n\n/** Reads a string literal array property from an object literal. */\nfunction readStringArrayProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string[] | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n\n return initializer\n .getElements()\n .filter(Node.isStringLiteral)\n .map((element) => element.getLiteralText());\n}\n","/** Shared ts-morph helpers for reserved Sidecar files. */\nimport {\n Node,\n type CallExpression,\n type SourceFile,\n type VariableDeclaration,\n} from \"ts-morph\";\n\n/**\n * Resolves a default export into a call to the requested authoring helper.\n *\n * This supports both idiomatic shapes:\n *\n * - `export default tool({ ... })`\n * - `const review = tool({ ... }); export default review`\n */\nexport function resolveDefaultExportCall(\n sourceFile: SourceFile,\n helperName: string,\n): CallExpression | undefined {\n const exportAssignment = sourceFile.getExportAssignment(\n (assignment) => !assignment.isExportEquals(),\n );\n const expression = unwrapExpression(exportAssignment?.getExpression());\n const direct = asHelperCall(expression, helperName);\n if (direct) {\n return direct;\n }\n\n if (!expression || !Node.isIdentifier(expression)) {\n return undefined;\n }\n\n const declaration = findVariableDeclaration(sourceFile, expression.getText());\n const initializer = unwrapExpression(declaration?.getInitializer());\n return asHelperCall(initializer, helperName);\n}\n\n/** Removes TypeScript-only wrappers such as `satisfies` from expressions. */\nexport function unwrapExpression(expression: Node | undefined): Node | undefined {\n if (!expression) {\n return undefined;\n }\n\n if (Node.isSatisfiesExpression(expression) || Node.isAsExpression(expression)) {\n return expression.getExpression();\n }\n\n return expression;\n}\n\n/** Returns a helper call when the expression calls exactly that helper. */\nfunction asHelperCall(\n expression: Node | undefined,\n helperName: string,\n): CallExpression | undefined {\n if (!expression || !Node.isCallExpression(expression)) {\n return undefined;\n }\n\n const callee = expression.getExpression().getText();\n return matchesHelperName(callee, helperName) ? expression : undefined;\n}\n\n/** Finds a top-level variable declaration by identifier name. */\nfunction findVariableDeclaration(\n sourceFile: SourceFile,\n name: string,\n): VariableDeclaration | undefined {\n return sourceFile\n .getVariableDeclarations()\n .find((declaration) => declaration.getName() === name);\n}\n\n/** Checks imported, namespaced, and locally scoped helper call names. */\nfunction matchesHelperName(callee: string, helperName: string): boolean {\n return callee === helperName || callee.endsWith(`.${helperName}`);\n}\n","/** Compiler-specific errors include the source file path in their message. */\nimport type { SourceFile } from \"ts-morph\";\n\n/** Error thrown when a reserved file violates Sidecar's authoring contract. */\nexport class CompilerError extends Error {\n constructor(sourceFile: SourceFile, message: string) {\n super(`${sourceFile.getFilePath()}: ${message}`);\n this.name = \"CompilerError\";\n }\n}\n","/** Shared ts-morph project setup for Sidecar reserved-file analyzers. */\nimport path from \"node:path\";\nimport {\n ModuleKind,\n ModuleResolutionKind,\n Project,\n ScriptTarget,\n} from \"ts-morph\";\nimport { existsSyncSafe } from \"./utils.js\";\n\n/** Creates a ts-morph project using the app tsconfig when available. */\nexport function createProject(rootDir: string): Project {\n const tsconfig = path.join(rootDir, \"tsconfig.json\");\n\n return new Project({\n tsConfigFilePath: existsSyncSafe(tsconfig) ? tsconfig : undefined,\n compilerOptions: existsSyncSafe(tsconfig)\n ? undefined\n : {\n allowJs: false,\n baseUrl: process.cwd(),\n esModuleInterop: true,\n module: ModuleKind.NodeNext,\n moduleResolution: ModuleResolutionKind.NodeNext,\n paths: devSidecarTypePaths(),\n strict: true,\n target: ScriptTarget.ES2022,\n },\n skipAddingFilesFromTsConfig: true,\n });\n}\n\n/** Provides source aliases for repo-local examples before package dist exists. */\nfunction devSidecarTypePaths(): Record<string, string[]> | undefined {\n const repoRoot = process.cwd();\n const corePath = path.join(repoRoot, \"packages\", \"core\", \"src\", \"index.ts\");\n if (!existsSyncSafe(corePath)) {\n return undefined;\n }\n\n return {\n \"sidecar-ai\": [\"packages/sidecar-ai/src/index.ts\"],\n \"@sidecar-ai/core\": [\"packages/core/src/index.ts\"],\n \"@sidecar-ai/client\": [\"packages/client/src/index.ts\"],\n \"@sidecar-ai/react\": [\"packages/react/src/index.ts\"],\n \"@sidecar-ai/native\": [\"packages/native/src/index.ts\"],\n \"@sidecar-ai/native/components\": [\"packages/native/src/components/index.tsx\"],\n \"@sidecar-ai/openai\": [\"packages/openai/src/index.ts\"],\n \"@sidecar-ai/openai/components\": [\"packages/openai/src/components.tsx\"],\n \"@sidecar-ai/anthropic\": [\"packages/anthropic/src/index.ts\"],\n \"@sidecar-ai/anthropic/components\": [\"packages/anthropic/src/components.tsx\"],\n \"@sidecar-ai/anthropic/plugin\": [\"packages/anthropic/src/plugin.ts\"],\n \"@sidecar-ai/anthropic/hooks\": [\"packages/anthropic/src/hooks.ts\"],\n };\n}\n","/** Shared compiler utility helpers. */\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\n/** Safe filesystem existence check wrapped for testability and consistency. */\nexport function existsSyncSafe(filePath: string): boolean {\n return existsSync(filePath);\n}\n\n/** Creates an ESM import specifier from one file location to another. */\nexport function toImportSpecifier(\n fromDir: string,\n toFile: string,\n options: { extension?: \"none\" | \"js\" | \"preserve\" } = {},\n): string {\n const relative = path.relative(fromDir, toFile).replaceAll(path.sep, \"/\");\n const normalized = relative.startsWith(\".\") ? relative : `./${relative}`;\n\n switch (options.extension ?? \"none\") {\n case \"js\":\n return normalized.replace(/\\.(tsx|ts)$/, \".js\");\n case \"preserve\":\n return normalized;\n case \"none\":\n return normalized.replace(/\\.(tsx|ts)$/, \"\");\n }\n}\n\n/** Converts a tool id into a valid JavaScript property identifier. */\nexport function toIdentifier(value: string): string {\n const identifier = value\n .replace(/[^A-Za-z0-9]+(.)/g, (_match, char: string) => char.toUpperCase())\n .replace(/^[^A-Za-z_$]+/, \"\")\n .replace(/[^A-Za-z0-9_$]/g, \"\");\n\n return identifier || \"tool\";\n}\n\n/** Sanitizes a value for use as a path segment. */\nexport function safePathSegment(value: string): string {\n const segment = value.replace(/[^A-Za-z0-9._-]+/g, \"_\");\n if (!segment || segment === \".\" || segment === \"..\") {\n return \"_\";\n }\n return segment;\n}\n\n/** Sanitizes a metadata-provided file stem for generated plugin files. */\nexport function safeFileStem(value: string): string {\n return safePathSegment(value).replace(/^\\.+/, \"_\").replace(/^_+/, \"_\");\n}\n\n/** Escapes a scalar value for simple YAML/frontmatter generation. */\nexport function yamlScalar(value: unknown): string {\n return JSON.stringify(String(value ?? \"\"));\n}\n\n/** Escapes text that will be embedded into HTML. */\nexport function escapeHtml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\");\n}\n\n/** Drops undefined values from JSON-like objects before writing files. */\nexport function stripUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n\n/** Reads a simple string property from a TypeScript object literal string. */\nexport function readObjectString(source: string, key: string): string | undefined {\n const match = source.match(\n new RegExp(`${key}\\\\s*:\\\\s*([\"'\\`])([\\\\s\\\\S]*?)\\\\1`),\n );\n return match?.[2]?.trim();\n}\n\n/** Reads a simple string array property from a TypeScript object literal string. */\nexport function readObjectStringArray(\n source: string,\n key: string,\n): string[] | undefined {\n const match = source.match(new RegExp(`${key}\\\\s*:\\\\s*\\\\[([\\\\s\\\\S]*?)\\\\]`));\n if (!match?.[1]) {\n return undefined;\n }\n\n return [...match[1].matchAll(/[\"']([^\"']+)[\"']/g)]\n .map((item) => item[1]!)\n .filter(Boolean);\n}\n","/** TypeScript-to-JSON-Schema extraction for reserved Sidecar tool files. */\nimport { emptyObjectSchema, type JsonSchema } from \"@sidecar-ai/core\";\nimport {\n Node,\n type ArrowFunction,\n type FunctionExpression,\n type MethodDeclaration,\n type ObjectLiteralExpression,\n type Symbol as MorphSymbol,\n type Type,\n} from \"ts-morph\";\n\n/** Supported AST nodes that can execute a Sidecar tool. */\nexport type ExecutableNode = MethodDeclaration | ArrowFunction | FunctionExpression;\n\n/** Builds the input schema from explicit params or the execute param type. */\nexport function getParamsSchema(\n _definition: ObjectLiteralExpression,\n execute: ExecutableNode,\n): JsonSchema {\n const [params] = execute.getParameters();\n if (!params) {\n return emptyObjectSchema();\n }\n\n return typeToJsonSchema(\n params.getType(),\n schemaDescription(params.getSymbol()),\n );\n}\n\n/** Builds the output schema from explicit output or the execute return type. */\nexport function getOutputSchema(\n definition: ObjectLiteralExpression,\n execute: ExecutableNode,\n): JsonSchema | undefined {\n const explicitOutput = definition.getProperty(\"output\");\n if (explicitOutput && Node.isPropertyAssignment(explicitOutput)) {\n return undefined;\n }\n\n const returnType = unwrapToolResultType(unwrapPromiseType(execute.getReturnType()));\n if (returnType.isVoid() || returnType.isUndefined()) {\n return undefined;\n }\n\n return typeToJsonSchema(returnType);\n}\n\n/** Converts a TypeScript type into a JSON Schema object. */\nfunction typeToJsonSchema(type: Type, description?: string): JsonSchema {\n const withoutUndefined = removeUndefined(type);\n const schema = typeToJsonSchemaInner(withoutUndefined);\n if (description) {\n schema.description = description;\n }\n return schema;\n}\n\n/** Recursively maps TypeScript primitives, unions, arrays, tuples, and objects. */\nfunction typeToJsonSchemaInner(type: Type): JsonSchema {\n if (type.isString() || type.isStringLiteral()) {\n return literalOrPrimitive(type, \"string\");\n }\n if (type.isNumber() || type.isNumberLiteral()) {\n return literalOrPrimitive(type, \"number\");\n }\n if (type.isBoolean() || type.isBooleanLiteral()) {\n return literalOrPrimitive(type, \"boolean\");\n }\n if (type.isNull()) {\n return { type: \"null\" };\n }\n if (type.isArray()) {\n return {\n type: \"array\",\n items: typeToJsonSchema(type.getArrayElementTypeOrThrow()),\n };\n }\n if (type.isTuple()) {\n const elements = type.getTupleElements();\n return {\n type: \"array\",\n items:\n elements.length === 1\n ? typeToJsonSchema(elements[0]!)\n : { anyOf: elements.map((item) => typeToJsonSchema(item)) },\n };\n }\n if (type.isUnion()) {\n const parts = type.getUnionTypes().filter((part) => !part.isUndefined());\n if (parts.every(isLiteralType)) {\n return { enum: parts.map((part) => literalValue(part)) };\n }\n return { anyOf: parts.map((part) => typeToJsonSchema(part)) };\n }\n\n const properties = type.getProperties();\n const indexType = type.getStringIndexType() ?? type.getNumberIndexType();\n if (properties.length > 0) {\n return objectTypeToSchema(properties, indexType);\n }\n\n if (indexType) {\n return {\n type: \"object\",\n additionalProperties: indexTypeToAdditionalProperties(indexType),\n };\n }\n\n return {};\n}\n\n/** Converts object properties into JSON Schema properties and required lists. */\nfunction objectTypeToSchema(\n properties: MorphSymbol[],\n indexType: Type | undefined,\n): JsonSchema {\n const schemaProperties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const property of properties) {\n const declaration =\n property.getValueDeclaration() ?? property.getDeclarations()[0];\n if (!declaration) {\n continue;\n }\n\n const name = property.getName();\n const rawType = property.getTypeAtLocation(declaration);\n const propertyType = removeUndefined(rawType);\n const propertySchema = typeToJsonSchema(\n propertyType,\n schemaDescription(property),\n );\n schemaProperties[name] = propertySchema;\n\n if (!property.isOptional() && !containsUndefined(rawType)) {\n required.push(name);\n }\n }\n\n return {\n type: \"object\",\n properties: schemaProperties,\n required,\n additionalProperties: indexType\n ? indexTypeToAdditionalProperties(indexType)\n : false,\n };\n}\n\n/** Converts a TypeScript index signature into JSON Schema additionalProperties. */\nfunction indexTypeToAdditionalProperties(type: Type): boolean | JsonSchema {\n if (type.isAny() || type.isUnknown()) {\n return true;\n }\n\n const schema = typeToJsonSchema(type);\n return Object.keys(schema).length ? schema : true;\n}\n\n/** Returns a literal const schema when possible, otherwise a primitive schema. */\nfunction literalOrPrimitive(\n type: Type,\n primitive: \"string\" | \"number\" | \"boolean\",\n): JsonSchema {\n if (isLiteralType(type)) {\n return { const: literalValue(type) };\n }\n return { type: primitive };\n}\n\n/** Returns true for literal string, number, and boolean types. */\nfunction isLiteralType(type: Type): boolean {\n return (\n type.isStringLiteral() || type.isNumberLiteral() || type.isBooleanLiteral()\n );\n}\n\n/** Reads a JavaScript literal value from a TypeScript literal type. */\nfunction literalValue(type: Type): string | number | boolean {\n if (type.isStringLiteral()) return String(type.getLiteralValue());\n if (type.isNumberLiteral()) return Number(type.getLiteralValue());\n const text = type.getText();\n return text === \"true\";\n}\n\n/** Unwraps `Promise<T>` return types for output schema inference. */\nfunction unwrapPromiseType(type: Type): Type {\n if (!type.getText().startsWith(\"Promise<\")) {\n return type;\n }\n const args = type.getTypeArguments();\n return args[0] ?? type;\n}\n\n/** Extracts the structured content type from Sidecar's required `ToolResult<T>`. */\nfunction unwrapToolResultType(type: Type): Type {\n const aliasName = type.getAliasSymbol()?.getName();\n if (aliasName === \"ToolResult\") {\n const [structured] = type.getAliasTypeArguments();\n return structured ?? type;\n }\n\n const structured = type.getProperty(\"structuredContent\");\n const declaration = structured?.getValueDeclaration() ?? structured?.getDeclarations()[0];\n if (!structured || !declaration) {\n return type;\n }\n\n return removeUndefined(structured.getTypeAtLocation(declaration));\n}\n\n/** Removes `undefined` from simple union types. */\nfunction removeUndefined(type: Type): Type {\n if (!type.isUnion()) {\n return type;\n }\n\n const nonUndefined = type\n .getUnionTypes()\n .filter((part) => !part.isUndefined());\n return nonUndefined.length === 1 ? nonUndefined[0]! : type;\n}\n\n/** Returns true when a union includes `undefined`. */\nfunction containsUndefined(type: Type): boolean {\n return (\n type.isUnion() && type.getUnionTypes().some((part) => part.isUndefined())\n );\n}\n\n/** Reads the first JSDoc description attached to a symbol. */\nfunction schemaDescription(\n symbol: MorphSymbol | undefined,\n): string | undefined {\n if (!symbol) {\n return undefined;\n }\n\n return symbol\n .getDeclarations()\n .flatMap((declaration) => {\n if (Node.isJSDocable(declaration)) {\n return declaration.getJsDocs().map((doc) => doc.getCommentText() ?? \"\");\n }\n return [];\n })\n .find((comment) => comment.trim().length > 0);\n}\n","/** Runtime schema extraction for validators that can describe themselves. */\nimport { isSidecarTool, type JsonSchema, type SidecarTool } from \"@sidecar-ai/core\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { tsImport } from \"tsx/esm/api\";\nimport { existsSyncSafe } from \"./utils.js\";\n\ntype RuntimeModule = {\n default?: unknown;\n};\n\ntype JsonSchemaConverter = (\n options?: { io?: \"input\" | \"output\" },\n) => unknown;\n\ntype ZodTopLevelModule = {\n toJSONSchema?: (schema: unknown, options?: { io?: \"input\" | \"output\" }) => unknown;\n};\n\n/** Imports a Sidecar tool and converts its runtime params validator into JSON Schema when possible. */\nexport async function readRuntimeToolInputSchema(\n rootDir: string,\n sourcePath: string,\n): Promise<JsonSchema | undefined> {\n let sidecarTool: SidecarTool | undefined;\n try {\n sidecarTool = await importRuntimeTool(rootDir, sourcePath);\n } catch (error) {\n warnRuntimeSchemaFallback(sourcePath, error);\n return undefined;\n }\n\n if (!sidecarTool.params) {\n return undefined;\n }\n\n try {\n return await paramsToJsonSchema(sidecarTool.params);\n } catch (error) {\n warnRuntimeSchemaFallback(sourcePath, error);\n return undefined;\n }\n}\n\n/** Loads one authored `tool.ts` through tsx so runtime schemas can be inspected. */\nasync function importRuntimeTool(\n rootDir: string,\n sourcePath: string,\n): Promise<SidecarTool> {\n const module = (await tsImport(pathToFileURL(sourcePath).href, {\n parentURL: runtimeParentUrl(rootDir),\n tsconfig: runtimeTsconfig(rootDir),\n })) as RuntimeModule;\n\n const defaultExport = unwrapRuntimeDefault(module.default);\n if (!isSidecarTool(defaultExport)) {\n throw new Error(`${path.relative(rootDir, sourcePath)} must default-export tool({ ... }).`);\n }\n\n return defaultExport;\n}\n\n/** Converts Zod v4 classic/mini schemas without Sidecar parsing Zod source code. */\nasync function paramsToJsonSchema(params: unknown): Promise<JsonSchema | undefined> {\n const instanceConverter = readInstanceConverter(params);\n if (instanceConverter) {\n return ensureJsonSchema(instanceConverter({ io: \"input\" }));\n }\n\n if (isZodMiniSchema(params)) {\n const zod = (await import(\"zod/v4-mini\")) as ZodTopLevelModule;\n if (typeof zod.toJSONSchema === \"function\") {\n return ensureJsonSchema(zod.toJSONSchema(params, { io: \"input\" }));\n }\n }\n\n return undefined;\n}\n\n/** Reads the v4 classic instance method. The lowercase variant is accepted defensively. */\nfunction readInstanceConverter(params: unknown): JsonSchemaConverter | undefined {\n if (!params || typeof params !== \"object\") {\n return undefined;\n }\n\n const record = params as Record<string, unknown>;\n const converter = record.toJSONSchema ?? record.toJsonSchema;\n return typeof converter === \"function\"\n ? converter.bind(params) as JsonSchemaConverter\n : undefined;\n}\n\n/** Returns true for Zod Mini schemas, which rely on top-level conversion helpers. */\nfunction isZodMiniSchema(params: unknown): boolean {\n return Boolean(params && typeof params === \"object\" && \"_zod\" in params);\n}\n\n/** Narrows Zod's unknown converter output to the object shape MCP descriptors require. */\nfunction ensureJsonSchema(value: unknown): JsonSchema | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n return value as JsonSchema;\n}\n\n/** Builds a stable parent URL for tsx module resolution. */\nfunction runtimeParentUrl(rootDir: string): string {\n const configPath = path.join(rootDir, \"sidecar.config.ts\");\n return pathToFileURL(existsSync(configPath) ? configPath : rootDir).href;\n}\n\n/** Uses the app tsconfig, with a repo-local fallback for compiler tests and examples. */\nfunction runtimeTsconfig(rootDir: string): string | false {\n const projectTsconfig = path.join(rootDir, \"tsconfig.json\");\n if (existsSync(projectTsconfig)) {\n return projectTsconfig;\n }\n\n const repoTsconfig = path.join(process.cwd(), \"tsconfig.json\");\n const repoCore = path.join(process.cwd(), \"packages\", \"core\", \"src\", \"index.ts\");\n return existsSyncSafe(repoTsconfig) && existsSyncSafe(repoCore) ? repoTsconfig : false;\n}\n\n/** Normalizes default-export interop shapes produced by source TypeScript loaders. */\nfunction unwrapRuntimeDefault(value: unknown): unknown {\n if (\n value &&\n typeof value === \"object\" &&\n \"default\" in value &&\n Object.keys(value).every((key) => key === \"default\" || key === \"__esModule\")\n ) {\n return unwrapRuntimeDefault((value as { default: unknown }).default);\n }\n return value;\n}\n\n/** Keeps runtime schema import problems visible without breaking TS fallback analysis. */\nfunction warnRuntimeSchemaFallback(sourcePath: string, error: unknown): void {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(\n `[sidecar] Could not convert runtime params schema for ${sourcePath}; falling back to TypeScript parameter inference. ${message}`,\n );\n}\n","/** Widget discovery and HTML bundling. */\nimport { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { build as esbuild, type BuildOptions, type Loader, type Plugin } from \"esbuild\";\nimport postcss from \"postcss\";\nimport {\n Node,\n SyntaxKind,\n type ObjectLiteralExpression,\n type SourceFile,\n} from \"ts-morph\";\nimport type { ChatGptWidgetOptions, ToolWidgetOptions, WidgetBuildConfig, WidgetBundlerHook } from \"@sidecar-ai/core\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"./ast.js\";\nimport { CompilerError } from \"./errors.js\";\nimport type { SidecarSourceVariant, SidecarTarget, SidecarToolManifestEntry, SidecarWidgetManifestEntry } from \"./types.js\";\nimport { escapeHtml, safePathSegment, toImportSpecifier } from \"./utils.js\";\n\nconst CLAUDE_FONT_RESOURCE_DOMAIN = \"https://assets.claude.ai\";\nconst requireFromCompiler = createRequire(import.meta.url);\n\n/** Bundles every discovered `widget.tsx` into a content-hashed HTML resource. */\nexport async function buildWidgets(\n rootDir: string,\n outDir: string,\n tools: SidecarToolManifestEntry[],\n config: WidgetBuildConfig | undefined = undefined,\n): Promise<void> {\n const widgets = tools.filter(\n (\n entry,\n ): entry is SidecarToolManifestEntry & {\n widget: SidecarWidgetManifestEntry;\n } => Boolean(entry.widget),\n );\n if (!widgets.length) {\n return;\n }\n\n const cacheDir = path.join(rootDir, \".sidecar\", \"cache\", \"widgets\");\n await mkdir(cacheDir, { recursive: true });\n const appStyle = await prepareAppStyle(rootDir, cacheDir);\n const configure = await loadWidgetBundlerHook(rootDir, cacheDir, config?.configure);\n\n for (const entry of widgets) {\n const sourceFile = path.join(rootDir, entry.widget.sourceFile);\n const safeId = safePathSegment(entry.id);\n const entryFile = path.join(cacheDir, `${safeId}.entry.tsx`);\n const importPath = toImportSpecifier(path.dirname(entryFile), sourceFile);\n\n await writeFile(\n entryFile,\n `import React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { SidecarWidgetRoot } from \"@sidecar-ai/react\";\nimport \"@sidecar-ai/native/styles.css\";\n${appStyle ? `import ${JSON.stringify(toImportSpecifier(path.dirname(entryFile), appStyle))};` : \"\"}\nimport Component from ${JSON.stringify(importPath)};\n\ncreateRoot(document.getElementById(\"root\")!).render(\n React.createElement(SidecarWidgetRoot, null, React.createElement(Component))\n);\n`,\n );\n\n const baseOptions = enforceWidgetBuildInvariants({\n absWorkingDir: rootDir,\n alias: sidecarWidgetAliases(rootDir),\n bundle: true,\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(\"production\"),\n },\n entryPoints: [entryFile],\n format: \"iife\",\n jsx: \"automatic\",\n minify: true,\n nodePaths: [\n path.join(rootDir, \"node_modules\"),\n path.join(process.cwd(), \"node_modules\"),\n ],\n outfile: \"widget.js\",\n platform: \"browser\",\n sourcemap: false,\n write: false,\n });\n const staticOptions = widgetBuildOptionsFromConfig(rootDir, config);\n const configuredOptions = configure\n ? await configureWidgetBuild(configure, {\n rootDir,\n outDir,\n entryFile,\n widget: {\n toolId: entry.id,\n toolName: entry.name,\n target: entry.target,\n sourceFile: entry.widget.sourceFile,\n },\n esbuildOptions: mergeWidgetBuildOptions(baseOptions, staticOptions),\n })\n : undefined;\n const bundled = await esbuild(enforceWidgetBuildInvariants(\n mergeWidgetBuildOptions(baseOptions, staticOptions, configuredOptions),\n { rootDir, entryFile },\n ));\n\n const outputFiles = bundled.outputFiles ?? [];\n const javascript = outputFiles.find((file) => file.path.endsWith(\".js\"))?.text ?? \"\";\n const css = outputFiles\n .filter((file) => file.path.endsWith(\".css\"))\n .map((file) => file.text)\n .join(\"\\n\");\n const html = renderWidgetHtml(entry.name, javascript, css);\n const hash = createHash(\"sha256\").update(html).digest(\"hex\").slice(0, 12);\n const outputDir = path.join(outDir, \"public\", \"widgets\", safeId);\n const outputFile = path.join(outputDir, `widget.${hash}.html`);\n const resourceUri = `ui://${safeId}/widget.${hash}.html`;\n\n await mkdir(outputDir, { recursive: true });\n await writeFile(outputFile, html);\n\n entry.widget.resourceUri = resourceUri;\n entry.widget.resourceMeta = widgetResourceMeta(entry.widget.options, entry.target);\n entry.widget.outputFile = path.relative(outDir, outputFile);\n entry.descriptor._meta = mergeWidgetMeta(entry.descriptor._meta, widgetMeta(resourceUri, entry.widget.options, entry.target));\n }\n}\n\n/** Bundles the single dynamic widget attached to the public code-mode execute tool. */\nexport async function buildCodeModeWidget(\n rootDir: string,\n outDir: string,\n tools: SidecarToolManifestEntry[],\n target: SidecarTarget,\n config: WidgetBuildConfig | undefined = undefined,\n): Promise<SidecarWidgetManifestEntry | undefined> {\n const renderable = tools.filter(\n (\n entry,\n ): entry is SidecarToolManifestEntry & {\n widget: SidecarWidgetManifestEntry;\n } => Boolean(entry.widget),\n );\n if (!renderable.length) {\n return undefined;\n }\n\n const cacheDir = path.join(rootDir, \".sidecar\", \"cache\", \"widgets\");\n await mkdir(cacheDir, { recursive: true });\n const appStyle = await prepareAppStyle(rootDir, cacheDir);\n const configure = await loadWidgetBundlerHook(rootDir, cacheDir, config?.configure);\n const safeId = \"code-mode\";\n const entryFile = path.join(cacheDir, `${safeId}.entry.tsx`);\n await writeFile(entryFile, renderCodeModeWidgetEntry(rootDir, entryFile, renderable, appStyle));\n\n const baseOptions = enforceWidgetBuildInvariants({\n absWorkingDir: rootDir,\n alias: sidecarWidgetAliases(rootDir),\n bundle: true,\n define: {\n \"process.env.NODE_ENV\": JSON.stringify(\"production\"),\n },\n entryPoints: [entryFile],\n format: \"iife\",\n jsx: \"automatic\",\n minify: true,\n nodePaths: [\n path.join(rootDir, \"node_modules\"),\n path.join(process.cwd(), \"node_modules\"),\n ],\n outfile: \"widget.js\",\n platform: \"browser\",\n sourcemap: false,\n write: false,\n });\n const staticOptions = widgetBuildOptionsFromConfig(rootDir, config);\n const configuredOptions = configure\n ? await configureWidgetBuild(configure, {\n rootDir,\n outDir,\n entryFile,\n widget: {\n toolId: \"execute_code\",\n toolName: \"Execute Code\",\n target,\n sourceFile: path.relative(rootDir, entryFile),\n },\n esbuildOptions: mergeWidgetBuildOptions(baseOptions, staticOptions),\n })\n : undefined;\n const bundled = await esbuild(enforceWidgetBuildInvariants(\n mergeWidgetBuildOptions(baseOptions, staticOptions, configuredOptions),\n { rootDir, entryFile },\n ));\n\n const outputFiles = bundled.outputFiles ?? [];\n const javascript = outputFiles.find((file) => file.path.endsWith(\".js\"))?.text ?? \"\";\n const css = outputFiles\n .filter((file) => file.path.endsWith(\".css\"))\n .map((file) => file.text)\n .join(\"\\n\");\n const html = renderWidgetHtml(\"Execute Code\", javascript, css);\n const hash = createHash(\"sha256\").update(html).digest(\"hex\").slice(0, 12);\n const outputDir = path.join(outDir, \"public\", \"widgets\", safeId);\n const outputFile = path.join(outputDir, `widget.${hash}.html`);\n const resourceUri = `ui://${safeId}/widget.${hash}.html`;\n const options: ToolWidgetOptions = {\n description: \"Renders the selected result from a Sidecar code-mode execution.\",\n csp: {\n connectDomains: [],\n resourceDomains: [],\n },\n };\n\n await mkdir(outputDir, { recursive: true });\n await writeFile(outputFile, html);\n\n return {\n sourceFile: path.relative(rootDir, entryFile),\n variant: \"shared\",\n resourceUri,\n resourceMeta: widgetResourceMeta(options, target),\n outputFile: path.relative(outDir, outputFile),\n options,\n };\n}\n\n/** Converts static config into esbuild option extensions. */\nfunction widgetBuildOptionsFromConfig(\n rootDir: string,\n config: WidgetBuildConfig | undefined,\n): BuildOptions | undefined {\n const esbuildConfig = config?.esbuild;\n if (!esbuildConfig) {\n return undefined;\n }\n\n return {\n alias: normalizeAliases(rootDir, esbuildConfig.alias),\n conditions: esbuildConfig.conditions,\n define: esbuildConfig.define,\n external: esbuildConfig.external,\n jsx: esbuildConfig.jsx,\n jsxImportSource: esbuildConfig.jsxImportSource,\n loader: esbuildConfig.loader as Record<string, Loader> | undefined,\n mainFields: esbuildConfig.mainFields,\n };\n}\n\n/** Loads a project-level widget bundler hook from TS or JS. */\nasync function loadWidgetBundlerHook(\n rootDir: string,\n cacheDir: string,\n hookPath: string | undefined,\n): Promise<WidgetBundlerHook<BuildOptions> | undefined> {\n if (!hookPath) {\n return undefined;\n }\n\n const sourcePath = path.resolve(rootDir, hookPath);\n const relative = path.relative(rootDir, sourcePath);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(`Widget bundler hook must stay inside the project root: ${hookPath}`);\n }\n if (!existsSync(sourcePath)) {\n throw new Error(`Widget bundler hook not found: ${hookPath}`);\n }\n\n const outputFile = path.join(cacheDir, `widget-bundler.${contentHash(hookPath)}.mjs`);\n await esbuild({\n absWorkingDir: rootDir,\n alias: devSidecarBundleAliases(rootDir),\n bundle: true,\n entryPoints: [sourcePath],\n format: \"esm\",\n nodePaths: [\n path.join(rootDir, \"node_modules\"),\n path.join(process.cwd(), \"node_modules\"),\n ],\n outfile: outputFile,\n packages: \"external\",\n platform: \"node\",\n target: \"node20\",\n });\n\n const module = (await import(`${pathToFileURL(outputFile).href}?t=${Date.now()}`)) as {\n default?: unknown;\n };\n if (typeof module.default !== \"function\") {\n throw new Error(`Widget bundler hook must default-export a function: ${hookPath}`);\n }\n\n return module.default as WidgetBundlerHook<BuildOptions>;\n}\n\n/** Runs the project hook and normalizes its supported return shapes. */\nasync function configureWidgetBuild(\n hook: WidgetBundlerHook<BuildOptions>,\n input: Parameters<WidgetBundlerHook<BuildOptions>>[0],\n): Promise<BuildOptions | undefined> {\n const result = await hook(input);\n if (!result) {\n return undefined;\n }\n if (typeof result === \"object\" && \"esbuildOptions\" in result) {\n return result.esbuildOptions;\n }\n return result as BuildOptions;\n}\n\n/** Merges esbuild options while preserving additive fields. */\nfunction mergeWidgetBuildOptions(\n ...options: Array<BuildOptions | undefined>\n): BuildOptions {\n const merged: BuildOptions = {};\n for (const option of options) {\n if (!option) {\n continue;\n }\n\n const previousAlias = merged.alias;\n const previousDefine = merged.define;\n const previousLoader = merged.loader;\n const previousExternal = merged.external;\n const previousNodePaths = merged.nodePaths;\n const previousPlugins = merged.plugins;\n Object.assign(merged, option);\n merged.alias = { ...(previousAlias ?? {}), ...(option.alias ?? {}) };\n merged.define = { ...(previousDefine ?? {}), ...(option.define ?? {}) };\n merged.loader = { ...(previousLoader ?? {}), ...(option.loader ?? {}) };\n merged.external = uniqueStrings([...(previousExternal ?? []), ...(option.external ?? [])]);\n merged.nodePaths = uniqueStrings([...(previousNodePaths ?? []), ...(option.nodePaths ?? [])]);\n merged.plugins = [...(previousPlugins ?? []), ...(option.plugins ?? [])] as Plugin[];\n }\n return merged;\n}\n\n/** Re-applies Sidecar-owned esbuild invariants after project extensions. */\nfunction enforceWidgetBuildInvariants(\n options: BuildOptions,\n required?: { rootDir: string; entryFile: string },\n): BuildOptions {\n const aliases = required\n ? { ...(options.alias ?? {}), ...reactSingletonAliases(required.rootDir) }\n : options.alias;\n\n return {\n ...options,\n absWorkingDir: required?.rootDir ?? options.absWorkingDir,\n alias: aliases,\n bundle: true,\n entryPoints: required ? [required.entryFile] : options.entryPoints,\n format: \"iife\",\n outfile: \"widget.js\",\n platform: \"browser\",\n write: false,\n };\n}\n\n/** Renders the generated React entrypoint for the dynamic code-mode widget. */\nfunction renderCodeModeWidgetEntry(\n rootDir: string,\n entryFile: string,\n entries: Array<SidecarToolManifestEntry & { widget: SidecarWidgetManifestEntry }>,\n appStyle: string | undefined,\n): string {\n const entryDir = path.dirname(entryFile);\n const imports = entries.map((entry, index) => {\n const sourceFile = path.join(rootDir, entry.widget.sourceFile);\n return `import Widget${index} from ${JSON.stringify(toImportSpecifier(entryDir, sourceFile))};`;\n }).join(\"\\n\");\n const registry = entries\n .map((entry, index) => `${JSON.stringify(entry.id)}: Widget${index}`)\n .join(\",\\n \");\n\n return `import React, { useMemo } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport {\n SidecarWidgetProvider,\n SidecarWidgetRoot,\n browserBridge,\n useToolResult\n} from \"@sidecar-ai/react\";\nimport { Heading, Stack, Surface, Text } from \"@sidecar-ai/native/components\";\nimport \"@sidecar-ai/native/styles.css\";\n${appStyle ? `import ${JSON.stringify(toImportSpecifier(entryDir, appStyle))};` : \"\"}\n${imports}\n\nconst registry = {\n ${registry}\n};\n\nfunction nestedResult(result, payload) {\n return {\n ...result,\n structuredContent: payload?.result ?? payload?.value,\n structured: payload?.result ?? payload?.value,\n content: payload?.content ?? result.content ?? [],\n meta: payload?.meta ?? result.meta ?? {},\n _meta: payload?.meta ?? result._meta ?? {},\n };\n}\n\nfunction createNestedBridge(result, payload) {\n return {\n ...browserBridge,\n getToolResult() {\n return nestedResult(result, payload);\n },\n subscribeToolResult(listener) {\n return browserBridge.subscribeToolResult((next) => {\n const nextPayload = next?.structuredContent?.codeMode;\n listener(nestedResult(next, nextPayload));\n });\n },\n };\n}\n\nfunction GenericCodeModeResult({ payload }) {\n return React.createElement(\"main\", { className: \"sidecar-code-mode\" },\n React.createElement(Stack, { gap: \"md\" },\n React.createElement(Heading, { level: 1 }, \"Code result\"),\n React.createElement(Surface, { variant: \"card\" },\n React.createElement(\"pre\", {\n style: {\n margin: 0,\n overflowWrap: \"anywhere\",\n whiteSpace: \"pre-wrap\"\n }\n }, JSON.stringify(payload?.value ?? payload ?? {}, null, 2))\n )\n )\n );\n}\n\nfunction CodeModeWidget() {\n const result = useToolResult();\n const payload = result.structuredContent?.codeMode;\n const renderer = payload?.renderer;\n const Component = renderer ? registry[renderer] : undefined;\n const bridge = useMemo(() => createNestedBridge(result, payload), [result, payload]);\n\n if (Component) {\n return React.createElement(\n SidecarWidgetProvider,\n { bridge },\n React.createElement(Component)\n );\n }\n\n if (payload?.ok === false) {\n return React.createElement(\"main\", { className: \"sidecar-code-mode\" },\n React.createElement(Stack, { gap: \"sm\" },\n React.createElement(Heading, { level: 1 }, \"Code failed\"),\n React.createElement(Text, { tone: \"muted\" }, \"The generated code did not complete successfully.\")\n )\n );\n }\n\n return React.createElement(GenericCodeModeResult, { payload });\n}\n\ncreateRoot(document.getElementById(\"root\")).render(\n React.createElement(SidecarWidgetRoot, null, React.createElement(CodeModeWidget))\n);\n`;\n}\n\n/** Builds all Sidecar-owned widget aliases, including React singleton aliases. */\nfunction sidecarWidgetAliases(rootDir: string): Record<string, string> | undefined {\n return {\n ...(devSidecarBundleAliases(rootDir) ?? {}),\n ...reactSingletonAliases(rootDir),\n };\n}\n\n/** Forces React and React DOM to resolve from one project-local copy. */\nfunction reactSingletonAliases(rootDir: string): Record<string, string> {\n return {\n react: resolveProjectModule(rootDir, \"react\"),\n \"react/jsx-runtime\": resolveProjectModule(rootDir, \"react/jsx-runtime\"),\n \"react/jsx-dev-runtime\": resolveProjectModule(rootDir, \"react/jsx-dev-runtime\"),\n \"react-dom\": resolveProjectModule(rootDir, \"react-dom\"),\n \"react-dom/client\": resolveProjectModule(rootDir, \"react-dom/client\"),\n \"react-dom/server\": resolveProjectModule(rootDir, \"react-dom/server\"),\n };\n}\n\n/** Resolves a package entry as the app would, falling back to the compiler workspace. */\nfunction resolveProjectModule(rootDir: string, specifier: string): string {\n return requireFromCompiler.resolve(specifier, {\n paths: [rootDir, process.cwd()],\n });\n}\n\n/** Resolves relative alias replacements from the app root for predictable builds. */\nfunction normalizeAliases(\n rootDir: string,\n aliases: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!aliases) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(aliases).map(([key, value]) => [\n key,\n value.startsWith(\".\") ? path.resolve(rootDir, value) : value,\n ]),\n );\n}\n\n/** Deduplicates esbuild string-array options. */\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values)];\n}\n\n/** Creates a short stable hash for cache file names. */\nfunction contentHash(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 12);\n}\n\n/** Provides source aliases when bundling repo-local examples before dist exists. */\nfunction devSidecarBundleAliases(rootDir: string): Record<string, string> | undefined {\n const repoRoot = findSidecarRepoRoot(rootDir) ?? findSidecarRepoRoot(process.cwd());\n if (!repoRoot) {\n return undefined;\n }\n const reactEntry = path.join(repoRoot, \"packages\", \"react\", \"src\", \"index.ts\");\n if (!existsSync(reactEntry)) {\n return undefined;\n }\n\n return {\n \"sidecar-ai/remote\": path.join(repoRoot, \"packages\", \"sidecar-ai\", \"src\", \"remote.ts\"),\n \"sidecar-ai\": path.join(repoRoot, \"packages\", \"sidecar-ai\", \"src\", \"index.ts\"),\n \"@sidecar-ai/client\": path.join(repoRoot, \"packages\", \"client\", \"src\", \"index.ts\"),\n \"@sidecar-ai/core\": path.join(repoRoot, \"packages\", \"core\", \"src\", \"index.ts\"),\n \"@sidecar-ai/react\": reactEntry,\n \"@sidecar-ai/native\": path.join(repoRoot, \"packages\", \"native\", \"src\", \"index.ts\"),\n \"@sidecar-ai/native/components\": path.join(repoRoot, \"packages\", \"native\", \"src\", \"components\", \"index.tsx\"),\n \"@sidecar-ai/native/styles.css\": path.join(repoRoot, \"packages\", \"native\", \"src\", \"styles.css\"),\n };\n}\n\n/** Finds the repository root for source aliases used by local workspace tests. */\nfunction findSidecarRepoRoot(startDir: string): string | undefined {\n let current = path.resolve(startDir);\n while (true) {\n if (existsSync(path.join(current, \"packages\", \"core\", \"src\", \"index.ts\"))) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n\n/** Copies and optionally processes root `style.css` for widget builds. */\nasync function prepareAppStyle(rootDir: string, cacheDir: string): Promise<string | undefined> {\n const sourceFile = path.join(rootDir, \"style.css\");\n if (!existsSync(sourceFile)) {\n return undefined;\n }\n\n const source = await readFile(sourceFile, \"utf8\");\n const css = await processAppStyle(source, sourceFile);\n const outputFile = path.join(cacheDir, \"style.css\");\n await writeFile(outputFile, css);\n return outputFile;\n}\n\n/** Runs Tailwind/PostCSS only when the app stylesheet needs it. */\nasync function processAppStyle(source: string, from: string): Promise<string> {\n if (!needsPostcss(source)) {\n return source;\n }\n\n const cssSource = source\n .replace(/@import\\s+[\"']tailwindcss[\"'];?/g, \"@tailwind utilities;\")\n .replace(/@import\\s+[\"']@openai\\/apps-sdk-ui\\/css[\"'];?/g, \"\");\n const plugins = [];\n if (cssSource.includes(\"@tailwind\")) {\n const tailwind = await import(\"@tailwindcss/postcss\");\n plugins.push(tailwind.default({ base: path.dirname(from) }));\n }\n\n const autoprefixer = await import(\"autoprefixer\");\n plugins.push(autoprefixer.default());\n\n const result = await postcss(plugins).process(cssSource, {\n from,\n map: false,\n });\n return result.css;\n}\n\n/** Returns true when CSS contains framework directives that esbuild does not own. */\nfunction needsPostcss(source: string): boolean {\n return /@import\\s+[\"']tailwindcss[\"']|@tailwind|@source|@theme|@plugin/.test(source);\n}\n\n/** Finds a sibling `widget.tsx` for a tool file. */\nexport function findWidget(\n rootDir: string,\n toolFile: string,\n id: string,\n target: SidecarTarget = \"mcp\",\n toolVariant: SidecarSourceVariant = \"shared\",\n): SidecarWidgetManifestEntry | undefined {\n const selected = selectWidgetFile(path.dirname(toolFile), target, toolVariant);\n if (!selected) {\n return undefined;\n }\n\n const safeId = safePathSegment(id);\n return {\n sourceFile: path.relative(rootDir, selected.filePath),\n variant: selected.variant,\n resourceUri: `ui://${safeId}/widget.html`,\n };\n}\n\n/** Extracts `widget({ ... }, Component)` metadata from a widget source file. */\nexport function readWidgetOptions(\n sourceFile: SourceFile,\n): ToolWidgetOptions | undefined {\n const definition = findWidgetDefinition(sourceFile);\n if (!definition) {\n return undefined;\n }\n\n const options: ToolWidgetOptions = {};\n const description = readStringProperty(definition, \"description\");\n const prefersBorder = readBooleanProperty(definition, \"prefersBorder\");\n const csp = readWidgetCsp(definition);\n const permissions = readWidgetPermissions(definition);\n const chatgpt = readChatGptWidgetOptions(definition);\n const domain = readStringProperty(definition, \"domain\");\n\n if (description) options.description = description;\n if (prefersBorder !== undefined) options.prefersBorder = prefersBorder;\n if (domain) options.domain = domain;\n if (csp) options.csp = csp;\n if (permissions) options.permissions = permissions;\n if (chatgpt) options.hosts = { chatgpt };\n\n return Object.keys(options).length ? options : undefined;\n}\n\n/** Builds standard tool-to-widget and ChatGPT-compatible metadata for a descriptor. */\nexport function widgetMeta(\n resourceUri: string,\n options: ToolWidgetOptions = {},\n target: SidecarTarget = \"mcp\",\n): Record<string, unknown> {\n const chatgptCsp = {\n connect_domains: options.csp?.connectDomains ? [...options.csp.connectDomains] : [],\n resource_domains: options.csp?.resourceDomains ? [...options.csp.resourceDomains] : [],\n frame_domains: options.csp?.frameDomains ? [...options.csp.frameDomains] : undefined,\n redirect_domains: options.hosts?.chatgpt?.redirectDomains\n ? [...options.hosts.chatgpt.redirectDomains]\n : undefined,\n };\n\n const standard = {\n ui: {\n resourceUri,\n },\n \"ui/resourceUri\": resourceUri,\n };\n\n if (target !== \"chatgpt\") {\n return standard;\n }\n\n return {\n ...standard,\n \"openai/outputTemplate\": resourceUri,\n \"openai/widgetDescription\": options.description,\n \"openai/widgetDomain\": options.hosts?.chatgpt?.domain,\n \"openai/widgetCSP\": stripUndefined(chatgptCsp),\n };\n}\n\n/** Builds MCP Apps metadata for the `ui://` resource content. */\nexport function widgetResourceMeta(\n options: ToolWidgetOptions = {},\n target: SidecarTarget = \"mcp\",\n): Record<string, unknown> | undefined {\n const csp = stripUndefined({\n connectDomains: options.csp?.connectDomains ? [...options.csp.connectDomains] : [],\n resourceDomains: widgetResourceDomains(options, target),\n frameDomains: options.csp?.frameDomains ? [...options.csp.frameDomains] : undefined,\n baseUriDomains: options.csp?.baseUriDomains ? [...options.csp.baseUriDomains] : undefined,\n });\n const permissions = widgetPermissionsMeta(options);\n const ui = stripUndefined({\n csp,\n permissions,\n domain: options.domain ?? (target === \"chatgpt\" ? options.hosts?.chatgpt?.domain : undefined),\n prefersBorder: options.prefersBorder,\n });\n\n return Object.keys(ui).length ? { ui } : undefined;\n}\n\n/** Adds Claude's documented font origin when building Claude-targeted widgets. */\nfunction widgetResourceDomains(\n options: ToolWidgetOptions,\n target: SidecarTarget,\n): string[] {\n const domains = [...(options.csp?.resourceDomains ?? [])];\n if (target === \"claude\" && !domains.includes(CLAUDE_FONT_RESOURCE_DOMAIN)) {\n domains.push(CLAUDE_FONT_RESOURCE_DOMAIN);\n }\n return domains;\n}\n\n/** Locates the default-exported widget helper call when a widget uses one. */\nfunction findWidgetDefinition(\n sourceFile: SourceFile,\n): ObjectLiteralExpression | undefined {\n const call = resolveDefaultExportCall(sourceFile, \"widget\");\n if (!call) {\n return undefined;\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n throw new CompilerError(\n sourceFile,\n \"widget(...) must receive its metadata object as the first argument.\",\n );\n }\n\n return definition;\n}\n\n/** Reads standard widget CSP options. */\nfunction readWidgetCsp(\n definition: ObjectLiteralExpression,\n): ToolWidgetOptions[\"csp\"] | undefined {\n const initializer = readObjectProperty(definition, \"csp\");\n if (!initializer) {\n return undefined;\n }\n\n const csp = {\n connectDomains: readStringArrayProperty(initializer, \"connectDomains\"),\n resourceDomains: readStringArrayProperty(initializer, \"resourceDomains\"),\n frameDomains: readStringArrayProperty(initializer, \"frameDomains\"),\n baseUriDomains: readStringArrayProperty(initializer, \"baseUriDomains\"),\n };\n return stripUndefined(csp);\n}\n\n/** Reads standard MCP Apps permission requests. */\nfunction readWidgetPermissions(\n definition: ObjectLiteralExpression,\n): ToolWidgetOptions[\"permissions\"] | undefined {\n const initializer = readObjectProperty(definition, \"permissions\");\n if (!initializer) {\n return undefined;\n }\n\n const permissions = {\n camera: readBooleanProperty(initializer, \"camera\"),\n microphone: readBooleanProperty(initializer, \"microphone\"),\n geolocation: readBooleanProperty(initializer, \"geolocation\"),\n clipboardWrite: readBooleanProperty(initializer, \"clipboardWrite\"),\n };\n return stripUndefined(permissions);\n}\n\n/** Converts boolean permission flags into the standard empty-object shape. */\nfunction widgetPermissionsMeta(options: ToolWidgetOptions): Record<string, unknown> | undefined {\n const permissions = options.permissions;\n if (!permissions) {\n return undefined;\n }\n\n const meta = stripUndefined({\n camera: permissions.camera ? {} : undefined,\n microphone: permissions.microphone ? {} : undefined,\n geolocation: permissions.geolocation ? {} : undefined,\n clipboardWrite: permissions.clipboardWrite ? {} : undefined,\n });\n return Object.keys(meta).length ? meta : undefined;\n}\n\n/** Reads ChatGPT-only widget compatibility options. */\nfunction readChatGptWidgetOptions(\n definition: ObjectLiteralExpression,\n): ChatGptWidgetOptions | undefined {\n const hosts = readObjectProperty(definition, \"hosts\");\n const chatgpt = hosts ? readObjectProperty(hosts, \"chatgpt\") : undefined;\n if (!chatgpt) {\n return undefined;\n }\n\n const options = {\n domain: readStringProperty(chatgpt, \"domain\"),\n redirectDomains: readStringArrayProperty(chatgpt, \"redirectDomains\"),\n };\n return stripUndefined(options);\n}\n\n/** Reads a nested object literal property, unwrapping TS-only expressions. */\nfunction readObjectProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): ObjectLiteralExpression | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** Reads a string literal property from an object literal. */\nfunction readStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isStringLiteral(initializer)\n ? initializer.getLiteralText()\n : undefined;\n}\n\n/** Reads a boolean literal property from an object literal. */\nfunction readBooleanProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): boolean | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n\n if (initializer.getKind() === SyntaxKind.TrueKeyword) {\n return true;\n }\n if (initializer.getKind() === SyntaxKind.FalseKeyword) {\n return false;\n }\n return undefined;\n}\n\n/** Reads a string literal array property from an object literal. */\nfunction readStringArrayProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string[] | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n\n return initializer\n .getElements()\n .filter(Node.isStringLiteral)\n .map((element) => element.getLiteralText());\n}\n\n/** Selects the widget source for a target, preferring platform overrides. */\nfunction selectWidgetFile(\n directory: string,\n target: SidecarTarget,\n toolVariant: SidecarSourceVariant,\n): { filePath: string; variant: SidecarSourceVariant } | undefined {\n if (toolVariant === \"openai\") {\n const filePath = path.join(directory, \"widget.openai.tsx\");\n return existsSync(filePath) ? { filePath, variant: \"openai\" } : undefined;\n }\n\n if (toolVariant === \"anthropic\") {\n const filePath = path.join(directory, \"widget.anthropic.tsx\");\n return existsSync(filePath) ? { filePath, variant: \"anthropic\" } : undefined;\n }\n\n const candidates =\n target === \"chatgpt\" || target === \"claude\" || target === \"mcp\"\n ? [{ name: \"widget.tsx\", variant: \"shared\" as const }]\n : [];\n\n for (const candidate of candidates) {\n const filePath = path.join(directory, candidate.name);\n if (existsSync(filePath)) {\n return { filePath, variant: candidate.variant };\n }\n }\n\n return undefined;\n}\n\n/** Merges widget metadata into existing descriptor metadata without losing `ui`. */\nexport function mergeWidgetMeta(\n existing: Record<string, unknown> | undefined,\n widget: Record<string, unknown>,\n): Record<string, unknown> {\n const merged: Record<string, unknown> = { ...(existing ?? {}) };\n for (const [key, value] of Object.entries(widget)) {\n if (key === \"ui\" && isRecord(value) && isRecord(merged.ui)) {\n merged.ui = { ...merged.ui, ...value };\n } else {\n merged[key] = value;\n }\n }\n return merged;\n}\n\n/** Wraps bundled JavaScript in the minimal transparent widget document. */\nfunction renderWidgetHtml(title: string, javascript: string, css = \"\"): string {\n return `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${escapeHtml(title)}</title>\n <style>\n :root { color-scheme: light dark; font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; }\n html, body, #root { min-height: 100%; margin: 0; background: transparent; }\n html, body { overflow: auto; }\n body { color: CanvasText; min-width: 0; }\n * { box-sizing: border-box; }\n ${css}\n </style>\n </head>\n <body>\n <div id=\"root\"></div>\n <script>${javascript}</script>\n </body>\n</html>\n`;\n}\n\n/** Returns true for metadata objects that can be shallow-merged. */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\n/** Drops undefined keys from emitted metadata objects. */\nfunction stripUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n","/** Build orchestration for Sidecar projects. */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { analyzeProjectTools } from \"./analyze.js\";\nimport { analyzeProjectConfig } from \"./config.js\";\nimport { collectProjectDiagnostics, formatDiagnostic } from \"./diagnostics.js\";\nimport { writeGeneratedTypes } from \"./generated.js\";\nimport { loadProjectIdentity } from \"./identity.js\";\nimport { buildPluginPackages } from \"./plugins.js\";\nimport { analyzeProjectPrompts } from \"./prompts.js\";\nimport { analyzeProjectResources } from \"./resources.js\";\nimport { VERCEL_FUNCTION_DIR, buildServerOutput } from \"./server-output.js\";\nimport type { BuildProjectOptions, SidecarManifest, SidecarResourceTemplateManifestEntry } from \"./types.js\";\nimport { buildCodeModeWidget, buildWidgets } from \"./widgets.js\";\n\n/** Builds the MCP output, generated types, and optional plugin packages. */\nexport async function buildProject(\n options: BuildProjectOptions,\n): Promise<SidecarManifest> {\n const rootDir = path.resolve(options.rootDir);\n const config = analyzeProjectConfig(rootDir);\n const target = options.target ?? config.build.target ?? \"mcp\";\n const host = options.host ?? config.build.host ?? \"node\";\n const plugins = options.plugins ?? config.build.plugins ?? false;\n if (config.codeMode.enabled && !config.codeMode.unsafe && !config.remoteExecution.enabled) {\n throw new Error(\"Code mode requires remoteExecution: true, or codeMode: { unsafe: true } for trusted local use.\");\n }\n if (config.codeMode.enabled && config.remoteExecution.enabled && !existsSync(path.join(rootDir, \"remote.ts\"))) {\n throw new Error(\"remoteExecution: true requires a reserved remote.ts file at the project root.\");\n }\n const tools = await analyzeProjectTools(rootDir, { target });\n const resources = await analyzeProjectResources(rootDir);\n const resourceTemplates: SidecarResourceTemplateManifestEntry[] = [];\n const prompts = await analyzeProjectPrompts(rootDir);\n const identity = await loadProjectIdentity(rootDir);\n const diagnostics = await collectProjectDiagnostics(rootDir, {\n tools,\n resources,\n prompts,\n config,\n });\n const errors = diagnostics.filter((diagnostic) => diagnostic.severity === \"error\");\n if (errors.length) {\n throw new Error(errors.map(formatDiagnostic).join(\"\\n\"));\n }\n\n const outDir = resolveInsideRoot(rootDir, options.outDir ?? config.build.outDir ?? defaultBuildOutDir(host, target));\n const runtimeOutDir = resolveRuntimeOutputDir(outDir, host);\n await buildWidgets(rootDir, runtimeOutDir, tools, config.build.widgets);\n const codeModeWidget = config.codeMode.enabled && config.codeMode.render.enabled\n ? await buildCodeModeWidget(rootDir, runtimeOutDir, tools, target, config.build.widgets)\n : undefined;\n\n const manifest: SidecarManifest = {\n version: 1,\n target,\n host,\n rootDir: \".\",\n generatedAt: new Date().toISOString(),\n config,\n tools,\n codeMode: config.codeMode.enabled\n ? {\n enabled: true,\n unsafe: config.codeMode.unsafe,\n remoteExecution: config.remoteExecution.enabled,\n render: config.codeMode.render,\n widget: codeModeWidget,\n }\n : undefined,\n resources,\n resourceTemplates,\n prompts,\n diagnostics,\n };\n\n await mkdir(runtimeOutDir, { recursive: true });\n await writeFile(\n path.join(runtimeOutDir, \"manifest.sidecar.json\"),\n `${JSON.stringify(manifest, null, 2)}\\n`,\n );\n await writeFile(path.join(runtimeOutDir, \"README.md\"), renderMcpReadme(manifest));\n await writeGeneratedTypes(rootDir, tools);\n await buildServerOutput(rootDir, runtimeOutDir, manifest, identity, host, {\n vercelOutputDir: outDir,\n });\n if (plugins) {\n await buildPluginPackages(rootDir, resolvePluginOutputBase(rootDir, outDir, host), manifest);\n }\n\n return manifest;\n}\n\n/** Returns the conventional output directory for a host target. */\nfunction defaultBuildOutDir(host: string, target: string): string {\n if (host === \"vercel\") {\n return \".vercel/output\";\n }\n return `out/${target}`;\n}\n\n/** Chooses where runtime-private files live for the selected host. */\nfunction resolveRuntimeOutputDir(outDir: string, host: string): string {\n if (host === \"vercel\") {\n return path.join(outDir, VERCEL_FUNCTION_DIR);\n }\n return outDir;\n}\n\n/** Chooses where installable plugin packages should be written. */\nfunction resolvePluginOutputBase(rootDir: string, outDir: string, host: string): string {\n if (host === \"vercel\" && isVercelBuildOutputDir(outDir)) {\n return path.join(rootDir, \"out\");\n }\n return path.dirname(outDir);\n}\n\n/** Returns true for Vercel's required Build Output API directory. */\nfunction isVercelBuildOutputDir(outDir: string): boolean {\n return path.basename(outDir) === \"output\" && path.basename(path.dirname(outDir)) === \".vercel\";\n}\n\n/** Resolves build output paths while preventing writes outside the project. */\nfunction resolveInsideRoot(rootDir: string, output: string): string {\n const resolved = path.resolve(rootDir, output);\n const relative = path.relative(rootDir, resolved);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(`Build output must stay inside the project root: ${output}`);\n }\n return resolved;\n}\n\n/** Renders a short build README with detected tools and install context. */\nfunction renderMcpReadme(manifest: SidecarManifest): string {\n const tools = manifest.tools\n .map((toolEntry) => `- \\`${toolEntry.id}\\`: ${toolEntry.description}`)\n .join(\"\\n\");\n const resources = manifest.resources\n .map((resourceEntry) => `- \\`${resourceEntry.uri}\\`: ${resourceEntry.description ?? resourceEntry.name}`)\n .join(\"\\n\");\n const prompts = manifest.prompts\n .map((promptEntry) => `- \\`${promptEntry.name}\\`: ${promptEntry.description ?? promptEntry.title}`)\n .join(\"\\n\");\n\n return `# Sidecar MCP Build\n\nGenerated by Sidecar.\n\n## Tools\n\n${tools || \"No tools detected.\"}\n\n## Resources\n\n${resources || \"No resources detected.\"}\n\n## Prompts\n\n${prompts || \"No prompts detected.\"}\n\n${manifest.host === \"vercel\" ? renderVercelReadmeSection() : renderNodeReadmeSection()}\n\n## Local HTTPS Testing\n\nRun \\`sidecar dev --tunnel\\` from the project root to start the local MCP server on Streamable HTTP and print a validated HTTPS MCP URL that can be added to ChatGPT, Claude, or a Claude plugin install. Temporary quick tunnels are public and best-effort; use a configured tunnel/domain or deployed preview for repeatable testing.\n`;\n}\n\n/** Renders generated README instructions for standalone Node output. */\nfunction renderNodeReadmeSection(): string {\n return `## Run The Server\n\nThis output includes a standalone Node MCP server. Start it with:\n\n\\`\\`\\`sh\nnpm start\n\\`\\`\\`\n\nor:\n\n\\`\\`\\`sh\nnode server/index.js\n\\`\\`\\`\n\nSet \\`PORT\\` or \\`SIDECAR_PORT\\` to choose the listen port. Hosted/authenticated MCPs should set \\`SIDECAR_MCP_URL\\` to the public \\`https://.../mcp\\` URL before starting.\n`;\n}\n\n/** Renders generated README instructions for Vercel output. */\nfunction renderVercelReadmeSection(): string {\n return `## Deploy To Vercel\n\nThis output uses Vercel's Build Output API. The MCP function is emitted at \\`${VERCEL_FUNCTION_DIR}\\`, and \\`config.json\\` routes Streamable HTTP traffic to it. Set \\`SIDECAR_MCP_URL\\` to the public \\`https://.../mcp\\` URL in Vercel.\n`;\n}\n","/** Static Sidecar config extraction for build manifests. */\nimport path from \"node:path\";\nimport {\n Node,\n SyntaxKind,\n type ObjectLiteralExpression,\n} from \"ts-morph\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"./ast.js\";\nimport { createProject } from \"./project.js\";\nimport type { SidecarCompilerConfig } from \"./types.js\";\nimport { existsSyncSafe } from \"./utils.js\";\nimport type { WidgetBuildConfig, WidgetEsbuildConfig } from \"@sidecar-ai/core\";\nimport type { CodeModeRenderStrategy } from \"@sidecar-ai/core\";\n\n/** Reads the serializable subset of `sidecar.config.ts` without executing app code. */\nexport function analyzeProjectConfig(rootDir: string): SidecarCompilerConfig {\n const configPath = path.join(rootDir, \"sidecar.config.ts\");\n if (!existsSyncSafe(configPath)) {\n return defaultCompilerConfig();\n }\n\n const project = createProject(rootDir);\n const sourceFile = project.addSourceFileAtPath(configPath);\n const call = resolveDefaultExportCall(sourceFile, \"defineConfig\");\n const definition = unwrapExpression(call?.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n return defaultCompilerConfig();\n }\n\n return {\n build: {\n target: readTargetNested(definition, \"build\", \"target\"),\n host: readHostNested(definition, \"build\", \"host\"),\n outDir: readStringNested(definition, \"build\", \"outDir\"),\n plugins: readBooleanNested(definition, \"build\", \"plugins\"),\n widgets: readWidgetBuildConfig(definition),\n },\n resources: {\n subscribe: readBooleanNested(definition, \"resources\", \"subscribe\") ?? false,\n listChanged: readBooleanNested(definition, \"resources\", \"listChanged\") ?? false,\n },\n prompts: {\n listChanged: readBooleanNested(definition, \"prompts\", \"listChanged\") ?? false,\n },\n tools: {\n listChanged: readBooleanNested(definition, \"tools\", \"listChanged\") ?? false,\n },\n pagination: {\n pageSize: readNumberNested(definition, \"pagination\", \"pageSize\") ?? 50,\n hasOverride: hasProperty(readObjectProperty(definition, \"pagination\"), \"override\"),\n },\n codeMode: readCodeModeConfig(definition),\n remoteExecution: {\n enabled: readBooleanProperty(definition, \"remoteExecution\") ?? false,\n },\n };\n}\n\n/** Reads static widget bundler options from `build.widgets`. */\nfunction readWidgetBuildConfig(\n definition: ObjectLiteralExpression,\n): WidgetBuildConfig | undefined {\n const widgets = readObjectProperty(readObjectProperty(definition, \"build\"), \"widgets\");\n if (!widgets) {\n return undefined;\n }\n\n const config: WidgetBuildConfig = {};\n const configure = readStringProperty(widgets, \"configure\");\n const esbuild = readWidgetEsbuildConfig(widgets);\n if (configure) config.configure = configure;\n if (esbuild) config.esbuild = esbuild;\n return Object.keys(config).length ? config : undefined;\n}\n\n/** Reads the serializable esbuild option subset from `build.widgets.esbuild`. */\nfunction readWidgetEsbuildConfig(\n widgets: ObjectLiteralExpression,\n): WidgetEsbuildConfig | undefined {\n const esbuild = readObjectProperty(widgets, \"esbuild\");\n if (!esbuild) {\n return undefined;\n }\n\n const config: WidgetEsbuildConfig = {};\n const alias = readStringRecordProperty(esbuild, \"alias\");\n const define = readStringRecordProperty(esbuild, \"define\");\n const external = readStringArrayProperty(esbuild, \"external\");\n const loader = readStringRecordProperty(esbuild, \"loader\");\n const conditions = readStringArrayProperty(esbuild, \"conditions\");\n const mainFields = readStringArrayProperty(esbuild, \"mainFields\");\n const jsx = readStringProperty(esbuild, \"jsx\");\n const jsxImportSource = readStringProperty(esbuild, \"jsxImportSource\");\n\n if (alias) config.alias = alias;\n if (define) config.define = define;\n if (external) config.external = external;\n if (loader) config.loader = loader;\n if (conditions) config.conditions = conditions;\n if (mainFields) config.mainFields = mainFields;\n if (jsx === \"automatic\" || jsx === \"transform\" || jsx === \"preserve\") {\n config.jsx = jsx;\n }\n if (jsxImportSource) config.jsxImportSource = jsxImportSource;\n\n return Object.keys(config).length ? config : undefined;\n}\n\n/** Returns compiler defaults when config is absent. */\nexport function defaultCompilerConfig(): SidecarCompilerConfig {\n return {\n build: {},\n resources: {\n subscribe: false,\n listChanged: false,\n },\n prompts: {\n listChanged: false,\n },\n tools: {\n listChanged: false,\n },\n pagination: {\n pageSize: 50,\n hasOverride: false,\n },\n codeMode: {\n enabled: false,\n unsafe: false,\n render: {\n enabled: true,\n strategy: \"last-renderable\",\n },\n },\n remoteExecution: {\n enabled: false,\n },\n };\n}\n\n/** Reads normalized code-mode settings from the top-level config object. */\nfunction readCodeModeConfig(definition: ObjectLiteralExpression): SidecarCompilerConfig[\"codeMode\"] {\n const defaults = defaultCompilerConfig().codeMode;\n const property = definition.getProperty(\"codeMode\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return defaults;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return defaults;\n }\n if (initializer.getKind() === SyntaxKind.TrueKeyword) {\n return { ...defaults, enabled: true };\n }\n if (initializer.getKind() === SyntaxKind.FalseKeyword) {\n return { ...defaults, enabled: false };\n }\n if (!Node.isObjectLiteralExpression(initializer)) {\n return defaults;\n }\n\n return {\n enabled: true,\n unsafe: readBooleanProperty(initializer, \"unsafe\") ?? false,\n render: readCodeModeRenderConfig(initializer) ?? defaults.render,\n };\n}\n\n/** Reads `codeMode.render`, accepting a boolean or options object. */\nfunction readCodeModeRenderConfig(\n definition: ObjectLiteralExpression,\n): SidecarCompilerConfig[\"codeMode\"][\"render\"] | undefined {\n const property = definition.getProperty(\"render\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n if (initializer.getKind() === SyntaxKind.TrueKeyword) {\n return { enabled: true, strategy: \"last-renderable\" };\n }\n if (initializer.getKind() === SyntaxKind.FalseKeyword) {\n return { enabled: false, strategy: \"last-renderable\" };\n }\n if (!Node.isObjectLiteralExpression(initializer)) {\n return undefined;\n }\n\n return {\n enabled: readBooleanProperty(initializer, \"enabled\") ?? true,\n strategy: readRenderStrategy(initializer) ?? \"last-renderable\",\n };\n}\n\n/** Reads a supported code-mode render strategy string. */\nfunction readRenderStrategy(\n definition: ObjectLiteralExpression,\n): CodeModeRenderStrategy | undefined {\n const value = readStringProperty(definition, \"strategy\");\n if (\n value === \"last-renderable\" ||\n value === \"first-renderable\" ||\n value === \"explicit\"\n ) {\n return value;\n }\n return undefined;\n}\n\n/** Reads a build target nested object property. */\nfunction readTargetNested(\n definition: ObjectLiteralExpression,\n section: string,\n propertyName: string,\n): \"mcp\" | \"chatgpt\" | \"claude\" | undefined {\n const value = readStringNested(definition, section, propertyName);\n return value === \"mcp\" || value === \"chatgpt\" || value === \"claude\"\n ? value\n : undefined;\n}\n\n/** Reads a build host nested object property. */\nfunction readHostNested(\n definition: ObjectLiteralExpression,\n section: string,\n propertyName: string,\n): \"node\" | \"vercel\" | undefined {\n const value = readStringNested(definition, section, propertyName);\n return value === \"node\" || value === \"vercel\" ? value : undefined;\n}\n\n/** Reads a string nested object property. */\nfunction readStringNested(\n definition: ObjectLiteralExpression,\n section: string,\n propertyName: string,\n): string | undefined {\n const object = readObjectProperty(definition, section);\n if (!object) {\n return undefined;\n }\n return readStringProperty(object, propertyName);\n}\n\n/** Reads a boolean nested object property. */\nfunction readBooleanNested(\n definition: ObjectLiteralExpression,\n section: string,\n propertyName: string,\n): boolean | undefined {\n const object = readObjectProperty(definition, section);\n if (!object) {\n return undefined;\n }\n return readBooleanProperty(object, propertyName);\n}\n\n/** Reads a boolean object property. */\nfunction readBooleanProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): boolean | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n if (initializer.getKind() === SyntaxKind.TrueKeyword) return true;\n if (initializer.getKind() === SyntaxKind.FalseKeyword) return false;\n return undefined;\n}\n\n/** Reads a number nested object property. */\nfunction readNumberNested(\n definition: ObjectLiteralExpression,\n section: string,\n propertyName: string,\n): number | undefined {\n const object = readObjectProperty(definition, section);\n if (!object) {\n return undefined;\n }\n const property = object.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isNumericLiteral(initializer)\n ? Number(initializer.getLiteralText())\n : undefined;\n}\n\n/** Reads a nested object literal property. */\nfunction readObjectProperty(\n definition: ObjectLiteralExpression | undefined,\n propertyName: string,\n): ObjectLiteralExpression | undefined {\n if (!definition) {\n return undefined;\n }\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** Reads one string property from an object literal. */\nfunction readStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isStringLiteral(initializer)\n ? initializer.getLiteralText()\n : undefined;\n}\n\n/** Reads a string array property from an object literal. */\nfunction readStringArrayProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string[] | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n\n const values = initializer.getElements().map((element) => {\n const unwrapped = unwrapExpression(element);\n return unwrapped && Node.isStringLiteral(unwrapped)\n ? unwrapped.getLiteralText()\n : undefined;\n });\n return values.every((value): value is string => value !== undefined)\n ? values\n : undefined;\n}\n\n/** Reads a string-valued object property from an object literal. */\nfunction readStringRecordProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): Record<string, string> | undefined {\n const object = readObjectProperty(definition, propertyName);\n if (!object) {\n return undefined;\n }\n\n const record: Record<string, string> = {};\n for (const property of object.getProperties()) {\n if (!Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isStringLiteral(initializer)) {\n return undefined;\n }\n record[property.getName().replace(/^[\"']|[\"']$/g, \"\")] = initializer.getLiteralText();\n }\n return record;\n}\n\n/** Returns true when an object literal has the named property. */\nfunction hasProperty(\n definition: ObjectLiteralExpression | undefined,\n propertyName: string,\n): boolean {\n return Boolean(definition?.getProperty(propertyName));\n}\n","/** Static diagnostics for Sidecar projects. */\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { JsonSchema } from \"@sidecar-ai/core\";\nimport type {\n SidecarCompilerConfig,\n SidecarPromptManifestEntry,\n SidecarResourceManifestEntry,\n SidecarToolManifestEntry,\n} from \"./types.js\";\n\n/** Diagnostic severity surfaced by the CLI and future editor integrations. */\nexport type DiagnosticSeverity = \"warning\" | \"error\";\n\n/** Stable diagnostic emitted for a concrete project source location. */\nexport type SidecarDiagnostic = {\n severity: DiagnosticSeverity;\n code: string;\n message: string;\n filePath: string;\n line: number;\n column: number;\n hint?: string;\n};\n\n/** Collects project-level warnings that do not block compilation by default. */\nexport async function collectProjectDiagnostics(\n rootDir: string,\n input: SidecarToolManifestEntry[] | {\n tools: SidecarToolManifestEntry[];\n resources?: SidecarResourceManifestEntry[];\n prompts?: SidecarPromptManifestEntry[];\n config?: SidecarCompilerConfig;\n },\n): Promise<SidecarDiagnostic[]> {\n const diagnostics: SidecarDiagnostic[] = [];\n const tools = Array.isArray(input) ? input : input.tools;\n const resources = Array.isArray(input) ? [] : input.resources ?? [];\n const prompts = Array.isArray(input) ? [] : input.prompts ?? [];\n const config = Array.isArray(input) ? undefined : input.config;\n const hasAuthConfig = existsSync(path.join(rootDir, \"auth.ts\"));\n\n for (const entry of tools) {\n const toolPath = path.join(rootDir, entry.sourceFile);\n const toolSource = await readFile(toolPath, \"utf8\");\n diagnostics.push(...diagnoseToolSource(entry, toolSource, hasAuthConfig));\n\n if (entry.widget) {\n const widgetPath = path.join(rootDir, entry.widget.sourceFile);\n const widgetSource = await readFile(widgetPath, \"utf8\");\n diagnostics.push(...diagnoseWidgetSource(rootDir, entry, widgetSource));\n }\n }\n\n for (const entry of resources) {\n const resourcePath = path.join(rootDir, entry.sourceFile);\n const resourceSource = await readFile(resourcePath, \"utf8\");\n diagnostics.push(...diagnoseResourceSource(entry, resourceSource));\n }\n\n for (const entry of prompts) {\n const promptPath = path.join(rootDir, entry.sourceFile);\n const promptSource = await readFile(promptPath, \"utf8\");\n diagnostics.push(...diagnosePromptSource(entry, promptSource));\n }\n\n if (config) {\n diagnostics.push(...diagnoseCapabilities(config, resources));\n }\n\n return diagnostics;\n}\n\n/** Formats diagnostics in a TypeScript-style shape understood by many editors. */\nexport function formatDiagnostic(diagnostic: SidecarDiagnostic): string {\n const location = `${diagnostic.filePath}:${diagnostic.line}:${diagnostic.column}`;\n const hint = diagnostic.hint ? `\\n hint: ${diagnostic.hint}` : \"\";\n return `${location} - ${diagnostic.severity} ${diagnostic.code}: ${diagnostic.message}${hint}`;\n}\n\n/** Emits warnings for one reserved `tool.ts` file. */\nfunction diagnoseToolSource(\n entry: SidecarToolManifestEntry,\n source: string,\n hasAuthConfig: boolean,\n): SidecarDiagnostic[] {\n const diagnostics: SidecarDiagnostic[] = [];\n const toolLocation = locate(source, \"tool({\");\n\n if (!entry.description.trim().startsWith(\"Use this when\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_METADATA_DESCRIPTION\",\n message: `Tool \"${entry.id}\" description should start with \"Use this when...\" for better model routing.`,\n filePath: entry.sourceFile,\n ...toolLocation,\n hint: \"Keep the first sentence specific and include explicit disallowed cases when useful.\",\n });\n }\n\n for (const key of [\"readOnlyHint\", \"destructiveHint\", \"openWorldHint\"] as const) {\n if (!(key in (entry.annotations ?? {}))) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_TOOL_ANNOTATION\",\n message: `Tool \"${entry.id}\" should explicitly declare annotations.${key}.`,\n filePath: entry.sourceFile,\n ...toolLocation,\n hint: \"Hosts use these hints to frame approval and safety UX; Sidecar applies conservative defaults only as a fallback.\",\n });\n }\n }\n\n if (/auth\\s*:/.test(source) && !hasAuthConfig && !isIgnored(source, \"SIDECAR_AUTH_MISSING_CONFIG\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_AUTH_MISSING_CONFIG\",\n message: `Tool \"${entry.id}\" declares auth but the project has no reserved auth.ts file.`,\n filePath: entry.sourceFile,\n ...locate(source, \"auth\"),\n hint: \"Add auth.ts at the project root or mark the tool auth policy as public.\",\n });\n }\n\n if (!returnsToolResult(source) && !isIgnored(source, \"SIDECAR_TOOL_RESULT_REQUIRED\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_TOOL_RESULT_REQUIRED\",\n message: `Tool \"${entry.id}\" should return toolResult(...) from execute.`,\n filePath: entry.sourceFile,\n ...locate(source, \"execute\"),\n hint: \"The runtime rejects plain objects so content, structuredContent, and meta always map cleanly to MCP result channels.\",\n });\n }\n\n if (/[\"']openai\\//.test(source) && !/@sidecar-ai\\/openai/.test(source) && !isIgnored(source, \"SIDECAR_OPENAI_MAGIC_META\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_OPENAI_MAGIC_META\",\n message: `Tool \"${entry.id}\" uses raw ChatGPT metadata strings.`,\n filePath: entry.sourceFile,\n ...locate(source, \"openai/\"),\n hint: \"Use @sidecar-ai/openai helpers or the typed hosts.chatgpt field so platform metadata stays typed.\",\n });\n }\n\n for (const parameterName of missingParameterDescriptions(entry.inputSchema)) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_PARAM_DESCRIPTION\",\n message: `Parameter \"${parameterName}\" on tool \"${entry.id}\" is missing a JSDoc/schema description.`,\n filePath: entry.sourceFile,\n ...locate(source, parameterName),\n hint: \"Add a JSDoc comment to the TypeScript field or provide a schema description.\",\n });\n }\n\n if (looksLikeKnowledgeTool(entry) && !hasCompanyKnowledgeShape(entry.inputSchema) && !isIgnored(source, \"SIDECAR_COMPANY_KNOWLEDGE_SHAPE\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_COMPANY_KNOWLEDGE_SHAPE\",\n message: `Tool \"${entry.id}\" looks like a search/fetch knowledge tool but does not use the expected simple input shape.`,\n filePath: entry.sourceFile,\n ...toolLocation,\n hint: \"Use a string query for search tools or a string id/url for fetch tools, or add // sidecar-ignore SIDECAR_COMPANY_KNOWLEDGE_SHAPE.\",\n });\n }\n\n return diagnostics.filter((diagnostic) => !isIgnored(source, diagnostic.code));\n}\n\n/** Emits warnings for one sibling `widget.tsx` file. */\nfunction diagnoseWidgetSource(\n _rootDir: string,\n entry: SidecarToolManifestEntry,\n source: string,\n): SidecarDiagnostic[] {\n const diagnostics: SidecarDiagnostic[] = [];\n const widgetFile = entry.widget?.sourceFile;\n if (!widgetFile) {\n return diagnostics;\n }\n\n if (/window\\s*\\.\\s*openai|\\(\\s*window\\s+as\\s+[^)]*\\)\\s*\\.\\s*openai/.test(source) && !isIgnored(source, \"SIDECAR_OPENAI_RAW_BRIDGE\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_OPENAI_RAW_BRIDGE\",\n message: `Widget for \"${entry.id}\" reads window.openai directly.`,\n filePath: widgetFile,\n ...locate(source, \"openai\"),\n hint: \"Use @sidecar-ai/openai runtime helpers in ChatGPT-only widgets, or @sidecar-ai/native/@sidecar-ai/client for portable behavior.\",\n });\n }\n\n if (entry.widget?.variant !== \"openai\" && /@sidecar-ai\\/openai/.test(source) && !/@sidecar-ai\\/native/.test(source) && !isIgnored(source, \"SIDECAR_OPENAI_FALLBACK\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_OPENAI_FALLBACK\",\n message: `Widget for \"${entry.id}\" imports @sidecar-ai/openai without a portable fallback.`,\n filePath: widgetFile,\n ...locate(source, \"@sidecar-ai/openai\"),\n hint: \"Prefer @sidecar-ai/native for user-facing behavior and reserve @sidecar-ai/openai for typed metadata or explicit ChatGPT-only code paths.\",\n });\n }\n\n if (entry.widget?.variant !== \"openai\" && /@sidecar-ai\\/openai\\/components/.test(source) && !isIgnored(source, \"SIDECAR_OPENAI_COMPONENT_CROSS_HOST\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_OPENAI_COMPONENT_CROSS_HOST\",\n message: `Widget for \"${entry.id}\" imports ChatGPT-only components.`,\n filePath: widgetFile,\n ...locate(source, \"@sidecar-ai/openai/components\"),\n hint: \"Use @sidecar-ai/native for portable primitives. Keep @sidecar-ai/openai/components for widgets intentionally targeted to ChatGPT.\",\n });\n }\n\n if (entry.widget?.variant !== \"anthropic\" && /@sidecar-ai\\/anthropic\\/components/.test(source) && !isIgnored(source, \"SIDECAR_ANTHROPIC_COMPONENT_CROSS_HOST\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_ANTHROPIC_COMPONENT_CROSS_HOST\",\n message: `Widget for \"${entry.id}\" imports Claude-only components.`,\n filePath: widgetFile,\n ...locate(source, \"@sidecar-ai/anthropic/components\"),\n hint: \"Use @sidecar-ai/native for portable primitives. Keep @sidecar-ai/anthropic/components for widgets intentionally targeted to Claude.\",\n });\n }\n\n if (/\\bPopover\\b/.test(source) && /@sidecar-ai\\/native/.test(source) && !isIgnored(source, \"SIDECAR_NATIVE_NON_PORTABLE_COMPONENT\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_NATIVE_NON_PORTABLE_COMPONENT\",\n message: `Widget for \"${entry.id}\" appears to expect a native Popover.`,\n filePath: widgetFile,\n ...locate(source, \"Popover\"),\n hint: \"Popover is host-specific because Claude inline apps discourage clipped overlay UI. Use @sidecar-ai/openai/components for ChatGPT-only popovers.\",\n });\n }\n\n return diagnostics.filter((diagnostic) => !isIgnored(source, diagnostic.code));\n}\n\n/** Emits warnings for one reserved `resource.ts` file. */\nfunction diagnoseResourceSource(\n entry: SidecarResourceManifestEntry,\n source: string,\n): SidecarDiagnostic[] {\n const diagnostics: SidecarDiagnostic[] = [];\n if (!returnsResourceResult(source) && !isIgnored(source, \"SIDECAR_RESOURCE_RESULT_REQUIRED\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_RESOURCE_RESULT_REQUIRED\",\n message: `Resource \"${entry.uri}\" should return resourceResult(...) from read.`,\n filePath: entry.sourceFile,\n ...locate(source, \"read\"),\n hint: \"The runtime rejects plain objects so text/blob content maps cleanly to MCP resource contents.\",\n });\n }\n return diagnostics.filter((diagnostic) => !isIgnored(source, diagnostic.code));\n}\n\n/** Emits warnings for one reserved `prompt.ts` file. */\nfunction diagnosePromptSource(\n entry: SidecarPromptManifestEntry,\n source: string,\n): SidecarDiagnostic[] {\n const diagnostics: SidecarDiagnostic[] = [];\n if (!source.includes(\"run\") && !isIgnored(source, \"SIDECAR_PROMPT_RUN_REQUIRED\")) {\n diagnostics.push({\n severity: \"warning\",\n code: \"SIDECAR_PROMPT_RUN_REQUIRED\",\n message: `Prompt \"${entry.name}\" should include a run method.`,\n filePath: entry.sourceFile,\n ...locate(source, \"prompt({\"),\n hint: \"Prompt run methods return a string for the common case or MCP prompt messages for advanced cases.\",\n });\n }\n return diagnostics.filter((diagnostic) => !isIgnored(source, diagnostic.code));\n}\n\n/** Emits build-time errors when config claims unsupported capability wiring. */\nfunction diagnoseCapabilities(\n config: SidecarCompilerConfig,\n resources: SidecarResourceManifestEntry[],\n): SidecarDiagnostic[] {\n const diagnostics: SidecarDiagnostic[] = [];\n if (!config.resources.subscribe && resources.some((entry) => entry.subscribe)) {\n const entry = resources.find((resource) => resource.subscribe);\n if (entry) {\n diagnostics.push({\n severity: \"error\",\n code: \"SIDECAR_RESOURCE_SUBSCRIBE_DISABLED\",\n message: `Resource \"${entry.uri}\" sets subscribe: true but sidecar.config.ts does not enable resources.subscribe.`,\n filePath: entry.sourceFile,\n line: 1,\n column: 1,\n hint: \"Add resources: { subscribe: true } to sidecar.config.ts or remove subscribe: true from this resource.\",\n });\n }\n }\n return diagnostics;\n}\n\n/** Returns true when the source visibly returns the standardized result helper. */\nfunction returnsToolResult(source: string): boolean {\n return /\\breturn\\s+toolResult(?:\\.\\w+)?\\s*\\(/.test(source);\n}\n\n/** Returns true when the source visibly returns the standardized resource helper. */\nfunction returnsResourceResult(source: string): boolean {\n return /\\breturn\\s+resourceResult(?:\\.\\w+)?\\s*\\(/.test(source);\n}\n\n/** Finds required parameters without model-facing descriptions. */\nfunction missingParameterDescriptions(schema: JsonSchema): string[] {\n const properties = schema.properties ?? {};\n return Object.entries(properties)\n .filter(([, value]) => !value.description?.trim())\n .map(([key]) => key);\n}\n\n/** Returns true for tools named like knowledge search/fetch operations. */\nfunction looksLikeKnowledgeTool(entry: SidecarToolManifestEntry): boolean {\n const text = `${entry.id} ${entry.name}`.toLowerCase();\n return /\\b(search|fetch)\\b/.test(text) || /(^|[._-])(search|fetch)([._-]|$)/.test(text);\n}\n\n/** Checks the minimum predictable shape Sidecar expects for knowledge tools. */\nfunction hasCompanyKnowledgeShape(schema: JsonSchema): boolean {\n const properties = schema.properties ?? {};\n const query = properties.query;\n const url = properties.url;\n const id = properties.id;\n return query?.type === \"string\" || url?.type === \"string\" || id?.type === \"string\";\n}\n\n/** Locates text within a source file using 1-based editor coordinates. */\nfunction locate(source: string, needle: string): { line: number; column: number } {\n const index = Math.max(0, source.indexOf(needle));\n const prefix = source.slice(0, index);\n const lines = prefix.split(\"\\n\");\n return {\n line: lines.length,\n column: (lines.at(-1)?.length ?? 0) + 1,\n };\n}\n\n/** Allows authors to silence a warning with a visible source comment. */\nfunction isIgnored(source: string, code: string): boolean {\n return source.includes(`sidecar-ignore ${code}`) || source.includes(`sidecar-ignore all`);\n}\n","/** Generated widget client writer. */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { SidecarToolManifestEntry } from \"./types.js\";\nimport { toIdentifier, toImportSpecifier } from \"./utils.js\";\n\n/** Writes `.sidecar/generated/tools.ts` for typed widget-initiated calls. */\nexport async function writeGeneratedTypes(\n rootDir: string,\n tools: SidecarToolManifestEntry[],\n): Promise<void> {\n const generatedDir = path.join(rootDir, \".sidecar\", \"generated\");\n await mkdir(generatedDir, { recursive: true });\n const appCallableTools = tools.filter(isAppCallable);\n const methodNames = uniqueMethodNames(appCallableTools.map((entry) => toIdentifier(entry.id)));\n\n const imports = appCallableTools\n .map(\n (entry, index) =>\n `import type tool${index} from ${JSON.stringify(toImportSpecifier(generatedDir, path.join(rootDir, entry.sourceFile), { extension: \"js\" }))};`,\n )\n .join(\"\\n\");\n const ids = appCallableTools\n .map((entry, index) => ` ${methodNames[index]}: ${JSON.stringify(entry.id)}`)\n .join(\",\\n\");\n const toolTypes = appCallableTools\n .map(\n (_entry, index) =>\n ` ${methodNames[index]}(params: ToolParams<typeof tool${index}>): Promise<ToolOutput<typeof tool${index}>>;`,\n )\n .join(\"\\n\");\n\n await writeFile(\n path.join(generatedDir, \"tools.ts\"),\n `/**\n * Generated Sidecar widget tool client.\n *\n * Do not edit this file directly; it is regenerated by sidecar build and\n * sidecar dev.\n */\n${imports}\nimport { createToolClient } from \"@sidecar-ai/client\";\nimport type { ToolResult } from \"@sidecar-ai/core\";\n\ntype ExecuteOf<T> = T extends { execute: infer Execute } ? Execute : never;\ntype ToolParams<T> = ExecuteOf<T> extends (params: infer Params, ...args: any[]) => unknown ? Params : never;\ntype RawToolOutput<T> = Awaited<ReturnType<Extract<ExecuteOf<T>, (...args: any[]) => unknown>>>;\ntype ToolOutput<T> = RawToolOutput<T> extends ToolResult<infer Structured, any> ? Structured : never;\n\n/** Machine names keyed by widget-friendly method names. */\nexport const toolIds = {\n${ids}\n} as const;\n\n/** Typed callable tools available to widgets. */\nexport type WidgetTools = {\n${toolTypes}\n};\n\n/** Default widget tool client backed by the host bridge. */\nexport const tools = createToolClient<WidgetTools>(toolIds);\n`,\n );\n}\n\n/** Returns true when MCP Apps metadata allows widgets to call the tool. */\nfunction isAppCallable(entry: SidecarToolManifestEntry): boolean {\n const ui = entry.descriptor._meta?.ui;\n if (!ui || typeof ui !== \"object\" || Array.isArray(ui)) {\n return true;\n }\n\n const visibility = (ui as { visibility?: unknown }).visibility;\n return !Array.isArray(visibility) || visibility.includes(\"app\");\n}\n\n/** Ensures generated widget method names cannot silently collide. */\nfunction uniqueMethodNames(names: string[]): string[] {\n const seen = new Map<string, number>();\n return names.map((name) => {\n const count = seen.get(name) ?? 0;\n seen.set(name, count + 1);\n return count === 0 ? name : `${name}${count + 1}`;\n });\n}\n","/** Project identity loading for generated manifests and plugin packages. */\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { toMachineName } from \"@sidecar-ai/core\";\nimport type { ProjectIdentity } from \"./types.js\";\nimport { existsSyncSafe } from \"./utils.js\";\n\n/** Loads project name, slug, version, and description from config/package metadata. */\nexport async function loadProjectIdentity(\n rootDir: string,\n): Promise<ProjectIdentity> {\n const packageJson = await readOptionalJson(path.join(rootDir, \"package.json\"));\n const configText = await readOptionalText(\n path.join(rootDir, \"sidecar.config.ts\"),\n );\n const name =\n readConfigString(configText, \"name\") ??\n packageJson?.name ??\n path.basename(rootDir);\n const version =\n readConfigString(configText, \"version\") ??\n packageJson?.version ??\n \"0.0.0-dev\";\n const description =\n readConfigString(configText, \"description\") ??\n packageJson?.description ??\n `${name} Sidecar app.`;\n\n return {\n name,\n slug: toMachineName(name).replaceAll(\"_\", \"-\"),\n version,\n description,\n };\n}\n\n/** Reads JSON when the file exists. */\nasync function readOptionalJson(\n filePath: string,\n): Promise<Record<string, string> | undefined> {\n if (!existsSyncSafe(filePath)) {\n return undefined;\n }\n\n return JSON.parse(await readFile(filePath, \"utf8\")) as Record<string, string>;\n}\n\n/** Reads text when the file exists. */\nasync function readOptionalText(filePath: string): Promise<string | undefined> {\n if (!existsSyncSafe(filePath)) {\n return undefined;\n }\n\n return readFile(filePath, \"utf8\");\n}\n\n/** Extracts a simple string property from `sidecar.config.ts` without executing it. */\nfunction readConfigString(\n configText: string | undefined,\n key: string,\n): string | undefined {\n if (!configText) {\n return undefined;\n }\n\n const match = configText.match(\n new RegExp(`${key}\\\\s*:\\\\s*[\"'\\`]([^\"'\\`]+)[\"'\\`]`),\n );\n return match?.[1];\n}\n","/** Plugin package generation for Claude desktop hosts. */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { loadProjectIdentity } from \"./identity.js\";\nimport { emitClaudeAgents } from \"./plugin-components/agents.js\";\nimport { copyCommands } from \"./plugin-components/commands.js\";\nimport { copyHooks } from \"./plugin-components/hooks.js\";\nimport { copyClaudePassthroughDirectories } from \"./plugin-components/passthrough.js\";\nimport { copySkills } from \"./plugin-components/skills.js\";\nimport type { ProjectIdentity, SidecarManifest } from \"./types.js\";\nimport { stripUndefined } from \"./utils.js\";\n\n/** Emits all plugin package targets for the current MCP manifest. */\nexport async function buildPluginPackages(\n rootDir: string,\n outRoot: string,\n manifest: SidecarManifest,\n): Promise<void> {\n const identity = await loadProjectIdentity(rootDir);\n await buildClaudePlugin(rootDir, outRoot, identity, manifest);\n}\n\n/** Emits a Claude/Cowork plugin package that references the hosted MCP server. */\nasync function buildClaudePlugin(\n rootDir: string,\n outRoot: string,\n identity: ProjectIdentity,\n manifest: SidecarManifest,\n): Promise<void> {\n const pluginDir = path.join(outRoot, \"claude-plugin\");\n await mkdir(path.join(pluginDir, \".claude-plugin\"), { recursive: true });\n await copySkills(rootDir, path.join(pluginDir, \"skills\"));\n await copyCommands(rootDir, path.join(pluginDir, \"commands\"));\n await copyHooks(rootDir, path.join(pluginDir, \"hooks\"));\n await emitClaudeAgents(rootDir, path.join(pluginDir, \"agents\"));\n await copyClaudePassthroughDirectories(rootDir, pluginDir);\n\n await writeJson(path.join(pluginDir, \".claude-plugin\", \"plugin.json\"), {\n name: identity.slug,\n version: identity.version,\n description: identity.description,\n displayName: identity.name,\n installationPreference: \"available\",\n });\n\n await writeJson(path.join(pluginDir, \"version.json\"), {\n version: identity.version,\n generatedBy: \"sidecar\",\n });\n\n await writeJson(path.join(pluginDir, \".mcp.json\"), {\n mcpServers: {\n [identity.slug]: {\n type: \"http\",\n url: \"${SIDECAR_MCP_URL}\",\n },\n },\n });\n\n await writeJson(path.join(pluginDir, \"settings.json\"), {\n sidecar: {\n tools: manifest.tools.map((entry) => entry.id),\n resources: manifest.resources.map((entry) => entry.uri),\n prompts: manifest.prompts.map((entry) => entry.name),\n },\n });\n\n await writeFile(\n path.join(pluginDir, \"README.md\"),\n `# ${identity.name} Claude Plugin\n\nThis package was generated by Sidecar.\n\nSet \\`SIDECAR_MCP_URL\\` to the hosted MCP endpoint for this app.\n\nFor local testing, run \\`sidecar dev --tunnel\\` and use the validated HTTPS MCP URL it prints. Temporary quick tunnels are public and best-effort; use a configured tunnel/domain or deployed preview for repeatable testing.\n\nClaude/Cowork plugin-specific components such as skills, slash commands, agents, hooks, output styles, themes, monitors, assets, and bin scripts will be emitted here when the source project defines them.\n`,\n );\n}\n\n/** Writes formatted JSON while dropping undefined fields. */\nasync function writeJson(\n filePath: string,\n value: Record<string, unknown>,\n): Promise<void> {\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(\n filePath,\n `${JSON.stringify(stripUndefined(value), null, 2)}\\n`,\n );\n}\n","/** Claude agent generation from typed Sidecar agent files. */\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n existsSyncSafe,\n readObjectString,\n readObjectStringArray,\n safeFileStem,\n stripUndefined,\n yamlScalar,\n} from \"../utils.js\";\n\n/** Emits `agents/*.md` from reserved agent directories. */\nexport async function emitClaudeAgents(\n rootDir: string,\n destination: string,\n): Promise<void> {\n const source = path.join(rootDir, \"agents\");\n if (!existsSyncSafe(source)) {\n return;\n }\n\n const entries = await readdir(source, { withFileTypes: true });\n const agentDirs = entries.filter(\n (entry) => entry.isDirectory() && existsSyncSafe(path.join(source, entry.name, \"agent.ts\")),\n );\n if (!agentDirs.length) {\n return;\n }\n\n await mkdir(destination, { recursive: true });\n for (const entry of agentDirs) {\n const sourceText = await readFile(path.join(source, entry.name, \"agent.ts\"), \"utf8\");\n const markdown = parseClaudeAgent(\n sourceText,\n entry.name,\n );\n const agentName =\n readObjectString(sourceText, \"name\") ??\n entry.name;\n await writeFile(path.join(destination, `${safeFileStem(agentName)}.md`), markdown);\n }\n}\n\n/** Parses the object-literal agent declaration into Claude markdown. */\nfunction parseClaudeAgent(source: string, fallbackName: string): string {\n const name = readObjectString(source, \"name\") ?? fallbackName;\n const description =\n readObjectString(source, \"description\") ?? `${name} agent.`;\n const prompt = readObjectString(source, \"prompt\") ?? \"\";\n const tools = readObjectStringArray(source, \"tools\");\n const disallowedTools = readObjectStringArray(source, \"disallowedTools\");\n const model = readObjectString(source, \"model\");\n const color = readObjectString(source, \"color\");\n\n const frontmatter = stripUndefined({\n name,\n description,\n model,\n color,\n tools: tools?.join(\", \"),\n \"disallowed-tools\": disallowedTools?.join(\", \"),\n });\n\n return `---\n${Object.entries(frontmatter)\n .map(([key, value]) => `${key}: ${yamlScalar(value)}`)\n .join(\"\\n\")}\n---\n\n${prompt.trim()}\n`;\n}\n","/** Claude slash-command generation from static markdown or typed command files. */\nimport { cp, lstat, mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n existsSyncSafe,\n readObjectString,\n readObjectStringArray,\n safeFileStem,\n stripUndefined,\n yamlScalar,\n} from \"../utils.js\";\n\n/** Copies markdown commands and emits `command.ts` declarations as markdown. */\nexport async function copyCommands(\n rootDir: string,\n destination: string,\n): Promise<void> {\n const source = path.join(rootDir, \"commands\");\n if (!existsSyncSafe(source)) {\n return;\n }\n\n await mkdir(destination, { recursive: true });\n const entries = await readdir(source, { withFileTypes: true });\n for (const entry of entries) {\n const sourcePath = path.join(source, entry.name);\n if (entry.isFile() && entry.name.endsWith(\".md\")) {\n if (await safeCommandCopyFilter(sourcePath)) {\n await cp(sourcePath, path.join(destination, safeFileStem(entry.name.replace(/\\.md$/, \"\")) + \".md\"));\n }\n continue;\n }\n\n if (!entry.isDirectory()) {\n continue;\n }\n\n const dynamicCommand = path.join(sourcePath, \"command.ts\");\n if (existsSyncSafe(dynamicCommand)) {\n const sourceText = await readFile(dynamicCommand, \"utf8\");\n const markdown = parseDynamicCommand(sourceText, entry.name);\n const commandName = readObjectString(sourceText, \"name\") ?? entry.name;\n await writeFile(path.join(destination, `${safeFileStem(commandName)}.md`), markdown);\n continue;\n }\n\n await cp(sourcePath, path.join(destination, entry.name), {\n recursive: true,\n filter: safeCommandCopyFilter,\n });\n }\n}\n\n/** Avoids copying symlinks and common secret files into generated commands. */\nasync function safeCommandCopyFilter(sourcePath: string): Promise<boolean> {\n const basename = path.basename(sourcePath);\n if (basename === \".env\" || basename.startsWith(\".env.\") || basename === \"node_modules\" || basename === \".git\") {\n return false;\n }\n const stat = await lstat(sourcePath);\n return !stat.isSymbolicLink();\n}\n\n/** Parses a typed command declaration into Claude slash-command markdown. */\nfunction parseDynamicCommand(source: string, fallbackName: string): string {\n const name = readObjectString(source, \"name\") ?? fallbackName;\n const description = readObjectString(source, \"description\");\n const prompt = readObjectString(source, \"prompt\") ?? \"\";\n const argumentHint = readObjectString(source, \"argumentHint\");\n const allowedTools = readObjectStringArray(source, \"allowedTools\");\n\n const frontmatter = stripUndefined({\n description,\n \"argument-hint\": argumentHint,\n \"allowed-tools\": allowedTools?.join(\", \"),\n });\n\n const header = Object.keys(frontmatter).length\n ? `---\n${Object.entries(frontmatter)\n .map(([key, value]) => `${key}: ${yamlScalar(value)}`)\n .join(\"\\n\")}\n---\n\n`\n : \"\";\n\n return `${header}${prompt.trim() || `# ${name}`}\\n`;\n}\n","/** Claude hook generation from typed reserved hook files. */\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n Node,\n Project,\n SyntaxKind,\n type ArrayLiteralExpression,\n type CallExpression,\n type Expression,\n type ObjectLiteralExpression,\n} from \"ts-morph\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"../ast.js\";\nimport { existsSyncSafe, stripUndefined } from \"../utils.js\";\n\ntype HookHandler = Record<string, unknown> & {\n type: \"command\" | \"http\";\n};\n\ntype HookMatcher = {\n matcher?: string;\n hooks: HookHandler[];\n};\n\ntype HookConfig = Record<string, HookMatcher[]>;\n\n/** Emits one merged `hooks.json` from reserved hook directories. */\nexport async function copyHooks(\n rootDir: string,\n destination: string,\n): Promise<void> {\n const source = path.join(rootDir, \"hooks\");\n if (!existsSyncSafe(source)) {\n return;\n }\n\n const entries = await readdir(source, { withFileTypes: true });\n const hookDirs = entries.filter(\n (entry) => entry.isDirectory() && existsSyncSafe(path.join(source, entry.name, \"hook.ts\")),\n );\n if (!hookDirs.length) {\n return;\n }\n\n const config: HookConfig = {};\n for (const entry of hookDirs) {\n const filePath = path.join(source, entry.name, \"hook.ts\");\n mergeHooks(config, parseHookFile(await readFile(filePath, \"utf8\"), entry.name));\n }\n\n await mkdir(destination, { recursive: true });\n await writeFile(\n path.join(destination, \"hooks.json\"),\n `${JSON.stringify(config, null, 2)}\\n`,\n );\n}\n\n/** Parses a single reserved hook file into Claude hook JSON fragments. */\nfunction parseHookFile(source: string, fallbackName: string): HookConfig {\n const project = new Project({ useInMemoryFileSystem: true });\n const sourceFile = project.createSourceFile(`${fallbackName}.ts`, source);\n const call =\n resolveDefaultExportCall(sourceFile, \"hook\") ??\n resolveDefaultExportCall(sourceFile, \"hooks\");\n if (!call) {\n throw new Error(`hooks/${fallbackName}/hook.ts must default-export hook({ ... }) or hooks({ ... }).`);\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n throw new Error(`hooks/${fallbackName}/hook.ts must default-export hook({ ... }) or hooks({ ... }).`);\n }\n\n const callee = call.getExpression().getText();\n if (callee === \"hook\" || callee.endsWith(\".hook\")) {\n const entry = parseHookDefinition(definition, fallbackName);\n return { [entry.event]: [stripUndefined({ matcher: entry.matcher, hooks: entry.run })] };\n }\n\n if (callee === \"hooks\" || callee.endsWith(\".hooks\")) {\n return parseHooksDefinition(definition, fallbackName);\n }\n\n throw new Error(`hooks/${fallbackName}/hook.ts must default-export hook({ ... }) or hooks({ ... }).`);\n}\n\n/** Parses `hook({ event, matcher, hooks })`. */\nfunction parseHookDefinition(\n definition: ObjectLiteralExpression,\n fallbackName: string,\n): { event: string; matcher?: string; run: HookHandler[] } {\n const event = readStringProperty(definition, \"event\");\n if (!event) {\n throw new Error(`hooks/${fallbackName}/hook.ts must declare an event string.`);\n }\n\n const hooks = readHookArray(definition, \"run\", fallbackName);\n if (!hooks.length) {\n throw new Error(`hooks/${fallbackName}/hook.ts must declare at least one run handler.`);\n }\n\n return {\n event,\n matcher: readStringProperty(definition, \"matcher\"),\n run: hooks,\n };\n}\n\n/** Parses `hooks({ EventName: [{ matcher, run: [...] }] })`. */\nfunction parseHooksDefinition(\n definition: ObjectLiteralExpression,\n fallbackName: string,\n): HookConfig {\n const config: HookConfig = {};\n\n for (const property of definition.getProperties()) {\n if (!Node.isPropertyAssignment(property)) {\n continue;\n }\n\n const event = property.getName().replace(/^[\"']|[\"']$/g, \"\");\n const initializer = property.getInitializer();\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n throw new Error(`hooks/${fallbackName}/hook.ts event \"${event}\" must be an array.`);\n }\n\n config[event] = initializer.getElements().map((entry) => {\n if (!Node.isObjectLiteralExpression(entry)) {\n throw new Error(`hooks/${fallbackName}/hook.ts event \"${event}\" entries must be objects.`);\n }\n\n return stripUndefined({\n matcher: readStringProperty(entry, \"matcher\"),\n hooks: readHookArray(entry, \"run\", fallbackName),\n });\n });\n }\n\n return config;\n}\n\n/** Reads a hook handler array from an object literal property. */\nfunction readHookArray(\n definition: ObjectLiteralExpression,\n propertyName: string,\n fallbackName: string,\n): HookHandler[] {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return [];\n }\n\n const initializer = property.getInitializer();\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n throw new Error(`hooks/${fallbackName}/hook.ts ${propertyName} must be an array.`);\n }\n\n return parseHookHandlers(initializer, fallbackName);\n}\n\n/** Parses hook handlers written as object literals or helper calls. */\nfunction parseHookHandlers(\n handlers: ArrayLiteralExpression,\n fallbackName: string,\n): HookHandler[] {\n return handlers.getElements().map((handler) => parseHookHandler(handler, fallbackName));\n}\n\n/** Parses one command/http hook handler. */\nfunction parseHookHandler(\n handler: Expression,\n fallbackName: string,\n): HookHandler {\n if (Node.isObjectLiteralExpression(handler)) {\n const type = readStringProperty(handler, \"type\");\n if (type !== \"command\" && type !== \"http\") {\n throw new Error(`hooks/${fallbackName}/hook.ts hook handlers need type \"command\" or \"http\".`);\n }\n return objectLiteralToRecord(handler) as HookHandler;\n }\n\n if (Node.isCallExpression(handler)) {\n return parseHookHandlerCall(handler, fallbackName);\n }\n\n throw new Error(`hooks/${fallbackName}/hook.ts hook handlers must be objects or helper calls.`);\n}\n\n/** Parses `commandHook(...)` and `httpHook(...)` helper calls. */\nfunction parseHookHandlerCall(\n handler: CallExpression,\n fallbackName: string,\n): HookHandler {\n const callee = handler.getExpression().getText();\n const [firstArg, optionsArg] = handler.getArguments();\n const first = firstArg ? stringFromExpression(firstArg) : undefined;\n if (!first) {\n throw new Error(`hooks/${fallbackName}/hook.ts hook helper calls require a string first argument.`);\n }\n\n const options =\n optionsArg && Node.isObjectLiteralExpression(optionsArg)\n ? objectLiteralToRecord(optionsArg)\n : {};\n\n if (callee.endsWith(\"commandHook\")) {\n return stripUndefined({\n type: \"command\",\n command: first,\n ...options,\n }) as HookHandler;\n }\n\n if (callee.endsWith(\"httpHook\")) {\n return stripUndefined({\n type: \"http\",\n url: first,\n ...options,\n }) as HookHandler;\n }\n\n throw new Error(`hooks/${fallbackName}/hook.ts uses an unsupported hook helper \"${callee}\".`);\n}\n\n/** Converts a simple object literal into JSON-compatible data. */\nfunction objectLiteralToRecord(object: ObjectLiteralExpression): Record<string, unknown> {\n const record: Record<string, unknown> = {};\n\n for (const property of object.getProperties()) {\n if (!Node.isPropertyAssignment(property)) {\n continue;\n }\n\n const key = property.getName().replace(/^[\"']|[\"']$/g, \"\");\n const initializer = property.getInitializer();\n if (!initializer) {\n continue;\n }\n record[key] = valueFromExpression(initializer);\n }\n\n return stripUndefined(record);\n}\n\n/** Reads a simple string property from an object literal. */\nfunction readStringProperty(\n object: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = object.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n\n const initializer = property.getInitializer();\n return initializer ? stringFromExpression(initializer) : undefined;\n}\n\n/** Converts supported literal expressions into JSON-compatible values. */\nfunction valueFromExpression(expression: Expression): unknown {\n const string = stringFromExpression(expression);\n if (string !== undefined) {\n return string;\n }\n\n if (expression.getKind() === SyntaxKind.TrueKeyword) {\n return true;\n }\n if (expression.getKind() === SyntaxKind.FalseKeyword) {\n return false;\n }\n if (Node.isNumericLiteral(expression)) {\n return Number(expression.getLiteralText());\n }\n if (Node.isArrayLiteralExpression(expression)) {\n return expression.getElements().map(valueFromExpression);\n }\n if (Node.isObjectLiteralExpression(expression)) {\n return objectLiteralToRecord(expression);\n }\n\n return undefined;\n}\n\n/** Reads string literals and no-substitution template literals. */\nfunction stringFromExpression(expression: Node): string | undefined {\n if (Node.isStringLiteral(expression) || Node.isNoSubstitutionTemplateLiteral(expression)) {\n return expression.getLiteralText();\n }\n return undefined;\n}\n\n/** Merges parsed hook config fragments preserving event order. */\nfunction mergeHooks(target: HookConfig, source: HookConfig): void {\n for (const [event, matchers] of Object.entries(source)) {\n target[event] = [...(target[event] ?? []), ...matchers];\n }\n}\n","/** Claude plugin directory passthrough helpers. */\nimport { cp, lstat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { existsSyncSafe } from \"../utils.js\";\n\n/** Copies Claude-specific directories that Sidecar does not transform yet. */\nexport async function copyClaudePassthroughDirectories(\n rootDir: string,\n pluginDir: string,\n): Promise<void> {\n for (const directory of [\n \"assets\",\n \"bin\",\n \"monitors\",\n \"output-styles\",\n \"themes\",\n ]) {\n const source = path.join(rootDir, directory);\n if (!existsSyncSafe(source)) {\n continue;\n }\n\n await cp(source, path.join(pluginDir, directory), {\n recursive: true,\n filter: safePluginCopyFilter,\n });\n }\n}\n\n/** Avoids accidentally packaging symlinks, env files, or package managers' metadata. */\nasync function safePluginCopyFilter(sourcePath: string): Promise<boolean> {\n const basename = path.basename(sourcePath);\n if (\n basename === \"node_modules\" ||\n basename === \".git\" ||\n basename === \".env\" ||\n basename.startsWith(\".env.\")\n ) {\n return false;\n }\n\n const stat = await lstat(sourcePath);\n return !stat.isSymbolicLink();\n}\n","/** Skill copying and typed skill generation for plugin outputs. */\nimport { existsSync } from \"node:fs\";\nimport { cp, lstat, mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { existsSyncSafe, readObjectString, yamlScalar } from \"../utils.js\";\n\n/** Copies static skills or emits `skill.ts` declarations as `SKILL.md`. */\nexport async function copySkills(\n rootDir: string,\n destination: string,\n): Promise<void> {\n const source = path.join(rootDir, \"skills\");\n if (!existsSyncSafe(source)) {\n return;\n }\n\n await mkdir(destination, { recursive: true });\n const entries = await readdir(source, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n const sourceDir = path.join(source, entry.name);\n const destinationDir = path.join(destination, entry.name);\n const staticSkill = path.join(sourceDir, \"SKILL.md\");\n const dynamicSkill = path.join(sourceDir, \"skill.ts\");\n\n await mkdir(destinationDir, { recursive: true });\n if (existsSync(staticSkill)) {\n await cp(sourceDir, destinationDir, {\n recursive: true,\n filter: async (sourcePath) =>\n !sourcePath.endsWith(`${path.sep}skill.ts`) &&\n await safeSkillCopyFilter(sourcePath),\n });\n } else if (existsSync(dynamicSkill)) {\n const generated = parseDynamicSkill(\n await readFile(dynamicSkill, \"utf8\"),\n entry.name,\n );\n await writeFile(path.join(destinationDir, \"SKILL.md\"), generated);\n }\n }\n}\n\n/** Avoids copying symlinks and common secret files into generated plugins. */\nasync function safeSkillCopyFilter(sourcePath: string): Promise<boolean> {\n const basename = path.basename(sourcePath);\n if (basename === \".env\" || basename.startsWith(\".env.\") || basename === \"node_modules\" || basename === \".git\") {\n return false;\n }\n const stat = await lstat(sourcePath);\n return !stat.isSymbolicLink();\n}\n\n/** Parses a typed skill declaration into a `SKILL.md` document. */\nfunction parseDynamicSkill(source: string, fallbackName: string): string {\n const name = readObjectString(source, \"name\") ?? fallbackName;\n const description =\n readObjectString(source, \"description\") ?? `${name} skill.`;\n const body = readObjectString(source, \"body\") ?? \"\";\n\nreturn `---\nname: ${yamlScalar(name)}\ndescription: ${yamlScalar(description)}\n---\n\n${body.trim()}\n`;\n}\n","/** Static analysis for reserved MCP prompt files. */\nimport {\n createPromptDescriptor,\n type McpIcon,\n type PromptArgInput,\n type PromptArgsDefinition,\n} from \"@sidecar-ai/core\";\nimport { readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n Node,\n SyntaxKind,\n type ObjectLiteralExpression,\n type SourceFile,\n} from \"ts-morph\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"./ast.js\";\nimport { CompilerError } from \"./errors.js\";\nimport { createProject } from \"./project.js\";\nimport type { SidecarPromptManifestEntry } from \"./types.js\";\nimport { existsSyncSafe, safePathSegment } from \"./utils.js\";\n\n/** Finds all Sidecar prompt files under `prompts/`. */\nexport async function analyzeProjectPrompts(rootDir: string): Promise<SidecarPromptManifestEntry[]> {\n const promptFiles = await findPromptFiles(path.join(rootDir, \"prompts\"));\n if (promptFiles.length === 0) {\n return [];\n }\n\n const project = createProject(rootDir);\n return promptFiles.map((filePath) =>\n analyzePromptFile(project.addSourceFileAtPath(filePath), rootDir),\n );\n}\n\n/** Analyzes one `prompt.ts` source file into a compiler manifest entry. */\nexport function analyzePromptFile(\n sourceFile: SourceFile,\n rootDir: string,\n): SidecarPromptManifestEntry {\n const definition = findPromptDefinition(sourceFile);\n const absoluteFile = sourceFile.getFilePath();\n const directory = path.basename(path.dirname(absoluteFile));\n const name = getOptionalStringProperty(definition, \"name\") ?? safePathSegment(directory);\n const title = getRequiredStringProperty(definition, \"title\", sourceFile);\n const description = getOptionalStringProperty(definition, \"description\");\n const args = readArgs(definition);\n const descriptor = createPromptDescriptor({\n name,\n title,\n description,\n args,\n icons: readIcons(definition),\n });\n\n if (!getMethodOrFunctionProperty(definition, \"run\")) {\n throw new CompilerError(sourceFile, \"prompt({ ... }) must include a run method.\");\n }\n\n return {\n sourceFile: path.relative(rootDir, absoluteFile),\n directory,\n name,\n title,\n description,\n args,\n descriptor,\n };\n}\n\n/** Finds immediate `prompts/<name>/prompt.ts` files in deterministic order. */\nasync function findPromptFiles(promptsDir: string): Promise<string[]> {\n if (!existsSyncSafe(promptsDir)) {\n return [];\n }\n\n const entries = await readdir(promptsDir, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n const filePath = path.join(promptsDir, entry.name, \"prompt.ts\");\n if (existsSyncSafe(filePath)) {\n files.push(filePath);\n }\n }\n return files.sort((left, right) => left.localeCompare(right));\n}\n\n/** Locates the default-exported `prompt({ ... })` object literal. */\nfunction findPromptDefinition(sourceFile: SourceFile): ObjectLiteralExpression {\n const call = resolveDefaultExportCall(sourceFile, \"prompt\");\n if (!call) {\n throw new CompilerError(\n sourceFile,\n \"prompt.ts must default-export prompt({ ... }) or an identifier initialized with prompt({ ... }).\",\n );\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n throw new CompilerError(sourceFile, \"prompt(...) must receive one object literal.\");\n }\n return definition;\n}\n\n/** Reads a required string property from the prompt object. */\nfunction getRequiredStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n sourceFile: SourceFile,\n): string {\n const value = getOptionalStringProperty(definition, propertyName);\n if (value === undefined || !value.trim()) {\n throw new CompilerError(\n sourceFile,\n `prompt({ ... }) must include a non-empty ${propertyName} string.`,\n );\n }\n return value;\n}\n\n/** Reads an optional string literal property. */\nfunction getOptionalStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isStringLiteral(initializer)\n ? initializer.getLiteralText()\n : undefined;\n}\n\n/** Reads `args` into prompt argument descriptors. */\nfunction readArgs(definition: ObjectLiteralExpression): PromptArgsDefinition | undefined {\n const initializer = readObjectProperty(definition, \"args\");\n if (!initializer) {\n return undefined;\n }\n\n const args: PromptArgsDefinition = {};\n for (const property of initializer.getProperties()) {\n if (!Node.isPropertyAssignment(property)) {\n continue;\n }\n const value = readArgInput(property.getInitializer());\n if (value !== undefined) {\n args[property.getName().replace(/^[\"']|[\"']$/g, \"\")] = value;\n }\n }\n return Object.keys(args).length ? args : undefined;\n}\n\n/** Reads one supported prompt arg declaration. */\nfunction readArgInput(node: Node | undefined): PromptArgInput | undefined {\n const initializer = unwrapExpression(node);\n if (!initializer) {\n return undefined;\n }\n if (Node.isStringLiteral(initializer)) {\n return initializer.getLiteralText();\n }\n if (Node.isArrayLiteralExpression(initializer)) {\n return initializer\n .getElements()\n .filter(Node.isLiteralExpression)\n .map((element) => element.getLiteralText());\n }\n if (Node.isObjectLiteralExpression(initializer)) {\n return {\n description: getOptionalStringProperty(initializer, \"description\"),\n required: readBooleanProperty(initializer, \"required\"),\n };\n }\n return undefined;\n}\n\n/** Reads an optional boolean literal property. */\nfunction readBooleanProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): boolean | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n if (initializer.getKind() === SyntaxKind.TrueKeyword) return true;\n if (initializer.getKind() === SyntaxKind.FalseKeyword) return false;\n return undefined;\n}\n\n/** Reads a supported method/function property without executing code. */\nfunction getMethodOrFunctionProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): Node | undefined {\n const property = definition.getProperty(propertyName);\n if (Node.isMethodDeclaration(property)) {\n return property;\n }\n if (property && Node.isPropertyAssignment(property)) {\n const initializer = property.getInitializer();\n if (\n initializer &&\n (Node.isArrowFunction(initializer) || Node.isFunctionExpression(initializer))\n ) {\n return initializer;\n }\n }\n return undefined;\n}\n\n/** Reads MCP icon metadata from a simple object array. */\nfunction readIcons(definition: ObjectLiteralExpression): McpIcon[] | undefined {\n const property = definition.getProperty(\"icons\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n\n const icons = initializer.getElements().flatMap((element) => {\n const object = unwrapExpression(element);\n if (!object || !Node.isObjectLiteralExpression(object)) {\n return [];\n }\n const src = getOptionalStringProperty(object, \"src\");\n if (!src) {\n return [];\n }\n return [{\n src,\n mimeType: getOptionalStringProperty(object, \"mimeType\"),\n sizes: readStringArrayProperty(object, \"sizes\"),\n }];\n });\n return icons.length ? icons : undefined;\n}\n\n/** Reads a nested object literal property. */\nfunction readObjectProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): ObjectLiteralExpression | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** Reads a string literal array property. */\nfunction readStringArrayProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string[] | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n return initializer\n .getElements()\n .filter(Node.isStringLiteral)\n .map((element) => element.getLiteralText());\n}\n","/** Static analysis for reserved MCP resource files. */\nimport {\n createResourceDescriptor,\n type McpIcon,\n type ResourceAnnotations,\n} from \"@sidecar-ai/core\";\nimport { readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n Node,\n SyntaxKind,\n type ObjectLiteralExpression,\n type SourceFile,\n} from \"ts-morph\";\nimport { resolveDefaultExportCall, unwrapExpression } from \"./ast.js\";\nimport { CompilerError } from \"./errors.js\";\nimport { createProject } from \"./project.js\";\nimport type { SidecarResourceManifestEntry } from \"./types.js\";\nimport { existsSyncSafe, safePathSegment } from \"./utils.js\";\n\n/** Finds all Sidecar resource files under `resources/`. */\nexport async function analyzeProjectResources(rootDir: string): Promise<SidecarResourceManifestEntry[]> {\n const resourceFiles = await findResourceFiles(path.join(rootDir, \"resources\"));\n if (resourceFiles.length === 0) {\n return [];\n }\n\n const project = createProject(rootDir);\n return resourceFiles.map((filePath) =>\n analyzeResourceFile(project.addSourceFileAtPath(filePath), rootDir),\n );\n}\n\n/** Analyzes one `resource.ts` source file into a compiler manifest entry. */\nexport function analyzeResourceFile(\n sourceFile: SourceFile,\n rootDir: string,\n): SidecarResourceManifestEntry {\n const definition = findResourceDefinition(sourceFile);\n const absoluteFile = sourceFile.getFilePath();\n const directory = path.basename(path.dirname(absoluteFile));\n const defaultUri = `sidecar://resources/${safePathSegment(directory)}`;\n const name = getRequiredStringProperty(definition, \"name\", sourceFile);\n const uri = getOptionalStringProperty(definition, \"uri\") ?? defaultUri;\n const descriptor = createResourceDescriptor({\n uri,\n name,\n title: getOptionalStringProperty(definition, \"title\"),\n description: getOptionalStringProperty(definition, \"description\"),\n mimeType: getOptionalStringProperty(definition, \"mimeType\"),\n size: getOptionalNumberProperty(definition, \"size\"),\n icons: readIcons(definition),\n annotations: readAnnotations(definition),\n });\n\n if (!getMethodOrFunctionProperty(definition, \"read\")) {\n throw new CompilerError(sourceFile, \"resource({ ... }) must include a read method.\");\n }\n\n return {\n sourceFile: path.relative(rootDir, absoluteFile),\n directory,\n uri,\n name,\n title: descriptor.title,\n description: descriptor.description,\n mimeType: descriptor.mimeType,\n size: descriptor.size,\n annotations: descriptor.annotations,\n subscribe: readBooleanProperty(definition, \"subscribe\"),\n descriptor,\n };\n}\n\n/** Finds immediate `resources/<name>/resource.ts` files in deterministic order. */\nasync function findResourceFiles(resourcesDir: string): Promise<string[]> {\n if (!existsSyncSafe(resourcesDir)) {\n return [];\n }\n\n const entries = await readdir(resourcesDir, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n const filePath = path.join(resourcesDir, entry.name, \"resource.ts\");\n if (existsSyncSafe(filePath)) {\n files.push(filePath);\n }\n }\n return files.sort((left, right) => left.localeCompare(right));\n}\n\n/** Locates the default-exported `resource({ ... })` object literal. */\nfunction findResourceDefinition(sourceFile: SourceFile): ObjectLiteralExpression {\n const call = resolveDefaultExportCall(sourceFile, \"resource\");\n if (!call) {\n throw new CompilerError(\n sourceFile,\n \"resource.ts must default-export resource({ ... }) or an identifier initialized with resource({ ... }).\",\n );\n }\n\n const definition = unwrapExpression(call.getArguments()[0]);\n if (!definition || !Node.isObjectLiteralExpression(definition)) {\n throw new CompilerError(sourceFile, \"resource(...) must receive one object literal.\");\n }\n return definition;\n}\n\n/** Reads a required string property from the resource object. */\nfunction getRequiredStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n sourceFile: SourceFile,\n): string {\n const value = getOptionalStringProperty(definition, propertyName);\n if (value === undefined || !value.trim()) {\n throw new CompilerError(\n sourceFile,\n `resource({ ... }) must include a non-empty ${propertyName} string.`,\n );\n }\n return value;\n}\n\n/** Reads an optional string literal property. */\nfunction getOptionalStringProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isStringLiteral(initializer)\n ? initializer.getLiteralText()\n : undefined;\n}\n\n/** Reads an optional number literal property. */\nfunction getOptionalNumberProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): number | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isNumericLiteral(initializer)\n ? Number(initializer.getLiteralText())\n : undefined;\n}\n\n/** Reads an optional boolean literal property. */\nfunction readBooleanProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): boolean | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer) {\n return undefined;\n }\n if (initializer.getKind() === SyntaxKind.TrueKeyword) return true;\n if (initializer.getKind() === SyntaxKind.FalseKeyword) return false;\n return undefined;\n}\n\n/** Reads a supported method/function property without executing code. */\nfunction getMethodOrFunctionProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): Node | undefined {\n const property = definition.getProperty(propertyName);\n if (Node.isMethodDeclaration(property)) {\n return property;\n }\n if (property && Node.isPropertyAssignment(property)) {\n const initializer = property.getInitializer();\n if (\n initializer &&\n (Node.isArrowFunction(initializer) || Node.isFunctionExpression(initializer))\n ) {\n return initializer;\n }\n }\n return undefined;\n}\n\n/** Extracts static MCP annotations from the resource object. */\nfunction readAnnotations(\n definition: ObjectLiteralExpression,\n): ResourceAnnotations | undefined {\n const initializer = readObjectProperty(definition, \"annotations\");\n if (!initializer) {\n return undefined;\n }\n\n const annotations: ResourceAnnotations = {};\n const audience = readStringArrayProperty(initializer, \"audience\")\n ?.filter((value): value is \"user\" | \"assistant\" => value === \"user\" || value === \"assistant\");\n const priority = getOptionalNumberProperty(initializer, \"priority\");\n const lastModified = getOptionalStringProperty(initializer, \"lastModified\");\n if (audience?.length) annotations.audience = audience;\n if (priority !== undefined) annotations.priority = priority;\n if (lastModified) annotations.lastModified = lastModified;\n return Object.keys(annotations).length ? annotations : undefined;\n}\n\n/** Reads MCP icon metadata from a simple object array. */\nfunction readIcons(definition: ObjectLiteralExpression): McpIcon[] | undefined {\n const property = definition.getProperty(\"icons\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n\n const icons = initializer.getElements().flatMap((element) => {\n const object = unwrapExpression(element);\n if (!object || !Node.isObjectLiteralExpression(object)) {\n return [];\n }\n const src = getOptionalStringProperty(object, \"src\");\n if (!src) {\n return [];\n }\n return [{\n src,\n mimeType: getOptionalStringProperty(object, \"mimeType\"),\n sizes: readStringArrayProperty(object, \"sizes\"),\n }];\n });\n return icons.length ? icons : undefined;\n}\n\n/** Reads a nested object literal property. */\nfunction readObjectProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): ObjectLiteralExpression | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n return initializer && Node.isObjectLiteralExpression(initializer)\n ? initializer\n : undefined;\n}\n\n/** Reads a string literal array property. */\nfunction readStringArrayProperty(\n definition: ObjectLiteralExpression,\n propertyName: string,\n): string[] | undefined {\n const property = definition.getProperty(propertyName);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = unwrapExpression(property.getInitializer());\n if (!initializer || !Node.isArrayLiteralExpression(initializer)) {\n return undefined;\n }\n return initializer\n .getElements()\n .filter(Node.isStringLiteral)\n .map((element) => element.getLiteralText());\n}\n","/** Hostable Node server artifact generation for Sidecar builds. */\nimport { existsSync } from \"node:fs\";\nimport { mkdir, rm, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { build as esbuild } from \"esbuild\";\nimport type { ProjectIdentity, SidecarHost, SidecarManifest } from \"./types.js\";\nimport { toImportSpecifier } from \"./utils.js\";\n\n/** Relative location of the generated server entrypoint inside a build output. */\nexport const SERVER_ENTRYPOINT = \"server/index.js\";\n\n/** Relative location of the Vercel Build Output API function directory. */\nexport const VERCEL_FUNCTION_DIR = \"functions/api/sidecar.func\";\n\n/** Relative location of the Vercel Build Output API function entrypoint. */\nexport const VERCEL_ENTRYPOINT = `${VERCEL_FUNCTION_DIR}/index.js`;\n\n/** File name Vercel invokes inside the Build Output API function directory. */\nconst VERCEL_HANDLER_FILE = \"index.js\";\n\n/** Emits a bundled Node MCP server that can be started with `node server/index.js`. */\nexport async function buildServerOutput(\n rootDir: string,\n outDir: string,\n manifest: SidecarManifest,\n identity: ProjectIdentity,\n host: SidecarHost = \"node\",\n options: { vercelOutputDir?: string } = {},\n): Promise<void> {\n const cacheDir = path.join(rootDir, \".sidecar\", \"cache\", \"server\");\n await mkdir(cacheDir, { recursive: true });\n\n const entryFile = path.join(cacheDir, \"index.ts\");\n await writeFile(entryFile, renderServerEntry(rootDir, entryFile, manifest, identity));\n\n const serverFile = path.join(outDir, SERVER_ENTRYPOINT);\n await mkdir(path.dirname(serverFile), { recursive: true });\n await esbuild({\n absWorkingDir: rootDir,\n alias: sidecarBundleAliases(rootDir),\n banner: {\n js: `import { createRequire as __sidecarCreateRequire } from \"node:module\";\\nconst require = __sidecarCreateRequire(import.meta.url);`,\n },\n bundle: true,\n entryPoints: [entryFile],\n format: \"esm\",\n legalComments: \"none\",\n minify: false,\n nodePaths: [\n path.join(rootDir, \"node_modules\"),\n path.join(process.cwd(), \"node_modules\"),\n ],\n outfile: serverFile,\n platform: \"node\",\n sourcemap: false,\n target: \"node20\",\n });\n\n await writeFile(path.join(outDir, \"package.json\"), renderServerPackage(identity));\n if (host === \"vercel\") {\n const vercelOutputDir = options.vercelOutputDir ?? outDir;\n await rm(path.join(vercelOutputDir, \"api\"), { recursive: true, force: true });\n await rm(path.join(vercelOutputDir, \"vercel.json\"), { force: true });\n await writeFile(path.join(outDir, VERCEL_HANDLER_FILE), renderVercelEntrypoint());\n await writeFile(path.join(outDir, \".vc-config.json\"), renderVercelFunctionConfig());\n await mkdir(vercelOutputDir, { recursive: true });\n await writeFile(path.join(vercelOutputDir, \"config.json\"), renderVercelOutputConfig());\n } else {\n await rm(path.join(outDir, \"api\"), { recursive: true, force: true });\n await rm(path.join(outDir, \"vercel.json\"), { force: true });\n }\n}\n\n/** Renders the temporary TypeScript entrypoint that esbuild bundles. */\nfunction renderServerEntry(\n rootDir: string,\n entryFile: string,\n manifest: SidecarManifest,\n identity: ProjectIdentity,\n): string {\n const entryDir = path.dirname(entryFile);\n const tools = manifest.tools;\n const resources = manifest.resources;\n const prompts = manifest.prompts;\n\n const imports = [\n `import { readFileSync, realpathSync } from \"node:fs\";`,\n `import { createServer } from \"node:http\";`,\n `import { pathToFileURL } from \"node:url\";`,\n `import { createSidecarHttpHandler } from \"@sidecar-ai/server\";`,\n `import { isSidecarAuth } from \"@sidecar-ai/auth\";`,\n `import { isSidecarPrompt, isSidecarRemote, isSidecarResource, isSidecarTool } from \"@sidecar-ai/core\";`,\n `import { isSidecarProxy } from \"@sidecar-ai/server/proxy\";`,\n ...tools.map((entry, index) =>\n `import tool${index} from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, entry.sourceFile)))};`,\n ),\n ...resources.map((entry, index) =>\n `import resource${index} from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, entry.sourceFile)))};`,\n ),\n ...prompts.map((entry, index) =>\n `import prompt${index} from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, entry.sourceFile)))};`,\n ),\n existsSync(path.join(rootDir, \"auth.ts\"))\n ? `import authExport from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, \"auth.ts\")))};`\n : `const authExport = undefined;`,\n existsSync(path.join(rootDir, \"proxy.ts\"))\n ? `import proxyExport from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, \"proxy.ts\")))};`\n : `const proxyExport = undefined;`,\n existsSync(path.join(rootDir, \"remote.ts\"))\n ? `import remoteExport from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, \"remote.ts\")))};`\n : `const remoteExport = undefined;`,\n existsSync(path.join(rootDir, \"sidecar.config.ts\"))\n ? `import configExport from ${JSON.stringify(toImportSpecifier(entryDir, path.join(rootDir, \"sidecar.config.ts\")))};`\n : `const configExport = undefined;`,\n ].join(\"\\n\");\n\n return `${imports}\n\nconst manifest = ${JSON.stringify(manifest, null, 2)};\nconst identity = ${JSON.stringify(identity, null, 2)};\n\nconst loadedAuth = authExport === undefined ? undefined : assertAuth(authExport);\nconst auth = loadedAuth && process.env.SIDECAR_MCP_URL\n ? loadedAuth.withResource(process.env.SIDECAR_MCP_URL)\n : loadedAuth;\nconst proxy = proxyExport === undefined ? undefined : assertProxy(proxyExport);\nconst remoteExecution = manifest.codeMode?.remoteExecution\n ? assertRemote(remoteExport)\n : undefined;\nconst runtimeConfig = configExport && typeof configExport === \"object\" ? configExport : undefined;\n\nif (auth && !process.env.SIDECAR_MCP_URL) {\n console.warn(\"Sidecar auth is enabled. Set SIDECAR_MCP_URL to the public https://.../mcp URL before hosting.\");\n}\n\nexport const handler = createSidecarHttpHandler({\n name: identity.name,\n version: identity.version,\n path: process.env.SIDECAR_MCP_PATH ?? \"/mcp\",\n publicUrl: process.env.SIDECAR_PUBLIC_URL ?? process.env.SIDECAR_MCP_URL,\n auth,\n proxy,\n codeMode: manifest.codeMode\n ? {\n enabled: true,\n unsafe: manifest.codeMode.unsafe,\n render: manifest.codeMode.render,\n widgetMeta: manifest.codeMode.widget?.resourceUri\n ? {\n ui: { resourceUri: manifest.codeMode.widget.resourceUri },\n \"ui/resourceUri\": manifest.codeMode.widget.resourceUri,\n ...(manifest.target === \"chatgpt\" ? { \"openai/outputTemplate\": manifest.codeMode.widget.resourceUri } : {}),\n }\n : undefined,\n }\n : undefined,\n remoteExecution,\n tools: [\n${tools.map((entry, index) => ` loadTool(${JSON.stringify(entry.sourceFile)}, tool${index}, manifest.tools[${index}].descriptor),`).join(\"\\n\")}\n ],\n resources: [\n${renderWidgetResources(manifest)}\n${resources.map((entry, index) => ` loadResource(${JSON.stringify(entry.sourceFile)}, resource${index}, manifest.resources[${index}]),`).join(\"\\n\")}\n ],\n resourceTemplates: manifest.resourceTemplates.map((entry) => ({ descriptor: entry.descriptor })),\n prompts: [\n${prompts.map((entry, index) => ` loadPrompt(${JSON.stringify(entry.sourceFile)}, prompt${index}, manifest.prompts[${index}].descriptor),`).join(\"\\n\")}\n ],\n capabilities: {\n tools: runtimeConfig?.tools ?? manifest.config.tools,\n resources: runtimeConfig?.resources ?? manifest.config.resources,\n prompts: runtimeConfig?.prompts ?? manifest.config.prompts,\n },\n pagination: runtimeConfig?.pagination ?? {\n pageSize: manifest.config.pagination.pageSize,\n },\n});\n\nexport default handler;\n\nexport const server = createServer(handler);\n\nif (isDirectRun()) {\n const port = readPort();\n const host = process.env.SIDECAR_HOST ?? process.env.HOST ?? \"0.0.0.0\";\n server.listen(port, host, () => {\n const localHost = host === \"0.0.0.0\" ? \"127.0.0.1\" : host;\n console.log(\\`MCP running on Streamable HTTP at http://\\${localHost}:\\${port}\\${process.env.SIDECAR_MCP_PATH ?? \"/mcp\"}\\`);\n printRuntimeUrls(localHost, port);\n });\n\n process.on(\"SIGTERM\", () => shutdown());\n process.on(\"SIGINT\", () => shutdown());\n}\n\nfunction printRuntimeUrls(localHost, port) {\n const mcpPath = process.env.SIDECAR_MCP_PATH ?? \"/mcp\";\n console.log(\"Sidecar URLs:\");\n console.log(\\` Local MCP: http://\\${localHost}:\\${port}\\${mcpPath}\\`);\n console.log(\\` Public MCP: \\${process.env.SIDECAR_MCP_URL ?? \"set SIDECAR_MCP_URL=https://your-host.example.com\" + mcpPath}\\`);\n if (process.env.SIDECAR_PUBLIC_URL) {\n console.log(\\` Public base: \\${process.env.SIDECAR_PUBLIC_URL}\\`);\n }\n}\n\nfunction loadTool(sourceFile, value, descriptor) {\n const tool = unwrapRuntimeDefault(value);\n if (!isSidecarTool(tool)) {\n throw new Error(\\`\\${sourceFile} did not default-export a Sidecar tool.\\`);\n }\n return { tool, descriptor };\n}\n\nfunction loadResource(sourceFile, value, entry) {\n const resource = unwrapRuntimeDefault(value);\n if (!isSidecarResource(resource)) {\n throw new Error(\\`\\${sourceFile} did not default-export a Sidecar resource.\\`);\n }\n return {\n uri: entry.uri,\n descriptor: entry.descriptor,\n resource,\n };\n}\n\nfunction loadPrompt(sourceFile, value, descriptor) {\n const prompt = unwrapRuntimeDefault(value);\n if (!isSidecarPrompt(prompt)) {\n throw new Error(\\`\\${sourceFile} did not default-export a Sidecar prompt.\\`);\n }\n return { prompt, descriptor };\n}\n\nfunction assertAuth(value) {\n const authValue = unwrapRuntimeDefault(value);\n if (!isSidecarAuth(authValue)) {\n throw new Error(\"auth.ts must default-export auth({ ... }) from sidecar-ai.\");\n }\n return authValue;\n}\n\nfunction assertProxy(value) {\n const proxyValue = unwrapRuntimeDefault(value);\n if (!isSidecarProxy(proxyValue)) {\n throw new Error(\"proxy.ts must default-export proxy({ ... }) from @sidecar-ai/server/proxy.\");\n }\n return proxyValue;\n}\n\nfunction assertRemote(value) {\n const remoteValue = unwrapRuntimeDefault(value);\n if (!isSidecarRemote(remoteValue)) {\n throw new Error(\"remote.ts must default-export remote({ execute }) from sidecar-ai/remote.\");\n }\n return remoteValue;\n}\n\nfunction unwrapRuntimeDefault(value) {\n if (\n value &&\n typeof value === \"object\" &&\n \"default\" in value &&\n Object.keys(value).every((key) => key === \"default\" || key === \"__esModule\")\n ) {\n return unwrapRuntimeDefault(value.default);\n }\n return value;\n}\n\nfunction readWidget(outputFile) {\n return readFileSync(new URL(\\`../\\${outputFile}\\`, import.meta.url), \"utf8\");\n}\n\nfunction readPort() {\n const raw = process.env.PORT ?? process.env.SIDECAR_PORT ?? \"3001\";\n const port = Number(raw);\n if (!Number.isInteger(port) || port < 0 || port > 65535) {\n throw new Error(\\`Invalid PORT/SIDECAR_PORT value: \\${raw}\\`);\n }\n return port;\n}\n\nfunction isDirectRun() {\n const entry = process.argv[1];\n if (!entry) {\n return false;\n }\n\n return import.meta.url === pathToFileURL(realpathSync(entry)).href;\n}\n\nfunction shutdown() {\n server.close(() => process.exit(0));\n}\n`;\n}\n\n/** Renders generated widget resources as static MCP resource entries. */\nfunction renderWidgetResources(manifest: SidecarManifest): string {\n const toolWidgets = manifest.tools\n .filter((entry) => entry.widget?.outputFile)\n .map((entry) => ` {\n uri: ${JSON.stringify(entry.widget?.resourceUri)},\n name: ${JSON.stringify(entry.name)},\n description: ${JSON.stringify(entry.widget?.options?.description)},\n mimeType: \"text/html;profile=mcp-app\",\n text: readWidget(${JSON.stringify(entry.widget?.outputFile)}),\n _meta: ${JSON.stringify(entry.widget?.resourceMeta ?? undefined)},\n },`)\n .join(\"\\n\");\n const codeModeWidget = manifest.codeMode?.widget?.outputFile\n ? ` {\n uri: ${JSON.stringify(manifest.codeMode.widget.resourceUri)},\n name: \"Execute Code\",\n description: ${JSON.stringify(manifest.codeMode.widget.options?.description)},\n mimeType: \"text/html;profile=mcp-app\",\n text: readWidget(${JSON.stringify(manifest.codeMode.widget.outputFile)}),\n _meta: ${JSON.stringify(manifest.codeMode.widget.resourceMeta ?? undefined)},\n },`\n : \"\";\n return [codeModeWidget, toolWidgets].filter(Boolean).join(\"\\n\");\n}\n\n/** Writes a minimal package manifest for hosts that run the build output directly. */\nfunction renderServerPackage(identity: ProjectIdentity): string {\n return `${JSON.stringify({\n name: `${identity.slug}-sidecar-server`,\n version: identity.version,\n private: true,\n type: \"module\",\n scripts: {\n start: \"node server/index.js\",\n },\n engines: {\n node: \">=20\",\n },\n }, null, 2)}\\n`;\n}\n\n/** Emits a Vercel function shim that reuses the generated Node request handler. */\nfunction renderVercelEntrypoint(): string {\n return `export { default } from \"./server/index.js\";\n`;\n}\n\n/** Emits Build Output API metadata for the Vercel Node.js function. */\nfunction renderVercelFunctionConfig(): string {\n return `${JSON.stringify({\n runtime: \"nodejs22.x\",\n handler: VERCEL_HANDLER_FILE,\n launcherType: \"Nodejs\",\n shouldAddHelpers: true,\n supportsResponseStreaming: true,\n maxDuration: 300,\n }, null, 2)}\\n`;\n}\n\n/** Emits Vercel Build Output API routing to the generated MCP function. */\nfunction renderVercelOutputConfig(): string {\n return `${JSON.stringify({\n version: 3,\n routes: [\n {\n src: \"/(.*)\",\n dest: \"/api/sidecar\",\n },\n ],\n }, null, 2)}\\n`;\n}\n\n/** Resolves workspace package imports to source when building this monorepo's examples. */\nfunction sidecarBundleAliases(rootDir: string): Record<string, string> | undefined {\n const repoRoot = findSidecarRepoRoot(rootDir) ?? findSidecarRepoRoot(process.cwd());\n if (!repoRoot) {\n return undefined;\n }\n\n return {\n \"sidecar-ai/remote\": path.join(repoRoot, \"packages\", \"sidecar-ai\", \"src\", \"remote.ts\"),\n \"sidecar-ai\": path.join(repoRoot, \"packages\", \"sidecar-ai\", \"src\", \"index.ts\"),\n \"@sidecar-ai/auth\": path.join(repoRoot, \"packages\", \"auth\", \"src\", \"index.ts\"),\n \"@sidecar-ai/core\": path.join(repoRoot, \"packages\", \"core\", \"src\", \"index.ts\"),\n \"@sidecar-ai/server\": path.join(repoRoot, \"packages\", \"server\", \"src\", \"index.ts\"),\n \"@sidecar-ai/server/proxy\": path.join(repoRoot, \"packages\", \"server\", \"src\", \"proxy.ts\"),\n \"@sidecar-ai/client\": path.join(repoRoot, \"packages\", \"client\", \"src\", \"index.ts\"),\n \"@sidecar-ai/react\": path.join(repoRoot, \"packages\", \"react\", \"src\", \"index.ts\"),\n \"@sidecar-ai/native\": path.join(repoRoot, \"packages\", \"native\", \"src\", \"index.ts\"),\n \"@sidecar-ai/native/components\": path.join(repoRoot, \"packages\", \"native\", \"src\", \"components\", \"index.tsx\"),\n \"@sidecar-ai/openai\": path.join(repoRoot, \"packages\", \"openai\", \"src\", \"index.ts\"),\n \"@sidecar-ai/openai/components\": path.join(repoRoot, \"packages\", \"openai\", \"src\", \"components.tsx\"),\n \"@sidecar-ai/openai/official\": path.join(repoRoot, \"packages\", \"openai\", \"src\", \"official.ts\"),\n \"@sidecar-ai/anthropic\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"index.ts\"),\n \"@sidecar-ai/anthropic/agent\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"agent.ts\"),\n \"@sidecar-ai/anthropic/command\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"command.ts\"),\n \"@sidecar-ai/anthropic/components\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"components.tsx\"),\n \"@sidecar-ai/anthropic/hooks\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"hooks.ts\"),\n \"@sidecar-ai/anthropic/mcp\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"mcp.ts\"),\n \"@sidecar-ai/anthropic/plugin\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"plugin.ts\"),\n \"@sidecar-ai/anthropic/skill\": path.join(repoRoot, \"packages\", \"anthropic\", \"src\", \"skill.ts\"),\n };\n}\n\n/** Finds the Sidecar repository root for source aliases used by workspace tests. */\nfunction findSidecarRepoRoot(startDir: string): string | undefined {\n let current = path.resolve(startDir);\n while (true) {\n if (existsSync(path.join(current, \"packages\", \"core\", \"src\", \"index.ts\"))) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n"],"mappings":"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","names":["path","Node","SyntaxKind","path","stripUndefined","path","Node","structured","existsSync","path","path","existsSync","existsSync","path","pathToFileURL","Node","path","existsSync","pathToFileURL","stripUndefined","Node","isRecord","path","readObjectProperty","readBooleanProperty","Node","SyntaxKind","readStringProperty","readStringArrayProperty","mkdir","writeFile","existsSync","path","path","Node","SyntaxKind","path","Node","readObjectProperty","readBooleanProperty","readStringProperty","esbuild","readStringArrayProperty","SyntaxKind","existsSync","readFile","path","mkdir","writeFile","path","path","mkdir","writeFile","readFile","path","path","readFile","mkdir","writeFile","path","mkdir","readdir","readFile","writeFile","path","path","readdir","mkdir","readFile","writeFile","stripUndefined","mkdir","readdir","readFile","writeFile","path","path","mkdir","readdir","readFile","writeFile","stripUndefined","mkdir","readdir","readFile","writeFile","path","Node","Project","SyntaxKind","path","readdir","readFile","mkdir","writeFile","Project","Node","stripUndefined","readStringProperty","SyntaxKind","cp","lstat","path","path","cp","lstat","existsSync","cp","lstat","mkdir","readdir","readFile","writeFile","path","path","mkdir","readdir","existsSync","cp","readFile","writeFile","lstat","path","mkdir","writeFile","stripUndefined","readdir","path","Node","SyntaxKind","path","getOptionalStringProperty","getRequiredStringProperty","readdir","Node","readObjectProperty","readBooleanProperty","SyntaxKind","readStringArrayProperty","readdir","path","Node","SyntaxKind","path","getRequiredStringProperty","getOptionalStringProperty","readIcons","readAnnotations","getMethodOrFunctionProperty","readBooleanProperty","readdir","Node","SyntaxKind","readObjectProperty","readStringArrayProperty","existsSync","mkdir","writeFile","path","esbuild","path","mkdir","writeFile","esbuild","existsSync","findSidecarRepoRoot","path","existsSync","mkdir","writeFile"]}
|