@spotpatch/shared 1.3.0 → 1.4.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/dist/index.cjs CHANGED
@@ -103,6 +103,8 @@ var ERROR_CODES = {
103
103
  WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED",
104
104
  TOOL_DENIED: "TOOL_DENIED",
105
105
  TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID",
106
+ TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID",
107
+ TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT",
106
108
  TOOL_PATH_DENIED: "TOOL_PATH_DENIED",
107
109
  PATCH_REJECTED: "PATCH_REJECTED",
108
110
  VALIDATION_FAILED: "VALIDATION_FAILED",
@@ -492,7 +494,7 @@ var agentJobResultResponseSchema = import_zod2.z.strictObject({
492
494
  }
493
495
  });
494
496
  var agentJobEventBaseSchema = import_zod2.z.strictObject({
495
- schemaVersion: import_zod2.z.literal(1),
497
+ schemaVersion: import_zod2.z.literal(2),
496
498
  sequence: import_zod2.z.number().int().positive(),
497
499
  jobId: import_zod2.z.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/),
498
500
  status: import_zod2.z.enum(AGENT_JOB_STATUSES),
@@ -510,6 +512,7 @@ var agentJobEventSchema = import_zod2.z.discriminatedUnion("type", [
510
512
  agentJobEventBaseSchema.extend({
511
513
  type: import_zod2.z.literal("tool"),
512
514
  data: import_zod2.z.strictObject({
515
+ turn: import_zod2.z.number().int().positive(),
513
516
  toolCallId: boundedString2(256),
514
517
  toolName: boundedString2(100),
515
518
  state: import_zod2.z.enum(["started", "succeeded", "failed"]),
@@ -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/editor.ts","../src/model/agent.ts","../src/model/source-marker.ts","../src/protocol/endpoints.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 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 sourceContextRequestSchema,\n spotAnnotationRequestSchema,\n spotTargetContextRequestSchema,\n type AgentCapabilityRequest,\n type AgentJobCreateRequest,\n type OpenEditorRequest,\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_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","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","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 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","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\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 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(1),\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 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","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/editor.ts","../src/model/agent.ts","../src/model/source-marker.ts","../src/protocol/endpoints.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 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 sourceContextRequestSchema,\n spotAnnotationRequestSchema,\n spotTargetContextRequestSchema,\n type AgentCapabilityRequest,\n type AgentJobCreateRequest,\n type OpenEditorRequest,\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","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","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 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","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\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 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","boundedString"]}
package/dist/index.d.cts CHANGED
@@ -27,6 +27,8 @@ declare const ERROR_CODES: {
27
27
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
28
28
  readonly TOOL_DENIED: "TOOL_DENIED";
29
29
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
30
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
31
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
30
32
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
31
33
  readonly PATCH_REJECTED: "PATCH_REJECTED";
32
34
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -695,7 +697,7 @@ interface AgentJobCreateRequest {
695
697
  }
696
698
 
697
699
  interface AgentJobEventBase {
698
- readonly schemaVersion: 1;
700
+ readonly schemaVersion: 2;
699
701
  readonly sequence: number;
700
702
  readonly jobId: string;
701
703
  readonly status: AgentJobStatus;
@@ -714,6 +716,7 @@ type AgentJobEvent = (AgentJobEventBase & {
714
716
  }) | (AgentJobEventBase & {
715
717
  readonly type: "tool";
716
718
  readonly data: Readonly<{
719
+ turn: number;
717
720
  toolCallId: string;
718
721
  toolName: string;
719
722
  state: "started" | "succeeded" | "failed";
@@ -787,6 +790,8 @@ declare const agentCapabilitySnapshotSchema: z.ZodObject<{
787
790
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
788
791
  readonly TOOL_DENIED: "TOOL_DENIED";
789
792
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
793
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
794
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
790
795
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
791
796
  readonly PATCH_REJECTED: "PATCH_REJECTED";
792
797
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -836,6 +841,8 @@ declare const agentWorkspaceHealthSnapshotSchema: z.ZodObject<{
836
841
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
837
842
  readonly TOOL_DENIED: "TOOL_DENIED";
838
843
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
844
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
845
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
839
846
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
840
847
  readonly PATCH_REJECTED: "PATCH_REJECTED";
841
848
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -919,6 +926,8 @@ declare const agentJobSnapshotSchema: z.ZodObject<{
919
926
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
920
927
  readonly TOOL_DENIED: "TOOL_DENIED";
921
928
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
929
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
930
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
922
931
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
923
932
  readonly PATCH_REJECTED: "PATCH_REJECTED";
924
933
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -1008,6 +1017,8 @@ declare const agentJobResultResponseSchema: z.ZodObject<{
1008
1017
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
1009
1018
  readonly TOOL_DENIED: "TOOL_DENIED";
1010
1019
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
1020
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
1021
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
1011
1022
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
1012
1023
  readonly PATCH_REJECTED: "PATCH_REJECTED";
1013
1024
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -1044,7 +1055,7 @@ declare const agentJobResultResponseSchema: z.ZodObject<{
1044
1055
  }, z.core.$strict>>;
1045
1056
  }, z.core.$strict>;
1046
1057
  declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1047
- schemaVersion: z.ZodLiteral<1>;
1058
+ schemaVersion: z.ZodLiteral<2>;
1048
1059
  sequence: z.ZodNumber;
1049
1060
  jobId: z.ZodString;
1050
1061
  status: z.ZodEnum<{
@@ -1119,6 +1130,8 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1119
1130
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
1120
1131
  readonly TOOL_DENIED: "TOOL_DENIED";
1121
1132
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
1133
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
1134
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
1122
1135
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
1123
1136
  readonly PATCH_REJECTED: "PATCH_REJECTED";
1124
1137
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -1128,7 +1141,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1128
1141
  }, z.core.$strict>;
1129
1142
  }, z.core.$strict>;
1130
1143
  }, z.core.$strict>, z.ZodObject<{
1131
- schemaVersion: z.ZodLiteral<1>;
1144
+ schemaVersion: z.ZodLiteral<2>;
1132
1145
  sequence: z.ZodNumber;
1133
1146
  jobId: z.ZodString;
1134
1147
  status: z.ZodEnum<{
@@ -1152,7 +1165,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1152
1165
  message: z.ZodString;
1153
1166
  }, z.core.$strict>;
1154
1167
  }, z.core.$strict>, z.ZodObject<{
1155
- schemaVersion: z.ZodLiteral<1>;
1168
+ schemaVersion: z.ZodLiteral<2>;
1156
1169
  sequence: z.ZodNumber;
1157
1170
  jobId: z.ZodString;
1158
1171
  status: z.ZodEnum<{
@@ -1173,6 +1186,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1173
1186
  timestamp: z.ZodISODateTime;
1174
1187
  type: z.ZodLiteral<"tool">;
1175
1188
  data: z.ZodObject<{
1189
+ turn: z.ZodNumber;
1176
1190
  toolCallId: z.ZodString;
1177
1191
  toolName: z.ZodString;
1178
1192
  state: z.ZodEnum<{
@@ -1184,7 +1198,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1184
1198
  checkLabel: z.ZodOptional<z.ZodString>;
1185
1199
  }, z.core.$strict>;
1186
1200
  }, z.core.$strict>, z.ZodObject<{
1187
- schemaVersion: z.ZodLiteral<1>;
1201
+ schemaVersion: z.ZodLiteral<2>;
1188
1202
  sequence: z.ZodNumber;
1189
1203
  jobId: z.ZodString;
1190
1204
  status: z.ZodEnum<{
@@ -1219,7 +1233,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1219
1233
  }, z.core.$strict>;
1220
1234
  }, z.core.$strict>;
1221
1235
  }, z.core.$strict>, z.ZodObject<{
1222
- schemaVersion: z.ZodLiteral<1>;
1236
+ schemaVersion: z.ZodLiteral<2>;
1223
1237
  sequence: z.ZodNumber;
1224
1238
  jobId: z.ZodString;
1225
1239
  status: z.ZodEnum<{
@@ -1243,7 +1257,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1243
1257
  hasResult: z.ZodLiteral<true>;
1244
1258
  }, z.core.$strict>;
1245
1259
  }, z.core.$strict>, z.ZodObject<{
1246
- schemaVersion: z.ZodLiteral<1>;
1260
+ schemaVersion: z.ZodLiteral<2>;
1247
1261
  sequence: z.ZodNumber;
1248
1262
  jobId: z.ZodString;
1249
1263
  status: z.ZodEnum<{
@@ -1291,6 +1305,8 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1291
1305
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
1292
1306
  readonly TOOL_DENIED: "TOOL_DENIED";
1293
1307
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
1308
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
1309
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
1294
1310
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
1295
1311
  readonly PATCH_REJECTED: "PATCH_REJECTED";
1296
1312
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
package/dist/index.d.ts CHANGED
@@ -27,6 +27,8 @@ declare const ERROR_CODES: {
27
27
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
28
28
  readonly TOOL_DENIED: "TOOL_DENIED";
29
29
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
30
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
31
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
30
32
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
31
33
  readonly PATCH_REJECTED: "PATCH_REJECTED";
32
34
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -695,7 +697,7 @@ interface AgentJobCreateRequest {
695
697
  }
696
698
 
697
699
  interface AgentJobEventBase {
698
- readonly schemaVersion: 1;
700
+ readonly schemaVersion: 2;
699
701
  readonly sequence: number;
700
702
  readonly jobId: string;
701
703
  readonly status: AgentJobStatus;
@@ -714,6 +716,7 @@ type AgentJobEvent = (AgentJobEventBase & {
714
716
  }) | (AgentJobEventBase & {
715
717
  readonly type: "tool";
716
718
  readonly data: Readonly<{
719
+ turn: number;
717
720
  toolCallId: string;
718
721
  toolName: string;
719
722
  state: "started" | "succeeded" | "failed";
@@ -787,6 +790,8 @@ declare const agentCapabilitySnapshotSchema: z.ZodObject<{
787
790
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
788
791
  readonly TOOL_DENIED: "TOOL_DENIED";
789
792
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
793
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
794
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
790
795
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
791
796
  readonly PATCH_REJECTED: "PATCH_REJECTED";
792
797
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -836,6 +841,8 @@ declare const agentWorkspaceHealthSnapshotSchema: z.ZodObject<{
836
841
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
837
842
  readonly TOOL_DENIED: "TOOL_DENIED";
838
843
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
844
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
845
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
839
846
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
840
847
  readonly PATCH_REJECTED: "PATCH_REJECTED";
841
848
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -919,6 +926,8 @@ declare const agentJobSnapshotSchema: z.ZodObject<{
919
926
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
920
927
  readonly TOOL_DENIED: "TOOL_DENIED";
921
928
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
929
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
930
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
922
931
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
923
932
  readonly PATCH_REJECTED: "PATCH_REJECTED";
924
933
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -1008,6 +1017,8 @@ declare const agentJobResultResponseSchema: z.ZodObject<{
1008
1017
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
1009
1018
  readonly TOOL_DENIED: "TOOL_DENIED";
1010
1019
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
1020
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
1021
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
1011
1022
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
1012
1023
  readonly PATCH_REJECTED: "PATCH_REJECTED";
1013
1024
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -1044,7 +1055,7 @@ declare const agentJobResultResponseSchema: z.ZodObject<{
1044
1055
  }, z.core.$strict>>;
1045
1056
  }, z.core.$strict>;
1046
1057
  declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1047
- schemaVersion: z.ZodLiteral<1>;
1058
+ schemaVersion: z.ZodLiteral<2>;
1048
1059
  sequence: z.ZodNumber;
1049
1060
  jobId: z.ZodString;
1050
1061
  status: z.ZodEnum<{
@@ -1119,6 +1130,8 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1119
1130
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
1120
1131
  readonly TOOL_DENIED: "TOOL_DENIED";
1121
1132
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
1133
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
1134
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
1122
1135
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
1123
1136
  readonly PATCH_REJECTED: "PATCH_REJECTED";
1124
1137
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
@@ -1128,7 +1141,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1128
1141
  }, z.core.$strict>;
1129
1142
  }, z.core.$strict>;
1130
1143
  }, z.core.$strict>, z.ZodObject<{
1131
- schemaVersion: z.ZodLiteral<1>;
1144
+ schemaVersion: z.ZodLiteral<2>;
1132
1145
  sequence: z.ZodNumber;
1133
1146
  jobId: z.ZodString;
1134
1147
  status: z.ZodEnum<{
@@ -1152,7 +1165,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1152
1165
  message: z.ZodString;
1153
1166
  }, z.core.$strict>;
1154
1167
  }, z.core.$strict>, z.ZodObject<{
1155
- schemaVersion: z.ZodLiteral<1>;
1168
+ schemaVersion: z.ZodLiteral<2>;
1156
1169
  sequence: z.ZodNumber;
1157
1170
  jobId: z.ZodString;
1158
1171
  status: z.ZodEnum<{
@@ -1173,6 +1186,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1173
1186
  timestamp: z.ZodISODateTime;
1174
1187
  type: z.ZodLiteral<"tool">;
1175
1188
  data: z.ZodObject<{
1189
+ turn: z.ZodNumber;
1176
1190
  toolCallId: z.ZodString;
1177
1191
  toolName: z.ZodString;
1178
1192
  state: z.ZodEnum<{
@@ -1184,7 +1198,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1184
1198
  checkLabel: z.ZodOptional<z.ZodString>;
1185
1199
  }, z.core.$strict>;
1186
1200
  }, z.core.$strict>, z.ZodObject<{
1187
- schemaVersion: z.ZodLiteral<1>;
1201
+ schemaVersion: z.ZodLiteral<2>;
1188
1202
  sequence: z.ZodNumber;
1189
1203
  jobId: z.ZodString;
1190
1204
  status: z.ZodEnum<{
@@ -1219,7 +1233,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1219
1233
  }, z.core.$strict>;
1220
1234
  }, z.core.$strict>;
1221
1235
  }, z.core.$strict>, z.ZodObject<{
1222
- schemaVersion: z.ZodLiteral<1>;
1236
+ schemaVersion: z.ZodLiteral<2>;
1223
1237
  sequence: z.ZodNumber;
1224
1238
  jobId: z.ZodString;
1225
1239
  status: z.ZodEnum<{
@@ -1243,7 +1257,7 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1243
1257
  hasResult: z.ZodLiteral<true>;
1244
1258
  }, z.core.$strict>;
1245
1259
  }, z.core.$strict>, z.ZodObject<{
1246
- schemaVersion: z.ZodLiteral<1>;
1260
+ schemaVersion: z.ZodLiteral<2>;
1247
1261
  sequence: z.ZodNumber;
1248
1262
  jobId: z.ZodString;
1249
1263
  status: z.ZodEnum<{
@@ -1291,6 +1305,8 @@ declare const agentJobEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1291
1305
  readonly WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED";
1292
1306
  readonly TOOL_DENIED: "TOOL_DENIED";
1293
1307
  readonly TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID";
1308
+ readonly TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID";
1309
+ readonly TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT";
1294
1310
  readonly TOOL_PATH_DENIED: "TOOL_PATH_DENIED";
1295
1311
  readonly PATCH_REJECTED: "PATCH_REJECTED";
1296
1312
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
package/dist/index.js CHANGED
@@ -36,6 +36,8 @@ var ERROR_CODES = {
36
36
  WORKTREE_LOCAL_CHANGES_UNSUPPORTED: "WORKTREE_LOCAL_CHANGES_UNSUPPORTED",
37
37
  TOOL_DENIED: "TOOL_DENIED",
38
38
  TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID",
39
+ TOOL_ARGUMENTS_INVALID: "TOOL_ARGUMENTS_INVALID",
40
+ TOOL_CALL_ID_CONFLICT: "TOOL_CALL_ID_CONFLICT",
39
41
  TOOL_PATH_DENIED: "TOOL_PATH_DENIED",
40
42
  PATCH_REJECTED: "PATCH_REJECTED",
41
43
  VALIDATION_FAILED: "VALIDATION_FAILED",
@@ -425,7 +427,7 @@ var agentJobResultResponseSchema = z2.strictObject({
425
427
  }
426
428
  });
427
429
  var agentJobEventBaseSchema = z2.strictObject({
428
- schemaVersion: z2.literal(1),
430
+ schemaVersion: z2.literal(2),
429
431
  sequence: z2.number().int().positive(),
430
432
  jobId: z2.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/),
431
433
  status: z2.enum(AGENT_JOB_STATUSES),
@@ -443,6 +445,7 @@ var agentJobEventSchema = z2.discriminatedUnion("type", [
443
445
  agentJobEventBaseSchema.extend({
444
446
  type: z2.literal("tool"),
445
447
  data: z2.strictObject({
448
+ turn: z2.number().int().positive(),
446
449
  toolCallId: boundedString2(256),
447
450
  toolName: boundedString2(100),
448
451
  state: z2.enum(["started", "succeeded", "failed"]),
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/editor.ts","../src/model/agent.ts","../src/model/source-marker.ts","../src/protocol/endpoints.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_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","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","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 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","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\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 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(1),\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 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":";AAEO,IAAM,iBAAN,cAA6B,MAAM;AAAA,EAC/B;AAAA,EAET,YAAY,MAAiB,UAAU,MAAM,SAAwB;AACnE,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;;;ACVO,IAAM,cAAc;AAAA,EACzB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,aAAa;AAAA,EACb,yBAAyB;AAAA,EACzB,sBAAsB;AAAA,EACtB,+BAA+B;AAAA,EAC/B,mBAAmB;AAAA,EACnB,6BAA6B;AAAA,EAC7B,uBAAuB;AAAA,EACvB,YAAY;AAAA,EACZ,sBAAsB;AAAA,EACtB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,yBAAyB;AAAA,EACzB,gCAAgC;AAAA,EAChC,qBAAqB;AAAA,EACrB,kCAAkC;AAAA,EAClC,gCAAgC;AAAA,EAChC,oCAAoC;AAAA,EACpC,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,gBAAgB;AAClB;;;AChCA,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AACvB,IAAM,yBAAyB;AAC/B,IAAM,4BACJ;AACF,IAAM,wBAAwB,oBAAI,IAAI;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,qBAAqB;AAE3B,SAAS,YAAY,MAAsB;AACzC,SAAO,KAAK,YAAY,EAAE,WAAW,WAAW,EAAE;AACpD;AAEA,SAAS,SAAS,OAAe,eAA+B;AAC9D,SAAO,MAAM,UAAU,gBACnB,QACA,GAAG,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC;AACvD;AAEO,SAAS,gBAAgB,MAAuB;AACrD,QAAM,UAAU,YAAY,IAAI;AAEhC,SACE,sBAAsB,IAAI,OAAO,KACjC,QAAQ,SAAS,QAAQ,KACzB,QAAQ,SAAS,eAAe,KAChC,QAAQ,SAAS,QAAQ,KACzB,QAAQ,SAAS,OAAO;AAE5B;AAEO,SAAS,oBAAoB,OAAuB;AACzD,SAAO,MACJ,QAAQ,qBAAqB,wBAAwB,EACrD,QAAQ,kBAAkB,qBAAqB,EAC/C,QAAQ,gBAAgB,mBAAmB,EAC3C,QAAQ,wBAAwB,eAAe,EAC/C;AAAA,IACC;AAAA,IACA,CAAC,QAAQ,MAAc,WAAmB,kBAA0B;AAClE,YAAM,QAAQ,cAAc,GAAG,CAAC;AAChC,YAAM,SAAS,UAAU,OAAO,UAAU,OAAO,UAAU;AAC3D,aAAO,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,QAAQ,EAAE,aAAa,SAAS,QAAQ,EAAE;AAAA,IAClF;AAAA,EACF;AACJ;AAEA,SAAS,kBAAkB,KAAkB;AAC3C,MAAI,WAAW;AACf,MAAI,WAAW;AAEf,aAAW,CAAC,MAAM,KAAK,KAAK,IAAI,cAAc;AAC5C,QAAI,gBAAgB,IAAI,GAAG;AACzB,UAAI,aAAa,IAAI,MAAM,YAAY;AAAA,IACzC,OAAO;AACL,UAAI,aAAa,IAAI,MAAM,oBAAoB,KAAK,CAAC;AAAA,IACvD;AAAA,EACF;AAEA,MAAI,2CAA2C,KAAK,IAAI,IAAI,GAAG;AAC7D,QAAI,OAAO;AAAA,EACb;AAEA,SAAO,IAAI,SAAS;AACtB;AAEO,SAAS,YAAY,OAAe,SAAyB;AAClE,QAAM,UAAU,MAAM,KAAK;AAE3B,MAAI,+BAA+B,KAAK,OAAO,GAAG;AAChD,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,oBAAoB,OAAO;AAE9C,MAAI;AACF,UAAM,SAAS,IAAI,IAAI,YAAY,OAAO;AAC1C,UAAM,YAAY,kBAAkB,MAAM;AAC1C,UAAM,OAAO,IAAI,IAAI,OAAO;AAE5B,QAAI,CAAC,uBAAuB,KAAK,UAAU,KAAK,OAAO,WAAW,KAAK,QAAQ;AAC7E,aAAO,GAAG,OAAO,QAAQ,GAAG,OAAO,MAAM,GAAG,OAAO,IAAI;AAAA,IACzD;AAEA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO,SAAS,YAAY,kBAAkB;AAAA,EAChD;AACF;;;ACnEO,IAAM,yBAAyB;AAG/B,IAAM,oCAAoC;AAG1C,IAAM,wCAAwC;AAE9C,IAAM,oBAAoB,OAAO,OAAO,CAAC,SAAS,OAAO,CAAU;AAEnE,IAAM,+BAA+B,OAAO,OAAO;AAAA,EACxD;AAAA,EACA,GAAG;AACL,CAAU;;;ACzCH,IAAM,+BAA+B,CAAC,QAAQ,UAAU,QAAQ;;;AC8ChE,IAAM,uBAAuB,OAAO,OAAO;AAAA,EAChD,UAAU;AAAA,EACV,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,4BAA4B;AAAA,EAC5B,uBAAuB;AAAA,EACvB,gBAAgB;AAAA,EAChB,cAAc;AAChB,CAAuB;AA2EhB,IAAM,qBAAqB,OAAO,OAAO;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAIH,IAAM,0BAA0B,OAAO,OAAO;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAoBH,IAAM,yBAAyB,OAAO,OAAO;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAEH,IAAM,kCAAkC,OAAO,OAAO;AAAA,EAC3D,mBAAmB;AAAA,EACnB,mBAAmB,KAAK,OAAO;AACjC,CAAC;AAoBM,IAAM,0BAA0B,OAAO,OAAO;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAIH,IAAM,uBAAuB,OAAO,OAAO;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAU;;;AC5NH,IAAM,0BAA0B;AAEvC,IAAM,wBAAwB;AAQvB,SAAS,mBAAmB,QAA8B;AAC/D,SAAO,CAAC,OAAO,QAAQ,OAAO,OAAO,IAAI,GAAG,OAAO,OAAO,MAAM,CAAC,EAAE,KAAK,GAAG;AAC7E;AAEO,SAAS,kBAAkB,OAAgD;AAChF,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,sBAAsB,KAAK,KAAK;AAE9C,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,MAAM,CAAC;AACtB,QAAM,OAAO,OAAO,MAAM,CAAC,CAAC;AAC5B,QAAM,SAAS,OAAO,MAAM,CAAC,CAAC;AAE9B,MACE,WAAW,UACX,CAAC,OAAO,cAAc,IAAI,KAC1B,CAAC,OAAO,cAAc,MAAM,GAC5B;AACA,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,OAAO,EAAE,QAAQ,MAAM,OAAO,CAAC;AAC/C;;;ACtCO,IAAM,qBAAqB;AAC3B,IAAM,yBAAyB;AAE/B,IAAM,sBAAsB,OAAO,OAAO;AAAA,EAC/C,eAAe,GAAG,kBAAkB;AAAA,EACpC,YAAY,GAAG,kBAAkB;AAAA,EACjC,iBAAiB,GAAG,kBAAkB;AAAA,EACtC,sBAAsB,GAAG,kBAAkB;AAAA,EAC3C,WAAW,GAAG,kBAAkB;AAClC,CAAC;AAIM,SAAS,oBAAoB,OAAe,QAAgC;AACjF,SAAO,GAAG,oBAAoB,SAAS,IAAI,mBAAmB,KAAK,CAAC,IAAI,MAAM;AAChF;;;ACfA,SAAS,SAAS;AAUlB,IAAM,0BAA0B,EAAE,aAAa;AAAA,EAC7C,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACjC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAChC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,6BAA6B,wBACvC,OAAO;AAAA,EACN,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AACtC,CAAC,EACA,OAAO;AAEH,IAAM,0BAA0B,wBAAwB,OAAO;AAEtE,IAAM,kBAAkB,EACrB,OAAO,EACP,IAAI,CAAC,EACL,IAAI,EAAE,EACN,MAAM,8BAA8B;AAEvC,IAAM,gBAAgB,CAAC,YAAiC,EAAE,OAAO,EAAE,IAAI,OAAO;AAC9E,IAAM,kBAAkB,EAAE,aAAa;AAAA,EACrC,QAAQ,cAAc,GAAG,EAAE,SAAS;AAAA,EACpC,cAAc,cAAc,IAAK,EAAE,SAAS;AAAA,EAC5C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,QAAQ,EAAE,KAAK,CAAC,YAAY,eAAe,gBAAgB,MAAM,CAAC;AAAA,EAClE,YAAY,EAAE,KAAK,CAAC,SAAS,YAAY,eAAe,SAAS,CAAC;AACpE,CAAC;AACD,IAAM,yBAAyB,EAAE,aAAa;AAAA,EAC5C,UAAU,cAAc,IAAK;AAAA,EAC7B,cAAc,cAAc,IAAK;AAAA,EACjC,QAAQ,cAAc,IAAK,EAAE,SAAS;AAAA,EACtC,OAAO,cAAc,IAAK,EAAE,SAAS;AACvC,CAAC;AACD,IAAM,oBAAoB,EAAE,aAAa;AAAA,EACvC,cAAc,cAAc,IAAK;AAAA,EACjC,UAAU,EAAE,KAAK,CAAC,OAAO,KAAK,CAAC;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACrC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACnC,SAAS,cAAc,IAAM;AAAA,EAC7B,UAAU,EAAE,KAAK,CAAC,aAAa,cAAc,CAAC;AAChD,CAAC;AAEM,IAAM,iCAAiC,EAAE,aAAa;AAAA,EAC3D,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,iCAAiC;AAAA,EAC3E,QAAQ;AAAA,EACR,OAAO,EAAE,aAAa;AAAA,IACpB,WAAW,EAAE,QAAQ;AAAA,IACrB,SAAS,cAAc,EAAE,EAAE,SAAS;AAAA,IACpC,eAAe,cAAc,GAAG,EAAE,SAAS;AAAA,IAC3C,gBAAgB,EAAE,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAE;AAAA,IAClD,QAAQ,gBAAgB,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,SAAS,EAAE,aAAa;AAAA,IACtB,SAAS,cAAc,GAAG;AAAA,IAC1B,UAAU,cAAc,IAAK;AAAA,IAC7B,eAAe,cAAc,IAAK;AAAA,IAClC,aAAa,cAAc,IAAK,EAAE,SAAS;AAAA,IAC3C,MAAM,cAAc,GAAG,EAAE,SAAS;AAAA,IAClC,MAAM,EAAE,aAAa;AAAA,MACnB,GAAG,EAAE,OAAO;AAAA,MACZ,GAAG,EAAE,OAAO;AAAA,MACZ,OAAO,EAAE,OAAO,EAAE,YAAY;AAAA,MAC9B,QAAQ,EAAE,OAAO,EAAE,YAAY;AAAA,IACjC,CAAC;AAAA,EACH,CAAC;AAAA,EACD,QAAQ,EAAE,aAAa;AAAA,IACrB,YAAY,EAAE,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,GAAG;AAAA,IAC/C,aAAa,cAAc,IAAK,EAAE,SAAS;AAAA,IAC3C,cAAc,EAAE,MAAM,sBAAsB,EAAE,IAAI,GAAG;AAAA,IACrD,UAAU,EAAE,OAAO,cAAc,GAAG,GAAG,cAAc,IAAK,CAAC;AAAA,IAC3D,UAAU,EAAE,MAAM,cAAc,IAAK,CAAC,EAAE,IAAI,EAAE;AAAA,EAChD,CAAC;AAAA,EACD,MAAM,kBAAkB,SAAS;AAAA,EACjC,UAAU,EAAE,MAAM,cAAc,IAAK,CAAC,EAAE,IAAI,EAAE;AAChD,CAAC;AAEM,IAAM,8BAA8B,EACxC,aAAa;AAAA,EACZ,eAAe,EAAE,QAAQ,CAAC;AAAA,EAC1B,IAAI,cAAc,GAAG;AAAA,EACrB,QAAQ,EAAE,KAAK,iBAAiB;AAAA,EAChC,MAAM,EAAE,aAAa;AAAA,IACnB,KAAK,cAAc,IAAK;AAAA,IACxB,UAAU,cAAc,IAAK;AAAA,IAC7B,OAAO,cAAc,IAAK;AAAA,IAC1B,eAAe,EAAE,OAAO,EAAE,YAAY;AAAA,IACtC,gBAAgB,EAAE,OAAO,EAAE,YAAY;AAAA,IACvC,kBAAkB,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,CAAC;AAAA,EACD,SAAS,EAAE,MAAM,8BAA8B,EAAE,IAAI,CAAC,EAAE,IAAI,sBAAsB;AAAA,EAClF,WAAW,EAAE,IAAI,SAAS;AAC5B,CAAC,EACA,YAAY,CAAC,YAAY,YAAY;AACpC,QAAM,QAAQ,WAAW,QAAQ;AAAA,IAC/B,CAAC,YAAY,WAAW,aAAa,OAAO,YAAY;AAAA,IACxD;AAAA,EACF;AAEA,MAAI,QAAQ,uCAAuC;AACjD,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,CAAC,SAAS;AAAA,IAClB,CAAC;AAAA,EACH;AACF,CAAC;AAEI,IAAM,+BAA+B,EAAE,aAAa;AAAA,EACzD,mBAAmB;AAAA,EACnB,gBAAgB;AAClB,CAAC;AAEM,IAAM,oCAAoC,EAAE,aAAa,CAAC,CAAC;AAE3D,IAAM,8BAA8B,EAAE,aAAa;AAAA,EACxD,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,qBAAqB,EAAE,QAAQ,IAAI;AAAA,EACnC,iBAAiB,EACd,KAAK,CAAC,iBAAiB,uBAAuB,CAAC,EAC/C,QAAQ,eAAe;AAC5B,CAAC;AAEM,IAAM,8BAA8B,EAAE,aAAa,CAAC,CAAC;;;ACxI5D,SAAS,KAAAA,UAAS;AAWlB,IAAMC,mBAAkBC,GACrB,OAAO,EACP,IAAI,CAAC,EACL,IAAI,EAAE,EACN,MAAM,8BAA8B;AACvC,IAAMC,iBAAgB,CAAC,YAAiCD,GAAE,OAAO,EAAE,IAAI,OAAO;AAC9E,IAAM,kBAAkBA,GAAE,KAAK,WAAW;AAEnC,IAAM,gCAAgCA,GAAE,aAAa;AAAA,EAC1D,mBAAmBD;AAAA,EACnB,eAAeE,eAAc,GAAG;AAAA,EAChC,gBAAgBF;AAAA,EAChB,YAAYE,eAAc,GAAG;AAAA,EAC7B,UAAUD,GAAE,KAAK,CAAC,aAAa,kBAAkB,CAAC;AAAA,EAClD,OAAOA,GAAE,KAAK,uBAAuB;AAAA,EACrC,eAAeA,GAAE,QAAQ;AAAA,EACzB,gBAAgBA,GAAE,QAAQ;AAAA,EAC1B,aAAaA,GAAE,QAAQ;AAAA,EACvB,wBAAwBA,GAAE,QAAQ;AAAA,EAClC,WAAWA,GAAE,QAAQ;AAAA,EACrB,WAAWA,GAAE,IAAI,SAAS,EAAE,SAAS;AAAA,EACrC,WAAW,gBAAgB,SAAS;AACtC,CAAC;AAEM,IAAM,qCAAqCA,GAC/C,aAAa;AAAA,EACZ,OAAOA,GAAE,KAAK,sBAAsB;AAAA,EACpC,WAAWA,GAAE,IAAI,SAAS;AAAA,EAC1B,SAASA,GAAE,aAAa;AAAA,IACtB,QAAQA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACrC,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACvC,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACxC,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACzC,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACtC,CAAC;AAAA,EACD,wBAAwBA,GAAE,QAAQ;AAAA,EAClC,WAAW,gBAAgB,SAAS;AACtC,CAAC,EACA;AAAA,EACC,CAAC,EAAE,OAAO,SAAS,wBAAwB,UAAU,MAAM;AACzD,UAAM,sBACJ,QAAQ,SAAS,QAAQ,UACzB,QAAQ,SAAS,QAAQ,YACzB,QAAQ,SAAS,QAAQ,aACzB,QAAQ,SAAS,QAAQ,cACzB,QAAQ,SAAS,QAAQ,SAAS,QAAQ,WAAW,QAAQ;AAE/D,QAAI,CAAC,qBAAqB;AACxB,aAAO;AAAA,IACT;AAEA,QAAI,UAAU,SAAS;AACrB,aACE,QAAQ,UAAU,KAAK,CAAC,0BAA0B,cAAc;AAAA,IAEpE;AAEA,QAAI,UAAU,oBAAoB;AAChC,aACE,QAAQ,QAAQ,KAChB,QAAQ,eAAe,KACvB,0BACA,cAAc;AAAA,IAElB;AAEA,WAAO,CAAC,0BAA0B,cAAc;AAAA,EAClD;AAAA,EACA,EAAE,SAAS,kDAAkD;AAC/D;AAEK,IAAM,yBAAyBA,GAAE,aAAa;AAAA,EACnD,cAAcC,eAAc,IAAK;AAAA,EACjC,MAAMD,GAAE,KAAK,uBAAuB;AAAA,EACpC,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAC1C,CAAC;AAEM,IAAM,yBAAyBA,GAAE,aAAa;AAAA,EACnD,SAASD;AAAA,EACT,OAAOE,eAAc,GAAG;AAAA,EACxB,QAAQD,GAAE,KAAK,oBAAoB;AAAA,EACnC,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACzC,QAAQC,eAAc,GAAM;AAC9B,CAAC;AAEM,IAAM,yBAAyBD,GAAE,aAAa;AAAA,EACnD,OAAOA,GACJ,OAAO,EACP,IAAI,EAAE,EACN,IAAI,GAAG,EACP,MAAM,kBAAkB;AAAA,EAC3B,QAAQA,GAAE,KAAK,kBAAkB;AAAA,EACjC,mBAAmBD;AAAA,EACnB,eAAeE,eAAc,GAAG;AAAA,EAChC,gBAAgBF;AAAA,EAChB,YAAYE,eAAc,GAAG;AAAA,EAC7B,cAAcA,eAAc,IAAK;AAAA,EACjC,WAAWD,GAAE,IAAI,SAAS;AAAA,EAC1B,WAAWA,GAAE,IAAI,SAAS;AAAA,EAC1B,WAAWA,GAAE,QAAQ;AAAA,EACrB,UAAUA,GAAE,QAAQ;AAAA,EACpB,WAAWA,GAAE,QAAQ;AAAA,EACrB,WAAW,gBAAgB,SAAS;AACtC,CAAC;AAEM,IAAM,uBAAuBA,GAAE,aAAa;AAAA,EACjD,OAAOA,GACJ,OAAO,EACP,IAAI,EAAE,EACN,IAAI,GAAG,EACP,MAAM,kBAAkB;AAAA,EAC3B,SAASC,eAAc,GAAM;AAAA,EAC7B,MAAMA,eAAc,GAAS;AAAA,EAC7B,OAAOD,GAAE,MAAM,sBAAsB,EAAE,IAAI,GAAG;AAAA,EAC9C,QAAQA,GAAE,MAAM,sBAAsB,EAAE,IAAI,GAAG;AACjD,CAAC;AAEM,IAAM,+BAA+BA,GACzC,aAAa;AAAA,EACZ,UAAU;AAAA,EACV,QAAQ,qBAAqB,SAAS;AACxC,CAAC,EACA,YAAY,CAAC,OAAO,YAAY;AAC/B,MAAI,MAAM,WAAW,UAAa,MAAM,OAAO,UAAU,MAAM,SAAS,OAAO;AAC7E,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,CAAC,UAAU,OAAO;AAAA,IAC1B,CAAC;AAAA,EACH;AACF,CAAC;AAEH,IAAM,0BAA0BA,GAAE,aAAa;AAAA,EAC7C,eAAeA,GAAE,QAAQ,CAAC;AAAA,EAC1B,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpC,OAAOA,GACJ,OAAO,EACP,IAAI,EAAE,EACN,IAAI,GAAG,EACP,MAAM,kBAAkB;AAAA,EAC3B,QAAQA,GAAE,KAAK,kBAAkB;AAAA,EACjC,WAAWA,GAAE,IAAI,SAAS;AAC5B,CAAC;AAEM,IAAM,sBAAsBA,GAChC,mBAAmB,QAAQ;AAAA,EAC1B,wBAAwB,OAAO;AAAA,IAC7B,MAAMA,GAAE,QAAQ,UAAU;AAAA,IAC1B,MAAMA,GAAE,aAAa,EAAE,UAAU,uBAAuB,CAAC;AAAA,EAC3D,CAAC;AAAA,EACD,wBAAwB,OAAO;AAAA,IAC7B,MAAMA,GAAE,QAAQ,OAAO;AAAA,IACvB,MAAMA,GAAE,aAAa,EAAE,SAASC,eAAc,IAAK,EAAE,CAAC;AAAA,EACxD,CAAC;AAAA,EACD,wBAAwB,OAAO;AAAA,IAC7B,MAAMD,GAAE,QAAQ,MAAM;AAAA,IACtB,MAAMA,GAAE,aAAa;AAAA,MACnB,YAAYC,eAAc,GAAG;AAAA,MAC7B,UAAUA,eAAc,GAAG;AAAA,MAC3B,OAAOD,GAAE,KAAK,CAAC,WAAW,aAAa,QAAQ,CAAC;AAAA,MAChD,cAAcC,eAAc,IAAK,EAAE,SAAS;AAAA,MAC5C,YAAYA,eAAc,GAAG,EAAE,SAAS;AAAA,IAC1C,CAAC;AAAA,EACH,CAAC;AAAA,EACD,wBAAwB,OAAO;AAAA,IAC7B,MAAMD,GAAE,QAAQ,OAAO;AAAA,IACvB,MAAMA,GAAE,aAAa,EAAE,QAAQ,uBAAuB,CAAC;AAAA,EACzD,CAAC;AAAA,EACD,wBAAwB,OAAO;AAAA,IAC7B,MAAMA,GAAE,QAAQ,cAAc;AAAA,IAC9B,MAAMA,GAAE,aAAa,EAAE,WAAWA,GAAE,QAAQ,IAAI,EAAE,CAAC;AAAA,EACrD,CAAC;AAAA,EACD,wBAAwB,OAAO;AAAA,IAC7B,MAAMA,GAAE,QAAQ,OAAO;AAAA,IACvB,MAAMA,GAAE,aAAa;AAAA,MACnB,MAAM;AAAA,MACN,SAASC,eAAc,IAAK;AAAA,IAC9B,CAAC;AAAA,EACH,CAAC;AACH,CAAC,EACA,YAAY,CAAC,OAAO,YAAY;AAC/B,MAAI,MAAM,SAAS,YAAY;AAC7B;AAAA,EACF;AAEA,MAAI,MAAM,KAAK,SAAS,UAAU,MAAM,OAAO;AAC7C,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,CAAC,QAAQ,YAAY,OAAO;AAAA,IACpC,CAAC;AAAA,EACH;AAEA,MAAI,MAAM,KAAK,SAAS,WAAW,MAAM,QAAQ;AAC/C,YAAQ,SAAS;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,CAAC,QAAQ,YAAY,QAAQ;AAAA,IACrC,CAAC;AAAA,EACH;AACF,CAAC;;;ACpNI,IAAM,2BACX;","names":["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/editor.ts","../src/model/agent.ts","../src/model/source-marker.ts","../src/protocol/endpoints.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","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","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 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","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\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 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","profileIdSchema","z","boundedString"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spotpatch/shared",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Shared immutable models and protocol definitions for SpotPatch.",
5
5
  "license": "MIT",
6
6
  "repository": {