@spotpatch/shared 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -5
- package/dist/index.cjs +11 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +26 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.js +11 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
<
|
|
2
|
-
<a href="https://github.com/huanglvjing/spotpatch"><img src="https://raw.githubusercontent.com/huanglvjing/spotpatch/main/docs/assets/spotpatch-logo.svg" alt="SpotPatch" width="560" /></a>
|
|
3
|
-
</p>
|
|
4
|
-
|
|
5
|
-
# `@spotpatch/shared`
|
|
1
|
+
<h1><a href="https://github.com/huanglvjing/spotpatch"><img src="https://raw.githubusercontent.com/huanglvjing/spotpatch/main/docs/assets/spotpatch-npm-icon.png" alt="SpotPatch" width="48" height="48" align="absmiddle" /></a> <code>@spotpatch/shared</code></h1>
|
|
6
2
|
|
|
7
3
|
## English
|
|
8
4
|
|
package/dist/index.cjs
CHANGED
|
@@ -269,6 +269,7 @@ var runtimeConfigBaseShape = {
|
|
|
269
269
|
locale: import_zod.z.enum(SPOTPATCH_LOCALE_PREFERENCES),
|
|
270
270
|
maxTargets: import_zod.z.number().int().min(1).max(MAX_ANNOTATION_TARGETS),
|
|
271
271
|
redact: import_zod.z.boolean(),
|
|
272
|
+
sessionId: import_zod.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/u),
|
|
272
273
|
sessionToken: import_zod.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/u),
|
|
273
274
|
shortcut: boundedText(128),
|
|
274
275
|
spotPatchVersion: boundedText(64)
|
|
@@ -403,8 +404,17 @@ var codeContextSchema = import_zod2.z.strictObject({
|
|
|
403
404
|
excerpt: boundedString(16e3),
|
|
404
405
|
boundary: import_zod2.z.enum(["component", "nearby-lines"])
|
|
405
406
|
});
|
|
407
|
+
var pageContextSchema = import_zod2.z.strictObject({
|
|
408
|
+
url: boundedString(2048),
|
|
409
|
+
pathname: boundedString(2048),
|
|
410
|
+
title: boundedString(1024),
|
|
411
|
+
viewportWidth: import_zod2.z.number().nonnegative(),
|
|
412
|
+
viewportHeight: import_zod2.z.number().nonnegative(),
|
|
413
|
+
devicePixelRatio: import_zod2.z.number().positive()
|
|
414
|
+
});
|
|
406
415
|
var spotTargetContextRequestSchema = import_zod2.z.strictObject({
|
|
407
416
|
instruction: import_zod2.z.string().trim().min(1).max(MAX_TARGET_INSTRUCTION_CHARACTERS),
|
|
417
|
+
page: pageContextSchema.optional(),
|
|
408
418
|
source: sourceRefSchema,
|
|
409
419
|
react: import_zod2.z.strictObject({
|
|
410
420
|
supported: import_zod2.z.boolean(),
|
|
@@ -440,14 +450,7 @@ var spotAnnotationRequestSchema = import_zod2.z.strictObject({
|
|
|
440
450
|
schemaVersion: import_zod2.z.literal(3),
|
|
441
451
|
id: boundedString(128),
|
|
442
452
|
locale: import_zod2.z.enum(SPOTPATCH_LOCALES),
|
|
443
|
-
page:
|
|
444
|
-
url: boundedString(2048),
|
|
445
|
-
pathname: boundedString(2048),
|
|
446
|
-
title: boundedString(1024),
|
|
447
|
-
viewportWidth: import_zod2.z.number().nonnegative(),
|
|
448
|
-
viewportHeight: import_zod2.z.number().nonnegative(),
|
|
449
|
-
devicePixelRatio: import_zod2.z.number().positive()
|
|
450
|
-
}),
|
|
453
|
+
page: pageContextSchema,
|
|
451
454
|
targets: import_zod2.z.array(spotTargetContextRequestSchema).min(1).max(MAX_ANNOTATION_TARGETS),
|
|
452
455
|
createdAt: import_zod2.z.iso.datetime()
|
|
453
456
|
}).superRefine((annotation, context) => {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/errors/spotpatch-error.ts","../src/errors/error-code.ts","../src/security/redaction.ts","../src/model/annotation.ts","../src/model/runtime-config.ts","../src/protocol/endpoints.ts","../src/model/editor.ts","../src/model/agent.ts","../src/model/source-marker.ts","../src/protocol/requests.ts","../src/protocol/agent-schemas.ts","../src/product.ts"],"sourcesContent":["export { SpotPatchError } from \"./errors/spotpatch-error.js\";\nexport { ERROR_CODES, type ErrorCode } from \"./errors/error-code.js\";\nexport {\n isSensitiveName,\n redactSensitiveText,\n sanitizeUrl,\n} from \"./security/redaction.js\";\nexport {\n MAX_ANNOTATION_INSTRUCTION_CHARACTERS,\n MAX_ANNOTATION_TARGETS,\n MAX_TARGET_INSTRUCTION_CHARACTERS,\n SPOTPATCH_LOCALE_PREFERENCES,\n SPOTPATCH_LOCALES,\n type ElementContext,\n type PageContext,\n type SpotAnnotation,\n type SpotPatchLocale,\n type SpotPatchLocalePreference,\n type SpotTargetContext,\n} from \"./model/annotation.js\";\nexport type { CodeContext, ContextBudget } from \"./model/code-context.js\";\nexport {\n runtimeConfigSchema,\n SPOTPATCH_NEXT_BUNDLERS,\n SPOTPATCH_NEXT_ROUTER_KINDS,\n type SpotPatchNextBundler,\n type SpotPatchNextRouterKind,\n type SpotPatchRuntimeConfig,\n} from \"./model/runtime-config.js\";\nexport {\n SPOTPATCH_EDITOR_PREFERENCES,\n type EditorOpenResult,\n type SpotPatchEditorPreference,\n} from \"./model/editor.js\";\nexport {\n AGENT_CAPABILITY_STATES,\n AGENT_CHECK_STATUSES,\n AGENT_FILE_CHANGE_KINDS,\n AGENT_JOB_STATUSES,\n AGENT_WORKSPACE_SNAPSHOT_LIMITS,\n AGENT_WORKSPACE_STATES,\n DEFAULT_AGENT_LIMITS,\n type AgentApplyMode,\n type AgentCapabilitySnapshot,\n type AgentCapabilityState,\n type AgentChangedFile,\n type AgentCheckDefinition,\n type AgentCheckResult,\n type AgentCheckStatus,\n type AgentFileChangeKind,\n type AgentJobResult,\n type AgentJobResultResponse,\n type AgentJobSnapshot,\n type AgentJobStatus,\n type AgentWorkingTreeMode,\n type AgentWorkspaceChangeSummary,\n type AgentWorkspaceHealthSnapshot,\n type AgentWorkspaceState,\n type AgentLimits,\n type AiExecutionOptions,\n type AiModelProfile,\n type AiOptions,\n type AiProviderAuthentication,\n type AiProviderProtocol,\n type OpenAICompatibleProviderOptions,\n type ResolvedAgentCheckDefinition,\n type ResolvedAiExecutionOptions,\n type ResolvedAiModelProfile,\n type ResolvedAiOptions,\n type ResolvedOpenAICompatibleProviderOptions,\n type RuntimeAiConfig,\n type RuntimeAiModelProfile,\n type RuntimeAiProviderProfile,\n} from \"./model/agent.js\";\nexport type {\n ReactContext,\n SourceConfidence,\n SourceOrigin,\n SourceRef,\n} from \"./model/source-ref.js\";\nexport type { MatchedStyleRule, StyleContext } from \"./model/style-context.js\";\nexport {\n formatSourceMarker,\n parseSourceMarker,\n SOURCE_MARKER_ATTRIBUTE,\n type SourceMarker,\n} from \"./model/source-marker.js\";\nexport {\n getAgentJobEndpoint,\n SPOTPATCH_API_BASE,\n SPOTPATCH_ENDPOINTS,\n SPOTPATCH_TOKEN_HEADER,\n type AgentJobAction,\n} from \"./protocol/endpoints.js\";\nexport {\n agentCapabilityRequestSchema,\n agentWorkspaceHealthRequestSchema,\n agentJobActionRequestSchema,\n agentJobCreateRequestSchema,\n openEditorRequestSchema,\n runtimeBootstrapRequestSchema,\n sourceContextRequestSchema,\n spotAnnotationRequestSchema,\n spotTargetContextRequestSchema,\n type AgentCapabilityRequest,\n type AgentJobCreateRequest,\n type OpenEditorRequest,\n type RuntimeBootstrapRequest,\n type SourceContextRequest,\n} from \"./protocol/requests.js\";\nexport type { AgentJobEvent } from \"./protocol/agent-events.js\";\nexport {\n agentCapabilitySnapshotSchema,\n agentWorkspaceHealthSnapshotSchema,\n agentChangedFileSchema,\n agentCheckResultSchema,\n agentJobEventSchema,\n agentJobResultResponseSchema,\n agentJobResultSchema,\n agentJobSnapshotSchema,\n} from \"./protocol/agent-schemas.js\";\nexport type { ApiFailure, ApiResponse, ApiSuccess } from \"./protocol/responses.js\";\nexport { SPOTPATCH_REPOSITORY_URL } from \"./product.js\";\n","import type { ErrorCode } from \"./error-code.js\";\n\nexport class SpotPatchError extends Error {\n readonly code: ErrorCode;\n\n constructor(code: ErrorCode, message = code, options?: ErrorOptions) {\n super(message, options);\n this.name = \"SpotPatchError\";\n this.code = code;\n }\n}\n","export const ERROR_CODES = {\n INVALID_REQUEST: \"INVALID_REQUEST\",\n INVALID_TOKEN: \"INVALID_TOKEN\",\n ORIGIN_NOT_ALLOWED: \"ORIGIN_NOT_ALLOWED\",\n SOURCE_NOT_FOUND: \"SOURCE_NOT_FOUND\",\n SOURCE_OUTSIDE_ROOT: \"SOURCE_OUTSIDE_ROOT\",\n SOURCE_TOO_LARGE: \"SOURCE_TOO_LARGE\",\n EDITOR_OPEN_FAILED: \"EDITOR_OPEN_FAILED\",\n AI_DISABLED: \"AI_DISABLED\",\n PROVIDER_NOT_CONFIGURED: \"PROVIDER_NOT_CONFIGURED\",\n PROVIDER_AUTH_FAILED: \"PROVIDER_AUTH_FAILED\",\n PROVIDER_PROTOCOL_UNSUPPORTED: \"PROVIDER_PROTOCOL_UNSUPPORTED\",\n MODEL_NOT_ALLOWED: \"MODEL_NOT_ALLOWED\",\n MODEL_TOOL_CALL_UNSUPPORTED: \"MODEL_TOOL_CALL_UNSUPPORTED\",\n PROVIDER_RATE_LIMITED: \"PROVIDER_RATE_LIMITED\",\n AGENT_BUSY: \"AGENT_BUSY\",\n AGENT_LIMIT_EXCEEDED: \"AGENT_LIMIT_EXCEEDED\",\n AGENT_CANCELLED: \"AGENT_CANCELLED\",\n WORKTREE_DIRTY: \"WORKTREE_DIRTY\",\n WORKTREE_NOT_REPOSITORY: \"WORKTREE_NOT_REPOSITORY\",\n WORKTREE_OPERATION_IN_PROGRESS: \"WORKTREE_OPERATION_IN_PROGRESS\",\n WORKTREE_CONFLICTED: \"WORKTREE_CONFLICTED\",\n WORKTREE_LOCAL_CHANGES_TOO_LARGE: \"WORKTREE_LOCAL_CHANGES_TOO_LARGE\",\n WORKTREE_UNTRACKED_UNSUPPORTED: \"WORKTREE_UNTRACKED_UNSUPPORTED\",\n WORKTREE_LOCAL_CHANGES_UNSUPPORTED: \"WORKTREE_LOCAL_CHANGES_UNSUPPORTED\",\n TOOL_DENIED: \"TOOL_DENIED\",\n TOOL_INPUT_INVALID: \"TOOL_INPUT_INVALID\",\n TOOL_ARGUMENTS_INVALID: \"TOOL_ARGUMENTS_INVALID\",\n TOOL_CALL_ID_CONFLICT: \"TOOL_CALL_ID_CONFLICT\",\n TOOL_PATH_DENIED: \"TOOL_PATH_DENIED\",\n PATCH_REJECTED: \"PATCH_REJECTED\",\n VALIDATION_FAILED: \"VALIDATION_FAILED\",\n APPLY_CONFLICT: \"APPLY_CONFLICT\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n","const INLINE_DATA_PATTERN = /data:[^\\s\"'<>]*;base64,[a-z0-9+/_=-]+/giu;\nconst BLOB_URL_PATTERN = /blob:[^\\s\"'<>]+/giu;\nconst BEARER_PATTERN = /\\bbearer\\s+[a-z0-9._~+/-]+=*/giu;\nconst URL_CREDENTIAL_PATTERN = /\\b(https?:\\/\\/)[^/\\s:@]+:[^/\\s@]+@/giu;\nconst SECRET_ASSIGNMENT_PATTERN =\n /\\b(authorization|cookie|set-cookie|api[-_]?key|(?:access[-_]?|refresh[-_]?|auth[-_]?)?token|secret|password|default[-_]?value|value)\\b(\\s*[:=]\\s*)(\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|'(?:\\\\.|[^'\\\\\\r\\n])*'|`(?:\\\\.|[^`\\\\\\r\\n])*`|[^\\s,;\"'<>]+)/giu;\nconst SENSITIVE_EXACT_NAMES = new Set([\n \"authorization\",\n \"cookie\",\n \"defaultvalue\",\n \"password\",\n \"setcookie\",\n \"value\",\n]);\nconst MAX_URL_CHARACTERS = 500;\n\nfunction compactName(name: string): string {\n return name.toLowerCase().replaceAll(/[-_:]/gu, \"\");\n}\n\nfunction truncate(value: string, maxCharacters: number): string {\n return value.length <= maxCharacters\n ? value\n : `${value.slice(0, Math.max(0, maxCharacters - 1))}…`;\n}\n\nexport function isSensitiveName(name: string): boolean {\n const compact = compactName(name);\n\n return (\n SENSITIVE_EXACT_NAMES.has(compact) ||\n compact.includes(\"apikey\") ||\n compact.includes(\"authorization\") ||\n compact.includes(\"secret\") ||\n compact.includes(\"token\")\n );\n}\n\nexport function redactSensitiveText(value: string): string {\n return value\n .replace(INLINE_DATA_PATTERN, \"[redacted inline data]\")\n .replace(BLOB_URL_PATTERN, \"[redacted blob URL]\")\n .replace(BEARER_PATTERN, \"Bearer [redacted]\")\n .replace(URL_CREDENTIAL_PATTERN, \"$1[redacted]@\")\n .replace(\n SECRET_ASSIGNMENT_PATTERN,\n (_match, name: string, separator: string, assignedValue: string) => {\n const quote = assignedValue.at(0);\n const quoted = quote === '\"' || quote === \"'\" || quote === \"`\";\n return `${name}${separator}${quoted ? quote : \"\"}[redacted]${quoted ? quote : \"\"}`;\n },\n );\n}\n\nfunction sanitizeParsedUrl(url: URL): string {\n url.username = \"\";\n url.password = \"\";\n\n for (const [name, value] of url.searchParams) {\n if (isSensitiveName(name)) {\n url.searchParams.set(name, \"[redacted]\");\n } else {\n url.searchParams.set(name, redactSensitiveText(value));\n }\n }\n\n if (/token|secret|authorization|api[-_]?key/iu.test(url.hash)) {\n url.hash = \"#[redacted]\";\n }\n\n return url.toString();\n}\n\nexport function sanitizeUrl(value: string, baseUrl: string): string {\n const trimmed = value.trim();\n\n if (/^(?:blob|data|javascript):/iu.test(trimmed)) {\n return \"[redacted URL]\";\n }\n\n const normalized = redactSensitiveText(trimmed);\n\n try {\n const parsed = new URL(normalized, baseUrl);\n const sanitized = sanitizeParsedUrl(parsed);\n const base = new URL(baseUrl);\n\n if (!/^[a-z][a-z\\d+.-]*:/iu.test(normalized) && parsed.origin === base.origin) {\n return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n }\n\n return sanitized;\n } catch {\n return truncate(normalized, MAX_URL_CHARACTERS);\n }\n}\n","import type { CodeContext } from \"./code-context.js\";\nimport type { ReactContext, SourceRef } from \"./source-ref.js\";\nimport type { StyleContext } from \"./style-context.js\";\n\nexport interface PageContext {\n readonly url: string;\n readonly pathname: string;\n readonly title: string;\n readonly viewportWidth: number;\n readonly viewportHeight: number;\n readonly devicePixelRatio: number;\n}\n\nexport interface ElementContext {\n readonly tagName: string;\n readonly selector: string;\n readonly sanitizedHtml: string;\n readonly textPreview?: string;\n readonly role?: string;\n readonly rect: Readonly<{\n x: number;\n y: number;\n width: number;\n height: number;\n }>;\n}\n\n/** Protocol hard limit. Runtime configuration may choose a smaller limit. */\nexport const MAX_ANNOTATION_TARGETS = 20;\n\n/** Each target owns its requested change; the UI enforces the same bound. */\nexport const MAX_TARGET_INSTRUCTION_CHARACTERS = 2_000;\n\n/** Keeps the complete, atomic user intent within the prompt and request budgets. */\nexport const MAX_ANNOTATION_INSTRUCTION_CHARACTERS = 4_000;\n\nexport const SPOTPATCH_LOCALES = Object.freeze([\"en-US\", \"zh-CN\"] as const);\nexport type SpotPatchLocale = (typeof SPOTPATCH_LOCALES)[number];\nexport const SPOTPATCH_LOCALE_PREFERENCES = Object.freeze([\n \"auto\",\n ...SPOTPATCH_LOCALES,\n] as const);\nexport type SpotPatchLocalePreference = (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];\n\nexport interface SpotTargetContext {\n readonly instruction: string;\n readonly source: SourceRef;\n readonly react: ReactContext;\n readonly element: ElementContext;\n readonly styles: StyleContext;\n readonly code?: CodeContext;\n readonly warnings: readonly string[];\n}\n\nexport interface SpotAnnotation {\n readonly schemaVersion: 3;\n readonly id: string;\n readonly locale: SpotPatchLocale;\n readonly page: Readonly<PageContext>;\n readonly targets: readonly SpotTargetContext[];\n readonly createdAt: string;\n}\n","import { z } from \"zod\";\n\nimport { SPOTPATCH_API_BASE } from \"../protocol/endpoints.js\";\nimport { MAX_ANNOTATION_TARGETS, SPOTPATCH_LOCALE_PREFERENCES } from \"./annotation.js\";\nimport { SPOTPATCH_EDITOR_PREFERENCES } from \"./editor.js\";\nimport type { ContextBudget } from \"./code-context.js\";\nimport type { RuntimeAiConfig } from \"./agent.js\";\n\nexport const SPOTPATCH_NEXT_BUNDLERS = Object.freeze([\"turbopack\", \"webpack\"] as const);\nexport const SPOTPATCH_NEXT_ROUTER_KINDS = Object.freeze([\n \"app\",\n \"pages\",\n \"hybrid\",\n] as const);\n\nexport type SpotPatchNextBundler = (typeof SPOTPATCH_NEXT_BUNDLERS)[number];\nexport type SpotPatchNextRouterKind = (typeof SPOTPATCH_NEXT_ROUTER_KINDS)[number];\n\ninterface RuntimeConfigBase {\n readonly apiBase: typeof SPOTPATCH_API_BASE;\n readonly ai: RuntimeAiConfig;\n readonly budget: Readonly<ContextBudget>;\n readonly debug: boolean;\n readonly editor: (typeof SPOTPATCH_EDITOR_PREFERENCES)[number];\n readonly frameworkVersion: string;\n readonly locale: (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];\n readonly maxTargets: number;\n readonly redact: boolean;\n readonly sessionToken: string;\n readonly shortcut: string;\n readonly spotPatchVersion: string;\n}\n\nexport type SpotPatchRuntimeConfig = RuntimeConfigBase &\n (\n | Readonly<{\n framework: \"vite\";\n }>\n | Readonly<{\n bundler: SpotPatchNextBundler;\n framework: \"next\";\n routerKind: SpotPatchNextRouterKind;\n }>\n );\n\nconst boundedText = (maximum: number): z.ZodString =>\n z.string().trim().min(1).max(maximum);\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/u);\nconst runtimeAiModelSchema = z.strictObject({\n id: profileIdSchema,\n label: boundedText(100),\n});\nconst runtimeAiProviderSchema = z\n .strictObject({\n id: profileIdSchema,\n label: boundedText(100),\n protocol: z.enum([\"responses\", \"chat-completions\"]),\n models: z.array(runtimeAiModelSchema).min(1).max(64),\n defaultModel: profileIdSchema,\n })\n .refine(\n ({ defaultModel, models }) =>\n models.some(({ id }) => id === defaultModel) &&\n new Set(models.map(({ id }) => id)).size === models.length,\n { message: \"Runtime AI model profiles are inconsistent.\" },\n );\nconst runtimeAiConfigSchema = z.discriminatedUnion(\"enabled\", [\n z.strictObject({ enabled: z.literal(false) }),\n z\n .strictObject({\n enabled: z.literal(true),\n providers: z.array(runtimeAiProviderSchema).min(1).max(32),\n defaultProvider: profileIdSchema,\n applyMode: z.enum([\"review\", \"auto\"]),\n })\n .refine(\n ({ defaultProvider, providers }) =>\n providers.some(({ id }) => id === defaultProvider) &&\n new Set(providers.map(({ id }) => id)).size === providers.length,\n { message: \"Runtime AI provider profiles are inconsistent.\" },\n ),\n]);\nconst positiveInteger = z.number().int().positive();\nconst runtimeConfigBaseShape = {\n apiBase: z.literal(SPOTPATCH_API_BASE),\n ai: runtimeAiConfigSchema,\n budget: z.strictObject({\n totalCharacters: positiveInteger,\n domCharacters: positiveInteger,\n cssCharacters: positiveInteger,\n codeCharacters: positiveInteger,\n maxCodeLines: positiveInteger,\n maxComponentDepth: positiveInteger,\n }),\n debug: z.boolean(),\n editor: z.enum(SPOTPATCH_EDITOR_PREFERENCES),\n frameworkVersion: boundedText(64),\n locale: z.enum(SPOTPATCH_LOCALE_PREFERENCES),\n maxTargets: z.number().int().min(1).max(MAX_ANNOTATION_TARGETS),\n redact: z.boolean(),\n sessionToken: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/u),\n shortcut: boundedText(128),\n spotPatchVersion: boundedText(64),\n} as const;\n\nexport const runtimeConfigSchema: z.ZodType<SpotPatchRuntimeConfig> =\n z.discriminatedUnion(\"framework\", [\n z.strictObject({\n ...runtimeConfigBaseShape,\n framework: z.literal(\"vite\"),\n }),\n z.strictObject({\n ...runtimeConfigBaseShape,\n bundler: z.enum(SPOTPATCH_NEXT_BUNDLERS),\n framework: z.literal(\"next\"),\n routerKind: z.enum(SPOTPATCH_NEXT_ROUTER_KINDS),\n }),\n ]);\n","export const SPOTPATCH_API_BASE = \"/__spotpatch/v1\" as const;\nexport const SPOTPATCH_TOKEN_HEADER = \"X-SpotPatch-Token\" as const;\n\nexport const SPOTPATCH_ENDPOINTS = Object.freeze({\n bootstrap: `${SPOTPATCH_API_BASE}/bootstrap`,\n sourceContext: `${SPOTPATCH_API_BASE}/source-context`,\n openEditor: `${SPOTPATCH_API_BASE}/open-editor`,\n agentCapability: `${SPOTPATCH_API_BASE}/agent/capability`,\n agentWorkspaceHealth: `${SPOTPATCH_API_BASE}/agent/workspace-health`,\n agentJobs: `${SPOTPATCH_API_BASE}/agent/jobs`,\n});\n\nexport type AgentJobAction = \"events\" | \"result\" | \"cancel\" | \"apply\" | \"revert\";\n\nexport function getAgentJobEndpoint(jobId: string, action: AgentJobAction): string {\n return `${SPOTPATCH_ENDPOINTS.agentJobs}/${encodeURIComponent(jobId)}/${action}`;\n}\n","export const SPOTPATCH_EDITOR_PREFERENCES = [\"auto\", \"vscode\", \"cursor\"] as const;\n\nexport type SpotPatchEditorPreference = (typeof SPOTPATCH_EDITOR_PREFERENCES)[number];\n\nexport interface EditorOpenResult {\n readonly editor: SpotPatchEditorPreference;\n}\n","import type { ErrorCode } from \"../errors/error-code.js\";\n\nexport type AiProviderProtocol = \"responses\" | \"chat-completions\";\nexport type AiProviderAuthentication = \"bearer\" | \"x-api-key\";\nexport type AgentApplyMode = \"review\" | \"auto\";\nexport type AgentWorkingTreeMode = \"require-clean\" | \"include-local-changes\";\n\nexport interface AiModelProfile {\n readonly label: string;\n readonly model: string;\n}\n\nexport interface OpenAICompatibleProviderOptions {\n readonly type: \"openai-compatible\";\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly authentication?: AiProviderAuthentication;\n readonly baseURL: string;\n readonly apiKeyEnv: string;\n readonly models: Readonly<Record<string, AiModelProfile>>;\n readonly defaultModel: string;\n}\n\nexport interface AgentCheckDefinition {\n readonly label: string;\n readonly command: string;\n readonly args?: readonly string[];\n readonly required?: boolean;\n readonly timeoutMs?: number;\n}\n\nexport interface AgentLimits {\n readonly maxTurns: number;\n readonly maxToolCalls: number;\n readonly maxChangedFiles: number;\n readonly maxDiffBytes: number;\n readonly maxReadBytesPerFile: number;\n readonly maxToolOutputCharacters: number;\n readonly maxProviderResponseBytes: number;\n readonly providerConnectTimeoutMs: number;\n readonly providerFirstByteTimeoutMs: number;\n readonly providerIdleTimeoutMs: number;\n readonly checkTimeoutMs: number;\n readonly jobTimeoutMs: number;\n}\n\nexport const DEFAULT_AGENT_LIMITS = Object.freeze({\n maxTurns: 20,\n maxToolCalls: 80,\n maxChangedFiles: 20,\n maxDiffBytes: 512_000,\n maxReadBytesPerFile: 256_000,\n maxToolOutputCharacters: 40_000,\n maxProviderResponseBytes: 2_000_000,\n providerConnectTimeoutMs: 15_000,\n providerFirstByteTimeoutMs: 30_000,\n providerIdleTimeoutMs: 60_000,\n checkTimeoutMs: 120_000,\n jobTimeoutMs: 600_000,\n} satisfies AgentLimits);\n\nexport interface AiExecutionOptions {\n readonly isolation?: \"git-worktree\";\n readonly applyMode?: AgentApplyMode;\n readonly checks?: Readonly<Record<string, AgentCheckDefinition>>;\n readonly limits?: Partial<AgentLimits>;\n}\n\nexport interface AiOptions {\n readonly providers: Readonly<Record<string, OpenAICompatibleProviderOptions>>;\n readonly defaultProvider: string;\n readonly execution?: AiExecutionOptions;\n}\n\nexport interface ResolvedAiModelProfile extends AiModelProfile {\n readonly id: string;\n}\n\nexport interface ResolvedOpenAICompatibleProviderOptions {\n readonly id: string;\n readonly type: \"openai-compatible\";\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly authentication: AiProviderAuthentication;\n readonly baseURL: string;\n readonly apiKeyEnv: string;\n readonly models: Readonly<Record<string, ResolvedAiModelProfile>>;\n readonly defaultModel: string;\n}\n\nexport interface ResolvedAgentCheckDefinition {\n readonly id: string;\n readonly label: string;\n readonly command: string;\n readonly args: readonly string[];\n readonly required: boolean;\n readonly timeoutMs: number;\n}\n\nexport interface ResolvedAiExecutionOptions {\n readonly isolation: \"git-worktree\";\n readonly applyMode: AgentApplyMode;\n readonly checks: Readonly<Record<string, ResolvedAgentCheckDefinition>>;\n readonly limits: Readonly<AgentLimits>;\n}\n\nexport interface ResolvedAiOptions {\n readonly providers: Readonly<Record<string, ResolvedOpenAICompatibleProviderOptions>>;\n readonly defaultProvider: string;\n readonly execution: ResolvedAiExecutionOptions;\n}\n\nexport interface RuntimeAiModelProfile {\n readonly id: string;\n readonly label: string;\n}\n\nexport interface RuntimeAiProviderProfile {\n readonly id: string;\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly models: readonly RuntimeAiModelProfile[];\n readonly defaultModel: string;\n}\n\nexport type RuntimeAiConfig =\n | Readonly<{ enabled: false }>\n | Readonly<{\n enabled: true;\n providers: readonly RuntimeAiProviderProfile[];\n defaultProvider: string;\n applyMode: AgentApplyMode;\n }>;\n\nexport const AGENT_JOB_STATUSES = Object.freeze([\n \"queued\",\n \"preparing\",\n \"running\",\n \"validating\",\n \"awaiting-review\",\n \"applying\",\n \"applied\",\n \"completed\",\n \"cancelling\",\n \"cancelled\",\n \"reverting\",\n \"reverted\",\n \"failed\",\n] as const);\n\nexport type AgentJobStatus = (typeof AGENT_JOB_STATUSES)[number];\n\nexport const AGENT_CAPABILITY_STATES = Object.freeze([\n \"unknown\",\n \"probing\",\n \"agent-ready\",\n \"prompt-only\",\n \"unavailable\",\n] as const);\n\nexport type AgentCapabilityState = (typeof AGENT_CAPABILITY_STATES)[number];\n\nexport interface AgentCapabilitySnapshot {\n readonly providerProfileId: string;\n readonly providerLabel: string;\n readonly modelProfileId: string;\n readonly modelLabel: string;\n readonly protocol: AiProviderProtocol;\n readonly state: AgentCapabilityState;\n readonly authenticated: boolean;\n readonly modelAvailable: boolean;\n readonly toolCalling: boolean;\n readonly toolResultContinuation: boolean;\n readonly streaming: boolean;\n readonly checkedAt?: string;\n readonly errorCode?: ErrorCode;\n}\n\nexport const AGENT_WORKSPACE_STATES = Object.freeze([\n \"ready\",\n \"consent-required\",\n \"blocked\",\n] as const);\n\nexport const AGENT_WORKSPACE_SNAPSHOT_LIMITS = Object.freeze({\n maxUntrackedFiles: 1_000,\n maxUntrackedBytes: 20 * 1024 * 1024,\n});\n\nexport type AgentWorkspaceState = (typeof AGENT_WORKSPACE_STATES)[number];\n\nexport interface AgentWorkspaceChangeSummary {\n readonly staged: number;\n readonly unstaged: number;\n readonly untracked: number;\n readonly conflicted: number;\n readonly total: number;\n}\n\nexport interface AgentWorkspaceHealthSnapshot {\n readonly state: AgentWorkspaceState;\n readonly checkedAt: string;\n readonly changes: AgentWorkspaceChangeSummary;\n readonly canIncludeLocalChanges: boolean;\n readonly errorCode?: ErrorCode;\n}\n\nexport const AGENT_FILE_CHANGE_KINDS = Object.freeze([\n \"added\",\n \"modified\",\n \"deleted\",\n] as const);\n\nexport type AgentFileChangeKind = (typeof AGENT_FILE_CHANGE_KINDS)[number];\n\nexport const AGENT_CHECK_STATUSES = Object.freeze([\n \"passed\",\n \"failed\",\n \"cancelled\",\n \"timed-out\",\n] as const);\n\nexport type AgentCheckStatus = (typeof AGENT_CHECK_STATUSES)[number];\n\nexport interface AgentChangedFile {\n readonly relativePath: string;\n readonly kind: AgentFileChangeKind;\n readonly additions: number;\n readonly deletions: number;\n}\n\nexport interface AgentCheckResult {\n readonly checkId: string;\n readonly label: string;\n readonly status: AgentCheckStatus;\n readonly durationMs: number;\n readonly output: string;\n}\n\nexport interface AgentJobSnapshot {\n readonly jobId: string;\n readonly status: AgentJobStatus;\n readonly providerProfileId: string;\n readonly providerLabel: string;\n readonly modelProfileId: string;\n readonly modelLabel: string;\n readonly phaseMessage: string;\n readonly createdAt: string;\n readonly updatedAt: string;\n readonly canCancel: boolean;\n readonly canApply: boolean;\n readonly canRevert: boolean;\n readonly errorCode?: ErrorCode;\n}\n\nexport interface AgentJobResult {\n readonly jobId: string;\n readonly summary: string;\n readonly diff: string;\n readonly files: readonly AgentChangedFile[];\n readonly checks: readonly AgentCheckResult[];\n}\n\nexport interface AgentJobResultResponse {\n readonly snapshot: AgentJobSnapshot;\n readonly result?: AgentJobResult;\n}\n","export const SOURCE_MARKER_ATTRIBUTE = \"data-spotpatch-source\" as const;\n\nconst SOURCE_MARKER_PATTERN = /^([A-Za-z0-9_-]+):([1-9]\\d*):([1-9]\\d*)$/;\n\nexport interface SourceMarker {\n readonly fileId: string;\n readonly line: number;\n readonly column: number;\n}\n\nexport function formatSourceMarker(marker: SourceMarker): string {\n return [marker.fileId, String(marker.line), String(marker.column)].join(\":\");\n}\n\nexport function parseSourceMarker(value: string | null): SourceMarker | undefined {\n if (value === null) {\n return undefined;\n }\n\n const match = SOURCE_MARKER_PATTERN.exec(value);\n\n if (match === null) {\n return undefined;\n }\n\n const fileId = match[1];\n const line = Number(match[2]);\n const column = Number(match[3]);\n\n if (\n fileId === undefined ||\n !Number.isSafeInteger(line) ||\n !Number.isSafeInteger(column)\n ) {\n return undefined;\n }\n\n return Object.freeze({ fileId, line, column });\n}\n","import { z } from \"zod\";\n\nimport {\n MAX_ANNOTATION_INSTRUCTION_CHARACTERS,\n MAX_ANNOTATION_TARGETS,\n MAX_TARGET_INSTRUCTION_CHARACTERS,\n SPOTPATCH_LOCALES,\n type SpotAnnotation,\n} from \"../model/annotation.js\";\n\nexport const runtimeBootstrapRequestSchema = z.strictObject({});\n\nconst sourceCoordinatesSchema = z.strictObject({\n fileId: z.string().min(1).max(128),\n line: z.number().int().positive(),\n column: z.number().int().positive(),\n});\n\nexport const sourceContextRequestSchema = sourceCoordinatesSchema\n .extend({\n maxLines: z.number().int().positive(),\n })\n .strict();\n\nexport const openEditorRequestSchema = sourceCoordinatesSchema.strict();\n\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);\n\nconst boundedString = (maximum: number): z.ZodString => z.string().max(maximum);\nconst sourceRefSchema = z.strictObject({\n fileId: boundedString(128).optional(),\n relativePath: boundedString(1_024).optional(),\n line: z.number().int().positive().optional(),\n column: z.number().int().positive().optional(),\n origin: z.enum([\"jsx-host\", \"react-fiber\", \"dom-ancestor\", \"none\"]),\n confidence: z.enum([\"exact\", \"probable\", \"approximate\", \"unknown\"]),\n});\nconst matchedStyleRuleSchema = z.strictObject({\n selector: boundedString(2_048),\n declarations: boundedString(8_192),\n source: boundedString(1_024).optional(),\n media: boundedString(1_024).optional(),\n});\nconst codeContextSchema = z.strictObject({\n relativePath: boundedString(1_024),\n language: z.enum([\"tsx\", \"jsx\"]),\n startLine: z.number().int().positive(),\n endLine: z.number().int().positive(),\n excerpt: boundedString(16_000),\n boundary: z.enum([\"component\", \"nearby-lines\"]),\n});\n\nexport const spotTargetContextRequestSchema = z.strictObject({\n instruction: z.string().trim().min(1).max(MAX_TARGET_INSTRUCTION_CHARACTERS),\n source: sourceRefSchema,\n react: z.strictObject({\n supported: z.boolean(),\n version: boundedString(64).optional(),\n componentName: boundedString(256).optional(),\n componentStack: z.array(boundedString(256)).max(64),\n source: sourceRefSchema.optional(),\n }),\n element: z.strictObject({\n tagName: boundedString(128),\n selector: boundedString(2_048),\n sanitizedHtml: boundedString(8_192),\n textPreview: boundedString(2_048).optional(),\n role: boundedString(256).optional(),\n rect: z.strictObject({\n x: z.number(),\n y: z.number(),\n width: z.number().nonnegative(),\n height: z.number().nonnegative(),\n }),\n }),\n styles: z.strictObject({\n classNames: z.array(boundedString(512)).max(256),\n inlineStyle: boundedString(8_192).optional(),\n matchedRules: z.array(matchedStyleRuleSchema).max(256),\n computed: z.record(boundedString(256), boundedString(2_048)),\n warnings: z.array(boundedString(1_024)).max(64),\n }),\n code: codeContextSchema.optional(),\n warnings: z.array(boundedString(1_024)).max(64),\n});\n\nexport const spotAnnotationRequestSchema = z\n .strictObject({\n schemaVersion: z.literal(3),\n id: boundedString(128),\n locale: z.enum(SPOTPATCH_LOCALES),\n page: z.strictObject({\n url: boundedString(2_048),\n pathname: boundedString(2_048),\n title: boundedString(1_024),\n viewportWidth: z.number().nonnegative(),\n viewportHeight: z.number().nonnegative(),\n devicePixelRatio: z.number().positive(),\n }),\n targets: z.array(spotTargetContextRequestSchema).min(1).max(MAX_ANNOTATION_TARGETS),\n createdAt: z.iso.datetime(),\n })\n .superRefine((annotation, context) => {\n const total = annotation.targets.reduce(\n (characters, target) => characters + target.instruction.length,\n 0,\n );\n\n if (total > MAX_ANNOTATION_INSTRUCTION_CHARACTERS) {\n context.addIssue({\n code: \"custom\",\n message: \"Combined target instructions exceed the annotation limit.\",\n path: [\"targets\"],\n });\n }\n });\n\nexport const agentCapabilityRequestSchema = z.strictObject({\n providerProfileId: profileIdSchema,\n modelProfileId: profileIdSchema,\n});\n\nexport const agentWorkspaceHealthRequestSchema = z.strictObject({});\n\nexport const agentJobCreateRequestSchema = z.strictObject({\n annotation: spotAnnotationRequestSchema,\n providerProfileId: profileIdSchema,\n modelProfileId: profileIdSchema,\n providerDataConsent: z.literal(true),\n workingTreeMode: z\n .enum([\"require-clean\", \"include-local-changes\"])\n .default(\"require-clean\"),\n});\n\nexport const agentJobActionRequestSchema = z.strictObject({});\n\nexport type SourceContextRequest = z.infer<typeof sourceContextRequestSchema>;\nexport type RuntimeBootstrapRequest = z.infer<typeof runtimeBootstrapRequestSchema>;\nexport type OpenEditorRequest = z.infer<typeof openEditorRequestSchema>;\nexport type AgentCapabilityRequest = z.infer<typeof agentCapabilityRequestSchema>;\nexport interface AgentJobCreateRequest {\n readonly annotation: SpotAnnotation;\n readonly providerProfileId: string;\n readonly modelProfileId: string;\n readonly providerDataConsent: true;\n readonly workingTreeMode: \"require-clean\" | \"include-local-changes\";\n}\n","import { z } from \"zod\";\n\nimport { ERROR_CODES } from \"../errors/error-code.js\";\nimport {\n AGENT_CAPABILITY_STATES,\n AGENT_CHECK_STATUSES,\n AGENT_FILE_CHANGE_KINDS,\n AGENT_JOB_STATUSES,\n AGENT_WORKSPACE_STATES,\n} from \"../model/agent.js\";\n\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);\nconst boundedString = (maximum: number): z.ZodString => z.string().max(maximum);\nconst errorCodeSchema = z.enum(ERROR_CODES);\n\nexport const agentCapabilitySnapshotSchema = z.strictObject({\n providerProfileId: profileIdSchema,\n providerLabel: boundedString(100),\n modelProfileId: profileIdSchema,\n modelLabel: boundedString(100),\n protocol: z.enum([\"responses\", \"chat-completions\"]),\n state: z.enum(AGENT_CAPABILITY_STATES),\n authenticated: z.boolean(),\n modelAvailable: z.boolean(),\n toolCalling: z.boolean(),\n toolResultContinuation: z.boolean(),\n streaming: z.boolean(),\n checkedAt: z.iso.datetime().optional(),\n errorCode: errorCodeSchema.optional(),\n});\n\nexport const agentWorkspaceHealthSnapshotSchema = z\n .strictObject({\n state: z.enum(AGENT_WORKSPACE_STATES),\n checkedAt: z.iso.datetime(),\n changes: z.strictObject({\n staged: z.number().int().nonnegative(),\n unstaged: z.number().int().nonnegative(),\n untracked: z.number().int().nonnegative(),\n conflicted: z.number().int().nonnegative(),\n total: z.number().int().nonnegative(),\n }),\n canIncludeLocalChanges: z.boolean(),\n errorCode: errorCodeSchema.optional(),\n })\n .refine(\n ({ state, changes, canIncludeLocalChanges, errorCode }) => {\n const countsAreConsistent =\n changes.total >= changes.staged &&\n changes.total >= changes.unstaged &&\n changes.total >= changes.untracked &&\n changes.total >= changes.conflicted &&\n changes.total <= changes.staged + changes.unstaged + changes.untracked;\n\n if (!countsAreConsistent) {\n return false;\n }\n\n if (state === \"ready\") {\n return (\n changes.total === 0 && !canIncludeLocalChanges && errorCode === undefined\n );\n }\n\n if (state === \"consent-required\") {\n return (\n changes.total > 0 &&\n changes.conflicted === 0 &&\n canIncludeLocalChanges &&\n errorCode === undefined\n );\n }\n\n return !canIncludeLocalChanges && errorCode !== undefined;\n },\n { message: \"Agent workspace health fields are inconsistent.\" },\n );\n\nexport const agentChangedFileSchema = z.strictObject({\n relativePath: boundedString(1_024),\n kind: z.enum(AGENT_FILE_CHANGE_KINDS),\n additions: z.number().int().nonnegative(),\n deletions: z.number().int().nonnegative(),\n});\n\nexport const agentCheckResultSchema = z.strictObject({\n checkId: profileIdSchema,\n label: boundedString(100),\n status: z.enum(AGENT_CHECK_STATUSES),\n durationMs: z.number().int().nonnegative(),\n output: boundedString(80_000),\n});\n\nexport const agentJobSnapshotSchema = z.strictObject({\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n status: z.enum(AGENT_JOB_STATUSES),\n providerProfileId: profileIdSchema,\n providerLabel: boundedString(100),\n modelProfileId: profileIdSchema,\n modelLabel: boundedString(100),\n phaseMessage: boundedString(1_024),\n createdAt: z.iso.datetime(),\n updatedAt: z.iso.datetime(),\n canCancel: z.boolean(),\n canApply: z.boolean(),\n canRevert: z.boolean(),\n errorCode: errorCodeSchema.optional(),\n});\n\nexport const agentJobResultSchema = z.strictObject({\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n summary: boundedString(80_000),\n diff: boundedString(1_000_000),\n files: z.array(agentChangedFileSchema).max(100),\n checks: z.array(agentCheckResultSchema).max(100),\n});\n\nexport const agentJobResultResponseSchema = z\n .strictObject({\n snapshot: agentJobSnapshotSchema,\n result: agentJobResultSchema.optional(),\n })\n .superRefine((value, context) => {\n if (value.result !== undefined && value.result.jobId !== value.snapshot.jobId) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent result and snapshot job IDs must match.\",\n path: [\"result\", \"jobId\"],\n });\n }\n });\n\nconst agentJobEventBaseSchema = z.strictObject({\n schemaVersion: z.literal(2),\n sequence: z.number().int().positive(),\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n status: z.enum(AGENT_JOB_STATUSES),\n timestamp: z.iso.datetime(),\n});\n\nexport const agentJobEventSchema = z\n .discriminatedUnion(\"type\", [\n agentJobEventBaseSchema.extend({\n type: z.literal(\"snapshot\"),\n data: z.strictObject({ snapshot: agentJobSnapshotSchema }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"phase\"),\n data: z.strictObject({ message: boundedString(1_024) }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"tool\"),\n data: z.strictObject({\n turn: z.number().int().positive(),\n toolCallId: boundedString(256),\n toolName: boundedString(100),\n state: z.enum([\"started\", \"succeeded\", \"failed\"]),\n relativePath: boundedString(1_024).optional(),\n checkLabel: boundedString(100).optional(),\n }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"check\"),\n data: z.strictObject({ result: agentCheckResultSchema }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"result-ready\"),\n data: z.strictObject({ hasResult: z.literal(true) }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"error\"),\n data: z.strictObject({\n code: errorCodeSchema,\n message: boundedString(1_024),\n }),\n }),\n ])\n .superRefine((event, context) => {\n if (event.type !== \"snapshot\") {\n return;\n }\n\n if (event.data.snapshot.jobId !== event.jobId) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent event and snapshot job IDs must match.\",\n path: [\"data\", \"snapshot\", \"jobId\"],\n });\n }\n\n if (event.data.snapshot.status !== event.status) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent event and snapshot statuses must match.\",\n path: [\"data\", \"snapshot\", \"status\"],\n });\n }\n });\n","export const SPOTPATCH_REPOSITORY_URL =\n \"https://github.com/huanglvjing/spotpatch\" as const;\n"],"mappings":"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","names":["import_zod","profileIdSchema","import_zod","profileIdSchema","boundedString"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/errors/spotpatch-error.ts","../src/errors/error-code.ts","../src/security/redaction.ts","../src/model/annotation.ts","../src/model/runtime-config.ts","../src/protocol/endpoints.ts","../src/model/editor.ts","../src/model/agent.ts","../src/model/source-marker.ts","../src/protocol/requests.ts","../src/protocol/agent-schemas.ts","../src/product.ts"],"sourcesContent":["export { SpotPatchError } from \"./errors/spotpatch-error.js\";\nexport { ERROR_CODES, type ErrorCode } from \"./errors/error-code.js\";\nexport {\n isSensitiveName,\n redactSensitiveText,\n sanitizeUrl,\n} from \"./security/redaction.js\";\nexport {\n MAX_ANNOTATION_INSTRUCTION_CHARACTERS,\n MAX_ANNOTATION_TARGETS,\n MAX_TARGET_INSTRUCTION_CHARACTERS,\n SPOTPATCH_LOCALE_PREFERENCES,\n SPOTPATCH_LOCALES,\n type ElementContext,\n type PageContext,\n type SpotAnnotation,\n type SpotPatchLocale,\n type SpotPatchLocalePreference,\n type SpotTargetContext,\n} from \"./model/annotation.js\";\nexport type { CodeContext, ContextBudget } from \"./model/code-context.js\";\nexport {\n runtimeConfigSchema,\n SPOTPATCH_NEXT_BUNDLERS,\n SPOTPATCH_NEXT_ROUTER_KINDS,\n type SpotPatchNextBundler,\n type SpotPatchNextRouterKind,\n type SpotPatchRuntimeConfig,\n} from \"./model/runtime-config.js\";\nexport {\n SPOTPATCH_EDITOR_PREFERENCES,\n type EditorOpenResult,\n type SpotPatchEditorPreference,\n} from \"./model/editor.js\";\nexport {\n AGENT_CAPABILITY_STATES,\n AGENT_CHECK_STATUSES,\n AGENT_FILE_CHANGE_KINDS,\n AGENT_JOB_STATUSES,\n AGENT_WORKSPACE_SNAPSHOT_LIMITS,\n AGENT_WORKSPACE_STATES,\n DEFAULT_AGENT_LIMITS,\n type AgentApplyMode,\n type AgentCapabilitySnapshot,\n type AgentCapabilityState,\n type AgentChangedFile,\n type AgentCheckDefinition,\n type AgentCheckResult,\n type AgentCheckStatus,\n type AgentFileChangeKind,\n type AgentJobResult,\n type AgentJobResultResponse,\n type AgentJobSnapshot,\n type AgentJobStatus,\n type AgentWorkingTreeMode,\n type AgentWorkspaceChangeSummary,\n type AgentWorkspaceHealthSnapshot,\n type AgentWorkspaceState,\n type AgentLimits,\n type AiExecutionOptions,\n type AiModelProfile,\n type AiOptions,\n type AiProviderAuthentication,\n type AiProviderProtocol,\n type OpenAICompatibleProviderOptions,\n type ResolvedAgentCheckDefinition,\n type ResolvedAiExecutionOptions,\n type ResolvedAiModelProfile,\n type ResolvedAiOptions,\n type ResolvedOpenAICompatibleProviderOptions,\n type RuntimeAiConfig,\n type RuntimeAiModelProfile,\n type RuntimeAiProviderProfile,\n} from \"./model/agent.js\";\nexport type {\n ReactContext,\n SourceConfidence,\n SourceOrigin,\n SourceRef,\n} from \"./model/source-ref.js\";\nexport type { MatchedStyleRule, StyleContext } from \"./model/style-context.js\";\nexport {\n formatSourceMarker,\n parseSourceMarker,\n SOURCE_MARKER_ATTRIBUTE,\n type SourceMarker,\n} from \"./model/source-marker.js\";\nexport {\n getAgentJobEndpoint,\n SPOTPATCH_API_BASE,\n SPOTPATCH_ENDPOINTS,\n SPOTPATCH_TOKEN_HEADER,\n type AgentJobAction,\n} from \"./protocol/endpoints.js\";\nexport {\n agentCapabilityRequestSchema,\n agentWorkspaceHealthRequestSchema,\n agentJobActionRequestSchema,\n agentJobCreateRequestSchema,\n openEditorRequestSchema,\n runtimeBootstrapRequestSchema,\n sourceContextRequestSchema,\n spotAnnotationRequestSchema,\n spotTargetContextRequestSchema,\n type AgentCapabilityRequest,\n type AgentJobCreateRequest,\n type OpenEditorRequest,\n type RuntimeBootstrapRequest,\n type SourceContextRequest,\n} from \"./protocol/requests.js\";\nexport type { AgentJobEvent } from \"./protocol/agent-events.js\";\nexport {\n agentCapabilitySnapshotSchema,\n agentWorkspaceHealthSnapshotSchema,\n agentChangedFileSchema,\n agentCheckResultSchema,\n agentJobEventSchema,\n agentJobResultResponseSchema,\n agentJobResultSchema,\n agentJobSnapshotSchema,\n} from \"./protocol/agent-schemas.js\";\nexport type { ApiFailure, ApiResponse, ApiSuccess } from \"./protocol/responses.js\";\nexport { SPOTPATCH_REPOSITORY_URL } from \"./product.js\";\n","import type { ErrorCode } from \"./error-code.js\";\n\nexport class SpotPatchError extends Error {\n readonly code: ErrorCode;\n\n constructor(code: ErrorCode, message = code, options?: ErrorOptions) {\n super(message, options);\n this.name = \"SpotPatchError\";\n this.code = code;\n }\n}\n","export const ERROR_CODES = {\n INVALID_REQUEST: \"INVALID_REQUEST\",\n INVALID_TOKEN: \"INVALID_TOKEN\",\n ORIGIN_NOT_ALLOWED: \"ORIGIN_NOT_ALLOWED\",\n SOURCE_NOT_FOUND: \"SOURCE_NOT_FOUND\",\n SOURCE_OUTSIDE_ROOT: \"SOURCE_OUTSIDE_ROOT\",\n SOURCE_TOO_LARGE: \"SOURCE_TOO_LARGE\",\n EDITOR_OPEN_FAILED: \"EDITOR_OPEN_FAILED\",\n AI_DISABLED: \"AI_DISABLED\",\n PROVIDER_NOT_CONFIGURED: \"PROVIDER_NOT_CONFIGURED\",\n PROVIDER_AUTH_FAILED: \"PROVIDER_AUTH_FAILED\",\n PROVIDER_PROTOCOL_UNSUPPORTED: \"PROVIDER_PROTOCOL_UNSUPPORTED\",\n MODEL_NOT_ALLOWED: \"MODEL_NOT_ALLOWED\",\n MODEL_TOOL_CALL_UNSUPPORTED: \"MODEL_TOOL_CALL_UNSUPPORTED\",\n PROVIDER_RATE_LIMITED: \"PROVIDER_RATE_LIMITED\",\n AGENT_BUSY: \"AGENT_BUSY\",\n AGENT_LIMIT_EXCEEDED: \"AGENT_LIMIT_EXCEEDED\",\n AGENT_CANCELLED: \"AGENT_CANCELLED\",\n WORKTREE_DIRTY: \"WORKTREE_DIRTY\",\n WORKTREE_NOT_REPOSITORY: \"WORKTREE_NOT_REPOSITORY\",\n WORKTREE_OPERATION_IN_PROGRESS: \"WORKTREE_OPERATION_IN_PROGRESS\",\n WORKTREE_CONFLICTED: \"WORKTREE_CONFLICTED\",\n WORKTREE_LOCAL_CHANGES_TOO_LARGE: \"WORKTREE_LOCAL_CHANGES_TOO_LARGE\",\n WORKTREE_UNTRACKED_UNSUPPORTED: \"WORKTREE_UNTRACKED_UNSUPPORTED\",\n WORKTREE_LOCAL_CHANGES_UNSUPPORTED: \"WORKTREE_LOCAL_CHANGES_UNSUPPORTED\",\n TOOL_DENIED: \"TOOL_DENIED\",\n TOOL_INPUT_INVALID: \"TOOL_INPUT_INVALID\",\n TOOL_ARGUMENTS_INVALID: \"TOOL_ARGUMENTS_INVALID\",\n TOOL_CALL_ID_CONFLICT: \"TOOL_CALL_ID_CONFLICT\",\n TOOL_PATH_DENIED: \"TOOL_PATH_DENIED\",\n PATCH_REJECTED: \"PATCH_REJECTED\",\n VALIDATION_FAILED: \"VALIDATION_FAILED\",\n APPLY_CONFLICT: \"APPLY_CONFLICT\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n","const INLINE_DATA_PATTERN = /data:[^\\s\"'<>]*;base64,[a-z0-9+/_=-]+/giu;\nconst BLOB_URL_PATTERN = /blob:[^\\s\"'<>]+/giu;\nconst BEARER_PATTERN = /\\bbearer\\s+[a-z0-9._~+/-]+=*/giu;\nconst URL_CREDENTIAL_PATTERN = /\\b(https?:\\/\\/)[^/\\s:@]+:[^/\\s@]+@/giu;\nconst SECRET_ASSIGNMENT_PATTERN =\n /\\b(authorization|cookie|set-cookie|api[-_]?key|(?:access[-_]?|refresh[-_]?|auth[-_]?)?token|secret|password|default[-_]?value|value)\\b(\\s*[:=]\\s*)(\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|'(?:\\\\.|[^'\\\\\\r\\n])*'|`(?:\\\\.|[^`\\\\\\r\\n])*`|[^\\s,;\"'<>]+)/giu;\nconst SENSITIVE_EXACT_NAMES = new Set([\n \"authorization\",\n \"cookie\",\n \"defaultvalue\",\n \"password\",\n \"setcookie\",\n \"value\",\n]);\nconst MAX_URL_CHARACTERS = 500;\n\nfunction compactName(name: string): string {\n return name.toLowerCase().replaceAll(/[-_:]/gu, \"\");\n}\n\nfunction truncate(value: string, maxCharacters: number): string {\n return value.length <= maxCharacters\n ? value\n : `${value.slice(0, Math.max(0, maxCharacters - 1))}…`;\n}\n\nexport function isSensitiveName(name: string): boolean {\n const compact = compactName(name);\n\n return (\n SENSITIVE_EXACT_NAMES.has(compact) ||\n compact.includes(\"apikey\") ||\n compact.includes(\"authorization\") ||\n compact.includes(\"secret\") ||\n compact.includes(\"token\")\n );\n}\n\nexport function redactSensitiveText(value: string): string {\n return value\n .replace(INLINE_DATA_PATTERN, \"[redacted inline data]\")\n .replace(BLOB_URL_PATTERN, \"[redacted blob URL]\")\n .replace(BEARER_PATTERN, \"Bearer [redacted]\")\n .replace(URL_CREDENTIAL_PATTERN, \"$1[redacted]@\")\n .replace(\n SECRET_ASSIGNMENT_PATTERN,\n (_match, name: string, separator: string, assignedValue: string) => {\n const quote = assignedValue.at(0);\n const quoted = quote === '\"' || quote === \"'\" || quote === \"`\";\n return `${name}${separator}${quoted ? quote : \"\"}[redacted]${quoted ? quote : \"\"}`;\n },\n );\n}\n\nfunction sanitizeParsedUrl(url: URL): string {\n url.username = \"\";\n url.password = \"\";\n\n for (const [name, value] of url.searchParams) {\n if (isSensitiveName(name)) {\n url.searchParams.set(name, \"[redacted]\");\n } else {\n url.searchParams.set(name, redactSensitiveText(value));\n }\n }\n\n if (/token|secret|authorization|api[-_]?key/iu.test(url.hash)) {\n url.hash = \"#[redacted]\";\n }\n\n return url.toString();\n}\n\nexport function sanitizeUrl(value: string, baseUrl: string): string {\n const trimmed = value.trim();\n\n if (/^(?:blob|data|javascript):/iu.test(trimmed)) {\n return \"[redacted URL]\";\n }\n\n const normalized = redactSensitiveText(trimmed);\n\n try {\n const parsed = new URL(normalized, baseUrl);\n const sanitized = sanitizeParsedUrl(parsed);\n const base = new URL(baseUrl);\n\n if (!/^[a-z][a-z\\d+.-]*:/iu.test(normalized) && parsed.origin === base.origin) {\n return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n }\n\n return sanitized;\n } catch {\n return truncate(normalized, MAX_URL_CHARACTERS);\n }\n}\n","import type { CodeContext } from \"./code-context.js\";\nimport type { ReactContext, SourceRef } from \"./source-ref.js\";\nimport type { StyleContext } from \"./style-context.js\";\n\nexport interface PageContext {\n readonly url: string;\n readonly pathname: string;\n readonly title: string;\n readonly viewportWidth: number;\n readonly viewportHeight: number;\n readonly devicePixelRatio: number;\n}\n\nexport interface ElementContext {\n readonly tagName: string;\n readonly selector: string;\n readonly sanitizedHtml: string;\n readonly textPreview?: string;\n readonly role?: string;\n readonly rect: Readonly<{\n x: number;\n y: number;\n width: number;\n height: number;\n }>;\n}\n\n/** Protocol hard limit. Runtime configuration may choose a smaller limit. */\nexport const MAX_ANNOTATION_TARGETS = 20;\n\n/** Each target owns its requested change; the UI enforces the same bound. */\nexport const MAX_TARGET_INSTRUCTION_CHARACTERS = 2_000;\n\n/** Keeps the complete, atomic user intent within the prompt and request budgets. */\nexport const MAX_ANNOTATION_INSTRUCTION_CHARACTERS = 4_000;\n\nexport const SPOTPATCH_LOCALES = Object.freeze([\"en-US\", \"zh-CN\"] as const);\nexport type SpotPatchLocale = (typeof SPOTPATCH_LOCALES)[number];\nexport const SPOTPATCH_LOCALE_PREFERENCES = Object.freeze([\n \"auto\",\n ...SPOTPATCH_LOCALES,\n] as const);\nexport type SpotPatchLocalePreference = (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];\n\nexport interface SpotTargetContext {\n readonly instruction: string;\n readonly page?: Readonly<PageContext>;\n readonly source: SourceRef;\n readonly react: ReactContext;\n readonly element: ElementContext;\n readonly styles: StyleContext;\n readonly code?: CodeContext;\n readonly warnings: readonly string[];\n}\n\nexport interface SpotAnnotation {\n readonly schemaVersion: 3;\n readonly id: string;\n readonly locale: SpotPatchLocale;\n readonly page: Readonly<PageContext>;\n readonly targets: readonly SpotTargetContext[];\n readonly createdAt: string;\n}\n","import { z } from \"zod\";\n\nimport { SPOTPATCH_API_BASE } from \"../protocol/endpoints.js\";\nimport { MAX_ANNOTATION_TARGETS, SPOTPATCH_LOCALE_PREFERENCES } from \"./annotation.js\";\nimport { SPOTPATCH_EDITOR_PREFERENCES } from \"./editor.js\";\nimport type { ContextBudget } from \"./code-context.js\";\nimport type { RuntimeAiConfig } from \"./agent.js\";\n\nexport const SPOTPATCH_NEXT_BUNDLERS = Object.freeze([\"turbopack\", \"webpack\"] as const);\nexport const SPOTPATCH_NEXT_ROUTER_KINDS = Object.freeze([\n \"app\",\n \"pages\",\n \"hybrid\",\n] as const);\n\nexport type SpotPatchNextBundler = (typeof SPOTPATCH_NEXT_BUNDLERS)[number];\nexport type SpotPatchNextRouterKind = (typeof SPOTPATCH_NEXT_ROUTER_KINDS)[number];\n\ninterface RuntimeConfigBase {\n readonly apiBase: typeof SPOTPATCH_API_BASE;\n readonly ai: RuntimeAiConfig;\n readonly budget: Readonly<ContextBudget>;\n readonly debug: boolean;\n readonly editor: (typeof SPOTPATCH_EDITOR_PREFERENCES)[number];\n readonly frameworkVersion: string;\n readonly locale: (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];\n readonly maxTargets: number;\n readonly redact: boolean;\n readonly sessionId: string;\n readonly sessionToken: string;\n readonly shortcut: string;\n readonly spotPatchVersion: string;\n}\n\nexport type SpotPatchRuntimeConfig = RuntimeConfigBase &\n (\n | Readonly<{\n framework: \"vite\";\n }>\n | Readonly<{\n bundler: SpotPatchNextBundler;\n framework: \"next\";\n routerKind: SpotPatchNextRouterKind;\n }>\n );\n\nconst boundedText = (maximum: number): z.ZodString =>\n z.string().trim().min(1).max(maximum);\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/u);\nconst runtimeAiModelSchema = z.strictObject({\n id: profileIdSchema,\n label: boundedText(100),\n});\nconst runtimeAiProviderSchema = z\n .strictObject({\n id: profileIdSchema,\n label: boundedText(100),\n protocol: z.enum([\"responses\", \"chat-completions\"]),\n models: z.array(runtimeAiModelSchema).min(1).max(64),\n defaultModel: profileIdSchema,\n })\n .refine(\n ({ defaultModel, models }) =>\n models.some(({ id }) => id === defaultModel) &&\n new Set(models.map(({ id }) => id)).size === models.length,\n { message: \"Runtime AI model profiles are inconsistent.\" },\n );\nconst runtimeAiConfigSchema = z.discriminatedUnion(\"enabled\", [\n z.strictObject({ enabled: z.literal(false) }),\n z\n .strictObject({\n enabled: z.literal(true),\n providers: z.array(runtimeAiProviderSchema).min(1).max(32),\n defaultProvider: profileIdSchema,\n applyMode: z.enum([\"review\", \"auto\"]),\n })\n .refine(\n ({ defaultProvider, providers }) =>\n providers.some(({ id }) => id === defaultProvider) &&\n new Set(providers.map(({ id }) => id)).size === providers.length,\n { message: \"Runtime AI provider profiles are inconsistent.\" },\n ),\n]);\nconst positiveInteger = z.number().int().positive();\nconst runtimeConfigBaseShape = {\n apiBase: z.literal(SPOTPATCH_API_BASE),\n ai: runtimeAiConfigSchema,\n budget: z.strictObject({\n totalCharacters: positiveInteger,\n domCharacters: positiveInteger,\n cssCharacters: positiveInteger,\n codeCharacters: positiveInteger,\n maxCodeLines: positiveInteger,\n maxComponentDepth: positiveInteger,\n }),\n debug: z.boolean(),\n editor: z.enum(SPOTPATCH_EDITOR_PREFERENCES),\n frameworkVersion: boundedText(64),\n locale: z.enum(SPOTPATCH_LOCALE_PREFERENCES),\n maxTargets: z.number().int().min(1).max(MAX_ANNOTATION_TARGETS),\n redact: z.boolean(),\n sessionId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/u),\n sessionToken: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/u),\n shortcut: boundedText(128),\n spotPatchVersion: boundedText(64),\n} as const;\n\nexport const runtimeConfigSchema: z.ZodType<SpotPatchRuntimeConfig> =\n z.discriminatedUnion(\"framework\", [\n z.strictObject({\n ...runtimeConfigBaseShape,\n framework: z.literal(\"vite\"),\n }),\n z.strictObject({\n ...runtimeConfigBaseShape,\n bundler: z.enum(SPOTPATCH_NEXT_BUNDLERS),\n framework: z.literal(\"next\"),\n routerKind: z.enum(SPOTPATCH_NEXT_ROUTER_KINDS),\n }),\n ]);\n","export const SPOTPATCH_API_BASE = \"/__spotpatch/v1\" as const;\nexport const SPOTPATCH_TOKEN_HEADER = \"X-SpotPatch-Token\" as const;\n\nexport const SPOTPATCH_ENDPOINTS = Object.freeze({\n bootstrap: `${SPOTPATCH_API_BASE}/bootstrap`,\n sourceContext: `${SPOTPATCH_API_BASE}/source-context`,\n openEditor: `${SPOTPATCH_API_BASE}/open-editor`,\n agentCapability: `${SPOTPATCH_API_BASE}/agent/capability`,\n agentWorkspaceHealth: `${SPOTPATCH_API_BASE}/agent/workspace-health`,\n agentJobs: `${SPOTPATCH_API_BASE}/agent/jobs`,\n});\n\nexport type AgentJobAction = \"events\" | \"result\" | \"cancel\" | \"apply\" | \"revert\";\n\nexport function getAgentJobEndpoint(jobId: string, action: AgentJobAction): string {\n return `${SPOTPATCH_ENDPOINTS.agentJobs}/${encodeURIComponent(jobId)}/${action}`;\n}\n","export const SPOTPATCH_EDITOR_PREFERENCES = [\"auto\", \"vscode\", \"cursor\"] as const;\n\nexport type SpotPatchEditorPreference = (typeof SPOTPATCH_EDITOR_PREFERENCES)[number];\n\nexport interface EditorOpenResult {\n readonly editor: SpotPatchEditorPreference;\n}\n","import type { ErrorCode } from \"../errors/error-code.js\";\n\nexport type AiProviderProtocol = \"responses\" | \"chat-completions\";\nexport type AiProviderAuthentication = \"bearer\" | \"x-api-key\";\nexport type AgentApplyMode = \"review\" | \"auto\";\nexport type AgentWorkingTreeMode = \"require-clean\" | \"include-local-changes\";\n\nexport interface AiModelProfile {\n readonly label: string;\n readonly model: string;\n}\n\nexport interface OpenAICompatibleProviderOptions {\n readonly type: \"openai-compatible\";\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly authentication?: AiProviderAuthentication;\n readonly baseURL: string;\n readonly apiKeyEnv: string;\n readonly models: Readonly<Record<string, AiModelProfile>>;\n readonly defaultModel: string;\n}\n\nexport interface AgentCheckDefinition {\n readonly label: string;\n readonly command: string;\n readonly args?: readonly string[];\n readonly required?: boolean;\n readonly timeoutMs?: number;\n}\n\nexport interface AgentLimits {\n readonly maxTurns: number;\n readonly maxToolCalls: number;\n readonly maxChangedFiles: number;\n readonly maxDiffBytes: number;\n readonly maxReadBytesPerFile: number;\n readonly maxToolOutputCharacters: number;\n readonly maxProviderResponseBytes: number;\n readonly providerConnectTimeoutMs: number;\n readonly providerFirstByteTimeoutMs: number;\n readonly providerIdleTimeoutMs: number;\n readonly checkTimeoutMs: number;\n readonly jobTimeoutMs: number;\n}\n\nexport const DEFAULT_AGENT_LIMITS = Object.freeze({\n maxTurns: 20,\n maxToolCalls: 80,\n maxChangedFiles: 20,\n maxDiffBytes: 512_000,\n maxReadBytesPerFile: 256_000,\n maxToolOutputCharacters: 40_000,\n maxProviderResponseBytes: 2_000_000,\n providerConnectTimeoutMs: 15_000,\n providerFirstByteTimeoutMs: 30_000,\n providerIdleTimeoutMs: 60_000,\n checkTimeoutMs: 120_000,\n jobTimeoutMs: 600_000,\n} satisfies AgentLimits);\n\nexport interface AiExecutionOptions {\n readonly isolation?: \"git-worktree\";\n readonly applyMode?: AgentApplyMode;\n readonly checks?: Readonly<Record<string, AgentCheckDefinition>>;\n readonly limits?: Partial<AgentLimits>;\n}\n\nexport interface AiOptions {\n readonly providers: Readonly<Record<string, OpenAICompatibleProviderOptions>>;\n readonly defaultProvider: string;\n readonly execution?: AiExecutionOptions;\n}\n\nexport interface ResolvedAiModelProfile extends AiModelProfile {\n readonly id: string;\n}\n\nexport interface ResolvedOpenAICompatibleProviderOptions {\n readonly id: string;\n readonly type: \"openai-compatible\";\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly authentication: AiProviderAuthentication;\n readonly baseURL: string;\n readonly apiKeyEnv: string;\n readonly models: Readonly<Record<string, ResolvedAiModelProfile>>;\n readonly defaultModel: string;\n}\n\nexport interface ResolvedAgentCheckDefinition {\n readonly id: string;\n readonly label: string;\n readonly command: string;\n readonly args: readonly string[];\n readonly required: boolean;\n readonly timeoutMs: number;\n}\n\nexport interface ResolvedAiExecutionOptions {\n readonly isolation: \"git-worktree\";\n readonly applyMode: AgentApplyMode;\n readonly checks: Readonly<Record<string, ResolvedAgentCheckDefinition>>;\n readonly limits: Readonly<AgentLimits>;\n}\n\nexport interface ResolvedAiOptions {\n readonly providers: Readonly<Record<string, ResolvedOpenAICompatibleProviderOptions>>;\n readonly defaultProvider: string;\n readonly execution: ResolvedAiExecutionOptions;\n}\n\nexport interface RuntimeAiModelProfile {\n readonly id: string;\n readonly label: string;\n}\n\nexport interface RuntimeAiProviderProfile {\n readonly id: string;\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly models: readonly RuntimeAiModelProfile[];\n readonly defaultModel: string;\n}\n\nexport type RuntimeAiConfig =\n | Readonly<{ enabled: false }>\n | Readonly<{\n enabled: true;\n providers: readonly RuntimeAiProviderProfile[];\n defaultProvider: string;\n applyMode: AgentApplyMode;\n }>;\n\nexport const AGENT_JOB_STATUSES = Object.freeze([\n \"queued\",\n \"preparing\",\n \"running\",\n \"validating\",\n \"awaiting-review\",\n \"applying\",\n \"applied\",\n \"completed\",\n \"cancelling\",\n \"cancelled\",\n \"reverting\",\n \"reverted\",\n \"failed\",\n] as const);\n\nexport type AgentJobStatus = (typeof AGENT_JOB_STATUSES)[number];\n\nexport const AGENT_CAPABILITY_STATES = Object.freeze([\n \"unknown\",\n \"probing\",\n \"agent-ready\",\n \"prompt-only\",\n \"unavailable\",\n] as const);\n\nexport type AgentCapabilityState = (typeof AGENT_CAPABILITY_STATES)[number];\n\nexport interface AgentCapabilitySnapshot {\n readonly providerProfileId: string;\n readonly providerLabel: string;\n readonly modelProfileId: string;\n readonly modelLabel: string;\n readonly protocol: AiProviderProtocol;\n readonly state: AgentCapabilityState;\n readonly authenticated: boolean;\n readonly modelAvailable: boolean;\n readonly toolCalling: boolean;\n readonly toolResultContinuation: boolean;\n readonly streaming: boolean;\n readonly checkedAt?: string;\n readonly errorCode?: ErrorCode;\n}\n\nexport const AGENT_WORKSPACE_STATES = Object.freeze([\n \"ready\",\n \"consent-required\",\n \"blocked\",\n] as const);\n\nexport const AGENT_WORKSPACE_SNAPSHOT_LIMITS = Object.freeze({\n maxUntrackedFiles: 1_000,\n maxUntrackedBytes: 20 * 1024 * 1024,\n});\n\nexport type AgentWorkspaceState = (typeof AGENT_WORKSPACE_STATES)[number];\n\nexport interface AgentWorkspaceChangeSummary {\n readonly staged: number;\n readonly unstaged: number;\n readonly untracked: number;\n readonly conflicted: number;\n readonly total: number;\n}\n\nexport interface AgentWorkspaceHealthSnapshot {\n readonly state: AgentWorkspaceState;\n readonly checkedAt: string;\n readonly changes: AgentWorkspaceChangeSummary;\n readonly canIncludeLocalChanges: boolean;\n readonly errorCode?: ErrorCode;\n}\n\nexport const AGENT_FILE_CHANGE_KINDS = Object.freeze([\n \"added\",\n \"modified\",\n \"deleted\",\n] as const);\n\nexport type AgentFileChangeKind = (typeof AGENT_FILE_CHANGE_KINDS)[number];\n\nexport const AGENT_CHECK_STATUSES = Object.freeze([\n \"passed\",\n \"failed\",\n \"cancelled\",\n \"timed-out\",\n] as const);\n\nexport type AgentCheckStatus = (typeof AGENT_CHECK_STATUSES)[number];\n\nexport interface AgentChangedFile {\n readonly relativePath: string;\n readonly kind: AgentFileChangeKind;\n readonly additions: number;\n readonly deletions: number;\n}\n\nexport interface AgentCheckResult {\n readonly checkId: string;\n readonly label: string;\n readonly status: AgentCheckStatus;\n readonly durationMs: number;\n readonly output: string;\n}\n\nexport interface AgentJobSnapshot {\n readonly jobId: string;\n readonly status: AgentJobStatus;\n readonly providerProfileId: string;\n readonly providerLabel: string;\n readonly modelProfileId: string;\n readonly modelLabel: string;\n readonly phaseMessage: string;\n readonly createdAt: string;\n readonly updatedAt: string;\n readonly canCancel: boolean;\n readonly canApply: boolean;\n readonly canRevert: boolean;\n readonly errorCode?: ErrorCode;\n}\n\nexport interface AgentJobResult {\n readonly jobId: string;\n readonly summary: string;\n readonly diff: string;\n readonly files: readonly AgentChangedFile[];\n readonly checks: readonly AgentCheckResult[];\n}\n\nexport interface AgentJobResultResponse {\n readonly snapshot: AgentJobSnapshot;\n readonly result?: AgentJobResult;\n}\n","export const SOURCE_MARKER_ATTRIBUTE = \"data-spotpatch-source\" as const;\n\nconst SOURCE_MARKER_PATTERN = /^([A-Za-z0-9_-]+):([1-9]\\d*):([1-9]\\d*)$/;\n\nexport interface SourceMarker {\n readonly fileId: string;\n readonly line: number;\n readonly column: number;\n}\n\nexport function formatSourceMarker(marker: SourceMarker): string {\n return [marker.fileId, String(marker.line), String(marker.column)].join(\":\");\n}\n\nexport function parseSourceMarker(value: string | null): SourceMarker | undefined {\n if (value === null) {\n return undefined;\n }\n\n const match = SOURCE_MARKER_PATTERN.exec(value);\n\n if (match === null) {\n return undefined;\n }\n\n const fileId = match[1];\n const line = Number(match[2]);\n const column = Number(match[3]);\n\n if (\n fileId === undefined ||\n !Number.isSafeInteger(line) ||\n !Number.isSafeInteger(column)\n ) {\n return undefined;\n }\n\n return Object.freeze({ fileId, line, column });\n}\n","import { z } from \"zod\";\n\nimport {\n MAX_ANNOTATION_INSTRUCTION_CHARACTERS,\n MAX_ANNOTATION_TARGETS,\n MAX_TARGET_INSTRUCTION_CHARACTERS,\n SPOTPATCH_LOCALES,\n type SpotAnnotation,\n} from \"../model/annotation.js\";\n\nexport const runtimeBootstrapRequestSchema = z.strictObject({});\n\nconst sourceCoordinatesSchema = z.strictObject({\n fileId: z.string().min(1).max(128),\n line: z.number().int().positive(),\n column: z.number().int().positive(),\n});\n\nexport const sourceContextRequestSchema = sourceCoordinatesSchema\n .extend({\n maxLines: z.number().int().positive(),\n })\n .strict();\n\nexport const openEditorRequestSchema = sourceCoordinatesSchema.strict();\n\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);\n\nconst boundedString = (maximum: number): z.ZodString => z.string().max(maximum);\nconst sourceRefSchema = z.strictObject({\n fileId: boundedString(128).optional(),\n relativePath: boundedString(1_024).optional(),\n line: z.number().int().positive().optional(),\n column: z.number().int().positive().optional(),\n origin: z.enum([\"jsx-host\", \"react-fiber\", \"dom-ancestor\", \"none\"]),\n confidence: z.enum([\"exact\", \"probable\", \"approximate\", \"unknown\"]),\n});\nconst matchedStyleRuleSchema = z.strictObject({\n selector: boundedString(2_048),\n declarations: boundedString(8_192),\n source: boundedString(1_024).optional(),\n media: boundedString(1_024).optional(),\n});\nconst codeContextSchema = z.strictObject({\n relativePath: boundedString(1_024),\n language: z.enum([\"tsx\", \"jsx\"]),\n startLine: z.number().int().positive(),\n endLine: z.number().int().positive(),\n excerpt: boundedString(16_000),\n boundary: z.enum([\"component\", \"nearby-lines\"]),\n});\nconst pageContextSchema = z.strictObject({\n url: boundedString(2_048),\n pathname: boundedString(2_048),\n title: boundedString(1_024),\n viewportWidth: z.number().nonnegative(),\n viewportHeight: z.number().nonnegative(),\n devicePixelRatio: z.number().positive(),\n});\n\nexport const spotTargetContextRequestSchema = z.strictObject({\n instruction: z.string().trim().min(1).max(MAX_TARGET_INSTRUCTION_CHARACTERS),\n page: pageContextSchema.optional(),\n source: sourceRefSchema,\n react: z.strictObject({\n supported: z.boolean(),\n version: boundedString(64).optional(),\n componentName: boundedString(256).optional(),\n componentStack: z.array(boundedString(256)).max(64),\n source: sourceRefSchema.optional(),\n }),\n element: z.strictObject({\n tagName: boundedString(128),\n selector: boundedString(2_048),\n sanitizedHtml: boundedString(8_192),\n textPreview: boundedString(2_048).optional(),\n role: boundedString(256).optional(),\n rect: z.strictObject({\n x: z.number(),\n y: z.number(),\n width: z.number().nonnegative(),\n height: z.number().nonnegative(),\n }),\n }),\n styles: z.strictObject({\n classNames: z.array(boundedString(512)).max(256),\n inlineStyle: boundedString(8_192).optional(),\n matchedRules: z.array(matchedStyleRuleSchema).max(256),\n computed: z.record(boundedString(256), boundedString(2_048)),\n warnings: z.array(boundedString(1_024)).max(64),\n }),\n code: codeContextSchema.optional(),\n warnings: z.array(boundedString(1_024)).max(64),\n});\n\nexport const spotAnnotationRequestSchema = z\n .strictObject({\n schemaVersion: z.literal(3),\n id: boundedString(128),\n locale: z.enum(SPOTPATCH_LOCALES),\n page: pageContextSchema,\n targets: z.array(spotTargetContextRequestSchema).min(1).max(MAX_ANNOTATION_TARGETS),\n createdAt: z.iso.datetime(),\n })\n .superRefine((annotation, context) => {\n const total = annotation.targets.reduce(\n (characters, target) => characters + target.instruction.length,\n 0,\n );\n\n if (total > MAX_ANNOTATION_INSTRUCTION_CHARACTERS) {\n context.addIssue({\n code: \"custom\",\n message: \"Combined target instructions exceed the annotation limit.\",\n path: [\"targets\"],\n });\n }\n });\n\nexport const agentCapabilityRequestSchema = z.strictObject({\n providerProfileId: profileIdSchema,\n modelProfileId: profileIdSchema,\n});\n\nexport const agentWorkspaceHealthRequestSchema = z.strictObject({});\n\nexport const agentJobCreateRequestSchema = z.strictObject({\n annotation: spotAnnotationRequestSchema,\n providerProfileId: profileIdSchema,\n modelProfileId: profileIdSchema,\n providerDataConsent: z.literal(true),\n workingTreeMode: z\n .enum([\"require-clean\", \"include-local-changes\"])\n .default(\"require-clean\"),\n});\n\nexport const agentJobActionRequestSchema = z.strictObject({});\n\nexport type SourceContextRequest = z.infer<typeof sourceContextRequestSchema>;\nexport type RuntimeBootstrapRequest = z.infer<typeof runtimeBootstrapRequestSchema>;\nexport type OpenEditorRequest = z.infer<typeof openEditorRequestSchema>;\nexport type AgentCapabilityRequest = z.infer<typeof agentCapabilityRequestSchema>;\nexport interface AgentJobCreateRequest {\n readonly annotation: SpotAnnotation;\n readonly providerProfileId: string;\n readonly modelProfileId: string;\n readonly providerDataConsent: true;\n readonly workingTreeMode: \"require-clean\" | \"include-local-changes\";\n}\n","import { z } from \"zod\";\n\nimport { ERROR_CODES } from \"../errors/error-code.js\";\nimport {\n AGENT_CAPABILITY_STATES,\n AGENT_CHECK_STATUSES,\n AGENT_FILE_CHANGE_KINDS,\n AGENT_JOB_STATUSES,\n AGENT_WORKSPACE_STATES,\n} from \"../model/agent.js\";\n\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);\nconst boundedString = (maximum: number): z.ZodString => z.string().max(maximum);\nconst errorCodeSchema = z.enum(ERROR_CODES);\n\nexport const agentCapabilitySnapshotSchema = z.strictObject({\n providerProfileId: profileIdSchema,\n providerLabel: boundedString(100),\n modelProfileId: profileIdSchema,\n modelLabel: boundedString(100),\n protocol: z.enum([\"responses\", \"chat-completions\"]),\n state: z.enum(AGENT_CAPABILITY_STATES),\n authenticated: z.boolean(),\n modelAvailable: z.boolean(),\n toolCalling: z.boolean(),\n toolResultContinuation: z.boolean(),\n streaming: z.boolean(),\n checkedAt: z.iso.datetime().optional(),\n errorCode: errorCodeSchema.optional(),\n});\n\nexport const agentWorkspaceHealthSnapshotSchema = z\n .strictObject({\n state: z.enum(AGENT_WORKSPACE_STATES),\n checkedAt: z.iso.datetime(),\n changes: z.strictObject({\n staged: z.number().int().nonnegative(),\n unstaged: z.number().int().nonnegative(),\n untracked: z.number().int().nonnegative(),\n conflicted: z.number().int().nonnegative(),\n total: z.number().int().nonnegative(),\n }),\n canIncludeLocalChanges: z.boolean(),\n errorCode: errorCodeSchema.optional(),\n })\n .refine(\n ({ state, changes, canIncludeLocalChanges, errorCode }) => {\n const countsAreConsistent =\n changes.total >= changes.staged &&\n changes.total >= changes.unstaged &&\n changes.total >= changes.untracked &&\n changes.total >= changes.conflicted &&\n changes.total <= changes.staged + changes.unstaged + changes.untracked;\n\n if (!countsAreConsistent) {\n return false;\n }\n\n if (state === \"ready\") {\n return (\n changes.total === 0 && !canIncludeLocalChanges && errorCode === undefined\n );\n }\n\n if (state === \"consent-required\") {\n return (\n changes.total > 0 &&\n changes.conflicted === 0 &&\n canIncludeLocalChanges &&\n errorCode === undefined\n );\n }\n\n return !canIncludeLocalChanges && errorCode !== undefined;\n },\n { message: \"Agent workspace health fields are inconsistent.\" },\n );\n\nexport const agentChangedFileSchema = z.strictObject({\n relativePath: boundedString(1_024),\n kind: z.enum(AGENT_FILE_CHANGE_KINDS),\n additions: z.number().int().nonnegative(),\n deletions: z.number().int().nonnegative(),\n});\n\nexport const agentCheckResultSchema = z.strictObject({\n checkId: profileIdSchema,\n label: boundedString(100),\n status: z.enum(AGENT_CHECK_STATUSES),\n durationMs: z.number().int().nonnegative(),\n output: boundedString(80_000),\n});\n\nexport const agentJobSnapshotSchema = z.strictObject({\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n status: z.enum(AGENT_JOB_STATUSES),\n providerProfileId: profileIdSchema,\n providerLabel: boundedString(100),\n modelProfileId: profileIdSchema,\n modelLabel: boundedString(100),\n phaseMessage: boundedString(1_024),\n createdAt: z.iso.datetime(),\n updatedAt: z.iso.datetime(),\n canCancel: z.boolean(),\n canApply: z.boolean(),\n canRevert: z.boolean(),\n errorCode: errorCodeSchema.optional(),\n});\n\nexport const agentJobResultSchema = z.strictObject({\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n summary: boundedString(80_000),\n diff: boundedString(1_000_000),\n files: z.array(agentChangedFileSchema).max(100),\n checks: z.array(agentCheckResultSchema).max(100),\n});\n\nexport const agentJobResultResponseSchema = z\n .strictObject({\n snapshot: agentJobSnapshotSchema,\n result: agentJobResultSchema.optional(),\n })\n .superRefine((value, context) => {\n if (value.result !== undefined && value.result.jobId !== value.snapshot.jobId) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent result and snapshot job IDs must match.\",\n path: [\"result\", \"jobId\"],\n });\n }\n });\n\nconst agentJobEventBaseSchema = z.strictObject({\n schemaVersion: z.literal(2),\n sequence: z.number().int().positive(),\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n status: z.enum(AGENT_JOB_STATUSES),\n timestamp: z.iso.datetime(),\n});\n\nexport const agentJobEventSchema = z\n .discriminatedUnion(\"type\", [\n agentJobEventBaseSchema.extend({\n type: z.literal(\"snapshot\"),\n data: z.strictObject({ snapshot: agentJobSnapshotSchema }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"phase\"),\n data: z.strictObject({ message: boundedString(1_024) }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"tool\"),\n data: z.strictObject({\n turn: z.number().int().positive(),\n toolCallId: boundedString(256),\n toolName: boundedString(100),\n state: z.enum([\"started\", \"succeeded\", \"failed\"]),\n relativePath: boundedString(1_024).optional(),\n checkLabel: boundedString(100).optional(),\n }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"check\"),\n data: z.strictObject({ result: agentCheckResultSchema }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"result-ready\"),\n data: z.strictObject({ hasResult: z.literal(true) }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"error\"),\n data: z.strictObject({\n code: errorCodeSchema,\n message: boundedString(1_024),\n }),\n }),\n ])\n .superRefine((event, context) => {\n if (event.type !== \"snapshot\") {\n return;\n }\n\n if (event.data.snapshot.jobId !== event.jobId) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent event and snapshot job IDs must match.\",\n path: [\"data\", \"snapshot\", \"jobId\"],\n });\n }\n\n if (event.data.snapshot.status !== event.status) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent event and snapshot statuses must match.\",\n path: [\"data\", \"snapshot\", \"status\"],\n });\n }\n });\n","export const SPOTPATCH_REPOSITORY_URL =\n \"https://github.com/huanglvjing/spotpatch\" as const;\n"],"mappings":"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","names":["import_zod","profileIdSchema","import_zod","profileIdSchema","boundedString"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -128,6 +128,7 @@ declare const SPOTPATCH_LOCALE_PREFERENCES: readonly ["auto", "en-US", "zh-CN"];
|
|
|
128
128
|
type SpotPatchLocalePreference = (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];
|
|
129
129
|
interface SpotTargetContext {
|
|
130
130
|
readonly instruction: string;
|
|
131
|
+
readonly page?: Readonly<PageContext>;
|
|
131
132
|
readonly source: SourceRef;
|
|
132
133
|
readonly react: ReactContext;
|
|
133
134
|
readonly element: ElementContext;
|
|
@@ -376,6 +377,7 @@ interface RuntimeConfigBase {
|
|
|
376
377
|
readonly locale: (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];
|
|
377
378
|
readonly maxTargets: number;
|
|
378
379
|
readonly redact: boolean;
|
|
380
|
+
readonly sessionId: string;
|
|
379
381
|
readonly sessionToken: string;
|
|
380
382
|
readonly shortcut: string;
|
|
381
383
|
readonly spotPatchVersion: string;
|
|
@@ -412,6 +414,14 @@ declare const openEditorRequestSchema: z.ZodObject<{
|
|
|
412
414
|
}, z.core.$strict>;
|
|
413
415
|
declare const spotTargetContextRequestSchema: z.ZodObject<{
|
|
414
416
|
instruction: z.ZodString;
|
|
417
|
+
page: z.ZodOptional<z.ZodObject<{
|
|
418
|
+
url: z.ZodString;
|
|
419
|
+
pathname: z.ZodString;
|
|
420
|
+
title: z.ZodString;
|
|
421
|
+
viewportWidth: z.ZodNumber;
|
|
422
|
+
viewportHeight: z.ZodNumber;
|
|
423
|
+
devicePixelRatio: z.ZodNumber;
|
|
424
|
+
}, z.core.$strict>>;
|
|
415
425
|
source: z.ZodObject<{
|
|
416
426
|
fileId: z.ZodOptional<z.ZodString>;
|
|
417
427
|
relativePath: z.ZodOptional<z.ZodString>;
|
|
@@ -512,6 +522,14 @@ declare const spotAnnotationRequestSchema: z.ZodObject<{
|
|
|
512
522
|
}, z.core.$strict>;
|
|
513
523
|
targets: z.ZodArray<z.ZodObject<{
|
|
514
524
|
instruction: z.ZodString;
|
|
525
|
+
page: z.ZodOptional<z.ZodObject<{
|
|
526
|
+
url: z.ZodString;
|
|
527
|
+
pathname: z.ZodString;
|
|
528
|
+
title: z.ZodString;
|
|
529
|
+
viewportWidth: z.ZodNumber;
|
|
530
|
+
viewportHeight: z.ZodNumber;
|
|
531
|
+
devicePixelRatio: z.ZodNumber;
|
|
532
|
+
}, z.core.$strict>>;
|
|
515
533
|
source: z.ZodObject<{
|
|
516
534
|
fileId: z.ZodOptional<z.ZodString>;
|
|
517
535
|
relativePath: z.ZodOptional<z.ZodString>;
|
|
@@ -620,6 +638,14 @@ declare const agentJobCreateRequestSchema: z.ZodObject<{
|
|
|
620
638
|
}, z.core.$strict>;
|
|
621
639
|
targets: z.ZodArray<z.ZodObject<{
|
|
622
640
|
instruction: z.ZodString;
|
|
641
|
+
page: z.ZodOptional<z.ZodObject<{
|
|
642
|
+
url: z.ZodString;
|
|
643
|
+
pathname: z.ZodString;
|
|
644
|
+
title: z.ZodString;
|
|
645
|
+
viewportWidth: z.ZodNumber;
|
|
646
|
+
viewportHeight: z.ZodNumber;
|
|
647
|
+
devicePixelRatio: z.ZodNumber;
|
|
648
|
+
}, z.core.$strict>>;
|
|
623
649
|
source: z.ZodObject<{
|
|
624
650
|
fileId: z.ZodOptional<z.ZodString>;
|
|
625
651
|
relativePath: z.ZodOptional<z.ZodString>;
|
package/dist/index.d.ts
CHANGED
|
@@ -128,6 +128,7 @@ declare const SPOTPATCH_LOCALE_PREFERENCES: readonly ["auto", "en-US", "zh-CN"];
|
|
|
128
128
|
type SpotPatchLocalePreference = (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];
|
|
129
129
|
interface SpotTargetContext {
|
|
130
130
|
readonly instruction: string;
|
|
131
|
+
readonly page?: Readonly<PageContext>;
|
|
131
132
|
readonly source: SourceRef;
|
|
132
133
|
readonly react: ReactContext;
|
|
133
134
|
readonly element: ElementContext;
|
|
@@ -376,6 +377,7 @@ interface RuntimeConfigBase {
|
|
|
376
377
|
readonly locale: (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];
|
|
377
378
|
readonly maxTargets: number;
|
|
378
379
|
readonly redact: boolean;
|
|
380
|
+
readonly sessionId: string;
|
|
379
381
|
readonly sessionToken: string;
|
|
380
382
|
readonly shortcut: string;
|
|
381
383
|
readonly spotPatchVersion: string;
|
|
@@ -412,6 +414,14 @@ declare const openEditorRequestSchema: z.ZodObject<{
|
|
|
412
414
|
}, z.core.$strict>;
|
|
413
415
|
declare const spotTargetContextRequestSchema: z.ZodObject<{
|
|
414
416
|
instruction: z.ZodString;
|
|
417
|
+
page: z.ZodOptional<z.ZodObject<{
|
|
418
|
+
url: z.ZodString;
|
|
419
|
+
pathname: z.ZodString;
|
|
420
|
+
title: z.ZodString;
|
|
421
|
+
viewportWidth: z.ZodNumber;
|
|
422
|
+
viewportHeight: z.ZodNumber;
|
|
423
|
+
devicePixelRatio: z.ZodNumber;
|
|
424
|
+
}, z.core.$strict>>;
|
|
415
425
|
source: z.ZodObject<{
|
|
416
426
|
fileId: z.ZodOptional<z.ZodString>;
|
|
417
427
|
relativePath: z.ZodOptional<z.ZodString>;
|
|
@@ -512,6 +522,14 @@ declare const spotAnnotationRequestSchema: z.ZodObject<{
|
|
|
512
522
|
}, z.core.$strict>;
|
|
513
523
|
targets: z.ZodArray<z.ZodObject<{
|
|
514
524
|
instruction: z.ZodString;
|
|
525
|
+
page: z.ZodOptional<z.ZodObject<{
|
|
526
|
+
url: z.ZodString;
|
|
527
|
+
pathname: z.ZodString;
|
|
528
|
+
title: z.ZodString;
|
|
529
|
+
viewportWidth: z.ZodNumber;
|
|
530
|
+
viewportHeight: z.ZodNumber;
|
|
531
|
+
devicePixelRatio: z.ZodNumber;
|
|
532
|
+
}, z.core.$strict>>;
|
|
515
533
|
source: z.ZodObject<{
|
|
516
534
|
fileId: z.ZodOptional<z.ZodString>;
|
|
517
535
|
relativePath: z.ZodOptional<z.ZodString>;
|
|
@@ -620,6 +638,14 @@ declare const agentJobCreateRequestSchema: z.ZodObject<{
|
|
|
620
638
|
}, z.core.$strict>;
|
|
621
639
|
targets: z.ZodArray<z.ZodObject<{
|
|
622
640
|
instruction: z.ZodString;
|
|
641
|
+
page: z.ZodOptional<z.ZodObject<{
|
|
642
|
+
url: z.ZodString;
|
|
643
|
+
pathname: z.ZodString;
|
|
644
|
+
title: z.ZodString;
|
|
645
|
+
viewportWidth: z.ZodNumber;
|
|
646
|
+
viewportHeight: z.ZodNumber;
|
|
647
|
+
devicePixelRatio: z.ZodNumber;
|
|
648
|
+
}, z.core.$strict>>;
|
|
623
649
|
source: z.ZodObject<{
|
|
624
650
|
fileId: z.ZodOptional<z.ZodString>;
|
|
625
651
|
relativePath: z.ZodOptional<z.ZodString>;
|
package/dist/index.js
CHANGED
|
@@ -198,6 +198,7 @@ var runtimeConfigBaseShape = {
|
|
|
198
198
|
locale: z.enum(SPOTPATCH_LOCALE_PREFERENCES),
|
|
199
199
|
maxTargets: z.number().int().min(1).max(MAX_ANNOTATION_TARGETS),
|
|
200
200
|
redact: z.boolean(),
|
|
201
|
+
sessionId: z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/u),
|
|
201
202
|
sessionToken: z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/u),
|
|
202
203
|
shortcut: boundedText(128),
|
|
203
204
|
spotPatchVersion: boundedText(64)
|
|
@@ -332,8 +333,17 @@ var codeContextSchema = z2.strictObject({
|
|
|
332
333
|
excerpt: boundedString(16e3),
|
|
333
334
|
boundary: z2.enum(["component", "nearby-lines"])
|
|
334
335
|
});
|
|
336
|
+
var pageContextSchema = z2.strictObject({
|
|
337
|
+
url: boundedString(2048),
|
|
338
|
+
pathname: boundedString(2048),
|
|
339
|
+
title: boundedString(1024),
|
|
340
|
+
viewportWidth: z2.number().nonnegative(),
|
|
341
|
+
viewportHeight: z2.number().nonnegative(),
|
|
342
|
+
devicePixelRatio: z2.number().positive()
|
|
343
|
+
});
|
|
335
344
|
var spotTargetContextRequestSchema = z2.strictObject({
|
|
336
345
|
instruction: z2.string().trim().min(1).max(MAX_TARGET_INSTRUCTION_CHARACTERS),
|
|
346
|
+
page: pageContextSchema.optional(),
|
|
337
347
|
source: sourceRefSchema,
|
|
338
348
|
react: z2.strictObject({
|
|
339
349
|
supported: z2.boolean(),
|
|
@@ -369,14 +379,7 @@ var spotAnnotationRequestSchema = z2.strictObject({
|
|
|
369
379
|
schemaVersion: z2.literal(3),
|
|
370
380
|
id: boundedString(128),
|
|
371
381
|
locale: z2.enum(SPOTPATCH_LOCALES),
|
|
372
|
-
page:
|
|
373
|
-
url: boundedString(2048),
|
|
374
|
-
pathname: boundedString(2048),
|
|
375
|
-
title: boundedString(1024),
|
|
376
|
-
viewportWidth: z2.number().nonnegative(),
|
|
377
|
-
viewportHeight: z2.number().nonnegative(),
|
|
378
|
-
devicePixelRatio: z2.number().positive()
|
|
379
|
-
}),
|
|
382
|
+
page: pageContextSchema,
|
|
380
383
|
targets: z2.array(spotTargetContextRequestSchema).min(1).max(MAX_ANNOTATION_TARGETS),
|
|
381
384
|
createdAt: z2.iso.datetime()
|
|
382
385
|
}).superRefine((annotation, context) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/spotpatch-error.ts","../src/errors/error-code.ts","../src/security/redaction.ts","../src/model/annotation.ts","../src/model/runtime-config.ts","../src/protocol/endpoints.ts","../src/model/editor.ts","../src/model/agent.ts","../src/model/source-marker.ts","../src/protocol/requests.ts","../src/protocol/agent-schemas.ts","../src/product.ts"],"sourcesContent":["import type { ErrorCode } from \"./error-code.js\";\n\nexport class SpotPatchError extends Error {\n readonly code: ErrorCode;\n\n constructor(code: ErrorCode, message = code, options?: ErrorOptions) {\n super(message, options);\n this.name = \"SpotPatchError\";\n this.code = code;\n }\n}\n","export const ERROR_CODES = {\n INVALID_REQUEST: \"INVALID_REQUEST\",\n INVALID_TOKEN: \"INVALID_TOKEN\",\n ORIGIN_NOT_ALLOWED: \"ORIGIN_NOT_ALLOWED\",\n SOURCE_NOT_FOUND: \"SOURCE_NOT_FOUND\",\n SOURCE_OUTSIDE_ROOT: \"SOURCE_OUTSIDE_ROOT\",\n SOURCE_TOO_LARGE: \"SOURCE_TOO_LARGE\",\n EDITOR_OPEN_FAILED: \"EDITOR_OPEN_FAILED\",\n AI_DISABLED: \"AI_DISABLED\",\n PROVIDER_NOT_CONFIGURED: \"PROVIDER_NOT_CONFIGURED\",\n PROVIDER_AUTH_FAILED: \"PROVIDER_AUTH_FAILED\",\n PROVIDER_PROTOCOL_UNSUPPORTED: \"PROVIDER_PROTOCOL_UNSUPPORTED\",\n MODEL_NOT_ALLOWED: \"MODEL_NOT_ALLOWED\",\n MODEL_TOOL_CALL_UNSUPPORTED: \"MODEL_TOOL_CALL_UNSUPPORTED\",\n PROVIDER_RATE_LIMITED: \"PROVIDER_RATE_LIMITED\",\n AGENT_BUSY: \"AGENT_BUSY\",\n AGENT_LIMIT_EXCEEDED: \"AGENT_LIMIT_EXCEEDED\",\n AGENT_CANCELLED: \"AGENT_CANCELLED\",\n WORKTREE_DIRTY: \"WORKTREE_DIRTY\",\n WORKTREE_NOT_REPOSITORY: \"WORKTREE_NOT_REPOSITORY\",\n WORKTREE_OPERATION_IN_PROGRESS: \"WORKTREE_OPERATION_IN_PROGRESS\",\n WORKTREE_CONFLICTED: \"WORKTREE_CONFLICTED\",\n WORKTREE_LOCAL_CHANGES_TOO_LARGE: \"WORKTREE_LOCAL_CHANGES_TOO_LARGE\",\n WORKTREE_UNTRACKED_UNSUPPORTED: \"WORKTREE_UNTRACKED_UNSUPPORTED\",\n WORKTREE_LOCAL_CHANGES_UNSUPPORTED: \"WORKTREE_LOCAL_CHANGES_UNSUPPORTED\",\n TOOL_DENIED: \"TOOL_DENIED\",\n TOOL_INPUT_INVALID: \"TOOL_INPUT_INVALID\",\n TOOL_ARGUMENTS_INVALID: \"TOOL_ARGUMENTS_INVALID\",\n TOOL_CALL_ID_CONFLICT: \"TOOL_CALL_ID_CONFLICT\",\n TOOL_PATH_DENIED: \"TOOL_PATH_DENIED\",\n PATCH_REJECTED: \"PATCH_REJECTED\",\n VALIDATION_FAILED: \"VALIDATION_FAILED\",\n APPLY_CONFLICT: \"APPLY_CONFLICT\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n","const INLINE_DATA_PATTERN = /data:[^\\s\"'<>]*;base64,[a-z0-9+/_=-]+/giu;\nconst BLOB_URL_PATTERN = /blob:[^\\s\"'<>]+/giu;\nconst BEARER_PATTERN = /\\bbearer\\s+[a-z0-9._~+/-]+=*/giu;\nconst URL_CREDENTIAL_PATTERN = /\\b(https?:\\/\\/)[^/\\s:@]+:[^/\\s@]+@/giu;\nconst SECRET_ASSIGNMENT_PATTERN =\n /\\b(authorization|cookie|set-cookie|api[-_]?key|(?:access[-_]?|refresh[-_]?|auth[-_]?)?token|secret|password|default[-_]?value|value)\\b(\\s*[:=]\\s*)(\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|'(?:\\\\.|[^'\\\\\\r\\n])*'|`(?:\\\\.|[^`\\\\\\r\\n])*`|[^\\s,;\"'<>]+)/giu;\nconst SENSITIVE_EXACT_NAMES = new Set([\n \"authorization\",\n \"cookie\",\n \"defaultvalue\",\n \"password\",\n \"setcookie\",\n \"value\",\n]);\nconst MAX_URL_CHARACTERS = 500;\n\nfunction compactName(name: string): string {\n return name.toLowerCase().replaceAll(/[-_:]/gu, \"\");\n}\n\nfunction truncate(value: string, maxCharacters: number): string {\n return value.length <= maxCharacters\n ? value\n : `${value.slice(0, Math.max(0, maxCharacters - 1))}…`;\n}\n\nexport function isSensitiveName(name: string): boolean {\n const compact = compactName(name);\n\n return (\n SENSITIVE_EXACT_NAMES.has(compact) ||\n compact.includes(\"apikey\") ||\n compact.includes(\"authorization\") ||\n compact.includes(\"secret\") ||\n compact.includes(\"token\")\n );\n}\n\nexport function redactSensitiveText(value: string): string {\n return value\n .replace(INLINE_DATA_PATTERN, \"[redacted inline data]\")\n .replace(BLOB_URL_PATTERN, \"[redacted blob URL]\")\n .replace(BEARER_PATTERN, \"Bearer [redacted]\")\n .replace(URL_CREDENTIAL_PATTERN, \"$1[redacted]@\")\n .replace(\n SECRET_ASSIGNMENT_PATTERN,\n (_match, name: string, separator: string, assignedValue: string) => {\n const quote = assignedValue.at(0);\n const quoted = quote === '\"' || quote === \"'\" || quote === \"`\";\n return `${name}${separator}${quoted ? quote : \"\"}[redacted]${quoted ? quote : \"\"}`;\n },\n );\n}\n\nfunction sanitizeParsedUrl(url: URL): string {\n url.username = \"\";\n url.password = \"\";\n\n for (const [name, value] of url.searchParams) {\n if (isSensitiveName(name)) {\n url.searchParams.set(name, \"[redacted]\");\n } else {\n url.searchParams.set(name, redactSensitiveText(value));\n }\n }\n\n if (/token|secret|authorization|api[-_]?key/iu.test(url.hash)) {\n url.hash = \"#[redacted]\";\n }\n\n return url.toString();\n}\n\nexport function sanitizeUrl(value: string, baseUrl: string): string {\n const trimmed = value.trim();\n\n if (/^(?:blob|data|javascript):/iu.test(trimmed)) {\n return \"[redacted URL]\";\n }\n\n const normalized = redactSensitiveText(trimmed);\n\n try {\n const parsed = new URL(normalized, baseUrl);\n const sanitized = sanitizeParsedUrl(parsed);\n const base = new URL(baseUrl);\n\n if (!/^[a-z][a-z\\d+.-]*:/iu.test(normalized) && parsed.origin === base.origin) {\n return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n }\n\n return sanitized;\n } catch {\n return truncate(normalized, MAX_URL_CHARACTERS);\n }\n}\n","import type { CodeContext } from \"./code-context.js\";\nimport type { ReactContext, SourceRef } from \"./source-ref.js\";\nimport type { StyleContext } from \"./style-context.js\";\n\nexport interface PageContext {\n readonly url: string;\n readonly pathname: string;\n readonly title: string;\n readonly viewportWidth: number;\n readonly viewportHeight: number;\n readonly devicePixelRatio: number;\n}\n\nexport interface ElementContext {\n readonly tagName: string;\n readonly selector: string;\n readonly sanitizedHtml: string;\n readonly textPreview?: string;\n readonly role?: string;\n readonly rect: Readonly<{\n x: number;\n y: number;\n width: number;\n height: number;\n }>;\n}\n\n/** Protocol hard limit. Runtime configuration may choose a smaller limit. */\nexport const MAX_ANNOTATION_TARGETS = 20;\n\n/** Each target owns its requested change; the UI enforces the same bound. */\nexport const MAX_TARGET_INSTRUCTION_CHARACTERS = 2_000;\n\n/** Keeps the complete, atomic user intent within the prompt and request budgets. */\nexport const MAX_ANNOTATION_INSTRUCTION_CHARACTERS = 4_000;\n\nexport const SPOTPATCH_LOCALES = Object.freeze([\"en-US\", \"zh-CN\"] as const);\nexport type SpotPatchLocale = (typeof SPOTPATCH_LOCALES)[number];\nexport const SPOTPATCH_LOCALE_PREFERENCES = Object.freeze([\n \"auto\",\n ...SPOTPATCH_LOCALES,\n] as const);\nexport type SpotPatchLocalePreference = (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];\n\nexport interface SpotTargetContext {\n readonly instruction: string;\n readonly source: SourceRef;\n readonly react: ReactContext;\n readonly element: ElementContext;\n readonly styles: StyleContext;\n readonly code?: CodeContext;\n readonly warnings: readonly string[];\n}\n\nexport interface SpotAnnotation {\n readonly schemaVersion: 3;\n readonly id: string;\n readonly locale: SpotPatchLocale;\n readonly page: Readonly<PageContext>;\n readonly targets: readonly SpotTargetContext[];\n readonly createdAt: string;\n}\n","import { z } from \"zod\";\n\nimport { SPOTPATCH_API_BASE } from \"../protocol/endpoints.js\";\nimport { MAX_ANNOTATION_TARGETS, SPOTPATCH_LOCALE_PREFERENCES } from \"./annotation.js\";\nimport { SPOTPATCH_EDITOR_PREFERENCES } from \"./editor.js\";\nimport type { ContextBudget } from \"./code-context.js\";\nimport type { RuntimeAiConfig } from \"./agent.js\";\n\nexport const SPOTPATCH_NEXT_BUNDLERS = Object.freeze([\"turbopack\", \"webpack\"] as const);\nexport const SPOTPATCH_NEXT_ROUTER_KINDS = Object.freeze([\n \"app\",\n \"pages\",\n \"hybrid\",\n] as const);\n\nexport type SpotPatchNextBundler = (typeof SPOTPATCH_NEXT_BUNDLERS)[number];\nexport type SpotPatchNextRouterKind = (typeof SPOTPATCH_NEXT_ROUTER_KINDS)[number];\n\ninterface RuntimeConfigBase {\n readonly apiBase: typeof SPOTPATCH_API_BASE;\n readonly ai: RuntimeAiConfig;\n readonly budget: Readonly<ContextBudget>;\n readonly debug: boolean;\n readonly editor: (typeof SPOTPATCH_EDITOR_PREFERENCES)[number];\n readonly frameworkVersion: string;\n readonly locale: (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];\n readonly maxTargets: number;\n readonly redact: boolean;\n readonly sessionToken: string;\n readonly shortcut: string;\n readonly spotPatchVersion: string;\n}\n\nexport type SpotPatchRuntimeConfig = RuntimeConfigBase &\n (\n | Readonly<{\n framework: \"vite\";\n }>\n | Readonly<{\n bundler: SpotPatchNextBundler;\n framework: \"next\";\n routerKind: SpotPatchNextRouterKind;\n }>\n );\n\nconst boundedText = (maximum: number): z.ZodString =>\n z.string().trim().min(1).max(maximum);\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/u);\nconst runtimeAiModelSchema = z.strictObject({\n id: profileIdSchema,\n label: boundedText(100),\n});\nconst runtimeAiProviderSchema = z\n .strictObject({\n id: profileIdSchema,\n label: boundedText(100),\n protocol: z.enum([\"responses\", \"chat-completions\"]),\n models: z.array(runtimeAiModelSchema).min(1).max(64),\n defaultModel: profileIdSchema,\n })\n .refine(\n ({ defaultModel, models }) =>\n models.some(({ id }) => id === defaultModel) &&\n new Set(models.map(({ id }) => id)).size === models.length,\n { message: \"Runtime AI model profiles are inconsistent.\" },\n );\nconst runtimeAiConfigSchema = z.discriminatedUnion(\"enabled\", [\n z.strictObject({ enabled: z.literal(false) }),\n z\n .strictObject({\n enabled: z.literal(true),\n providers: z.array(runtimeAiProviderSchema).min(1).max(32),\n defaultProvider: profileIdSchema,\n applyMode: z.enum([\"review\", \"auto\"]),\n })\n .refine(\n ({ defaultProvider, providers }) =>\n providers.some(({ id }) => id === defaultProvider) &&\n new Set(providers.map(({ id }) => id)).size === providers.length,\n { message: \"Runtime AI provider profiles are inconsistent.\" },\n ),\n]);\nconst positiveInteger = z.number().int().positive();\nconst runtimeConfigBaseShape = {\n apiBase: z.literal(SPOTPATCH_API_BASE),\n ai: runtimeAiConfigSchema,\n budget: z.strictObject({\n totalCharacters: positiveInteger,\n domCharacters: positiveInteger,\n cssCharacters: positiveInteger,\n codeCharacters: positiveInteger,\n maxCodeLines: positiveInteger,\n maxComponentDepth: positiveInteger,\n }),\n debug: z.boolean(),\n editor: z.enum(SPOTPATCH_EDITOR_PREFERENCES),\n frameworkVersion: boundedText(64),\n locale: z.enum(SPOTPATCH_LOCALE_PREFERENCES),\n maxTargets: z.number().int().min(1).max(MAX_ANNOTATION_TARGETS),\n redact: z.boolean(),\n sessionToken: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/u),\n shortcut: boundedText(128),\n spotPatchVersion: boundedText(64),\n} as const;\n\nexport const runtimeConfigSchema: z.ZodType<SpotPatchRuntimeConfig> =\n z.discriminatedUnion(\"framework\", [\n z.strictObject({\n ...runtimeConfigBaseShape,\n framework: z.literal(\"vite\"),\n }),\n z.strictObject({\n ...runtimeConfigBaseShape,\n bundler: z.enum(SPOTPATCH_NEXT_BUNDLERS),\n framework: z.literal(\"next\"),\n routerKind: z.enum(SPOTPATCH_NEXT_ROUTER_KINDS),\n }),\n ]);\n","export const SPOTPATCH_API_BASE = \"/__spotpatch/v1\" as const;\nexport const SPOTPATCH_TOKEN_HEADER = \"X-SpotPatch-Token\" as const;\n\nexport const SPOTPATCH_ENDPOINTS = Object.freeze({\n bootstrap: `${SPOTPATCH_API_BASE}/bootstrap`,\n sourceContext: `${SPOTPATCH_API_BASE}/source-context`,\n openEditor: `${SPOTPATCH_API_BASE}/open-editor`,\n agentCapability: `${SPOTPATCH_API_BASE}/agent/capability`,\n agentWorkspaceHealth: `${SPOTPATCH_API_BASE}/agent/workspace-health`,\n agentJobs: `${SPOTPATCH_API_BASE}/agent/jobs`,\n});\n\nexport type AgentJobAction = \"events\" | \"result\" | \"cancel\" | \"apply\" | \"revert\";\n\nexport function getAgentJobEndpoint(jobId: string, action: AgentJobAction): string {\n return `${SPOTPATCH_ENDPOINTS.agentJobs}/${encodeURIComponent(jobId)}/${action}`;\n}\n","export const SPOTPATCH_EDITOR_PREFERENCES = [\"auto\", \"vscode\", \"cursor\"] as const;\n\nexport type SpotPatchEditorPreference = (typeof SPOTPATCH_EDITOR_PREFERENCES)[number];\n\nexport interface EditorOpenResult {\n readonly editor: SpotPatchEditorPreference;\n}\n","import type { ErrorCode } from \"../errors/error-code.js\";\n\nexport type AiProviderProtocol = \"responses\" | \"chat-completions\";\nexport type AiProviderAuthentication = \"bearer\" | \"x-api-key\";\nexport type AgentApplyMode = \"review\" | \"auto\";\nexport type AgentWorkingTreeMode = \"require-clean\" | \"include-local-changes\";\n\nexport interface AiModelProfile {\n readonly label: string;\n readonly model: string;\n}\n\nexport interface OpenAICompatibleProviderOptions {\n readonly type: \"openai-compatible\";\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly authentication?: AiProviderAuthentication;\n readonly baseURL: string;\n readonly apiKeyEnv: string;\n readonly models: Readonly<Record<string, AiModelProfile>>;\n readonly defaultModel: string;\n}\n\nexport interface AgentCheckDefinition {\n readonly label: string;\n readonly command: string;\n readonly args?: readonly string[];\n readonly required?: boolean;\n readonly timeoutMs?: number;\n}\n\nexport interface AgentLimits {\n readonly maxTurns: number;\n readonly maxToolCalls: number;\n readonly maxChangedFiles: number;\n readonly maxDiffBytes: number;\n readonly maxReadBytesPerFile: number;\n readonly maxToolOutputCharacters: number;\n readonly maxProviderResponseBytes: number;\n readonly providerConnectTimeoutMs: number;\n readonly providerFirstByteTimeoutMs: number;\n readonly providerIdleTimeoutMs: number;\n readonly checkTimeoutMs: number;\n readonly jobTimeoutMs: number;\n}\n\nexport const DEFAULT_AGENT_LIMITS = Object.freeze({\n maxTurns: 20,\n maxToolCalls: 80,\n maxChangedFiles: 20,\n maxDiffBytes: 512_000,\n maxReadBytesPerFile: 256_000,\n maxToolOutputCharacters: 40_000,\n maxProviderResponseBytes: 2_000_000,\n providerConnectTimeoutMs: 15_000,\n providerFirstByteTimeoutMs: 30_000,\n providerIdleTimeoutMs: 60_000,\n checkTimeoutMs: 120_000,\n jobTimeoutMs: 600_000,\n} satisfies AgentLimits);\n\nexport interface AiExecutionOptions {\n readonly isolation?: \"git-worktree\";\n readonly applyMode?: AgentApplyMode;\n readonly checks?: Readonly<Record<string, AgentCheckDefinition>>;\n readonly limits?: Partial<AgentLimits>;\n}\n\nexport interface AiOptions {\n readonly providers: Readonly<Record<string, OpenAICompatibleProviderOptions>>;\n readonly defaultProvider: string;\n readonly execution?: AiExecutionOptions;\n}\n\nexport interface ResolvedAiModelProfile extends AiModelProfile {\n readonly id: string;\n}\n\nexport interface ResolvedOpenAICompatibleProviderOptions {\n readonly id: string;\n readonly type: \"openai-compatible\";\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly authentication: AiProviderAuthentication;\n readonly baseURL: string;\n readonly apiKeyEnv: string;\n readonly models: Readonly<Record<string, ResolvedAiModelProfile>>;\n readonly defaultModel: string;\n}\n\nexport interface ResolvedAgentCheckDefinition {\n readonly id: string;\n readonly label: string;\n readonly command: string;\n readonly args: readonly string[];\n readonly required: boolean;\n readonly timeoutMs: number;\n}\n\nexport interface ResolvedAiExecutionOptions {\n readonly isolation: \"git-worktree\";\n readonly applyMode: AgentApplyMode;\n readonly checks: Readonly<Record<string, ResolvedAgentCheckDefinition>>;\n readonly limits: Readonly<AgentLimits>;\n}\n\nexport interface ResolvedAiOptions {\n readonly providers: Readonly<Record<string, ResolvedOpenAICompatibleProviderOptions>>;\n readonly defaultProvider: string;\n readonly execution: ResolvedAiExecutionOptions;\n}\n\nexport interface RuntimeAiModelProfile {\n readonly id: string;\n readonly label: string;\n}\n\nexport interface RuntimeAiProviderProfile {\n readonly id: string;\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly models: readonly RuntimeAiModelProfile[];\n readonly defaultModel: string;\n}\n\nexport type RuntimeAiConfig =\n | Readonly<{ enabled: false }>\n | Readonly<{\n enabled: true;\n providers: readonly RuntimeAiProviderProfile[];\n defaultProvider: string;\n applyMode: AgentApplyMode;\n }>;\n\nexport const AGENT_JOB_STATUSES = Object.freeze([\n \"queued\",\n \"preparing\",\n \"running\",\n \"validating\",\n \"awaiting-review\",\n \"applying\",\n \"applied\",\n \"completed\",\n \"cancelling\",\n \"cancelled\",\n \"reverting\",\n \"reverted\",\n \"failed\",\n] as const);\n\nexport type AgentJobStatus = (typeof AGENT_JOB_STATUSES)[number];\n\nexport const AGENT_CAPABILITY_STATES = Object.freeze([\n \"unknown\",\n \"probing\",\n \"agent-ready\",\n \"prompt-only\",\n \"unavailable\",\n] as const);\n\nexport type AgentCapabilityState = (typeof AGENT_CAPABILITY_STATES)[number];\n\nexport interface AgentCapabilitySnapshot {\n readonly providerProfileId: string;\n readonly providerLabel: string;\n readonly modelProfileId: string;\n readonly modelLabel: string;\n readonly protocol: AiProviderProtocol;\n readonly state: AgentCapabilityState;\n readonly authenticated: boolean;\n readonly modelAvailable: boolean;\n readonly toolCalling: boolean;\n readonly toolResultContinuation: boolean;\n readonly streaming: boolean;\n readonly checkedAt?: string;\n readonly errorCode?: ErrorCode;\n}\n\nexport const AGENT_WORKSPACE_STATES = Object.freeze([\n \"ready\",\n \"consent-required\",\n \"blocked\",\n] as const);\n\nexport const AGENT_WORKSPACE_SNAPSHOT_LIMITS = Object.freeze({\n maxUntrackedFiles: 1_000,\n maxUntrackedBytes: 20 * 1024 * 1024,\n});\n\nexport type AgentWorkspaceState = (typeof AGENT_WORKSPACE_STATES)[number];\n\nexport interface AgentWorkspaceChangeSummary {\n readonly staged: number;\n readonly unstaged: number;\n readonly untracked: number;\n readonly conflicted: number;\n readonly total: number;\n}\n\nexport interface AgentWorkspaceHealthSnapshot {\n readonly state: AgentWorkspaceState;\n readonly checkedAt: string;\n readonly changes: AgentWorkspaceChangeSummary;\n readonly canIncludeLocalChanges: boolean;\n readonly errorCode?: ErrorCode;\n}\n\nexport const AGENT_FILE_CHANGE_KINDS = Object.freeze([\n \"added\",\n \"modified\",\n \"deleted\",\n] as const);\n\nexport type AgentFileChangeKind = (typeof AGENT_FILE_CHANGE_KINDS)[number];\n\nexport const AGENT_CHECK_STATUSES = Object.freeze([\n \"passed\",\n \"failed\",\n \"cancelled\",\n \"timed-out\",\n] as const);\n\nexport type AgentCheckStatus = (typeof AGENT_CHECK_STATUSES)[number];\n\nexport interface AgentChangedFile {\n readonly relativePath: string;\n readonly kind: AgentFileChangeKind;\n readonly additions: number;\n readonly deletions: number;\n}\n\nexport interface AgentCheckResult {\n readonly checkId: string;\n readonly label: string;\n readonly status: AgentCheckStatus;\n readonly durationMs: number;\n readonly output: string;\n}\n\nexport interface AgentJobSnapshot {\n readonly jobId: string;\n readonly status: AgentJobStatus;\n readonly providerProfileId: string;\n readonly providerLabel: string;\n readonly modelProfileId: string;\n readonly modelLabel: string;\n readonly phaseMessage: string;\n readonly createdAt: string;\n readonly updatedAt: string;\n readonly canCancel: boolean;\n readonly canApply: boolean;\n readonly canRevert: boolean;\n readonly errorCode?: ErrorCode;\n}\n\nexport interface AgentJobResult {\n readonly jobId: string;\n readonly summary: string;\n readonly diff: string;\n readonly files: readonly AgentChangedFile[];\n readonly checks: readonly AgentCheckResult[];\n}\n\nexport interface AgentJobResultResponse {\n readonly snapshot: AgentJobSnapshot;\n readonly result?: AgentJobResult;\n}\n","export const SOURCE_MARKER_ATTRIBUTE = \"data-spotpatch-source\" as const;\n\nconst SOURCE_MARKER_PATTERN = /^([A-Za-z0-9_-]+):([1-9]\\d*):([1-9]\\d*)$/;\n\nexport interface SourceMarker {\n readonly fileId: string;\n readonly line: number;\n readonly column: number;\n}\n\nexport function formatSourceMarker(marker: SourceMarker): string {\n return [marker.fileId, String(marker.line), String(marker.column)].join(\":\");\n}\n\nexport function parseSourceMarker(value: string | null): SourceMarker | undefined {\n if (value === null) {\n return undefined;\n }\n\n const match = SOURCE_MARKER_PATTERN.exec(value);\n\n if (match === null) {\n return undefined;\n }\n\n const fileId = match[1];\n const line = Number(match[2]);\n const column = Number(match[3]);\n\n if (\n fileId === undefined ||\n !Number.isSafeInteger(line) ||\n !Number.isSafeInteger(column)\n ) {\n return undefined;\n }\n\n return Object.freeze({ fileId, line, column });\n}\n","import { z } from \"zod\";\n\nimport {\n MAX_ANNOTATION_INSTRUCTION_CHARACTERS,\n MAX_ANNOTATION_TARGETS,\n MAX_TARGET_INSTRUCTION_CHARACTERS,\n SPOTPATCH_LOCALES,\n type SpotAnnotation,\n} from \"../model/annotation.js\";\n\nexport const runtimeBootstrapRequestSchema = z.strictObject({});\n\nconst sourceCoordinatesSchema = z.strictObject({\n fileId: z.string().min(1).max(128),\n line: z.number().int().positive(),\n column: z.number().int().positive(),\n});\n\nexport const sourceContextRequestSchema = sourceCoordinatesSchema\n .extend({\n maxLines: z.number().int().positive(),\n })\n .strict();\n\nexport const openEditorRequestSchema = sourceCoordinatesSchema.strict();\n\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);\n\nconst boundedString = (maximum: number): z.ZodString => z.string().max(maximum);\nconst sourceRefSchema = z.strictObject({\n fileId: boundedString(128).optional(),\n relativePath: boundedString(1_024).optional(),\n line: z.number().int().positive().optional(),\n column: z.number().int().positive().optional(),\n origin: z.enum([\"jsx-host\", \"react-fiber\", \"dom-ancestor\", \"none\"]),\n confidence: z.enum([\"exact\", \"probable\", \"approximate\", \"unknown\"]),\n});\nconst matchedStyleRuleSchema = z.strictObject({\n selector: boundedString(2_048),\n declarations: boundedString(8_192),\n source: boundedString(1_024).optional(),\n media: boundedString(1_024).optional(),\n});\nconst codeContextSchema = z.strictObject({\n relativePath: boundedString(1_024),\n language: z.enum([\"tsx\", \"jsx\"]),\n startLine: z.number().int().positive(),\n endLine: z.number().int().positive(),\n excerpt: boundedString(16_000),\n boundary: z.enum([\"component\", \"nearby-lines\"]),\n});\n\nexport const spotTargetContextRequestSchema = z.strictObject({\n instruction: z.string().trim().min(1).max(MAX_TARGET_INSTRUCTION_CHARACTERS),\n source: sourceRefSchema,\n react: z.strictObject({\n supported: z.boolean(),\n version: boundedString(64).optional(),\n componentName: boundedString(256).optional(),\n componentStack: z.array(boundedString(256)).max(64),\n source: sourceRefSchema.optional(),\n }),\n element: z.strictObject({\n tagName: boundedString(128),\n selector: boundedString(2_048),\n sanitizedHtml: boundedString(8_192),\n textPreview: boundedString(2_048).optional(),\n role: boundedString(256).optional(),\n rect: z.strictObject({\n x: z.number(),\n y: z.number(),\n width: z.number().nonnegative(),\n height: z.number().nonnegative(),\n }),\n }),\n styles: z.strictObject({\n classNames: z.array(boundedString(512)).max(256),\n inlineStyle: boundedString(8_192).optional(),\n matchedRules: z.array(matchedStyleRuleSchema).max(256),\n computed: z.record(boundedString(256), boundedString(2_048)),\n warnings: z.array(boundedString(1_024)).max(64),\n }),\n code: codeContextSchema.optional(),\n warnings: z.array(boundedString(1_024)).max(64),\n});\n\nexport const spotAnnotationRequestSchema = z\n .strictObject({\n schemaVersion: z.literal(3),\n id: boundedString(128),\n locale: z.enum(SPOTPATCH_LOCALES),\n page: z.strictObject({\n url: boundedString(2_048),\n pathname: boundedString(2_048),\n title: boundedString(1_024),\n viewportWidth: z.number().nonnegative(),\n viewportHeight: z.number().nonnegative(),\n devicePixelRatio: z.number().positive(),\n }),\n targets: z.array(spotTargetContextRequestSchema).min(1).max(MAX_ANNOTATION_TARGETS),\n createdAt: z.iso.datetime(),\n })\n .superRefine((annotation, context) => {\n const total = annotation.targets.reduce(\n (characters, target) => characters + target.instruction.length,\n 0,\n );\n\n if (total > MAX_ANNOTATION_INSTRUCTION_CHARACTERS) {\n context.addIssue({\n code: \"custom\",\n message: \"Combined target instructions exceed the annotation limit.\",\n path: [\"targets\"],\n });\n }\n });\n\nexport const agentCapabilityRequestSchema = z.strictObject({\n providerProfileId: profileIdSchema,\n modelProfileId: profileIdSchema,\n});\n\nexport const agentWorkspaceHealthRequestSchema = z.strictObject({});\n\nexport const agentJobCreateRequestSchema = z.strictObject({\n annotation: spotAnnotationRequestSchema,\n providerProfileId: profileIdSchema,\n modelProfileId: profileIdSchema,\n providerDataConsent: z.literal(true),\n workingTreeMode: z\n .enum([\"require-clean\", \"include-local-changes\"])\n .default(\"require-clean\"),\n});\n\nexport const agentJobActionRequestSchema = z.strictObject({});\n\nexport type SourceContextRequest = z.infer<typeof sourceContextRequestSchema>;\nexport type RuntimeBootstrapRequest = z.infer<typeof runtimeBootstrapRequestSchema>;\nexport type OpenEditorRequest = z.infer<typeof openEditorRequestSchema>;\nexport type AgentCapabilityRequest = z.infer<typeof agentCapabilityRequestSchema>;\nexport interface AgentJobCreateRequest {\n readonly annotation: SpotAnnotation;\n readonly providerProfileId: string;\n readonly modelProfileId: string;\n readonly providerDataConsent: true;\n readonly workingTreeMode: \"require-clean\" | \"include-local-changes\";\n}\n","import { z } from \"zod\";\n\nimport { ERROR_CODES } from \"../errors/error-code.js\";\nimport {\n AGENT_CAPABILITY_STATES,\n AGENT_CHECK_STATUSES,\n AGENT_FILE_CHANGE_KINDS,\n AGENT_JOB_STATUSES,\n AGENT_WORKSPACE_STATES,\n} from \"../model/agent.js\";\n\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);\nconst boundedString = (maximum: number): z.ZodString => z.string().max(maximum);\nconst errorCodeSchema = z.enum(ERROR_CODES);\n\nexport const agentCapabilitySnapshotSchema = z.strictObject({\n providerProfileId: profileIdSchema,\n providerLabel: boundedString(100),\n modelProfileId: profileIdSchema,\n modelLabel: boundedString(100),\n protocol: z.enum([\"responses\", \"chat-completions\"]),\n state: z.enum(AGENT_CAPABILITY_STATES),\n authenticated: z.boolean(),\n modelAvailable: z.boolean(),\n toolCalling: z.boolean(),\n toolResultContinuation: z.boolean(),\n streaming: z.boolean(),\n checkedAt: z.iso.datetime().optional(),\n errorCode: errorCodeSchema.optional(),\n});\n\nexport const agentWorkspaceHealthSnapshotSchema = z\n .strictObject({\n state: z.enum(AGENT_WORKSPACE_STATES),\n checkedAt: z.iso.datetime(),\n changes: z.strictObject({\n staged: z.number().int().nonnegative(),\n unstaged: z.number().int().nonnegative(),\n untracked: z.number().int().nonnegative(),\n conflicted: z.number().int().nonnegative(),\n total: z.number().int().nonnegative(),\n }),\n canIncludeLocalChanges: z.boolean(),\n errorCode: errorCodeSchema.optional(),\n })\n .refine(\n ({ state, changes, canIncludeLocalChanges, errorCode }) => {\n const countsAreConsistent =\n changes.total >= changes.staged &&\n changes.total >= changes.unstaged &&\n changes.total >= changes.untracked &&\n changes.total >= changes.conflicted &&\n changes.total <= changes.staged + changes.unstaged + changes.untracked;\n\n if (!countsAreConsistent) {\n return false;\n }\n\n if (state === \"ready\") {\n return (\n changes.total === 0 && !canIncludeLocalChanges && errorCode === undefined\n );\n }\n\n if (state === \"consent-required\") {\n return (\n changes.total > 0 &&\n changes.conflicted === 0 &&\n canIncludeLocalChanges &&\n errorCode === undefined\n );\n }\n\n return !canIncludeLocalChanges && errorCode !== undefined;\n },\n { message: \"Agent workspace health fields are inconsistent.\" },\n );\n\nexport const agentChangedFileSchema = z.strictObject({\n relativePath: boundedString(1_024),\n kind: z.enum(AGENT_FILE_CHANGE_KINDS),\n additions: z.number().int().nonnegative(),\n deletions: z.number().int().nonnegative(),\n});\n\nexport const agentCheckResultSchema = z.strictObject({\n checkId: profileIdSchema,\n label: boundedString(100),\n status: z.enum(AGENT_CHECK_STATUSES),\n durationMs: z.number().int().nonnegative(),\n output: boundedString(80_000),\n});\n\nexport const agentJobSnapshotSchema = z.strictObject({\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n status: z.enum(AGENT_JOB_STATUSES),\n providerProfileId: profileIdSchema,\n providerLabel: boundedString(100),\n modelProfileId: profileIdSchema,\n modelLabel: boundedString(100),\n phaseMessage: boundedString(1_024),\n createdAt: z.iso.datetime(),\n updatedAt: z.iso.datetime(),\n canCancel: z.boolean(),\n canApply: z.boolean(),\n canRevert: z.boolean(),\n errorCode: errorCodeSchema.optional(),\n});\n\nexport const agentJobResultSchema = z.strictObject({\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n summary: boundedString(80_000),\n diff: boundedString(1_000_000),\n files: z.array(agentChangedFileSchema).max(100),\n checks: z.array(agentCheckResultSchema).max(100),\n});\n\nexport const agentJobResultResponseSchema = z\n .strictObject({\n snapshot: agentJobSnapshotSchema,\n result: agentJobResultSchema.optional(),\n })\n .superRefine((value, context) => {\n if (value.result !== undefined && value.result.jobId !== value.snapshot.jobId) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent result and snapshot job IDs must match.\",\n path: [\"result\", \"jobId\"],\n });\n }\n });\n\nconst agentJobEventBaseSchema = z.strictObject({\n schemaVersion: z.literal(2),\n sequence: z.number().int().positive(),\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n status: z.enum(AGENT_JOB_STATUSES),\n timestamp: z.iso.datetime(),\n});\n\nexport const agentJobEventSchema = z\n .discriminatedUnion(\"type\", [\n agentJobEventBaseSchema.extend({\n type: z.literal(\"snapshot\"),\n data: z.strictObject({ snapshot: agentJobSnapshotSchema }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"phase\"),\n data: z.strictObject({ message: boundedString(1_024) }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"tool\"),\n data: z.strictObject({\n turn: z.number().int().positive(),\n toolCallId: boundedString(256),\n toolName: boundedString(100),\n state: z.enum([\"started\", \"succeeded\", \"failed\"]),\n relativePath: boundedString(1_024).optional(),\n checkLabel: boundedString(100).optional(),\n }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"check\"),\n data: z.strictObject({ result: agentCheckResultSchema }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"result-ready\"),\n data: z.strictObject({ hasResult: z.literal(true) }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"error\"),\n data: z.strictObject({\n code: errorCodeSchema,\n message: boundedString(1_024),\n }),\n }),\n ])\n .superRefine((event, context) => {\n if (event.type !== \"snapshot\") {\n return;\n }\n\n if (event.data.snapshot.jobId !== event.jobId) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent event and snapshot job IDs must match.\",\n path: [\"data\", \"snapshot\", \"jobId\"],\n });\n }\n\n if (event.data.snapshot.status !== event.status) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent event and snapshot statuses must match.\",\n path: [\"data\", \"snapshot\", \"status\"],\n });\n }\n });\n","export const SPOTPATCH_REPOSITORY_URL =\n \"https://github.com/huanglvjing/spotpatch\" as const;\n"],"mappings":"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","names":["z","z","profileIdSchema","z","profileIdSchema","z","boundedString"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors/spotpatch-error.ts","../src/errors/error-code.ts","../src/security/redaction.ts","../src/model/annotation.ts","../src/model/runtime-config.ts","../src/protocol/endpoints.ts","../src/model/editor.ts","../src/model/agent.ts","../src/model/source-marker.ts","../src/protocol/requests.ts","../src/protocol/agent-schemas.ts","../src/product.ts"],"sourcesContent":["import type { ErrorCode } from \"./error-code.js\";\n\nexport class SpotPatchError extends Error {\n readonly code: ErrorCode;\n\n constructor(code: ErrorCode, message = code, options?: ErrorOptions) {\n super(message, options);\n this.name = \"SpotPatchError\";\n this.code = code;\n }\n}\n","export const ERROR_CODES = {\n INVALID_REQUEST: \"INVALID_REQUEST\",\n INVALID_TOKEN: \"INVALID_TOKEN\",\n ORIGIN_NOT_ALLOWED: \"ORIGIN_NOT_ALLOWED\",\n SOURCE_NOT_FOUND: \"SOURCE_NOT_FOUND\",\n SOURCE_OUTSIDE_ROOT: \"SOURCE_OUTSIDE_ROOT\",\n SOURCE_TOO_LARGE: \"SOURCE_TOO_LARGE\",\n EDITOR_OPEN_FAILED: \"EDITOR_OPEN_FAILED\",\n AI_DISABLED: \"AI_DISABLED\",\n PROVIDER_NOT_CONFIGURED: \"PROVIDER_NOT_CONFIGURED\",\n PROVIDER_AUTH_FAILED: \"PROVIDER_AUTH_FAILED\",\n PROVIDER_PROTOCOL_UNSUPPORTED: \"PROVIDER_PROTOCOL_UNSUPPORTED\",\n MODEL_NOT_ALLOWED: \"MODEL_NOT_ALLOWED\",\n MODEL_TOOL_CALL_UNSUPPORTED: \"MODEL_TOOL_CALL_UNSUPPORTED\",\n PROVIDER_RATE_LIMITED: \"PROVIDER_RATE_LIMITED\",\n AGENT_BUSY: \"AGENT_BUSY\",\n AGENT_LIMIT_EXCEEDED: \"AGENT_LIMIT_EXCEEDED\",\n AGENT_CANCELLED: \"AGENT_CANCELLED\",\n WORKTREE_DIRTY: \"WORKTREE_DIRTY\",\n WORKTREE_NOT_REPOSITORY: \"WORKTREE_NOT_REPOSITORY\",\n WORKTREE_OPERATION_IN_PROGRESS: \"WORKTREE_OPERATION_IN_PROGRESS\",\n WORKTREE_CONFLICTED: \"WORKTREE_CONFLICTED\",\n WORKTREE_LOCAL_CHANGES_TOO_LARGE: \"WORKTREE_LOCAL_CHANGES_TOO_LARGE\",\n WORKTREE_UNTRACKED_UNSUPPORTED: \"WORKTREE_UNTRACKED_UNSUPPORTED\",\n WORKTREE_LOCAL_CHANGES_UNSUPPORTED: \"WORKTREE_LOCAL_CHANGES_UNSUPPORTED\",\n TOOL_DENIED: \"TOOL_DENIED\",\n TOOL_INPUT_INVALID: \"TOOL_INPUT_INVALID\",\n TOOL_ARGUMENTS_INVALID: \"TOOL_ARGUMENTS_INVALID\",\n TOOL_CALL_ID_CONFLICT: \"TOOL_CALL_ID_CONFLICT\",\n TOOL_PATH_DENIED: \"TOOL_PATH_DENIED\",\n PATCH_REJECTED: \"PATCH_REJECTED\",\n VALIDATION_FAILED: \"VALIDATION_FAILED\",\n APPLY_CONFLICT: \"APPLY_CONFLICT\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n} as const;\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n","const INLINE_DATA_PATTERN = /data:[^\\s\"'<>]*;base64,[a-z0-9+/_=-]+/giu;\nconst BLOB_URL_PATTERN = /blob:[^\\s\"'<>]+/giu;\nconst BEARER_PATTERN = /\\bbearer\\s+[a-z0-9._~+/-]+=*/giu;\nconst URL_CREDENTIAL_PATTERN = /\\b(https?:\\/\\/)[^/\\s:@]+:[^/\\s@]+@/giu;\nconst SECRET_ASSIGNMENT_PATTERN =\n /\\b(authorization|cookie|set-cookie|api[-_]?key|(?:access[-_]?|refresh[-_]?|auth[-_]?)?token|secret|password|default[-_]?value|value)\\b(\\s*[:=]\\s*)(\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|'(?:\\\\.|[^'\\\\\\r\\n])*'|`(?:\\\\.|[^`\\\\\\r\\n])*`|[^\\s,;\"'<>]+)/giu;\nconst SENSITIVE_EXACT_NAMES = new Set([\n \"authorization\",\n \"cookie\",\n \"defaultvalue\",\n \"password\",\n \"setcookie\",\n \"value\",\n]);\nconst MAX_URL_CHARACTERS = 500;\n\nfunction compactName(name: string): string {\n return name.toLowerCase().replaceAll(/[-_:]/gu, \"\");\n}\n\nfunction truncate(value: string, maxCharacters: number): string {\n return value.length <= maxCharacters\n ? value\n : `${value.slice(0, Math.max(0, maxCharacters - 1))}…`;\n}\n\nexport function isSensitiveName(name: string): boolean {\n const compact = compactName(name);\n\n return (\n SENSITIVE_EXACT_NAMES.has(compact) ||\n compact.includes(\"apikey\") ||\n compact.includes(\"authorization\") ||\n compact.includes(\"secret\") ||\n compact.includes(\"token\")\n );\n}\n\nexport function redactSensitiveText(value: string): string {\n return value\n .replace(INLINE_DATA_PATTERN, \"[redacted inline data]\")\n .replace(BLOB_URL_PATTERN, \"[redacted blob URL]\")\n .replace(BEARER_PATTERN, \"Bearer [redacted]\")\n .replace(URL_CREDENTIAL_PATTERN, \"$1[redacted]@\")\n .replace(\n SECRET_ASSIGNMENT_PATTERN,\n (_match, name: string, separator: string, assignedValue: string) => {\n const quote = assignedValue.at(0);\n const quoted = quote === '\"' || quote === \"'\" || quote === \"`\";\n return `${name}${separator}${quoted ? quote : \"\"}[redacted]${quoted ? quote : \"\"}`;\n },\n );\n}\n\nfunction sanitizeParsedUrl(url: URL): string {\n url.username = \"\";\n url.password = \"\";\n\n for (const [name, value] of url.searchParams) {\n if (isSensitiveName(name)) {\n url.searchParams.set(name, \"[redacted]\");\n } else {\n url.searchParams.set(name, redactSensitiveText(value));\n }\n }\n\n if (/token|secret|authorization|api[-_]?key/iu.test(url.hash)) {\n url.hash = \"#[redacted]\";\n }\n\n return url.toString();\n}\n\nexport function sanitizeUrl(value: string, baseUrl: string): string {\n const trimmed = value.trim();\n\n if (/^(?:blob|data|javascript):/iu.test(trimmed)) {\n return \"[redacted URL]\";\n }\n\n const normalized = redactSensitiveText(trimmed);\n\n try {\n const parsed = new URL(normalized, baseUrl);\n const sanitized = sanitizeParsedUrl(parsed);\n const base = new URL(baseUrl);\n\n if (!/^[a-z][a-z\\d+.-]*:/iu.test(normalized) && parsed.origin === base.origin) {\n return `${parsed.pathname}${parsed.search}${parsed.hash}`;\n }\n\n return sanitized;\n } catch {\n return truncate(normalized, MAX_URL_CHARACTERS);\n }\n}\n","import type { CodeContext } from \"./code-context.js\";\nimport type { ReactContext, SourceRef } from \"./source-ref.js\";\nimport type { StyleContext } from \"./style-context.js\";\n\nexport interface PageContext {\n readonly url: string;\n readonly pathname: string;\n readonly title: string;\n readonly viewportWidth: number;\n readonly viewportHeight: number;\n readonly devicePixelRatio: number;\n}\n\nexport interface ElementContext {\n readonly tagName: string;\n readonly selector: string;\n readonly sanitizedHtml: string;\n readonly textPreview?: string;\n readonly role?: string;\n readonly rect: Readonly<{\n x: number;\n y: number;\n width: number;\n height: number;\n }>;\n}\n\n/** Protocol hard limit. Runtime configuration may choose a smaller limit. */\nexport const MAX_ANNOTATION_TARGETS = 20;\n\n/** Each target owns its requested change; the UI enforces the same bound. */\nexport const MAX_TARGET_INSTRUCTION_CHARACTERS = 2_000;\n\n/** Keeps the complete, atomic user intent within the prompt and request budgets. */\nexport const MAX_ANNOTATION_INSTRUCTION_CHARACTERS = 4_000;\n\nexport const SPOTPATCH_LOCALES = Object.freeze([\"en-US\", \"zh-CN\"] as const);\nexport type SpotPatchLocale = (typeof SPOTPATCH_LOCALES)[number];\nexport const SPOTPATCH_LOCALE_PREFERENCES = Object.freeze([\n \"auto\",\n ...SPOTPATCH_LOCALES,\n] as const);\nexport type SpotPatchLocalePreference = (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];\n\nexport interface SpotTargetContext {\n readonly instruction: string;\n readonly page?: Readonly<PageContext>;\n readonly source: SourceRef;\n readonly react: ReactContext;\n readonly element: ElementContext;\n readonly styles: StyleContext;\n readonly code?: CodeContext;\n readonly warnings: readonly string[];\n}\n\nexport interface SpotAnnotation {\n readonly schemaVersion: 3;\n readonly id: string;\n readonly locale: SpotPatchLocale;\n readonly page: Readonly<PageContext>;\n readonly targets: readonly SpotTargetContext[];\n readonly createdAt: string;\n}\n","import { z } from \"zod\";\n\nimport { SPOTPATCH_API_BASE } from \"../protocol/endpoints.js\";\nimport { MAX_ANNOTATION_TARGETS, SPOTPATCH_LOCALE_PREFERENCES } from \"./annotation.js\";\nimport { SPOTPATCH_EDITOR_PREFERENCES } from \"./editor.js\";\nimport type { ContextBudget } from \"./code-context.js\";\nimport type { RuntimeAiConfig } from \"./agent.js\";\n\nexport const SPOTPATCH_NEXT_BUNDLERS = Object.freeze([\"turbopack\", \"webpack\"] as const);\nexport const SPOTPATCH_NEXT_ROUTER_KINDS = Object.freeze([\n \"app\",\n \"pages\",\n \"hybrid\",\n] as const);\n\nexport type SpotPatchNextBundler = (typeof SPOTPATCH_NEXT_BUNDLERS)[number];\nexport type SpotPatchNextRouterKind = (typeof SPOTPATCH_NEXT_ROUTER_KINDS)[number];\n\ninterface RuntimeConfigBase {\n readonly apiBase: typeof SPOTPATCH_API_BASE;\n readonly ai: RuntimeAiConfig;\n readonly budget: Readonly<ContextBudget>;\n readonly debug: boolean;\n readonly editor: (typeof SPOTPATCH_EDITOR_PREFERENCES)[number];\n readonly frameworkVersion: string;\n readonly locale: (typeof SPOTPATCH_LOCALE_PREFERENCES)[number];\n readonly maxTargets: number;\n readonly redact: boolean;\n readonly sessionId: string;\n readonly sessionToken: string;\n readonly shortcut: string;\n readonly spotPatchVersion: string;\n}\n\nexport type SpotPatchRuntimeConfig = RuntimeConfigBase &\n (\n | Readonly<{\n framework: \"vite\";\n }>\n | Readonly<{\n bundler: SpotPatchNextBundler;\n framework: \"next\";\n routerKind: SpotPatchNextRouterKind;\n }>\n );\n\nconst boundedText = (maximum: number): z.ZodString =>\n z.string().trim().min(1).max(maximum);\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/u);\nconst runtimeAiModelSchema = z.strictObject({\n id: profileIdSchema,\n label: boundedText(100),\n});\nconst runtimeAiProviderSchema = z\n .strictObject({\n id: profileIdSchema,\n label: boundedText(100),\n protocol: z.enum([\"responses\", \"chat-completions\"]),\n models: z.array(runtimeAiModelSchema).min(1).max(64),\n defaultModel: profileIdSchema,\n })\n .refine(\n ({ defaultModel, models }) =>\n models.some(({ id }) => id === defaultModel) &&\n new Set(models.map(({ id }) => id)).size === models.length,\n { message: \"Runtime AI model profiles are inconsistent.\" },\n );\nconst runtimeAiConfigSchema = z.discriminatedUnion(\"enabled\", [\n z.strictObject({ enabled: z.literal(false) }),\n z\n .strictObject({\n enabled: z.literal(true),\n providers: z.array(runtimeAiProviderSchema).min(1).max(32),\n defaultProvider: profileIdSchema,\n applyMode: z.enum([\"review\", \"auto\"]),\n })\n .refine(\n ({ defaultProvider, providers }) =>\n providers.some(({ id }) => id === defaultProvider) &&\n new Set(providers.map(({ id }) => id)).size === providers.length,\n { message: \"Runtime AI provider profiles are inconsistent.\" },\n ),\n]);\nconst positiveInteger = z.number().int().positive();\nconst runtimeConfigBaseShape = {\n apiBase: z.literal(SPOTPATCH_API_BASE),\n ai: runtimeAiConfigSchema,\n budget: z.strictObject({\n totalCharacters: positiveInteger,\n domCharacters: positiveInteger,\n cssCharacters: positiveInteger,\n codeCharacters: positiveInteger,\n maxCodeLines: positiveInteger,\n maxComponentDepth: positiveInteger,\n }),\n debug: z.boolean(),\n editor: z.enum(SPOTPATCH_EDITOR_PREFERENCES),\n frameworkVersion: boundedText(64),\n locale: z.enum(SPOTPATCH_LOCALE_PREFERENCES),\n maxTargets: z.number().int().min(1).max(MAX_ANNOTATION_TARGETS),\n redact: z.boolean(),\n sessionId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/u),\n sessionToken: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/u),\n shortcut: boundedText(128),\n spotPatchVersion: boundedText(64),\n} as const;\n\nexport const runtimeConfigSchema: z.ZodType<SpotPatchRuntimeConfig> =\n z.discriminatedUnion(\"framework\", [\n z.strictObject({\n ...runtimeConfigBaseShape,\n framework: z.literal(\"vite\"),\n }),\n z.strictObject({\n ...runtimeConfigBaseShape,\n bundler: z.enum(SPOTPATCH_NEXT_BUNDLERS),\n framework: z.literal(\"next\"),\n routerKind: z.enum(SPOTPATCH_NEXT_ROUTER_KINDS),\n }),\n ]);\n","export const SPOTPATCH_API_BASE = \"/__spotpatch/v1\" as const;\nexport const SPOTPATCH_TOKEN_HEADER = \"X-SpotPatch-Token\" as const;\n\nexport const SPOTPATCH_ENDPOINTS = Object.freeze({\n bootstrap: `${SPOTPATCH_API_BASE}/bootstrap`,\n sourceContext: `${SPOTPATCH_API_BASE}/source-context`,\n openEditor: `${SPOTPATCH_API_BASE}/open-editor`,\n agentCapability: `${SPOTPATCH_API_BASE}/agent/capability`,\n agentWorkspaceHealth: `${SPOTPATCH_API_BASE}/agent/workspace-health`,\n agentJobs: `${SPOTPATCH_API_BASE}/agent/jobs`,\n});\n\nexport type AgentJobAction = \"events\" | \"result\" | \"cancel\" | \"apply\" | \"revert\";\n\nexport function getAgentJobEndpoint(jobId: string, action: AgentJobAction): string {\n return `${SPOTPATCH_ENDPOINTS.agentJobs}/${encodeURIComponent(jobId)}/${action}`;\n}\n","export const SPOTPATCH_EDITOR_PREFERENCES = [\"auto\", \"vscode\", \"cursor\"] as const;\n\nexport type SpotPatchEditorPreference = (typeof SPOTPATCH_EDITOR_PREFERENCES)[number];\n\nexport interface EditorOpenResult {\n readonly editor: SpotPatchEditorPreference;\n}\n","import type { ErrorCode } from \"../errors/error-code.js\";\n\nexport type AiProviderProtocol = \"responses\" | \"chat-completions\";\nexport type AiProviderAuthentication = \"bearer\" | \"x-api-key\";\nexport type AgentApplyMode = \"review\" | \"auto\";\nexport type AgentWorkingTreeMode = \"require-clean\" | \"include-local-changes\";\n\nexport interface AiModelProfile {\n readonly label: string;\n readonly model: string;\n}\n\nexport interface OpenAICompatibleProviderOptions {\n readonly type: \"openai-compatible\";\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly authentication?: AiProviderAuthentication;\n readonly baseURL: string;\n readonly apiKeyEnv: string;\n readonly models: Readonly<Record<string, AiModelProfile>>;\n readonly defaultModel: string;\n}\n\nexport interface AgentCheckDefinition {\n readonly label: string;\n readonly command: string;\n readonly args?: readonly string[];\n readonly required?: boolean;\n readonly timeoutMs?: number;\n}\n\nexport interface AgentLimits {\n readonly maxTurns: number;\n readonly maxToolCalls: number;\n readonly maxChangedFiles: number;\n readonly maxDiffBytes: number;\n readonly maxReadBytesPerFile: number;\n readonly maxToolOutputCharacters: number;\n readonly maxProviderResponseBytes: number;\n readonly providerConnectTimeoutMs: number;\n readonly providerFirstByteTimeoutMs: number;\n readonly providerIdleTimeoutMs: number;\n readonly checkTimeoutMs: number;\n readonly jobTimeoutMs: number;\n}\n\nexport const DEFAULT_AGENT_LIMITS = Object.freeze({\n maxTurns: 20,\n maxToolCalls: 80,\n maxChangedFiles: 20,\n maxDiffBytes: 512_000,\n maxReadBytesPerFile: 256_000,\n maxToolOutputCharacters: 40_000,\n maxProviderResponseBytes: 2_000_000,\n providerConnectTimeoutMs: 15_000,\n providerFirstByteTimeoutMs: 30_000,\n providerIdleTimeoutMs: 60_000,\n checkTimeoutMs: 120_000,\n jobTimeoutMs: 600_000,\n} satisfies AgentLimits);\n\nexport interface AiExecutionOptions {\n readonly isolation?: \"git-worktree\";\n readonly applyMode?: AgentApplyMode;\n readonly checks?: Readonly<Record<string, AgentCheckDefinition>>;\n readonly limits?: Partial<AgentLimits>;\n}\n\nexport interface AiOptions {\n readonly providers: Readonly<Record<string, OpenAICompatibleProviderOptions>>;\n readonly defaultProvider: string;\n readonly execution?: AiExecutionOptions;\n}\n\nexport interface ResolvedAiModelProfile extends AiModelProfile {\n readonly id: string;\n}\n\nexport interface ResolvedOpenAICompatibleProviderOptions {\n readonly id: string;\n readonly type: \"openai-compatible\";\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly authentication: AiProviderAuthentication;\n readonly baseURL: string;\n readonly apiKeyEnv: string;\n readonly models: Readonly<Record<string, ResolvedAiModelProfile>>;\n readonly defaultModel: string;\n}\n\nexport interface ResolvedAgentCheckDefinition {\n readonly id: string;\n readonly label: string;\n readonly command: string;\n readonly args: readonly string[];\n readonly required: boolean;\n readonly timeoutMs: number;\n}\n\nexport interface ResolvedAiExecutionOptions {\n readonly isolation: \"git-worktree\";\n readonly applyMode: AgentApplyMode;\n readonly checks: Readonly<Record<string, ResolvedAgentCheckDefinition>>;\n readonly limits: Readonly<AgentLimits>;\n}\n\nexport interface ResolvedAiOptions {\n readonly providers: Readonly<Record<string, ResolvedOpenAICompatibleProviderOptions>>;\n readonly defaultProvider: string;\n readonly execution: ResolvedAiExecutionOptions;\n}\n\nexport interface RuntimeAiModelProfile {\n readonly id: string;\n readonly label: string;\n}\n\nexport interface RuntimeAiProviderProfile {\n readonly id: string;\n readonly label: string;\n readonly protocol: AiProviderProtocol;\n readonly models: readonly RuntimeAiModelProfile[];\n readonly defaultModel: string;\n}\n\nexport type RuntimeAiConfig =\n | Readonly<{ enabled: false }>\n | Readonly<{\n enabled: true;\n providers: readonly RuntimeAiProviderProfile[];\n defaultProvider: string;\n applyMode: AgentApplyMode;\n }>;\n\nexport const AGENT_JOB_STATUSES = Object.freeze([\n \"queued\",\n \"preparing\",\n \"running\",\n \"validating\",\n \"awaiting-review\",\n \"applying\",\n \"applied\",\n \"completed\",\n \"cancelling\",\n \"cancelled\",\n \"reverting\",\n \"reverted\",\n \"failed\",\n] as const);\n\nexport type AgentJobStatus = (typeof AGENT_JOB_STATUSES)[number];\n\nexport const AGENT_CAPABILITY_STATES = Object.freeze([\n \"unknown\",\n \"probing\",\n \"agent-ready\",\n \"prompt-only\",\n \"unavailable\",\n] as const);\n\nexport type AgentCapabilityState = (typeof AGENT_CAPABILITY_STATES)[number];\n\nexport interface AgentCapabilitySnapshot {\n readonly providerProfileId: string;\n readonly providerLabel: string;\n readonly modelProfileId: string;\n readonly modelLabel: string;\n readonly protocol: AiProviderProtocol;\n readonly state: AgentCapabilityState;\n readonly authenticated: boolean;\n readonly modelAvailable: boolean;\n readonly toolCalling: boolean;\n readonly toolResultContinuation: boolean;\n readonly streaming: boolean;\n readonly checkedAt?: string;\n readonly errorCode?: ErrorCode;\n}\n\nexport const AGENT_WORKSPACE_STATES = Object.freeze([\n \"ready\",\n \"consent-required\",\n \"blocked\",\n] as const);\n\nexport const AGENT_WORKSPACE_SNAPSHOT_LIMITS = Object.freeze({\n maxUntrackedFiles: 1_000,\n maxUntrackedBytes: 20 * 1024 * 1024,\n});\n\nexport type AgentWorkspaceState = (typeof AGENT_WORKSPACE_STATES)[number];\n\nexport interface AgentWorkspaceChangeSummary {\n readonly staged: number;\n readonly unstaged: number;\n readonly untracked: number;\n readonly conflicted: number;\n readonly total: number;\n}\n\nexport interface AgentWorkspaceHealthSnapshot {\n readonly state: AgentWorkspaceState;\n readonly checkedAt: string;\n readonly changes: AgentWorkspaceChangeSummary;\n readonly canIncludeLocalChanges: boolean;\n readonly errorCode?: ErrorCode;\n}\n\nexport const AGENT_FILE_CHANGE_KINDS = Object.freeze([\n \"added\",\n \"modified\",\n \"deleted\",\n] as const);\n\nexport type AgentFileChangeKind = (typeof AGENT_FILE_CHANGE_KINDS)[number];\n\nexport const AGENT_CHECK_STATUSES = Object.freeze([\n \"passed\",\n \"failed\",\n \"cancelled\",\n \"timed-out\",\n] as const);\n\nexport type AgentCheckStatus = (typeof AGENT_CHECK_STATUSES)[number];\n\nexport interface AgentChangedFile {\n readonly relativePath: string;\n readonly kind: AgentFileChangeKind;\n readonly additions: number;\n readonly deletions: number;\n}\n\nexport interface AgentCheckResult {\n readonly checkId: string;\n readonly label: string;\n readonly status: AgentCheckStatus;\n readonly durationMs: number;\n readonly output: string;\n}\n\nexport interface AgentJobSnapshot {\n readonly jobId: string;\n readonly status: AgentJobStatus;\n readonly providerProfileId: string;\n readonly providerLabel: string;\n readonly modelProfileId: string;\n readonly modelLabel: string;\n readonly phaseMessage: string;\n readonly createdAt: string;\n readonly updatedAt: string;\n readonly canCancel: boolean;\n readonly canApply: boolean;\n readonly canRevert: boolean;\n readonly errorCode?: ErrorCode;\n}\n\nexport interface AgentJobResult {\n readonly jobId: string;\n readonly summary: string;\n readonly diff: string;\n readonly files: readonly AgentChangedFile[];\n readonly checks: readonly AgentCheckResult[];\n}\n\nexport interface AgentJobResultResponse {\n readonly snapshot: AgentJobSnapshot;\n readonly result?: AgentJobResult;\n}\n","export const SOURCE_MARKER_ATTRIBUTE = \"data-spotpatch-source\" as const;\n\nconst SOURCE_MARKER_PATTERN = /^([A-Za-z0-9_-]+):([1-9]\\d*):([1-9]\\d*)$/;\n\nexport interface SourceMarker {\n readonly fileId: string;\n readonly line: number;\n readonly column: number;\n}\n\nexport function formatSourceMarker(marker: SourceMarker): string {\n return [marker.fileId, String(marker.line), String(marker.column)].join(\":\");\n}\n\nexport function parseSourceMarker(value: string | null): SourceMarker | undefined {\n if (value === null) {\n return undefined;\n }\n\n const match = SOURCE_MARKER_PATTERN.exec(value);\n\n if (match === null) {\n return undefined;\n }\n\n const fileId = match[1];\n const line = Number(match[2]);\n const column = Number(match[3]);\n\n if (\n fileId === undefined ||\n !Number.isSafeInteger(line) ||\n !Number.isSafeInteger(column)\n ) {\n return undefined;\n }\n\n return Object.freeze({ fileId, line, column });\n}\n","import { z } from \"zod\";\n\nimport {\n MAX_ANNOTATION_INSTRUCTION_CHARACTERS,\n MAX_ANNOTATION_TARGETS,\n MAX_TARGET_INSTRUCTION_CHARACTERS,\n SPOTPATCH_LOCALES,\n type SpotAnnotation,\n} from \"../model/annotation.js\";\n\nexport const runtimeBootstrapRequestSchema = z.strictObject({});\n\nconst sourceCoordinatesSchema = z.strictObject({\n fileId: z.string().min(1).max(128),\n line: z.number().int().positive(),\n column: z.number().int().positive(),\n});\n\nexport const sourceContextRequestSchema = sourceCoordinatesSchema\n .extend({\n maxLines: z.number().int().positive(),\n })\n .strict();\n\nexport const openEditorRequestSchema = sourceCoordinatesSchema.strict();\n\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);\n\nconst boundedString = (maximum: number): z.ZodString => z.string().max(maximum);\nconst sourceRefSchema = z.strictObject({\n fileId: boundedString(128).optional(),\n relativePath: boundedString(1_024).optional(),\n line: z.number().int().positive().optional(),\n column: z.number().int().positive().optional(),\n origin: z.enum([\"jsx-host\", \"react-fiber\", \"dom-ancestor\", \"none\"]),\n confidence: z.enum([\"exact\", \"probable\", \"approximate\", \"unknown\"]),\n});\nconst matchedStyleRuleSchema = z.strictObject({\n selector: boundedString(2_048),\n declarations: boundedString(8_192),\n source: boundedString(1_024).optional(),\n media: boundedString(1_024).optional(),\n});\nconst codeContextSchema = z.strictObject({\n relativePath: boundedString(1_024),\n language: z.enum([\"tsx\", \"jsx\"]),\n startLine: z.number().int().positive(),\n endLine: z.number().int().positive(),\n excerpt: boundedString(16_000),\n boundary: z.enum([\"component\", \"nearby-lines\"]),\n});\nconst pageContextSchema = z.strictObject({\n url: boundedString(2_048),\n pathname: boundedString(2_048),\n title: boundedString(1_024),\n viewportWidth: z.number().nonnegative(),\n viewportHeight: z.number().nonnegative(),\n devicePixelRatio: z.number().positive(),\n});\n\nexport const spotTargetContextRequestSchema = z.strictObject({\n instruction: z.string().trim().min(1).max(MAX_TARGET_INSTRUCTION_CHARACTERS),\n page: pageContextSchema.optional(),\n source: sourceRefSchema,\n react: z.strictObject({\n supported: z.boolean(),\n version: boundedString(64).optional(),\n componentName: boundedString(256).optional(),\n componentStack: z.array(boundedString(256)).max(64),\n source: sourceRefSchema.optional(),\n }),\n element: z.strictObject({\n tagName: boundedString(128),\n selector: boundedString(2_048),\n sanitizedHtml: boundedString(8_192),\n textPreview: boundedString(2_048).optional(),\n role: boundedString(256).optional(),\n rect: z.strictObject({\n x: z.number(),\n y: z.number(),\n width: z.number().nonnegative(),\n height: z.number().nonnegative(),\n }),\n }),\n styles: z.strictObject({\n classNames: z.array(boundedString(512)).max(256),\n inlineStyle: boundedString(8_192).optional(),\n matchedRules: z.array(matchedStyleRuleSchema).max(256),\n computed: z.record(boundedString(256), boundedString(2_048)),\n warnings: z.array(boundedString(1_024)).max(64),\n }),\n code: codeContextSchema.optional(),\n warnings: z.array(boundedString(1_024)).max(64),\n});\n\nexport const spotAnnotationRequestSchema = z\n .strictObject({\n schemaVersion: z.literal(3),\n id: boundedString(128),\n locale: z.enum(SPOTPATCH_LOCALES),\n page: pageContextSchema,\n targets: z.array(spotTargetContextRequestSchema).min(1).max(MAX_ANNOTATION_TARGETS),\n createdAt: z.iso.datetime(),\n })\n .superRefine((annotation, context) => {\n const total = annotation.targets.reduce(\n (characters, target) => characters + target.instruction.length,\n 0,\n );\n\n if (total > MAX_ANNOTATION_INSTRUCTION_CHARACTERS) {\n context.addIssue({\n code: \"custom\",\n message: \"Combined target instructions exceed the annotation limit.\",\n path: [\"targets\"],\n });\n }\n });\n\nexport const agentCapabilityRequestSchema = z.strictObject({\n providerProfileId: profileIdSchema,\n modelProfileId: profileIdSchema,\n});\n\nexport const agentWorkspaceHealthRequestSchema = z.strictObject({});\n\nexport const agentJobCreateRequestSchema = z.strictObject({\n annotation: spotAnnotationRequestSchema,\n providerProfileId: profileIdSchema,\n modelProfileId: profileIdSchema,\n providerDataConsent: z.literal(true),\n workingTreeMode: z\n .enum([\"require-clean\", \"include-local-changes\"])\n .default(\"require-clean\"),\n});\n\nexport const agentJobActionRequestSchema = z.strictObject({});\n\nexport type SourceContextRequest = z.infer<typeof sourceContextRequestSchema>;\nexport type RuntimeBootstrapRequest = z.infer<typeof runtimeBootstrapRequestSchema>;\nexport type OpenEditorRequest = z.infer<typeof openEditorRequestSchema>;\nexport type AgentCapabilityRequest = z.infer<typeof agentCapabilityRequestSchema>;\nexport interface AgentJobCreateRequest {\n readonly annotation: SpotAnnotation;\n readonly providerProfileId: string;\n readonly modelProfileId: string;\n readonly providerDataConsent: true;\n readonly workingTreeMode: \"require-clean\" | \"include-local-changes\";\n}\n","import { z } from \"zod\";\n\nimport { ERROR_CODES } from \"../errors/error-code.js\";\nimport {\n AGENT_CAPABILITY_STATES,\n AGENT_CHECK_STATUSES,\n AGENT_FILE_CHANGE_KINDS,\n AGENT_JOB_STATUSES,\n AGENT_WORKSPACE_STATES,\n} from \"../model/agent.js\";\n\nconst profileIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);\nconst boundedString = (maximum: number): z.ZodString => z.string().max(maximum);\nconst errorCodeSchema = z.enum(ERROR_CODES);\n\nexport const agentCapabilitySnapshotSchema = z.strictObject({\n providerProfileId: profileIdSchema,\n providerLabel: boundedString(100),\n modelProfileId: profileIdSchema,\n modelLabel: boundedString(100),\n protocol: z.enum([\"responses\", \"chat-completions\"]),\n state: z.enum(AGENT_CAPABILITY_STATES),\n authenticated: z.boolean(),\n modelAvailable: z.boolean(),\n toolCalling: z.boolean(),\n toolResultContinuation: z.boolean(),\n streaming: z.boolean(),\n checkedAt: z.iso.datetime().optional(),\n errorCode: errorCodeSchema.optional(),\n});\n\nexport const agentWorkspaceHealthSnapshotSchema = z\n .strictObject({\n state: z.enum(AGENT_WORKSPACE_STATES),\n checkedAt: z.iso.datetime(),\n changes: z.strictObject({\n staged: z.number().int().nonnegative(),\n unstaged: z.number().int().nonnegative(),\n untracked: z.number().int().nonnegative(),\n conflicted: z.number().int().nonnegative(),\n total: z.number().int().nonnegative(),\n }),\n canIncludeLocalChanges: z.boolean(),\n errorCode: errorCodeSchema.optional(),\n })\n .refine(\n ({ state, changes, canIncludeLocalChanges, errorCode }) => {\n const countsAreConsistent =\n changes.total >= changes.staged &&\n changes.total >= changes.unstaged &&\n changes.total >= changes.untracked &&\n changes.total >= changes.conflicted &&\n changes.total <= changes.staged + changes.unstaged + changes.untracked;\n\n if (!countsAreConsistent) {\n return false;\n }\n\n if (state === \"ready\") {\n return (\n changes.total === 0 && !canIncludeLocalChanges && errorCode === undefined\n );\n }\n\n if (state === \"consent-required\") {\n return (\n changes.total > 0 &&\n changes.conflicted === 0 &&\n canIncludeLocalChanges &&\n errorCode === undefined\n );\n }\n\n return !canIncludeLocalChanges && errorCode !== undefined;\n },\n { message: \"Agent workspace health fields are inconsistent.\" },\n );\n\nexport const agentChangedFileSchema = z.strictObject({\n relativePath: boundedString(1_024),\n kind: z.enum(AGENT_FILE_CHANGE_KINDS),\n additions: z.number().int().nonnegative(),\n deletions: z.number().int().nonnegative(),\n});\n\nexport const agentCheckResultSchema = z.strictObject({\n checkId: profileIdSchema,\n label: boundedString(100),\n status: z.enum(AGENT_CHECK_STATUSES),\n durationMs: z.number().int().nonnegative(),\n output: boundedString(80_000),\n});\n\nexport const agentJobSnapshotSchema = z.strictObject({\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n status: z.enum(AGENT_JOB_STATUSES),\n providerProfileId: profileIdSchema,\n providerLabel: boundedString(100),\n modelProfileId: profileIdSchema,\n modelLabel: boundedString(100),\n phaseMessage: boundedString(1_024),\n createdAt: z.iso.datetime(),\n updatedAt: z.iso.datetime(),\n canCancel: z.boolean(),\n canApply: z.boolean(),\n canRevert: z.boolean(),\n errorCode: errorCodeSchema.optional(),\n});\n\nexport const agentJobResultSchema = z.strictObject({\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n summary: boundedString(80_000),\n diff: boundedString(1_000_000),\n files: z.array(agentChangedFileSchema).max(100),\n checks: z.array(agentCheckResultSchema).max(100),\n});\n\nexport const agentJobResultResponseSchema = z\n .strictObject({\n snapshot: agentJobSnapshotSchema,\n result: agentJobResultSchema.optional(),\n })\n .superRefine((value, context) => {\n if (value.result !== undefined && value.result.jobId !== value.snapshot.jobId) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent result and snapshot job IDs must match.\",\n path: [\"result\", \"jobId\"],\n });\n }\n });\n\nconst agentJobEventBaseSchema = z.strictObject({\n schemaVersion: z.literal(2),\n sequence: z.number().int().positive(),\n jobId: z\n .string()\n .min(22)\n .max(128)\n .regex(/^[A-Za-z0-9_-]+$/),\n status: z.enum(AGENT_JOB_STATUSES),\n timestamp: z.iso.datetime(),\n});\n\nexport const agentJobEventSchema = z\n .discriminatedUnion(\"type\", [\n agentJobEventBaseSchema.extend({\n type: z.literal(\"snapshot\"),\n data: z.strictObject({ snapshot: agentJobSnapshotSchema }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"phase\"),\n data: z.strictObject({ message: boundedString(1_024) }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"tool\"),\n data: z.strictObject({\n turn: z.number().int().positive(),\n toolCallId: boundedString(256),\n toolName: boundedString(100),\n state: z.enum([\"started\", \"succeeded\", \"failed\"]),\n relativePath: boundedString(1_024).optional(),\n checkLabel: boundedString(100).optional(),\n }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"check\"),\n data: z.strictObject({ result: agentCheckResultSchema }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"result-ready\"),\n data: z.strictObject({ hasResult: z.literal(true) }),\n }),\n agentJobEventBaseSchema.extend({\n type: z.literal(\"error\"),\n data: z.strictObject({\n code: errorCodeSchema,\n message: boundedString(1_024),\n }),\n }),\n ])\n .superRefine((event, context) => {\n if (event.type !== \"snapshot\") {\n return;\n }\n\n if (event.data.snapshot.jobId !== event.jobId) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent event and snapshot job IDs must match.\",\n path: [\"data\", \"snapshot\", \"jobId\"],\n });\n }\n\n if (event.data.snapshot.status !== event.status) {\n context.addIssue({\n code: \"custom\",\n message: \"Agent event and snapshot statuses must match.\",\n path: [\"data\", \"snapshot\", \"status\"],\n });\n }\n });\n","export const SPOTPATCH_REPOSITORY_URL =\n \"https://github.com/huanglvjing/spotpatch\" as const;\n"],"mappings":"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","names":["z","z","profileIdSchema","z","profileIdSchema","z","boundedString"]}
|